x86/speculation: Fix redundant MDS mitigation message
[linux-2.6-block.git] / drivers / net / ethernet / broadcom / tg3.c
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
76 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
77 {
78         return test_bit(flag, bits);
79 }
80
81 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
82 {
83         set_bit(flag, bits);
84 }
85
86 static 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 #define TG3_MAJ_NUM                     3
100 #define TG3_MIN_NUM                     137
101 #define DRV_MODULE_VERSION      \
102         __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
103 #define DRV_MODULE_RELDATE      "May 11, 2014"
104
105 #define RESET_KIND_SHUTDOWN     0
106 #define RESET_KIND_INIT         1
107 #define RESET_KIND_SUSPEND      2
108
109 #define TG3_DEF_RX_MODE         0
110 #define TG3_DEF_TX_MODE         0
111 #define TG3_DEF_MSG_ENABLE        \
112         (NETIF_MSG_DRV          | \
113          NETIF_MSG_PROBE        | \
114          NETIF_MSG_LINK         | \
115          NETIF_MSG_TIMER        | \
116          NETIF_MSG_IFDOWN       | \
117          NETIF_MSG_IFUP         | \
118          NETIF_MSG_RX_ERR       | \
119          NETIF_MSG_TX_ERR)
120
121 #define TG3_GRC_LCLCTL_PWRSW_DELAY      100
122
123 /* length of time before we decide the hardware is borked,
124  * and dev->tx_timeout() should be called to fix the problem
125  */
126
127 #define TG3_TX_TIMEOUT                  (5 * HZ)
128
129 /* hardware minimum and maximum for a single frame's data payload */
130 #define TG3_MIN_MTU                     ETH_ZLEN
131 #define TG3_MAX_MTU(tp) \
132         (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
133
134 /* These numbers seem to be hard coded in the NIC firmware somehow.
135  * You can't change the ring sizes, but you can change where you place
136  * them in the NIC onboard memory.
137  */
138 #define TG3_RX_STD_RING_SIZE(tp) \
139         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
140          TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
141 #define TG3_DEF_RX_RING_PENDING         200
142 #define TG3_RX_JMB_RING_SIZE(tp) \
143         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
144          TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
145 #define TG3_DEF_RX_JUMBO_RING_PENDING   100
146
147 /* Do not place this n-ring entries value into the tp struct itself,
148  * we really want to expose these constants to GCC so that modulo et
149  * al.  operations are done with shifts and masks instead of with
150  * hw multiply/modulo instructions.  Another solution would be to
151  * replace things like '% foo' with '& (foo - 1)'.
152  */
153
154 #define TG3_TX_RING_SIZE                512
155 #define TG3_DEF_TX_RING_PENDING         (TG3_TX_RING_SIZE - 1)
156
157 #define TG3_RX_STD_RING_BYTES(tp) \
158         (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
159 #define TG3_RX_JMB_RING_BYTES(tp) \
160         (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
161 #define TG3_RX_RCB_RING_BYTES(tp) \
162         (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
163 #define TG3_TX_RING_BYTES       (sizeof(struct tg3_tx_buffer_desc) * \
164                                  TG3_TX_RING_SIZE)
165 #define NEXT_TX(N)              (((N) + 1) & (TG3_TX_RING_SIZE - 1))
166
167 #define TG3_DMA_BYTE_ENAB               64
168
169 #define TG3_RX_STD_DMA_SZ               1536
170 #define TG3_RX_JMB_DMA_SZ               9046
171
172 #define TG3_RX_DMA_TO_MAP_SZ(x)         ((x) + TG3_DMA_BYTE_ENAB)
173
174 #define TG3_RX_STD_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
175 #define TG3_RX_JMB_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
176
177 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
178         (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
179
180 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
181         (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
182
183 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
184  * that are at least dword aligned when used in PCIX mode.  The driver
185  * works around this bug by double copying the packet.  This workaround
186  * is built into the normal double copy length check for efficiency.
187  *
188  * However, the double copy is only necessary on those architectures
189  * where unaligned memory accesses are inefficient.  For those architectures
190  * where unaligned memory accesses incur little penalty, we can reintegrate
191  * the 5701 in the normal rx path.  Doing so saves a device structure
192  * dereference by hardcoding the double copy threshold in place.
193  */
194 #define TG3_RX_COPY_THRESHOLD           256
195 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
196         #define TG3_RX_COPY_THRESH(tp)  TG3_RX_COPY_THRESHOLD
197 #else
198         #define TG3_RX_COPY_THRESH(tp)  ((tp)->rx_copy_thresh)
199 #endif
200
201 #if (NET_IP_ALIGN != 0)
202 #define TG3_RX_OFFSET(tp)       ((tp)->rx_offset)
203 #else
204 #define TG3_RX_OFFSET(tp)       (NET_SKB_PAD)
205 #endif
206
207 /* minimum number of free TX descriptors required to wake up TX process */
208 #define TG3_TX_WAKEUP_THRESH(tnapi)             ((tnapi)->tx_pending / 4)
209 #define TG3_TX_BD_DMA_MAX_2K            2048
210 #define TG3_TX_BD_DMA_MAX_4K            4096
211
212 #define TG3_RAW_IP_ALIGN 2
213
214 #define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3)
215 #define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1)
216
217 #define TG3_FW_UPDATE_TIMEOUT_SEC       5
218 #define TG3_FW_UPDATE_FREQ_SEC          (TG3_FW_UPDATE_TIMEOUT_SEC / 2)
219
220 #define FIRMWARE_TG3            "tigon/tg3.bin"
221 #define FIRMWARE_TG357766       "tigon/tg357766.bin"
222 #define FIRMWARE_TG3TSO         "tigon/tg3_tso.bin"
223 #define FIRMWARE_TG3TSO5        "tigon/tg3_tso5.bin"
224
225 static char version[] =
226         DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")";
227
228 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
229 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
230 MODULE_LICENSE("GPL");
231 MODULE_VERSION(DRV_MODULE_VERSION);
232 MODULE_FIRMWARE(FIRMWARE_TG3);
233 MODULE_FIRMWARE(FIRMWARE_TG3TSO);
234 MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
235
236 static int tg3_debug = -1;      /* -1 == use TG3_DEF_MSG_ENABLE as value */
237 module_param(tg3_debug, int, 0);
238 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
239
240 #define TG3_DRV_DATA_FLAG_10_100_ONLY   0x0001
241 #define TG3_DRV_DATA_FLAG_5705_10_100   0x0002
242
243 static const struct pci_device_id tg3_pci_tbl[] = {
244         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
245         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
246         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
247         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
248         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
249         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
250         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
251         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
252         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
253         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
254         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
255         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
256         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
257         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
258         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
259         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
260         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
261         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
262         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
263          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
264                         TG3_DRV_DATA_FLAG_5705_10_100},
265         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2),
266          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
267                         TG3_DRV_DATA_FLAG_5705_10_100},
268         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
269         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
270          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
271                         TG3_DRV_DATA_FLAG_5705_10_100},
272         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
273         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
274         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
275         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
276         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
277         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
278          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
279         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
280         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
281         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
282         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
283         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
284          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
285         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
286         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
287         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
288         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
289         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
290         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
291         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
292         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
293                         PCI_VENDOR_ID_LENOVO,
294                         TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
295          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
296         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
297         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
298          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
299         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
300         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
301         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
302         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
303         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
304         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
305         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
306         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
307         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
308         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
309         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
310         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
311         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
312         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
313         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
314         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
315         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
316         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
317         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
318                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
319          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
320         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
321                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
322          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
323         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
324         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
325         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
326          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
327         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
328         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
329         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
330         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
331         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
332         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
333         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
334         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
335         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
336          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
337         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
338          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
339         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
340         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
341         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
342         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
343         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)},
344         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)},
345         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)},
346         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)},
347         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)},
348         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)},
349         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
350         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},
351         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
352         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
353         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
354         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
355         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
356         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
357         {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
358         {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
359         {}
360 };
361
362 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
363
364 static const struct {
365         const char string[ETH_GSTRING_LEN];
366 } ethtool_stats_keys[] = {
367         { "rx_octets" },
368         { "rx_fragments" },
369         { "rx_ucast_packets" },
370         { "rx_mcast_packets" },
371         { "rx_bcast_packets" },
372         { "rx_fcs_errors" },
373         { "rx_align_errors" },
374         { "rx_xon_pause_rcvd" },
375         { "rx_xoff_pause_rcvd" },
376         { "rx_mac_ctrl_rcvd" },
377         { "rx_xoff_entered" },
378         { "rx_frame_too_long_errors" },
379         { "rx_jabbers" },
380         { "rx_undersize_packets" },
381         { "rx_in_length_errors" },
382         { "rx_out_length_errors" },
383         { "rx_64_or_less_octet_packets" },
384         { "rx_65_to_127_octet_packets" },
385         { "rx_128_to_255_octet_packets" },
386         { "rx_256_to_511_octet_packets" },
387         { "rx_512_to_1023_octet_packets" },
388         { "rx_1024_to_1522_octet_packets" },
389         { "rx_1523_to_2047_octet_packets" },
390         { "rx_2048_to_4095_octet_packets" },
391         { "rx_4096_to_8191_octet_packets" },
392         { "rx_8192_to_9022_octet_packets" },
393
394         { "tx_octets" },
395         { "tx_collisions" },
396
397         { "tx_xon_sent" },
398         { "tx_xoff_sent" },
399         { "tx_flow_control" },
400         { "tx_mac_errors" },
401         { "tx_single_collisions" },
402         { "tx_mult_collisions" },
403         { "tx_deferred" },
404         { "tx_excessive_collisions" },
405         { "tx_late_collisions" },
406         { "tx_collide_2times" },
407         { "tx_collide_3times" },
408         { "tx_collide_4times" },
409         { "tx_collide_5times" },
410         { "tx_collide_6times" },
411         { "tx_collide_7times" },
412         { "tx_collide_8times" },
413         { "tx_collide_9times" },
414         { "tx_collide_10times" },
415         { "tx_collide_11times" },
416         { "tx_collide_12times" },
417         { "tx_collide_13times" },
418         { "tx_collide_14times" },
419         { "tx_collide_15times" },
420         { "tx_ucast_packets" },
421         { "tx_mcast_packets" },
422         { "tx_bcast_packets" },
423         { "tx_carrier_sense_errors" },
424         { "tx_discards" },
425         { "tx_errors" },
426
427         { "dma_writeq_full" },
428         { "dma_write_prioq_full" },
429         { "rxbds_empty" },
430         { "rx_discards" },
431         { "rx_errors" },
432         { "rx_threshold_hit" },
433
434         { "dma_readq_full" },
435         { "dma_read_prioq_full" },
436         { "tx_comp_queue_full" },
437
438         { "ring_set_send_prod_index" },
439         { "ring_status_update" },
440         { "nic_irqs" },
441         { "nic_avoided_irqs" },
442         { "nic_tx_threshold_hit" },
443
444         { "mbuf_lwm_thresh_hit" },
445 };
446
447 #define TG3_NUM_STATS   ARRAY_SIZE(ethtool_stats_keys)
448 #define TG3_NVRAM_TEST          0
449 #define TG3_LINK_TEST           1
450 #define TG3_REGISTER_TEST       2
451 #define TG3_MEMORY_TEST         3
452 #define TG3_MAC_LOOPB_TEST      4
453 #define TG3_PHY_LOOPB_TEST      5
454 #define TG3_EXT_LOOPB_TEST      6
455 #define TG3_INTERRUPT_TEST      7
456
457
458 static const struct {
459         const char string[ETH_GSTRING_LEN];
460 } ethtool_test_keys[] = {
461         [TG3_NVRAM_TEST]        = { "nvram test        (online) " },
462         [TG3_LINK_TEST]         = { "link test         (online) " },
463         [TG3_REGISTER_TEST]     = { "register test     (offline)" },
464         [TG3_MEMORY_TEST]       = { "memory test       (offline)" },
465         [TG3_MAC_LOOPB_TEST]    = { "mac loopback test (offline)" },
466         [TG3_PHY_LOOPB_TEST]    = { "phy loopback test (offline)" },
467         [TG3_EXT_LOOPB_TEST]    = { "ext loopback test (offline)" },
468         [TG3_INTERRUPT_TEST]    = { "interrupt test    (offline)" },
469 };
470
471 #define TG3_NUM_TEST    ARRAY_SIZE(ethtool_test_keys)
472
473
474 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
475 {
476         writel(val, tp->regs + off);
477 }
478
479 static u32 tg3_read32(struct tg3 *tp, u32 off)
480 {
481         return readl(tp->regs + off);
482 }
483
484 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
485 {
486         writel(val, tp->aperegs + off);
487 }
488
489 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
490 {
491         return readl(tp->aperegs + off);
492 }
493
494 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
495 {
496         unsigned long flags;
497
498         spin_lock_irqsave(&tp->indirect_lock, flags);
499         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
500         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
501         spin_unlock_irqrestore(&tp->indirect_lock, flags);
502 }
503
504 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
505 {
506         writel(val, tp->regs + off);
507         readl(tp->regs + off);
508 }
509
510 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
511 {
512         unsigned long flags;
513         u32 val;
514
515         spin_lock_irqsave(&tp->indirect_lock, flags);
516         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
517         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
518         spin_unlock_irqrestore(&tp->indirect_lock, flags);
519         return val;
520 }
521
522 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
523 {
524         unsigned long flags;
525
526         if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
527                 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
528                                        TG3_64BIT_REG_LOW, val);
529                 return;
530         }
531         if (off == TG3_RX_STD_PROD_IDX_REG) {
532                 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
533                                        TG3_64BIT_REG_LOW, val);
534                 return;
535         }
536
537         spin_lock_irqsave(&tp->indirect_lock, flags);
538         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
539         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
540         spin_unlock_irqrestore(&tp->indirect_lock, flags);
541
542         /* In indirect mode when disabling interrupts, we also need
543          * to clear the interrupt bit in the GRC local ctrl register.
544          */
545         if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
546             (val == 0x1)) {
547                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
548                                        tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
549         }
550 }
551
552 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
553 {
554         unsigned long flags;
555         u32 val;
556
557         spin_lock_irqsave(&tp->indirect_lock, flags);
558         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
559         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
560         spin_unlock_irqrestore(&tp->indirect_lock, flags);
561         return val;
562 }
563
564 /* usec_wait specifies the wait time in usec when writing to certain registers
565  * where it is unsafe to read back the register without some delay.
566  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
567  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
568  */
569 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
570 {
571         if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
572                 /* Non-posted methods */
573                 tp->write32(tp, off, val);
574         else {
575                 /* Posted method */
576                 tg3_write32(tp, off, val);
577                 if (usec_wait)
578                         udelay(usec_wait);
579                 tp->read32(tp, off);
580         }
581         /* Wait again after the read for the posted method to guarantee that
582          * the wait time is met.
583          */
584         if (usec_wait)
585                 udelay(usec_wait);
586 }
587
588 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
589 {
590         tp->write32_mbox(tp, off, val);
591         if (tg3_flag(tp, FLUSH_POSTED_WRITES) ||
592             (!tg3_flag(tp, MBOX_WRITE_REORDER) &&
593              !tg3_flag(tp, ICH_WORKAROUND)))
594                 tp->read32_mbox(tp, off);
595 }
596
597 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
598 {
599         void __iomem *mbox = tp->regs + off;
600         writel(val, mbox);
601         if (tg3_flag(tp, TXD_MBOX_HWBUG))
602                 writel(val, mbox);
603         if (tg3_flag(tp, MBOX_WRITE_REORDER) ||
604             tg3_flag(tp, FLUSH_POSTED_WRITES))
605                 readl(mbox);
606 }
607
608 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
609 {
610         return readl(tp->regs + off + GRCMBOX_BASE);
611 }
612
613 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
614 {
615         writel(val, tp->regs + off + GRCMBOX_BASE);
616 }
617
618 #define tw32_mailbox(reg, val)          tp->write32_mbox(tp, reg, val)
619 #define tw32_mailbox_f(reg, val)        tw32_mailbox_flush(tp, (reg), (val))
620 #define tw32_rx_mbox(reg, val)          tp->write32_rx_mbox(tp, reg, val)
621 #define tw32_tx_mbox(reg, val)          tp->write32_tx_mbox(tp, reg, val)
622 #define tr32_mailbox(reg)               tp->read32_mbox(tp, reg)
623
624 #define tw32(reg, val)                  tp->write32(tp, reg, val)
625 #define tw32_f(reg, val)                _tw32_flush(tp, (reg), (val), 0)
626 #define tw32_wait_f(reg, val, us)       _tw32_flush(tp, (reg), (val), (us))
627 #define tr32(reg)                       tp->read32(tp, reg)
628
629 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
630 {
631         unsigned long flags;
632
633         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
634             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
635                 return;
636
637         spin_lock_irqsave(&tp->indirect_lock, flags);
638         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
639                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
640                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
641
642                 /* Always leave this as zero. */
643                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
644         } else {
645                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
646                 tw32_f(TG3PCI_MEM_WIN_DATA, val);
647
648                 /* Always leave this as zero. */
649                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
650         }
651         spin_unlock_irqrestore(&tp->indirect_lock, flags);
652 }
653
654 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
655 {
656         unsigned long flags;
657
658         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
659             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
660                 *val = 0;
661                 return;
662         }
663
664         spin_lock_irqsave(&tp->indirect_lock, flags);
665         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
666                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
667                 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
668
669                 /* Always leave this as zero. */
670                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
671         } else {
672                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
673                 *val = tr32(TG3PCI_MEM_WIN_DATA);
674
675                 /* Always leave this as zero. */
676                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
677         }
678         spin_unlock_irqrestore(&tp->indirect_lock, flags);
679 }
680
681 static void tg3_ape_lock_init(struct tg3 *tp)
682 {
683         int i;
684         u32 regbase, bit;
685
686         if (tg3_asic_rev(tp) == ASIC_REV_5761)
687                 regbase = TG3_APE_LOCK_GRANT;
688         else
689                 regbase = TG3_APE_PER_LOCK_GRANT;
690
691         /* Make sure the driver hasn't any stale locks. */
692         for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
693                 switch (i) {
694                 case TG3_APE_LOCK_PHY0:
695                 case TG3_APE_LOCK_PHY1:
696                 case TG3_APE_LOCK_PHY2:
697                 case TG3_APE_LOCK_PHY3:
698                         bit = APE_LOCK_GRANT_DRIVER;
699                         break;
700                 default:
701                         if (!tp->pci_fn)
702                                 bit = APE_LOCK_GRANT_DRIVER;
703                         else
704                                 bit = 1 << tp->pci_fn;
705                 }
706                 tg3_ape_write32(tp, regbase + 4 * i, bit);
707         }
708
709 }
710
711 static int tg3_ape_lock(struct tg3 *tp, int locknum)
712 {
713         int i, off;
714         int ret = 0;
715         u32 status, req, gnt, bit;
716
717         if (!tg3_flag(tp, ENABLE_APE))
718                 return 0;
719
720         switch (locknum) {
721         case TG3_APE_LOCK_GPIO:
722                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
723                         return 0;
724                 /* fall through */
725         case TG3_APE_LOCK_GRC:
726         case TG3_APE_LOCK_MEM:
727                 if (!tp->pci_fn)
728                         bit = APE_LOCK_REQ_DRIVER;
729                 else
730                         bit = 1 << tp->pci_fn;
731                 break;
732         case TG3_APE_LOCK_PHY0:
733         case TG3_APE_LOCK_PHY1:
734         case TG3_APE_LOCK_PHY2:
735         case TG3_APE_LOCK_PHY3:
736                 bit = APE_LOCK_REQ_DRIVER;
737                 break;
738         default:
739                 return -EINVAL;
740         }
741
742         if (tg3_asic_rev(tp) == ASIC_REV_5761) {
743                 req = TG3_APE_LOCK_REQ;
744                 gnt = TG3_APE_LOCK_GRANT;
745         } else {
746                 req = TG3_APE_PER_LOCK_REQ;
747                 gnt = TG3_APE_PER_LOCK_GRANT;
748         }
749
750         off = 4 * locknum;
751
752         tg3_ape_write32(tp, req + off, bit);
753
754         /* Wait for up to 1 millisecond to acquire lock. */
755         for (i = 0; i < 100; i++) {
756                 status = tg3_ape_read32(tp, gnt + off);
757                 if (status == bit)
758                         break;
759                 if (pci_channel_offline(tp->pdev))
760                         break;
761
762                 udelay(10);
763         }
764
765         if (status != bit) {
766                 /* Revoke the lock request. */
767                 tg3_ape_write32(tp, gnt + off, bit);
768                 ret = -EBUSY;
769         }
770
771         return ret;
772 }
773
774 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
775 {
776         u32 gnt, bit;
777
778         if (!tg3_flag(tp, ENABLE_APE))
779                 return;
780
781         switch (locknum) {
782         case TG3_APE_LOCK_GPIO:
783                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
784                         return;
785                 /* fall through */
786         case TG3_APE_LOCK_GRC:
787         case TG3_APE_LOCK_MEM:
788                 if (!tp->pci_fn)
789                         bit = APE_LOCK_GRANT_DRIVER;
790                 else
791                         bit = 1 << tp->pci_fn;
792                 break;
793         case TG3_APE_LOCK_PHY0:
794         case TG3_APE_LOCK_PHY1:
795         case TG3_APE_LOCK_PHY2:
796         case TG3_APE_LOCK_PHY3:
797                 bit = APE_LOCK_GRANT_DRIVER;
798                 break;
799         default:
800                 return;
801         }
802
803         if (tg3_asic_rev(tp) == ASIC_REV_5761)
804                 gnt = TG3_APE_LOCK_GRANT;
805         else
806                 gnt = TG3_APE_PER_LOCK_GRANT;
807
808         tg3_ape_write32(tp, gnt + 4 * locknum, bit);
809 }
810
811 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
812 {
813         u32 apedata;
814
815         while (timeout_us) {
816                 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
817                         return -EBUSY;
818
819                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
820                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
821                         break;
822
823                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
824
825                 udelay(10);
826                 timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
827         }
828
829         return timeout_us ? 0 : -EBUSY;
830 }
831
832 #ifdef CONFIG_TIGON3_HWMON
833 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
834 {
835         u32 i, apedata;
836
837         for (i = 0; i < timeout_us / 10; i++) {
838                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
839
840                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
841                         break;
842
843                 udelay(10);
844         }
845
846         return i == timeout_us / 10;
847 }
848
849 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
850                                    u32 len)
851 {
852         int err;
853         u32 i, bufoff, msgoff, maxlen, apedata;
854
855         if (!tg3_flag(tp, APE_HAS_NCSI))
856                 return 0;
857
858         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
859         if (apedata != APE_SEG_SIG_MAGIC)
860                 return -ENODEV;
861
862         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
863         if (!(apedata & APE_FW_STATUS_READY))
864                 return -EAGAIN;
865
866         bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
867                  TG3_APE_SHMEM_BASE;
868         msgoff = bufoff + 2 * sizeof(u32);
869         maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
870
871         while (len) {
872                 u32 length;
873
874                 /* Cap xfer sizes to scratchpad limits. */
875                 length = (len > maxlen) ? maxlen : len;
876                 len -= length;
877
878                 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
879                 if (!(apedata & APE_FW_STATUS_READY))
880                         return -EAGAIN;
881
882                 /* Wait for up to 1 msec for APE to service previous event. */
883                 err = tg3_ape_event_lock(tp, 1000);
884                 if (err)
885                         return err;
886
887                 apedata = APE_EVENT_STATUS_DRIVER_EVNT |
888                           APE_EVENT_STATUS_SCRTCHPD_READ |
889                           APE_EVENT_STATUS_EVENT_PENDING;
890                 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
891
892                 tg3_ape_write32(tp, bufoff, base_off);
893                 tg3_ape_write32(tp, bufoff + sizeof(u32), length);
894
895                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
896                 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
897
898                 base_off += length;
899
900                 if (tg3_ape_wait_for_event(tp, 30000))
901                         return -EAGAIN;
902
903                 for (i = 0; length; i += 4, length -= 4) {
904                         u32 val = tg3_ape_read32(tp, msgoff + i);
905                         memcpy(data, &val, sizeof(u32));
906                         data++;
907                 }
908         }
909
910         return 0;
911 }
912 #endif
913
914 static int tg3_ape_send_event(struct tg3 *tp, u32 event)
915 {
916         int err;
917         u32 apedata;
918
919         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
920         if (apedata != APE_SEG_SIG_MAGIC)
921                 return -EAGAIN;
922
923         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
924         if (!(apedata & APE_FW_STATUS_READY))
925                 return -EAGAIN;
926
927         /* Wait for up to 20 millisecond for APE to service previous event. */
928         err = tg3_ape_event_lock(tp, 20000);
929         if (err)
930                 return err;
931
932         tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
933                         event | APE_EVENT_STATUS_EVENT_PENDING);
934
935         tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
936         tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
937
938         return 0;
939 }
940
941 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
942 {
943         u32 event;
944         u32 apedata;
945
946         if (!tg3_flag(tp, ENABLE_APE))
947                 return;
948
949         switch (kind) {
950         case RESET_KIND_INIT:
951                 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
952                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
953                                 APE_HOST_SEG_SIG_MAGIC);
954                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
955                                 APE_HOST_SEG_LEN_MAGIC);
956                 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
957                 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
958                 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
959                         APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
960                 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
961                                 APE_HOST_BEHAV_NO_PHYLOCK);
962                 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
963                                     TG3_APE_HOST_DRVR_STATE_START);
964
965                 event = APE_EVENT_STATUS_STATE_START;
966                 break;
967         case RESET_KIND_SHUTDOWN:
968                 if (device_may_wakeup(&tp->pdev->dev) &&
969                     tg3_flag(tp, WOL_ENABLE)) {
970                         tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
971                                             TG3_APE_HOST_WOL_SPEED_AUTO);
972                         apedata = TG3_APE_HOST_DRVR_STATE_WOL;
973                 } else
974                         apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
975
976                 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
977
978                 event = APE_EVENT_STATUS_STATE_UNLOAD;
979                 break;
980         default:
981                 return;
982         }
983
984         event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
985
986         tg3_ape_send_event(tp, event);
987 }
988
989 static void tg3_send_ape_heartbeat(struct tg3 *tp,
990                                    unsigned long interval)
991 {
992         /* Check if hb interval has exceeded */
993         if (!tg3_flag(tp, ENABLE_APE) ||
994             time_before(jiffies, tp->ape_hb_jiffies + interval))
995                 return;
996
997         tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
998         tp->ape_hb_jiffies = jiffies;
999 }
1000
1001 static void tg3_disable_ints(struct tg3 *tp)
1002 {
1003         int i;
1004
1005         tw32(TG3PCI_MISC_HOST_CTRL,
1006              (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
1007         for (i = 0; i < tp->irq_max; i++)
1008                 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
1009 }
1010
1011 static void tg3_enable_ints(struct tg3 *tp)
1012 {
1013         int i;
1014
1015         tp->irq_sync = 0;
1016         wmb();
1017
1018         tw32(TG3PCI_MISC_HOST_CTRL,
1019              (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
1020
1021         tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
1022         for (i = 0; i < tp->irq_cnt; i++) {
1023                 struct tg3_napi *tnapi = &tp->napi[i];
1024
1025                 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1026                 if (tg3_flag(tp, 1SHOT_MSI))
1027                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1028
1029                 tp->coal_now |= tnapi->coal_now;
1030         }
1031
1032         /* Force an initial interrupt */
1033         if (!tg3_flag(tp, TAGGED_STATUS) &&
1034             (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
1035                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
1036         else
1037                 tw32(HOSTCC_MODE, tp->coal_now);
1038
1039         tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1040 }
1041
1042 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
1043 {
1044         struct tg3 *tp = tnapi->tp;
1045         struct tg3_hw_status *sblk = tnapi->hw_status;
1046         unsigned int work_exists = 0;
1047
1048         /* check for phy events */
1049         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
1050                 if (sblk->status & SD_STATUS_LINK_CHG)
1051                         work_exists = 1;
1052         }
1053
1054         /* check for TX work to do */
1055         if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
1056                 work_exists = 1;
1057
1058         /* check for RX work to do */
1059         if (tnapi->rx_rcb_prod_idx &&
1060             *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
1061                 work_exists = 1;
1062
1063         return work_exists;
1064 }
1065
1066 /* tg3_int_reenable
1067  *  similar to tg3_enable_ints, but it accurately determines whether there
1068  *  is new work pending and can return without flushing the PIO write
1069  *  which reenables interrupts
1070  */
1071 static void tg3_int_reenable(struct tg3_napi *tnapi)
1072 {
1073         struct tg3 *tp = tnapi->tp;
1074
1075         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1076
1077         /* When doing tagged status, this work check is unnecessary.
1078          * The last_tag we write above tells the chip which piece of
1079          * work we've completed.
1080          */
1081         if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1082                 tw32(HOSTCC_MODE, tp->coalesce_mode |
1083                      HOSTCC_MODE_ENABLE | tnapi->coal_now);
1084 }
1085
1086 static void tg3_switch_clocks(struct tg3 *tp)
1087 {
1088         u32 clock_ctrl;
1089         u32 orig_clock_ctrl;
1090
1091         if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1092                 return;
1093
1094         clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1095
1096         orig_clock_ctrl = clock_ctrl;
1097         clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1098                        CLOCK_CTRL_CLKRUN_OENABLE |
1099                        0x1f);
1100         tp->pci_clock_ctrl = clock_ctrl;
1101
1102         if (tg3_flag(tp, 5705_PLUS)) {
1103                 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1104                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
1105                                     clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1106                 }
1107         } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1108                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1109                             clock_ctrl |
1110                             (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1111                             40);
1112                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1113                             clock_ctrl | (CLOCK_CTRL_ALTCLK),
1114                             40);
1115         }
1116         tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1117 }
1118
1119 #define PHY_BUSY_LOOPS  5000
1120
1121 static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg,
1122                          u32 *val)
1123 {
1124         u32 frame_val;
1125         unsigned int loops;
1126         int ret;
1127
1128         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1129                 tw32_f(MAC_MI_MODE,
1130                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1131                 udelay(80);
1132         }
1133
1134         tg3_ape_lock(tp, tp->phy_ape_lock);
1135
1136         *val = 0x0;
1137
1138         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1139                       MI_COM_PHY_ADDR_MASK);
1140         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1141                       MI_COM_REG_ADDR_MASK);
1142         frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1143
1144         tw32_f(MAC_MI_COM, frame_val);
1145
1146         loops = PHY_BUSY_LOOPS;
1147         while (loops != 0) {
1148                 udelay(10);
1149                 frame_val = tr32(MAC_MI_COM);
1150
1151                 if ((frame_val & MI_COM_BUSY) == 0) {
1152                         udelay(5);
1153                         frame_val = tr32(MAC_MI_COM);
1154                         break;
1155                 }
1156                 loops -= 1;
1157         }
1158
1159         ret = -EBUSY;
1160         if (loops != 0) {
1161                 *val = frame_val & MI_COM_DATA_MASK;
1162                 ret = 0;
1163         }
1164
1165         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1166                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1167                 udelay(80);
1168         }
1169
1170         tg3_ape_unlock(tp, tp->phy_ape_lock);
1171
1172         return ret;
1173 }
1174
1175 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1176 {
1177         return __tg3_readphy(tp, tp->phy_addr, reg, val);
1178 }
1179
1180 static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg,
1181                           u32 val)
1182 {
1183         u32 frame_val;
1184         unsigned int loops;
1185         int ret;
1186
1187         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1188             (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1189                 return 0;
1190
1191         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1192                 tw32_f(MAC_MI_MODE,
1193                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1194                 udelay(80);
1195         }
1196
1197         tg3_ape_lock(tp, tp->phy_ape_lock);
1198
1199         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1200                       MI_COM_PHY_ADDR_MASK);
1201         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1202                       MI_COM_REG_ADDR_MASK);
1203         frame_val |= (val & MI_COM_DATA_MASK);
1204         frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1205
1206         tw32_f(MAC_MI_COM, frame_val);
1207
1208         loops = PHY_BUSY_LOOPS;
1209         while (loops != 0) {
1210                 udelay(10);
1211                 frame_val = tr32(MAC_MI_COM);
1212                 if ((frame_val & MI_COM_BUSY) == 0) {
1213                         udelay(5);
1214                         frame_val = tr32(MAC_MI_COM);
1215                         break;
1216                 }
1217                 loops -= 1;
1218         }
1219
1220         ret = -EBUSY;
1221         if (loops != 0)
1222                 ret = 0;
1223
1224         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1225                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1226                 udelay(80);
1227         }
1228
1229         tg3_ape_unlock(tp, tp->phy_ape_lock);
1230
1231         return ret;
1232 }
1233
1234 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1235 {
1236         return __tg3_writephy(tp, tp->phy_addr, reg, val);
1237 }
1238
1239 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1240 {
1241         int err;
1242
1243         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1244         if (err)
1245                 goto done;
1246
1247         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1248         if (err)
1249                 goto done;
1250
1251         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1252                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1253         if (err)
1254                 goto done;
1255
1256         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1257
1258 done:
1259         return err;
1260 }
1261
1262 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1263 {
1264         int err;
1265
1266         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1267         if (err)
1268                 goto done;
1269
1270         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1271         if (err)
1272                 goto done;
1273
1274         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1275                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1276         if (err)
1277                 goto done;
1278
1279         err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1280
1281 done:
1282         return err;
1283 }
1284
1285 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1286 {
1287         int err;
1288
1289         err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1290         if (!err)
1291                 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1292
1293         return err;
1294 }
1295
1296 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1297 {
1298         int err;
1299
1300         err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1301         if (!err)
1302                 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1303
1304         return err;
1305 }
1306
1307 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1308 {
1309         int err;
1310
1311         err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1312                            (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1313                            MII_TG3_AUXCTL_SHDWSEL_MISC);
1314         if (!err)
1315                 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1316
1317         return err;
1318 }
1319
1320 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1321 {
1322         if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1323                 set |= MII_TG3_AUXCTL_MISC_WREN;
1324
1325         return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1326 }
1327
1328 static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable)
1329 {
1330         u32 val;
1331         int err;
1332
1333         err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1334
1335         if (err)
1336                 return err;
1337
1338         if (enable)
1339                 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1340         else
1341                 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1342
1343         err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1344                                    val | MII_TG3_AUXCTL_ACTL_TX_6DB);
1345
1346         return err;
1347 }
1348
1349 static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val)
1350 {
1351         return tg3_writephy(tp, MII_TG3_MISC_SHDW,
1352                             reg | val | MII_TG3_MISC_SHDW_WREN);
1353 }
1354
1355 static int tg3_bmcr_reset(struct tg3 *tp)
1356 {
1357         u32 phy_control;
1358         int limit, err;
1359
1360         /* OK, reset it, and poll the BMCR_RESET bit until it
1361          * clears or we time out.
1362          */
1363         phy_control = BMCR_RESET;
1364         err = tg3_writephy(tp, MII_BMCR, phy_control);
1365         if (err != 0)
1366                 return -EBUSY;
1367
1368         limit = 5000;
1369         while (limit--) {
1370                 err = tg3_readphy(tp, MII_BMCR, &phy_control);
1371                 if (err != 0)
1372                         return -EBUSY;
1373
1374                 if ((phy_control & BMCR_RESET) == 0) {
1375                         udelay(40);
1376                         break;
1377                 }
1378                 udelay(10);
1379         }
1380         if (limit < 0)
1381                 return -EBUSY;
1382
1383         return 0;
1384 }
1385
1386 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1387 {
1388         struct tg3 *tp = bp->priv;
1389         u32 val;
1390
1391         spin_lock_bh(&tp->lock);
1392
1393         if (__tg3_readphy(tp, mii_id, reg, &val))
1394                 val = -EIO;
1395
1396         spin_unlock_bh(&tp->lock);
1397
1398         return val;
1399 }
1400
1401 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1402 {
1403         struct tg3 *tp = bp->priv;
1404         u32 ret = 0;
1405
1406         spin_lock_bh(&tp->lock);
1407
1408         if (__tg3_writephy(tp, mii_id, reg, val))
1409                 ret = -EIO;
1410
1411         spin_unlock_bh(&tp->lock);
1412
1413         return ret;
1414 }
1415
1416 static void tg3_mdio_config_5785(struct tg3 *tp)
1417 {
1418         u32 val;
1419         struct phy_device *phydev;
1420
1421         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1422         switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1423         case PHY_ID_BCM50610:
1424         case PHY_ID_BCM50610M:
1425                 val = MAC_PHYCFG2_50610_LED_MODES;
1426                 break;
1427         case PHY_ID_BCMAC131:
1428                 val = MAC_PHYCFG2_AC131_LED_MODES;
1429                 break;
1430         case PHY_ID_RTL8211C:
1431                 val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1432                 break;
1433         case PHY_ID_RTL8201E:
1434                 val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1435                 break;
1436         default:
1437                 return;
1438         }
1439
1440         if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1441                 tw32(MAC_PHYCFG2, val);
1442
1443                 val = tr32(MAC_PHYCFG1);
1444                 val &= ~(MAC_PHYCFG1_RGMII_INT |
1445                          MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1446                 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1447                 tw32(MAC_PHYCFG1, val);
1448
1449                 return;
1450         }
1451
1452         if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1453                 val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1454                        MAC_PHYCFG2_FMODE_MASK_MASK |
1455                        MAC_PHYCFG2_GMODE_MASK_MASK |
1456                        MAC_PHYCFG2_ACT_MASK_MASK   |
1457                        MAC_PHYCFG2_QUAL_MASK_MASK |
1458                        MAC_PHYCFG2_INBAND_ENABLE;
1459
1460         tw32(MAC_PHYCFG2, val);
1461
1462         val = tr32(MAC_PHYCFG1);
1463         val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1464                  MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1465         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1466                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1467                         val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1468                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1469                         val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1470         }
1471         val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1472                MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1473         tw32(MAC_PHYCFG1, val);
1474
1475         val = tr32(MAC_EXT_RGMII_MODE);
1476         val &= ~(MAC_RGMII_MODE_RX_INT_B |
1477                  MAC_RGMII_MODE_RX_QUALITY |
1478                  MAC_RGMII_MODE_RX_ACTIVITY |
1479                  MAC_RGMII_MODE_RX_ENG_DET |
1480                  MAC_RGMII_MODE_TX_ENABLE |
1481                  MAC_RGMII_MODE_TX_LOWPWR |
1482                  MAC_RGMII_MODE_TX_RESET);
1483         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1484                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1485                         val |= MAC_RGMII_MODE_RX_INT_B |
1486                                MAC_RGMII_MODE_RX_QUALITY |
1487                                MAC_RGMII_MODE_RX_ACTIVITY |
1488                                MAC_RGMII_MODE_RX_ENG_DET;
1489                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1490                         val |= MAC_RGMII_MODE_TX_ENABLE |
1491                                MAC_RGMII_MODE_TX_LOWPWR |
1492                                MAC_RGMII_MODE_TX_RESET;
1493         }
1494         tw32(MAC_EXT_RGMII_MODE, val);
1495 }
1496
1497 static void tg3_mdio_start(struct tg3 *tp)
1498 {
1499         tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1500         tw32_f(MAC_MI_MODE, tp->mi_mode);
1501         udelay(80);
1502
1503         if (tg3_flag(tp, MDIOBUS_INITED) &&
1504             tg3_asic_rev(tp) == ASIC_REV_5785)
1505                 tg3_mdio_config_5785(tp);
1506 }
1507
1508 static int tg3_mdio_init(struct tg3 *tp)
1509 {
1510         int i;
1511         u32 reg;
1512         struct phy_device *phydev;
1513
1514         if (tg3_flag(tp, 5717_PLUS)) {
1515                 u32 is_serdes;
1516
1517                 tp->phy_addr = tp->pci_fn + 1;
1518
1519                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0)
1520                         is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1521                 else
1522                         is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1523                                     TG3_CPMU_PHY_STRAP_IS_SERDES;
1524                 if (is_serdes)
1525                         tp->phy_addr += 7;
1526         } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) {
1527                 int addr;
1528
1529                 addr = ssb_gige_get_phyaddr(tp->pdev);
1530                 if (addr < 0)
1531                         return addr;
1532                 tp->phy_addr = addr;
1533         } else
1534                 tp->phy_addr = TG3_PHY_MII_ADDR;
1535
1536         tg3_mdio_start(tp);
1537
1538         if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1539                 return 0;
1540
1541         tp->mdio_bus = mdiobus_alloc();
1542         if (tp->mdio_bus == NULL)
1543                 return -ENOMEM;
1544
1545         tp->mdio_bus->name     = "tg3 mdio bus";
1546         snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1547                  (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1548         tp->mdio_bus->priv     = tp;
1549         tp->mdio_bus->parent   = &tp->pdev->dev;
1550         tp->mdio_bus->read     = &tg3_mdio_read;
1551         tp->mdio_bus->write    = &tg3_mdio_write;
1552         tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
1553
1554         /* The bus registration will look for all the PHYs on the mdio bus.
1555          * Unfortunately, it does not ensure the PHY is powered up before
1556          * accessing the PHY ID registers.  A chip reset is the
1557          * quickest way to bring the device back to an operational state..
1558          */
1559         if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1560                 tg3_bmcr_reset(tp);
1561
1562         i = mdiobus_register(tp->mdio_bus);
1563         if (i) {
1564                 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1565                 mdiobus_free(tp->mdio_bus);
1566                 return i;
1567         }
1568
1569         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1570
1571         if (!phydev || !phydev->drv) {
1572                 dev_warn(&tp->pdev->dev, "No PHY devices\n");
1573                 mdiobus_unregister(tp->mdio_bus);
1574                 mdiobus_free(tp->mdio_bus);
1575                 return -ENODEV;
1576         }
1577
1578         switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1579         case PHY_ID_BCM57780:
1580                 phydev->interface = PHY_INTERFACE_MODE_GMII;
1581                 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1582                 break;
1583         case PHY_ID_BCM50610:
1584         case PHY_ID_BCM50610M:
1585                 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1586                                      PHY_BRCM_RX_REFCLK_UNUSED |
1587                                      PHY_BRCM_DIS_TXCRXC_NOENRGY |
1588                                      PHY_BRCM_AUTO_PWRDWN_ENABLE;
1589                 if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1590                         phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
1591                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1592                         phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
1593                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1594                         phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
1595                 /* fall through */
1596         case PHY_ID_RTL8211C:
1597                 phydev->interface = PHY_INTERFACE_MODE_RGMII;
1598                 break;
1599         case PHY_ID_RTL8201E:
1600         case PHY_ID_BCMAC131:
1601                 phydev->interface = PHY_INTERFACE_MODE_MII;
1602                 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1603                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
1604                 break;
1605         }
1606
1607         tg3_flag_set(tp, MDIOBUS_INITED);
1608
1609         if (tg3_asic_rev(tp) == ASIC_REV_5785)
1610                 tg3_mdio_config_5785(tp);
1611
1612         return 0;
1613 }
1614
1615 static void tg3_mdio_fini(struct tg3 *tp)
1616 {
1617         if (tg3_flag(tp, MDIOBUS_INITED)) {
1618                 tg3_flag_clear(tp, MDIOBUS_INITED);
1619                 mdiobus_unregister(tp->mdio_bus);
1620                 mdiobus_free(tp->mdio_bus);
1621         }
1622 }
1623
1624 /* tp->lock is held. */
1625 static inline void tg3_generate_fw_event(struct tg3 *tp)
1626 {
1627         u32 val;
1628
1629         val = tr32(GRC_RX_CPU_EVENT);
1630         val |= GRC_RX_CPU_DRIVER_EVENT;
1631         tw32_f(GRC_RX_CPU_EVENT, val);
1632
1633         tp->last_event_jiffies = jiffies;
1634 }
1635
1636 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1637
1638 /* tp->lock is held. */
1639 static void tg3_wait_for_event_ack(struct tg3 *tp)
1640 {
1641         int i;
1642         unsigned int delay_cnt;
1643         long time_remain;
1644
1645         /* If enough time has passed, no wait is necessary. */
1646         time_remain = (long)(tp->last_event_jiffies + 1 +
1647                       usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1648                       (long)jiffies;
1649         if (time_remain < 0)
1650                 return;
1651
1652         /* Check if we can shorten the wait time. */
1653         delay_cnt = jiffies_to_usecs(time_remain);
1654         if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1655                 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1656         delay_cnt = (delay_cnt >> 3) + 1;
1657
1658         for (i = 0; i < delay_cnt; i++) {
1659                 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1660                         break;
1661                 if (pci_channel_offline(tp->pdev))
1662                         break;
1663
1664                 udelay(8);
1665         }
1666 }
1667
1668 /* tp->lock is held. */
1669 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1670 {
1671         u32 reg, val;
1672
1673         val = 0;
1674         if (!tg3_readphy(tp, MII_BMCR, &reg))
1675                 val = reg << 16;
1676         if (!tg3_readphy(tp, MII_BMSR, &reg))
1677                 val |= (reg & 0xffff);
1678         *data++ = val;
1679
1680         val = 0;
1681         if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1682                 val = reg << 16;
1683         if (!tg3_readphy(tp, MII_LPA, &reg))
1684                 val |= (reg & 0xffff);
1685         *data++ = val;
1686
1687         val = 0;
1688         if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1689                 if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1690                         val = reg << 16;
1691                 if (!tg3_readphy(tp, MII_STAT1000, &reg))
1692                         val |= (reg & 0xffff);
1693         }
1694         *data++ = val;
1695
1696         if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1697                 val = reg << 16;
1698         else
1699                 val = 0;
1700         *data++ = val;
1701 }
1702
1703 /* tp->lock is held. */
1704 static void tg3_ump_link_report(struct tg3 *tp)
1705 {
1706         u32 data[4];
1707
1708         if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1709                 return;
1710
1711         tg3_phy_gather_ump_data(tp, data);
1712
1713         tg3_wait_for_event_ack(tp);
1714
1715         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1716         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1717         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1718         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1719         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1720         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1721
1722         tg3_generate_fw_event(tp);
1723 }
1724
1725 /* tp->lock is held. */
1726 static void tg3_stop_fw(struct tg3 *tp)
1727 {
1728         if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1729                 /* Wait for RX cpu to ACK the previous event. */
1730                 tg3_wait_for_event_ack(tp);
1731
1732                 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1733
1734                 tg3_generate_fw_event(tp);
1735
1736                 /* Wait for RX cpu to ACK this event. */
1737                 tg3_wait_for_event_ack(tp);
1738         }
1739 }
1740
1741 /* tp->lock is held. */
1742 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1743 {
1744         tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1745                       NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1746
1747         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1748                 switch (kind) {
1749                 case RESET_KIND_INIT:
1750                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1751                                       DRV_STATE_START);
1752                         break;
1753
1754                 case RESET_KIND_SHUTDOWN:
1755                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1756                                       DRV_STATE_UNLOAD);
1757                         break;
1758
1759                 case RESET_KIND_SUSPEND:
1760                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1761                                       DRV_STATE_SUSPEND);
1762                         break;
1763
1764                 default:
1765                         break;
1766                 }
1767         }
1768 }
1769
1770 /* tp->lock is held. */
1771 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1772 {
1773         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1774                 switch (kind) {
1775                 case RESET_KIND_INIT:
1776                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1777                                       DRV_STATE_START_DONE);
1778                         break;
1779
1780                 case RESET_KIND_SHUTDOWN:
1781                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1782                                       DRV_STATE_UNLOAD_DONE);
1783                         break;
1784
1785                 default:
1786                         break;
1787                 }
1788         }
1789 }
1790
1791 /* tp->lock is held. */
1792 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1793 {
1794         if (tg3_flag(tp, ENABLE_ASF)) {
1795                 switch (kind) {
1796                 case RESET_KIND_INIT:
1797                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1798                                       DRV_STATE_START);
1799                         break;
1800
1801                 case RESET_KIND_SHUTDOWN:
1802                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1803                                       DRV_STATE_UNLOAD);
1804                         break;
1805
1806                 case RESET_KIND_SUSPEND:
1807                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1808                                       DRV_STATE_SUSPEND);
1809                         break;
1810
1811                 default:
1812                         break;
1813                 }
1814         }
1815 }
1816
1817 static int tg3_poll_fw(struct tg3 *tp)
1818 {
1819         int i;
1820         u32 val;
1821
1822         if (tg3_flag(tp, NO_FWARE_REPORTED))
1823                 return 0;
1824
1825         if (tg3_flag(tp, IS_SSB_CORE)) {
1826                 /* We don't use firmware. */
1827                 return 0;
1828         }
1829
1830         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
1831                 /* Wait up to 20ms for init done. */
1832                 for (i = 0; i < 200; i++) {
1833                         if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1834                                 return 0;
1835                         if (pci_channel_offline(tp->pdev))
1836                                 return -ENODEV;
1837
1838                         udelay(100);
1839                 }
1840                 return -ENODEV;
1841         }
1842
1843         /* Wait for firmware initialization to complete. */
1844         for (i = 0; i < 100000; i++) {
1845                 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1846                 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1847                         break;
1848                 if (pci_channel_offline(tp->pdev)) {
1849                         if (!tg3_flag(tp, NO_FWARE_REPORTED)) {
1850                                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1851                                 netdev_info(tp->dev, "No firmware running\n");
1852                         }
1853
1854                         break;
1855                 }
1856
1857                 udelay(10);
1858         }
1859
1860         /* Chip might not be fitted with firmware.  Some Sun onboard
1861          * parts are configured like that.  So don't signal the timeout
1862          * of the above loop as an error, but do report the lack of
1863          * running firmware once.
1864          */
1865         if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1866                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1867
1868                 netdev_info(tp->dev, "No firmware running\n");
1869         }
1870
1871         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
1872                 /* The 57765 A0 needs a little more
1873                  * time to do some important work.
1874                  */
1875                 mdelay(10);
1876         }
1877
1878         return 0;
1879 }
1880
1881 static void tg3_link_report(struct tg3 *tp)
1882 {
1883         if (!netif_carrier_ok(tp->dev)) {
1884                 netif_info(tp, link, tp->dev, "Link is down\n");
1885                 tg3_ump_link_report(tp);
1886         } else if (netif_msg_link(tp)) {
1887                 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1888                             (tp->link_config.active_speed == SPEED_1000 ?
1889                              1000 :
1890                              (tp->link_config.active_speed == SPEED_100 ?
1891                               100 : 10)),
1892                             (tp->link_config.active_duplex == DUPLEX_FULL ?
1893                              "full" : "half"));
1894
1895                 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1896                             (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1897                             "on" : "off",
1898                             (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1899                             "on" : "off");
1900
1901                 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1902                         netdev_info(tp->dev, "EEE is %s\n",
1903                                     tp->setlpicnt ? "enabled" : "disabled");
1904
1905                 tg3_ump_link_report(tp);
1906         }
1907
1908         tp->link_up = netif_carrier_ok(tp->dev);
1909 }
1910
1911 static u32 tg3_decode_flowctrl_1000T(u32 adv)
1912 {
1913         u32 flowctrl = 0;
1914
1915         if (adv & ADVERTISE_PAUSE_CAP) {
1916                 flowctrl |= FLOW_CTRL_RX;
1917                 if (!(adv & ADVERTISE_PAUSE_ASYM))
1918                         flowctrl |= FLOW_CTRL_TX;
1919         } else if (adv & ADVERTISE_PAUSE_ASYM)
1920                 flowctrl |= FLOW_CTRL_TX;
1921
1922         return flowctrl;
1923 }
1924
1925 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1926 {
1927         u16 miireg;
1928
1929         if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1930                 miireg = ADVERTISE_1000XPAUSE;
1931         else if (flow_ctrl & FLOW_CTRL_TX)
1932                 miireg = ADVERTISE_1000XPSE_ASYM;
1933         else if (flow_ctrl & FLOW_CTRL_RX)
1934                 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1935         else
1936                 miireg = 0;
1937
1938         return miireg;
1939 }
1940
1941 static u32 tg3_decode_flowctrl_1000X(u32 adv)
1942 {
1943         u32 flowctrl = 0;
1944
1945         if (adv & ADVERTISE_1000XPAUSE) {
1946                 flowctrl |= FLOW_CTRL_RX;
1947                 if (!(adv & ADVERTISE_1000XPSE_ASYM))
1948                         flowctrl |= FLOW_CTRL_TX;
1949         } else if (adv & ADVERTISE_1000XPSE_ASYM)
1950                 flowctrl |= FLOW_CTRL_TX;
1951
1952         return flowctrl;
1953 }
1954
1955 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1956 {
1957         u8 cap = 0;
1958
1959         if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1960                 cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1961         } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1962                 if (lcladv & ADVERTISE_1000XPAUSE)
1963                         cap = FLOW_CTRL_RX;
1964                 if (rmtadv & ADVERTISE_1000XPAUSE)
1965                         cap = FLOW_CTRL_TX;
1966         }
1967
1968         return cap;
1969 }
1970
1971 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1972 {
1973         u8 autoneg;
1974         u8 flowctrl = 0;
1975         u32 old_rx_mode = tp->rx_mode;
1976         u32 old_tx_mode = tp->tx_mode;
1977
1978         if (tg3_flag(tp, USE_PHYLIB))
1979                 autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg;
1980         else
1981                 autoneg = tp->link_config.autoneg;
1982
1983         if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1984                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1985                         flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1986                 else
1987                         flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1988         } else
1989                 flowctrl = tp->link_config.flowctrl;
1990
1991         tp->link_config.active_flowctrl = flowctrl;
1992
1993         if (flowctrl & FLOW_CTRL_RX)
1994                 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1995         else
1996                 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1997
1998         if (old_rx_mode != tp->rx_mode)
1999                 tw32_f(MAC_RX_MODE, tp->rx_mode);
2000
2001         if (flowctrl & FLOW_CTRL_TX)
2002                 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
2003         else
2004                 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
2005
2006         if (old_tx_mode != tp->tx_mode)
2007                 tw32_f(MAC_TX_MODE, tp->tx_mode);
2008 }
2009
2010 static void tg3_adjust_link(struct net_device *dev)
2011 {
2012         u8 oldflowctrl, linkmesg = 0;
2013         u32 mac_mode, lcl_adv, rmt_adv;
2014         struct tg3 *tp = netdev_priv(dev);
2015         struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2016
2017         spin_lock_bh(&tp->lock);
2018
2019         mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
2020                                     MAC_MODE_HALF_DUPLEX);
2021
2022         oldflowctrl = tp->link_config.active_flowctrl;
2023
2024         if (phydev->link) {
2025                 lcl_adv = 0;
2026                 rmt_adv = 0;
2027
2028                 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
2029                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2030                 else if (phydev->speed == SPEED_1000 ||
2031                          tg3_asic_rev(tp) != ASIC_REV_5785)
2032                         mac_mode |= MAC_MODE_PORT_MODE_GMII;
2033                 else
2034                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2035
2036                 if (phydev->duplex == DUPLEX_HALF)
2037                         mac_mode |= MAC_MODE_HALF_DUPLEX;
2038                 else {
2039                         lcl_adv = mii_advertise_flowctrl(
2040                                   tp->link_config.flowctrl);
2041
2042                         if (phydev->pause)
2043                                 rmt_adv = LPA_PAUSE_CAP;
2044                         if (phydev->asym_pause)
2045                                 rmt_adv |= LPA_PAUSE_ASYM;
2046                 }
2047
2048                 tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2049         } else
2050                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
2051
2052         if (mac_mode != tp->mac_mode) {
2053                 tp->mac_mode = mac_mode;
2054                 tw32_f(MAC_MODE, tp->mac_mode);
2055                 udelay(40);
2056         }
2057
2058         if (tg3_asic_rev(tp) == ASIC_REV_5785) {
2059                 if (phydev->speed == SPEED_10)
2060                         tw32(MAC_MI_STAT,
2061                              MAC_MI_STAT_10MBPS_MODE |
2062                              MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2063                 else
2064                         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2065         }
2066
2067         if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
2068                 tw32(MAC_TX_LENGTHS,
2069                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2070                       (6 << TX_LENGTHS_IPG_SHIFT) |
2071                       (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
2072         else
2073                 tw32(MAC_TX_LENGTHS,
2074                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2075                       (6 << TX_LENGTHS_IPG_SHIFT) |
2076                       (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
2077
2078         if (phydev->link != tp->old_link ||
2079             phydev->speed != tp->link_config.active_speed ||
2080             phydev->duplex != tp->link_config.active_duplex ||
2081             oldflowctrl != tp->link_config.active_flowctrl)
2082                 linkmesg = 1;
2083
2084         tp->old_link = phydev->link;
2085         tp->link_config.active_speed = phydev->speed;
2086         tp->link_config.active_duplex = phydev->duplex;
2087
2088         spin_unlock_bh(&tp->lock);
2089
2090         if (linkmesg)
2091                 tg3_link_report(tp);
2092 }
2093
2094 static int tg3_phy_init(struct tg3 *tp)
2095 {
2096         struct phy_device *phydev;
2097
2098         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
2099                 return 0;
2100
2101         /* Bring the PHY back to a known state. */
2102         tg3_bmcr_reset(tp);
2103
2104         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2105
2106         /* Attach the MAC to the PHY. */
2107         phydev = phy_connect(tp->dev, phydev_name(phydev),
2108                              tg3_adjust_link, phydev->interface);
2109         if (IS_ERR(phydev)) {
2110                 dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
2111                 return PTR_ERR(phydev);
2112         }
2113
2114         /* Mask with MAC supported features. */
2115         switch (phydev->interface) {
2116         case PHY_INTERFACE_MODE_GMII:
2117         case PHY_INTERFACE_MODE_RGMII:
2118                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
2119                         phy_set_max_speed(phydev, SPEED_1000);
2120                         phy_support_asym_pause(phydev);
2121                         break;
2122                 }
2123                 /* fall through */
2124         case PHY_INTERFACE_MODE_MII:
2125                 phy_set_max_speed(phydev, SPEED_100);
2126                 phy_support_asym_pause(phydev);
2127                 break;
2128         default:
2129                 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2130                 return -EINVAL;
2131         }
2132
2133         tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
2134
2135         phy_attached_info(phydev);
2136
2137         return 0;
2138 }
2139
2140 static void tg3_phy_start(struct tg3 *tp)
2141 {
2142         struct phy_device *phydev;
2143
2144         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2145                 return;
2146
2147         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2148
2149         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2150                 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2151                 phydev->speed = tp->link_config.speed;
2152                 phydev->duplex = tp->link_config.duplex;
2153                 phydev->autoneg = tp->link_config.autoneg;
2154                 ethtool_convert_legacy_u32_to_link_mode(
2155                         phydev->advertising, tp->link_config.advertising);
2156         }
2157
2158         phy_start(phydev);
2159
2160         phy_start_aneg(phydev);
2161 }
2162
2163 static void tg3_phy_stop(struct tg3 *tp)
2164 {
2165         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2166                 return;
2167
2168         phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2169 }
2170
2171 static void tg3_phy_fini(struct tg3 *tp)
2172 {
2173         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2174                 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2175                 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2176         }
2177 }
2178
2179 static int tg3_phy_set_extloopbk(struct tg3 *tp)
2180 {
2181         int err;
2182         u32 val;
2183
2184         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2185                 return 0;
2186
2187         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2188                 /* Cannot do read-modify-write on 5401 */
2189                 err = tg3_phy_auxctl_write(tp,
2190                                            MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2191                                            MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2192                                            0x4c20);
2193                 goto done;
2194         }
2195
2196         err = tg3_phy_auxctl_read(tp,
2197                                   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2198         if (err)
2199                 return err;
2200
2201         val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2202         err = tg3_phy_auxctl_write(tp,
2203                                    MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2204
2205 done:
2206         return err;
2207 }
2208
2209 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2210 {
2211         u32 phytest;
2212
2213         if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2214                 u32 phy;
2215
2216                 tg3_writephy(tp, MII_TG3_FET_TEST,
2217                              phytest | MII_TG3_FET_SHADOW_EN);
2218                 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2219                         if (enable)
2220                                 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2221                         else
2222                                 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2223                         tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2224                 }
2225                 tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2226         }
2227 }
2228
2229 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2230 {
2231         u32 reg;
2232
2233         if (!tg3_flag(tp, 5705_PLUS) ||
2234             (tg3_flag(tp, 5717_PLUS) &&
2235              (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2236                 return;
2237
2238         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2239                 tg3_phy_fet_toggle_apd(tp, enable);
2240                 return;
2241         }
2242
2243         reg = MII_TG3_MISC_SHDW_SCR5_LPED |
2244               MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2245               MII_TG3_MISC_SHDW_SCR5_SDTL |
2246               MII_TG3_MISC_SHDW_SCR5_C125OE;
2247         if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable)
2248                 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2249
2250         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg);
2251
2252
2253         reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2254         if (enable)
2255                 reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2256
2257         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg);
2258 }
2259
2260 static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable)
2261 {
2262         u32 phy;
2263
2264         if (!tg3_flag(tp, 5705_PLUS) ||
2265             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2266                 return;
2267
2268         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2269                 u32 ephy;
2270
2271                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2272                         u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2273
2274                         tg3_writephy(tp, MII_TG3_FET_TEST,
2275                                      ephy | MII_TG3_FET_SHADOW_EN);
2276                         if (!tg3_readphy(tp, reg, &phy)) {
2277                                 if (enable)
2278                                         phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2279                                 else
2280                                         phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2281                                 tg3_writephy(tp, reg, phy);
2282                         }
2283                         tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2284                 }
2285         } else {
2286                 int ret;
2287
2288                 ret = tg3_phy_auxctl_read(tp,
2289                                           MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2290                 if (!ret) {
2291                         if (enable)
2292                                 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2293                         else
2294                                 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2295                         tg3_phy_auxctl_write(tp,
2296                                              MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2297                 }
2298         }
2299 }
2300
2301 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2302 {
2303         int ret;
2304         u32 val;
2305
2306         if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2307                 return;
2308
2309         ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2310         if (!ret)
2311                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2312                                      val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2313 }
2314
2315 static void tg3_phy_apply_otp(struct tg3 *tp)
2316 {
2317         u32 otp, phy;
2318
2319         if (!tp->phy_otp)
2320                 return;
2321
2322         otp = tp->phy_otp;
2323
2324         if (tg3_phy_toggle_auxctl_smdsp(tp, true))
2325                 return;
2326
2327         phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2328         phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2329         tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2330
2331         phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2332               ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2333         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2334
2335         phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2336         phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2337         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2338
2339         phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2340         tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2341
2342         phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2343         tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2344
2345         phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2346               ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2347         tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2348
2349         tg3_phy_toggle_auxctl_smdsp(tp, false);
2350 }
2351
2352 static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee)
2353 {
2354         u32 val;
2355         struct ethtool_eee *dest = &tp->eee;
2356
2357         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2358                 return;
2359
2360         if (eee)
2361                 dest = eee;
2362
2363         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val))
2364                 return;
2365
2366         /* Pull eee_active */
2367         if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2368             val == TG3_CL45_D7_EEERES_STAT_LP_100TX) {
2369                 dest->eee_active = 1;
2370         } else
2371                 dest->eee_active = 0;
2372
2373         /* Pull lp advertised settings */
2374         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val))
2375                 return;
2376         dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2377
2378         /* Pull advertised and eee_enabled settings */
2379         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val))
2380                 return;
2381         dest->eee_enabled = !!val;
2382         dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2383
2384         /* Pull tx_lpi_enabled */
2385         val = tr32(TG3_CPMU_EEE_MODE);
2386         dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX);
2387
2388         /* Pull lpi timer value */
2389         dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff;
2390 }
2391
2392 static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up)
2393 {
2394         u32 val;
2395
2396         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2397                 return;
2398
2399         tp->setlpicnt = 0;
2400
2401         if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2402             current_link_up &&
2403             tp->link_config.active_duplex == DUPLEX_FULL &&
2404             (tp->link_config.active_speed == SPEED_100 ||
2405              tp->link_config.active_speed == SPEED_1000)) {
2406                 u32 eeectl;
2407
2408                 if (tp->link_config.active_speed == SPEED_1000)
2409                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2410                 else
2411                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2412
2413                 tw32(TG3_CPMU_EEE_CTRL, eeectl);
2414
2415                 tg3_eee_pull_config(tp, NULL);
2416                 if (tp->eee.eee_active)
2417                         tp->setlpicnt = 2;
2418         }
2419
2420         if (!tp->setlpicnt) {
2421                 if (current_link_up &&
2422                    !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2423                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2424                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2425                 }
2426
2427                 val = tr32(TG3_CPMU_EEE_MODE);
2428                 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2429         }
2430 }
2431
2432 static void tg3_phy_eee_enable(struct tg3 *tp)
2433 {
2434         u32 val;
2435
2436         if (tp->link_config.active_speed == SPEED_1000 &&
2437             (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2438              tg3_asic_rev(tp) == ASIC_REV_5719 ||
2439              tg3_flag(tp, 57765_CLASS)) &&
2440             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2441                 val = MII_TG3_DSP_TAP26_ALNOKO |
2442                       MII_TG3_DSP_TAP26_RMRXSTO;
2443                 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2444                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2445         }
2446
2447         val = tr32(TG3_CPMU_EEE_MODE);
2448         tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2449 }
2450
2451 static int tg3_wait_macro_done(struct tg3 *tp)
2452 {
2453         int limit = 100;
2454
2455         while (limit--) {
2456                 u32 tmp32;
2457
2458                 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2459                         if ((tmp32 & 0x1000) == 0)
2460                                 break;
2461                 }
2462         }
2463         if (limit < 0)
2464                 return -EBUSY;
2465
2466         return 0;
2467 }
2468
2469 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2470 {
2471         static const u32 test_pat[4][6] = {
2472         { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2473         { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2474         { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2475         { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2476         };
2477         int chan;
2478
2479         for (chan = 0; chan < 4; chan++) {
2480                 int i;
2481
2482                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2483                              (chan * 0x2000) | 0x0200);
2484                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2485
2486                 for (i = 0; i < 6; i++)
2487                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2488                                      test_pat[chan][i]);
2489
2490                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2491                 if (tg3_wait_macro_done(tp)) {
2492                         *resetp = 1;
2493                         return -EBUSY;
2494                 }
2495
2496                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2497                              (chan * 0x2000) | 0x0200);
2498                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2499                 if (tg3_wait_macro_done(tp)) {
2500                         *resetp = 1;
2501                         return -EBUSY;
2502                 }
2503
2504                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2505                 if (tg3_wait_macro_done(tp)) {
2506                         *resetp = 1;
2507                         return -EBUSY;
2508                 }
2509
2510                 for (i = 0; i < 6; i += 2) {
2511                         u32 low, high;
2512
2513                         if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2514                             tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2515                             tg3_wait_macro_done(tp)) {
2516                                 *resetp = 1;
2517                                 return -EBUSY;
2518                         }
2519                         low &= 0x7fff;
2520                         high &= 0x000f;
2521                         if (low != test_pat[chan][i] ||
2522                             high != test_pat[chan][i+1]) {
2523                                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2524                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2525                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2526
2527                                 return -EBUSY;
2528                         }
2529                 }
2530         }
2531
2532         return 0;
2533 }
2534
2535 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2536 {
2537         int chan;
2538
2539         for (chan = 0; chan < 4; chan++) {
2540                 int i;
2541
2542                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2543                              (chan * 0x2000) | 0x0200);
2544                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2545                 for (i = 0; i < 6; i++)
2546                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2547                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2548                 if (tg3_wait_macro_done(tp))
2549                         return -EBUSY;
2550         }
2551
2552         return 0;
2553 }
2554
2555 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2556 {
2557         u32 reg32, phy9_orig;
2558         int retries, do_phy_reset, err;
2559
2560         retries = 10;
2561         do_phy_reset = 1;
2562         do {
2563                 if (do_phy_reset) {
2564                         err = tg3_bmcr_reset(tp);
2565                         if (err)
2566                                 return err;
2567                         do_phy_reset = 0;
2568                 }
2569
2570                 /* Disable transmitter and interrupt.  */
2571                 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2572                         continue;
2573
2574                 reg32 |= 0x3000;
2575                 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2576
2577                 /* Set full-duplex, 1000 mbps.  */
2578                 tg3_writephy(tp, MII_BMCR,
2579                              BMCR_FULLDPLX | BMCR_SPEED1000);
2580
2581                 /* Set to master mode.  */
2582                 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2583                         continue;
2584
2585                 tg3_writephy(tp, MII_CTRL1000,
2586                              CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2587
2588                 err = tg3_phy_toggle_auxctl_smdsp(tp, true);
2589                 if (err)
2590                         return err;
2591
2592                 /* Block the PHY control access.  */
2593                 tg3_phydsp_write(tp, 0x8005, 0x0800);
2594
2595                 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2596                 if (!err)
2597                         break;
2598         } while (--retries);
2599
2600         err = tg3_phy_reset_chanpat(tp);
2601         if (err)
2602                 return err;
2603
2604         tg3_phydsp_write(tp, 0x8005, 0x0000);
2605
2606         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2607         tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2608
2609         tg3_phy_toggle_auxctl_smdsp(tp, false);
2610
2611         tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2612
2613         err = tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
2614         if (err)
2615                 return err;
2616
2617         reg32 &= ~0x3000;
2618         tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2619
2620         return 0;
2621 }
2622
2623 static void tg3_carrier_off(struct tg3 *tp)
2624 {
2625         netif_carrier_off(tp->dev);
2626         tp->link_up = false;
2627 }
2628
2629 static void tg3_warn_mgmt_link_flap(struct tg3 *tp)
2630 {
2631         if (tg3_flag(tp, ENABLE_ASF))
2632                 netdev_warn(tp->dev,
2633                             "Management side-band traffic will be interrupted during phy settings change\n");
2634 }
2635
2636 /* This will reset the tigon3 PHY if there is no valid
2637  * link unless the FORCE argument is non-zero.
2638  */
2639 static int tg3_phy_reset(struct tg3 *tp)
2640 {
2641         u32 val, cpmuctrl;
2642         int err;
2643
2644         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2645                 val = tr32(GRC_MISC_CFG);
2646                 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2647                 udelay(40);
2648         }
2649         err  = tg3_readphy(tp, MII_BMSR, &val);
2650         err |= tg3_readphy(tp, MII_BMSR, &val);
2651         if (err != 0)
2652                 return -EBUSY;
2653
2654         if (netif_running(tp->dev) && tp->link_up) {
2655                 netif_carrier_off(tp->dev);
2656                 tg3_link_report(tp);
2657         }
2658
2659         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
2660             tg3_asic_rev(tp) == ASIC_REV_5704 ||
2661             tg3_asic_rev(tp) == ASIC_REV_5705) {
2662                 err = tg3_phy_reset_5703_4_5(tp);
2663                 if (err)
2664                         return err;
2665                 goto out;
2666         }
2667
2668         cpmuctrl = 0;
2669         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
2670             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
2671                 cpmuctrl = tr32(TG3_CPMU_CTRL);
2672                 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2673                         tw32(TG3_CPMU_CTRL,
2674                              cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2675         }
2676
2677         err = tg3_bmcr_reset(tp);
2678         if (err)
2679                 return err;
2680
2681         if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2682                 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2683                 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2684
2685                 tw32(TG3_CPMU_CTRL, cpmuctrl);
2686         }
2687
2688         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
2689             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
2690                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2691                 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2692                     CPMU_LSPD_1000MB_MACCLK_12_5) {
2693                         val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2694                         udelay(40);
2695                         tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2696                 }
2697         }
2698
2699         if (tg3_flag(tp, 5717_PLUS) &&
2700             (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2701                 return 0;
2702
2703         tg3_phy_apply_otp(tp);
2704
2705         if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2706                 tg3_phy_toggle_apd(tp, true);
2707         else
2708                 tg3_phy_toggle_apd(tp, false);
2709
2710 out:
2711         if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2712             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2713                 tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2714                 tg3_phydsp_write(tp, 0x000a, 0x0323);
2715                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2716         }
2717
2718         if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2719                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2720                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2721         }
2722
2723         if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2724                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2725                         tg3_phydsp_write(tp, 0x000a, 0x310b);
2726                         tg3_phydsp_write(tp, 0x201f, 0x9506);
2727                         tg3_phydsp_write(tp, 0x401f, 0x14e2);
2728                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2729                 }
2730         } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2731                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2732                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2733                         if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2734                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2735                                 tg3_writephy(tp, MII_TG3_TEST1,
2736                                              MII_TG3_TEST1_TRIM_EN | 0x4);
2737                         } else
2738                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2739
2740                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2741                 }
2742         }
2743
2744         /* Set Extended packet length bit (bit 14) on all chips that */
2745         /* support jumbo frames */
2746         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2747                 /* Cannot do read-modify-write on 5401 */
2748                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2749         } else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2750                 /* Set bit 14 with read-modify-write to preserve other bits */
2751                 err = tg3_phy_auxctl_read(tp,
2752                                           MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2753                 if (!err)
2754                         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2755                                            val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2756         }
2757
2758         /* Set phy register 0x10 bit 0 to high fifo elasticity to support
2759          * jumbo frames transmission.
2760          */
2761         if (tg3_flag(tp, JUMBO_CAPABLE)) {
2762                 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2763                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
2764                                      val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2765         }
2766
2767         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2768                 /* adjust output voltage */
2769                 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2770         }
2771
2772         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0)
2773                 tg3_phydsp_write(tp, 0xffb, 0x4000);
2774
2775         tg3_phy_toggle_automdix(tp, true);
2776         tg3_phy_set_wirespeed(tp);
2777         return 0;
2778 }
2779
2780 #define TG3_GPIO_MSG_DRVR_PRES           0x00000001
2781 #define TG3_GPIO_MSG_NEED_VAUX           0x00000002
2782 #define TG3_GPIO_MSG_MASK                (TG3_GPIO_MSG_DRVR_PRES | \
2783                                           TG3_GPIO_MSG_NEED_VAUX)
2784 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2785         ((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2786          (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2787          (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2788          (TG3_GPIO_MSG_DRVR_PRES << 12))
2789
2790 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2791         ((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2792          (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2793          (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2794          (TG3_GPIO_MSG_NEED_VAUX << 12))
2795
2796 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2797 {
2798         u32 status, shift;
2799
2800         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2801             tg3_asic_rev(tp) == ASIC_REV_5719)
2802                 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2803         else
2804                 status = tr32(TG3_CPMU_DRV_STATUS);
2805
2806         shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2807         status &= ~(TG3_GPIO_MSG_MASK << shift);
2808         status |= (newstat << shift);
2809
2810         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2811             tg3_asic_rev(tp) == ASIC_REV_5719)
2812                 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2813         else
2814                 tw32(TG3_CPMU_DRV_STATUS, status);
2815
2816         return status >> TG3_APE_GPIO_MSG_SHIFT;
2817 }
2818
2819 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2820 {
2821         if (!tg3_flag(tp, IS_NIC))
2822                 return 0;
2823
2824         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2825             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2826             tg3_asic_rev(tp) == ASIC_REV_5720) {
2827                 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2828                         return -EIO;
2829
2830                 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2831
2832                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2833                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2834
2835                 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2836         } else {
2837                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2838                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2839         }
2840
2841         return 0;
2842 }
2843
2844 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2845 {
2846         u32 grc_local_ctrl;
2847
2848         if (!tg3_flag(tp, IS_NIC) ||
2849             tg3_asic_rev(tp) == ASIC_REV_5700 ||
2850             tg3_asic_rev(tp) == ASIC_REV_5701)
2851                 return;
2852
2853         grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2854
2855         tw32_wait_f(GRC_LOCAL_CTRL,
2856                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2857                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2858
2859         tw32_wait_f(GRC_LOCAL_CTRL,
2860                     grc_local_ctrl,
2861                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2862
2863         tw32_wait_f(GRC_LOCAL_CTRL,
2864                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2865                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2866 }
2867
2868 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2869 {
2870         if (!tg3_flag(tp, IS_NIC))
2871                 return;
2872
2873         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
2874             tg3_asic_rev(tp) == ASIC_REV_5701) {
2875                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2876                             (GRC_LCLCTRL_GPIO_OE0 |
2877                              GRC_LCLCTRL_GPIO_OE1 |
2878                              GRC_LCLCTRL_GPIO_OE2 |
2879                              GRC_LCLCTRL_GPIO_OUTPUT0 |
2880                              GRC_LCLCTRL_GPIO_OUTPUT1),
2881                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2882         } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2883                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2884                 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2885                 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2886                                      GRC_LCLCTRL_GPIO_OE1 |
2887                                      GRC_LCLCTRL_GPIO_OE2 |
2888                                      GRC_LCLCTRL_GPIO_OUTPUT0 |
2889                                      GRC_LCLCTRL_GPIO_OUTPUT1 |
2890                                      tp->grc_local_ctrl;
2891                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2892                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2893
2894                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2895                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2896                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2897
2898                 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2899                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2900                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2901         } else {
2902                 u32 no_gpio2;
2903                 u32 grc_local_ctrl = 0;
2904
2905                 /* Workaround to prevent overdrawing Amps. */
2906                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
2907                         grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2908                         tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2909                                     grc_local_ctrl,
2910                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2911                 }
2912
2913                 /* On 5753 and variants, GPIO2 cannot be used. */
2914                 no_gpio2 = tp->nic_sram_data_cfg &
2915                            NIC_SRAM_DATA_CFG_NO_GPIO2;
2916
2917                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2918                                   GRC_LCLCTRL_GPIO_OE1 |
2919                                   GRC_LCLCTRL_GPIO_OE2 |
2920                                   GRC_LCLCTRL_GPIO_OUTPUT1 |
2921                                   GRC_LCLCTRL_GPIO_OUTPUT2;
2922                 if (no_gpio2) {
2923                         grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2924                                             GRC_LCLCTRL_GPIO_OUTPUT2);
2925                 }
2926                 tw32_wait_f(GRC_LOCAL_CTRL,
2927                             tp->grc_local_ctrl | grc_local_ctrl,
2928                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2929
2930                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2931
2932                 tw32_wait_f(GRC_LOCAL_CTRL,
2933                             tp->grc_local_ctrl | grc_local_ctrl,
2934                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2935
2936                 if (!no_gpio2) {
2937                         grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2938                         tw32_wait_f(GRC_LOCAL_CTRL,
2939                                     tp->grc_local_ctrl | grc_local_ctrl,
2940                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2941                 }
2942         }
2943 }
2944
2945 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2946 {
2947         u32 msg = 0;
2948
2949         /* Serialize power state transitions */
2950         if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2951                 return;
2952
2953         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2954                 msg = TG3_GPIO_MSG_NEED_VAUX;
2955
2956         msg = tg3_set_function_status(tp, msg);
2957
2958         if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2959                 goto done;
2960
2961         if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2962                 tg3_pwrsrc_switch_to_vaux(tp);
2963         else
2964                 tg3_pwrsrc_die_with_vmain(tp);
2965
2966 done:
2967         tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2968 }
2969
2970 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2971 {
2972         bool need_vaux = false;
2973
2974         /* The GPIOs do something completely different on 57765. */
2975         if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2976                 return;
2977
2978         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2979             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2980             tg3_asic_rev(tp) == ASIC_REV_5720) {
2981                 tg3_frob_aux_power_5717(tp, include_wol ?
2982                                         tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2983                 return;
2984         }
2985
2986         if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2987                 struct net_device *dev_peer;
2988
2989                 dev_peer = pci_get_drvdata(tp->pdev_peer);
2990
2991                 /* remove_one() may have been run on the peer. */
2992                 if (dev_peer) {
2993                         struct tg3 *tp_peer = netdev_priv(dev_peer);
2994
2995                         if (tg3_flag(tp_peer, INIT_COMPLETE))
2996                                 return;
2997
2998                         if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2999                             tg3_flag(tp_peer, ENABLE_ASF))
3000                                 need_vaux = true;
3001                 }
3002         }
3003
3004         if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
3005             tg3_flag(tp, ENABLE_ASF))
3006                 need_vaux = true;
3007
3008         if (need_vaux)
3009                 tg3_pwrsrc_switch_to_vaux(tp);
3010         else
3011                 tg3_pwrsrc_die_with_vmain(tp);
3012 }
3013
3014 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
3015 {
3016         if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
3017                 return 1;
3018         else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
3019                 if (speed != SPEED_10)
3020                         return 1;
3021         } else if (speed == SPEED_10)
3022                 return 1;
3023
3024         return 0;
3025 }
3026
3027 static bool tg3_phy_power_bug(struct tg3 *tp)
3028 {
3029         switch (tg3_asic_rev(tp)) {
3030         case ASIC_REV_5700:
3031         case ASIC_REV_5704:
3032                 return true;
3033         case ASIC_REV_5780:
3034                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3035                         return true;
3036                 return false;
3037         case ASIC_REV_5717:
3038                 if (!tp->pci_fn)
3039                         return true;
3040                 return false;
3041         case ASIC_REV_5719:
3042         case ASIC_REV_5720:
3043                 if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
3044                     !tp->pci_fn)
3045                         return true;
3046                 return false;
3047         }
3048
3049         return false;
3050 }
3051
3052 static bool tg3_phy_led_bug(struct tg3 *tp)
3053 {
3054         switch (tg3_asic_rev(tp)) {
3055         case ASIC_REV_5719:
3056         case ASIC_REV_5720:
3057                 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
3058                     !tp->pci_fn)
3059                         return true;
3060                 return false;
3061         }
3062
3063         return false;
3064 }
3065
3066 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
3067 {
3068         u32 val;
3069
3070         if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)
3071                 return;
3072
3073         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
3074                 if (tg3_asic_rev(tp) == ASIC_REV_5704) {
3075                         u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
3076                         u32 serdes_cfg = tr32(MAC_SERDES_CFG);
3077
3078                         sg_dig_ctrl |=
3079                                 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
3080                         tw32(SG_DIG_CTRL, sg_dig_ctrl);
3081                         tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
3082                 }
3083                 return;
3084         }
3085
3086         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3087                 tg3_bmcr_reset(tp);
3088                 val = tr32(GRC_MISC_CFG);
3089                 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
3090                 udelay(40);
3091                 return;
3092         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3093                 u32 phytest;
3094                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
3095                         u32 phy;
3096
3097                         tg3_writephy(tp, MII_ADVERTISE, 0);
3098                         tg3_writephy(tp, MII_BMCR,
3099                                      BMCR_ANENABLE | BMCR_ANRESTART);
3100
3101                         tg3_writephy(tp, MII_TG3_FET_TEST,
3102                                      phytest | MII_TG3_FET_SHADOW_EN);
3103                         if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
3104                                 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
3105                                 tg3_writephy(tp,
3106                                              MII_TG3_FET_SHDW_AUXMODE4,
3107                                              phy);
3108                         }
3109                         tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
3110                 }
3111                 return;
3112         } else if (do_low_power) {
3113                 if (!tg3_phy_led_bug(tp))
3114                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
3115                                      MII_TG3_EXT_CTRL_FORCE_LED_OFF);
3116
3117                 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3118                       MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
3119                       MII_TG3_AUXCTL_PCTL_VREG_11V;
3120                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
3121         }
3122
3123         /* The PHY should not be powered down on some chips because
3124          * of bugs.
3125          */
3126         if (tg3_phy_power_bug(tp))
3127                 return;
3128
3129         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
3130             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
3131                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
3132                 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
3133                 val |= CPMU_LSPD_1000MB_MACCLK_12_5;
3134                 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
3135         }
3136
3137         tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
3138 }
3139
3140 /* tp->lock is held. */
3141 static int tg3_nvram_lock(struct tg3 *tp)
3142 {
3143         if (tg3_flag(tp, NVRAM)) {
3144                 int i;
3145
3146                 if (tp->nvram_lock_cnt == 0) {
3147                         tw32(NVRAM_SWARB, SWARB_REQ_SET1);
3148                         for (i = 0; i < 8000; i++) {
3149                                 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
3150                                         break;
3151                                 udelay(20);
3152                         }
3153                         if (i == 8000) {
3154                                 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
3155                                 return -ENODEV;
3156                         }
3157                 }
3158                 tp->nvram_lock_cnt++;
3159         }
3160         return 0;
3161 }
3162
3163 /* tp->lock is held. */
3164 static void tg3_nvram_unlock(struct tg3 *tp)
3165 {
3166         if (tg3_flag(tp, NVRAM)) {
3167                 if (tp->nvram_lock_cnt > 0)
3168                         tp->nvram_lock_cnt--;
3169                 if (tp->nvram_lock_cnt == 0)
3170                         tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
3171         }
3172 }
3173
3174 /* tp->lock is held. */
3175 static void tg3_enable_nvram_access(struct tg3 *tp)
3176 {
3177         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3178                 u32 nvaccess = tr32(NVRAM_ACCESS);
3179
3180                 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
3181         }
3182 }
3183
3184 /* tp->lock is held. */
3185 static void tg3_disable_nvram_access(struct tg3 *tp)
3186 {
3187         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3188                 u32 nvaccess = tr32(NVRAM_ACCESS);
3189
3190                 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
3191         }
3192 }
3193
3194 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
3195                                         u32 offset, u32 *val)
3196 {
3197         u32 tmp;
3198         int i;
3199
3200         if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
3201                 return -EINVAL;
3202
3203         tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
3204                                         EEPROM_ADDR_DEVID_MASK |
3205                                         EEPROM_ADDR_READ);
3206         tw32(GRC_EEPROM_ADDR,
3207              tmp |
3208              (0 << EEPROM_ADDR_DEVID_SHIFT) |
3209              ((offset << EEPROM_ADDR_ADDR_SHIFT) &
3210               EEPROM_ADDR_ADDR_MASK) |
3211              EEPROM_ADDR_READ | EEPROM_ADDR_START);
3212
3213         for (i = 0; i < 1000; i++) {
3214                 tmp = tr32(GRC_EEPROM_ADDR);
3215
3216                 if (tmp & EEPROM_ADDR_COMPLETE)
3217                         break;
3218                 msleep(1);
3219         }
3220         if (!(tmp & EEPROM_ADDR_COMPLETE))
3221                 return -EBUSY;
3222
3223         tmp = tr32(GRC_EEPROM_DATA);
3224
3225         /*
3226          * The data will always be opposite the native endian
3227          * format.  Perform a blind byteswap to compensate.
3228          */
3229         *val = swab32(tmp);
3230
3231         return 0;
3232 }
3233
3234 #define NVRAM_CMD_TIMEOUT 10000
3235
3236 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3237 {
3238         int i;
3239
3240         tw32(NVRAM_CMD, nvram_cmd);
3241         for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3242                 usleep_range(10, 40);
3243                 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3244                         udelay(10);
3245                         break;
3246                 }
3247         }
3248
3249         if (i == NVRAM_CMD_TIMEOUT)
3250                 return -EBUSY;
3251
3252         return 0;
3253 }
3254
3255 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3256 {
3257         if (tg3_flag(tp, NVRAM) &&
3258             tg3_flag(tp, NVRAM_BUFFERED) &&
3259             tg3_flag(tp, FLASH) &&
3260             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3261             (tp->nvram_jedecnum == JEDEC_ATMEL))
3262
3263                 addr = ((addr / tp->nvram_pagesize) <<
3264                         ATMEL_AT45DB0X1B_PAGE_POS) +
3265                        (addr % tp->nvram_pagesize);
3266
3267         return addr;
3268 }
3269
3270 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3271 {
3272         if (tg3_flag(tp, NVRAM) &&
3273             tg3_flag(tp, NVRAM_BUFFERED) &&
3274             tg3_flag(tp, FLASH) &&
3275             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3276             (tp->nvram_jedecnum == JEDEC_ATMEL))
3277
3278                 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3279                         tp->nvram_pagesize) +
3280                        (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3281
3282         return addr;
3283 }
3284
3285 /* NOTE: Data read in from NVRAM is byteswapped according to
3286  * the byteswapping settings for all other register accesses.
3287  * tg3 devices are BE devices, so on a BE machine, the data
3288  * returned will be exactly as it is seen in NVRAM.  On a LE
3289  * machine, the 32-bit value will be byteswapped.
3290  */
3291 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3292 {
3293         int ret;
3294
3295         if (!tg3_flag(tp, NVRAM))
3296                 return tg3_nvram_read_using_eeprom(tp, offset, val);
3297
3298         offset = tg3_nvram_phys_addr(tp, offset);
3299
3300         if (offset > NVRAM_ADDR_MSK)
3301                 return -EINVAL;
3302
3303         ret = tg3_nvram_lock(tp);
3304         if (ret)
3305                 return ret;
3306
3307         tg3_enable_nvram_access(tp);
3308
3309         tw32(NVRAM_ADDR, offset);
3310         ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3311                 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3312
3313         if (ret == 0)
3314                 *val = tr32(NVRAM_RDDATA);
3315
3316         tg3_disable_nvram_access(tp);
3317
3318         tg3_nvram_unlock(tp);
3319
3320         return ret;
3321 }
3322
3323 /* Ensures NVRAM data is in bytestream format. */
3324 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3325 {
3326         u32 v;
3327         int res = tg3_nvram_read(tp, offset, &v);
3328         if (!res)
3329                 *val = cpu_to_be32(v);
3330         return res;
3331 }
3332
3333 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3334                                     u32 offset, u32 len, u8 *buf)
3335 {
3336         int i, j, rc = 0;
3337         u32 val;
3338
3339         for (i = 0; i < len; i += 4) {
3340                 u32 addr;
3341                 __be32 data;
3342
3343                 addr = offset + i;
3344
3345                 memcpy(&data, buf + i, 4);
3346
3347                 /*
3348                  * The SEEPROM interface expects the data to always be opposite
3349                  * the native endian format.  We accomplish this by reversing
3350                  * all the operations that would have been performed on the
3351                  * data from a call to tg3_nvram_read_be32().
3352                  */
3353                 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3354
3355                 val = tr32(GRC_EEPROM_ADDR);
3356                 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3357
3358                 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3359                         EEPROM_ADDR_READ);
3360                 tw32(GRC_EEPROM_ADDR, val |
3361                         (0 << EEPROM_ADDR_DEVID_SHIFT) |
3362                         (addr & EEPROM_ADDR_ADDR_MASK) |
3363                         EEPROM_ADDR_START |
3364                         EEPROM_ADDR_WRITE);
3365
3366                 for (j = 0; j < 1000; j++) {
3367                         val = tr32(GRC_EEPROM_ADDR);
3368
3369                         if (val & EEPROM_ADDR_COMPLETE)
3370                                 break;
3371                         msleep(1);
3372                 }
3373                 if (!(val & EEPROM_ADDR_COMPLETE)) {
3374                         rc = -EBUSY;
3375                         break;
3376                 }
3377         }
3378
3379         return rc;
3380 }
3381
3382 /* offset and length are dword aligned */
3383 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3384                 u8 *buf)
3385 {
3386         int ret = 0;
3387         u32 pagesize = tp->nvram_pagesize;
3388         u32 pagemask = pagesize - 1;
3389         u32 nvram_cmd;
3390         u8 *tmp;
3391
3392         tmp = kmalloc(pagesize, GFP_KERNEL);
3393         if (tmp == NULL)
3394                 return -ENOMEM;
3395
3396         while (len) {
3397                 int j;
3398                 u32 phy_addr, page_off, size;
3399
3400                 phy_addr = offset & ~pagemask;
3401
3402                 for (j = 0; j < pagesize; j += 4) {
3403                         ret = tg3_nvram_read_be32(tp, phy_addr + j,
3404                                                   (__be32 *) (tmp + j));
3405                         if (ret)
3406                                 break;
3407                 }
3408                 if (ret)
3409                         break;
3410
3411                 page_off = offset & pagemask;
3412                 size = pagesize;
3413                 if (len < size)
3414                         size = len;
3415
3416                 len -= size;
3417
3418                 memcpy(tmp + page_off, buf, size);
3419
3420                 offset = offset + (pagesize - page_off);
3421
3422                 tg3_enable_nvram_access(tp);
3423
3424                 /*
3425                  * Before we can erase the flash page, we need
3426                  * to issue a special "write enable" command.
3427                  */
3428                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3429
3430                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3431                         break;
3432
3433                 /* Erase the target page */
3434                 tw32(NVRAM_ADDR, phy_addr);
3435
3436                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3437                         NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3438
3439                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3440                         break;
3441
3442                 /* Issue another write enable to start the write. */
3443                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3444
3445                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3446                         break;
3447
3448                 for (j = 0; j < pagesize; j += 4) {
3449                         __be32 data;
3450
3451                         data = *((__be32 *) (tmp + j));
3452
3453                         tw32(NVRAM_WRDATA, be32_to_cpu(data));
3454
3455                         tw32(NVRAM_ADDR, phy_addr + j);
3456
3457                         nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3458                                 NVRAM_CMD_WR;
3459
3460                         if (j == 0)
3461                                 nvram_cmd |= NVRAM_CMD_FIRST;
3462                         else if (j == (pagesize - 4))
3463                                 nvram_cmd |= NVRAM_CMD_LAST;
3464
3465                         ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3466                         if (ret)
3467                                 break;
3468                 }
3469                 if (ret)
3470                         break;
3471         }
3472
3473         nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3474         tg3_nvram_exec_cmd(tp, nvram_cmd);
3475
3476         kfree(tmp);
3477
3478         return ret;
3479 }
3480
3481 /* offset and length are dword aligned */
3482 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3483                 u8 *buf)
3484 {
3485         int i, ret = 0;
3486
3487         for (i = 0; i < len; i += 4, offset += 4) {
3488                 u32 page_off, phy_addr, nvram_cmd;
3489                 __be32 data;
3490
3491                 memcpy(&data, buf + i, 4);
3492                 tw32(NVRAM_WRDATA, be32_to_cpu(data));
3493
3494                 page_off = offset % tp->nvram_pagesize;
3495
3496                 phy_addr = tg3_nvram_phys_addr(tp, offset);
3497
3498                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3499
3500                 if (page_off == 0 || i == 0)
3501                         nvram_cmd |= NVRAM_CMD_FIRST;
3502                 if (page_off == (tp->nvram_pagesize - 4))
3503                         nvram_cmd |= NVRAM_CMD_LAST;
3504
3505                 if (i == (len - 4))
3506                         nvram_cmd |= NVRAM_CMD_LAST;
3507
3508                 if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3509                     !tg3_flag(tp, FLASH) ||
3510                     !tg3_flag(tp, 57765_PLUS))
3511                         tw32(NVRAM_ADDR, phy_addr);
3512
3513                 if (tg3_asic_rev(tp) != ASIC_REV_5752 &&
3514                     !tg3_flag(tp, 5755_PLUS) &&
3515                     (tp->nvram_jedecnum == JEDEC_ST) &&
3516                     (nvram_cmd & NVRAM_CMD_FIRST)) {
3517                         u32 cmd;
3518
3519                         cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3520                         ret = tg3_nvram_exec_cmd(tp, cmd);
3521                         if (ret)
3522                                 break;
3523                 }
3524                 if (!tg3_flag(tp, FLASH)) {
3525                         /* We always do complete word writes to eeprom. */
3526                         nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3527                 }
3528
3529                 ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3530                 if (ret)
3531                         break;
3532         }
3533         return ret;
3534 }
3535
3536 /* offset and length are dword aligned */
3537 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3538 {
3539         int ret;
3540
3541         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3542                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3543                        ~GRC_LCLCTRL_GPIO_OUTPUT1);
3544                 udelay(40);
3545         }
3546
3547         if (!tg3_flag(tp, NVRAM)) {
3548                 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3549         } else {
3550                 u32 grc_mode;
3551
3552                 ret = tg3_nvram_lock(tp);
3553                 if (ret)
3554                         return ret;
3555
3556                 tg3_enable_nvram_access(tp);
3557                 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3558                         tw32(NVRAM_WRITE1, 0x406);
3559
3560                 grc_mode = tr32(GRC_MODE);
3561                 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3562
3563                 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3564                         ret = tg3_nvram_write_block_buffered(tp, offset, len,
3565                                 buf);
3566                 } else {
3567                         ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3568                                 buf);
3569                 }
3570
3571                 grc_mode = tr32(GRC_MODE);
3572                 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3573
3574                 tg3_disable_nvram_access(tp);
3575                 tg3_nvram_unlock(tp);
3576         }
3577
3578         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3579                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3580                 udelay(40);
3581         }
3582
3583         return ret;
3584 }
3585
3586 #define RX_CPU_SCRATCH_BASE     0x30000
3587 #define RX_CPU_SCRATCH_SIZE     0x04000
3588 #define TX_CPU_SCRATCH_BASE     0x34000
3589 #define TX_CPU_SCRATCH_SIZE     0x04000
3590
3591 /* tp->lock is held. */
3592 static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base)
3593 {
3594         int i;
3595         const int iters = 10000;
3596
3597         for (i = 0; i < iters; i++) {
3598                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3599                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3600                 if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT)
3601                         break;
3602                 if (pci_channel_offline(tp->pdev))
3603                         return -EBUSY;
3604         }
3605
3606         return (i == iters) ? -EBUSY : 0;
3607 }
3608
3609 /* tp->lock is held. */
3610 static int tg3_rxcpu_pause(struct tg3 *tp)
3611 {
3612         int rc = tg3_pause_cpu(tp, RX_CPU_BASE);
3613
3614         tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3615         tw32_f(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3616         udelay(10);
3617
3618         return rc;
3619 }
3620
3621 /* tp->lock is held. */
3622 static int tg3_txcpu_pause(struct tg3 *tp)
3623 {
3624         return tg3_pause_cpu(tp, TX_CPU_BASE);
3625 }
3626
3627 /* tp->lock is held. */
3628 static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base)
3629 {
3630         tw32(cpu_base + CPU_STATE, 0xffffffff);
3631         tw32_f(cpu_base + CPU_MODE,  0x00000000);
3632 }
3633
3634 /* tp->lock is held. */
3635 static void tg3_rxcpu_resume(struct tg3 *tp)
3636 {
3637         tg3_resume_cpu(tp, RX_CPU_BASE);
3638 }
3639
3640 /* tp->lock is held. */
3641 static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base)
3642 {
3643         int rc;
3644
3645         BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3646
3647         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3648                 u32 val = tr32(GRC_VCPU_EXT_CTRL);
3649
3650                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3651                 return 0;
3652         }
3653         if (cpu_base == RX_CPU_BASE) {
3654                 rc = tg3_rxcpu_pause(tp);
3655         } else {
3656                 /*
3657                  * There is only an Rx CPU for the 5750 derivative in the
3658                  * BCM4785.
3659                  */
3660                 if (tg3_flag(tp, IS_SSB_CORE))
3661                         return 0;
3662
3663                 rc = tg3_txcpu_pause(tp);
3664         }
3665
3666         if (rc) {
3667                 netdev_err(tp->dev, "%s timed out, %s CPU\n",
3668                            __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX");
3669                 return -ENODEV;
3670         }
3671
3672         /* Clear firmware's nvram arbitration. */
3673         if (tg3_flag(tp, NVRAM))
3674                 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3675         return 0;
3676 }
3677
3678 static int tg3_fw_data_len(struct tg3 *tp,
3679                            const struct tg3_firmware_hdr *fw_hdr)
3680 {
3681         int fw_len;
3682
3683         /* Non fragmented firmware have one firmware header followed by a
3684          * contiguous chunk of data to be written. The length field in that
3685          * header is not the length of data to be written but the complete
3686          * length of the bss. The data length is determined based on
3687          * tp->fw->size minus headers.
3688          *
3689          * Fragmented firmware have a main header followed by multiple
3690          * fragments. Each fragment is identical to non fragmented firmware
3691          * with a firmware header followed by a contiguous chunk of data. In
3692          * the main header, the length field is unused and set to 0xffffffff.
3693          * In each fragment header the length is the entire size of that
3694          * fragment i.e. fragment data + header length. Data length is
3695          * therefore length field in the header minus TG3_FW_HDR_LEN.
3696          */
3697         if (tp->fw_len == 0xffffffff)
3698                 fw_len = be32_to_cpu(fw_hdr->len);
3699         else
3700                 fw_len = tp->fw->size;
3701
3702         return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32);
3703 }
3704
3705 /* tp->lock is held. */
3706 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3707                                  u32 cpu_scratch_base, int cpu_scratch_size,
3708                                  const struct tg3_firmware_hdr *fw_hdr)
3709 {
3710         int err, i;
3711         void (*write_op)(struct tg3 *, u32, u32);
3712         int total_len = tp->fw->size;
3713
3714         if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3715                 netdev_err(tp->dev,
3716                            "%s: Trying to load TX cpu firmware which is 5705\n",
3717                            __func__);
3718                 return -EINVAL;
3719         }
3720
3721         if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766)
3722                 write_op = tg3_write_mem;
3723         else
3724                 write_op = tg3_write_indirect_reg32;
3725
3726         if (tg3_asic_rev(tp) != ASIC_REV_57766) {
3727                 /* It is possible that bootcode is still loading at this point.
3728                  * Get the nvram lock first before halting the cpu.
3729                  */
3730                 int lock_err = tg3_nvram_lock(tp);
3731                 err = tg3_halt_cpu(tp, cpu_base);
3732                 if (!lock_err)
3733                         tg3_nvram_unlock(tp);
3734                 if (err)
3735                         goto out;
3736
3737                 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3738                         write_op(tp, cpu_scratch_base + i, 0);
3739                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3740                 tw32(cpu_base + CPU_MODE,
3741                      tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT);
3742         } else {
3743                 /* Subtract additional main header for fragmented firmware and
3744                  * advance to the first fragment
3745                  */
3746                 total_len -= TG3_FW_HDR_LEN;
3747                 fw_hdr++;
3748         }
3749
3750         do {
3751                 u32 *fw_data = (u32 *)(fw_hdr + 1);
3752                 for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++)
3753                         write_op(tp, cpu_scratch_base +
3754                                      (be32_to_cpu(fw_hdr->base_addr) & 0xffff) +
3755                                      (i * sizeof(u32)),
3756                                  be32_to_cpu(fw_data[i]));
3757
3758                 total_len -= be32_to_cpu(fw_hdr->len);
3759
3760                 /* Advance to next fragment */
3761                 fw_hdr = (struct tg3_firmware_hdr *)
3762                          ((void *)fw_hdr + be32_to_cpu(fw_hdr->len));
3763         } while (total_len > 0);
3764
3765         err = 0;
3766
3767 out:
3768         return err;
3769 }
3770
3771 /* tp->lock is held. */
3772 static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc)
3773 {
3774         int i;
3775         const int iters = 5;
3776
3777         tw32(cpu_base + CPU_STATE, 0xffffffff);
3778         tw32_f(cpu_base + CPU_PC, pc);
3779
3780         for (i = 0; i < iters; i++) {
3781                 if (tr32(cpu_base + CPU_PC) == pc)
3782                         break;
3783                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3784                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3785                 tw32_f(cpu_base + CPU_PC, pc);
3786                 udelay(1000);
3787         }
3788
3789         return (i == iters) ? -EBUSY : 0;
3790 }
3791
3792 /* tp->lock is held. */
3793 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3794 {
3795         const struct tg3_firmware_hdr *fw_hdr;
3796         int err;
3797
3798         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3799
3800         /* Firmware blob starts with version numbers, followed by
3801            start address and length. We are setting complete length.
3802            length = end_address_of_bss - start_address_of_text.
3803            Remainder is the blob to be loaded contiguously
3804            from start address. */
3805
3806         err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3807                                     RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3808                                     fw_hdr);
3809         if (err)
3810                 return err;
3811
3812         err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3813                                     TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3814                                     fw_hdr);
3815         if (err)
3816                 return err;
3817
3818         /* Now startup only the RX cpu. */
3819         err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE,
3820                                        be32_to_cpu(fw_hdr->base_addr));
3821         if (err) {
3822                 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3823                            "should be %08x\n", __func__,
3824                            tr32(RX_CPU_BASE + CPU_PC),
3825                                 be32_to_cpu(fw_hdr->base_addr));
3826                 return -ENODEV;
3827         }
3828
3829         tg3_rxcpu_resume(tp);
3830
3831         return 0;
3832 }
3833
3834 static int tg3_validate_rxcpu_state(struct tg3 *tp)
3835 {
3836         const int iters = 1000;
3837         int i;
3838         u32 val;
3839
3840         /* Wait for boot code to complete initialization and enter service
3841          * loop. It is then safe to download service patches
3842          */
3843         for (i = 0; i < iters; i++) {
3844                 if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP)
3845                         break;
3846
3847                 udelay(10);
3848         }
3849
3850         if (i == iters) {
3851                 netdev_err(tp->dev, "Boot code not ready for service patches\n");
3852                 return -EBUSY;
3853         }
3854
3855         val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE);
3856         if (val & 0xff) {
3857                 netdev_warn(tp->dev,
3858                             "Other patches exist. Not downloading EEE patch\n");
3859                 return -EEXIST;
3860         }
3861
3862         return 0;
3863 }
3864
3865 /* tp->lock is held. */
3866 static void tg3_load_57766_firmware(struct tg3 *tp)
3867 {
3868         struct tg3_firmware_hdr *fw_hdr;
3869
3870         if (!tg3_flag(tp, NO_NVRAM))
3871                 return;
3872
3873         if (tg3_validate_rxcpu_state(tp))
3874                 return;
3875
3876         if (!tp->fw)
3877                 return;
3878
3879         /* This firmware blob has a different format than older firmware
3880          * releases as given below. The main difference is we have fragmented
3881          * data to be written to non-contiguous locations.
3882          *
3883          * In the beginning we have a firmware header identical to other
3884          * firmware which consists of version, base addr and length. The length
3885          * here is unused and set to 0xffffffff.
3886          *
3887          * This is followed by a series of firmware fragments which are
3888          * individually identical to previous firmware. i.e. they have the
3889          * firmware header and followed by data for that fragment. The version
3890          * field of the individual fragment header is unused.
3891          */
3892
3893         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3894         if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR)
3895                 return;
3896
3897         if (tg3_rxcpu_pause(tp))
3898                 return;
3899
3900         /* tg3_load_firmware_cpu() will always succeed for the 57766 */
3901         tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr);
3902
3903         tg3_rxcpu_resume(tp);
3904 }
3905
3906 /* tp->lock is held. */
3907 static int tg3_load_tso_firmware(struct tg3 *tp)
3908 {
3909         const struct tg3_firmware_hdr *fw_hdr;
3910         unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3911         int err;
3912
3913         if (!tg3_flag(tp, FW_TSO))
3914                 return 0;
3915
3916         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3917
3918         /* Firmware blob starts with version numbers, followed by
3919            start address and length. We are setting complete length.
3920            length = end_address_of_bss - start_address_of_text.
3921            Remainder is the blob to be loaded contiguously
3922            from start address. */
3923
3924         cpu_scratch_size = tp->fw_len;
3925
3926         if (tg3_asic_rev(tp) == ASIC_REV_5705) {
3927                 cpu_base = RX_CPU_BASE;
3928                 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3929         } else {
3930                 cpu_base = TX_CPU_BASE;
3931                 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3932                 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3933         }
3934
3935         err = tg3_load_firmware_cpu(tp, cpu_base,
3936                                     cpu_scratch_base, cpu_scratch_size,
3937                                     fw_hdr);
3938         if (err)
3939                 return err;
3940
3941         /* Now startup the cpu. */
3942         err = tg3_pause_cpu_and_set_pc(tp, cpu_base,
3943                                        be32_to_cpu(fw_hdr->base_addr));
3944         if (err) {
3945                 netdev_err(tp->dev,
3946                            "%s fails to set CPU PC, is %08x should be %08x\n",
3947                            __func__, tr32(cpu_base + CPU_PC),
3948                            be32_to_cpu(fw_hdr->base_addr));
3949                 return -ENODEV;
3950         }
3951
3952         tg3_resume_cpu(tp, cpu_base);
3953         return 0;
3954 }
3955
3956 /* tp->lock is held. */
3957 static void __tg3_set_one_mac_addr(struct tg3 *tp, u8 *mac_addr, int index)
3958 {
3959         u32 addr_high, addr_low;
3960
3961         addr_high = ((mac_addr[0] << 8) | mac_addr[1]);
3962         addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) |
3963                     (mac_addr[4] <<  8) | mac_addr[5]);
3964
3965         if (index < 4) {
3966                 tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high);
3967                 tw32(MAC_ADDR_0_LOW + (index * 8), addr_low);
3968         } else {
3969                 index -= 4;
3970                 tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high);
3971                 tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low);
3972         }
3973 }
3974
3975 /* tp->lock is held. */
3976 static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1)
3977 {
3978         u32 addr_high;
3979         int i;
3980
3981         for (i = 0; i < 4; i++) {
3982                 if (i == 1 && skip_mac_1)
3983                         continue;
3984                 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3985         }
3986
3987         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
3988             tg3_asic_rev(tp) == ASIC_REV_5704) {
3989                 for (i = 4; i < 16; i++)
3990                         __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3991         }
3992
3993         addr_high = (tp->dev->dev_addr[0] +
3994                      tp->dev->dev_addr[1] +
3995                      tp->dev->dev_addr[2] +
3996                      tp->dev->dev_addr[3] +
3997                      tp->dev->dev_addr[4] +
3998                      tp->dev->dev_addr[5]) &
3999                 TX_BACKOFF_SEED_MASK;
4000         tw32(MAC_TX_BACKOFF_SEED, addr_high);
4001 }
4002
4003 static void tg3_enable_register_access(struct tg3 *tp)
4004 {
4005         /*
4006          * Make sure register accesses (indirect or otherwise) will function
4007          * correctly.
4008          */
4009         pci_write_config_dword(tp->pdev,
4010                                TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
4011 }
4012
4013 static int tg3_power_up(struct tg3 *tp)
4014 {
4015         int err;
4016
4017         tg3_enable_register_access(tp);
4018
4019         err = pci_set_power_state(tp->pdev, PCI_D0);
4020         if (!err) {
4021                 /* Switch out of Vaux if it is a NIC */
4022                 tg3_pwrsrc_switch_to_vmain(tp);
4023         } else {
4024                 netdev_err(tp->dev, "Transition to D0 failed\n");
4025         }
4026
4027         return err;
4028 }
4029
4030 static int tg3_setup_phy(struct tg3 *, bool);
4031
4032 static int tg3_power_down_prepare(struct tg3 *tp)
4033 {
4034         u32 misc_host_ctrl;
4035         bool device_should_wake, do_low_power;
4036
4037         tg3_enable_register_access(tp);
4038
4039         /* Restore the CLKREQ setting. */
4040         if (tg3_flag(tp, CLKREQ_BUG))
4041                 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4042                                          PCI_EXP_LNKCTL_CLKREQ_EN);
4043
4044         misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
4045         tw32(TG3PCI_MISC_HOST_CTRL,
4046              misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
4047
4048         device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
4049                              tg3_flag(tp, WOL_ENABLE);
4050
4051         if (tg3_flag(tp, USE_PHYLIB)) {
4052                 do_low_power = false;
4053                 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
4054                     !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4055                         __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising) = { 0, };
4056                         struct phy_device *phydev;
4057                         u32 phyid;
4058
4059                         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
4060
4061                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4062
4063                         tp->link_config.speed = phydev->speed;
4064                         tp->link_config.duplex = phydev->duplex;
4065                         tp->link_config.autoneg = phydev->autoneg;
4066                         ethtool_convert_link_mode_to_legacy_u32(
4067                                 &tp->link_config.advertising,
4068                                 phydev->advertising);
4069
4070                         linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, advertising);
4071                         linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
4072                                          advertising);
4073                         linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
4074                                          advertising);
4075                         linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
4076                                          advertising);
4077
4078                         if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
4079                                 if (tg3_flag(tp, WOL_SPEED_100MB)) {
4080                                         linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
4081                                                          advertising);
4082                                         linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
4083                                                          advertising);
4084                                         linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4085                                                          advertising);
4086                                 } else {
4087                                         linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4088                                                          advertising);
4089                                 }
4090                         }
4091
4092                         linkmode_copy(phydev->advertising, advertising);
4093                         phy_start_aneg(phydev);
4094
4095                         phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
4096                         if (phyid != PHY_ID_BCMAC131) {
4097                                 phyid &= PHY_BCM_OUI_MASK;
4098                                 if (phyid == PHY_BCM_OUI_1 ||
4099                                     phyid == PHY_BCM_OUI_2 ||
4100                                     phyid == PHY_BCM_OUI_3)
4101                                         do_low_power = true;
4102                         }
4103                 }
4104         } else {
4105                 do_low_power = true;
4106
4107                 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
4108                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4109
4110                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
4111                         tg3_setup_phy(tp, false);
4112         }
4113
4114         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
4115                 u32 val;
4116
4117                 val = tr32(GRC_VCPU_EXT_CTRL);
4118                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
4119         } else if (!tg3_flag(tp, ENABLE_ASF)) {
4120                 int i;
4121                 u32 val;
4122
4123                 for (i = 0; i < 200; i++) {
4124                         tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
4125                         if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4126                                 break;
4127                         msleep(1);
4128                 }
4129         }
4130         if (tg3_flag(tp, WOL_CAP))
4131                 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
4132                                                      WOL_DRV_STATE_SHUTDOWN |
4133                                                      WOL_DRV_WOL |
4134                                                      WOL_SET_MAGIC_PKT);
4135
4136         if (device_should_wake) {
4137                 u32 mac_mode;
4138
4139                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
4140                         if (do_low_power &&
4141                             !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
4142                                 tg3_phy_auxctl_write(tp,
4143                                                MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
4144                                                MII_TG3_AUXCTL_PCTL_WOL_EN |
4145                                                MII_TG3_AUXCTL_PCTL_100TX_LPWR |
4146                                                MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
4147                                 udelay(40);
4148                         }
4149
4150                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4151                                 mac_mode = MAC_MODE_PORT_MODE_GMII;
4152                         else if (tp->phy_flags &
4153                                  TG3_PHYFLG_KEEP_LINK_ON_PWRDN) {
4154                                 if (tp->link_config.active_speed == SPEED_1000)
4155                                         mac_mode = MAC_MODE_PORT_MODE_GMII;
4156                                 else
4157                                         mac_mode = MAC_MODE_PORT_MODE_MII;
4158                         } else
4159                                 mac_mode = MAC_MODE_PORT_MODE_MII;
4160
4161                         mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
4162                         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
4163                                 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
4164                                              SPEED_100 : SPEED_10;
4165                                 if (tg3_5700_link_polarity(tp, speed))
4166                                         mac_mode |= MAC_MODE_LINK_POLARITY;
4167                                 else
4168                                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
4169                         }
4170                 } else {
4171                         mac_mode = MAC_MODE_PORT_MODE_TBI;
4172                 }
4173
4174                 if (!tg3_flag(tp, 5750_PLUS))
4175                         tw32(MAC_LED_CTRL, tp->led_ctrl);
4176
4177                 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
4178                 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
4179                     (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
4180                         mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
4181
4182                 if (tg3_flag(tp, ENABLE_APE))
4183                         mac_mode |= MAC_MODE_APE_TX_EN |
4184                                     MAC_MODE_APE_RX_EN |
4185                                     MAC_MODE_TDE_ENABLE;
4186
4187                 tw32_f(MAC_MODE, mac_mode);
4188                 udelay(100);
4189
4190                 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
4191                 udelay(10);
4192         }
4193
4194         if (!tg3_flag(tp, WOL_SPEED_100MB) &&
4195             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4196              tg3_asic_rev(tp) == ASIC_REV_5701)) {
4197                 u32 base_val;
4198
4199                 base_val = tp->pci_clock_ctrl;
4200                 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
4201                              CLOCK_CTRL_TXCLK_DISABLE);
4202
4203                 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
4204                             CLOCK_CTRL_PWRDOWN_PLL133, 40);
4205         } else if (tg3_flag(tp, 5780_CLASS) ||
4206                    tg3_flag(tp, CPMU_PRESENT) ||
4207                    tg3_asic_rev(tp) == ASIC_REV_5906) {
4208                 /* do nothing */
4209         } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
4210                 u32 newbits1, newbits2;
4211
4212                 if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4213                     tg3_asic_rev(tp) == ASIC_REV_5701) {
4214                         newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
4215                                     CLOCK_CTRL_TXCLK_DISABLE |
4216                                     CLOCK_CTRL_ALTCLK);
4217                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4218                 } else if (tg3_flag(tp, 5705_PLUS)) {
4219                         newbits1 = CLOCK_CTRL_625_CORE;
4220                         newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
4221                 } else {
4222                         newbits1 = CLOCK_CTRL_ALTCLK;
4223                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4224                 }
4225
4226                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
4227                             40);
4228
4229                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
4230                             40);
4231
4232                 if (!tg3_flag(tp, 5705_PLUS)) {
4233                         u32 newbits3;
4234
4235                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4236                             tg3_asic_rev(tp) == ASIC_REV_5701) {
4237                                 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
4238                                             CLOCK_CTRL_TXCLK_DISABLE |
4239                                             CLOCK_CTRL_44MHZ_CORE);
4240                         } else {
4241                                 newbits3 = CLOCK_CTRL_44MHZ_CORE;
4242                         }
4243
4244                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
4245                                     tp->pci_clock_ctrl | newbits3, 40);
4246                 }
4247         }
4248
4249         if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
4250                 tg3_power_down_phy(tp, do_low_power);
4251
4252         tg3_frob_aux_power(tp, true);
4253
4254         /* Workaround for unstable PLL clock */
4255         if ((!tg3_flag(tp, IS_SSB_CORE)) &&
4256             ((tg3_chip_rev(tp) == CHIPREV_5750_AX) ||
4257              (tg3_chip_rev(tp) == CHIPREV_5750_BX))) {
4258                 u32 val = tr32(0x7d00);
4259
4260                 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
4261                 tw32(0x7d00, val);
4262                 if (!tg3_flag(tp, ENABLE_ASF)) {
4263                         int err;
4264
4265                         err = tg3_nvram_lock(tp);
4266                         tg3_halt_cpu(tp, RX_CPU_BASE);
4267                         if (!err)
4268                                 tg3_nvram_unlock(tp);
4269                 }
4270         }
4271
4272         tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
4273
4274         tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
4275
4276         return 0;
4277 }
4278
4279 static void tg3_power_down(struct tg3 *tp)
4280 {
4281         pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
4282         pci_set_power_state(tp->pdev, PCI_D3hot);
4283 }
4284
4285 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex)
4286 {
4287         switch (val & MII_TG3_AUX_STAT_SPDMASK) {
4288         case MII_TG3_AUX_STAT_10HALF:
4289                 *speed = SPEED_10;
4290                 *duplex = DUPLEX_HALF;
4291                 break;
4292
4293         case MII_TG3_AUX_STAT_10FULL:
4294                 *speed = SPEED_10;
4295                 *duplex = DUPLEX_FULL;
4296                 break;
4297
4298         case MII_TG3_AUX_STAT_100HALF:
4299                 *speed = SPEED_100;
4300                 *duplex = DUPLEX_HALF;
4301                 break;
4302
4303         case MII_TG3_AUX_STAT_100FULL:
4304                 *speed = SPEED_100;
4305                 *duplex = DUPLEX_FULL;
4306                 break;
4307
4308         case MII_TG3_AUX_STAT_1000HALF:
4309                 *speed = SPEED_1000;
4310                 *duplex = DUPLEX_HALF;
4311                 break;
4312
4313         case MII_TG3_AUX_STAT_1000FULL:
4314                 *speed = SPEED_1000;
4315                 *duplex = DUPLEX_FULL;
4316                 break;
4317
4318         default:
4319                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4320                         *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
4321                                  SPEED_10;
4322                         *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
4323                                   DUPLEX_HALF;
4324                         break;
4325                 }
4326                 *speed = SPEED_UNKNOWN;
4327                 *duplex = DUPLEX_UNKNOWN;
4328                 break;
4329         }
4330 }
4331
4332 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
4333 {
4334         int err = 0;
4335         u32 val, new_adv;
4336
4337         new_adv = ADVERTISE_CSMA;
4338         new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
4339         new_adv |= mii_advertise_flowctrl(flowctrl);
4340
4341         err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
4342         if (err)
4343                 goto done;
4344
4345         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4346                 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
4347
4348                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4349                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)
4350                         new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4351
4352                 err = tg3_writephy(tp, MII_CTRL1000, new_adv);
4353                 if (err)
4354                         goto done;
4355         }
4356
4357         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4358                 goto done;
4359
4360         tw32(TG3_CPMU_EEE_MODE,
4361              tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
4362
4363         err = tg3_phy_toggle_auxctl_smdsp(tp, true);
4364         if (!err) {
4365                 u32 err2;
4366
4367                 val = 0;
4368                 /* Advertise 100-BaseTX EEE ability */
4369                 if (advertise & ADVERTISED_100baseT_Full)
4370                         val |= MDIO_AN_EEE_ADV_100TX;
4371                 /* Advertise 1000-BaseT EEE ability */
4372                 if (advertise & ADVERTISED_1000baseT_Full)
4373                         val |= MDIO_AN_EEE_ADV_1000T;
4374
4375                 if (!tp->eee.eee_enabled) {
4376                         val = 0;
4377                         tp->eee.advertised = 0;
4378                 } else {
4379                         tp->eee.advertised = advertise &
4380                                              (ADVERTISED_100baseT_Full |
4381                                               ADVERTISED_1000baseT_Full);
4382                 }
4383
4384                 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
4385                 if (err)
4386                         val = 0;
4387
4388                 switch (tg3_asic_rev(tp)) {
4389                 case ASIC_REV_5717:
4390                 case ASIC_REV_57765:
4391                 case ASIC_REV_57766:
4392                 case ASIC_REV_5719:
4393                         /* If we advertised any eee advertisements above... */
4394                         if (val)
4395                                 val = MII_TG3_DSP_TAP26_ALNOKO |
4396                                       MII_TG3_DSP_TAP26_RMRXSTO |
4397                                       MII_TG3_DSP_TAP26_OPCSINPT;
4398                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
4399                         /* Fall through */
4400                 case ASIC_REV_5720:
4401                 case ASIC_REV_5762:
4402                         if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4403                                 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4404                                                  MII_TG3_DSP_CH34TP2_HIBW01);
4405                 }
4406
4407                 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false);
4408                 if (!err)
4409                         err = err2;
4410         }
4411
4412 done:
4413         return err;
4414 }
4415
4416 static void tg3_phy_copper_begin(struct tg3 *tp)
4417 {
4418         if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4419             (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4420                 u32 adv, fc;
4421
4422                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4423                     !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4424                         adv = ADVERTISED_10baseT_Half |
4425                               ADVERTISED_10baseT_Full;
4426                         if (tg3_flag(tp, WOL_SPEED_100MB))
4427                                 adv |= ADVERTISED_100baseT_Half |
4428                                        ADVERTISED_100baseT_Full;
4429                         if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) {
4430                                 if (!(tp->phy_flags &
4431                                       TG3_PHYFLG_DISABLE_1G_HD_ADV))
4432                                         adv |= ADVERTISED_1000baseT_Half;
4433                                 adv |= ADVERTISED_1000baseT_Full;
4434                         }
4435
4436                         fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4437                 } else {
4438                         adv = tp->link_config.advertising;
4439                         if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4440                                 adv &= ~(ADVERTISED_1000baseT_Half |
4441                                          ADVERTISED_1000baseT_Full);
4442
4443                         fc = tp->link_config.flowctrl;
4444                 }
4445
4446                 tg3_phy_autoneg_cfg(tp, adv, fc);
4447
4448                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4449                     (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4450                         /* Normally during power down we want to autonegotiate
4451                          * the lowest possible speed for WOL. However, to avoid
4452                          * link flap, we leave it untouched.
4453                          */
4454                         return;
4455                 }
4456
4457                 tg3_writephy(tp, MII_BMCR,
4458                              BMCR_ANENABLE | BMCR_ANRESTART);
4459         } else {
4460                 int i;
4461                 u32 bmcr, orig_bmcr;
4462
4463                 tp->link_config.active_speed = tp->link_config.speed;
4464                 tp->link_config.active_duplex = tp->link_config.duplex;
4465
4466                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
4467                         /* With autoneg disabled, 5715 only links up when the
4468                          * advertisement register has the configured speed
4469                          * enabled.
4470                          */
4471                         tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL);
4472                 }
4473
4474                 bmcr = 0;
4475                 switch (tp->link_config.speed) {
4476                 default:
4477                 case SPEED_10:
4478                         break;
4479
4480                 case SPEED_100:
4481                         bmcr |= BMCR_SPEED100;
4482                         break;
4483
4484                 case SPEED_1000:
4485                         bmcr |= BMCR_SPEED1000;
4486                         break;
4487                 }
4488
4489                 if (tp->link_config.duplex == DUPLEX_FULL)
4490                         bmcr |= BMCR_FULLDPLX;
4491
4492                 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4493                     (bmcr != orig_bmcr)) {
4494                         tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4495                         for (i = 0; i < 1500; i++) {
4496                                 u32 tmp;
4497
4498                                 udelay(10);
4499                                 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4500                                     tg3_readphy(tp, MII_BMSR, &tmp))
4501                                         continue;
4502                                 if (!(tmp & BMSR_LSTATUS)) {
4503                                         udelay(40);
4504                                         break;
4505                                 }
4506                         }
4507                         tg3_writephy(tp, MII_BMCR, bmcr);
4508                         udelay(40);
4509                 }
4510         }
4511 }
4512
4513 static int tg3_phy_pull_config(struct tg3 *tp)
4514 {
4515         int err;
4516         u32 val;
4517
4518         err = tg3_readphy(tp, MII_BMCR, &val);
4519         if (err)
4520                 goto done;
4521
4522         if (!(val & BMCR_ANENABLE)) {
4523                 tp->link_config.autoneg = AUTONEG_DISABLE;
4524                 tp->link_config.advertising = 0;
4525                 tg3_flag_clear(tp, PAUSE_AUTONEG);
4526
4527                 err = -EIO;
4528
4529                 switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) {
4530                 case 0:
4531                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4532                                 goto done;
4533
4534                         tp->link_config.speed = SPEED_10;
4535                         break;
4536                 case BMCR_SPEED100:
4537                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4538                                 goto done;
4539
4540                         tp->link_config.speed = SPEED_100;
4541                         break;
4542                 case BMCR_SPEED1000:
4543                         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4544                                 tp->link_config.speed = SPEED_1000;
4545                                 break;
4546                         }
4547                         /* Fall through */
4548                 default:
4549                         goto done;
4550                 }
4551
4552                 if (val & BMCR_FULLDPLX)
4553                         tp->link_config.duplex = DUPLEX_FULL;
4554                 else
4555                         tp->link_config.duplex = DUPLEX_HALF;
4556
4557                 tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
4558
4559                 err = 0;
4560                 goto done;
4561         }
4562
4563         tp->link_config.autoneg = AUTONEG_ENABLE;
4564         tp->link_config.advertising = ADVERTISED_Autoneg;
4565         tg3_flag_set(tp, PAUSE_AUTONEG);
4566
4567         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4568                 u32 adv;
4569
4570                 err = tg3_readphy(tp, MII_ADVERTISE, &val);
4571                 if (err)
4572                         goto done;
4573
4574                 adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL);
4575                 tp->link_config.advertising |= adv | ADVERTISED_TP;
4576
4577                 tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val);
4578         } else {
4579                 tp->link_config.advertising |= ADVERTISED_FIBRE;
4580         }
4581
4582         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4583                 u32 adv;
4584
4585                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4586                         err = tg3_readphy(tp, MII_CTRL1000, &val);
4587                         if (err)
4588                                 goto done;
4589
4590                         adv = mii_ctrl1000_to_ethtool_adv_t(val);
4591                 } else {
4592                         err = tg3_readphy(tp, MII_ADVERTISE, &val);
4593                         if (err)
4594                                 goto done;
4595
4596                         adv = tg3_decode_flowctrl_1000X(val);
4597                         tp->link_config.flowctrl = adv;
4598
4599                         val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL);
4600                         adv = mii_adv_to_ethtool_adv_x(val);
4601                 }
4602
4603                 tp->link_config.advertising |= adv;
4604         }
4605
4606 done:
4607         return err;
4608 }
4609
4610 static int tg3_init_5401phy_dsp(struct tg3 *tp)
4611 {
4612         int err;
4613
4614         /* Turn off tap power management. */
4615         /* Set Extended packet length bit */
4616         err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4617
4618         err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4619         err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4620         err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4621         err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4622         err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4623
4624         udelay(40);
4625
4626         return err;
4627 }
4628
4629 static bool tg3_phy_eee_config_ok(struct tg3 *tp)
4630 {
4631         struct ethtool_eee eee;
4632
4633         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4634                 return true;
4635
4636         tg3_eee_pull_config(tp, &eee);
4637
4638         if (tp->eee.eee_enabled) {
4639                 if (tp->eee.advertised != eee.advertised ||
4640                     tp->eee.tx_lpi_timer != eee.tx_lpi_timer ||
4641                     tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled)
4642                         return false;
4643         } else {
4644                 /* EEE is disabled but we're advertising */
4645                 if (eee.advertised)
4646                         return false;
4647         }
4648
4649         return true;
4650 }
4651
4652 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4653 {
4654         u32 advmsk, tgtadv, advertising;
4655
4656         advertising = tp->link_config.advertising;
4657         tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4658
4659         advmsk = ADVERTISE_ALL;
4660         if (tp->link_config.active_duplex == DUPLEX_FULL) {
4661                 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4662                 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4663         }
4664
4665         if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4666                 return false;
4667
4668         if ((*lcladv & advmsk) != tgtadv)
4669                 return false;
4670
4671         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4672                 u32 tg3_ctrl;
4673
4674                 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4675
4676                 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4677                         return false;
4678
4679                 if (tgtadv &&
4680                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4681                      tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) {
4682                         tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4683                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4684                                      CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4685                 } else {
4686                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4687                 }
4688
4689                 if (tg3_ctrl != tgtadv)
4690                         return false;
4691         }
4692
4693         return true;
4694 }
4695
4696 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4697 {
4698         u32 lpeth = 0;
4699
4700         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4701                 u32 val;
4702
4703                 if (tg3_readphy(tp, MII_STAT1000, &val))
4704                         return false;
4705
4706                 lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4707         }
4708
4709         if (tg3_readphy(tp, MII_LPA, rmtadv))
4710                 return false;
4711
4712         lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4713         tp->link_config.rmt_adv = lpeth;
4714
4715         return true;
4716 }
4717
4718 static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up)
4719 {
4720         if (curr_link_up != tp->link_up) {
4721                 if (curr_link_up) {
4722                         netif_carrier_on(tp->dev);
4723                 } else {
4724                         netif_carrier_off(tp->dev);
4725                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4726                                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4727                 }
4728
4729                 tg3_link_report(tp);
4730                 return true;
4731         }
4732
4733         return false;
4734 }
4735
4736 static void tg3_clear_mac_status(struct tg3 *tp)
4737 {
4738         tw32(MAC_EVENT, 0);
4739
4740         tw32_f(MAC_STATUS,
4741                MAC_STATUS_SYNC_CHANGED |
4742                MAC_STATUS_CFG_CHANGED |
4743                MAC_STATUS_MI_COMPLETION |
4744                MAC_STATUS_LNKSTATE_CHANGED);
4745         udelay(40);
4746 }
4747
4748 static void tg3_setup_eee(struct tg3 *tp)
4749 {
4750         u32 val;
4751
4752         val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
4753               TG3_CPMU_EEE_LNKIDL_UART_IDL;
4754         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
4755                 val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT;
4756
4757         tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val);
4758
4759         tw32_f(TG3_CPMU_EEE_CTRL,
4760                TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
4761
4762         val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
4763               (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) |
4764               TG3_CPMU_EEEMD_LPI_IN_RX |
4765               TG3_CPMU_EEEMD_EEE_ENABLE;
4766
4767         if (tg3_asic_rev(tp) != ASIC_REV_5717)
4768                 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
4769
4770         if (tg3_flag(tp, ENABLE_APE))
4771                 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
4772
4773         tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0);
4774
4775         tw32_f(TG3_CPMU_EEE_DBTMR1,
4776                TG3_CPMU_DBTMR1_PCIEXIT_2047US |
4777                (tp->eee.tx_lpi_timer & 0xffff));
4778
4779         tw32_f(TG3_CPMU_EEE_DBTMR2,
4780                TG3_CPMU_DBTMR2_APE_TX_2047US |
4781                TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
4782 }
4783
4784 static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
4785 {
4786         bool current_link_up;
4787         u32 bmsr, val;
4788         u32 lcl_adv, rmt_adv;
4789         u32 current_speed;
4790         u8 current_duplex;
4791         int i, err;
4792
4793         tg3_clear_mac_status(tp);
4794
4795         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4796                 tw32_f(MAC_MI_MODE,
4797                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4798                 udelay(80);
4799         }
4800
4801         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4802
4803         /* Some third-party PHYs need to be reset on link going
4804          * down.
4805          */
4806         if ((tg3_asic_rev(tp) == ASIC_REV_5703 ||
4807              tg3_asic_rev(tp) == ASIC_REV_5704 ||
4808              tg3_asic_rev(tp) == ASIC_REV_5705) &&
4809             tp->link_up) {
4810                 tg3_readphy(tp, MII_BMSR, &bmsr);
4811                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4812                     !(bmsr & BMSR_LSTATUS))
4813                         force_reset = true;
4814         }
4815         if (force_reset)
4816                 tg3_phy_reset(tp);
4817
4818         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4819                 tg3_readphy(tp, MII_BMSR, &bmsr);
4820                 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4821                     !tg3_flag(tp, INIT_COMPLETE))
4822                         bmsr = 0;
4823
4824                 if (!(bmsr & BMSR_LSTATUS)) {
4825                         err = tg3_init_5401phy_dsp(tp);
4826                         if (err)
4827                                 return err;
4828
4829                         tg3_readphy(tp, MII_BMSR, &bmsr);
4830                         for (i = 0; i < 1000; i++) {
4831                                 udelay(10);
4832                                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4833                                     (bmsr & BMSR_LSTATUS)) {
4834                                         udelay(40);
4835                                         break;
4836                                 }
4837                         }
4838
4839                         if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4840                             TG3_PHY_REV_BCM5401_B0 &&
4841                             !(bmsr & BMSR_LSTATUS) &&
4842                             tp->link_config.active_speed == SPEED_1000) {
4843                                 err = tg3_phy_reset(tp);
4844                                 if (!err)
4845                                         err = tg3_init_5401phy_dsp(tp);
4846                                 if (err)
4847                                         return err;
4848                         }
4849                 }
4850         } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4851                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) {
4852                 /* 5701 {A0,B0} CRC bug workaround */
4853                 tg3_writephy(tp, 0x15, 0x0a75);
4854                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4855                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4856                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4857         }
4858
4859         /* Clear pending interrupts... */
4860         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4861         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4862
4863         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4864                 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4865         else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4866                 tg3_writephy(tp, MII_TG3_IMASK, ~0);
4867
4868         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4869             tg3_asic_rev(tp) == ASIC_REV_5701) {
4870                 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4871                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
4872                                      MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4873                 else
4874                         tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4875         }
4876
4877         current_link_up = false;
4878         current_speed = SPEED_UNKNOWN;
4879         current_duplex = DUPLEX_UNKNOWN;
4880         tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4881         tp->link_config.rmt_adv = 0;
4882
4883         if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4884                 err = tg3_phy_auxctl_read(tp,
4885                                           MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4886                                           &val);
4887                 if (!err && !(val & (1 << 10))) {
4888                         tg3_phy_auxctl_write(tp,
4889                                              MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4890                                              val | (1 << 10));
4891                         goto relink;
4892                 }
4893         }
4894
4895         bmsr = 0;
4896         for (i = 0; i < 100; i++) {
4897                 tg3_readphy(tp, MII_BMSR, &bmsr);
4898                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4899                     (bmsr & BMSR_LSTATUS))
4900                         break;
4901                 udelay(40);
4902         }
4903
4904         if (bmsr & BMSR_LSTATUS) {
4905                 u32 aux_stat, bmcr;
4906
4907                 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4908                 for (i = 0; i < 2000; i++) {
4909                         udelay(10);
4910                         if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4911                             aux_stat)
4912                                 break;
4913                 }
4914
4915                 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4916                                              &current_speed,
4917                                              &current_duplex);
4918
4919                 bmcr = 0;
4920                 for (i = 0; i < 200; i++) {
4921                         tg3_readphy(tp, MII_BMCR, &bmcr);
4922                         if (tg3_readphy(tp, MII_BMCR, &bmcr))
4923                                 continue;
4924                         if (bmcr && bmcr != 0x7fff)
4925                                 break;
4926                         udelay(10);
4927                 }
4928
4929                 lcl_adv = 0;
4930                 rmt_adv = 0;
4931
4932                 tp->link_config.active_speed = current_speed;
4933                 tp->link_config.active_duplex = current_duplex;
4934
4935                 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4936                         bool eee_config_ok = tg3_phy_eee_config_ok(tp);
4937
4938                         if ((bmcr & BMCR_ANENABLE) &&
4939                             eee_config_ok &&
4940                             tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4941                             tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4942                                 current_link_up = true;
4943
4944                         /* EEE settings changes take effect only after a phy
4945                          * reset.  If we have skipped a reset due to Link Flap
4946                          * Avoidance being enabled, do it now.
4947                          */
4948                         if (!eee_config_ok &&
4949                             (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
4950                             !force_reset) {
4951                                 tg3_setup_eee(tp);
4952                                 tg3_phy_reset(tp);
4953                         }
4954                 } else {
4955                         if (!(bmcr & BMCR_ANENABLE) &&
4956                             tp->link_config.speed == current_speed &&
4957                             tp->link_config.duplex == current_duplex) {
4958                                 current_link_up = true;
4959                         }
4960                 }
4961
4962                 if (current_link_up &&
4963                     tp->link_config.active_duplex == DUPLEX_FULL) {
4964                         u32 reg, bit;
4965
4966                         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4967                                 reg = MII_TG3_FET_GEN_STAT;
4968                                 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4969                         } else {
4970                                 reg = MII_TG3_EXT_STAT;
4971                                 bit = MII_TG3_EXT_STAT_MDIX;
4972                         }
4973
4974                         if (!tg3_readphy(tp, reg, &val) && (val & bit))
4975                                 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4976
4977                         tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4978                 }
4979         }
4980
4981 relink:
4982         if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4983                 tg3_phy_copper_begin(tp);
4984
4985                 if (tg3_flag(tp, ROBOSWITCH)) {
4986                         current_link_up = true;
4987                         /* FIXME: when BCM5325 switch is used use 100 MBit/s */
4988                         current_speed = SPEED_1000;
4989                         current_duplex = DUPLEX_FULL;
4990                         tp->link_config.active_speed = current_speed;
4991                         tp->link_config.active_duplex = current_duplex;
4992                 }
4993
4994                 tg3_readphy(tp, MII_BMSR, &bmsr);
4995                 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4996                     (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4997                         current_link_up = true;
4998         }
4999
5000         tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
5001         if (current_link_up) {
5002                 if (tp->link_config.active_speed == SPEED_100 ||
5003                     tp->link_config.active_speed == SPEED_10)
5004                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5005                 else
5006                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5007         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
5008                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5009         else
5010                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5011
5012         /* In order for the 5750 core in BCM4785 chip to work properly
5013          * in RGMII mode, the Led Control Register must be set up.
5014          */
5015         if (tg3_flag(tp, RGMII_MODE)) {
5016                 u32 led_ctrl = tr32(MAC_LED_CTRL);
5017                 led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON);
5018
5019                 if (tp->link_config.active_speed == SPEED_10)
5020                         led_ctrl |= LED_CTRL_LNKLED_OVERRIDE;
5021                 else if (tp->link_config.active_speed == SPEED_100)
5022                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5023                                      LED_CTRL_100MBPS_ON);
5024                 else if (tp->link_config.active_speed == SPEED_1000)
5025                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5026                                      LED_CTRL_1000MBPS_ON);
5027
5028                 tw32(MAC_LED_CTRL, led_ctrl);
5029                 udelay(40);
5030         }
5031
5032         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5033         if (tp->link_config.active_duplex == DUPLEX_HALF)
5034                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5035
5036         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
5037                 if (current_link_up &&
5038                     tg3_5700_link_polarity(tp, tp->link_config.active_speed))
5039                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
5040                 else
5041                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
5042         }
5043
5044         /* ??? Without this setting Netgear GA302T PHY does not
5045          * ??? send/receive packets...
5046          */
5047         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
5048             tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) {
5049                 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
5050                 tw32_f(MAC_MI_MODE, tp->mi_mode);
5051                 udelay(80);
5052         }
5053
5054         tw32_f(MAC_MODE, tp->mac_mode);
5055         udelay(40);
5056
5057         tg3_phy_eee_adjust(tp, current_link_up);
5058
5059         if (tg3_flag(tp, USE_LINKCHG_REG)) {
5060                 /* Polled via timer. */
5061                 tw32_f(MAC_EVENT, 0);
5062         } else {
5063                 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5064         }
5065         udelay(40);
5066
5067         if (tg3_asic_rev(tp) == ASIC_REV_5700 &&
5068             current_link_up &&
5069             tp->link_config.active_speed == SPEED_1000 &&
5070             (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
5071                 udelay(120);
5072                 tw32_f(MAC_STATUS,
5073                      (MAC_STATUS_SYNC_CHANGED |
5074                       MAC_STATUS_CFG_CHANGED));
5075                 udelay(40);
5076                 tg3_write_mem(tp,
5077                               NIC_SRAM_FIRMWARE_MBOX,
5078                               NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
5079         }
5080
5081         /* Prevent send BD corruption. */
5082         if (tg3_flag(tp, CLKREQ_BUG)) {
5083                 if (tp->link_config.active_speed == SPEED_100 ||
5084                     tp->link_config.active_speed == SPEED_10)
5085                         pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
5086                                                    PCI_EXP_LNKCTL_CLKREQ_EN);
5087                 else
5088                         pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
5089                                                  PCI_EXP_LNKCTL_CLKREQ_EN);
5090         }
5091
5092         tg3_test_and_report_link_chg(tp, current_link_up);
5093
5094         return 0;
5095 }
5096
5097 struct tg3_fiber_aneginfo {
5098         int state;
5099 #define ANEG_STATE_UNKNOWN              0
5100 #define ANEG_STATE_AN_ENABLE            1
5101 #define ANEG_STATE_RESTART_INIT         2
5102 #define ANEG_STATE_RESTART              3
5103 #define ANEG_STATE_DISABLE_LINK_OK      4
5104 #define ANEG_STATE_ABILITY_DETECT_INIT  5
5105 #define ANEG_STATE_ABILITY_DETECT       6
5106 #define ANEG_STATE_ACK_DETECT_INIT      7
5107 #define ANEG_STATE_ACK_DETECT           8
5108 #define ANEG_STATE_COMPLETE_ACK_INIT    9
5109 #define ANEG_STATE_COMPLETE_ACK         10
5110 #define ANEG_STATE_IDLE_DETECT_INIT     11
5111 #define ANEG_STATE_IDLE_DETECT          12
5112 #define ANEG_STATE_LINK_OK              13
5113 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT  14
5114 #define ANEG_STATE_NEXT_PAGE_WAIT       15
5115
5116         u32 flags;
5117 #define MR_AN_ENABLE            0x00000001
5118 #define MR_RESTART_AN           0x00000002
5119 #define MR_AN_COMPLETE          0x00000004
5120 #define MR_PAGE_RX              0x00000008
5121 #define MR_NP_LOADED            0x00000010
5122 #define MR_TOGGLE_TX            0x00000020
5123 #define MR_LP_ADV_FULL_DUPLEX   0x00000040
5124 #define MR_LP_ADV_HALF_DUPLEX   0x00000080
5125 #define MR_LP_ADV_SYM_PAUSE     0x00000100
5126 #define MR_LP_ADV_ASYM_PAUSE    0x00000200
5127 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400
5128 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800
5129 #define MR_LP_ADV_NEXT_PAGE     0x00001000
5130 #define MR_TOGGLE_RX            0x00002000
5131 #define MR_NP_RX                0x00004000
5132
5133 #define MR_LINK_OK              0x80000000
5134
5135         unsigned long link_time, cur_time;
5136
5137         u32 ability_match_cfg;
5138         int ability_match_count;
5139
5140         char ability_match, idle_match, ack_match;
5141
5142         u32 txconfig, rxconfig;
5143 #define ANEG_CFG_NP             0x00000080
5144 #define ANEG_CFG_ACK            0x00000040
5145 #define ANEG_CFG_RF2            0x00000020
5146 #define ANEG_CFG_RF1            0x00000010
5147 #define ANEG_CFG_PS2            0x00000001
5148 #define ANEG_CFG_PS1            0x00008000
5149 #define ANEG_CFG_HD             0x00004000
5150 #define ANEG_CFG_FD             0x00002000
5151 #define ANEG_CFG_INVAL          0x00001f06
5152
5153 };
5154 #define ANEG_OK         0
5155 #define ANEG_DONE       1
5156 #define ANEG_TIMER_ENAB 2
5157 #define ANEG_FAILED     -1
5158
5159 #define ANEG_STATE_SETTLE_TIME  10000
5160
5161 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
5162                                    struct tg3_fiber_aneginfo *ap)
5163 {
5164         u16 flowctrl;
5165         unsigned long delta;
5166         u32 rx_cfg_reg;
5167         int ret;
5168
5169         if (ap->state == ANEG_STATE_UNKNOWN) {
5170                 ap->rxconfig = 0;
5171                 ap->link_time = 0;
5172                 ap->cur_time = 0;
5173                 ap->ability_match_cfg = 0;
5174                 ap->ability_match_count = 0;
5175                 ap->ability_match = 0;
5176                 ap->idle_match = 0;
5177                 ap->ack_match = 0;
5178         }
5179         ap->cur_time++;
5180
5181         if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
5182                 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
5183
5184                 if (rx_cfg_reg != ap->ability_match_cfg) {
5185                         ap->ability_match_cfg = rx_cfg_reg;
5186                         ap->ability_match = 0;
5187                         ap->ability_match_count = 0;
5188                 } else {
5189                         if (++ap->ability_match_count > 1) {
5190                                 ap->ability_match = 1;
5191                                 ap->ability_match_cfg = rx_cfg_reg;
5192                         }
5193                 }
5194                 if (rx_cfg_reg & ANEG_CFG_ACK)
5195                         ap->ack_match = 1;
5196                 else
5197                         ap->ack_match = 0;
5198
5199                 ap->idle_match = 0;
5200         } else {
5201                 ap->idle_match = 1;
5202                 ap->ability_match_cfg = 0;
5203                 ap->ability_match_count = 0;
5204                 ap->ability_match = 0;
5205                 ap->ack_match = 0;
5206
5207                 rx_cfg_reg = 0;
5208         }
5209
5210         ap->rxconfig = rx_cfg_reg;
5211         ret = ANEG_OK;
5212
5213         switch (ap->state) {
5214         case ANEG_STATE_UNKNOWN:
5215                 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
5216                         ap->state = ANEG_STATE_AN_ENABLE;
5217
5218                 /* fall through */
5219         case ANEG_STATE_AN_ENABLE:
5220                 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
5221                 if (ap->flags & MR_AN_ENABLE) {
5222                         ap->link_time = 0;
5223                         ap->cur_time = 0;
5224                         ap->ability_match_cfg = 0;
5225                         ap->ability_match_count = 0;
5226                         ap->ability_match = 0;
5227                         ap->idle_match = 0;
5228                         ap->ack_match = 0;
5229
5230                         ap->state = ANEG_STATE_RESTART_INIT;
5231                 } else {
5232                         ap->state = ANEG_STATE_DISABLE_LINK_OK;
5233                 }
5234                 break;
5235
5236         case ANEG_STATE_RESTART_INIT:
5237                 ap->link_time = ap->cur_time;
5238                 ap->flags &= ~(MR_NP_LOADED);
5239                 ap->txconfig = 0;
5240                 tw32(MAC_TX_AUTO_NEG, 0);
5241                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5242                 tw32_f(MAC_MODE, tp->mac_mode);
5243                 udelay(40);
5244
5245                 ret = ANEG_TIMER_ENAB;
5246                 ap->state = ANEG_STATE_RESTART;
5247
5248                 /* fall through */
5249         case ANEG_STATE_RESTART:
5250                 delta = ap->cur_time - ap->link_time;
5251                 if (delta > ANEG_STATE_SETTLE_TIME)
5252                         ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
5253                 else
5254                         ret = ANEG_TIMER_ENAB;
5255                 break;
5256
5257         case ANEG_STATE_DISABLE_LINK_OK:
5258                 ret = ANEG_DONE;
5259                 break;
5260
5261         case ANEG_STATE_ABILITY_DETECT_INIT:
5262                 ap->flags &= ~(MR_TOGGLE_TX);
5263                 ap->txconfig = ANEG_CFG_FD;
5264                 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5265                 if (flowctrl & ADVERTISE_1000XPAUSE)
5266                         ap->txconfig |= ANEG_CFG_PS1;
5267                 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5268                         ap->txconfig |= ANEG_CFG_PS2;
5269                 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5270                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5271                 tw32_f(MAC_MODE, tp->mac_mode);
5272                 udelay(40);
5273
5274                 ap->state = ANEG_STATE_ABILITY_DETECT;
5275                 break;
5276
5277         case ANEG_STATE_ABILITY_DETECT:
5278                 if (ap->ability_match != 0 && ap->rxconfig != 0)
5279                         ap->state = ANEG_STATE_ACK_DETECT_INIT;
5280                 break;
5281
5282         case ANEG_STATE_ACK_DETECT_INIT:
5283                 ap->txconfig |= ANEG_CFG_ACK;
5284                 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5285                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5286                 tw32_f(MAC_MODE, tp->mac_mode);
5287                 udelay(40);
5288
5289                 ap->state = ANEG_STATE_ACK_DETECT;
5290
5291                 /* fall through */
5292         case ANEG_STATE_ACK_DETECT:
5293                 if (ap->ack_match != 0) {
5294                         if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
5295                             (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
5296                                 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
5297                         } else {
5298                                 ap->state = ANEG_STATE_AN_ENABLE;
5299                         }
5300                 } else if (ap->ability_match != 0 &&
5301                            ap->rxconfig == 0) {
5302                         ap->state = ANEG_STATE_AN_ENABLE;
5303                 }
5304                 break;
5305
5306         case ANEG_STATE_COMPLETE_ACK_INIT:
5307                 if (ap->rxconfig & ANEG_CFG_INVAL) {
5308                         ret = ANEG_FAILED;
5309                         break;
5310                 }
5311                 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
5312                                MR_LP_ADV_HALF_DUPLEX |
5313                                MR_LP_ADV_SYM_PAUSE |
5314                                MR_LP_ADV_ASYM_PAUSE |
5315                                MR_LP_ADV_REMOTE_FAULT1 |
5316                                MR_LP_ADV_REMOTE_FAULT2 |
5317                                MR_LP_ADV_NEXT_PAGE |
5318                                MR_TOGGLE_RX |
5319                                MR_NP_RX);
5320                 if (ap->rxconfig & ANEG_CFG_FD)
5321                         ap->flags |= MR_LP_ADV_FULL_DUPLEX;
5322                 if (ap->rxconfig & ANEG_CFG_HD)
5323                         ap->flags |= MR_LP_ADV_HALF_DUPLEX;
5324                 if (ap->rxconfig & ANEG_CFG_PS1)
5325                         ap->flags |= MR_LP_ADV_SYM_PAUSE;
5326                 if (ap->rxconfig & ANEG_CFG_PS2)
5327                         ap->flags |= MR_LP_ADV_ASYM_PAUSE;
5328                 if (ap->rxconfig & ANEG_CFG_RF1)
5329                         ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
5330                 if (ap->rxconfig & ANEG_CFG_RF2)
5331                         ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
5332                 if (ap->rxconfig & ANEG_CFG_NP)
5333                         ap->flags |= MR_LP_ADV_NEXT_PAGE;
5334
5335                 ap->link_time = ap->cur_time;
5336
5337                 ap->flags ^= (MR_TOGGLE_TX);
5338                 if (ap->rxconfig & 0x0008)
5339                         ap->flags |= MR_TOGGLE_RX;
5340                 if (ap->rxconfig & ANEG_CFG_NP)
5341                         ap->flags |= MR_NP_RX;
5342                 ap->flags |= MR_PAGE_RX;
5343
5344                 ap->state = ANEG_STATE_COMPLETE_ACK;
5345                 ret = ANEG_TIMER_ENAB;
5346                 break;
5347
5348         case ANEG_STATE_COMPLETE_ACK:
5349                 if (ap->ability_match != 0 &&
5350                     ap->rxconfig == 0) {
5351                         ap->state = ANEG_STATE_AN_ENABLE;
5352                         break;
5353                 }
5354                 delta = ap->cur_time - ap->link_time;
5355                 if (delta > ANEG_STATE_SETTLE_TIME) {
5356                         if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
5357                                 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5358                         } else {
5359                                 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
5360                                     !(ap->flags & MR_NP_RX)) {
5361                                         ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5362                                 } else {
5363                                         ret = ANEG_FAILED;
5364                                 }
5365                         }
5366                 }
5367                 break;
5368
5369         case ANEG_STATE_IDLE_DETECT_INIT:
5370                 ap->link_time = ap->cur_time;
5371                 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5372                 tw32_f(MAC_MODE, tp->mac_mode);
5373                 udelay(40);
5374
5375                 ap->state = ANEG_STATE_IDLE_DETECT;
5376                 ret = ANEG_TIMER_ENAB;
5377                 break;
5378
5379         case ANEG_STATE_IDLE_DETECT:
5380                 if (ap->ability_match != 0 &&
5381                     ap->rxconfig == 0) {
5382                         ap->state = ANEG_STATE_AN_ENABLE;
5383                         break;
5384                 }
5385                 delta = ap->cur_time - ap->link_time;
5386                 if (delta > ANEG_STATE_SETTLE_TIME) {
5387                         /* XXX another gem from the Broadcom driver :( */
5388                         ap->state = ANEG_STATE_LINK_OK;
5389                 }
5390                 break;
5391
5392         case ANEG_STATE_LINK_OK:
5393                 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
5394                 ret = ANEG_DONE;
5395                 break;
5396
5397         case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
5398                 /* ??? unimplemented */
5399                 break;
5400
5401         case ANEG_STATE_NEXT_PAGE_WAIT:
5402                 /* ??? unimplemented */
5403                 break;
5404
5405         default:
5406                 ret = ANEG_FAILED;
5407                 break;
5408         }
5409
5410         return ret;
5411 }
5412
5413 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
5414 {
5415         int res = 0;
5416         struct tg3_fiber_aneginfo aninfo;
5417         int status = ANEG_FAILED;
5418         unsigned int tick;
5419         u32 tmp;
5420
5421         tw32_f(MAC_TX_AUTO_NEG, 0);
5422
5423         tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
5424         tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
5425         udelay(40);
5426
5427         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
5428         udelay(40);
5429
5430         memset(&aninfo, 0, sizeof(aninfo));
5431         aninfo.flags |= MR_AN_ENABLE;
5432         aninfo.state = ANEG_STATE_UNKNOWN;
5433         aninfo.cur_time = 0;
5434         tick = 0;
5435         while (++tick < 195000) {
5436                 status = tg3_fiber_aneg_smachine(tp, &aninfo);
5437                 if (status == ANEG_DONE || status == ANEG_FAILED)
5438                         break;
5439
5440                 udelay(1);
5441         }
5442
5443         tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5444         tw32_f(MAC_MODE, tp->mac_mode);
5445         udelay(40);
5446
5447         *txflags = aninfo.txconfig;
5448         *rxflags = aninfo.flags;
5449
5450         if (status == ANEG_DONE &&
5451             (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
5452                              MR_LP_ADV_FULL_DUPLEX)))
5453                 res = 1;
5454
5455         return res;
5456 }
5457
5458 static void tg3_init_bcm8002(struct tg3 *tp)
5459 {
5460         u32 mac_status = tr32(MAC_STATUS);
5461         int i;
5462
5463         /* Reset when initting first time or we have a link. */
5464         if (tg3_flag(tp, INIT_COMPLETE) &&
5465             !(mac_status & MAC_STATUS_PCS_SYNCED))
5466                 return;
5467
5468         /* Set PLL lock range. */
5469         tg3_writephy(tp, 0x16, 0x8007);
5470
5471         /* SW reset */
5472         tg3_writephy(tp, MII_BMCR, BMCR_RESET);
5473
5474         /* Wait for reset to complete. */
5475         /* XXX schedule_timeout() ... */
5476         for (i = 0; i < 500; i++)
5477                 udelay(10);
5478
5479         /* Config mode; select PMA/Ch 1 regs. */
5480         tg3_writephy(tp, 0x10, 0x8411);
5481
5482         /* Enable auto-lock and comdet, select txclk for tx. */
5483         tg3_writephy(tp, 0x11, 0x0a10);
5484
5485         tg3_writephy(tp, 0x18, 0x00a0);
5486         tg3_writephy(tp, 0x16, 0x41ff);
5487
5488         /* Assert and deassert POR. */
5489         tg3_writephy(tp, 0x13, 0x0400);
5490         udelay(40);
5491         tg3_writephy(tp, 0x13, 0x0000);
5492
5493         tg3_writephy(tp, 0x11, 0x0a50);
5494         udelay(40);
5495         tg3_writephy(tp, 0x11, 0x0a10);
5496
5497         /* Wait for signal to stabilize */
5498         /* XXX schedule_timeout() ... */
5499         for (i = 0; i < 15000; i++)
5500                 udelay(10);
5501
5502         /* Deselect the channel register so we can read the PHYID
5503          * later.
5504          */
5505         tg3_writephy(tp, 0x10, 0x8011);
5506 }
5507
5508 static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
5509 {
5510         u16 flowctrl;
5511         bool current_link_up;
5512         u32 sg_dig_ctrl, sg_dig_status;
5513         u32 serdes_cfg, expected_sg_dig_ctrl;
5514         int workaround, port_a;
5515
5516         serdes_cfg = 0;
5517         expected_sg_dig_ctrl = 0;
5518         workaround = 0;
5519         port_a = 1;
5520         current_link_up = false;
5521
5522         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 &&
5523             tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) {
5524                 workaround = 1;
5525                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
5526                         port_a = 0;
5527
5528                 /* preserve bits 0-11,13,14 for signal pre-emphasis */
5529                 /* preserve bits 20-23 for voltage regulator */
5530                 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
5531         }
5532
5533         sg_dig_ctrl = tr32(SG_DIG_CTRL);
5534
5535         if (tp->link_config.autoneg != AUTONEG_ENABLE) {
5536                 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
5537                         if (workaround) {
5538                                 u32 val = serdes_cfg;
5539
5540                                 if (port_a)
5541                                         val |= 0xc010000;
5542                                 else
5543                                         val |= 0x4010000;
5544                                 tw32_f(MAC_SERDES_CFG, val);
5545                         }
5546
5547                         tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5548                 }
5549                 if (mac_status & MAC_STATUS_PCS_SYNCED) {
5550                         tg3_setup_flow_control(tp, 0, 0);
5551                         current_link_up = true;
5552                 }
5553                 goto out;
5554         }
5555
5556         /* Want auto-negotiation.  */
5557         expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
5558
5559         flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5560         if (flowctrl & ADVERTISE_1000XPAUSE)
5561                 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
5562         if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5563                 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
5564
5565         if (sg_dig_ctrl != expected_sg_dig_ctrl) {
5566                 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
5567                     tp->serdes_counter &&
5568                     ((mac_status & (MAC_STATUS_PCS_SYNCED |
5569                                     MAC_STATUS_RCVD_CFG)) ==
5570                      MAC_STATUS_PCS_SYNCED)) {
5571                         tp->serdes_counter--;
5572                         current_link_up = true;
5573                         goto out;
5574                 }
5575 restart_autoneg:
5576                 if (workaround)
5577                         tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
5578                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
5579                 udelay(5);
5580                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
5581
5582                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5583                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5584         } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
5585                                  MAC_STATUS_SIGNAL_DET)) {
5586                 sg_dig_status = tr32(SG_DIG_STATUS);
5587                 mac_status = tr32(MAC_STATUS);
5588
5589                 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
5590                     (mac_status & MAC_STATUS_PCS_SYNCED)) {
5591                         u32 local_adv = 0, remote_adv = 0;
5592
5593                         if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
5594                                 local_adv |= ADVERTISE_1000XPAUSE;
5595                         if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
5596                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5597
5598                         if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
5599                                 remote_adv |= LPA_1000XPAUSE;
5600                         if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
5601                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5602
5603                         tp->link_config.rmt_adv =
5604                                            mii_adv_to_ethtool_adv_x(remote_adv);
5605
5606                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5607                         current_link_up = true;
5608                         tp->serdes_counter = 0;
5609                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5610                 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
5611                         if (tp->serdes_counter)
5612                                 tp->serdes_counter--;
5613                         else {
5614                                 if (workaround) {
5615                                         u32 val = serdes_cfg;
5616
5617                                         if (port_a)
5618                                                 val |= 0xc010000;
5619                                         else
5620                                                 val |= 0x4010000;
5621
5622                                         tw32_f(MAC_SERDES_CFG, val);
5623                                 }
5624
5625                                 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5626                                 udelay(40);
5627
5628                                 /* Link parallel detection - link is up */
5629                                 /* only if we have PCS_SYNC and not */
5630                                 /* receiving config code words */
5631                                 mac_status = tr32(MAC_STATUS);
5632                                 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5633                                     !(mac_status & MAC_STATUS_RCVD_CFG)) {
5634                                         tg3_setup_flow_control(tp, 0, 0);
5635                                         current_link_up = true;
5636                                         tp->phy_flags |=
5637                                                 TG3_PHYFLG_PARALLEL_DETECT;
5638                                         tp->serdes_counter =
5639                                                 SERDES_PARALLEL_DET_TIMEOUT;
5640                                 } else
5641                                         goto restart_autoneg;
5642                         }
5643                 }
5644         } else {
5645                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5646                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5647         }
5648
5649 out:
5650         return current_link_up;
5651 }
5652
5653 static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5654 {
5655         bool current_link_up = false;
5656
5657         if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5658                 goto out;
5659
5660         if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5661                 u32 txflags, rxflags;
5662                 int i;
5663
5664                 if (fiber_autoneg(tp, &txflags, &rxflags)) {
5665                         u32 local_adv = 0, remote_adv = 0;
5666
5667                         if (txflags & ANEG_CFG_PS1)
5668                                 local_adv |= ADVERTISE_1000XPAUSE;
5669                         if (txflags & ANEG_CFG_PS2)
5670                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5671
5672                         if (rxflags & MR_LP_ADV_SYM_PAUSE)
5673                                 remote_adv |= LPA_1000XPAUSE;
5674                         if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5675                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5676
5677                         tp->link_config.rmt_adv =
5678                                            mii_adv_to_ethtool_adv_x(remote_adv);
5679
5680                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5681
5682                         current_link_up = true;
5683                 }
5684                 for (i = 0; i < 30; i++) {
5685                         udelay(20);
5686                         tw32_f(MAC_STATUS,
5687                                (MAC_STATUS_SYNC_CHANGED |
5688                                 MAC_STATUS_CFG_CHANGED));
5689                         udelay(40);
5690                         if ((tr32(MAC_STATUS) &
5691                              (MAC_STATUS_SYNC_CHANGED |
5692                               MAC_STATUS_CFG_CHANGED)) == 0)
5693                                 break;
5694                 }
5695
5696                 mac_status = tr32(MAC_STATUS);
5697                 if (!current_link_up &&
5698                     (mac_status & MAC_STATUS_PCS_SYNCED) &&
5699                     !(mac_status & MAC_STATUS_RCVD_CFG))
5700                         current_link_up = true;
5701         } else {
5702                 tg3_setup_flow_control(tp, 0, 0);
5703
5704                 /* Forcing 1000FD link up. */
5705                 current_link_up = true;
5706
5707                 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5708                 udelay(40);
5709
5710                 tw32_f(MAC_MODE, tp->mac_mode);
5711                 udelay(40);
5712         }
5713
5714 out:
5715         return current_link_up;
5716 }
5717
5718 static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
5719 {
5720         u32 orig_pause_cfg;
5721         u32 orig_active_speed;
5722         u8 orig_active_duplex;
5723         u32 mac_status;
5724         bool current_link_up;
5725         int i;
5726
5727         orig_pause_cfg = tp->link_config.active_flowctrl;
5728         orig_active_speed = tp->link_config.active_speed;
5729         orig_active_duplex = tp->link_config.active_duplex;
5730
5731         if (!tg3_flag(tp, HW_AUTONEG) &&
5732             tp->link_up &&
5733             tg3_flag(tp, INIT_COMPLETE)) {
5734                 mac_status = tr32(MAC_STATUS);
5735                 mac_status &= (MAC_STATUS_PCS_SYNCED |
5736                                MAC_STATUS_SIGNAL_DET |
5737                                MAC_STATUS_CFG_CHANGED |
5738                                MAC_STATUS_RCVD_CFG);
5739                 if (mac_status == (MAC_STATUS_PCS_SYNCED |
5740                                    MAC_STATUS_SIGNAL_DET)) {
5741                         tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5742                                             MAC_STATUS_CFG_CHANGED));
5743                         return 0;
5744                 }
5745         }
5746
5747         tw32_f(MAC_TX_AUTO_NEG, 0);
5748
5749         tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5750         tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5751         tw32_f(MAC_MODE, tp->mac_mode);
5752         udelay(40);
5753
5754         if (tp->phy_id == TG3_PHY_ID_BCM8002)
5755                 tg3_init_bcm8002(tp);
5756
5757         /* Enable link change event even when serdes polling.  */
5758         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5759         udelay(40);
5760
5761         current_link_up = false;
5762         tp->link_config.rmt_adv = 0;
5763         mac_status = tr32(MAC_STATUS);
5764
5765         if (tg3_flag(tp, HW_AUTONEG))
5766                 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5767         else
5768                 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5769
5770         tp->napi[0].hw_status->status =
5771                 (SD_STATUS_UPDATED |
5772                  (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5773
5774         for (i = 0; i < 100; i++) {
5775                 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5776                                     MAC_STATUS_CFG_CHANGED));
5777                 udelay(5);
5778                 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5779                                          MAC_STATUS_CFG_CHANGED |
5780                                          MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5781                         break;
5782         }
5783
5784         mac_status = tr32(MAC_STATUS);
5785         if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5786                 current_link_up = false;
5787                 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5788                     tp->serdes_counter == 0) {
5789                         tw32_f(MAC_MODE, (tp->mac_mode |
5790                                           MAC_MODE_SEND_CONFIGS));
5791                         udelay(1);
5792                         tw32_f(MAC_MODE, tp->mac_mode);
5793                 }
5794         }
5795
5796         if (current_link_up) {
5797                 tp->link_config.active_speed = SPEED_1000;
5798                 tp->link_config.active_duplex = DUPLEX_FULL;
5799                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5800                                     LED_CTRL_LNKLED_OVERRIDE |
5801                                     LED_CTRL_1000MBPS_ON));
5802         } else {
5803                 tp->link_config.active_speed = SPEED_UNKNOWN;
5804                 tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5805                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5806                                     LED_CTRL_LNKLED_OVERRIDE |
5807                                     LED_CTRL_TRAFFIC_OVERRIDE));
5808         }
5809
5810         if (!tg3_test_and_report_link_chg(tp, current_link_up)) {
5811                 u32 now_pause_cfg = tp->link_config.active_flowctrl;
5812                 if (orig_pause_cfg != now_pause_cfg ||
5813                     orig_active_speed != tp->link_config.active_speed ||
5814                     orig_active_duplex != tp->link_config.active_duplex)
5815                         tg3_link_report(tp);
5816         }
5817
5818         return 0;
5819 }
5820
5821 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)
5822 {
5823         int err = 0;
5824         u32 bmsr, bmcr;
5825         u32 current_speed = SPEED_UNKNOWN;
5826         u8 current_duplex = DUPLEX_UNKNOWN;
5827         bool current_link_up = false;
5828         u32 local_adv, remote_adv, sgsr;
5829
5830         if ((tg3_asic_rev(tp) == ASIC_REV_5719 ||
5831              tg3_asic_rev(tp) == ASIC_REV_5720) &&
5832              !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) &&
5833              (sgsr & SERDES_TG3_SGMII_MODE)) {
5834
5835                 if (force_reset)
5836                         tg3_phy_reset(tp);
5837
5838                 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
5839
5840                 if (!(sgsr & SERDES_TG3_LINK_UP)) {
5841                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5842                 } else {
5843                         current_link_up = true;
5844                         if (sgsr & SERDES_TG3_SPEED_1000) {
5845                                 current_speed = SPEED_1000;
5846                                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5847                         } else if (sgsr & SERDES_TG3_SPEED_100) {
5848                                 current_speed = SPEED_100;
5849                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5850                         } else {
5851                                 current_speed = SPEED_10;
5852                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5853                         }
5854
5855                         if (sgsr & SERDES_TG3_FULL_DUPLEX)
5856                                 current_duplex = DUPLEX_FULL;
5857                         else
5858                                 current_duplex = DUPLEX_HALF;
5859                 }
5860
5861                 tw32_f(MAC_MODE, tp->mac_mode);
5862                 udelay(40);
5863
5864                 tg3_clear_mac_status(tp);
5865
5866                 goto fiber_setup_done;
5867         }
5868
5869         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5870         tw32_f(MAC_MODE, tp->mac_mode);
5871         udelay(40);
5872
5873         tg3_clear_mac_status(tp);
5874
5875         if (force_reset)
5876                 tg3_phy_reset(tp);
5877
5878         tp->link_config.rmt_adv = 0;
5879
5880         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5881         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5882         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5883                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5884                         bmsr |= BMSR_LSTATUS;
5885                 else
5886                         bmsr &= ~BMSR_LSTATUS;
5887         }
5888
5889         err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5890
5891         if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5892             (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5893                 /* do nothing, just check for link up at the end */
5894         } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5895                 u32 adv, newadv;
5896
5897                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5898                 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5899                                  ADVERTISE_1000XPAUSE |
5900                                  ADVERTISE_1000XPSE_ASYM |
5901                                  ADVERTISE_SLCT);
5902
5903                 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5904                 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5905
5906                 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5907                         tg3_writephy(tp, MII_ADVERTISE, newadv);
5908                         bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5909                         tg3_writephy(tp, MII_BMCR, bmcr);
5910
5911                         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5912                         tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5913                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5914
5915                         return err;
5916                 }
5917         } else {
5918                 u32 new_bmcr;
5919
5920                 bmcr &= ~BMCR_SPEED1000;
5921                 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5922
5923                 if (tp->link_config.duplex == DUPLEX_FULL)
5924                         new_bmcr |= BMCR_FULLDPLX;
5925
5926                 if (new_bmcr != bmcr) {
5927                         /* BMCR_SPEED1000 is a reserved bit that needs
5928                          * to be set on write.
5929                          */
5930                         new_bmcr |= BMCR_SPEED1000;
5931
5932                         /* Force a linkdown */
5933                         if (tp->link_up) {
5934                                 u32 adv;
5935
5936                                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5937                                 adv &= ~(ADVERTISE_1000XFULL |
5938                                          ADVERTISE_1000XHALF |
5939                                          ADVERTISE_SLCT);
5940                                 tg3_writephy(tp, MII_ADVERTISE, adv);
5941                                 tg3_writephy(tp, MII_BMCR, bmcr |
5942                                                            BMCR_ANRESTART |
5943                                                            BMCR_ANENABLE);
5944                                 udelay(10);
5945                                 tg3_carrier_off(tp);
5946                         }
5947                         tg3_writephy(tp, MII_BMCR, new_bmcr);
5948                         bmcr = new_bmcr;
5949                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5950                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5951                         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5952                                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5953                                         bmsr |= BMSR_LSTATUS;
5954                                 else
5955                                         bmsr &= ~BMSR_LSTATUS;
5956                         }
5957                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5958                 }
5959         }
5960
5961         if (bmsr & BMSR_LSTATUS) {
5962                 current_speed = SPEED_1000;
5963                 current_link_up = true;
5964                 if (bmcr & BMCR_FULLDPLX)
5965                         current_duplex = DUPLEX_FULL;
5966                 else
5967                         current_duplex = DUPLEX_HALF;
5968
5969                 local_adv = 0;
5970                 remote_adv = 0;
5971
5972                 if (bmcr & BMCR_ANENABLE) {
5973                         u32 common;
5974
5975                         err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5976                         err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5977                         common = local_adv & remote_adv;
5978                         if (common & (ADVERTISE_1000XHALF |
5979                                       ADVERTISE_1000XFULL)) {
5980                                 if (common & ADVERTISE_1000XFULL)
5981                                         current_duplex = DUPLEX_FULL;
5982                                 else
5983                                         current_duplex = DUPLEX_HALF;
5984
5985                                 tp->link_config.rmt_adv =
5986                                            mii_adv_to_ethtool_adv_x(remote_adv);
5987                         } else if (!tg3_flag(tp, 5780_CLASS)) {
5988                                 /* Link is up via parallel detect */
5989                         } else {
5990                                 current_link_up = false;
5991                         }
5992                 }
5993         }
5994
5995 fiber_setup_done:
5996         if (current_link_up && current_duplex == DUPLEX_FULL)
5997                 tg3_setup_flow_control(tp, local_adv, remote_adv);
5998
5999         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
6000         if (tp->link_config.active_duplex == DUPLEX_HALF)
6001                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
6002
6003         tw32_f(MAC_MODE, tp->mac_mode);
6004         udelay(40);
6005
6006         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
6007
6008         tp->link_config.active_speed = current_speed;
6009         tp->link_config.active_duplex = current_duplex;
6010
6011         tg3_test_and_report_link_chg(tp, current_link_up);
6012         return err;
6013 }
6014
6015 static void tg3_serdes_parallel_detect(struct tg3 *tp)
6016 {
6017         if (tp->serdes_counter) {
6018                 /* Give autoneg time to complete. */
6019                 tp->serdes_counter--;
6020                 return;
6021         }
6022
6023         if (!tp->link_up &&
6024             (tp->link_config.autoneg == AUTONEG_ENABLE)) {
6025                 u32 bmcr;
6026
6027                 tg3_readphy(tp, MII_BMCR, &bmcr);
6028                 if (bmcr & BMCR_ANENABLE) {
6029                         u32 phy1, phy2;
6030
6031                         /* Select shadow register 0x1f */
6032                         tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
6033                         tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
6034
6035                         /* Select expansion interrupt status register */
6036                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6037                                          MII_TG3_DSP_EXP1_INT_STAT);
6038                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6039                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6040
6041                         if ((phy1 & 0x10) && !(phy2 & 0x20)) {
6042                                 /* We have signal detect and not receiving
6043                                  * config code words, link is up by parallel
6044                                  * detection.
6045                                  */
6046
6047                                 bmcr &= ~BMCR_ANENABLE;
6048                                 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
6049                                 tg3_writephy(tp, MII_BMCR, bmcr);
6050                                 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
6051                         }
6052                 }
6053         } else if (tp->link_up &&
6054                    (tp->link_config.autoneg == AUTONEG_ENABLE) &&
6055                    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
6056                 u32 phy2;
6057
6058                 /* Select expansion interrupt status register */
6059                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6060                                  MII_TG3_DSP_EXP1_INT_STAT);
6061                 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6062                 if (phy2 & 0x20) {
6063                         u32 bmcr;
6064
6065                         /* Config code words received, turn on autoneg. */
6066                         tg3_readphy(tp, MII_BMCR, &bmcr);
6067                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
6068
6069                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
6070
6071                 }
6072         }
6073 }
6074
6075 static int tg3_setup_phy(struct tg3 *tp, bool force_reset)
6076 {
6077         u32 val;
6078         int err;
6079
6080         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
6081                 err = tg3_setup_fiber_phy(tp, force_reset);
6082         else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
6083                 err = tg3_setup_fiber_mii_phy(tp, force_reset);
6084         else
6085                 err = tg3_setup_copper_phy(tp, force_reset);
6086
6087         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
6088                 u32 scale;
6089
6090                 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
6091                 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
6092                         scale = 65;
6093                 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
6094                         scale = 6;
6095                 else
6096                         scale = 12;
6097
6098                 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
6099                 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
6100                 tw32(GRC_MISC_CFG, val);
6101         }
6102
6103         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6104               (6 << TX_LENGTHS_IPG_SHIFT);
6105         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
6106             tg3_asic_rev(tp) == ASIC_REV_5762)
6107                 val |= tr32(MAC_TX_LENGTHS) &
6108                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
6109                         TX_LENGTHS_CNT_DWN_VAL_MSK);
6110
6111         if (tp->link_config.active_speed == SPEED_1000 &&
6112             tp->link_config.active_duplex == DUPLEX_HALF)
6113                 tw32(MAC_TX_LENGTHS, val |
6114                      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
6115         else
6116                 tw32(MAC_TX_LENGTHS, val |
6117                      (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6118
6119         if (!tg3_flag(tp, 5705_PLUS)) {
6120                 if (tp->link_up) {
6121                         tw32(HOSTCC_STAT_COAL_TICKS,
6122                              tp->coal.stats_block_coalesce_usecs);
6123                 } else {
6124                         tw32(HOSTCC_STAT_COAL_TICKS, 0);
6125                 }
6126         }
6127
6128         if (tg3_flag(tp, ASPM_WORKAROUND)) {
6129                 val = tr32(PCIE_PWR_MGMT_THRESH);
6130                 if (!tp->link_up)
6131                         val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
6132                               tp->pwrmgmt_thresh;
6133                 else
6134                         val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
6135                 tw32(PCIE_PWR_MGMT_THRESH, val);
6136         }
6137
6138         return err;
6139 }
6140
6141 /* tp->lock must be held */
6142 static u64 tg3_refclk_read(struct tg3 *tp, struct ptp_system_timestamp *sts)
6143 {
6144         u64 stamp;
6145
6146         ptp_read_system_prets(sts);
6147         stamp = tr32(TG3_EAV_REF_CLCK_LSB);
6148         ptp_read_system_postts(sts);
6149         stamp |= (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32;
6150
6151         return stamp;
6152 }
6153
6154 /* tp->lock must be held */
6155 static void tg3_refclk_write(struct tg3 *tp, u64 newval)
6156 {
6157         u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6158
6159         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP);
6160         tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff);
6161         tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32);
6162         tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME);
6163 }
6164
6165 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync);
6166 static inline void tg3_full_unlock(struct tg3 *tp);
6167 static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
6168 {
6169         struct tg3 *tp = netdev_priv(dev);
6170
6171         info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
6172                                 SOF_TIMESTAMPING_RX_SOFTWARE |
6173                                 SOF_TIMESTAMPING_SOFTWARE;
6174
6175         if (tg3_flag(tp, PTP_CAPABLE)) {
6176                 info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE |
6177                                         SOF_TIMESTAMPING_RX_HARDWARE |
6178                                         SOF_TIMESTAMPING_RAW_HARDWARE;
6179         }
6180
6181         if (tp->ptp_clock)
6182                 info->phc_index = ptp_clock_index(tp->ptp_clock);
6183         else
6184                 info->phc_index = -1;
6185
6186         info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
6187
6188         info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
6189                            (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
6190                            (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
6191                            (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
6192         return 0;
6193 }
6194
6195 static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
6196 {
6197         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6198         bool neg_adj = false;
6199         u32 correction = 0;
6200
6201         if (ppb < 0) {
6202                 neg_adj = true;
6203                 ppb = -ppb;
6204         }
6205
6206         /* Frequency adjustment is performed using hardware with a 24 bit
6207          * accumulator and a programmable correction value. On each clk, the
6208          * correction value gets added to the accumulator and when it
6209          * overflows, the time counter is incremented/decremented.
6210          *
6211          * So conversion from ppb to correction value is
6212          *              ppb * (1 << 24) / 1000000000
6213          */
6214         correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) &
6215                      TG3_EAV_REF_CLK_CORRECT_MASK;
6216
6217         tg3_full_lock(tp, 0);
6218
6219         if (correction)
6220                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
6221                      TG3_EAV_REF_CLK_CORRECT_EN |
6222                      (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction);
6223         else
6224                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0);
6225
6226         tg3_full_unlock(tp);
6227
6228         return 0;
6229 }
6230
6231 static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
6232 {
6233         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6234
6235         tg3_full_lock(tp, 0);
6236         tp->ptp_adjust += delta;
6237         tg3_full_unlock(tp);
6238
6239         return 0;
6240 }
6241
6242 static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts,
6243                             struct ptp_system_timestamp *sts)
6244 {
6245         u64 ns;
6246         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6247
6248         tg3_full_lock(tp, 0);
6249         ns = tg3_refclk_read(tp, sts);
6250         ns += tp->ptp_adjust;
6251         tg3_full_unlock(tp);
6252
6253         *ts = ns_to_timespec64(ns);
6254
6255         return 0;
6256 }
6257
6258 static int tg3_ptp_settime(struct ptp_clock_info *ptp,
6259                            const struct timespec64 *ts)
6260 {
6261         u64 ns;
6262         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6263
6264         ns = timespec64_to_ns(ts);
6265
6266         tg3_full_lock(tp, 0);
6267         tg3_refclk_write(tp, ns);
6268         tp->ptp_adjust = 0;
6269         tg3_full_unlock(tp);
6270
6271         return 0;
6272 }
6273
6274 static int tg3_ptp_enable(struct ptp_clock_info *ptp,
6275                           struct ptp_clock_request *rq, int on)
6276 {
6277         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6278         u32 clock_ctl;
6279         int rval = 0;
6280
6281         switch (rq->type) {
6282         case PTP_CLK_REQ_PEROUT:
6283                 if (rq->perout.index != 0)
6284                         return -EINVAL;
6285
6286                 tg3_full_lock(tp, 0);
6287                 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6288                 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK;
6289
6290                 if (on) {
6291                         u64 nsec;
6292
6293                         nsec = rq->perout.start.sec * 1000000000ULL +
6294                                rq->perout.start.nsec;
6295
6296                         if (rq->perout.period.sec || rq->perout.period.nsec) {
6297                                 netdev_warn(tp->dev,
6298                                             "Device supports only a one-shot timesync output, period must be 0\n");
6299                                 rval = -EINVAL;
6300                                 goto err_out;
6301                         }
6302
6303                         if (nsec & (1ULL << 63)) {
6304                                 netdev_warn(tp->dev,
6305                                             "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n");
6306                                 rval = -EINVAL;
6307                                 goto err_out;
6308                         }
6309
6310                         tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff));
6311                         tw32(TG3_EAV_WATCHDOG0_MSB,
6312                              TG3_EAV_WATCHDOG0_EN |
6313                              ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK));
6314
6315                         tw32(TG3_EAV_REF_CLCK_CTL,
6316                              clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0);
6317                 } else {
6318                         tw32(TG3_EAV_WATCHDOG0_MSB, 0);
6319                         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl);
6320                 }
6321
6322 err_out:
6323                 tg3_full_unlock(tp);
6324                 return rval;
6325
6326         default:
6327                 break;
6328         }
6329
6330         return -EOPNOTSUPP;
6331 }
6332
6333 static const struct ptp_clock_info tg3_ptp_caps = {
6334         .owner          = THIS_MODULE,
6335         .name           = "tg3 clock",
6336         .max_adj        = 250000000,
6337         .n_alarm        = 0,
6338         .n_ext_ts       = 0,
6339         .n_per_out      = 1,
6340         .n_pins         = 0,
6341         .pps            = 0,
6342         .adjfreq        = tg3_ptp_adjfreq,
6343         .adjtime        = tg3_ptp_adjtime,
6344         .gettimex64     = tg3_ptp_gettimex,
6345         .settime64      = tg3_ptp_settime,
6346         .enable         = tg3_ptp_enable,
6347 };
6348
6349 static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
6350                                      struct skb_shared_hwtstamps *timestamp)
6351 {
6352         memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
6353         timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
6354                                            tp->ptp_adjust);
6355 }
6356
6357 /* tp->lock must be held */
6358 static void tg3_ptp_init(struct tg3 *tp)
6359 {
6360         if (!tg3_flag(tp, PTP_CAPABLE))
6361                 return;
6362
6363         /* Initialize the hardware clock to the system time. */
6364         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
6365         tp->ptp_adjust = 0;
6366         tp->ptp_info = tg3_ptp_caps;
6367 }
6368
6369 /* tp->lock must be held */
6370 static void tg3_ptp_resume(struct tg3 *tp)
6371 {
6372         if (!tg3_flag(tp, PTP_CAPABLE))
6373                 return;
6374
6375         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
6376         tp->ptp_adjust = 0;
6377 }
6378
6379 static void tg3_ptp_fini(struct tg3 *tp)
6380 {
6381         if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
6382                 return;
6383
6384         ptp_clock_unregister(tp->ptp_clock);
6385         tp->ptp_clock = NULL;
6386         tp->ptp_adjust = 0;
6387 }
6388
6389 static inline int tg3_irq_sync(struct tg3 *tp)
6390 {
6391         return tp->irq_sync;
6392 }
6393
6394 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
6395 {
6396         int i;
6397
6398         dst = (u32 *)((u8 *)dst + off);
6399         for (i = 0; i < len; i += sizeof(u32))
6400                 *dst++ = tr32(off + i);
6401 }
6402
6403 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
6404 {
6405         tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
6406         tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
6407         tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
6408         tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
6409         tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
6410         tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
6411         tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
6412         tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
6413         tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
6414         tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
6415         tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
6416         tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
6417         tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
6418         tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
6419         tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
6420         tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
6421         tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
6422         tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
6423         tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
6424
6425         if (tg3_flag(tp, SUPPORT_MSIX))
6426                 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
6427
6428         tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
6429         tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
6430         tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
6431         tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
6432         tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
6433         tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
6434         tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
6435         tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
6436
6437         if (!tg3_flag(tp, 5705_PLUS)) {
6438                 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
6439                 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
6440                 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
6441         }
6442
6443         tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
6444         tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
6445         tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
6446         tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
6447         tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
6448
6449         if (tg3_flag(tp, NVRAM))
6450                 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
6451 }
6452
6453 static void tg3_dump_state(struct tg3 *tp)
6454 {
6455         int i;
6456         u32 *regs;
6457
6458         regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
6459         if (!regs)
6460                 return;
6461
6462         if (tg3_flag(tp, PCI_EXPRESS)) {
6463                 /* Read up to but not including private PCI registers */
6464                 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
6465                         regs[i / sizeof(u32)] = tr32(i);
6466         } else
6467                 tg3_dump_legacy_regs(tp, regs);
6468
6469         for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
6470                 if (!regs[i + 0] && !regs[i + 1] &&
6471                     !regs[i + 2] && !regs[i + 3])
6472                         continue;
6473
6474                 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
6475                            i * 4,
6476                            regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
6477         }
6478
6479         kfree(regs);
6480
6481         for (i = 0; i < tp->irq_cnt; i++) {
6482                 struct tg3_napi *tnapi = &tp->napi[i];
6483
6484                 /* SW status block */
6485                 netdev_err(tp->dev,
6486                          "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6487                            i,
6488                            tnapi->hw_status->status,
6489                            tnapi->hw_status->status_tag,
6490                            tnapi->hw_status->rx_jumbo_consumer,
6491                            tnapi->hw_status->rx_consumer,
6492                            tnapi->hw_status->rx_mini_consumer,
6493                            tnapi->hw_status->idx[0].rx_producer,
6494                            tnapi->hw_status->idx[0].tx_consumer);
6495
6496                 netdev_err(tp->dev,
6497                 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
6498                            i,
6499                            tnapi->last_tag, tnapi->last_irq_tag,
6500                            tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
6501                            tnapi->rx_rcb_ptr,
6502                            tnapi->prodring.rx_std_prod_idx,
6503                            tnapi->prodring.rx_std_cons_idx,
6504                            tnapi->prodring.rx_jmb_prod_idx,
6505                            tnapi->prodring.rx_jmb_cons_idx);
6506         }
6507 }
6508
6509 /* This is called whenever we suspect that the system chipset is re-
6510  * ordering the sequence of MMIO to the tx send mailbox. The symptom
6511  * is bogus tx completions. We try to recover by setting the
6512  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
6513  * in the workqueue.
6514  */
6515 static void tg3_tx_recover(struct tg3 *tp)
6516 {
6517         BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
6518                tp->write32_tx_mbox == tg3_write_indirect_mbox);
6519
6520         netdev_warn(tp->dev,
6521                     "The system may be re-ordering memory-mapped I/O "
6522                     "cycles to the network device, attempting to recover. "
6523                     "Please report the problem to the driver maintainer "
6524                     "and include system chipset information.\n");
6525
6526         tg3_flag_set(tp, TX_RECOVERY_PENDING);
6527 }
6528
6529 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
6530 {
6531         /* Tell compiler to fetch tx indices from memory. */
6532         barrier();
6533         return tnapi->tx_pending -
6534                ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
6535 }
6536
6537 /* Tigon3 never reports partial packet sends.  So we do not
6538  * need special logic to handle SKBs that have not had all
6539  * of their frags sent yet, like SunGEM does.
6540  */
6541 static void tg3_tx(struct tg3_napi *tnapi)
6542 {
6543         struct tg3 *tp = tnapi->tp;
6544         u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
6545         u32 sw_idx = tnapi->tx_cons;
6546         struct netdev_queue *txq;
6547         int index = tnapi - tp->napi;
6548         unsigned int pkts_compl = 0, bytes_compl = 0;
6549
6550         if (tg3_flag(tp, ENABLE_TSS))
6551                 index--;
6552
6553         txq = netdev_get_tx_queue(tp->dev, index);
6554
6555         while (sw_idx != hw_idx) {
6556                 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
6557                 struct sk_buff *skb = ri->skb;
6558                 int i, tx_bug = 0;
6559
6560                 if (unlikely(skb == NULL)) {
6561                         tg3_tx_recover(tp);
6562                         return;
6563                 }
6564
6565                 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
6566                         struct skb_shared_hwtstamps timestamp;
6567                         u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
6568                         hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
6569
6570                         tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
6571
6572                         skb_tstamp_tx(skb, &timestamp);
6573                 }
6574
6575                 pci_unmap_single(tp->pdev,
6576                                  dma_unmap_addr(ri, mapping),
6577                                  skb_headlen(skb),
6578                                  PCI_DMA_TODEVICE);
6579
6580                 ri->skb = NULL;
6581
6582                 while (ri->fragmented) {
6583                         ri->fragmented = false;
6584                         sw_idx = NEXT_TX(sw_idx);
6585                         ri = &tnapi->tx_buffers[sw_idx];
6586                 }
6587
6588                 sw_idx = NEXT_TX(sw_idx);
6589
6590                 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
6591                         ri = &tnapi->tx_buffers[sw_idx];
6592                         if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
6593                                 tx_bug = 1;
6594
6595                         pci_unmap_page(tp->pdev,
6596                                        dma_unmap_addr(ri, mapping),
6597                                        skb_frag_size(&skb_shinfo(skb)->frags[i]),
6598                                        PCI_DMA_TODEVICE);
6599
6600                         while (ri->fragmented) {
6601                                 ri->fragmented = false;
6602                                 sw_idx = NEXT_TX(sw_idx);
6603                                 ri = &tnapi->tx_buffers[sw_idx];
6604                         }
6605
6606                         sw_idx = NEXT_TX(sw_idx);
6607                 }
6608
6609                 pkts_compl++;
6610                 bytes_compl += skb->len;
6611
6612                 dev_consume_skb_any(skb);
6613
6614                 if (unlikely(tx_bug)) {
6615                         tg3_tx_recover(tp);
6616                         return;
6617                 }
6618         }
6619
6620         netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
6621
6622         tnapi->tx_cons = sw_idx;
6623
6624         /* Need to make the tx_cons update visible to tg3_start_xmit()
6625          * before checking for netif_queue_stopped().  Without the
6626          * memory barrier, there is a small possibility that tg3_start_xmit()
6627          * will miss it and cause the queue to be stopped forever.
6628          */
6629         smp_mb();
6630
6631         if (unlikely(netif_tx_queue_stopped(txq) &&
6632                      (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
6633                 __netif_tx_lock(txq, smp_processor_id());
6634                 if (netif_tx_queue_stopped(txq) &&
6635                     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
6636                         netif_tx_wake_queue(txq);
6637                 __netif_tx_unlock(txq);
6638         }
6639 }
6640
6641 static void tg3_frag_free(bool is_frag, void *data)
6642 {
6643         if (is_frag)
6644                 skb_free_frag(data);
6645         else
6646                 kfree(data);
6647 }
6648
6649 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
6650 {
6651         unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
6652                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6653
6654         if (!ri->data)
6655                 return;
6656
6657         pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
6658                          map_sz, PCI_DMA_FROMDEVICE);
6659         tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
6660         ri->data = NULL;
6661 }
6662
6663
6664 /* Returns size of skb allocated or < 0 on error.
6665  *
6666  * We only need to fill in the address because the other members
6667  * of the RX descriptor are invariant, see tg3_init_rings.
6668  *
6669  * Note the purposeful assymetry of cpu vs. chip accesses.  For
6670  * posting buffers we only dirty the first cache line of the RX
6671  * descriptor (containing the address).  Whereas for the RX status
6672  * buffers the cpu only reads the last cacheline of the RX descriptor
6673  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6674  */
6675 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6676                              u32 opaque_key, u32 dest_idx_unmasked,
6677                              unsigned int *frag_size)
6678 {
6679         struct tg3_rx_buffer_desc *desc;
6680         struct ring_info *map;
6681         u8 *data;
6682         dma_addr_t mapping;
6683         int skb_size, data_size, dest_idx;
6684
6685         switch (opaque_key) {
6686         case RXD_OPAQUE_RING_STD:
6687                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6688                 desc = &tpr->rx_std[dest_idx];
6689                 map = &tpr->rx_std_buffers[dest_idx];
6690                 data_size = tp->rx_pkt_map_sz;
6691                 break;
6692
6693         case RXD_OPAQUE_RING_JUMBO:
6694                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6695                 desc = &tpr->rx_jmb[dest_idx].std;
6696                 map = &tpr->rx_jmb_buffers[dest_idx];
6697                 data_size = TG3_RX_JMB_MAP_SZ;
6698                 break;
6699
6700         default:
6701                 return -EINVAL;
6702         }
6703
6704         /* Do not overwrite any of the map or rp information
6705          * until we are sure we can commit to a new buffer.
6706          *
6707          * Callers depend upon this behavior and assume that
6708          * we leave everything unchanged if we fail.
6709          */
6710         skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6711                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6712         if (skb_size <= PAGE_SIZE) {
6713                 data = napi_alloc_frag(skb_size);
6714                 *frag_size = skb_size;
6715         } else {
6716                 data = kmalloc(skb_size, GFP_ATOMIC);
6717                 *frag_size = 0;
6718         }
6719         if (!data)
6720                 return -ENOMEM;
6721
6722         mapping = pci_map_single(tp->pdev,
6723                                  data + TG3_RX_OFFSET(tp),
6724                                  data_size,
6725                                  PCI_DMA_FROMDEVICE);
6726         if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) {
6727                 tg3_frag_free(skb_size <= PAGE_SIZE, data);
6728                 return -EIO;
6729         }
6730
6731         map->data = data;
6732         dma_unmap_addr_set(map, mapping, mapping);
6733
6734         desc->addr_hi = ((u64)mapping >> 32);
6735         desc->addr_lo = ((u64)mapping & 0xffffffff);
6736
6737         return data_size;
6738 }
6739
6740 /* We only need to move over in the address because the other
6741  * members of the RX descriptor are invariant.  See notes above
6742  * tg3_alloc_rx_data for full details.
6743  */
6744 static void tg3_recycle_rx(struct tg3_napi *tnapi,
6745                            struct tg3_rx_prodring_set *dpr,
6746                            u32 opaque_key, int src_idx,
6747                            u32 dest_idx_unmasked)
6748 {
6749         struct tg3 *tp = tnapi->tp;
6750         struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6751         struct ring_info *src_map, *dest_map;
6752         struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6753         int dest_idx;
6754
6755         switch (opaque_key) {
6756         case RXD_OPAQUE_RING_STD:
6757                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6758                 dest_desc = &dpr->rx_std[dest_idx];
6759                 dest_map = &dpr->rx_std_buffers[dest_idx];
6760                 src_desc = &spr->rx_std[src_idx];
6761                 src_map = &spr->rx_std_buffers[src_idx];
6762                 break;
6763
6764         case RXD_OPAQUE_RING_JUMBO:
6765                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6766                 dest_desc = &dpr->rx_jmb[dest_idx].std;
6767                 dest_map = &dpr->rx_jmb_buffers[dest_idx];
6768                 src_desc = &spr->rx_jmb[src_idx].std;
6769                 src_map = &spr->rx_jmb_buffers[src_idx];
6770                 break;
6771
6772         default:
6773                 return;
6774         }
6775
6776         dest_map->data = src_map->data;
6777         dma_unmap_addr_set(dest_map, mapping,
6778                            dma_unmap_addr(src_map, mapping));
6779         dest_desc->addr_hi = src_desc->addr_hi;
6780         dest_desc->addr_lo = src_desc->addr_lo;
6781
6782         /* Ensure that the update to the skb happens after the physical
6783          * addresses have been transferred to the new BD location.
6784          */
6785         smp_wmb();
6786
6787         src_map->data = NULL;
6788 }
6789
6790 /* The RX ring scheme is composed of multiple rings which post fresh
6791  * buffers to the chip, and one special ring the chip uses to report
6792  * status back to the host.
6793  *
6794  * The special ring reports the status of received packets to the
6795  * host.  The chip does not write into the original descriptor the
6796  * RX buffer was obtained from.  The chip simply takes the original
6797  * descriptor as provided by the host, updates the status and length
6798  * field, then writes this into the next status ring entry.
6799  *
6800  * Each ring the host uses to post buffers to the chip is described
6801  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6802  * it is first placed into the on-chip ram.  When the packet's length
6803  * is known, it walks down the TG3_BDINFO entries to select the ring.
6804  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6805  * which is within the range of the new packet's length is chosen.
6806  *
6807  * The "separate ring for rx status" scheme may sound queer, but it makes
6808  * sense from a cache coherency perspective.  If only the host writes
6809  * to the buffer post rings, and only the chip writes to the rx status
6810  * rings, then cache lines never move beyond shared-modified state.
6811  * If both the host and chip were to write into the same ring, cache line
6812  * eviction could occur since both entities want it in an exclusive state.
6813  */
6814 static int tg3_rx(struct tg3_napi *tnapi, int budget)
6815 {
6816         struct tg3 *tp = tnapi->tp;
6817         u32 work_mask, rx_std_posted = 0;
6818         u32 std_prod_idx, jmb_prod_idx;
6819         u32 sw_idx = tnapi->rx_rcb_ptr;
6820         u16 hw_idx;
6821         int received;
6822         struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6823
6824         hw_idx = *(tnapi->rx_rcb_prod_idx);
6825         /*
6826          * We need to order the read of hw_idx and the read of
6827          * the opaque cookie.
6828          */
6829         rmb();
6830         work_mask = 0;
6831         received = 0;
6832         std_prod_idx = tpr->rx_std_prod_idx;
6833         jmb_prod_idx = tpr->rx_jmb_prod_idx;
6834         while (sw_idx != hw_idx && budget > 0) {
6835                 struct ring_info *ri;
6836                 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6837                 unsigned int len;
6838                 struct sk_buff *skb;
6839                 dma_addr_t dma_addr;
6840                 u32 opaque_key, desc_idx, *post_ptr;
6841                 u8 *data;
6842                 u64 tstamp = 0;
6843
6844                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6845                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6846                 if (opaque_key == RXD_OPAQUE_RING_STD) {
6847                         ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6848                         dma_addr = dma_unmap_addr(ri, mapping);
6849                         data = ri->data;
6850                         post_ptr = &std_prod_idx;
6851                         rx_std_posted++;
6852                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6853                         ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6854                         dma_addr = dma_unmap_addr(ri, mapping);
6855                         data = ri->data;
6856                         post_ptr = &jmb_prod_idx;
6857                 } else
6858                         goto next_pkt_nopost;
6859
6860                 work_mask |= opaque_key;
6861
6862                 if (desc->err_vlan & RXD_ERR_MASK) {
6863                 drop_it:
6864                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6865                                        desc_idx, *post_ptr);
6866                 drop_it_no_recycle:
6867                         /* Other statistics kept track of by card. */
6868                         tp->rx_dropped++;
6869                         goto next_pkt;
6870                 }
6871
6872                 prefetch(data + TG3_RX_OFFSET(tp));
6873                 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6874                       ETH_FCS_LEN;
6875
6876                 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6877                      RXD_FLAG_PTPSTAT_PTPV1 ||
6878                     (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6879                      RXD_FLAG_PTPSTAT_PTPV2) {
6880                         tstamp = tr32(TG3_RX_TSTAMP_LSB);
6881                         tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6882                 }
6883
6884                 if (len > TG3_RX_COPY_THRESH(tp)) {
6885                         int skb_size;
6886                         unsigned int frag_size;
6887
6888                         skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6889                                                     *post_ptr, &frag_size);
6890                         if (skb_size < 0)
6891                                 goto drop_it;
6892
6893                         pci_unmap_single(tp->pdev, dma_addr, skb_size,
6894                                          PCI_DMA_FROMDEVICE);
6895
6896                         /* Ensure that the update to the data happens
6897                          * after the usage of the old DMA mapping.
6898                          */
6899                         smp_wmb();
6900
6901                         ri->data = NULL;
6902
6903                         skb = build_skb(data, frag_size);
6904                         if (!skb) {
6905                                 tg3_frag_free(frag_size != 0, data);
6906                                 goto drop_it_no_recycle;
6907                         }
6908                         skb_reserve(skb, TG3_RX_OFFSET(tp));
6909                 } else {
6910                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6911                                        desc_idx, *post_ptr);
6912
6913                         skb = netdev_alloc_skb(tp->dev,
6914                                                len + TG3_RAW_IP_ALIGN);
6915                         if (skb == NULL)
6916                                 goto drop_it_no_recycle;
6917
6918                         skb_reserve(skb, TG3_RAW_IP_ALIGN);
6919                         pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6920                         memcpy(skb->data,
6921                                data + TG3_RX_OFFSET(tp),
6922                                len);
6923                         pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6924                 }
6925
6926                 skb_put(skb, len);
6927                 if (tstamp)
6928                         tg3_hwclock_to_timestamp(tp, tstamp,
6929                                                  skb_hwtstamps(skb));
6930
6931                 if ((tp->dev->features & NETIF_F_RXCSUM) &&
6932                     (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6933                     (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6934                       >> RXD_TCPCSUM_SHIFT) == 0xffff))
6935                         skb->ip_summed = CHECKSUM_UNNECESSARY;
6936                 else
6937                         skb_checksum_none_assert(skb);
6938
6939                 skb->protocol = eth_type_trans(skb, tp->dev);
6940
6941                 if (len > (tp->dev->mtu + ETH_HLEN) &&
6942                     skb->protocol != htons(ETH_P_8021Q) &&
6943                     skb->protocol != htons(ETH_P_8021AD)) {
6944                         dev_kfree_skb_any(skb);
6945                         goto drop_it_no_recycle;
6946                 }
6947
6948                 if (desc->type_flags & RXD_FLAG_VLAN &&
6949                     !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6950                         __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
6951                                                desc->err_vlan & RXD_VLAN_MASK);
6952
6953                 napi_gro_receive(&tnapi->napi, skb);
6954
6955                 received++;
6956                 budget--;
6957
6958 next_pkt:
6959                 (*post_ptr)++;
6960
6961                 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6962                         tpr->rx_std_prod_idx = std_prod_idx &
6963                                                tp->rx_std_ring_mask;
6964                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6965                                      tpr->rx_std_prod_idx);
6966                         work_mask &= ~RXD_OPAQUE_RING_STD;
6967                         rx_std_posted = 0;
6968                 }
6969 next_pkt_nopost:
6970                 sw_idx++;
6971                 sw_idx &= tp->rx_ret_ring_mask;
6972
6973                 /* Refresh hw_idx to see if there is new work */
6974                 if (sw_idx == hw_idx) {
6975                         hw_idx = *(tnapi->rx_rcb_prod_idx);
6976                         rmb();
6977                 }
6978         }
6979
6980         /* ACK the status ring. */
6981         tnapi->rx_rcb_ptr = sw_idx;
6982         tw32_rx_mbox(tnapi->consmbox, sw_idx);
6983
6984         /* Refill RX ring(s). */
6985         if (!tg3_flag(tp, ENABLE_RSS)) {
6986                 /* Sync BD data before updating mailbox */
6987                 wmb();
6988
6989                 if (work_mask & RXD_OPAQUE_RING_STD) {
6990                         tpr->rx_std_prod_idx = std_prod_idx &
6991                                                tp->rx_std_ring_mask;
6992                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6993                                      tpr->rx_std_prod_idx);
6994                 }
6995                 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6996                         tpr->rx_jmb_prod_idx = jmb_prod_idx &
6997                                                tp->rx_jmb_ring_mask;
6998                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6999                                      tpr->rx_jmb_prod_idx);
7000                 }
7001         } else if (work_mask) {
7002                 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
7003                  * updated before the producer indices can be updated.
7004                  */
7005                 smp_wmb();
7006
7007                 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
7008                 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
7009
7010                 if (tnapi != &tp->napi[1]) {
7011                         tp->rx_refill = true;
7012                         napi_schedule(&tp->napi[1].napi);
7013                 }
7014         }
7015
7016         return received;
7017 }
7018
7019 static void tg3_poll_link(struct tg3 *tp)
7020 {
7021         /* handle link change and other phy events */
7022         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
7023                 struct tg3_hw_status *sblk = tp->napi[0].hw_status;
7024
7025                 if (sblk->status & SD_STATUS_LINK_CHG) {
7026                         sblk->status = SD_STATUS_UPDATED |
7027                                        (sblk->status & ~SD_STATUS_LINK_CHG);
7028                         spin_lock(&tp->lock);
7029                         if (tg3_flag(tp, USE_PHYLIB)) {
7030                                 tw32_f(MAC_STATUS,
7031                                      (MAC_STATUS_SYNC_CHANGED |
7032                                       MAC_STATUS_CFG_CHANGED |
7033                                       MAC_STATUS_MI_COMPLETION |
7034                                       MAC_STATUS_LNKSTATE_CHANGED));
7035                                 udelay(40);
7036                         } else
7037                                 tg3_setup_phy(tp, false);
7038                         spin_unlock(&tp->lock);
7039                 }
7040         }
7041 }
7042
7043 static int tg3_rx_prodring_xfer(struct tg3 *tp,
7044                                 struct tg3_rx_prodring_set *dpr,
7045                                 struct tg3_rx_prodring_set *spr)
7046 {
7047         u32 si, di, cpycnt, src_prod_idx;
7048         int i, err = 0;
7049
7050         while (1) {
7051                 src_prod_idx = spr->rx_std_prod_idx;
7052
7053                 /* Make sure updates to the rx_std_buffers[] entries and the
7054                  * standard producer index are seen in the correct order.
7055                  */
7056                 smp_rmb();
7057
7058                 if (spr->rx_std_cons_idx == src_prod_idx)
7059                         break;
7060
7061                 if (spr->rx_std_cons_idx < src_prod_idx)
7062                         cpycnt = src_prod_idx - spr->rx_std_cons_idx;
7063                 else
7064                         cpycnt = tp->rx_std_ring_mask + 1 -
7065                                  spr->rx_std_cons_idx;
7066
7067                 cpycnt = min(cpycnt,
7068                              tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
7069
7070                 si = spr->rx_std_cons_idx;
7071                 di = dpr->rx_std_prod_idx;
7072
7073                 for (i = di; i < di + cpycnt; i++) {
7074                         if (dpr->rx_std_buffers[i].data) {
7075                                 cpycnt = i - di;
7076                                 err = -ENOSPC;
7077                                 break;
7078                         }
7079                 }
7080
7081                 if (!cpycnt)
7082                         break;
7083
7084                 /* Ensure that updates to the rx_std_buffers ring and the
7085                  * shadowed hardware producer ring from tg3_recycle_skb() are
7086                  * ordered correctly WRT the skb check above.
7087                  */
7088                 smp_rmb();
7089
7090                 memcpy(&dpr->rx_std_buffers[di],
7091                        &spr->rx_std_buffers[si],
7092                        cpycnt * sizeof(struct ring_info));
7093
7094                 for (i = 0; i < cpycnt; i++, di++, si++) {
7095                         struct tg3_rx_buffer_desc *sbd, *dbd;
7096                         sbd = &spr->rx_std[si];
7097                         dbd = &dpr->rx_std[di];
7098                         dbd->addr_hi = sbd->addr_hi;
7099                         dbd->addr_lo = sbd->addr_lo;
7100                 }
7101
7102                 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
7103                                        tp->rx_std_ring_mask;
7104                 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
7105                                        tp->rx_std_ring_mask;
7106         }
7107
7108         while (1) {
7109                 src_prod_idx = spr->rx_jmb_prod_idx;
7110
7111                 /* Make sure updates to the rx_jmb_buffers[] entries and
7112                  * the jumbo producer index are seen in the correct order.
7113                  */
7114                 smp_rmb();
7115
7116                 if (spr->rx_jmb_cons_idx == src_prod_idx)
7117                         break;
7118
7119                 if (spr->rx_jmb_cons_idx < src_prod_idx)
7120                         cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
7121                 else
7122                         cpycnt = tp->rx_jmb_ring_mask + 1 -
7123                                  spr->rx_jmb_cons_idx;
7124
7125                 cpycnt = min(cpycnt,
7126                              tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
7127
7128                 si = spr->rx_jmb_cons_idx;
7129                 di = dpr->rx_jmb_prod_idx;
7130
7131                 for (i = di; i < di + cpycnt; i++) {
7132                         if (dpr->rx_jmb_buffers[i].data) {
7133                                 cpycnt = i - di;
7134                                 err = -ENOSPC;
7135                                 break;
7136                         }
7137                 }
7138
7139                 if (!cpycnt)
7140                         break;
7141
7142                 /* Ensure that updates to the rx_jmb_buffers ring and the
7143                  * shadowed hardware producer ring from tg3_recycle_skb() are
7144                  * ordered correctly WRT the skb check above.
7145                  */
7146                 smp_rmb();
7147
7148                 memcpy(&dpr->rx_jmb_buffers[di],
7149                        &spr->rx_jmb_buffers[si],
7150                        cpycnt * sizeof(struct ring_info));
7151
7152                 for (i = 0; i < cpycnt; i++, di++, si++) {
7153                         struct tg3_rx_buffer_desc *sbd, *dbd;
7154                         sbd = &spr->rx_jmb[si].std;
7155                         dbd = &dpr->rx_jmb[di].std;
7156                         dbd->addr_hi = sbd->addr_hi;
7157                         dbd->addr_lo = sbd->addr_lo;
7158                 }
7159
7160                 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
7161                                        tp->rx_jmb_ring_mask;
7162                 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
7163                                        tp->rx_jmb_ring_mask;
7164         }
7165
7166         return err;
7167 }
7168
7169 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
7170 {
7171         struct tg3 *tp = tnapi->tp;
7172
7173         /* run TX completion thread */
7174         if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
7175                 tg3_tx(tnapi);
7176                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7177                         return work_done;
7178         }
7179
7180         if (!tnapi->rx_rcb_prod_idx)
7181                 return work_done;
7182
7183         /* run RX thread, within the bounds set by NAPI.
7184          * All RX "locking" is done by ensuring outside
7185          * code synchronizes with tg3->napi.poll()
7186          */
7187         if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
7188                 work_done += tg3_rx(tnapi, budget - work_done);
7189
7190         if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
7191                 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
7192                 int i, err = 0;
7193                 u32 std_prod_idx = dpr->rx_std_prod_idx;
7194                 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
7195
7196                 tp->rx_refill = false;
7197                 for (i = 1; i <= tp->rxq_cnt; i++)
7198                         err |= tg3_rx_prodring_xfer(tp, dpr,
7199                                                     &tp->napi[i].prodring);
7200
7201                 wmb();
7202
7203                 if (std_prod_idx != dpr->rx_std_prod_idx)
7204                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7205                                      dpr->rx_std_prod_idx);
7206
7207                 if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
7208                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7209                                      dpr->rx_jmb_prod_idx);
7210
7211                 if (err)
7212                         tw32_f(HOSTCC_MODE, tp->coal_now);
7213         }
7214
7215         return work_done;
7216 }
7217
7218 static inline void tg3_reset_task_schedule(struct tg3 *tp)
7219 {
7220         if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7221                 schedule_work(&tp->reset_task);
7222 }
7223
7224 static inline void tg3_reset_task_cancel(struct tg3 *tp)
7225 {
7226         cancel_work_sync(&tp->reset_task);
7227         tg3_flag_clear(tp, RESET_TASK_PENDING);
7228         tg3_flag_clear(tp, TX_RECOVERY_PENDING);
7229 }
7230
7231 static int tg3_poll_msix(struct napi_struct *napi, int budget)
7232 {
7233         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7234         struct tg3 *tp = tnapi->tp;
7235         int work_done = 0;
7236         struct tg3_hw_status *sblk = tnapi->hw_status;
7237
7238         while (1) {
7239                 work_done = tg3_poll_work(tnapi, work_done, budget);
7240
7241                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7242                         goto tx_recovery;
7243
7244                 if (unlikely(work_done >= budget))
7245                         break;
7246
7247                 /* tp->last_tag is used in tg3_int_reenable() below
7248                  * to tell the hw how much work has been processed,
7249                  * so we must read it before checking for more work.
7250                  */
7251                 tnapi->last_tag = sblk->status_tag;
7252                 tnapi->last_irq_tag = tnapi->last_tag;
7253                 rmb();
7254
7255                 /* check for RX/TX work to do */
7256                 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
7257                            *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
7258
7259                         /* This test here is not race free, but will reduce
7260                          * the number of interrupts by looping again.
7261                          */
7262                         if (tnapi == &tp->napi[1] && tp->rx_refill)
7263                                 continue;
7264
7265                         napi_complete_done(napi, work_done);
7266                         /* Reenable interrupts. */
7267                         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
7268
7269                         /* This test here is synchronized by napi_schedule()
7270                          * and napi_complete() to close the race condition.
7271                          */
7272                         if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
7273                                 tw32(HOSTCC_MODE, tp->coalesce_mode |
7274                                                   HOSTCC_MODE_ENABLE |
7275                                                   tnapi->coal_now);
7276                         }
7277                         break;
7278                 }
7279         }
7280
7281         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7282         return work_done;
7283
7284 tx_recovery:
7285         /* work_done is guaranteed to be less than budget. */
7286         napi_complete(napi);
7287         tg3_reset_task_schedule(tp);
7288         return work_done;
7289 }
7290
7291 static void tg3_process_error(struct tg3 *tp)
7292 {
7293         u32 val;
7294         bool real_error = false;
7295
7296         if (tg3_flag(tp, ERROR_PROCESSED))
7297                 return;
7298
7299         /* Check Flow Attention register */
7300         val = tr32(HOSTCC_FLOW_ATTN);
7301         if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
7302                 netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
7303                 real_error = true;
7304         }
7305
7306         if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
7307                 netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
7308                 real_error = true;
7309         }
7310
7311         if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
7312                 netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
7313                 real_error = true;
7314         }
7315
7316         if (!real_error)
7317                 return;
7318
7319         tg3_dump_state(tp);
7320
7321         tg3_flag_set(tp, ERROR_PROCESSED);
7322         tg3_reset_task_schedule(tp);
7323 }
7324
7325 static int tg3_poll(struct napi_struct *napi, int budget)
7326 {
7327         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7328         struct tg3 *tp = tnapi->tp;
7329         int work_done = 0;
7330         struct tg3_hw_status *sblk = tnapi->hw_status;
7331
7332         while (1) {
7333                 if (sblk->status & SD_STATUS_ERROR)
7334                         tg3_process_error(tp);
7335
7336                 tg3_poll_link(tp);
7337
7338                 work_done = tg3_poll_work(tnapi, work_done, budget);
7339
7340                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7341                         goto tx_recovery;
7342
7343                 if (unlikely(work_done >= budget))
7344                         break;
7345
7346                 if (tg3_flag(tp, TAGGED_STATUS)) {
7347                         /* tp->last_tag is used in tg3_int_reenable() below
7348                          * to tell the hw how much work has been processed,
7349                          * so we must read it before checking for more work.
7350                          */
7351                         tnapi->last_tag = sblk->status_tag;
7352                         tnapi->last_irq_tag = tnapi->last_tag;
7353                         rmb();
7354                 } else
7355                         sblk->status &= ~SD_STATUS_UPDATED;
7356
7357                 if (likely(!tg3_has_work(tnapi))) {
7358                         napi_complete_done(napi, work_done);
7359                         tg3_int_reenable(tnapi);
7360                         break;
7361                 }
7362         }
7363
7364         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7365         return work_done;
7366
7367 tx_recovery:
7368         /* work_done is guaranteed to be less than budget. */
7369         napi_complete(napi);
7370         tg3_reset_task_schedule(tp);
7371         return work_done;
7372 }
7373
7374 static void tg3_napi_disable(struct tg3 *tp)
7375 {
7376         int i;
7377
7378         for (i = tp->irq_cnt - 1; i >= 0; i--)
7379                 napi_disable(&tp->napi[i].napi);
7380 }
7381
7382 static void tg3_napi_enable(struct tg3 *tp)
7383 {
7384         int i;
7385
7386         for (i = 0; i < tp->irq_cnt; i++)
7387                 napi_enable(&tp->napi[i].napi);
7388 }
7389
7390 static void tg3_napi_init(struct tg3 *tp)
7391 {
7392         int i;
7393
7394         netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
7395         for (i = 1; i < tp->irq_cnt; i++)
7396                 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
7397 }
7398
7399 static void tg3_napi_fini(struct tg3 *tp)
7400 {
7401         int i;
7402
7403         for (i = 0; i < tp->irq_cnt; i++)
7404                 netif_napi_del(&tp->napi[i].napi);
7405 }
7406
7407 static inline void tg3_netif_stop(struct tg3 *tp)
7408 {
7409         netif_trans_update(tp->dev);    /* prevent tx timeout */
7410         tg3_napi_disable(tp);
7411         netif_carrier_off(tp->dev);
7412         netif_tx_disable(tp->dev);
7413 }
7414
7415 /* tp->lock must be held */
7416 static inline void tg3_netif_start(struct tg3 *tp)
7417 {
7418         tg3_ptp_resume(tp);
7419
7420         /* NOTE: unconditional netif_tx_wake_all_queues is only
7421          * appropriate so long as all callers are assured to
7422          * have free tx slots (such as after tg3_init_hw)
7423          */
7424         netif_tx_wake_all_queues(tp->dev);
7425
7426         if (tp->link_up)
7427                 netif_carrier_on(tp->dev);
7428
7429         tg3_napi_enable(tp);
7430         tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
7431         tg3_enable_ints(tp);
7432 }
7433
7434 static void tg3_irq_quiesce(struct tg3 *tp)
7435         __releases(tp->lock)
7436         __acquires(tp->lock)
7437 {
7438         int i;
7439
7440         BUG_ON(tp->irq_sync);
7441
7442         tp->irq_sync = 1;
7443         smp_mb();
7444
7445         spin_unlock_bh(&tp->lock);
7446
7447         for (i = 0; i < tp->irq_cnt; i++)
7448                 synchronize_irq(tp->napi[i].irq_vec);
7449
7450         spin_lock_bh(&tp->lock);
7451 }
7452
7453 /* Fully shutdown all tg3 driver activity elsewhere in the system.
7454  * If irq_sync is non-zero, then the IRQ handler must be synchronized
7455  * with as well.  Most of the time, this is not necessary except when
7456  * shutting down the device.
7457  */
7458 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
7459 {
7460         spin_lock_bh(&tp->lock);
7461         if (irq_sync)
7462                 tg3_irq_quiesce(tp);
7463 }
7464
7465 static inline void tg3_full_unlock(struct tg3 *tp)
7466 {
7467         spin_unlock_bh(&tp->lock);
7468 }
7469
7470 /* One-shot MSI handler - Chip automatically disables interrupt
7471  * after sending MSI so driver doesn't have to do it.
7472  */
7473 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
7474 {
7475         struct tg3_napi *tnapi = dev_id;
7476         struct tg3 *tp = tnapi->tp;
7477
7478         prefetch(tnapi->hw_status);
7479         if (tnapi->rx_rcb)
7480                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7481
7482         if (likely(!tg3_irq_sync(tp)))
7483                 napi_schedule(&tnapi->napi);
7484
7485         return IRQ_HANDLED;
7486 }
7487
7488 /* MSI ISR - No need to check for interrupt sharing and no need to
7489  * flush status block and interrupt mailbox. PCI ordering rules
7490  * guarantee that MSI will arrive after the status block.
7491  */
7492 static irqreturn_t tg3_msi(int irq, void *dev_id)
7493 {
7494         struct tg3_napi *tnapi = dev_id;
7495         struct tg3 *tp = tnapi->tp;
7496
7497         prefetch(tnapi->hw_status);
7498         if (tnapi->rx_rcb)
7499                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7500         /*
7501          * Writing any value to intr-mbox-0 clears PCI INTA# and
7502          * chip-internal interrupt pending events.
7503          * Writing non-zero to intr-mbox-0 additional tells the
7504          * NIC to stop sending us irqs, engaging "in-intr-handler"
7505          * event coalescing.
7506          */
7507         tw32_mailbox(tnapi->int_mbox, 0x00000001);
7508         if (likely(!tg3_irq_sync(tp)))
7509                 napi_schedule(&tnapi->napi);
7510
7511         return IRQ_RETVAL(1);
7512 }
7513
7514 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
7515 {
7516         struct tg3_napi *tnapi = dev_id;
7517         struct tg3 *tp = tnapi->tp;
7518         struct tg3_hw_status *sblk = tnapi->hw_status;
7519         unsigned int handled = 1;
7520
7521         /* In INTx mode, it is possible for the interrupt to arrive at
7522          * the CPU before the status block posted prior to the interrupt.
7523          * Reading the PCI State register will confirm whether the
7524          * interrupt is ours and will flush the status block.
7525          */
7526         if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
7527                 if (tg3_flag(tp, CHIP_RESETTING) ||
7528                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7529                         handled = 0;
7530                         goto out;
7531                 }
7532         }
7533
7534         /*
7535          * Writing any value to intr-mbox-0 clears PCI INTA# and
7536          * chip-internal interrupt pending events.
7537          * Writing non-zero to intr-mbox-0 additional tells the
7538          * NIC to stop sending us irqs, engaging "in-intr-handler"
7539          * event coalescing.
7540          *
7541          * Flush the mailbox to de-assert the IRQ immediately to prevent
7542          * spurious interrupts.  The flush impacts performance but
7543          * excessive spurious interrupts can be worse in some cases.
7544          */
7545         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7546         if (tg3_irq_sync(tp))
7547                 goto out;
7548         sblk->status &= ~SD_STATUS_UPDATED;
7549         if (likely(tg3_has_work(tnapi))) {
7550                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7551                 napi_schedule(&tnapi->napi);
7552         } else {
7553                 /* No work, shared interrupt perhaps?  re-enable
7554                  * interrupts, and flush that PCI write
7555                  */
7556                 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
7557                                0x00000000);
7558         }
7559 out:
7560         return IRQ_RETVAL(handled);
7561 }
7562
7563 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
7564 {
7565         struct tg3_napi *tnapi = dev_id;
7566         struct tg3 *tp = tnapi->tp;
7567         struct tg3_hw_status *sblk = tnapi->hw_status;
7568         unsigned int handled = 1;
7569
7570         /* In INTx mode, it is possible for the interrupt to arrive at
7571          * the CPU before the status block posted prior to the interrupt.
7572          * Reading the PCI State register will confirm whether the
7573          * interrupt is ours and will flush the status block.
7574          */
7575         if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
7576                 if (tg3_flag(tp, CHIP_RESETTING) ||
7577                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7578                         handled = 0;
7579                         goto out;
7580                 }
7581         }
7582
7583         /*
7584          * writing any value to intr-mbox-0 clears PCI INTA# and
7585          * chip-internal interrupt pending events.
7586          * writing non-zero to intr-mbox-0 additional tells the
7587          * NIC to stop sending us irqs, engaging "in-intr-handler"
7588          * event coalescing.
7589          *
7590          * Flush the mailbox to de-assert the IRQ immediately to prevent
7591          * spurious interrupts.  The flush impacts performance but
7592          * excessive spurious interrupts can be worse in some cases.
7593          */
7594         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7595
7596         /*
7597          * In a shared interrupt configuration, sometimes other devices'
7598          * interrupts will scream.  We record the current status tag here
7599          * so that the above check can report that the screaming interrupts
7600          * are unhandled.  Eventually they will be silenced.
7601          */
7602         tnapi->last_irq_tag = sblk->status_tag;
7603
7604         if (tg3_irq_sync(tp))
7605                 goto out;
7606
7607         prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7608
7609         napi_schedule(&tnapi->napi);
7610
7611 out:
7612         return IRQ_RETVAL(handled);
7613 }
7614
7615 /* ISR for interrupt test */
7616 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7617 {
7618         struct tg3_napi *tnapi = dev_id;
7619         struct tg3 *tp = tnapi->tp;
7620         struct tg3_hw_status *sblk = tnapi->hw_status;
7621
7622         if ((sblk->status & SD_STATUS_UPDATED) ||
7623             !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7624                 tg3_disable_ints(tp);
7625                 return IRQ_RETVAL(1);
7626         }
7627         return IRQ_RETVAL(0);
7628 }
7629
7630 #ifdef CONFIG_NET_POLL_CONTROLLER
7631 static void tg3_poll_controller(struct net_device *dev)
7632 {
7633         int i;
7634         struct tg3 *tp = netdev_priv(dev);
7635
7636         if (tg3_irq_sync(tp))
7637                 return;
7638
7639         for (i = 0; i < tp->irq_cnt; i++)
7640                 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
7641 }
7642 #endif
7643
7644 static void tg3_tx_timeout(struct net_device *dev)
7645 {
7646         struct tg3 *tp = netdev_priv(dev);
7647
7648         if (netif_msg_tx_err(tp)) {
7649                 netdev_err(dev, "transmit timed out, resetting\n");
7650                 tg3_dump_state(tp);
7651         }
7652
7653         tg3_reset_task_schedule(tp);
7654 }
7655
7656 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
7657 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7658 {
7659         u32 base = (u32) mapping & 0xffffffff;
7660
7661         return base + len + 8 < base;
7662 }
7663
7664 /* Test for TSO DMA buffers that cross into regions which are within MSS bytes
7665  * of any 4GB boundaries: 4G, 8G, etc
7666  */
7667 static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7668                                            u32 len, u32 mss)
7669 {
7670         if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
7671                 u32 base = (u32) mapping & 0xffffffff;
7672
7673                 return ((base + len + (mss & 0x3fff)) < base);
7674         }
7675         return 0;
7676 }
7677
7678 /* Test for DMA addresses > 40-bit */
7679 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7680                                           int len)
7681 {
7682 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
7683         if (tg3_flag(tp, 40BIT_DMA_BUG))
7684                 return ((u64) mapping + len) > DMA_BIT_MASK(40);
7685         return 0;
7686 #else
7687         return 0;
7688 #endif
7689 }
7690
7691 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7692                                  dma_addr_t mapping, u32 len, u32 flags,
7693                                  u32 mss, u32 vlan)
7694 {
7695         txbd->addr_hi = ((u64) mapping >> 32);
7696         txbd->addr_lo = ((u64) mapping & 0xffffffff);
7697         txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7698         txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7699 }
7700
7701 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7702                             dma_addr_t map, u32 len, u32 flags,
7703                             u32 mss, u32 vlan)
7704 {
7705         struct tg3 *tp = tnapi->tp;
7706         bool hwbug = false;
7707
7708         if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7709                 hwbug = true;
7710
7711         if (tg3_4g_overflow_test(map, len))
7712                 hwbug = true;
7713
7714         if (tg3_4g_tso_overflow_test(tp, map, len, mss))
7715                 hwbug = true;
7716
7717         if (tg3_40bit_overflow_test(tp, map, len))
7718                 hwbug = true;
7719
7720         if (tp->dma_limit) {
7721                 u32 prvidx = *entry;
7722                 u32 tmp_flag = flags & ~TXD_FLAG_END;
7723                 while (len > tp->dma_limit && *budget) {
7724                         u32 frag_len = tp->dma_limit;
7725                         len -= tp->dma_limit;
7726
7727                         /* Avoid the 8byte DMA problem */
7728                         if (len <= 8) {
7729                                 len += tp->dma_limit / 2;
7730                                 frag_len = tp->dma_limit / 2;
7731                         }
7732
7733                         tnapi->tx_buffers[*entry].fragmented = true;
7734
7735                         tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7736                                       frag_len, tmp_flag, mss, vlan);
7737                         *budget -= 1;
7738                         prvidx = *entry;
7739                         *entry = NEXT_TX(*entry);
7740
7741                         map += frag_len;
7742                 }
7743
7744                 if (len) {
7745                         if (*budget) {
7746                                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7747                                               len, flags, mss, vlan);
7748                                 *budget -= 1;
7749                                 *entry = NEXT_TX(*entry);
7750                         } else {
7751                                 hwbug = true;
7752                                 tnapi->tx_buffers[prvidx].fragmented = false;
7753                         }
7754                 }
7755         } else {
7756                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7757                               len, flags, mss, vlan);
7758                 *entry = NEXT_TX(*entry);
7759         }
7760
7761         return hwbug;
7762 }
7763
7764 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7765 {
7766         int i;
7767         struct sk_buff *skb;
7768         struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7769
7770         skb = txb->skb;
7771         txb->skb = NULL;
7772
7773         pci_unmap_single(tnapi->tp->pdev,
7774                          dma_unmap_addr(txb, mapping),
7775                          skb_headlen(skb),
7776                          PCI_DMA_TODEVICE);
7777
7778         while (txb->fragmented) {
7779                 txb->fragmented = false;
7780                 entry = NEXT_TX(entry);
7781                 txb = &tnapi->tx_buffers[entry];
7782         }
7783
7784         for (i = 0; i <= last; i++) {
7785                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7786
7787                 entry = NEXT_TX(entry);
7788                 txb = &tnapi->tx_buffers[entry];
7789
7790                 pci_unmap_page(tnapi->tp->pdev,
7791                                dma_unmap_addr(txb, mapping),
7792                                skb_frag_size(frag), PCI_DMA_TODEVICE);
7793
7794                 while (txb->fragmented) {
7795                         txb->fragmented = false;
7796                         entry = NEXT_TX(entry);
7797                         txb = &tnapi->tx_buffers[entry];
7798                 }
7799         }
7800 }
7801
7802 /* Workaround 4GB and 40-bit hardware DMA bugs. */
7803 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7804                                        struct sk_buff **pskb,
7805                                        u32 *entry, u32 *budget,
7806                                        u32 base_flags, u32 mss, u32 vlan)
7807 {
7808         struct tg3 *tp = tnapi->tp;
7809         struct sk_buff *new_skb, *skb = *pskb;
7810         dma_addr_t new_addr = 0;
7811         int ret = 0;
7812
7813         if (tg3_asic_rev(tp) != ASIC_REV_5701)
7814                 new_skb = skb_copy(skb, GFP_ATOMIC);
7815         else {
7816                 int more_headroom = 4 - ((unsigned long)skb->data & 3);
7817
7818                 new_skb = skb_copy_expand(skb,
7819                                           skb_headroom(skb) + more_headroom,
7820                                           skb_tailroom(skb), GFP_ATOMIC);
7821         }
7822
7823         if (!new_skb) {
7824                 ret = -1;
7825         } else {
7826                 /* New SKB is guaranteed to be linear. */
7827                 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
7828                                           PCI_DMA_TODEVICE);
7829                 /* Make sure the mapping succeeded */
7830                 if (pci_dma_mapping_error(tp->pdev, new_addr)) {
7831                         dev_kfree_skb_any(new_skb);
7832                         ret = -1;
7833                 } else {
7834                         u32 save_entry = *entry;
7835
7836                         base_flags |= TXD_FLAG_END;
7837
7838                         tnapi->tx_buffers[*entry].skb = new_skb;
7839                         dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7840                                            mapping, new_addr);
7841
7842                         if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7843                                             new_skb->len, base_flags,
7844                                             mss, vlan)) {
7845                                 tg3_tx_skb_unmap(tnapi, save_entry, -1);
7846                                 dev_kfree_skb_any(new_skb);
7847                                 ret = -1;
7848                         }
7849                 }
7850         }
7851
7852         dev_consume_skb_any(skb);
7853         *pskb = new_skb;
7854         return ret;
7855 }
7856
7857 static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb)
7858 {
7859         /* Check if we will never have enough descriptors,
7860          * as gso_segs can be more than current ring size
7861          */
7862         return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3;
7863 }
7864
7865 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7866
7867 /* Use GSO to workaround all TSO packets that meet HW bug conditions
7868  * indicated in tg3_tx_frag_set()
7869  */
7870 static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
7871                        struct netdev_queue *txq, struct sk_buff *skb)
7872 {
7873         struct sk_buff *segs, *nskb;
7874         u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7875
7876         /* Estimate the number of fragments in the worst case */
7877         if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
7878                 netif_tx_stop_queue(txq);
7879
7880                 /* netif_tx_stop_queue() must be done before checking
7881                  * checking tx index in tg3_tx_avail() below, because in
7882                  * tg3_tx(), we update tx index before checking for
7883                  * netif_tx_queue_stopped().
7884                  */
7885                 smp_mb();
7886                 if (tg3_tx_avail(tnapi) <= frag_cnt_est)
7887                         return NETDEV_TX_BUSY;
7888
7889                 netif_tx_wake_queue(txq);
7890         }
7891
7892         segs = skb_gso_segment(skb, tp->dev->features &
7893                                     ~(NETIF_F_TSO | NETIF_F_TSO6));
7894         if (IS_ERR(segs) || !segs)
7895                 goto tg3_tso_bug_end;
7896
7897         do {
7898                 nskb = segs;
7899                 segs = segs->next;
7900                 nskb->next = NULL;
7901                 tg3_start_xmit(nskb, tp->dev);
7902         } while (segs);
7903
7904 tg3_tso_bug_end:
7905         dev_consume_skb_any(skb);
7906
7907         return NETDEV_TX_OK;
7908 }
7909
7910 /* hard_start_xmit for all devices */
7911 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7912 {
7913         struct tg3 *tp = netdev_priv(dev);
7914         u32 len, entry, base_flags, mss, vlan = 0;
7915         u32 budget;
7916         int i = -1, would_hit_hwbug;
7917         dma_addr_t mapping;
7918         struct tg3_napi *tnapi;
7919         struct netdev_queue *txq;
7920         unsigned int last;
7921         struct iphdr *iph = NULL;
7922         struct tcphdr *tcph = NULL;
7923         __sum16 tcp_csum = 0, ip_csum = 0;
7924         __be16 ip_tot_len = 0;
7925
7926         txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7927         tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7928         if (tg3_flag(tp, ENABLE_TSS))
7929                 tnapi++;
7930
7931         budget = tg3_tx_avail(tnapi);
7932
7933         /* We are running in BH disabled context with netif_tx_lock
7934          * and TX reclaim runs via tp->napi.poll inside of a software
7935          * interrupt.  Furthermore, IRQ processing runs lockless so we have
7936          * no IRQ context deadlocks to worry about either.  Rejoice!
7937          */
7938         if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7939                 if (!netif_tx_queue_stopped(txq)) {
7940                         netif_tx_stop_queue(txq);
7941
7942                         /* This is a hard error, log it. */
7943                         netdev_err(dev,
7944                                    "BUG! Tx Ring full when queue awake!\n");
7945                 }
7946                 return NETDEV_TX_BUSY;
7947         }
7948
7949         entry = tnapi->tx_prod;
7950         base_flags = 0;
7951
7952         mss = skb_shinfo(skb)->gso_size;
7953         if (mss) {
7954                 u32 tcp_opt_len, hdr_len;
7955
7956                 if (skb_cow_head(skb, 0))
7957                         goto drop;
7958
7959                 iph = ip_hdr(skb);
7960                 tcp_opt_len = tcp_optlen(skb);
7961
7962                 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
7963
7964                 /* HW/FW can not correctly segment packets that have been
7965                  * vlan encapsulated.
7966                  */
7967                 if (skb->protocol == htons(ETH_P_8021Q) ||
7968                     skb->protocol == htons(ETH_P_8021AD)) {
7969                         if (tg3_tso_bug_gso_check(tnapi, skb))
7970                                 return tg3_tso_bug(tp, tnapi, txq, skb);
7971                         goto drop;
7972                 }
7973
7974                 if (!skb_is_gso_v6(skb)) {
7975                         if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7976                             tg3_flag(tp, TSO_BUG)) {
7977                                 if (tg3_tso_bug_gso_check(tnapi, skb))
7978                                         return tg3_tso_bug(tp, tnapi, txq, skb);
7979                                 goto drop;
7980                         }
7981                         ip_csum = iph->check;
7982                         ip_tot_len = iph->tot_len;
7983                         iph->check = 0;
7984                         iph->tot_len = htons(mss + hdr_len);
7985                 }
7986
7987                 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7988                                TXD_FLAG_CPU_POST_DMA);
7989
7990                 tcph = tcp_hdr(skb);
7991                 tcp_csum = tcph->check;
7992
7993                 if (tg3_flag(tp, HW_TSO_1) ||
7994                     tg3_flag(tp, HW_TSO_2) ||
7995                     tg3_flag(tp, HW_TSO_3)) {
7996                         tcph->check = 0;
7997                         base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7998                 } else {
7999                         tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
8000                                                          0, IPPROTO_TCP, 0);
8001                 }
8002
8003                 if (tg3_flag(tp, HW_TSO_3)) {
8004                         mss |= (hdr_len & 0xc) << 12;
8005                         if (hdr_len & 0x10)
8006                                 base_flags |= 0x00000010;
8007                         base_flags |= (hdr_len & 0x3e0) << 5;
8008                 } else if (tg3_flag(tp, HW_TSO_2))
8009                         mss |= hdr_len << 9;
8010                 else if (tg3_flag(tp, HW_TSO_1) ||
8011                          tg3_asic_rev(tp) == ASIC_REV_5705) {
8012                         if (tcp_opt_len || iph->ihl > 5) {
8013                                 int tsflags;
8014
8015                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8016                                 mss |= (tsflags << 11);
8017                         }
8018                 } else {
8019                         if (tcp_opt_len || iph->ihl > 5) {
8020                                 int tsflags;
8021
8022                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8023                                 base_flags |= tsflags << 12;
8024                         }
8025                 }
8026         } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
8027                 /* HW/FW can not correctly checksum packets that have been
8028                  * vlan encapsulated.
8029                  */
8030                 if (skb->protocol == htons(ETH_P_8021Q) ||
8031                     skb->protocol == htons(ETH_P_8021AD)) {
8032                         if (skb_checksum_help(skb))
8033                                 goto drop;
8034                 } else  {
8035                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
8036                 }
8037         }
8038
8039         if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
8040             !mss && skb->len > VLAN_ETH_FRAME_LEN)
8041                 base_flags |= TXD_FLAG_JMB_PKT;
8042
8043         if (skb_vlan_tag_present(skb)) {
8044                 base_flags |= TXD_FLAG_VLAN;
8045                 vlan = skb_vlan_tag_get(skb);
8046         }
8047
8048         if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
8049             tg3_flag(tp, TX_TSTAMP_EN)) {
8050                 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
8051                 base_flags |= TXD_FLAG_HWTSTAMP;
8052         }
8053
8054         len = skb_headlen(skb);
8055
8056         mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
8057         if (pci_dma_mapping_error(tp->pdev, mapping))
8058                 goto drop;
8059
8060
8061         tnapi->tx_buffers[entry].skb = skb;
8062         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
8063
8064         would_hit_hwbug = 0;
8065
8066         if (tg3_flag(tp, 5701_DMA_BUG))
8067                 would_hit_hwbug = 1;
8068
8069         if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
8070                           ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
8071                             mss, vlan)) {
8072                 would_hit_hwbug = 1;
8073         } else if (skb_shinfo(skb)->nr_frags > 0) {
8074                 u32 tmp_mss = mss;
8075
8076                 if (!tg3_flag(tp, HW_TSO_1) &&
8077                     !tg3_flag(tp, HW_TSO_2) &&
8078                     !tg3_flag(tp, HW_TSO_3))
8079                         tmp_mss = 0;
8080
8081                 /* Now loop through additional data
8082                  * fragments, and queue them.
8083                  */
8084                 last = skb_shinfo(skb)->nr_frags - 1;
8085                 for (i = 0; i <= last; i++) {
8086                         skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
8087
8088                         len = skb_frag_size(frag);
8089                         mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
8090                                                    len, DMA_TO_DEVICE);
8091
8092                         tnapi->tx_buffers[entry].skb = NULL;
8093                         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
8094                                            mapping);
8095                         if (dma_mapping_error(&tp->pdev->dev, mapping))
8096                                 goto dma_error;
8097
8098                         if (!budget ||
8099                             tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
8100                                             len, base_flags |
8101                                             ((i == last) ? TXD_FLAG_END : 0),
8102                                             tmp_mss, vlan)) {
8103                                 would_hit_hwbug = 1;
8104                                 break;
8105                         }
8106                 }
8107         }
8108
8109         if (would_hit_hwbug) {
8110                 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
8111
8112                 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) {
8113                         /* If it's a TSO packet, do GSO instead of
8114                          * allocating and copying to a large linear SKB
8115                          */
8116                         if (ip_tot_len) {
8117                                 iph->check = ip_csum;
8118                                 iph->tot_len = ip_tot_len;
8119                         }
8120                         tcph->check = tcp_csum;
8121                         return tg3_tso_bug(tp, tnapi, txq, skb);
8122                 }
8123
8124                 /* If the workaround fails due to memory/mapping
8125                  * failure, silently drop this packet.
8126                  */
8127                 entry = tnapi->tx_prod;
8128                 budget = tg3_tx_avail(tnapi);
8129                 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
8130                                                 base_flags, mss, vlan))
8131                         goto drop_nofree;
8132         }
8133
8134         skb_tx_timestamp(skb);
8135         netdev_tx_sent_queue(txq, skb->len);
8136
8137         /* Sync BD data before updating mailbox */
8138         wmb();
8139
8140         tnapi->tx_prod = entry;
8141         if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
8142                 netif_tx_stop_queue(txq);
8143
8144                 /* netif_tx_stop_queue() must be done before checking
8145                  * checking tx index in tg3_tx_avail() below, because in
8146                  * tg3_tx(), we update tx index before checking for
8147                  * netif_tx_queue_stopped().
8148                  */
8149                 smp_mb();
8150                 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
8151                         netif_tx_wake_queue(txq);
8152         }
8153
8154         if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
8155                 /* Packets are ready, update Tx producer idx on card. */
8156                 tw32_tx_mbox(tnapi->prodmbox, entry);
8157         }
8158
8159         return NETDEV_TX_OK;
8160
8161 dma_error:
8162         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
8163         tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
8164 drop:
8165         dev_kfree_skb_any(skb);
8166 drop_nofree:
8167         tp->tx_dropped++;
8168         return NETDEV_TX_OK;
8169 }
8170
8171 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
8172 {
8173         if (enable) {
8174                 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
8175                                   MAC_MODE_PORT_MODE_MASK);
8176
8177                 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
8178
8179                 if (!tg3_flag(tp, 5705_PLUS))
8180                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
8181
8182                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
8183                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
8184                 else
8185                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
8186         } else {
8187                 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
8188
8189                 if (tg3_flag(tp, 5705_PLUS) ||
8190                     (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
8191                     tg3_asic_rev(tp) == ASIC_REV_5700)
8192                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
8193         }
8194
8195         tw32(MAC_MODE, tp->mac_mode);
8196         udelay(40);
8197 }
8198
8199 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
8200 {
8201         u32 val, bmcr, mac_mode, ptest = 0;
8202
8203         tg3_phy_toggle_apd(tp, false);
8204         tg3_phy_toggle_automdix(tp, false);
8205
8206         if (extlpbk && tg3_phy_set_extloopbk(tp))
8207                 return -EIO;
8208
8209         bmcr = BMCR_FULLDPLX;
8210         switch (speed) {
8211         case SPEED_10:
8212                 break;
8213         case SPEED_100:
8214                 bmcr |= BMCR_SPEED100;
8215                 break;
8216         case SPEED_1000:
8217         default:
8218                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
8219                         speed = SPEED_100;
8220                         bmcr |= BMCR_SPEED100;
8221                 } else {
8222                         speed = SPEED_1000;
8223                         bmcr |= BMCR_SPEED1000;
8224                 }
8225         }
8226
8227         if (extlpbk) {
8228                 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
8229                         tg3_readphy(tp, MII_CTRL1000, &val);
8230                         val |= CTL1000_AS_MASTER |
8231                                CTL1000_ENABLE_MASTER;
8232                         tg3_writephy(tp, MII_CTRL1000, val);
8233                 } else {
8234                         ptest = MII_TG3_FET_PTEST_TRIM_SEL |
8235                                 MII_TG3_FET_PTEST_TRIM_2;
8236                         tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
8237                 }
8238         } else
8239                 bmcr |= BMCR_LOOPBACK;
8240
8241         tg3_writephy(tp, MII_BMCR, bmcr);
8242
8243         /* The write needs to be flushed for the FETs */
8244         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
8245                 tg3_readphy(tp, MII_BMCR, &bmcr);
8246
8247         udelay(40);
8248
8249         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
8250             tg3_asic_rev(tp) == ASIC_REV_5785) {
8251                 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
8252                              MII_TG3_FET_PTEST_FRC_TX_LINK |
8253                              MII_TG3_FET_PTEST_FRC_TX_LOCK);
8254
8255                 /* The write needs to be flushed for the AC131 */
8256                 tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
8257         }
8258
8259         /* Reset to prevent losing 1st rx packet intermittently */
8260         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
8261             tg3_flag(tp, 5780_CLASS)) {
8262                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8263                 udelay(10);
8264                 tw32_f(MAC_RX_MODE, tp->rx_mode);
8265         }
8266
8267         mac_mode = tp->mac_mode &
8268                    ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
8269         if (speed == SPEED_1000)
8270                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
8271         else
8272                 mac_mode |= MAC_MODE_PORT_MODE_MII;
8273
8274         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
8275                 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
8276
8277                 if (masked_phy_id == TG3_PHY_ID_BCM5401)
8278                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
8279                 else if (masked_phy_id == TG3_PHY_ID_BCM5411)
8280                         mac_mode |= MAC_MODE_LINK_POLARITY;
8281
8282                 tg3_writephy(tp, MII_TG3_EXT_CTRL,
8283                              MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8284         }
8285
8286         tw32(MAC_MODE, mac_mode);
8287         udelay(40);
8288
8289         return 0;
8290 }
8291
8292 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
8293 {
8294         struct tg3 *tp = netdev_priv(dev);
8295
8296         if (features & NETIF_F_LOOPBACK) {
8297                 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
8298                         return;
8299
8300                 spin_lock_bh(&tp->lock);
8301                 tg3_mac_loopback(tp, true);
8302                 netif_carrier_on(tp->dev);
8303                 spin_unlock_bh(&tp->lock);
8304                 netdev_info(dev, "Internal MAC loopback mode enabled.\n");
8305         } else {
8306                 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
8307                         return;
8308
8309                 spin_lock_bh(&tp->lock);
8310                 tg3_mac_loopback(tp, false);
8311                 /* Force link status check */
8312                 tg3_setup_phy(tp, true);
8313                 spin_unlock_bh(&tp->lock);
8314                 netdev_info(dev, "Internal MAC loopback mode disabled.\n");
8315         }
8316 }
8317
8318 static netdev_features_t tg3_fix_features(struct net_device *dev,
8319         netdev_features_t features)
8320 {
8321         struct tg3 *tp = netdev_priv(dev);
8322
8323         if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
8324                 features &= ~NETIF_F_ALL_TSO;
8325
8326         return features;
8327 }
8328
8329 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
8330 {
8331         netdev_features_t changed = dev->features ^ features;
8332
8333         if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
8334                 tg3_set_loopback(dev, features);
8335
8336         return 0;
8337 }
8338
8339 static void tg3_rx_prodring_free(struct tg3 *tp,
8340                                  struct tg3_rx_prodring_set *tpr)
8341 {
8342         int i;
8343
8344         if (tpr != &tp->napi[0].prodring) {
8345                 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
8346                      i = (i + 1) & tp->rx_std_ring_mask)
8347                         tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8348                                         tp->rx_pkt_map_sz);
8349
8350                 if (tg3_flag(tp, JUMBO_CAPABLE)) {
8351                         for (i = tpr->rx_jmb_cons_idx;
8352                              i != tpr->rx_jmb_prod_idx;
8353                              i = (i + 1) & tp->rx_jmb_ring_mask) {
8354                                 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8355                                                 TG3_RX_JMB_MAP_SZ);
8356                         }
8357                 }
8358
8359                 return;
8360         }
8361
8362         for (i = 0; i <= tp->rx_std_ring_mask; i++)
8363                 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8364                                 tp->rx_pkt_map_sz);
8365
8366         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8367                 for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
8368                         tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8369                                         TG3_RX_JMB_MAP_SZ);
8370         }
8371 }
8372
8373 /* Initialize rx rings for packet processing.
8374  *
8375  * The chip has been shut down and the driver detached from
8376  * the networking, so no interrupts or new tx packets will
8377  * end up in the driver.  tp->{tx,}lock are held and thus
8378  * we may not sleep.
8379  */
8380 static int tg3_rx_prodring_alloc(struct tg3 *tp,
8381                                  struct tg3_rx_prodring_set *tpr)
8382 {
8383         u32 i, rx_pkt_dma_sz;
8384
8385         tpr->rx_std_cons_idx = 0;
8386         tpr->rx_std_prod_idx = 0;
8387         tpr->rx_jmb_cons_idx = 0;
8388         tpr->rx_jmb_prod_idx = 0;
8389
8390         if (tpr != &tp->napi[0].prodring) {
8391                 memset(&tpr->rx_std_buffers[0], 0,
8392                        TG3_RX_STD_BUFF_RING_SIZE(tp));
8393                 if (tpr->rx_jmb_buffers)
8394                         memset(&tpr->rx_jmb_buffers[0], 0,
8395                                TG3_RX_JMB_BUFF_RING_SIZE(tp));
8396                 goto done;
8397         }
8398
8399         /* Zero out all descriptors. */
8400         memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
8401
8402         rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
8403         if (tg3_flag(tp, 5780_CLASS) &&
8404             tp->dev->mtu > ETH_DATA_LEN)
8405                 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
8406         tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
8407
8408         /* Initialize invariants of the rings, we only set this
8409          * stuff once.  This works because the card does not
8410          * write into the rx buffer posting rings.
8411          */
8412         for (i = 0; i <= tp->rx_std_ring_mask; i++) {
8413                 struct tg3_rx_buffer_desc *rxd;
8414
8415                 rxd = &tpr->rx_std[i];
8416                 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
8417                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
8418                 rxd->opaque = (RXD_OPAQUE_RING_STD |
8419                                (i << RXD_OPAQUE_INDEX_SHIFT));
8420         }
8421
8422         /* Now allocate fresh SKBs for each rx ring. */
8423         for (i = 0; i < tp->rx_pending; i++) {
8424                 unsigned int frag_size;
8425
8426                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
8427                                       &frag_size) < 0) {
8428                         netdev_warn(tp->dev,
8429                                     "Using a smaller RX standard ring. Only "
8430                                     "%d out of %d buffers were allocated "
8431                                     "successfully\n", i, tp->rx_pending);
8432                         if (i == 0)
8433                                 goto initfail;
8434                         tp->rx_pending = i;
8435                         break;
8436                 }
8437         }
8438
8439         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8440                 goto done;
8441
8442         memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
8443
8444         if (!tg3_flag(tp, JUMBO_RING_ENABLE))
8445                 goto done;
8446
8447         for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
8448                 struct tg3_rx_buffer_desc *rxd;
8449
8450                 rxd = &tpr->rx_jmb[i].std;
8451                 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
8452                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
8453                                   RXD_FLAG_JUMBO;
8454                 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
8455                        (i << RXD_OPAQUE_INDEX_SHIFT));
8456         }
8457
8458         for (i = 0; i < tp->rx_jumbo_pending; i++) {
8459                 unsigned int frag_size;
8460
8461                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
8462                                       &frag_size) < 0) {
8463                         netdev_warn(tp->dev,
8464                                     "Using a smaller RX jumbo ring. Only %d "
8465                                     "out of %d buffers were allocated "
8466                                     "successfully\n", i, tp->rx_jumbo_pending);
8467                         if (i == 0)
8468                                 goto initfail;
8469                         tp->rx_jumbo_pending = i;
8470                         break;
8471                 }
8472         }
8473
8474 done:
8475         return 0;
8476
8477 initfail:
8478         tg3_rx_prodring_free(tp, tpr);
8479         return -ENOMEM;
8480 }
8481
8482 static void tg3_rx_prodring_fini(struct tg3 *tp,
8483                                  struct tg3_rx_prodring_set *tpr)
8484 {
8485         kfree(tpr->rx_std_buffers);
8486         tpr->rx_std_buffers = NULL;
8487         kfree(tpr->rx_jmb_buffers);
8488         tpr->rx_jmb_buffers = NULL;
8489         if (tpr->rx_std) {
8490                 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
8491                                   tpr->rx_std, tpr->rx_std_mapping);
8492                 tpr->rx_std = NULL;
8493         }
8494         if (tpr->rx_jmb) {
8495                 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
8496                                   tpr->rx_jmb, tpr->rx_jmb_mapping);
8497                 tpr->rx_jmb = NULL;
8498         }
8499 }
8500
8501 static int tg3_rx_prodring_init(struct tg3 *tp,
8502                                 struct tg3_rx_prodring_set *tpr)
8503 {
8504         tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
8505                                       GFP_KERNEL);
8506         if (!tpr->rx_std_buffers)
8507                 return -ENOMEM;
8508
8509         tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
8510                                          TG3_RX_STD_RING_BYTES(tp),
8511                                          &tpr->rx_std_mapping,
8512                                          GFP_KERNEL);
8513         if (!tpr->rx_std)
8514                 goto err_out;
8515
8516         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8517                 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
8518                                               GFP_KERNEL);
8519                 if (!tpr->rx_jmb_buffers)
8520                         goto err_out;
8521
8522                 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
8523                                                  TG3_RX_JMB_RING_BYTES(tp),
8524                                                  &tpr->rx_jmb_mapping,
8525                                                  GFP_KERNEL);
8526                 if (!tpr->rx_jmb)
8527                         goto err_out;
8528         }
8529
8530         return 0;
8531
8532 err_out:
8533         tg3_rx_prodring_fini(tp, tpr);
8534         return -ENOMEM;
8535 }
8536
8537 /* Free up pending packets in all rx/tx rings.
8538  *
8539  * The chip has been shut down and the driver detached from
8540  * the networking, so no interrupts or new tx packets will
8541  * end up in the driver.  tp->{tx,}lock is not held and we are not
8542  * in an interrupt context and thus may sleep.
8543  */
8544 static void tg3_free_rings(struct tg3 *tp)
8545 {
8546         int i, j;
8547
8548         for (j = 0; j < tp->irq_cnt; j++) {
8549                 struct tg3_napi *tnapi = &tp->napi[j];
8550
8551                 tg3_rx_prodring_free(tp, &tnapi->prodring);
8552
8553                 if (!tnapi->tx_buffers)
8554                         continue;
8555
8556                 for (i = 0; i < TG3_TX_RING_SIZE; i++) {
8557                         struct sk_buff *skb = tnapi->tx_buffers[i].skb;
8558
8559                         if (!skb)
8560                                 continue;
8561
8562                         tg3_tx_skb_unmap(tnapi, i,
8563                                          skb_shinfo(skb)->nr_frags - 1);
8564
8565                         dev_consume_skb_any(skb);
8566                 }
8567                 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
8568         }
8569 }
8570
8571 /* Initialize tx/rx rings for packet processing.
8572  *
8573  * The chip has been shut down and the driver detached from
8574  * the networking, so no interrupts or new tx packets will
8575  * end up in the driver.  tp->{tx,}lock are held and thus
8576  * we may not sleep.
8577  */
8578 static int tg3_init_rings(struct tg3 *tp)
8579 {
8580         int i;
8581
8582         /* Free up all the SKBs. */
8583         tg3_free_rings(tp);
8584
8585         for (i = 0; i < tp->irq_cnt; i++) {
8586                 struct tg3_napi *tnapi = &tp->napi[i];
8587
8588                 tnapi->last_tag = 0;
8589                 tnapi->last_irq_tag = 0;
8590                 tnapi->hw_status->status = 0;
8591                 tnapi->hw_status->status_tag = 0;
8592                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8593
8594                 tnapi->tx_prod = 0;
8595                 tnapi->tx_cons = 0;
8596                 if (tnapi->tx_ring)
8597                         memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
8598
8599                 tnapi->rx_rcb_ptr = 0;
8600                 if (tnapi->rx_rcb)
8601                         memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
8602
8603                 if (tnapi->prodring.rx_std &&
8604                     tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
8605                         tg3_free_rings(tp);
8606                         return -ENOMEM;
8607                 }
8608         }
8609
8610         return 0;
8611 }
8612
8613 static void tg3_mem_tx_release(struct tg3 *tp)
8614 {
8615         int i;
8616
8617         for (i = 0; i < tp->irq_max; i++) {
8618                 struct tg3_napi *tnapi = &tp->napi[i];
8619
8620                 if (tnapi->tx_ring) {
8621                         dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
8622                                 tnapi->tx_ring, tnapi->tx_desc_mapping);
8623                         tnapi->tx_ring = NULL;
8624                 }
8625
8626                 kfree(tnapi->tx_buffers);
8627                 tnapi->tx_buffers = NULL;
8628         }
8629 }
8630
8631 static int tg3_mem_tx_acquire(struct tg3 *tp)
8632 {
8633         int i;
8634         struct tg3_napi *tnapi = &tp->napi[0];
8635
8636         /* If multivector TSS is enabled, vector 0 does not handle
8637          * tx interrupts.  Don't allocate any resources for it.
8638          */
8639         if (tg3_flag(tp, ENABLE_TSS))
8640                 tnapi++;
8641
8642         for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
8643                 tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE,
8644                                             sizeof(struct tg3_tx_ring_info),
8645                                             GFP_KERNEL);
8646                 if (!tnapi->tx_buffers)
8647                         goto err_out;
8648
8649                 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
8650                                                     TG3_TX_RING_BYTES,
8651                                                     &tnapi->tx_desc_mapping,
8652                                                     GFP_KERNEL);
8653                 if (!tnapi->tx_ring)
8654                         goto err_out;
8655         }
8656
8657         return 0;
8658
8659 err_out:
8660         tg3_mem_tx_release(tp);
8661         return -ENOMEM;
8662 }
8663
8664 static void tg3_mem_rx_release(struct tg3 *tp)
8665 {
8666         int i;
8667
8668         for (i = 0; i < tp->irq_max; i++) {
8669                 struct tg3_napi *tnapi = &tp->napi[i];
8670
8671                 tg3_rx_prodring_fini(tp, &tnapi->prodring);
8672
8673                 if (!tnapi->rx_rcb)
8674                         continue;
8675
8676                 dma_free_coherent(&tp->pdev->dev,
8677                                   TG3_RX_RCB_RING_BYTES(tp),
8678                                   tnapi->rx_rcb,
8679                                   tnapi->rx_rcb_mapping);
8680                 tnapi->rx_rcb = NULL;
8681         }
8682 }
8683
8684 static int tg3_mem_rx_acquire(struct tg3 *tp)
8685 {
8686         unsigned int i, limit;
8687
8688         limit = tp->rxq_cnt;
8689
8690         /* If RSS is enabled, we need a (dummy) producer ring
8691          * set on vector zero.  This is the true hw prodring.
8692          */
8693         if (tg3_flag(tp, ENABLE_RSS))
8694                 limit++;
8695
8696         for (i = 0; i < limit; i++) {
8697                 struct tg3_napi *tnapi = &tp->napi[i];
8698
8699                 if (tg3_rx_prodring_init(tp, &tnapi->prodring))
8700                         goto err_out;
8701
8702                 /* If multivector RSS is enabled, vector 0
8703                  * does not handle rx or tx interrupts.
8704                  * Don't allocate any resources for it.
8705                  */
8706                 if (!i && tg3_flag(tp, ENABLE_RSS))
8707                         continue;
8708
8709                 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
8710                                                    TG3_RX_RCB_RING_BYTES(tp),
8711                                                    &tnapi->rx_rcb_mapping,
8712                                                    GFP_KERNEL);
8713                 if (!tnapi->rx_rcb)
8714                         goto err_out;
8715         }
8716
8717         return 0;
8718
8719 err_out:
8720         tg3_mem_rx_release(tp);
8721         return -ENOMEM;
8722 }
8723
8724 /*
8725  * Must not be invoked with interrupt sources disabled and
8726  * the hardware shutdown down.
8727  */
8728 static void tg3_free_consistent(struct tg3 *tp)
8729 {
8730         int i;
8731
8732         for (i = 0; i < tp->irq_cnt; i++) {
8733                 struct tg3_napi *tnapi = &tp->napi[i];
8734
8735                 if (tnapi->hw_status) {
8736                         dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8737                                           tnapi->hw_status,
8738                                           tnapi->status_mapping);
8739                         tnapi->hw_status = NULL;
8740                 }
8741         }
8742
8743         tg3_mem_rx_release(tp);
8744         tg3_mem_tx_release(tp);
8745
8746         /* tp->hw_stats can be referenced safely:
8747          *     1. under rtnl_lock
8748          *     2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set.
8749          */
8750         if (tp->hw_stats) {
8751                 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8752                                   tp->hw_stats, tp->stats_mapping);
8753                 tp->hw_stats = NULL;
8754         }
8755 }
8756
8757 /*
8758  * Must not be invoked with interrupt sources disabled and
8759  * the hardware shutdown down.  Can sleep.
8760  */
8761 static int tg3_alloc_consistent(struct tg3 *tp)
8762 {
8763         int i;
8764
8765         tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
8766                                           sizeof(struct tg3_hw_stats),
8767                                           &tp->stats_mapping, GFP_KERNEL);
8768         if (!tp->hw_stats)
8769                 goto err_out;
8770
8771         for (i = 0; i < tp->irq_cnt; i++) {
8772                 struct tg3_napi *tnapi = &tp->napi[i];
8773                 struct tg3_hw_status *sblk;
8774
8775                 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
8776                                                       TG3_HW_STATUS_SIZE,
8777                                                       &tnapi->status_mapping,
8778                                                       GFP_KERNEL);
8779                 if (!tnapi->hw_status)
8780                         goto err_out;
8781
8782                 sblk = tnapi->hw_status;
8783
8784                 if (tg3_flag(tp, ENABLE_RSS)) {
8785                         u16 *prodptr = NULL;
8786
8787                         /*
8788                          * When RSS is enabled, the status block format changes
8789                          * slightly.  The "rx_jumbo_consumer", "reserved",
8790                          * and "rx_mini_consumer" members get mapped to the
8791                          * other three rx return ring producer indexes.
8792                          */
8793                         switch (i) {
8794                         case 1:
8795                                 prodptr = &sblk->idx[0].rx_producer;
8796                                 break;
8797                         case 2:
8798                                 prodptr = &sblk->rx_jumbo_consumer;
8799                                 break;
8800                         case 3:
8801                                 prodptr = &sblk->reserved;
8802                                 break;
8803                         case 4:
8804                                 prodptr = &sblk->rx_mini_consumer;
8805                                 break;
8806                         }
8807                         tnapi->rx_rcb_prod_idx = prodptr;
8808                 } else {
8809                         tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8810                 }
8811         }
8812
8813         if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8814                 goto err_out;
8815
8816         return 0;
8817
8818 err_out:
8819         tg3_free_consistent(tp);
8820         return -ENOMEM;
8821 }
8822
8823 #define MAX_WAIT_CNT 1000
8824
8825 /* To stop a block, clear the enable bit and poll till it
8826  * clears.  tp->lock is held.
8827  */
8828 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent)
8829 {
8830         unsigned int i;
8831         u32 val;
8832
8833         if (tg3_flag(tp, 5705_PLUS)) {
8834                 switch (ofs) {
8835                 case RCVLSC_MODE:
8836                 case DMAC_MODE:
8837                 case MBFREE_MODE:
8838                 case BUFMGR_MODE:
8839                 case MEMARB_MODE:
8840                         /* We can't enable/disable these bits of the
8841                          * 5705/5750, just say success.
8842                          */
8843                         return 0;
8844
8845                 default:
8846                         break;
8847                 }
8848         }
8849
8850         val = tr32(ofs);
8851         val &= ~enable_bit;
8852         tw32_f(ofs, val);
8853
8854         for (i = 0; i < MAX_WAIT_CNT; i++) {
8855                 if (pci_channel_offline(tp->pdev)) {
8856                         dev_err(&tp->pdev->dev,
8857                                 "tg3_stop_block device offline, "
8858                                 "ofs=%lx enable_bit=%x\n",
8859                                 ofs, enable_bit);
8860                         return -ENODEV;
8861                 }
8862
8863                 udelay(100);
8864                 val = tr32(ofs);
8865                 if ((val & enable_bit) == 0)
8866                         break;
8867         }
8868
8869         if (i == MAX_WAIT_CNT && !silent) {
8870                 dev_err(&tp->pdev->dev,
8871                         "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8872                         ofs, enable_bit);
8873                 return -ENODEV;
8874         }
8875
8876         return 0;
8877 }
8878
8879 /* tp->lock is held. */
8880 static int tg3_abort_hw(struct tg3 *tp, bool silent)
8881 {
8882         int i, err;
8883
8884         tg3_disable_ints(tp);
8885
8886         if (pci_channel_offline(tp->pdev)) {
8887                 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE);
8888                 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8889                 err = -ENODEV;
8890                 goto err_no_dev;
8891         }
8892
8893         tp->rx_mode &= ~RX_MODE_ENABLE;
8894         tw32_f(MAC_RX_MODE, tp->rx_mode);
8895         udelay(10);
8896
8897         err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8898         err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8899         err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8900         err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8901         err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8902         err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8903
8904         err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8905         err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8906         err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8907         err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8908         err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8909         err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8910         err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8911
8912         tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8913         tw32_f(MAC_MODE, tp->mac_mode);
8914         udelay(40);
8915
8916         tp->tx_mode &= ~TX_MODE_ENABLE;
8917         tw32_f(MAC_TX_MODE, tp->tx_mode);
8918
8919         for (i = 0; i < MAX_WAIT_CNT; i++) {
8920                 udelay(100);
8921                 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8922                         break;
8923         }
8924         if (i >= MAX_WAIT_CNT) {
8925                 dev_err(&tp->pdev->dev,
8926                         "%s timed out, TX_MODE_ENABLE will not clear "
8927                         "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8928                 err |= -ENODEV;
8929         }
8930
8931         err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8932         err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8933         err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8934
8935         tw32(FTQ_RESET, 0xffffffff);
8936         tw32(FTQ_RESET, 0x00000000);
8937
8938         err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8939         err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8940
8941 err_no_dev:
8942         for (i = 0; i < tp->irq_cnt; i++) {
8943                 struct tg3_napi *tnapi = &tp->napi[i];
8944                 if (tnapi->hw_status)
8945                         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8946         }
8947
8948         return err;
8949 }
8950
8951 /* Save PCI command register before chip reset */
8952 static void tg3_save_pci_state(struct tg3 *tp)
8953 {
8954         pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8955 }
8956
8957 /* Restore PCI state after chip reset */
8958 static void tg3_restore_pci_state(struct tg3 *tp)
8959 {
8960         u32 val;
8961
8962         /* Re-enable indirect register accesses. */
8963         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8964                                tp->misc_host_ctrl);
8965
8966         /* Set MAX PCI retry to zero. */
8967         val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8968         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
8969             tg3_flag(tp, PCIX_MODE))
8970                 val |= PCISTATE_RETRY_SAME_DMA;
8971         /* Allow reads and writes to the APE register and memory space. */
8972         if (tg3_flag(tp, ENABLE_APE))
8973                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8974                        PCISTATE_ALLOW_APE_SHMEM_WR |
8975                        PCISTATE_ALLOW_APE_PSPACE_WR;
8976         pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8977
8978         pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8979
8980         if (!tg3_flag(tp, PCI_EXPRESS)) {
8981                 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8982                                       tp->pci_cacheline_sz);
8983                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8984                                       tp->pci_lat_timer);
8985         }
8986
8987         /* Make sure PCI-X relaxed ordering bit is clear. */
8988         if (tg3_flag(tp, PCIX_MODE)) {
8989                 u16 pcix_cmd;
8990
8991                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8992                                      &pcix_cmd);
8993                 pcix_cmd &= ~PCI_X_CMD_ERO;
8994                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8995                                       pcix_cmd);
8996         }
8997
8998         if (tg3_flag(tp, 5780_CLASS)) {
8999
9000                 /* Chip reset on 5780 will reset MSI enable bit,
9001                  * so need to restore it.
9002                  */
9003                 if (tg3_flag(tp, USING_MSI)) {
9004                         u16 ctrl;
9005
9006                         pci_read_config_word(tp->pdev,
9007                                              tp->msi_cap + PCI_MSI_FLAGS,
9008                                              &ctrl);
9009                         pci_write_config_word(tp->pdev,
9010                                               tp->msi_cap + PCI_MSI_FLAGS,
9011                                               ctrl | PCI_MSI_FLAGS_ENABLE);
9012                         val = tr32(MSGINT_MODE);
9013                         tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
9014                 }
9015         }
9016 }
9017
9018 static void tg3_override_clk(struct tg3 *tp)
9019 {
9020         u32 val;
9021
9022         switch (tg3_asic_rev(tp)) {
9023         case ASIC_REV_5717:
9024                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9025                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9026                      TG3_CPMU_MAC_ORIDE_ENABLE);
9027                 break;
9028
9029         case ASIC_REV_5719:
9030         case ASIC_REV_5720:
9031                 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9032                 break;
9033
9034         default:
9035                 return;
9036         }
9037 }
9038
9039 static void tg3_restore_clk(struct tg3 *tp)
9040 {
9041         u32 val;
9042
9043         switch (tg3_asic_rev(tp)) {
9044         case ASIC_REV_5717:
9045                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9046                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE,
9047                      val & ~TG3_CPMU_MAC_ORIDE_ENABLE);
9048                 break;
9049
9050         case ASIC_REV_5719:
9051         case ASIC_REV_5720:
9052                 val = tr32(TG3_CPMU_CLCK_ORIDE);
9053                 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9054                 break;
9055
9056         default:
9057                 return;
9058         }
9059 }
9060
9061 /* tp->lock is held. */
9062 static int tg3_chip_reset(struct tg3 *tp)
9063         __releases(tp->lock)
9064         __acquires(tp->lock)
9065 {
9066         u32 val;
9067         void (*write_op)(struct tg3 *, u32, u32);
9068         int i, err;
9069
9070         if (!pci_device_is_present(tp->pdev))
9071                 return -ENODEV;
9072
9073         tg3_nvram_lock(tp);
9074
9075         tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
9076
9077         /* No matching tg3_nvram_unlock() after this because
9078          * chip reset below will undo the nvram lock.
9079          */
9080         tp->nvram_lock_cnt = 0;
9081
9082         /* GRC_MISC_CFG core clock reset will clear the memory
9083          * enable bit in PCI register 4 and the MSI enable bit
9084          * on some chips, so we save relevant registers here.
9085          */
9086         tg3_save_pci_state(tp);
9087
9088         if (tg3_asic_rev(tp) == ASIC_REV_5752 ||
9089             tg3_flag(tp, 5755_PLUS))
9090                 tw32(GRC_FASTBOOT_PC, 0);
9091
9092         /*
9093          * We must avoid the readl() that normally takes place.
9094          * It locks machines, causes machine checks, and other
9095          * fun things.  So, temporarily disable the 5701
9096          * hardware workaround, while we do the reset.
9097          */
9098         write_op = tp->write32;
9099         if (write_op == tg3_write_flush_reg32)
9100                 tp->write32 = tg3_write32;
9101
9102         /* Prevent the irq handler from reading or writing PCI registers
9103          * during chip reset when the memory enable bit in the PCI command
9104          * register may be cleared.  The chip does not generate interrupt
9105          * at this time, but the irq handler may still be called due to irq
9106          * sharing or irqpoll.
9107          */
9108         tg3_flag_set(tp, CHIP_RESETTING);
9109         for (i = 0; i < tp->irq_cnt; i++) {
9110                 struct tg3_napi *tnapi = &tp->napi[i];
9111                 if (tnapi->hw_status) {
9112                         tnapi->hw_status->status = 0;
9113                         tnapi->hw_status->status_tag = 0;
9114                 }
9115                 tnapi->last_tag = 0;
9116                 tnapi->last_irq_tag = 0;
9117         }
9118         smp_mb();
9119
9120         tg3_full_unlock(tp);
9121
9122         for (i = 0; i < tp->irq_cnt; i++)
9123                 synchronize_irq(tp->napi[i].irq_vec);
9124
9125         tg3_full_lock(tp, 0);
9126
9127         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9128                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9129                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9130         }
9131
9132         /* do the reset */
9133         val = GRC_MISC_CFG_CORECLK_RESET;
9134
9135         if (tg3_flag(tp, PCI_EXPRESS)) {
9136                 /* Force PCIe 1.0a mode */
9137                 if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
9138                     !tg3_flag(tp, 57765_PLUS) &&
9139                     tr32(TG3_PCIE_PHY_TSTCTL) ==
9140                     (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
9141                         tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
9142
9143                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) {
9144                         tw32(GRC_MISC_CFG, (1 << 29));
9145                         val |= (1 << 29);
9146                 }
9147         }
9148
9149         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
9150                 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
9151                 tw32(GRC_VCPU_EXT_CTRL,
9152                      tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
9153         }
9154
9155         /* Set the clock to the highest frequency to avoid timeouts. With link
9156          * aware mode, the clock speed could be slow and bootcode does not
9157          * complete within the expected time. Override the clock to allow the
9158          * bootcode to finish sooner and then restore it.
9159          */
9160         tg3_override_clk(tp);
9161
9162         /* Manage gphy power for all CPMU absent PCIe devices. */
9163         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
9164                 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
9165
9166         tw32(GRC_MISC_CFG, val);
9167
9168         /* restore 5701 hardware bug workaround write method */
9169         tp->write32 = write_op;
9170
9171         /* Unfortunately, we have to delay before the PCI read back.
9172          * Some 575X chips even will not respond to a PCI cfg access
9173          * when the reset command is given to the chip.
9174          *
9175          * How do these hardware designers expect things to work
9176          * properly if the PCI write is posted for a long period
9177          * of time?  It is always necessary to have some method by
9178          * which a register read back can occur to push the write
9179          * out which does the reset.
9180          *
9181          * For most tg3 variants the trick below was working.
9182          * Ho hum...
9183          */
9184         udelay(120);
9185
9186         /* Flush PCI posted writes.  The normal MMIO registers
9187          * are inaccessible at this time so this is the only
9188          * way to make this reliably (actually, this is no longer
9189          * the case, see above).  I tried to use indirect
9190          * register read/write but this upset some 5701 variants.
9191          */
9192         pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
9193
9194         udelay(120);
9195
9196         if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
9197                 u16 val16;
9198
9199                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) {
9200                         int j;
9201                         u32 cfg_val;
9202
9203                         /* Wait for link training to complete.  */
9204                         for (j = 0; j < 5000; j++)
9205                                 udelay(100);
9206
9207                         pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
9208                         pci_write_config_dword(tp->pdev, 0xc4,
9209                                                cfg_val | (1 << 15));
9210                 }
9211
9212                 /* Clear the "no snoop" and "relaxed ordering" bits. */
9213                 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
9214                 /*
9215                  * Older PCIe devices only support the 128 byte
9216                  * MPS setting.  Enforce the restriction.
9217                  */
9218                 if (!tg3_flag(tp, CPMU_PRESENT))
9219                         val16 |= PCI_EXP_DEVCTL_PAYLOAD;
9220                 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
9221
9222                 /* Clear error status */
9223                 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
9224                                       PCI_EXP_DEVSTA_CED |
9225                                       PCI_EXP_DEVSTA_NFED |
9226                                       PCI_EXP_DEVSTA_FED |
9227                                       PCI_EXP_DEVSTA_URD);
9228         }
9229
9230         tg3_restore_pci_state(tp);
9231
9232         tg3_flag_clear(tp, CHIP_RESETTING);
9233         tg3_flag_clear(tp, ERROR_PROCESSED);
9234
9235         val = 0;
9236         if (tg3_flag(tp, 5780_CLASS))
9237                 val = tr32(MEMARB_MODE);
9238         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9239
9240         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) {
9241                 tg3_stop_fw(tp);
9242                 tw32(0x5000, 0x400);
9243         }
9244
9245         if (tg3_flag(tp, IS_SSB_CORE)) {
9246                 /*
9247                  * BCM4785: In order to avoid repercussions from using
9248                  * potentially defective internal ROM, stop the Rx RISC CPU,
9249                  * which is not required.
9250                  */
9251                 tg3_stop_fw(tp);
9252                 tg3_halt_cpu(tp, RX_CPU_BASE);
9253         }
9254
9255         err = tg3_poll_fw(tp);
9256         if (err)
9257                 return err;
9258
9259         tw32(GRC_MODE, tp->grc_mode);
9260
9261         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
9262                 val = tr32(0xc4);
9263
9264                 tw32(0xc4, val | (1 << 15));
9265         }
9266
9267         if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
9268             tg3_asic_rev(tp) == ASIC_REV_5705) {
9269                 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
9270                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0)
9271                         tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
9272                 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9273         }
9274
9275         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9276                 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
9277                 val = tp->mac_mode;
9278         } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9279                 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
9280                 val = tp->mac_mode;
9281         } else
9282                 val = 0;
9283
9284         tw32_f(MAC_MODE, val);
9285         udelay(40);
9286
9287         tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
9288
9289         tg3_mdio_start(tp);
9290
9291         if (tg3_flag(tp, PCI_EXPRESS) &&
9292             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
9293             tg3_asic_rev(tp) != ASIC_REV_5785 &&
9294             !tg3_flag(tp, 57765_PLUS)) {
9295                 val = tr32(0x7c00);
9296
9297                 tw32(0x7c00, val | (1 << 25));
9298         }
9299
9300         tg3_restore_clk(tp);
9301
9302         /* Increase the core clock speed to fix tx timeout issue for 5762
9303          * with 100Mbps link speed.
9304          */
9305         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
9306                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9307                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9308                      TG3_CPMU_MAC_ORIDE_ENABLE);
9309         }
9310
9311         /* Reprobe ASF enable state.  */
9312         tg3_flag_clear(tp, ENABLE_ASF);
9313         tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
9314                            TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
9315
9316         tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
9317         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9318         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9319                 u32 nic_cfg;
9320
9321                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9322                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9323                         tg3_flag_set(tp, ENABLE_ASF);
9324                         tp->last_event_jiffies = jiffies;
9325                         if (tg3_flag(tp, 5750_PLUS))
9326                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
9327
9328                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg);
9329                         if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK)
9330                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
9331                         if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID)
9332                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
9333                 }
9334         }
9335
9336         return 0;
9337 }
9338
9339 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
9340 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
9341 static void __tg3_set_rx_mode(struct net_device *);
9342
9343 /* tp->lock is held. */
9344 static int tg3_halt(struct tg3 *tp, int kind, bool silent)
9345 {
9346         int err;
9347
9348         tg3_stop_fw(tp);
9349
9350         tg3_write_sig_pre_reset(tp, kind);
9351
9352         tg3_abort_hw(tp, silent);
9353         err = tg3_chip_reset(tp);
9354
9355         __tg3_set_mac_addr(tp, false);
9356
9357         tg3_write_sig_legacy(tp, kind);
9358         tg3_write_sig_post_reset(tp, kind);
9359
9360         if (tp->hw_stats) {
9361                 /* Save the stats across chip resets... */
9362                 tg3_get_nstats(tp, &tp->net_stats_prev);
9363                 tg3_get_estats(tp, &tp->estats_prev);
9364
9365                 /* And make sure the next sample is new data */
9366                 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
9367         }
9368
9369         return err;
9370 }
9371
9372 static int tg3_set_mac_addr(struct net_device *dev, void *p)
9373 {
9374         struct tg3 *tp = netdev_priv(dev);
9375         struct sockaddr *addr = p;
9376         int err = 0;
9377         bool skip_mac_1 = false;
9378
9379         if (!is_valid_ether_addr(addr->sa_data))
9380                 return -EADDRNOTAVAIL;
9381
9382         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
9383
9384         if (!netif_running(dev))
9385                 return 0;
9386
9387         if (tg3_flag(tp, ENABLE_ASF)) {
9388                 u32 addr0_high, addr0_low, addr1_high, addr1_low;
9389
9390                 addr0_high = tr32(MAC_ADDR_0_HIGH);
9391                 addr0_low = tr32(MAC_ADDR_0_LOW);
9392                 addr1_high = tr32(MAC_ADDR_1_HIGH);
9393                 addr1_low = tr32(MAC_ADDR_1_LOW);
9394
9395                 /* Skip MAC addr 1 if ASF is using it. */
9396                 if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
9397                     !(addr1_high == 0 && addr1_low == 0))
9398                         skip_mac_1 = true;
9399         }
9400         spin_lock_bh(&tp->lock);
9401         __tg3_set_mac_addr(tp, skip_mac_1);
9402         __tg3_set_rx_mode(dev);
9403         spin_unlock_bh(&tp->lock);
9404
9405         return err;
9406 }
9407
9408 /* tp->lock is held. */
9409 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
9410                            dma_addr_t mapping, u32 maxlen_flags,
9411                            u32 nic_addr)
9412 {
9413         tg3_write_mem(tp,
9414                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
9415                       ((u64) mapping >> 32));
9416         tg3_write_mem(tp,
9417                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
9418                       ((u64) mapping & 0xffffffff));
9419         tg3_write_mem(tp,
9420                       (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
9421                        maxlen_flags);
9422
9423         if (!tg3_flag(tp, 5705_PLUS))
9424                 tg3_write_mem(tp,
9425                               (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
9426                               nic_addr);
9427 }
9428
9429
9430 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9431 {
9432         int i = 0;
9433
9434         if (!tg3_flag(tp, ENABLE_TSS)) {
9435                 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
9436                 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
9437                 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
9438         } else {
9439                 tw32(HOSTCC_TXCOL_TICKS, 0);
9440                 tw32(HOSTCC_TXMAX_FRAMES, 0);
9441                 tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
9442
9443                 for (; i < tp->txq_cnt; i++) {
9444                         u32 reg;
9445
9446                         reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
9447                         tw32(reg, ec->tx_coalesce_usecs);
9448                         reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
9449                         tw32(reg, ec->tx_max_coalesced_frames);
9450                         reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
9451                         tw32(reg, ec->tx_max_coalesced_frames_irq);
9452                 }
9453         }
9454
9455         for (; i < tp->irq_max - 1; i++) {
9456                 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
9457                 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
9458                 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9459         }
9460 }
9461
9462 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9463 {
9464         int i = 0;
9465         u32 limit = tp->rxq_cnt;
9466
9467         if (!tg3_flag(tp, ENABLE_RSS)) {
9468                 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
9469                 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
9470                 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
9471                 limit--;
9472         } else {
9473                 tw32(HOSTCC_RXCOL_TICKS, 0);
9474                 tw32(HOSTCC_RXMAX_FRAMES, 0);
9475                 tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
9476         }
9477
9478         for (; i < limit; i++) {
9479                 u32 reg;
9480
9481                 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
9482                 tw32(reg, ec->rx_coalesce_usecs);
9483                 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
9484                 tw32(reg, ec->rx_max_coalesced_frames);
9485                 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
9486                 tw32(reg, ec->rx_max_coalesced_frames_irq);
9487         }
9488
9489         for (; i < tp->irq_max - 1; i++) {
9490                 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
9491                 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
9492                 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9493         }
9494 }
9495
9496 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
9497 {
9498         tg3_coal_tx_init(tp, ec);
9499         tg3_coal_rx_init(tp, ec);
9500
9501         if (!tg3_flag(tp, 5705_PLUS)) {
9502                 u32 val = ec->stats_block_coalesce_usecs;
9503
9504                 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
9505                 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
9506
9507                 if (!tp->link_up)
9508                         val = 0;
9509
9510                 tw32(HOSTCC_STAT_COAL_TICKS, val);
9511         }
9512 }
9513
9514 /* tp->lock is held. */
9515 static void tg3_tx_rcbs_disable(struct tg3 *tp)
9516 {
9517         u32 txrcb, limit;
9518
9519         /* Disable all transmit rings but the first. */
9520         if (!tg3_flag(tp, 5705_PLUS))
9521                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
9522         else if (tg3_flag(tp, 5717_PLUS))
9523                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
9524         else if (tg3_flag(tp, 57765_CLASS) ||
9525                  tg3_asic_rev(tp) == ASIC_REV_5762)
9526                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
9527         else
9528                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9529
9530         for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9531              txrcb < limit; txrcb += TG3_BDINFO_SIZE)
9532                 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
9533                               BDINFO_FLAGS_DISABLED);
9534 }
9535
9536 /* tp->lock is held. */
9537 static void tg3_tx_rcbs_init(struct tg3 *tp)
9538 {
9539         int i = 0;
9540         u32 txrcb = NIC_SRAM_SEND_RCB;
9541
9542         if (tg3_flag(tp, ENABLE_TSS))
9543                 i++;
9544
9545         for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) {
9546                 struct tg3_napi *tnapi = &tp->napi[i];
9547
9548                 if (!tnapi->tx_ring)
9549                         continue;
9550
9551                 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
9552                                (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
9553                                NIC_SRAM_TX_BUFFER_DESC);
9554         }
9555 }
9556
9557 /* tp->lock is held. */
9558 static void tg3_rx_ret_rcbs_disable(struct tg3 *tp)
9559 {
9560         u32 rxrcb, limit;
9561
9562         /* Disable all receive return rings but the first. */
9563         if (tg3_flag(tp, 5717_PLUS))
9564                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
9565         else if (!tg3_flag(tp, 5705_PLUS))
9566                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
9567         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9568                  tg3_asic_rev(tp) == ASIC_REV_5762 ||
9569                  tg3_flag(tp, 57765_CLASS))
9570                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
9571         else
9572                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9573
9574         for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9575              rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
9576                 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
9577                               BDINFO_FLAGS_DISABLED);
9578 }
9579
9580 /* tp->lock is held. */
9581 static void tg3_rx_ret_rcbs_init(struct tg3 *tp)
9582 {
9583         int i = 0;
9584         u32 rxrcb = NIC_SRAM_RCV_RET_RCB;
9585
9586         if (tg3_flag(tp, ENABLE_RSS))
9587                 i++;
9588
9589         for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) {
9590                 struct tg3_napi *tnapi = &tp->napi[i];
9591
9592                 if (!tnapi->rx_rcb)
9593                         continue;
9594
9595                 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
9596                                (tp->rx_ret_ring_mask + 1) <<
9597                                 BDINFO_FLAGS_MAXLEN_SHIFT, 0);
9598         }
9599 }
9600
9601 /* tp->lock is held. */
9602 static void tg3_rings_reset(struct tg3 *tp)
9603 {
9604         int i;
9605         u32 stblk;
9606         struct tg3_napi *tnapi = &tp->napi[0];
9607
9608         tg3_tx_rcbs_disable(tp);
9609
9610         tg3_rx_ret_rcbs_disable(tp);
9611
9612         /* Disable interrupts */
9613         tw32_mailbox_f(tp->napi[0].int_mbox, 1);
9614         tp->napi[0].chk_msi_cnt = 0;
9615         tp->napi[0].last_rx_cons = 0;
9616         tp->napi[0].last_tx_cons = 0;
9617
9618         /* Zero mailbox registers. */
9619         if (tg3_flag(tp, SUPPORT_MSIX)) {
9620                 for (i = 1; i < tp->irq_max; i++) {
9621                         tp->napi[i].tx_prod = 0;
9622                         tp->napi[i].tx_cons = 0;
9623                         if (tg3_flag(tp, ENABLE_TSS))
9624                                 tw32_mailbox(tp->napi[i].prodmbox, 0);
9625                         tw32_rx_mbox(tp->napi[i].consmbox, 0);
9626                         tw32_mailbox_f(tp->napi[i].int_mbox, 1);
9627                         tp->napi[i].chk_msi_cnt = 0;
9628                         tp->napi[i].last_rx_cons = 0;
9629                         tp->napi[i].last_tx_cons = 0;
9630                 }
9631                 if (!tg3_flag(tp, ENABLE_TSS))
9632                         tw32_mailbox(tp->napi[0].prodmbox, 0);
9633         } else {
9634                 tp->napi[0].tx_prod = 0;
9635                 tp->napi[0].tx_cons = 0;
9636                 tw32_mailbox(tp->napi[0].prodmbox, 0);
9637                 tw32_rx_mbox(tp->napi[0].consmbox, 0);
9638         }
9639
9640         /* Make sure the NIC-based send BD rings are disabled. */
9641         if (!tg3_flag(tp, 5705_PLUS)) {
9642                 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
9643                 for (i = 0; i < 16; i++)
9644                         tw32_tx_mbox(mbox + i * 8, 0);
9645         }
9646
9647         /* Clear status block in ram. */
9648         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9649
9650         /* Set status block DMA address */
9651         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9652              ((u64) tnapi->status_mapping >> 32));
9653         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9654              ((u64) tnapi->status_mapping & 0xffffffff));
9655
9656         stblk = HOSTCC_STATBLCK_RING1;
9657
9658         for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
9659                 u64 mapping = (u64)tnapi->status_mapping;
9660                 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
9661                 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
9662                 stblk += 8;
9663
9664                 /* Clear status block in ram. */
9665                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9666         }
9667
9668         tg3_tx_rcbs_init(tp);
9669         tg3_rx_ret_rcbs_init(tp);
9670 }
9671
9672 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
9673 {
9674         u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
9675
9676         if (!tg3_flag(tp, 5750_PLUS) ||
9677             tg3_flag(tp, 5780_CLASS) ||
9678             tg3_asic_rev(tp) == ASIC_REV_5750 ||
9679             tg3_asic_rev(tp) == ASIC_REV_5752 ||
9680             tg3_flag(tp, 57765_PLUS))
9681                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
9682         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9683                  tg3_asic_rev(tp) == ASIC_REV_5787)
9684                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
9685         else
9686                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
9687
9688         nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
9689         host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
9690
9691         val = min(nic_rep_thresh, host_rep_thresh);
9692         tw32(RCVBDI_STD_THRESH, val);
9693
9694         if (tg3_flag(tp, 57765_PLUS))
9695                 tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
9696
9697         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
9698                 return;
9699
9700         bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
9701
9702         host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
9703
9704         val = min(bdcache_maxcnt / 2, host_rep_thresh);
9705         tw32(RCVBDI_JUMBO_THRESH, val);
9706
9707         if (tg3_flag(tp, 57765_PLUS))
9708                 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
9709 }
9710
9711 static inline u32 calc_crc(unsigned char *buf, int len)
9712 {
9713         u32 reg;
9714         u32 tmp;
9715         int j, k;
9716
9717         reg = 0xffffffff;
9718
9719         for (j = 0; j < len; j++) {
9720                 reg ^= buf[j];
9721
9722                 for (k = 0; k < 8; k++) {
9723                         tmp = reg & 0x01;
9724
9725                         reg >>= 1;
9726
9727                         if (tmp)
9728                                 reg ^= CRC32_POLY_LE;
9729                 }
9730         }
9731
9732         return ~reg;
9733 }
9734
9735 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
9736 {
9737         /* accept or reject all multicast frames */
9738         tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
9739         tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
9740         tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
9741         tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
9742 }
9743
9744 static void __tg3_set_rx_mode(struct net_device *dev)
9745 {
9746         struct tg3 *tp = netdev_priv(dev);
9747         u32 rx_mode;
9748
9749         rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
9750                                   RX_MODE_KEEP_VLAN_TAG);
9751
9752 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
9753         /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
9754          * flag clear.
9755          */
9756         if (!tg3_flag(tp, ENABLE_ASF))
9757                 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
9758 #endif
9759
9760         if (dev->flags & IFF_PROMISC) {
9761                 /* Promiscuous mode. */
9762                 rx_mode |= RX_MODE_PROMISC;
9763         } else if (dev->flags & IFF_ALLMULTI) {
9764                 /* Accept all multicast. */
9765                 tg3_set_multi(tp, 1);
9766         } else if (netdev_mc_empty(dev)) {
9767                 /* Reject all multicast. */
9768                 tg3_set_multi(tp, 0);
9769         } else {
9770                 /* Accept one or more multicast(s). */
9771                 struct netdev_hw_addr *ha;
9772                 u32 mc_filter[4] = { 0, };
9773                 u32 regidx;
9774                 u32 bit;
9775                 u32 crc;
9776
9777                 netdev_for_each_mc_addr(ha, dev) {
9778                         crc = calc_crc(ha->addr, ETH_ALEN);
9779                         bit = ~crc & 0x7f;
9780                         regidx = (bit & 0x60) >> 5;
9781                         bit &= 0x1f;
9782                         mc_filter[regidx] |= (1 << bit);
9783                 }
9784
9785                 tw32(MAC_HASH_REG_0, mc_filter[0]);
9786                 tw32(MAC_HASH_REG_1, mc_filter[1]);
9787                 tw32(MAC_HASH_REG_2, mc_filter[2]);
9788                 tw32(MAC_HASH_REG_3, mc_filter[3]);
9789         }
9790
9791         if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) {
9792                 rx_mode |= RX_MODE_PROMISC;
9793         } else if (!(dev->flags & IFF_PROMISC)) {
9794                 /* Add all entries into to the mac addr filter list */
9795                 int i = 0;
9796                 struct netdev_hw_addr *ha;
9797
9798                 netdev_for_each_uc_addr(ha, dev) {
9799                         __tg3_set_one_mac_addr(tp, ha->addr,
9800                                                i + TG3_UCAST_ADDR_IDX(tp));
9801                         i++;
9802                 }
9803         }
9804
9805         if (rx_mode != tp->rx_mode) {
9806                 tp->rx_mode = rx_mode;
9807                 tw32_f(MAC_RX_MODE, rx_mode);
9808                 udelay(10);
9809         }
9810 }
9811
9812 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
9813 {
9814         int i;
9815
9816         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
9817                 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
9818 }
9819
9820 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
9821 {
9822         int i;
9823
9824         if (!tg3_flag(tp, SUPPORT_MSIX))
9825                 return;
9826
9827         if (tp->rxq_cnt == 1) {
9828                 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
9829                 return;
9830         }
9831
9832         /* Validate table against current IRQ count */
9833         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
9834                 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
9835                         break;
9836         }
9837
9838         if (i != TG3_RSS_INDIR_TBL_SIZE)
9839                 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
9840 }
9841
9842 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
9843 {
9844         int i = 0;
9845         u32 reg = MAC_RSS_INDIR_TBL_0;
9846
9847         while (i < TG3_RSS_INDIR_TBL_SIZE) {
9848                 u32 val = tp->rss_ind_tbl[i];
9849                 i++;
9850                 for (; i % 8; i++) {
9851                         val <<= 4;
9852                         val |= tp->rss_ind_tbl[i];
9853                 }
9854                 tw32(reg, val);
9855                 reg += 4;
9856         }
9857 }
9858
9859 static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp)
9860 {
9861         if (tg3_asic_rev(tp) == ASIC_REV_5719)
9862                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719;
9863         else
9864                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720;
9865 }
9866
9867 /* tp->lock is held. */
9868 static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
9869 {
9870         u32 val, rdmac_mode;
9871         int i, err, limit;
9872         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
9873
9874         tg3_disable_ints(tp);
9875
9876         tg3_stop_fw(tp);
9877
9878         tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
9879
9880         if (tg3_flag(tp, INIT_COMPLETE))
9881                 tg3_abort_hw(tp, 1);
9882
9883         if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
9884             !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) {
9885                 tg3_phy_pull_config(tp);
9886                 tg3_eee_pull_config(tp, NULL);
9887                 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
9888         }
9889
9890         /* Enable MAC control of LPI */
9891         if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
9892                 tg3_setup_eee(tp);
9893
9894         if (reset_phy)
9895                 tg3_phy_reset(tp);
9896
9897         err = tg3_chip_reset(tp);
9898         if (err)
9899                 return err;
9900
9901         tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9902
9903         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
9904                 val = tr32(TG3_CPMU_CTRL);
9905                 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9906                 tw32(TG3_CPMU_CTRL, val);
9907
9908                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9909                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9910                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9911                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9912
9913                 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9914                 val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9915                 val |= CPMU_LNK_AWARE_MACCLK_6_25;
9916                 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9917
9918                 val = tr32(TG3_CPMU_HST_ACC);
9919                 val &= ~CPMU_HST_ACC_MACCLK_MASK;
9920                 val |= CPMU_HST_ACC_MACCLK_6_25;
9921                 tw32(TG3_CPMU_HST_ACC, val);
9922         }
9923
9924         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9925                 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9926                 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9927                        PCIE_PWR_MGMT_L1_THRESH_4MS;
9928                 tw32(PCIE_PWR_MGMT_THRESH, val);
9929
9930                 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9931                 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9932
9933                 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9934
9935                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9936                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9937         }
9938
9939         if (tg3_flag(tp, L1PLLPD_EN)) {
9940                 u32 grc_mode = tr32(GRC_MODE);
9941
9942                 /* Access the lower 1K of PL PCIE block registers. */
9943                 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9944                 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9945
9946                 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9947                 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9948                      val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9949
9950                 tw32(GRC_MODE, grc_mode);
9951         }
9952
9953         if (tg3_flag(tp, 57765_CLASS)) {
9954                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
9955                         u32 grc_mode = tr32(GRC_MODE);
9956
9957                         /* Access the lower 1K of PL PCIE block registers. */
9958                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9959                         tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9960
9961                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9962                                    TG3_PCIE_PL_LO_PHYCTL5);
9963                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9964                              val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9965
9966                         tw32(GRC_MODE, grc_mode);
9967                 }
9968
9969                 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) {
9970                         u32 grc_mode;
9971
9972                         /* Fix transmit hangs */
9973                         val = tr32(TG3_CPMU_PADRNG_CTL);
9974                         val |= TG3_CPMU_PADRNG_CTL_RDIV2;
9975                         tw32(TG3_CPMU_PADRNG_CTL, val);
9976
9977                         grc_mode = tr32(GRC_MODE);
9978
9979                         /* Access the lower 1K of DL PCIE block registers. */
9980                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9981                         tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9982
9983                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9984                                    TG3_PCIE_DL_LO_FTSMAX);
9985                         val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
9986                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
9987                              val | TG3_PCIE_DL_LO_FTSMAX_VAL);
9988
9989                         tw32(GRC_MODE, grc_mode);
9990                 }
9991
9992                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9993                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9994                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9995                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9996         }
9997
9998         /* This works around an issue with Athlon chipsets on
9999          * B3 tigon3 silicon.  This bit has no effect on any
10000          * other revision.  But do not set this on PCI Express
10001          * chips and don't even touch the clocks if the CPMU is present.
10002          */
10003         if (!tg3_flag(tp, CPMU_PRESENT)) {
10004                 if (!tg3_flag(tp, PCI_EXPRESS))
10005                         tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
10006                 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
10007         }
10008
10009         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
10010             tg3_flag(tp, PCIX_MODE)) {
10011                 val = tr32(TG3PCI_PCISTATE);
10012                 val |= PCISTATE_RETRY_SAME_DMA;
10013                 tw32(TG3PCI_PCISTATE, val);
10014         }
10015
10016         if (tg3_flag(tp, ENABLE_APE)) {
10017                 /* Allow reads and writes to the
10018                  * APE register and memory space.
10019                  */
10020                 val = tr32(TG3PCI_PCISTATE);
10021                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
10022                        PCISTATE_ALLOW_APE_SHMEM_WR |
10023                        PCISTATE_ALLOW_APE_PSPACE_WR;
10024                 tw32(TG3PCI_PCISTATE, val);
10025         }
10026
10027         if (tg3_chip_rev(tp) == CHIPREV_5704_BX) {
10028                 /* Enable some hw fixes.  */
10029                 val = tr32(TG3PCI_MSI_DATA);
10030                 val |= (1 << 26) | (1 << 28) | (1 << 29);
10031                 tw32(TG3PCI_MSI_DATA, val);
10032         }
10033
10034         /* Descriptor ring init may make accesses to the
10035          * NIC SRAM area to setup the TX descriptors, so we
10036          * can only do this after the hardware has been
10037          * successfully reset.
10038          */
10039         err = tg3_init_rings(tp);
10040         if (err)
10041                 return err;
10042
10043         if (tg3_flag(tp, 57765_PLUS)) {
10044                 val = tr32(TG3PCI_DMA_RW_CTRL) &
10045                       ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
10046                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
10047                         val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
10048                 if (!tg3_flag(tp, 57765_CLASS) &&
10049                     tg3_asic_rev(tp) != ASIC_REV_5717 &&
10050                     tg3_asic_rev(tp) != ASIC_REV_5762)
10051                         val |= DMA_RWCTRL_TAGGED_STAT_WA;
10052                 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
10053         } else if (tg3_asic_rev(tp) != ASIC_REV_5784 &&
10054                    tg3_asic_rev(tp) != ASIC_REV_5761) {
10055                 /* This value is determined during the probe time DMA
10056                  * engine test, tg3_test_dma.
10057                  */
10058                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10059         }
10060
10061         tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
10062                           GRC_MODE_4X_NIC_SEND_RINGS |
10063                           GRC_MODE_NO_TX_PHDR_CSUM |
10064                           GRC_MODE_NO_RX_PHDR_CSUM);
10065         tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
10066
10067         /* Pseudo-header checksum is done by hardware logic and not
10068          * the offload processers, so make the chip do the pseudo-
10069          * header checksums on receive.  For transmit it is more
10070          * convenient to do the pseudo-header checksum in software
10071          * as Linux does that on transmit for us in all cases.
10072          */
10073         tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
10074
10075         val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
10076         if (tp->rxptpctl)
10077                 tw32(TG3_RX_PTP_CTL,
10078                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
10079
10080         if (tg3_flag(tp, PTP_CAPABLE))
10081                 val |= GRC_MODE_TIME_SYNC_ENABLE;
10082
10083         tw32(GRC_MODE, tp->grc_mode | val);
10084
10085         /* On one of the AMD platform, MRRS is restricted to 4000 because of
10086          * south bridge limitation. As a workaround, Driver is setting MRRS
10087          * to 2048 instead of default 4096.
10088          */
10089         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
10090             tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) {
10091                 val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK;
10092                 tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048);
10093         }
10094
10095         /* Setup the timer prescalar register.  Clock is always 66Mhz. */
10096         val = tr32(GRC_MISC_CFG);
10097         val &= ~0xff;
10098         val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
10099         tw32(GRC_MISC_CFG, val);
10100
10101         /* Initialize MBUF/DESC pool. */
10102         if (tg3_flag(tp, 5750_PLUS)) {
10103                 /* Do nothing.  */
10104         } else if (tg3_asic_rev(tp) != ASIC_REV_5705) {
10105                 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
10106                 if (tg3_asic_rev(tp) == ASIC_REV_5704)
10107                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
10108                 else
10109                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
10110                 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
10111                 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
10112         } else if (tg3_flag(tp, TSO_CAPABLE)) {
10113                 int fw_len;
10114
10115                 fw_len = tp->fw_len;
10116                 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
10117                 tw32(BUFMGR_MB_POOL_ADDR,
10118                      NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
10119                 tw32(BUFMGR_MB_POOL_SIZE,
10120                      NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
10121         }
10122
10123         if (tp->dev->mtu <= ETH_DATA_LEN) {
10124                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10125                      tp->bufmgr_config.mbuf_read_dma_low_water);
10126                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10127                      tp->bufmgr_config.mbuf_mac_rx_low_water);
10128                 tw32(BUFMGR_MB_HIGH_WATER,
10129                      tp->bufmgr_config.mbuf_high_water);
10130         } else {
10131                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10132                      tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
10133                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10134                      tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
10135                 tw32(BUFMGR_MB_HIGH_WATER,
10136                      tp->bufmgr_config.mbuf_high_water_jumbo);
10137         }
10138         tw32(BUFMGR_DMA_LOW_WATER,
10139              tp->bufmgr_config.dma_low_water);
10140         tw32(BUFMGR_DMA_HIGH_WATER,
10141              tp->bufmgr_config.dma_high_water);
10142
10143         val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
10144         if (tg3_asic_rev(tp) == ASIC_REV_5719)
10145                 val |= BUFMGR_MODE_NO_TX_UNDERRUN;
10146         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10147             tg3_asic_rev(tp) == ASIC_REV_5762 ||
10148             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10149             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0)
10150                 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
10151         tw32(BUFMGR_MODE, val);
10152         for (i = 0; i < 2000; i++) {
10153                 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
10154                         break;
10155                 udelay(10);
10156         }
10157         if (i >= 2000) {
10158                 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
10159                 return -ENODEV;
10160         }
10161
10162         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1)
10163                 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
10164
10165         tg3_setup_rxbd_thresholds(tp);
10166
10167         /* Initialize TG3_BDINFO's at:
10168          *  RCVDBDI_STD_BD:     standard eth size rx ring
10169          *  RCVDBDI_JUMBO_BD:   jumbo frame rx ring
10170          *  RCVDBDI_MINI_BD:    small frame rx ring (??? does not work)
10171          *
10172          * like so:
10173          *  TG3_BDINFO_HOST_ADDR:       high/low parts of DMA address of ring
10174          *  TG3_BDINFO_MAXLEN_FLAGS:    (rx max buffer size << 16) |
10175          *                              ring attribute flags
10176          *  TG3_BDINFO_NIC_ADDR:        location of descriptors in nic SRAM
10177          *
10178          * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
10179          * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
10180          *
10181          * The size of each ring is fixed in the firmware, but the location is
10182          * configurable.
10183          */
10184         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10185              ((u64) tpr->rx_std_mapping >> 32));
10186         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10187              ((u64) tpr->rx_std_mapping & 0xffffffff));
10188         if (!tg3_flag(tp, 5717_PLUS))
10189                 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
10190                      NIC_SRAM_RX_BUFFER_DESC);
10191
10192         /* Disable the mini ring */
10193         if (!tg3_flag(tp, 5705_PLUS))
10194                 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
10195                      BDINFO_FLAGS_DISABLED);
10196
10197         /* Program the jumbo buffer descriptor ring control
10198          * blocks on those devices that have them.
10199          */
10200         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10201             (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
10202
10203                 if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
10204                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10205                              ((u64) tpr->rx_jmb_mapping >> 32));
10206                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10207                              ((u64) tpr->rx_jmb_mapping & 0xffffffff));
10208                         val = TG3_RX_JMB_RING_SIZE(tp) <<
10209                               BDINFO_FLAGS_MAXLEN_SHIFT;
10210                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10211                              val | BDINFO_FLAGS_USE_EXT_RECV);
10212                         if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
10213                             tg3_flag(tp, 57765_CLASS) ||
10214                             tg3_asic_rev(tp) == ASIC_REV_5762)
10215                                 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
10216                                      NIC_SRAM_RX_JUMBO_BUFFER_DESC);
10217                 } else {
10218                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10219                              BDINFO_FLAGS_DISABLED);
10220                 }
10221
10222                 if (tg3_flag(tp, 57765_PLUS)) {
10223                         val = TG3_RX_STD_RING_SIZE(tp);
10224                         val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
10225                         val |= (TG3_RX_STD_DMA_SZ << 2);
10226                 } else
10227                         val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
10228         } else
10229                 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
10230
10231         tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
10232
10233         tpr->rx_std_prod_idx = tp->rx_pending;
10234         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
10235
10236         tpr->rx_jmb_prod_idx =
10237                 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
10238         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
10239
10240         tg3_rings_reset(tp);
10241
10242         /* Initialize MAC address and backoff seed. */
10243         __tg3_set_mac_addr(tp, false);
10244
10245         /* MTU + ethernet header + FCS + optional VLAN tag */
10246         tw32(MAC_RX_MTU_SIZE,
10247              tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
10248
10249         /* The slot time is changed by tg3_setup_phy if we
10250          * run at gigabit with half duplex.
10251          */
10252         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
10253               (6 << TX_LENGTHS_IPG_SHIFT) |
10254               (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
10255
10256         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10257             tg3_asic_rev(tp) == ASIC_REV_5762)
10258                 val |= tr32(MAC_TX_LENGTHS) &
10259                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
10260                         TX_LENGTHS_CNT_DWN_VAL_MSK);
10261
10262         tw32(MAC_TX_LENGTHS, val);
10263
10264         /* Receive rules. */
10265         tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
10266         tw32(RCVLPC_CONFIG, 0x0181);
10267
10268         /* Calculate RDMAC_MODE setting early, we need it to determine
10269          * the RCVLPC_STATE_ENABLE mask.
10270          */
10271         rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
10272                       RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
10273                       RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
10274                       RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
10275                       RDMAC_MODE_LNGREAD_ENAB);
10276
10277         if (tg3_asic_rev(tp) == ASIC_REV_5717)
10278                 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
10279
10280         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
10281             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10282             tg3_asic_rev(tp) == ASIC_REV_57780)
10283                 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
10284                               RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
10285                               RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
10286
10287         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10288             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10289                 if (tg3_flag(tp, TSO_CAPABLE) &&
10290                     tg3_asic_rev(tp) == ASIC_REV_5705) {
10291                         rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
10292                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10293                            !tg3_flag(tp, IS_5788)) {
10294                         rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10295                 }
10296         }
10297
10298         if (tg3_flag(tp, PCI_EXPRESS))
10299                 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10300
10301         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10302                 tp->dma_limit = 0;
10303                 if (tp->dev->mtu <= ETH_DATA_LEN) {
10304                         rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR;
10305                         tp->dma_limit = TG3_TX_BD_DMA_MAX_2K;
10306                 }
10307         }
10308
10309         if (tg3_flag(tp, HW_TSO_1) ||
10310             tg3_flag(tp, HW_TSO_2) ||
10311             tg3_flag(tp, HW_TSO_3))
10312                 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
10313
10314         if (tg3_flag(tp, 57765_PLUS) ||
10315             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10316             tg3_asic_rev(tp) == ASIC_REV_57780)
10317                 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
10318
10319         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10320             tg3_asic_rev(tp) == ASIC_REV_5762)
10321                 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
10322
10323         if (tg3_asic_rev(tp) == ASIC_REV_5761 ||
10324             tg3_asic_rev(tp) == ASIC_REV_5784 ||
10325             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10326             tg3_asic_rev(tp) == ASIC_REV_57780 ||
10327             tg3_flag(tp, 57765_PLUS)) {
10328                 u32 tgtreg;
10329
10330                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10331                         tgtreg = TG3_RDMA_RSRVCTRL_REG2;
10332                 else
10333                         tgtreg = TG3_RDMA_RSRVCTRL_REG;
10334
10335                 val = tr32(tgtreg);
10336                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10337                     tg3_asic_rev(tp) == ASIC_REV_5762) {
10338                         val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
10339                                  TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
10340                                  TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
10341                         val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
10342                                TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
10343                                TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
10344                 }
10345                 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
10346         }
10347
10348         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10349             tg3_asic_rev(tp) == ASIC_REV_5720 ||
10350             tg3_asic_rev(tp) == ASIC_REV_5762) {
10351                 u32 tgtreg;
10352
10353                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10354                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2;
10355                 else
10356                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL;
10357
10358                 val = tr32(tgtreg);
10359                 tw32(tgtreg, val |
10360                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
10361                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
10362         }
10363
10364         /* Receive/send statistics. */
10365         if (tg3_flag(tp, 5750_PLUS)) {
10366                 val = tr32(RCVLPC_STATS_ENABLE);
10367                 val &= ~RCVLPC_STATSENAB_DACK_FIX;
10368                 tw32(RCVLPC_STATS_ENABLE, val);
10369         } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
10370                    tg3_flag(tp, TSO_CAPABLE)) {
10371                 val = tr32(RCVLPC_STATS_ENABLE);
10372                 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
10373                 tw32(RCVLPC_STATS_ENABLE, val);
10374         } else {
10375                 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
10376         }
10377         tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
10378         tw32(SNDDATAI_STATSENAB, 0xffffff);
10379         tw32(SNDDATAI_STATSCTRL,
10380              (SNDDATAI_SCTRL_ENABLE |
10381               SNDDATAI_SCTRL_FASTUPD));
10382
10383         /* Setup host coalescing engine. */
10384         tw32(HOSTCC_MODE, 0);
10385         for (i = 0; i < 2000; i++) {
10386                 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
10387                         break;
10388                 udelay(10);
10389         }
10390
10391         __tg3_set_coalesce(tp, &tp->coal);
10392
10393         if (!tg3_flag(tp, 5705_PLUS)) {
10394                 /* Status/statistics block address.  See tg3_timer,
10395                  * the tg3_periodic_fetch_stats call there, and
10396                  * tg3_get_stats to see how this works for 5705/5750 chips.
10397                  */
10398                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
10399                      ((u64) tp->stats_mapping >> 32));
10400                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
10401                      ((u64) tp->stats_mapping & 0xffffffff));
10402                 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
10403
10404                 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
10405
10406                 /* Clear statistics and status block memory areas */
10407                 for (i = NIC_SRAM_STATS_BLK;
10408                      i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
10409                      i += sizeof(u32)) {
10410                         tg3_write_mem(tp, i, 0);
10411                         udelay(40);
10412                 }
10413         }
10414
10415         tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
10416
10417         tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
10418         tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
10419         if (!tg3_flag(tp, 5705_PLUS))
10420                 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
10421
10422         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
10423                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
10424                 /* reset to prevent losing 1st rx packet intermittently */
10425                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10426                 udelay(10);
10427         }
10428
10429         tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
10430                         MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
10431                         MAC_MODE_FHDE_ENABLE;
10432         if (tg3_flag(tp, ENABLE_APE))
10433                 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
10434         if (!tg3_flag(tp, 5705_PLUS) &&
10435             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10436             tg3_asic_rev(tp) != ASIC_REV_5700)
10437                 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
10438         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
10439         udelay(40);
10440
10441         /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
10442          * If TG3_FLAG_IS_NIC is zero, we should read the
10443          * register to preserve the GPIO settings for LOMs. The GPIOs,
10444          * whether used as inputs or outputs, are set by boot code after
10445          * reset.
10446          */
10447         if (!tg3_flag(tp, IS_NIC)) {
10448                 u32 gpio_mask;
10449
10450                 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
10451                             GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
10452                             GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
10453
10454                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
10455                         gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
10456                                      GRC_LCLCTRL_GPIO_OUTPUT3;
10457
10458                 if (tg3_asic_rev(tp) == ASIC_REV_5755)
10459                         gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
10460
10461                 tp->grc_local_ctrl &= ~gpio_mask;
10462                 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
10463
10464                 /* GPIO1 must be driven high for eeprom write protect */
10465                 if (tg3_flag(tp, EEPROM_WRITE_PROT))
10466                         tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10467                                                GRC_LCLCTRL_GPIO_OUTPUT1);
10468         }
10469         tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10470         udelay(100);
10471
10472         if (tg3_flag(tp, USING_MSIX)) {
10473                 val = tr32(MSGINT_MODE);
10474                 val |= MSGINT_MODE_ENABLE;
10475                 if (tp->irq_cnt > 1)
10476                         val |= MSGINT_MODE_MULTIVEC_EN;
10477                 if (!tg3_flag(tp, 1SHOT_MSI))
10478                         val |= MSGINT_MODE_ONE_SHOT_DISABLE;
10479                 tw32(MSGINT_MODE, val);
10480         }
10481
10482         if (!tg3_flag(tp, 5705_PLUS)) {
10483                 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
10484                 udelay(40);
10485         }
10486
10487         val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
10488                WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
10489                WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
10490                WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
10491                WDMAC_MODE_LNGREAD_ENAB);
10492
10493         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10494             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10495                 if (tg3_flag(tp, TSO_CAPABLE) &&
10496                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 ||
10497                      tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) {
10498                         /* nothing */
10499                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10500                            !tg3_flag(tp, IS_5788)) {
10501                         val |= WDMAC_MODE_RX_ACCEL;
10502                 }
10503         }
10504
10505         /* Enable host coalescing bug fix */
10506         if (tg3_flag(tp, 5755_PLUS))
10507                 val |= WDMAC_MODE_STATUS_TAG_FIX;
10508
10509         if (tg3_asic_rev(tp) == ASIC_REV_5785)
10510                 val |= WDMAC_MODE_BURST_ALL_DATA;
10511
10512         tw32_f(WDMAC_MODE, val);
10513         udelay(40);
10514
10515         if (tg3_flag(tp, PCIX_MODE)) {
10516                 u16 pcix_cmd;
10517
10518                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10519                                      &pcix_cmd);
10520                 if (tg3_asic_rev(tp) == ASIC_REV_5703) {
10521                         pcix_cmd &= ~PCI_X_CMD_MAX_READ;
10522                         pcix_cmd |= PCI_X_CMD_READ_2K;
10523                 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) {
10524                         pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
10525                         pcix_cmd |= PCI_X_CMD_READ_2K;
10526                 }
10527                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10528                                       pcix_cmd);
10529         }
10530
10531         tw32_f(RDMAC_MODE, rdmac_mode);
10532         udelay(40);
10533
10534         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10535             tg3_asic_rev(tp) == ASIC_REV_5720) {
10536                 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
10537                         if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
10538                                 break;
10539                 }
10540                 if (i < TG3_NUM_RDMA_CHANNELS) {
10541                         val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10542                         val |= tg3_lso_rd_dma_workaround_bit(tp);
10543                         tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10544                         tg3_flag_set(tp, 5719_5720_RDMA_BUG);
10545                 }
10546         }
10547
10548         tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
10549         if (!tg3_flag(tp, 5705_PLUS))
10550                 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
10551
10552         if (tg3_asic_rev(tp) == ASIC_REV_5761)
10553                 tw32(SNDDATAC_MODE,
10554                      SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
10555         else
10556                 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
10557
10558         tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
10559         tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
10560         val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
10561         if (tg3_flag(tp, LRG_PROD_RING_CAP))
10562                 val |= RCVDBDI_MODE_LRG_RING_SZ;
10563         tw32(RCVDBDI_MODE, val);
10564         tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
10565         if (tg3_flag(tp, HW_TSO_1) ||
10566             tg3_flag(tp, HW_TSO_2) ||
10567             tg3_flag(tp, HW_TSO_3))
10568                 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
10569         val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
10570         if (tg3_flag(tp, ENABLE_TSS))
10571                 val |= SNDBDI_MODE_MULTI_TXQ_EN;
10572         tw32(SNDBDI_MODE, val);
10573         tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
10574
10575         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
10576                 err = tg3_load_5701_a0_firmware_fix(tp);
10577                 if (err)
10578                         return err;
10579         }
10580
10581         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10582                 /* Ignore any errors for the firmware download. If download
10583                  * fails, the device will operate with EEE disabled
10584                  */
10585                 tg3_load_57766_firmware(tp);
10586         }
10587
10588         if (tg3_flag(tp, TSO_CAPABLE)) {
10589                 err = tg3_load_tso_firmware(tp);
10590                 if (err)
10591                         return err;
10592         }
10593
10594         tp->tx_mode = TX_MODE_ENABLE;
10595
10596         if (tg3_flag(tp, 5755_PLUS) ||
10597             tg3_asic_rev(tp) == ASIC_REV_5906)
10598                 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
10599
10600         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10601             tg3_asic_rev(tp) == ASIC_REV_5762) {
10602                 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
10603                 tp->tx_mode &= ~val;
10604                 tp->tx_mode |= tr32(MAC_TX_MODE) & val;
10605         }
10606
10607         tw32_f(MAC_TX_MODE, tp->tx_mode);
10608         udelay(100);
10609
10610         if (tg3_flag(tp, ENABLE_RSS)) {
10611                 u32 rss_key[10];
10612
10613                 tg3_rss_write_indir_tbl(tp);
10614
10615                 netdev_rss_key_fill(rss_key, 10 * sizeof(u32));
10616
10617                 for (i = 0; i < 10 ; i++)
10618                         tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]);
10619         }
10620
10621         tp->rx_mode = RX_MODE_ENABLE;
10622         if (tg3_flag(tp, 5755_PLUS))
10623                 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
10624
10625         if (tg3_asic_rev(tp) == ASIC_REV_5762)
10626                 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX;
10627
10628         if (tg3_flag(tp, ENABLE_RSS))
10629                 tp->rx_mode |= RX_MODE_RSS_ENABLE |
10630                                RX_MODE_RSS_ITBL_HASH_BITS_7 |
10631                                RX_MODE_RSS_IPV6_HASH_EN |
10632                                RX_MODE_RSS_TCP_IPV6_HASH_EN |
10633                                RX_MODE_RSS_IPV4_HASH_EN |
10634                                RX_MODE_RSS_TCP_IPV4_HASH_EN;
10635
10636         tw32_f(MAC_RX_MODE, tp->rx_mode);
10637         udelay(10);
10638
10639         tw32(MAC_LED_CTRL, tp->led_ctrl);
10640
10641         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
10642         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10643                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10644                 udelay(10);
10645         }
10646         tw32_f(MAC_RX_MODE, tp->rx_mode);
10647         udelay(10);
10648
10649         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10650                 if ((tg3_asic_rev(tp) == ASIC_REV_5704) &&
10651                     !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
10652                         /* Set drive transmission level to 1.2V  */
10653                         /* only if the signal pre-emphasis bit is not set  */
10654                         val = tr32(MAC_SERDES_CFG);
10655                         val &= 0xfffff000;
10656                         val |= 0x880;
10657                         tw32(MAC_SERDES_CFG, val);
10658                 }
10659                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1)
10660                         tw32(MAC_SERDES_CFG, 0x616000);
10661         }
10662
10663         /* Prevent chip from dropping frames when flow control
10664          * is enabled.
10665          */
10666         if (tg3_flag(tp, 57765_CLASS))
10667                 val = 1;
10668         else
10669                 val = 2;
10670         tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
10671
10672         if (tg3_asic_rev(tp) == ASIC_REV_5704 &&
10673             (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
10674                 /* Use hardware link auto-negotiation */
10675                 tg3_flag_set(tp, HW_AUTONEG);
10676         }
10677
10678         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10679             tg3_asic_rev(tp) == ASIC_REV_5714) {
10680                 u32 tmp;
10681
10682                 tmp = tr32(SERDES_RX_CTRL);
10683                 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
10684                 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
10685                 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
10686                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10687         }
10688
10689         if (!tg3_flag(tp, USE_PHYLIB)) {
10690                 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10691                         tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
10692
10693                 err = tg3_setup_phy(tp, false);
10694                 if (err)
10695                         return err;
10696
10697                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10698                     !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
10699                         u32 tmp;
10700
10701                         /* Clear CRC stats. */
10702                         if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
10703                                 tg3_writephy(tp, MII_TG3_TEST1,
10704                                              tmp | MII_TG3_TEST1_CRC_EN);
10705                                 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
10706                         }
10707                 }
10708         }
10709
10710         __tg3_set_rx_mode(tp->dev);
10711
10712         /* Initialize receive rules. */
10713         tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
10714         tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
10715         tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
10716         tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
10717
10718         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
10719                 limit = 8;
10720         else
10721                 limit = 16;
10722         if (tg3_flag(tp, ENABLE_ASF))
10723                 limit -= 4;
10724         switch (limit) {
10725         case 16:
10726                 tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
10727                 /* fall through */
10728         case 15:
10729                 tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
10730                 /* fall through */
10731         case 14:
10732                 tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
10733                 /* fall through */
10734         case 13:
10735                 tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
10736                 /* fall through */
10737         case 12:
10738                 tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
10739                 /* fall through */
10740         case 11:
10741                 tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
10742                 /* fall through */
10743         case 10:
10744                 tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
10745                 /* fall through */
10746         case 9:
10747                 tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
10748                 /* fall through */
10749         case 8:
10750                 tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
10751                 /* fall through */
10752         case 7:
10753                 tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
10754                 /* fall through */
10755         case 6:
10756                 tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
10757                 /* fall through */
10758         case 5:
10759                 tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
10760                 /* fall through */
10761         case 4:
10762                 /* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
10763         case 3:
10764                 /* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
10765         case 2:
10766         case 1:
10767
10768         default:
10769                 break;
10770         }
10771
10772         if (tg3_flag(tp, ENABLE_APE))
10773                 /* Write our heartbeat update interval to APE. */
10774                 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
10775                                 APE_HOST_HEARTBEAT_INT_5SEC);
10776
10777         tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
10778
10779         return 0;
10780 }
10781
10782 /* Called at device open time to get the chip ready for
10783  * packet processing.  Invoked with tp->lock held.
10784  */
10785 static int tg3_init_hw(struct tg3 *tp, bool reset_phy)
10786 {
10787         /* Chip may have been just powered on. If so, the boot code may still
10788          * be running initialization. Wait for it to finish to avoid races in
10789          * accessing the hardware.
10790          */
10791         tg3_enable_register_access(tp);
10792         tg3_poll_fw(tp);
10793
10794         tg3_switch_clocks(tp);
10795
10796         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10797
10798         return tg3_reset_hw(tp, reset_phy);
10799 }
10800
10801 #ifdef CONFIG_TIGON3_HWMON
10802 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
10803 {
10804         int i;
10805
10806         for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) {
10807                 u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN;
10808
10809                 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
10810                 off += len;
10811
10812                 if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
10813                     !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
10814                         memset(ocir, 0, TG3_OCIR_LEN);
10815         }
10816 }
10817
10818 /* sysfs attributes for hwmon */
10819 static ssize_t tg3_show_temp(struct device *dev,
10820                              struct device_attribute *devattr, char *buf)
10821 {
10822         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
10823         struct tg3 *tp = dev_get_drvdata(dev);
10824         u32 temperature;
10825
10826         spin_lock_bh(&tp->lock);
10827         tg3_ape_scratchpad_read(tp, &temperature, attr->index,
10828                                 sizeof(temperature));
10829         spin_unlock_bh(&tp->lock);
10830         return sprintf(buf, "%u\n", temperature * 1000);
10831 }
10832
10833
10834 static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL,
10835                           TG3_TEMP_SENSOR_OFFSET);
10836 static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL,
10837                           TG3_TEMP_CAUTION_OFFSET);
10838 static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL,
10839                           TG3_TEMP_MAX_OFFSET);
10840
10841 static struct attribute *tg3_attrs[] = {
10842         &sensor_dev_attr_temp1_input.dev_attr.attr,
10843         &sensor_dev_attr_temp1_crit.dev_attr.attr,
10844         &sensor_dev_attr_temp1_max.dev_attr.attr,
10845         NULL
10846 };
10847 ATTRIBUTE_GROUPS(tg3);
10848
10849 static void tg3_hwmon_close(struct tg3 *tp)
10850 {
10851         if (tp->hwmon_dev) {
10852                 hwmon_device_unregister(tp->hwmon_dev);
10853                 tp->hwmon_dev = NULL;
10854         }
10855 }
10856
10857 static void tg3_hwmon_open(struct tg3 *tp)
10858 {
10859         int i;
10860         u32 size = 0;
10861         struct pci_dev *pdev = tp->pdev;
10862         struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
10863
10864         tg3_sd_scan_scratchpad(tp, ocirs);
10865
10866         for (i = 0; i < TG3_SD_NUM_RECS; i++) {
10867                 if (!ocirs[i].src_data_length)
10868                         continue;
10869
10870                 size += ocirs[i].src_hdr_length;
10871                 size += ocirs[i].src_data_length;
10872         }
10873
10874         if (!size)
10875                 return;
10876
10877         tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3",
10878                                                           tp, tg3_groups);
10879         if (IS_ERR(tp->hwmon_dev)) {
10880                 tp->hwmon_dev = NULL;
10881                 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
10882         }
10883 }
10884 #else
10885 static inline void tg3_hwmon_close(struct tg3 *tp) { }
10886 static inline void tg3_hwmon_open(struct tg3 *tp) { }
10887 #endif /* CONFIG_TIGON3_HWMON */
10888
10889
10890 #define TG3_STAT_ADD32(PSTAT, REG) \
10891 do {    u32 __val = tr32(REG); \
10892         (PSTAT)->low += __val; \
10893         if ((PSTAT)->low < __val) \
10894                 (PSTAT)->high += 1; \
10895 } while (0)
10896
10897 static void tg3_periodic_fetch_stats(struct tg3 *tp)
10898 {
10899         struct tg3_hw_stats *sp = tp->hw_stats;
10900
10901         if (!tp->link_up)
10902                 return;
10903
10904         TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
10905         TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
10906         TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
10907         TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
10908         TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
10909         TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
10910         TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
10911         TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
10912         TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
10913         TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
10914         TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
10915         TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
10916         TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
10917         if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) &&
10918                      (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
10919                       sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
10920                 u32 val;
10921
10922                 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10923                 val &= ~tg3_lso_rd_dma_workaround_bit(tp);
10924                 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10925                 tg3_flag_clear(tp, 5719_5720_RDMA_BUG);
10926         }
10927
10928         TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
10929         TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
10930         TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10931         TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10932         TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10933         TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10934         TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10935         TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10936         TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10937         TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10938         TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10939         TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10940         TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10941         TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10942
10943         TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10944         if (tg3_asic_rev(tp) != ASIC_REV_5717 &&
10945             tg3_asic_rev(tp) != ASIC_REV_5762 &&
10946             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 &&
10947             tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) {
10948                 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10949         } else {
10950                 u32 val = tr32(HOSTCC_FLOW_ATTN);
10951                 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10952                 if (val) {
10953                         tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10954                         sp->rx_discards.low += val;
10955                         if (sp->rx_discards.low < val)
10956                                 sp->rx_discards.high += 1;
10957                 }
10958                 sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10959         }
10960         TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10961 }
10962
10963 static void tg3_chk_missed_msi(struct tg3 *tp)
10964 {
10965         u32 i;
10966
10967         for (i = 0; i < tp->irq_cnt; i++) {
10968                 struct tg3_napi *tnapi = &tp->napi[i];
10969
10970                 if (tg3_has_work(tnapi)) {
10971                         if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10972                             tnapi->last_tx_cons == tnapi->tx_cons) {
10973                                 if (tnapi->chk_msi_cnt < 1) {
10974                                         tnapi->chk_msi_cnt++;
10975                                         return;
10976                                 }
10977                                 tg3_msi(0, tnapi);
10978                         }
10979                 }
10980                 tnapi->chk_msi_cnt = 0;
10981                 tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10982                 tnapi->last_tx_cons = tnapi->tx_cons;
10983         }
10984 }
10985
10986 static void tg3_timer(struct timer_list *t)
10987 {
10988         struct tg3 *tp = from_timer(tp, t, timer);
10989
10990         spin_lock(&tp->lock);
10991
10992         if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) {
10993                 spin_unlock(&tp->lock);
10994                 goto restart_timer;
10995         }
10996
10997         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10998             tg3_flag(tp, 57765_CLASS))
10999                 tg3_chk_missed_msi(tp);
11000
11001         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
11002                 /* BCM4785: Flush posted writes from GbE to host memory. */
11003                 tr32(HOSTCC_MODE);
11004         }
11005
11006         if (!tg3_flag(tp, TAGGED_STATUS)) {
11007                 /* All of this garbage is because when using non-tagged
11008                  * IRQ status the mailbox/status_block protocol the chip
11009                  * uses with the cpu is race prone.
11010                  */
11011                 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
11012                         tw32(GRC_LOCAL_CTRL,
11013                              tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
11014                 } else {
11015                         tw32(HOSTCC_MODE, tp->coalesce_mode |
11016                              HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
11017                 }
11018
11019                 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
11020                         spin_unlock(&tp->lock);
11021                         tg3_reset_task_schedule(tp);
11022                         goto restart_timer;
11023                 }
11024         }
11025
11026         /* This part only runs once per second. */
11027         if (!--tp->timer_counter) {
11028                 if (tg3_flag(tp, 5705_PLUS))
11029                         tg3_periodic_fetch_stats(tp);
11030
11031                 if (tp->setlpicnt && !--tp->setlpicnt)
11032                         tg3_phy_eee_enable(tp);
11033
11034                 if (tg3_flag(tp, USE_LINKCHG_REG)) {
11035                         u32 mac_stat;
11036                         int phy_event;
11037
11038                         mac_stat = tr32(MAC_STATUS);
11039
11040                         phy_event = 0;
11041                         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
11042                                 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
11043                                         phy_event = 1;
11044                         } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
11045                                 phy_event = 1;
11046
11047                         if (phy_event)
11048                                 tg3_setup_phy(tp, false);
11049                 } else if (tg3_flag(tp, POLL_SERDES)) {
11050                         u32 mac_stat = tr32(MAC_STATUS);
11051                         int need_setup = 0;
11052
11053                         if (tp->link_up &&
11054                             (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
11055                                 need_setup = 1;
11056                         }
11057                         if (!tp->link_up &&
11058                             (mac_stat & (MAC_STATUS_PCS_SYNCED |
11059                                          MAC_STATUS_SIGNAL_DET))) {
11060                                 need_setup = 1;
11061                         }
11062                         if (need_setup) {
11063                                 if (!tp->serdes_counter) {
11064                                         tw32_f(MAC_MODE,
11065                                              (tp->mac_mode &
11066                                               ~MAC_MODE_PORT_MODE_MASK));
11067                                         udelay(40);
11068                                         tw32_f(MAC_MODE, tp->mac_mode);
11069                                         udelay(40);
11070                                 }
11071                                 tg3_setup_phy(tp, false);
11072                         }
11073                 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
11074                            tg3_flag(tp, 5780_CLASS)) {
11075                         tg3_serdes_parallel_detect(tp);
11076                 } else if (tg3_flag(tp, POLL_CPMU_LINK)) {
11077                         u32 cpmu = tr32(TG3_CPMU_STATUS);
11078                         bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) ==
11079                                          TG3_CPMU_STATUS_LINK_MASK);
11080
11081                         if (link_up != tp->link_up)
11082                                 tg3_setup_phy(tp, false);
11083                 }
11084
11085                 tp->timer_counter = tp->timer_multiplier;
11086         }
11087
11088         /* Heartbeat is only sent once every 2 seconds.
11089          *
11090          * The heartbeat is to tell the ASF firmware that the host
11091          * driver is still alive.  In the event that the OS crashes,
11092          * ASF needs to reset the hardware to free up the FIFO space
11093          * that may be filled with rx packets destined for the host.
11094          * If the FIFO is full, ASF will no longer function properly.
11095          *
11096          * Unintended resets have been reported on real time kernels
11097          * where the timer doesn't run on time.  Netpoll will also have
11098          * same problem.
11099          *
11100          * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
11101          * to check the ring condition when the heartbeat is expiring
11102          * before doing the reset.  This will prevent most unintended
11103          * resets.
11104          */
11105         if (!--tp->asf_counter) {
11106                 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
11107                         tg3_wait_for_event_ack(tp);
11108
11109                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
11110                                       FWCMD_NICDRV_ALIVE3);
11111                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
11112                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
11113                                       TG3_FW_UPDATE_TIMEOUT_SEC);
11114
11115                         tg3_generate_fw_event(tp);
11116                 }
11117                 tp->asf_counter = tp->asf_multiplier;
11118         }
11119
11120         /* Update the APE heartbeat every 5 seconds.*/
11121         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL);
11122
11123         spin_unlock(&tp->lock);
11124
11125 restart_timer:
11126         tp->timer.expires = jiffies + tp->timer_offset;
11127         add_timer(&tp->timer);
11128 }
11129
11130 static void tg3_timer_init(struct tg3 *tp)
11131 {
11132         if (tg3_flag(tp, TAGGED_STATUS) &&
11133             tg3_asic_rev(tp) != ASIC_REV_5717 &&
11134             !tg3_flag(tp, 57765_CLASS))
11135                 tp->timer_offset = HZ;
11136         else
11137                 tp->timer_offset = HZ / 10;
11138
11139         BUG_ON(tp->timer_offset > HZ);
11140
11141         tp->timer_multiplier = (HZ / tp->timer_offset);
11142         tp->asf_multiplier = (HZ / tp->timer_offset) *
11143                              TG3_FW_UPDATE_FREQ_SEC;
11144
11145         timer_setup(&tp->timer, tg3_timer, 0);
11146 }
11147
11148 static void tg3_timer_start(struct tg3 *tp)
11149 {
11150         tp->asf_counter   = tp->asf_multiplier;
11151         tp->timer_counter = tp->timer_multiplier;
11152
11153         tp->timer.expires = jiffies + tp->timer_offset;
11154         add_timer(&tp->timer);
11155 }
11156
11157 static void tg3_timer_stop(struct tg3 *tp)
11158 {
11159         del_timer_sync(&tp->timer);
11160 }
11161
11162 /* Restart hardware after configuration changes, self-test, etc.
11163  * Invoked with tp->lock held.
11164  */
11165 static int tg3_restart_hw(struct tg3 *tp, bool reset_phy)
11166         __releases(tp->lock)
11167         __acquires(tp->lock)
11168 {
11169         int err;
11170
11171         err = tg3_init_hw(tp, reset_phy);
11172         if (err) {
11173                 netdev_err(tp->dev,
11174                            "Failed to re-initialize device, aborting\n");
11175                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11176                 tg3_full_unlock(tp);
11177                 tg3_timer_stop(tp);
11178                 tp->irq_sync = 0;
11179                 tg3_napi_enable(tp);
11180                 dev_close(tp->dev);
11181                 tg3_full_lock(tp, 0);
11182         }
11183         return err;
11184 }
11185
11186 static void tg3_reset_task(struct work_struct *work)
11187 {
11188         struct tg3 *tp = container_of(work, struct tg3, reset_task);
11189         int err;
11190
11191         rtnl_lock();
11192         tg3_full_lock(tp, 0);
11193
11194         if (!netif_running(tp->dev)) {
11195                 tg3_flag_clear(tp, RESET_TASK_PENDING);
11196                 tg3_full_unlock(tp);
11197                 rtnl_unlock();
11198                 return;
11199         }
11200
11201         tg3_full_unlock(tp);
11202
11203         tg3_phy_stop(tp);
11204
11205         tg3_netif_stop(tp);
11206
11207         tg3_full_lock(tp, 1);
11208
11209         if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
11210                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
11211                 tp->write32_rx_mbox = tg3_write_flush_reg32;
11212                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
11213                 tg3_flag_clear(tp, TX_RECOVERY_PENDING);
11214         }
11215
11216         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
11217         err = tg3_init_hw(tp, true);
11218         if (err)
11219                 goto out;
11220
11221         tg3_netif_start(tp);
11222
11223 out:
11224         tg3_full_unlock(tp);
11225
11226         if (!err)
11227                 tg3_phy_start(tp);
11228
11229         tg3_flag_clear(tp, RESET_TASK_PENDING);
11230         rtnl_unlock();
11231 }
11232
11233 static int tg3_request_irq(struct tg3 *tp, int irq_num)
11234 {
11235         irq_handler_t fn;
11236         unsigned long flags;
11237         char *name;
11238         struct tg3_napi *tnapi = &tp->napi[irq_num];
11239
11240         if (tp->irq_cnt == 1)
11241                 name = tp->dev->name;
11242         else {
11243                 name = &tnapi->irq_lbl[0];
11244                 if (tnapi->tx_buffers && tnapi->rx_rcb)
11245                         snprintf(name, IFNAMSIZ,
11246                                  "%s-txrx-%d", tp->dev->name, irq_num);
11247                 else if (tnapi->tx_buffers)
11248                         snprintf(name, IFNAMSIZ,
11249                                  "%s-tx-%d", tp->dev->name, irq_num);
11250                 else if (tnapi->rx_rcb)
11251                         snprintf(name, IFNAMSIZ,
11252                                  "%s-rx-%d", tp->dev->name, irq_num);
11253                 else
11254                         snprintf(name, IFNAMSIZ,
11255                                  "%s-%d", tp->dev->name, irq_num);
11256                 name[IFNAMSIZ-1] = 0;
11257         }
11258
11259         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11260                 fn = tg3_msi;
11261                 if (tg3_flag(tp, 1SHOT_MSI))
11262                         fn = tg3_msi_1shot;
11263                 flags = 0;
11264         } else {
11265                 fn = tg3_interrupt;
11266                 if (tg3_flag(tp, TAGGED_STATUS))
11267                         fn = tg3_interrupt_tagged;
11268                 flags = IRQF_SHARED;
11269         }
11270
11271         return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
11272 }
11273
11274 static int tg3_test_interrupt(struct tg3 *tp)
11275 {
11276         struct tg3_napi *tnapi = &tp->napi[0];
11277         struct net_device *dev = tp->dev;
11278         int err, i, intr_ok = 0;
11279         u32 val;
11280
11281         if (!netif_running(dev))
11282                 return -ENODEV;
11283
11284         tg3_disable_ints(tp);
11285
11286         free_irq(tnapi->irq_vec, tnapi);
11287
11288         /*
11289          * Turn off MSI one shot mode.  Otherwise this test has no
11290          * observable way to know whether the interrupt was delivered.
11291          */
11292         if (tg3_flag(tp, 57765_PLUS)) {
11293                 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
11294                 tw32(MSGINT_MODE, val);
11295         }
11296
11297         err = request_irq(tnapi->irq_vec, tg3_test_isr,
11298                           IRQF_SHARED, dev->name, tnapi);
11299         if (err)
11300                 return err;
11301
11302         tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
11303         tg3_enable_ints(tp);
11304
11305         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11306                tnapi->coal_now);
11307
11308         for (i = 0; i < 5; i++) {
11309                 u32 int_mbox, misc_host_ctrl;
11310
11311                 int_mbox = tr32_mailbox(tnapi->int_mbox);
11312                 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
11313
11314                 if ((int_mbox != 0) ||
11315                     (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
11316                         intr_ok = 1;
11317                         break;
11318                 }
11319
11320                 if (tg3_flag(tp, 57765_PLUS) &&
11321                     tnapi->hw_status->status_tag != tnapi->last_tag)
11322                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
11323
11324                 msleep(10);
11325         }
11326
11327         tg3_disable_ints(tp);
11328
11329         free_irq(tnapi->irq_vec, tnapi);
11330
11331         err = tg3_request_irq(tp, 0);
11332
11333         if (err)
11334                 return err;
11335
11336         if (intr_ok) {
11337                 /* Reenable MSI one shot mode. */
11338                 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
11339                         val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
11340                         tw32(MSGINT_MODE, val);
11341                 }
11342                 return 0;
11343         }
11344
11345         return -EIO;
11346 }
11347
11348 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
11349  * successfully restored
11350  */
11351 static int tg3_test_msi(struct tg3 *tp)
11352 {
11353         int err;
11354         u16 pci_cmd;
11355
11356         if (!tg3_flag(tp, USING_MSI))
11357                 return 0;
11358
11359         /* Turn off SERR reporting in case MSI terminates with Master
11360          * Abort.
11361          */
11362         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11363         pci_write_config_word(tp->pdev, PCI_COMMAND,
11364                               pci_cmd & ~PCI_COMMAND_SERR);
11365
11366         err = tg3_test_interrupt(tp);
11367
11368         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11369
11370         if (!err)
11371                 return 0;
11372
11373         /* other failures */
11374         if (err != -EIO)
11375                 return err;
11376
11377         /* MSI test failed, go back to INTx mode */
11378         netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
11379                     "to INTx mode. Please report this failure to the PCI "
11380                     "maintainer and include system chipset information\n");
11381
11382         free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11383
11384         pci_disable_msi(tp->pdev);
11385
11386         tg3_flag_clear(tp, USING_MSI);
11387         tp->napi[0].irq_vec = tp->pdev->irq;
11388
11389         err = tg3_request_irq(tp, 0);
11390         if (err)
11391                 return err;
11392
11393         /* Need to reset the chip because the MSI cycle may have terminated
11394          * with Master Abort.
11395          */
11396         tg3_full_lock(tp, 1);
11397
11398         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11399         err = tg3_init_hw(tp, true);
11400
11401         tg3_full_unlock(tp);
11402
11403         if (err)
11404                 free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11405
11406         return err;
11407 }
11408
11409 static int tg3_request_firmware(struct tg3 *tp)
11410 {
11411         const struct tg3_firmware_hdr *fw_hdr;
11412
11413         if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
11414                 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
11415                            tp->fw_needed);
11416                 return -ENOENT;
11417         }
11418
11419         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
11420
11421         /* Firmware blob starts with version numbers, followed by
11422          * start address and _full_ length including BSS sections
11423          * (which must be longer than the actual data, of course
11424          */
11425
11426         tp->fw_len = be32_to_cpu(fw_hdr->len);  /* includes bss */
11427         if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) {
11428                 netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
11429                            tp->fw_len, tp->fw_needed);
11430                 release_firmware(tp->fw);
11431                 tp->fw = NULL;
11432                 return -EINVAL;
11433         }
11434
11435         /* We no longer need firmware; we have it. */
11436         tp->fw_needed = NULL;
11437         return 0;
11438 }
11439
11440 static u32 tg3_irq_count(struct tg3 *tp)
11441 {
11442         u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
11443
11444         if (irq_cnt > 1) {
11445                 /* We want as many rx rings enabled as there are cpus.
11446                  * In multiqueue MSI-X mode, the first MSI-X vector
11447                  * only deals with link interrupts, etc, so we add
11448                  * one to the number of vectors we are requesting.
11449                  */
11450                 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
11451         }
11452
11453         return irq_cnt;
11454 }
11455
11456 static bool tg3_enable_msix(struct tg3 *tp)
11457 {
11458         int i, rc;
11459         struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
11460
11461         tp->txq_cnt = tp->txq_req;
11462         tp->rxq_cnt = tp->rxq_req;
11463         if (!tp->rxq_cnt)
11464                 tp->rxq_cnt = netif_get_num_default_rss_queues();
11465         if (tp->rxq_cnt > tp->rxq_max)
11466                 tp->rxq_cnt = tp->rxq_max;
11467
11468         /* Disable multiple TX rings by default.  Simple round-robin hardware
11469          * scheduling of the TX rings can cause starvation of rings with
11470          * small packets when other rings have TSO or jumbo packets.
11471          */
11472         if (!tp->txq_req)
11473                 tp->txq_cnt = 1;
11474
11475         tp->irq_cnt = tg3_irq_count(tp);
11476
11477         for (i = 0; i < tp->irq_max; i++) {
11478                 msix_ent[i].entry  = i;
11479                 msix_ent[i].vector = 0;
11480         }
11481
11482         rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt);
11483         if (rc < 0) {
11484                 return false;
11485         } else if (rc < tp->irq_cnt) {
11486                 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
11487                               tp->irq_cnt, rc);
11488                 tp->irq_cnt = rc;
11489                 tp->rxq_cnt = max(rc - 1, 1);
11490                 if (tp->txq_cnt)
11491                         tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
11492         }
11493
11494         for (i = 0; i < tp->irq_max; i++)
11495                 tp->napi[i].irq_vec = msix_ent[i].vector;
11496
11497         if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
11498                 pci_disable_msix(tp->pdev);
11499                 return false;
11500         }
11501
11502         if (tp->irq_cnt == 1)
11503                 return true;
11504
11505         tg3_flag_set(tp, ENABLE_RSS);
11506
11507         if (tp->txq_cnt > 1)
11508                 tg3_flag_set(tp, ENABLE_TSS);
11509
11510         netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
11511
11512         return true;
11513 }
11514
11515 static void tg3_ints_init(struct tg3 *tp)
11516 {
11517         if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
11518             !tg3_flag(tp, TAGGED_STATUS)) {
11519                 /* All MSI supporting chips should support tagged
11520                  * status.  Assert that this is the case.
11521                  */
11522                 netdev_warn(tp->dev,
11523                             "MSI without TAGGED_STATUS? Not using MSI\n");
11524                 goto defcfg;
11525         }
11526
11527         if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
11528                 tg3_flag_set(tp, USING_MSIX);
11529         else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
11530                 tg3_flag_set(tp, USING_MSI);
11531
11532         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11533                 u32 msi_mode = tr32(MSGINT_MODE);
11534                 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
11535                         msi_mode |= MSGINT_MODE_MULTIVEC_EN;
11536                 if (!tg3_flag(tp, 1SHOT_MSI))
11537                         msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
11538                 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
11539         }
11540 defcfg:
11541         if (!tg3_flag(tp, USING_MSIX)) {
11542                 tp->irq_cnt = 1;
11543                 tp->napi[0].irq_vec = tp->pdev->irq;
11544         }
11545
11546         if (tp->irq_cnt == 1) {
11547                 tp->txq_cnt = 1;
11548                 tp->rxq_cnt = 1;
11549                 netif_set_real_num_tx_queues(tp->dev, 1);
11550                 netif_set_real_num_rx_queues(tp->dev, 1);
11551         }
11552 }
11553
11554 static void tg3_ints_fini(struct tg3 *tp)
11555 {
11556         if (tg3_flag(tp, USING_MSIX))
11557                 pci_disable_msix(tp->pdev);
11558         else if (tg3_flag(tp, USING_MSI))
11559                 pci_disable_msi(tp->pdev);
11560         tg3_flag_clear(tp, USING_MSI);
11561         tg3_flag_clear(tp, USING_MSIX);
11562         tg3_flag_clear(tp, ENABLE_RSS);
11563         tg3_flag_clear(tp, ENABLE_TSS);
11564 }
11565
11566 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
11567                      bool init)
11568 {
11569         struct net_device *dev = tp->dev;
11570         int i, err;
11571
11572         /*
11573          * Setup interrupts first so we know how
11574          * many NAPI resources to allocate
11575          */
11576         tg3_ints_init(tp);
11577
11578         tg3_rss_check_indir_tbl(tp);
11579
11580         /* The placement of this call is tied
11581          * to the setup and use of Host TX descriptors.
11582          */
11583         err = tg3_alloc_consistent(tp);
11584         if (err)
11585                 goto out_ints_fini;
11586
11587         tg3_napi_init(tp);
11588
11589         tg3_napi_enable(tp);
11590
11591         for (i = 0; i < tp->irq_cnt; i++) {
11592                 err = tg3_request_irq(tp, i);
11593                 if (err) {
11594                         for (i--; i >= 0; i--) {
11595                                 struct tg3_napi *tnapi = &tp->napi[i];
11596
11597                                 free_irq(tnapi->irq_vec, tnapi);
11598                         }
11599                         goto out_napi_fini;
11600                 }
11601         }
11602
11603         tg3_full_lock(tp, 0);
11604
11605         if (init)
11606                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
11607
11608         err = tg3_init_hw(tp, reset_phy);
11609         if (err) {
11610                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11611                 tg3_free_rings(tp);
11612         }
11613
11614         tg3_full_unlock(tp);
11615
11616         if (err)
11617                 goto out_free_irq;
11618
11619         if (test_irq && tg3_flag(tp, USING_MSI)) {
11620                 err = tg3_test_msi(tp);
11621
11622                 if (err) {
11623                         tg3_full_lock(tp, 0);
11624                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11625                         tg3_free_rings(tp);
11626                         tg3_full_unlock(tp);
11627
11628                         goto out_napi_fini;
11629                 }
11630
11631                 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
11632                         u32 val = tr32(PCIE_TRANSACTION_CFG);
11633
11634                         tw32(PCIE_TRANSACTION_CFG,
11635                              val | PCIE_TRANS_CFG_1SHOT_MSI);
11636                 }
11637         }
11638
11639         tg3_phy_start(tp);
11640
11641         tg3_hwmon_open(tp);
11642
11643         tg3_full_lock(tp, 0);
11644
11645         tg3_timer_start(tp);
11646         tg3_flag_set(tp, INIT_COMPLETE);
11647         tg3_enable_ints(tp);
11648
11649         tg3_ptp_resume(tp);
11650
11651         tg3_full_unlock(tp);
11652
11653         netif_tx_start_all_queues(dev);
11654
11655         /*
11656          * Reset loopback feature if it was turned on while the device was down
11657          * make sure that it's installed properly now.
11658          */
11659         if (dev->features & NETIF_F_LOOPBACK)
11660                 tg3_set_loopback(dev, dev->features);
11661
11662         return 0;
11663
11664 out_free_irq:
11665         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11666                 struct tg3_napi *tnapi = &tp->napi[i];
11667                 free_irq(tnapi->irq_vec, tnapi);
11668         }
11669
11670 out_napi_fini:
11671         tg3_napi_disable(tp);
11672         tg3_napi_fini(tp);
11673         tg3_free_consistent(tp);
11674
11675 out_ints_fini:
11676         tg3_ints_fini(tp);
11677
11678         return err;
11679 }
11680
11681 static void tg3_stop(struct tg3 *tp)
11682 {
11683         int i;
11684
11685         tg3_reset_task_cancel(tp);
11686         tg3_netif_stop(tp);
11687
11688         tg3_timer_stop(tp);
11689
11690         tg3_hwmon_close(tp);
11691
11692         tg3_phy_stop(tp);
11693
11694         tg3_full_lock(tp, 1);
11695
11696         tg3_disable_ints(tp);
11697
11698         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11699         tg3_free_rings(tp);
11700         tg3_flag_clear(tp, INIT_COMPLETE);
11701
11702         tg3_full_unlock(tp);
11703
11704         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11705                 struct tg3_napi *tnapi = &tp->napi[i];
11706                 free_irq(tnapi->irq_vec, tnapi);
11707         }
11708
11709         tg3_ints_fini(tp);
11710
11711         tg3_napi_fini(tp);
11712
11713         tg3_free_consistent(tp);
11714 }
11715
11716 static int tg3_open(struct net_device *dev)
11717 {
11718         struct tg3 *tp = netdev_priv(dev);
11719         int err;
11720
11721         if (tp->pcierr_recovery) {
11722                 netdev_err(dev, "Failed to open device. PCI error recovery "
11723                            "in progress\n");
11724                 return -EAGAIN;
11725         }
11726
11727         if (tp->fw_needed) {
11728                 err = tg3_request_firmware(tp);
11729                 if (tg3_asic_rev(tp) == ASIC_REV_57766) {
11730                         if (err) {
11731                                 netdev_warn(tp->dev, "EEE capability disabled\n");
11732                                 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11733                         } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
11734                                 netdev_warn(tp->dev, "EEE capability restored\n");
11735                                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
11736                         }
11737                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
11738                         if (err)
11739                                 return err;
11740                 } else if (err) {
11741                         netdev_warn(tp->dev, "TSO capability disabled\n");
11742                         tg3_flag_clear(tp, TSO_CAPABLE);
11743                 } else if (!tg3_flag(tp, TSO_CAPABLE)) {
11744                         netdev_notice(tp->dev, "TSO capability restored\n");
11745                         tg3_flag_set(tp, TSO_CAPABLE);
11746                 }
11747         }
11748
11749         tg3_carrier_off(tp);
11750
11751         err = tg3_power_up(tp);
11752         if (err)
11753                 return err;
11754
11755         tg3_full_lock(tp, 0);
11756
11757         tg3_disable_ints(tp);
11758         tg3_flag_clear(tp, INIT_COMPLETE);
11759
11760         tg3_full_unlock(tp);
11761
11762         err = tg3_start(tp,
11763                         !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN),
11764                         true, true);
11765         if (err) {
11766                 tg3_frob_aux_power(tp, false);
11767                 pci_set_power_state(tp->pdev, PCI_D3hot);
11768         }
11769
11770         return err;
11771 }
11772
11773 static int tg3_close(struct net_device *dev)
11774 {
11775         struct tg3 *tp = netdev_priv(dev);
11776
11777         if (tp->pcierr_recovery) {
11778                 netdev_err(dev, "Failed to close device. PCI error recovery "
11779                            "in progress\n");
11780                 return -EAGAIN;
11781         }
11782
11783         tg3_stop(tp);
11784
11785         if (pci_device_is_present(tp->pdev)) {
11786                 tg3_power_down_prepare(tp);
11787
11788                 tg3_carrier_off(tp);
11789         }
11790         return 0;
11791 }
11792
11793 static inline u64 get_stat64(tg3_stat64_t *val)
11794 {
11795        return ((u64)val->high << 32) | ((u64)val->low);
11796 }
11797
11798 static u64 tg3_calc_crc_errors(struct tg3 *tp)
11799 {
11800         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11801
11802         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11803             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
11804              tg3_asic_rev(tp) == ASIC_REV_5701)) {
11805                 u32 val;
11806
11807                 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
11808                         tg3_writephy(tp, MII_TG3_TEST1,
11809                                      val | MII_TG3_TEST1_CRC_EN);
11810                         tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
11811                 } else
11812                         val = 0;
11813
11814                 tp->phy_crc_errors += val;
11815
11816                 return tp->phy_crc_errors;
11817         }
11818
11819         return get_stat64(&hw_stats->rx_fcs_errors);
11820 }
11821
11822 #define ESTAT_ADD(member) \
11823         estats->member =        old_estats->member + \
11824                                 get_stat64(&hw_stats->member)
11825
11826 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
11827 {
11828         struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
11829         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11830
11831         ESTAT_ADD(rx_octets);
11832         ESTAT_ADD(rx_fragments);
11833         ESTAT_ADD(rx_ucast_packets);
11834         ESTAT_ADD(rx_mcast_packets);
11835         ESTAT_ADD(rx_bcast_packets);
11836         ESTAT_ADD(rx_fcs_errors);
11837         ESTAT_ADD(rx_align_errors);
11838         ESTAT_ADD(rx_xon_pause_rcvd);
11839         ESTAT_ADD(rx_xoff_pause_rcvd);
11840         ESTAT_ADD(rx_mac_ctrl_rcvd);
11841         ESTAT_ADD(rx_xoff_entered);
11842         ESTAT_ADD(rx_frame_too_long_errors);
11843         ESTAT_ADD(rx_jabbers);
11844         ESTAT_ADD(rx_undersize_packets);
11845         ESTAT_ADD(rx_in_length_errors);
11846         ESTAT_ADD(rx_out_length_errors);
11847         ESTAT_ADD(rx_64_or_less_octet_packets);
11848         ESTAT_ADD(rx_65_to_127_octet_packets);
11849         ESTAT_ADD(rx_128_to_255_octet_packets);
11850         ESTAT_ADD(rx_256_to_511_octet_packets);
11851         ESTAT_ADD(rx_512_to_1023_octet_packets);
11852         ESTAT_ADD(rx_1024_to_1522_octet_packets);
11853         ESTAT_ADD(rx_1523_to_2047_octet_packets);
11854         ESTAT_ADD(rx_2048_to_4095_octet_packets);
11855         ESTAT_ADD(rx_4096_to_8191_octet_packets);
11856         ESTAT_ADD(rx_8192_to_9022_octet_packets);
11857
11858         ESTAT_ADD(tx_octets);
11859         ESTAT_ADD(tx_collisions);
11860         ESTAT_ADD(tx_xon_sent);
11861         ESTAT_ADD(tx_xoff_sent);
11862         ESTAT_ADD(tx_flow_control);
11863         ESTAT_ADD(tx_mac_errors);
11864         ESTAT_ADD(tx_single_collisions);
11865         ESTAT_ADD(tx_mult_collisions);
11866         ESTAT_ADD(tx_deferred);
11867         ESTAT_ADD(tx_excessive_collisions);
11868         ESTAT_ADD(tx_late_collisions);
11869         ESTAT_ADD(tx_collide_2times);
11870         ESTAT_ADD(tx_collide_3times);
11871         ESTAT_ADD(tx_collide_4times);
11872         ESTAT_ADD(tx_collide_5times);
11873         ESTAT_ADD(tx_collide_6times);
11874         ESTAT_ADD(tx_collide_7times);
11875         ESTAT_ADD(tx_collide_8times);
11876         ESTAT_ADD(tx_collide_9times);
11877         ESTAT_ADD(tx_collide_10times);
11878         ESTAT_ADD(tx_collide_11times);
11879         ESTAT_ADD(tx_collide_12times);
11880         ESTAT_ADD(tx_collide_13times);
11881         ESTAT_ADD(tx_collide_14times);
11882         ESTAT_ADD(tx_collide_15times);
11883         ESTAT_ADD(tx_ucast_packets);
11884         ESTAT_ADD(tx_mcast_packets);
11885         ESTAT_ADD(tx_bcast_packets);
11886         ESTAT_ADD(tx_carrier_sense_errors);
11887         ESTAT_ADD(tx_discards);
11888         ESTAT_ADD(tx_errors);
11889
11890         ESTAT_ADD(dma_writeq_full);
11891         ESTAT_ADD(dma_write_prioq_full);
11892         ESTAT_ADD(rxbds_empty);
11893         ESTAT_ADD(rx_discards);
11894         ESTAT_ADD(rx_errors);
11895         ESTAT_ADD(rx_threshold_hit);
11896
11897         ESTAT_ADD(dma_readq_full);
11898         ESTAT_ADD(dma_read_prioq_full);
11899         ESTAT_ADD(tx_comp_queue_full);
11900
11901         ESTAT_ADD(ring_set_send_prod_index);
11902         ESTAT_ADD(ring_status_update);
11903         ESTAT_ADD(nic_irqs);
11904         ESTAT_ADD(nic_avoided_irqs);
11905         ESTAT_ADD(nic_tx_threshold_hit);
11906
11907         ESTAT_ADD(mbuf_lwm_thresh_hit);
11908 }
11909
11910 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
11911 {
11912         struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
11913         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11914
11915         stats->rx_packets = old_stats->rx_packets +
11916                 get_stat64(&hw_stats->rx_ucast_packets) +
11917                 get_stat64(&hw_stats->rx_mcast_packets) +
11918                 get_stat64(&hw_stats->rx_bcast_packets);
11919
11920         stats->tx_packets = old_stats->tx_packets +
11921                 get_stat64(&hw_stats->tx_ucast_packets) +
11922                 get_stat64(&hw_stats->tx_mcast_packets) +
11923                 get_stat64(&hw_stats->tx_bcast_packets);
11924
11925         stats->rx_bytes = old_stats->rx_bytes +
11926                 get_stat64(&hw_stats->rx_octets);
11927         stats->tx_bytes = old_stats->tx_bytes +
11928                 get_stat64(&hw_stats->tx_octets);
11929
11930         stats->rx_errors = old_stats->rx_errors +
11931                 get_stat64(&hw_stats->rx_errors);
11932         stats->tx_errors = old_stats->tx_errors +
11933                 get_stat64(&hw_stats->tx_errors) +
11934                 get_stat64(&hw_stats->tx_mac_errors) +
11935                 get_stat64(&hw_stats->tx_carrier_sense_errors) +
11936                 get_stat64(&hw_stats->tx_discards);
11937
11938         stats->multicast = old_stats->multicast +
11939                 get_stat64(&hw_stats->rx_mcast_packets);
11940         stats->collisions = old_stats->collisions +
11941                 get_stat64(&hw_stats->tx_collisions);
11942
11943         stats->rx_length_errors = old_stats->rx_length_errors +
11944                 get_stat64(&hw_stats->rx_frame_too_long_errors) +
11945                 get_stat64(&hw_stats->rx_undersize_packets);
11946
11947         stats->rx_frame_errors = old_stats->rx_frame_errors +
11948                 get_stat64(&hw_stats->rx_align_errors);
11949         stats->tx_aborted_errors = old_stats->tx_aborted_errors +
11950                 get_stat64(&hw_stats->tx_discards);
11951         stats->tx_carrier_errors = old_stats->tx_carrier_errors +
11952                 get_stat64(&hw_stats->tx_carrier_sense_errors);
11953
11954         stats->rx_crc_errors = old_stats->rx_crc_errors +
11955                 tg3_calc_crc_errors(tp);
11956
11957         stats->rx_missed_errors = old_stats->rx_missed_errors +
11958                 get_stat64(&hw_stats->rx_discards);
11959
11960         stats->rx_dropped = tp->rx_dropped;
11961         stats->tx_dropped = tp->tx_dropped;
11962 }
11963
11964 static int tg3_get_regs_len(struct net_device *dev)
11965 {
11966         return TG3_REG_BLK_SIZE;
11967 }
11968
11969 static void tg3_get_regs(struct net_device *dev,
11970                 struct ethtool_regs *regs, void *_p)
11971 {
11972         struct tg3 *tp = netdev_priv(dev);
11973
11974         regs->version = 0;
11975
11976         memset(_p, 0, TG3_REG_BLK_SIZE);
11977
11978         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11979                 return;
11980
11981         tg3_full_lock(tp, 0);
11982
11983         tg3_dump_legacy_regs(tp, (u32 *)_p);
11984
11985         tg3_full_unlock(tp);
11986 }
11987
11988 static int tg3_get_eeprom_len(struct net_device *dev)
11989 {
11990         struct tg3 *tp = netdev_priv(dev);
11991
11992         return tp->nvram_size;
11993 }
11994
11995 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11996 {
11997         struct tg3 *tp = netdev_priv(dev);
11998         int ret, cpmu_restore = 0;
11999         u8  *pd;
12000         u32 i, offset, len, b_offset, b_count, cpmu_val = 0;
12001         __be32 val;
12002
12003         if (tg3_flag(tp, NO_NVRAM))
12004                 return -EINVAL;
12005
12006         offset = eeprom->offset;
12007         len = eeprom->len;
12008         eeprom->len = 0;
12009
12010         eeprom->magic = TG3_EEPROM_MAGIC;
12011
12012         /* Override clock, link aware and link idle modes */
12013         if (tg3_flag(tp, CPMU_PRESENT)) {
12014                 cpmu_val = tr32(TG3_CPMU_CTRL);
12015                 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE |
12016                                 CPMU_CTRL_LINK_IDLE_MODE)) {
12017                         tw32(TG3_CPMU_CTRL, cpmu_val &
12018                                             ~(CPMU_CTRL_LINK_AWARE_MODE |
12019                                              CPMU_CTRL_LINK_IDLE_MODE));
12020                         cpmu_restore = 1;
12021                 }
12022         }
12023         tg3_override_clk(tp);
12024
12025         if (offset & 3) {
12026                 /* adjustments to start on required 4 byte boundary */
12027                 b_offset = offset & 3;
12028                 b_count = 4 - b_offset;
12029                 if (b_count > len) {
12030                         /* i.e. offset=1 len=2 */
12031                         b_count = len;
12032                 }
12033                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
12034                 if (ret)
12035                         goto eeprom_done;
12036                 memcpy(data, ((char *)&val) + b_offset, b_count);
12037                 len -= b_count;
12038                 offset += b_count;
12039                 eeprom->len += b_count;
12040         }
12041
12042         /* read bytes up to the last 4 byte boundary */
12043         pd = &data[eeprom->len];
12044         for (i = 0; i < (len - (len & 3)); i += 4) {
12045                 ret = tg3_nvram_read_be32(tp, offset + i, &val);
12046                 if (ret) {
12047                         if (i)
12048                                 i -= 4;
12049                         eeprom->len += i;
12050                         goto eeprom_done;
12051                 }
12052                 memcpy(pd + i, &val, 4);
12053                 if (need_resched()) {
12054                         if (signal_pending(current)) {
12055                                 eeprom->len += i;
12056                                 ret = -EINTR;
12057                                 goto eeprom_done;
12058                         }
12059                         cond_resched();
12060                 }
12061         }
12062         eeprom->len += i;
12063
12064         if (len & 3) {
12065                 /* read last bytes not ending on 4 byte boundary */
12066                 pd = &data[eeprom->len];
12067                 b_count = len & 3;
12068                 b_offset = offset + len - b_count;
12069                 ret = tg3_nvram_read_be32(tp, b_offset, &val);
12070                 if (ret)
12071                         goto eeprom_done;
12072                 memcpy(pd, &val, b_count);
12073                 eeprom->len += b_count;
12074         }
12075         ret = 0;
12076
12077 eeprom_done:
12078         /* Restore clock, link aware and link idle modes */
12079         tg3_restore_clk(tp);
12080         if (cpmu_restore)
12081                 tw32(TG3_CPMU_CTRL, cpmu_val);
12082
12083         return ret;
12084 }
12085
12086 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
12087 {
12088         struct tg3 *tp = netdev_priv(dev);
12089         int ret;
12090         u32 offset, len, b_offset, odd_len;
12091         u8 *buf;
12092         __be32 start = 0, end;
12093
12094         if (tg3_flag(tp, NO_NVRAM) ||
12095             eeprom->magic != TG3_EEPROM_MAGIC)
12096                 return -EINVAL;
12097
12098         offset = eeprom->offset;
12099         len = eeprom->len;
12100
12101         if ((b_offset = (offset & 3))) {
12102                 /* adjustments to start on required 4 byte boundary */
12103                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
12104                 if (ret)
12105                         return ret;
12106                 len += b_offset;
12107                 offset &= ~3;
12108                 if (len < 4)
12109                         len = 4;
12110         }
12111
12112         odd_len = 0;
12113         if (len & 3) {
12114                 /* adjustments to end on required 4 byte boundary */
12115                 odd_len = 1;
12116                 len = (len + 3) & ~3;
12117                 ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
12118                 if (ret)
12119                         return ret;
12120         }
12121
12122         buf = data;
12123         if (b_offset || odd_len) {
12124                 buf = kmalloc(len, GFP_KERNEL);
12125                 if (!buf)
12126                         return -ENOMEM;
12127                 if (b_offset)
12128                         memcpy(buf, &start, 4);
12129                 if (odd_len)
12130                         memcpy(buf+len-4, &end, 4);
12131                 memcpy(buf + b_offset, data, eeprom->len);
12132         }
12133
12134         ret = tg3_nvram_write_block(tp, offset, len, buf);
12135
12136         if (buf != data)
12137                 kfree(buf);
12138
12139         return ret;
12140 }
12141
12142 static int tg3_get_link_ksettings(struct net_device *dev,
12143                                   struct ethtool_link_ksettings *cmd)
12144 {
12145         struct tg3 *tp = netdev_priv(dev);
12146         u32 supported, advertising;
12147
12148         if (tg3_flag(tp, USE_PHYLIB)) {
12149                 struct phy_device *phydev;
12150                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12151                         return -EAGAIN;
12152                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12153                 phy_ethtool_ksettings_get(phydev, cmd);
12154
12155                 return 0;
12156         }
12157
12158         supported = (SUPPORTED_Autoneg);
12159
12160         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12161                 supported |= (SUPPORTED_1000baseT_Half |
12162                               SUPPORTED_1000baseT_Full);
12163
12164         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12165                 supported |= (SUPPORTED_100baseT_Half |
12166                               SUPPORTED_100baseT_Full |
12167                               SUPPORTED_10baseT_Half |
12168                               SUPPORTED_10baseT_Full |
12169                               SUPPORTED_TP);
12170                 cmd->base.port = PORT_TP;
12171         } else {
12172                 supported |= SUPPORTED_FIBRE;
12173                 cmd->base.port = PORT_FIBRE;
12174         }
12175         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
12176                                                 supported);
12177
12178         advertising = tp->link_config.advertising;
12179         if (tg3_flag(tp, PAUSE_AUTONEG)) {
12180                 if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
12181                         if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12182                                 advertising |= ADVERTISED_Pause;
12183                         } else {
12184                                 advertising |= ADVERTISED_Pause |
12185                                         ADVERTISED_Asym_Pause;
12186                         }
12187                 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12188                         advertising |= ADVERTISED_Asym_Pause;
12189                 }
12190         }
12191         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
12192                                                 advertising);
12193
12194         if (netif_running(dev) && tp->link_up) {
12195                 cmd->base.speed = tp->link_config.active_speed;
12196                 cmd->base.duplex = tp->link_config.active_duplex;
12197                 ethtool_convert_legacy_u32_to_link_mode(
12198                         cmd->link_modes.lp_advertising,
12199                         tp->link_config.rmt_adv);
12200
12201                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12202                         if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
12203                                 cmd->base.eth_tp_mdix = ETH_TP_MDI_X;
12204                         else
12205                                 cmd->base.eth_tp_mdix = ETH_TP_MDI;
12206                 }
12207         } else {
12208                 cmd->base.speed = SPEED_UNKNOWN;
12209                 cmd->base.duplex = DUPLEX_UNKNOWN;
12210                 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
12211         }
12212         cmd->base.phy_address = tp->phy_addr;
12213         cmd->base.autoneg = tp->link_config.autoneg;
12214         return 0;
12215 }
12216
12217 static int tg3_set_link_ksettings(struct net_device *dev,
12218                                   const struct ethtool_link_ksettings *cmd)
12219 {
12220         struct tg3 *tp = netdev_priv(dev);
12221         u32 speed = cmd->base.speed;
12222         u32 advertising;
12223
12224         if (tg3_flag(tp, USE_PHYLIB)) {
12225                 struct phy_device *phydev;
12226                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12227                         return -EAGAIN;
12228                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12229                 return phy_ethtool_ksettings_set(phydev, cmd);
12230         }
12231
12232         if (cmd->base.autoneg != AUTONEG_ENABLE &&
12233             cmd->base.autoneg != AUTONEG_DISABLE)
12234                 return -EINVAL;
12235
12236         if (cmd->base.autoneg == AUTONEG_DISABLE &&
12237             cmd->base.duplex != DUPLEX_FULL &&
12238             cmd->base.duplex != DUPLEX_HALF)
12239                 return -EINVAL;
12240
12241         ethtool_convert_link_mode_to_legacy_u32(&advertising,
12242                                                 cmd->link_modes.advertising);
12243
12244         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12245                 u32 mask = ADVERTISED_Autoneg |
12246                            ADVERTISED_Pause |
12247                            ADVERTISED_Asym_Pause;
12248
12249                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12250                         mask |= ADVERTISED_1000baseT_Half |
12251                                 ADVERTISED_1000baseT_Full;
12252
12253                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
12254                         mask |= ADVERTISED_100baseT_Half |
12255                                 ADVERTISED_100baseT_Full |
12256                                 ADVERTISED_10baseT_Half |
12257                                 ADVERTISED_10baseT_Full |
12258                                 ADVERTISED_TP;
12259                 else
12260                         mask |= ADVERTISED_FIBRE;
12261
12262                 if (advertising & ~mask)
12263                         return -EINVAL;
12264
12265                 mask &= (ADVERTISED_1000baseT_Half |
12266                          ADVERTISED_1000baseT_Full |
12267                          ADVERTISED_100baseT_Half |
12268                          ADVERTISED_100baseT_Full |
12269                          ADVERTISED_10baseT_Half |
12270                          ADVERTISED_10baseT_Full);
12271
12272                 advertising &= mask;
12273         } else {
12274                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
12275                         if (speed != SPEED_1000)
12276                                 return -EINVAL;
12277
12278                         if (cmd->base.duplex != DUPLEX_FULL)
12279                                 return -EINVAL;
12280                 } else {
12281                         if (speed != SPEED_100 &&
12282                             speed != SPEED_10)
12283                                 return -EINVAL;
12284                 }
12285         }
12286
12287         tg3_full_lock(tp, 0);
12288
12289         tp->link_config.autoneg = cmd->base.autoneg;
12290         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12291                 tp->link_config.advertising = (advertising |
12292                                               ADVERTISED_Autoneg);
12293                 tp->link_config.speed = SPEED_UNKNOWN;
12294                 tp->link_config.duplex = DUPLEX_UNKNOWN;
12295         } else {
12296                 tp->link_config.advertising = 0;
12297                 tp->link_config.speed = speed;
12298                 tp->link_config.duplex = cmd->base.duplex;
12299         }
12300
12301         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12302
12303         tg3_warn_mgmt_link_flap(tp);
12304
12305         if (netif_running(dev))
12306                 tg3_setup_phy(tp, true);
12307
12308         tg3_full_unlock(tp);
12309
12310         return 0;
12311 }
12312
12313 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
12314 {
12315         struct tg3 *tp = netdev_priv(dev);
12316
12317         strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
12318         strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
12319         strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
12320         strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
12321 }
12322
12323 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12324 {
12325         struct tg3 *tp = netdev_priv(dev);
12326
12327         if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
12328                 wol->supported = WAKE_MAGIC;
12329         else
12330                 wol->supported = 0;
12331         wol->wolopts = 0;
12332         if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
12333                 wol->wolopts = WAKE_MAGIC;
12334         memset(&wol->sopass, 0, sizeof(wol->sopass));
12335 }
12336
12337 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12338 {
12339         struct tg3 *tp = netdev_priv(dev);
12340         struct device *dp = &tp->pdev->dev;
12341
12342         if (wol->wolopts & ~WAKE_MAGIC)
12343                 return -EINVAL;
12344         if ((wol->wolopts & WAKE_MAGIC) &&
12345             !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
12346                 return -EINVAL;
12347
12348         device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
12349
12350         if (device_may_wakeup(dp))
12351                 tg3_flag_set(tp, WOL_ENABLE);
12352         else
12353                 tg3_flag_clear(tp, WOL_ENABLE);
12354
12355         return 0;
12356 }
12357
12358 static u32 tg3_get_msglevel(struct net_device *dev)
12359 {
12360         struct tg3 *tp = netdev_priv(dev);
12361         return tp->msg_enable;
12362 }
12363
12364 static void tg3_set_msglevel(struct net_device *dev, u32 value)
12365 {
12366         struct tg3 *tp = netdev_priv(dev);
12367         tp->msg_enable = value;
12368 }
12369
12370 static int tg3_nway_reset(struct net_device *dev)
12371 {
12372         struct tg3 *tp = netdev_priv(dev);
12373         int r;
12374
12375         if (!netif_running(dev))
12376                 return -EAGAIN;
12377
12378         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12379                 return -EINVAL;
12380
12381         tg3_warn_mgmt_link_flap(tp);
12382
12383         if (tg3_flag(tp, USE_PHYLIB)) {
12384                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12385                         return -EAGAIN;
12386                 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
12387         } else {
12388                 u32 bmcr;
12389
12390                 spin_lock_bh(&tp->lock);
12391                 r = -EINVAL;
12392                 tg3_readphy(tp, MII_BMCR, &bmcr);
12393                 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
12394                     ((bmcr & BMCR_ANENABLE) ||
12395                      (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
12396                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
12397                                                    BMCR_ANENABLE);
12398                         r = 0;
12399                 }
12400                 spin_unlock_bh(&tp->lock);
12401         }
12402
12403         return r;
12404 }
12405
12406 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12407 {
12408         struct tg3 *tp = netdev_priv(dev);
12409
12410         ering->rx_max_pending = tp->rx_std_ring_mask;
12411         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12412                 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
12413         else
12414                 ering->rx_jumbo_max_pending = 0;
12415
12416         ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
12417
12418         ering->rx_pending = tp->rx_pending;
12419         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12420                 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
12421         else
12422                 ering->rx_jumbo_pending = 0;
12423
12424         ering->tx_pending = tp->napi[0].tx_pending;
12425 }
12426
12427 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12428 {
12429         struct tg3 *tp = netdev_priv(dev);
12430         int i, irq_sync = 0, err = 0;
12431         bool reset_phy = false;
12432
12433         if ((ering->rx_pending > tp->rx_std_ring_mask) ||
12434             (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
12435             (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
12436             (ering->tx_pending <= MAX_SKB_FRAGS) ||
12437             (tg3_flag(tp, TSO_BUG) &&
12438              (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
12439                 return -EINVAL;
12440
12441         if (netif_running(dev)) {
12442                 tg3_phy_stop(tp);
12443                 tg3_netif_stop(tp);
12444                 irq_sync = 1;
12445         }
12446
12447         tg3_full_lock(tp, irq_sync);
12448
12449         tp->rx_pending = ering->rx_pending;
12450
12451         if (tg3_flag(tp, MAX_RXPEND_64) &&
12452             tp->rx_pending > 63)
12453                 tp->rx_pending = 63;
12454
12455         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12456                 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
12457
12458         for (i = 0; i < tp->irq_max; i++)
12459                 tp->napi[i].tx_pending = ering->tx_pending;
12460
12461         if (netif_running(dev)) {
12462                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12463                 /* Reset PHY to avoid PHY lock up */
12464                 if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12465                     tg3_asic_rev(tp) == ASIC_REV_5719 ||
12466                     tg3_asic_rev(tp) == ASIC_REV_5720)
12467                         reset_phy = true;
12468
12469                 err = tg3_restart_hw(tp, reset_phy);
12470                 if (!err)
12471                         tg3_netif_start(tp);
12472         }
12473
12474         tg3_full_unlock(tp);
12475
12476         if (irq_sync && !err)
12477                 tg3_phy_start(tp);
12478
12479         return err;
12480 }
12481
12482 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12483 {
12484         struct tg3 *tp = netdev_priv(dev);
12485
12486         epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
12487
12488         if (tp->link_config.flowctrl & FLOW_CTRL_RX)
12489                 epause->rx_pause = 1;
12490         else
12491                 epause->rx_pause = 0;
12492
12493         if (tp->link_config.flowctrl & FLOW_CTRL_TX)
12494                 epause->tx_pause = 1;
12495         else
12496                 epause->tx_pause = 0;
12497 }
12498
12499 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12500 {
12501         struct tg3 *tp = netdev_priv(dev);
12502         int err = 0;
12503         bool reset_phy = false;
12504
12505         if (tp->link_config.autoneg == AUTONEG_ENABLE)
12506                 tg3_warn_mgmt_link_flap(tp);
12507
12508         if (tg3_flag(tp, USE_PHYLIB)) {
12509                 struct phy_device *phydev;
12510
12511                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12512
12513                 if (!phy_validate_pause(phydev, epause))
12514                         return -EINVAL;
12515
12516                 tp->link_config.flowctrl = 0;
12517                 phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause);
12518                 if (epause->rx_pause) {
12519                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12520
12521                         if (epause->tx_pause) {
12522                                 tp->link_config.flowctrl |= FLOW_CTRL_TX;
12523                         }
12524                 } else if (epause->tx_pause) {
12525                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12526                 }
12527
12528                 if (epause->autoneg)
12529                         tg3_flag_set(tp, PAUSE_AUTONEG);
12530                 else
12531                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12532
12533                 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
12534                         if (phydev->autoneg) {
12535                                 /* phy_set_asym_pause() will
12536                                  * renegotiate the link to inform our
12537                                  * link partner of our flow control
12538                                  * settings, even if the flow control
12539                                  * is forced.  Let tg3_adjust_link()
12540                                  * do the final flow control setup.
12541                                  */
12542                                 return 0;
12543                         }
12544
12545                         if (!epause->autoneg)
12546                                 tg3_setup_flow_control(tp, 0, 0);
12547                 }
12548         } else {
12549                 int irq_sync = 0;
12550
12551                 if (netif_running(dev)) {
12552                         tg3_netif_stop(tp);
12553                         irq_sync = 1;
12554                 }
12555
12556                 tg3_full_lock(tp, irq_sync);
12557
12558                 if (epause->autoneg)
12559                         tg3_flag_set(tp, PAUSE_AUTONEG);
12560                 else
12561                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12562                 if (epause->rx_pause)
12563                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12564                 else
12565                         tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
12566                 if (epause->tx_pause)
12567                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12568                 else
12569                         tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
12570
12571                 if (netif_running(dev)) {
12572                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12573                         /* Reset PHY to avoid PHY lock up */
12574                         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12575                             tg3_asic_rev(tp) == ASIC_REV_5719 ||
12576                             tg3_asic_rev(tp) == ASIC_REV_5720)
12577                                 reset_phy = true;
12578
12579                         err = tg3_restart_hw(tp, reset_phy);
12580                         if (!err)
12581                                 tg3_netif_start(tp);
12582                 }
12583
12584                 tg3_full_unlock(tp);
12585         }
12586
12587         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12588
12589         return err;
12590 }
12591
12592 static int tg3_get_sset_count(struct net_device *dev, int sset)
12593 {
12594         switch (sset) {
12595         case ETH_SS_TEST:
12596                 return TG3_NUM_TEST;
12597         case ETH_SS_STATS:
12598                 return TG3_NUM_STATS;
12599         default:
12600                 return -EOPNOTSUPP;
12601         }
12602 }
12603
12604 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
12605                          u32 *rules __always_unused)
12606 {
12607         struct tg3 *tp = netdev_priv(dev);
12608
12609         if (!tg3_flag(tp, SUPPORT_MSIX))
12610                 return -EOPNOTSUPP;
12611
12612         switch (info->cmd) {
12613         case ETHTOOL_GRXRINGS:
12614                 if (netif_running(tp->dev))
12615                         info->data = tp->rxq_cnt;
12616                 else {
12617                         info->data = num_online_cpus();
12618                         if (info->data > TG3_RSS_MAX_NUM_QS)
12619                                 info->data = TG3_RSS_MAX_NUM_QS;
12620                 }
12621
12622                 return 0;
12623
12624         default:
12625                 return -EOPNOTSUPP;
12626         }
12627 }
12628
12629 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
12630 {
12631         u32 size = 0;
12632         struct tg3 *tp = netdev_priv(dev);
12633
12634         if (tg3_flag(tp, SUPPORT_MSIX))
12635                 size = TG3_RSS_INDIR_TBL_SIZE;
12636
12637         return size;
12638 }
12639
12640 static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc)
12641 {
12642         struct tg3 *tp = netdev_priv(dev);
12643         int i;
12644
12645         if (hfunc)
12646                 *hfunc = ETH_RSS_HASH_TOP;
12647         if (!indir)
12648                 return 0;
12649
12650         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12651                 indir[i] = tp->rss_ind_tbl[i];
12652
12653         return 0;
12654 }
12655
12656 static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key,
12657                         const u8 hfunc)
12658 {
12659         struct tg3 *tp = netdev_priv(dev);
12660         size_t i;
12661
12662         /* We require at least one supported parameter to be changed and no
12663          * change in any of the unsupported parameters
12664          */
12665         if (key ||
12666             (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
12667                 return -EOPNOTSUPP;
12668
12669         if (!indir)
12670                 return 0;
12671
12672         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12673                 tp->rss_ind_tbl[i] = indir[i];
12674
12675         if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
12676                 return 0;
12677
12678         /* It is legal to write the indirection
12679          * table while the device is running.
12680          */
12681         tg3_full_lock(tp, 0);
12682         tg3_rss_write_indir_tbl(tp);
12683         tg3_full_unlock(tp);
12684
12685         return 0;
12686 }
12687
12688 static void tg3_get_channels(struct net_device *dev,
12689                              struct ethtool_channels *channel)
12690 {
12691         struct tg3 *tp = netdev_priv(dev);
12692         u32 deflt_qs = netif_get_num_default_rss_queues();
12693
12694         channel->max_rx = tp->rxq_max;
12695         channel->max_tx = tp->txq_max;
12696
12697         if (netif_running(dev)) {
12698                 channel->rx_count = tp->rxq_cnt;
12699                 channel->tx_count = tp->txq_cnt;
12700         } else {
12701                 if (tp->rxq_req)
12702                         channel->rx_count = tp->rxq_req;
12703                 else
12704                         channel->rx_count = min(deflt_qs, tp->rxq_max);
12705
12706                 if (tp->txq_req)
12707                         channel->tx_count = tp->txq_req;
12708                 else
12709                         channel->tx_count = min(deflt_qs, tp->txq_max);
12710         }
12711 }
12712
12713 static int tg3_set_channels(struct net_device *dev,
12714                             struct ethtool_channels *channel)
12715 {
12716         struct tg3 *tp = netdev_priv(dev);
12717
12718         if (!tg3_flag(tp, SUPPORT_MSIX))
12719                 return -EOPNOTSUPP;
12720
12721         if (channel->rx_count > tp->rxq_max ||
12722             channel->tx_count > tp->txq_max)
12723                 return -EINVAL;
12724
12725         tp->rxq_req = channel->rx_count;
12726         tp->txq_req = channel->tx_count;
12727
12728         if (!netif_running(dev))
12729                 return 0;
12730
12731         tg3_stop(tp);
12732
12733         tg3_carrier_off(tp);
12734
12735         tg3_start(tp, true, false, false);
12736
12737         return 0;
12738 }
12739
12740 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
12741 {
12742         switch (stringset) {
12743         case ETH_SS_STATS:
12744                 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
12745                 break;
12746         case ETH_SS_TEST:
12747                 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
12748                 break;
12749         default:
12750                 WARN_ON(1);     /* we need a WARN() */
12751                 break;
12752         }
12753 }
12754
12755 static int tg3_set_phys_id(struct net_device *dev,
12756                             enum ethtool_phys_id_state state)
12757 {
12758         struct tg3 *tp = netdev_priv(dev);
12759
12760         switch (state) {
12761         case ETHTOOL_ID_ACTIVE:
12762                 return 1;       /* cycle on/off once per second */
12763
12764         case ETHTOOL_ID_ON:
12765                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12766                      LED_CTRL_1000MBPS_ON |
12767                      LED_CTRL_100MBPS_ON |
12768                      LED_CTRL_10MBPS_ON |
12769                      LED_CTRL_TRAFFIC_OVERRIDE |
12770                      LED_CTRL_TRAFFIC_BLINK |
12771                      LED_CTRL_TRAFFIC_LED);
12772                 break;
12773
12774         case ETHTOOL_ID_OFF:
12775                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12776                      LED_CTRL_TRAFFIC_OVERRIDE);
12777                 break;
12778
12779         case ETHTOOL_ID_INACTIVE:
12780                 tw32(MAC_LED_CTRL, tp->led_ctrl);
12781                 break;
12782         }
12783
12784         return 0;
12785 }
12786
12787 static void tg3_get_ethtool_stats(struct net_device *dev,
12788                                    struct ethtool_stats *estats, u64 *tmp_stats)
12789 {
12790         struct tg3 *tp = netdev_priv(dev);
12791
12792         if (tp->hw_stats)
12793                 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
12794         else
12795                 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
12796 }
12797
12798 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
12799 {
12800         int i;
12801         __be32 *buf;
12802         u32 offset = 0, len = 0;
12803         u32 magic, val;
12804
12805         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
12806                 return NULL;
12807
12808         if (magic == TG3_EEPROM_MAGIC) {
12809                 for (offset = TG3_NVM_DIR_START;
12810                      offset < TG3_NVM_DIR_END;
12811                      offset += TG3_NVM_DIRENT_SIZE) {
12812                         if (tg3_nvram_read(tp, offset, &val))
12813                                 return NULL;
12814
12815                         if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
12816                             TG3_NVM_DIRTYPE_EXTVPD)
12817                                 break;
12818                 }
12819
12820                 if (offset != TG3_NVM_DIR_END) {
12821                         len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
12822                         if (tg3_nvram_read(tp, offset + 4, &offset))
12823                                 return NULL;
12824
12825                         offset = tg3_nvram_logical_addr(tp, offset);
12826                 }
12827         }
12828
12829         if (!offset || !len) {
12830                 offset = TG3_NVM_VPD_OFF;
12831                 len = TG3_NVM_VPD_LEN;
12832         }
12833
12834         buf = kmalloc(len, GFP_KERNEL);
12835         if (buf == NULL)
12836                 return NULL;
12837
12838         if (magic == TG3_EEPROM_MAGIC) {
12839                 for (i = 0; i < len; i += 4) {
12840                         /* The data is in little-endian format in NVRAM.
12841                          * Use the big-endian read routines to preserve
12842                          * the byte order as it exists in NVRAM.
12843                          */
12844                         if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
12845                                 goto error;
12846                 }
12847         } else {
12848                 u8 *ptr;
12849                 ssize_t cnt;
12850                 unsigned int pos = 0;
12851
12852                 ptr = (u8 *)&buf[0];
12853                 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
12854                         cnt = pci_read_vpd(tp->pdev, pos,
12855                                            len - pos, ptr);
12856                         if (cnt == -ETIMEDOUT || cnt == -EINTR)
12857                                 cnt = 0;
12858                         else if (cnt < 0)
12859                                 goto error;
12860                 }
12861                 if (pos != len)
12862                         goto error;
12863         }
12864
12865         *vpdlen = len;
12866
12867         return buf;
12868
12869 error:
12870         kfree(buf);
12871         return NULL;
12872 }
12873
12874 #define NVRAM_TEST_SIZE 0x100
12875 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE   0x14
12876 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE   0x18
12877 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE   0x1c
12878 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE   0x20
12879 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE   0x24
12880 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE   0x50
12881 #define NVRAM_SELFBOOT_HW_SIZE 0x20
12882 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
12883
12884 static int tg3_test_nvram(struct tg3 *tp)
12885 {
12886         u32 csum, magic, len;
12887         __be32 *buf;
12888         int i, j, k, err = 0, size;
12889
12890         if (tg3_flag(tp, NO_NVRAM))
12891                 return 0;
12892
12893         if (tg3_nvram_read(tp, 0, &magic) != 0)
12894                 return -EIO;
12895
12896         if (magic == TG3_EEPROM_MAGIC)
12897                 size = NVRAM_TEST_SIZE;
12898         else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
12899                 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
12900                     TG3_EEPROM_SB_FORMAT_1) {
12901                         switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
12902                         case TG3_EEPROM_SB_REVISION_0:
12903                                 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
12904                                 break;
12905                         case TG3_EEPROM_SB_REVISION_2:
12906                                 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
12907                                 break;
12908                         case TG3_EEPROM_SB_REVISION_3:
12909                                 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
12910                                 break;
12911                         case TG3_EEPROM_SB_REVISION_4:
12912                                 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
12913                                 break;
12914                         case TG3_EEPROM_SB_REVISION_5:
12915                                 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
12916                                 break;
12917                         case TG3_EEPROM_SB_REVISION_6:
12918                                 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
12919                                 break;
12920                         default:
12921                                 return -EIO;
12922                         }
12923                 } else
12924                         return 0;
12925         } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
12926                 size = NVRAM_SELFBOOT_HW_SIZE;
12927         else
12928                 return -EIO;
12929
12930         buf = kmalloc(size, GFP_KERNEL);
12931         if (buf == NULL)
12932                 return -ENOMEM;
12933
12934         err = -EIO;
12935         for (i = 0, j = 0; i < size; i += 4, j++) {
12936                 err = tg3_nvram_read_be32(tp, i, &buf[j]);
12937                 if (err)
12938                         break;
12939         }
12940         if (i < size)
12941                 goto out;
12942
12943         /* Selfboot format */
12944         magic = be32_to_cpu(buf[0]);
12945         if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
12946             TG3_EEPROM_MAGIC_FW) {
12947                 u8 *buf8 = (u8 *) buf, csum8 = 0;
12948
12949                 if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
12950                     TG3_EEPROM_SB_REVISION_2) {
12951                         /* For rev 2, the csum doesn't include the MBA. */
12952                         for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
12953                                 csum8 += buf8[i];
12954                         for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
12955                                 csum8 += buf8[i];
12956                 } else {
12957                         for (i = 0; i < size; i++)
12958                                 csum8 += buf8[i];
12959                 }
12960
12961                 if (csum8 == 0) {
12962                         err = 0;
12963                         goto out;
12964                 }
12965
12966                 err = -EIO;
12967                 goto out;
12968         }
12969
12970         if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
12971             TG3_EEPROM_MAGIC_HW) {
12972                 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
12973                 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
12974                 u8 *buf8 = (u8 *) buf;
12975
12976                 /* Separate the parity bits and the data bytes.  */
12977                 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
12978                         if ((i == 0) || (i == 8)) {
12979                                 int l;
12980                                 u8 msk;
12981
12982                                 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
12983                                         parity[k++] = buf8[i] & msk;
12984                                 i++;
12985                         } else if (i == 16) {
12986                                 int l;
12987                                 u8 msk;
12988
12989                                 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
12990                                         parity[k++] = buf8[i] & msk;
12991                                 i++;
12992
12993                                 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
12994                                         parity[k++] = buf8[i] & msk;
12995                                 i++;
12996                         }
12997                         data[j++] = buf8[i];
12998                 }
12999
13000                 err = -EIO;
13001                 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
13002                         u8 hw8 = hweight8(data[i]);
13003
13004                         if ((hw8 & 0x1) && parity[i])
13005                                 goto out;
13006                         else if (!(hw8 & 0x1) && !parity[i])
13007                                 goto out;
13008                 }
13009                 err = 0;
13010                 goto out;
13011         }
13012
13013         err = -EIO;
13014
13015         /* Bootstrap checksum at offset 0x10 */
13016         csum = calc_crc((unsigned char *) buf, 0x10);
13017         if (csum != le32_to_cpu(buf[0x10/4]))
13018                 goto out;
13019
13020         /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
13021         csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
13022         if (csum != le32_to_cpu(buf[0xfc/4]))
13023                 goto out;
13024
13025         kfree(buf);
13026
13027         buf = tg3_vpd_readblock(tp, &len);
13028         if (!buf)
13029                 return -ENOMEM;
13030
13031         i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
13032         if (i > 0) {
13033                 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
13034                 if (j < 0)
13035                         goto out;
13036
13037                 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
13038                         goto out;
13039
13040                 i += PCI_VPD_LRDT_TAG_SIZE;
13041                 j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
13042                                               PCI_VPD_RO_KEYWORD_CHKSUM);
13043                 if (j > 0) {
13044                         u8 csum8 = 0;
13045
13046                         j += PCI_VPD_INFO_FLD_HDR_SIZE;
13047
13048                         for (i = 0; i <= j; i++)
13049                                 csum8 += ((u8 *)buf)[i];
13050
13051                         if (csum8)
13052                                 goto out;
13053                 }
13054         }
13055
13056         err = 0;
13057
13058 out:
13059         kfree(buf);
13060         return err;
13061 }
13062
13063 #define TG3_SERDES_TIMEOUT_SEC  2
13064 #define TG3_COPPER_TIMEOUT_SEC  6
13065
13066 static int tg3_test_link(struct tg3 *tp)
13067 {
13068         int i, max;
13069
13070         if (!netif_running(tp->dev))
13071                 return -ENODEV;
13072
13073         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
13074                 max = TG3_SERDES_TIMEOUT_SEC;
13075         else
13076                 max = TG3_COPPER_TIMEOUT_SEC;
13077
13078         for (i = 0; i < max; i++) {
13079                 if (tp->link_up)
13080                         return 0;
13081
13082                 if (msleep_interruptible(1000))
13083                         break;
13084         }
13085
13086         return -EIO;
13087 }
13088
13089 /* Only test the commonly used registers */
13090 static int tg3_test_registers(struct tg3 *tp)
13091 {
13092         int i, is_5705, is_5750;
13093         u32 offset, read_mask, write_mask, val, save_val, read_val;
13094         static struct {
13095                 u16 offset;
13096                 u16 flags;
13097 #define TG3_FL_5705     0x1
13098 #define TG3_FL_NOT_5705 0x2
13099 #define TG3_FL_NOT_5788 0x4
13100 #define TG3_FL_NOT_5750 0x8
13101                 u32 read_mask;
13102                 u32 write_mask;
13103         } reg_tbl[] = {
13104                 /* MAC Control Registers */
13105                 { MAC_MODE, TG3_FL_NOT_5705,
13106                         0x00000000, 0x00ef6f8c },
13107                 { MAC_MODE, TG3_FL_5705,
13108                         0x00000000, 0x01ef6b8c },
13109                 { MAC_STATUS, TG3_FL_NOT_5705,
13110                         0x03800107, 0x00000000 },
13111                 { MAC_STATUS, TG3_FL_5705,
13112                         0x03800100, 0x00000000 },
13113                 { MAC_ADDR_0_HIGH, 0x0000,
13114                         0x00000000, 0x0000ffff },
13115                 { MAC_ADDR_0_LOW, 0x0000,
13116                         0x00000000, 0xffffffff },
13117                 { MAC_RX_MTU_SIZE, 0x0000,
13118                         0x00000000, 0x0000ffff },
13119                 { MAC_TX_MODE, 0x0000,
13120                         0x00000000, 0x00000070 },
13121                 { MAC_TX_LENGTHS, 0x0000,
13122                         0x00000000, 0x00003fff },
13123                 { MAC_RX_MODE, TG3_FL_NOT_5705,
13124                         0x00000000, 0x000007fc },
13125                 { MAC_RX_MODE, TG3_FL_5705,
13126                         0x00000000, 0x000007dc },
13127                 { MAC_HASH_REG_0, 0x0000,
13128                         0x00000000, 0xffffffff },
13129                 { MAC_HASH_REG_1, 0x0000,
13130                         0x00000000, 0xffffffff },
13131                 { MAC_HASH_REG_2, 0x0000,
13132                         0x00000000, 0xffffffff },
13133                 { MAC_HASH_REG_3, 0x0000,
13134                         0x00000000, 0xffffffff },
13135
13136                 /* Receive Data and Receive BD Initiator Control Registers. */
13137                 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
13138                         0x00000000, 0xffffffff },
13139                 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
13140                         0x00000000, 0xffffffff },
13141                 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
13142                         0x00000000, 0x00000003 },
13143                 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
13144                         0x00000000, 0xffffffff },
13145                 { RCVDBDI_STD_BD+0, 0x0000,
13146                         0x00000000, 0xffffffff },
13147                 { RCVDBDI_STD_BD+4, 0x0000,
13148                         0x00000000, 0xffffffff },
13149                 { RCVDBDI_STD_BD+8, 0x0000,
13150                         0x00000000, 0xffff0002 },
13151                 { RCVDBDI_STD_BD+0xc, 0x0000,
13152                         0x00000000, 0xffffffff },
13153
13154                 /* Receive BD Initiator Control Registers. */
13155                 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
13156                         0x00000000, 0xffffffff },
13157                 { RCVBDI_STD_THRESH, TG3_FL_5705,
13158                         0x00000000, 0x000003ff },
13159                 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
13160                         0x00000000, 0xffffffff },
13161
13162                 /* Host Coalescing Control Registers. */
13163                 { HOSTCC_MODE, TG3_FL_NOT_5705,
13164                         0x00000000, 0x00000004 },
13165                 { HOSTCC_MODE, TG3_FL_5705,
13166                         0x00000000, 0x000000f6 },
13167                 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
13168                         0x00000000, 0xffffffff },
13169                 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
13170                         0x00000000, 0x000003ff },
13171                 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
13172                         0x00000000, 0xffffffff },
13173                 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
13174                         0x00000000, 0x000003ff },
13175                 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
13176                         0x00000000, 0xffffffff },
13177                 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13178                         0x00000000, 0x000000ff },
13179                 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
13180                         0x00000000, 0xffffffff },
13181                 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13182                         0x00000000, 0x000000ff },
13183                 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
13184                         0x00000000, 0xffffffff },
13185                 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
13186                         0x00000000, 0xffffffff },
13187                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13188                         0x00000000, 0xffffffff },
13189                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13190                         0x00000000, 0x000000ff },
13191                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13192                         0x00000000, 0xffffffff },
13193                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13194                         0x00000000, 0x000000ff },
13195                 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
13196                         0x00000000, 0xffffffff },
13197                 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
13198                         0x00000000, 0xffffffff },
13199                 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
13200                         0x00000000, 0xffffffff },
13201                 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
13202                         0x00000000, 0xffffffff },
13203                 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
13204                         0x00000000, 0xffffffff },
13205                 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
13206                         0xffffffff, 0x00000000 },
13207                 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
13208                         0xffffffff, 0x00000000 },
13209
13210                 /* Buffer Manager Control Registers. */
13211                 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
13212                         0x00000000, 0x007fff80 },
13213                 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
13214                         0x00000000, 0x007fffff },
13215                 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
13216                         0x00000000, 0x0000003f },
13217                 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
13218                         0x00000000, 0x000001ff },
13219                 { BUFMGR_MB_HIGH_WATER, 0x0000,
13220                         0x00000000, 0x000001ff },
13221                 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
13222                         0xffffffff, 0x00000000 },
13223                 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
13224                         0xffffffff, 0x00000000 },
13225
13226                 /* Mailbox Registers */
13227                 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
13228                         0x00000000, 0x000001ff },
13229                 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
13230                         0x00000000, 0x000001ff },
13231                 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
13232                         0x00000000, 0x000007ff },
13233                 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
13234                         0x00000000, 0x000001ff },
13235
13236                 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
13237         };
13238
13239         is_5705 = is_5750 = 0;
13240         if (tg3_flag(tp, 5705_PLUS)) {
13241                 is_5705 = 1;
13242                 if (tg3_flag(tp, 5750_PLUS))
13243                         is_5750 = 1;
13244         }
13245
13246         for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
13247                 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
13248                         continue;
13249
13250                 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
13251                         continue;
13252
13253                 if (tg3_flag(tp, IS_5788) &&
13254                     (reg_tbl[i].flags & TG3_FL_NOT_5788))
13255                         continue;
13256
13257                 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
13258                         continue;
13259
13260                 offset = (u32) reg_tbl[i].offset;
13261                 read_mask = reg_tbl[i].read_mask;
13262                 write_mask = reg_tbl[i].write_mask;
13263
13264                 /* Save the original register content */
13265                 save_val = tr32(offset);
13266
13267                 /* Determine the read-only value. */
13268                 read_val = save_val & read_mask;
13269
13270                 /* Write zero to the register, then make sure the read-only bits
13271                  * are not changed and the read/write bits are all zeros.
13272                  */
13273                 tw32(offset, 0);
13274
13275                 val = tr32(offset);
13276
13277                 /* Test the read-only and read/write bits. */
13278                 if (((val & read_mask) != read_val) || (val & write_mask))
13279                         goto out;
13280
13281                 /* Write ones to all the bits defined by RdMask and WrMask, then
13282                  * make sure the read-only bits are not changed and the
13283                  * read/write bits are all ones.
13284                  */
13285                 tw32(offset, read_mask | write_mask);
13286
13287                 val = tr32(offset);
13288
13289                 /* Test the read-only bits. */
13290                 if ((val & read_mask) != read_val)
13291                         goto out;
13292
13293                 /* Test the read/write bits. */
13294                 if ((val & write_mask) != write_mask)
13295                         goto out;
13296
13297                 tw32(offset, save_val);
13298         }
13299
13300         return 0;
13301
13302 out:
13303         if (netif_msg_hw(tp))
13304                 netdev_err(tp->dev,
13305                            "Register test failed at offset %x\n", offset);
13306         tw32(offset, save_val);
13307         return -EIO;
13308 }
13309
13310 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
13311 {
13312         static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
13313         int i;
13314         u32 j;
13315
13316         for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
13317                 for (j = 0; j < len; j += 4) {
13318                         u32 val;
13319
13320                         tg3_write_mem(tp, offset + j, test_pattern[i]);
13321                         tg3_read_mem(tp, offset + j, &val);
13322                         if (val != test_pattern[i])
13323                                 return -EIO;
13324                 }
13325         }
13326         return 0;
13327 }
13328
13329 static int tg3_test_memory(struct tg3 *tp)
13330 {
13331         static struct mem_entry {
13332                 u32 offset;
13333                 u32 len;
13334         } mem_tbl_570x[] = {
13335                 { 0x00000000, 0x00b50},
13336                 { 0x00002000, 0x1c000},
13337                 { 0xffffffff, 0x00000}
13338         }, mem_tbl_5705[] = {
13339                 { 0x00000100, 0x0000c},
13340                 { 0x00000200, 0x00008},
13341                 { 0x00004000, 0x00800},
13342                 { 0x00006000, 0x01000},
13343                 { 0x00008000, 0x02000},
13344                 { 0x00010000, 0x0e000},
13345                 { 0xffffffff, 0x00000}
13346         }, mem_tbl_5755[] = {
13347                 { 0x00000200, 0x00008},
13348                 { 0x00004000, 0x00800},
13349                 { 0x00006000, 0x00800},
13350                 { 0x00008000, 0x02000},
13351                 { 0x00010000, 0x0c000},
13352                 { 0xffffffff, 0x00000}
13353         }, mem_tbl_5906[] = {
13354                 { 0x00000200, 0x00008},
13355                 { 0x00004000, 0x00400},
13356                 { 0x00006000, 0x00400},
13357                 { 0x00008000, 0x01000},
13358                 { 0x00010000, 0x01000},
13359                 { 0xffffffff, 0x00000}
13360         }, mem_tbl_5717[] = {
13361                 { 0x00000200, 0x00008},
13362                 { 0x00010000, 0x0a000},
13363                 { 0x00020000, 0x13c00},
13364                 { 0xffffffff, 0x00000}
13365         }, mem_tbl_57765[] = {
13366                 { 0x00000200, 0x00008},
13367                 { 0x00004000, 0x00800},
13368                 { 0x00006000, 0x09800},
13369                 { 0x00010000, 0x0a000},
13370                 { 0xffffffff, 0x00000}
13371         };
13372         struct mem_entry *mem_tbl;
13373         int err = 0;
13374         int i;
13375
13376         if (tg3_flag(tp, 5717_PLUS))
13377                 mem_tbl = mem_tbl_5717;
13378         else if (tg3_flag(tp, 57765_CLASS) ||
13379                  tg3_asic_rev(tp) == ASIC_REV_5762)
13380                 mem_tbl = mem_tbl_57765;
13381         else if (tg3_flag(tp, 5755_PLUS))
13382                 mem_tbl = mem_tbl_5755;
13383         else if (tg3_asic_rev(tp) == ASIC_REV_5906)
13384                 mem_tbl = mem_tbl_5906;
13385         else if (tg3_flag(tp, 5705_PLUS))
13386                 mem_tbl = mem_tbl_5705;
13387         else
13388                 mem_tbl = mem_tbl_570x;
13389
13390         for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
13391                 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
13392                 if (err)
13393                         break;
13394         }
13395
13396         return err;
13397 }
13398
13399 #define TG3_TSO_MSS             500
13400
13401 #define TG3_TSO_IP_HDR_LEN      20
13402 #define TG3_TSO_TCP_HDR_LEN     20
13403 #define TG3_TSO_TCP_OPT_LEN     12
13404
13405 static const u8 tg3_tso_header[] = {
13406 0x08, 0x00,
13407 0x45, 0x00, 0x00, 0x00,
13408 0x00, 0x00, 0x40, 0x00,
13409 0x40, 0x06, 0x00, 0x00,
13410 0x0a, 0x00, 0x00, 0x01,
13411 0x0a, 0x00, 0x00, 0x02,
13412 0x0d, 0x00, 0xe0, 0x00,
13413 0x00, 0x00, 0x01, 0x00,
13414 0x00, 0x00, 0x02, 0x00,
13415 0x80, 0x10, 0x10, 0x00,
13416 0x14, 0x09, 0x00, 0x00,
13417 0x01, 0x01, 0x08, 0x0a,
13418 0x11, 0x11, 0x11, 0x11,
13419 0x11, 0x11, 0x11, 0x11,
13420 };
13421
13422 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
13423 {
13424         u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
13425         u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
13426         u32 budget;
13427         struct sk_buff *skb;
13428         u8 *tx_data, *rx_data;
13429         dma_addr_t map;
13430         int num_pkts, tx_len, rx_len, i, err;
13431         struct tg3_rx_buffer_desc *desc;
13432         struct tg3_napi *tnapi, *rnapi;
13433         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
13434
13435         tnapi = &tp->napi[0];
13436         rnapi = &tp->napi[0];
13437         if (tp->irq_cnt > 1) {
13438                 if (tg3_flag(tp, ENABLE_RSS))
13439                         rnapi = &tp->napi[1];
13440                 if (tg3_flag(tp, ENABLE_TSS))
13441                         tnapi = &tp->napi[1];
13442         }
13443         coal_now = tnapi->coal_now | rnapi->coal_now;
13444
13445         err = -EIO;
13446
13447         tx_len = pktsz;
13448         skb = netdev_alloc_skb(tp->dev, tx_len);
13449         if (!skb)
13450                 return -ENOMEM;
13451
13452         tx_data = skb_put(skb, tx_len);
13453         memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN);
13454         memset(tx_data + ETH_ALEN, 0x0, 8);
13455
13456         tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
13457
13458         if (tso_loopback) {
13459                 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
13460
13461                 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
13462                               TG3_TSO_TCP_OPT_LEN;
13463
13464                 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
13465                        sizeof(tg3_tso_header));
13466                 mss = TG3_TSO_MSS;
13467
13468                 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
13469                 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
13470
13471                 /* Set the total length field in the IP header */
13472                 iph->tot_len = htons((u16)(mss + hdr_len));
13473
13474                 base_flags = (TXD_FLAG_CPU_PRE_DMA |
13475                               TXD_FLAG_CPU_POST_DMA);
13476
13477                 if (tg3_flag(tp, HW_TSO_1) ||
13478                     tg3_flag(tp, HW_TSO_2) ||
13479                     tg3_flag(tp, HW_TSO_3)) {
13480                         struct tcphdr *th;
13481                         val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
13482                         th = (struct tcphdr *)&tx_data[val];
13483                         th->check = 0;
13484                 } else
13485                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
13486
13487                 if (tg3_flag(tp, HW_TSO_3)) {
13488                         mss |= (hdr_len & 0xc) << 12;
13489                         if (hdr_len & 0x10)
13490                                 base_flags |= 0x00000010;
13491                         base_flags |= (hdr_len & 0x3e0) << 5;
13492                 } else if (tg3_flag(tp, HW_TSO_2))
13493                         mss |= hdr_len << 9;
13494                 else if (tg3_flag(tp, HW_TSO_1) ||
13495                          tg3_asic_rev(tp) == ASIC_REV_5705) {
13496                         mss |= (TG3_TSO_TCP_OPT_LEN << 9);
13497                 } else {
13498                         base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
13499                 }
13500
13501                 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
13502         } else {
13503                 num_pkts = 1;
13504                 data_off = ETH_HLEN;
13505
13506                 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
13507                     tx_len > VLAN_ETH_FRAME_LEN)
13508                         base_flags |= TXD_FLAG_JMB_PKT;
13509         }
13510
13511         for (i = data_off; i < tx_len; i++)
13512                 tx_data[i] = (u8) (i & 0xff);
13513
13514         map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
13515         if (pci_dma_mapping_error(tp->pdev, map)) {
13516                 dev_kfree_skb(skb);
13517                 return -EIO;
13518         }
13519
13520         val = tnapi->tx_prod;
13521         tnapi->tx_buffers[val].skb = skb;
13522         dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
13523
13524         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13525                rnapi->coal_now);
13526
13527         udelay(10);
13528
13529         rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
13530
13531         budget = tg3_tx_avail(tnapi);
13532         if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
13533                             base_flags | TXD_FLAG_END, mss, 0)) {
13534                 tnapi->tx_buffers[val].skb = NULL;
13535                 dev_kfree_skb(skb);
13536                 return -EIO;
13537         }
13538
13539         tnapi->tx_prod++;
13540
13541         /* Sync BD data before updating mailbox */
13542         wmb();
13543
13544         tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
13545         tr32_mailbox(tnapi->prodmbox);
13546
13547         udelay(10);
13548
13549         /* 350 usec to allow enough time on some 10/100 Mbps devices.  */
13550         for (i = 0; i < 35; i++) {
13551                 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13552                        coal_now);
13553
13554                 udelay(10);
13555
13556                 tx_idx = tnapi->hw_status->idx[0].tx_consumer;
13557                 rx_idx = rnapi->hw_status->idx[0].rx_producer;
13558                 if ((tx_idx == tnapi->tx_prod) &&
13559                     (rx_idx == (rx_start_idx + num_pkts)))
13560                         break;
13561         }
13562
13563         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
13564         dev_kfree_skb(skb);
13565
13566         if (tx_idx != tnapi->tx_prod)
13567                 goto out;
13568
13569         if (rx_idx != rx_start_idx + num_pkts)
13570                 goto out;
13571
13572         val = data_off;
13573         while (rx_idx != rx_start_idx) {
13574                 desc = &rnapi->rx_rcb[rx_start_idx++];
13575                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
13576                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
13577
13578                 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
13579                     (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
13580                         goto out;
13581
13582                 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
13583                          - ETH_FCS_LEN;
13584
13585                 if (!tso_loopback) {
13586                         if (rx_len != tx_len)
13587                                 goto out;
13588
13589                         if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
13590                                 if (opaque_key != RXD_OPAQUE_RING_STD)
13591                                         goto out;
13592                         } else {
13593                                 if (opaque_key != RXD_OPAQUE_RING_JUMBO)
13594                                         goto out;
13595                         }
13596                 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
13597                            (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
13598                             >> RXD_TCPCSUM_SHIFT != 0xffff) {
13599                         goto out;
13600                 }
13601
13602                 if (opaque_key == RXD_OPAQUE_RING_STD) {
13603                         rx_data = tpr->rx_std_buffers[desc_idx].data;
13604                         map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
13605                                              mapping);
13606                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
13607                         rx_data = tpr->rx_jmb_buffers[desc_idx].data;
13608                         map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
13609                                              mapping);
13610                 } else
13611                         goto out;
13612
13613                 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
13614                                             PCI_DMA_FROMDEVICE);
13615
13616                 rx_data += TG3_RX_OFFSET(tp);
13617                 for (i = data_off; i < rx_len; i++, val++) {
13618                         if (*(rx_data + i) != (u8) (val & 0xff))
13619                                 goto out;
13620                 }
13621         }
13622
13623         err = 0;
13624
13625         /* tg3_free_rings will unmap and free the rx_data */
13626 out:
13627         return err;
13628 }
13629
13630 #define TG3_STD_LOOPBACK_FAILED         1
13631 #define TG3_JMB_LOOPBACK_FAILED         2
13632 #define TG3_TSO_LOOPBACK_FAILED         4
13633 #define TG3_LOOPBACK_FAILED \
13634         (TG3_STD_LOOPBACK_FAILED | \
13635          TG3_JMB_LOOPBACK_FAILED | \
13636          TG3_TSO_LOOPBACK_FAILED)
13637
13638 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
13639 {
13640         int err = -EIO;
13641         u32 eee_cap;
13642         u32 jmb_pkt_sz = 9000;
13643
13644         if (tp->dma_limit)
13645                 jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
13646
13647         eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
13648         tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
13649
13650         if (!netif_running(tp->dev)) {
13651                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13652                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13653                 if (do_extlpbk)
13654                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13655                 goto done;
13656         }
13657
13658         err = tg3_reset_hw(tp, true);
13659         if (err) {
13660                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13661                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13662                 if (do_extlpbk)
13663                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13664                 goto done;
13665         }
13666
13667         if (tg3_flag(tp, ENABLE_RSS)) {
13668                 int i;
13669
13670                 /* Reroute all rx packets to the 1st queue */
13671                 for (i = MAC_RSS_INDIR_TBL_0;
13672                      i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
13673                         tw32(i, 0x0);
13674         }
13675
13676         /* HW errata - mac loopback fails in some cases on 5780.
13677          * Normal traffic and PHY loopback are not affected by
13678          * errata.  Also, the MAC loopback test is deprecated for
13679          * all newer ASIC revisions.
13680          */
13681         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
13682             !tg3_flag(tp, CPMU_PRESENT)) {
13683                 tg3_mac_loopback(tp, true);
13684
13685                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13686                         data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13687
13688                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13689                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13690                         data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13691
13692                 tg3_mac_loopback(tp, false);
13693         }
13694
13695         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
13696             !tg3_flag(tp, USE_PHYLIB)) {
13697                 int i;
13698
13699                 tg3_phy_lpbk_set(tp, 0, false);
13700
13701                 /* Wait for link */
13702                 for (i = 0; i < 100; i++) {
13703                         if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
13704                                 break;
13705                         mdelay(1);
13706                 }
13707
13708                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13709                         data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13710                 if (tg3_flag(tp, TSO_CAPABLE) &&
13711                     tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13712                         data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
13713                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13714                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13715                         data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13716
13717                 if (do_extlpbk) {
13718                         tg3_phy_lpbk_set(tp, 0, true);
13719
13720                         /* All link indications report up, but the hardware
13721                          * isn't really ready for about 20 msec.  Double it
13722                          * to be sure.
13723                          */
13724                         mdelay(40);
13725
13726                         if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13727                                 data[TG3_EXT_LOOPB_TEST] |=
13728                                                         TG3_STD_LOOPBACK_FAILED;
13729                         if (tg3_flag(tp, TSO_CAPABLE) &&
13730                             tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13731                                 data[TG3_EXT_LOOPB_TEST] |=
13732                                                         TG3_TSO_LOOPBACK_FAILED;
13733                         if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13734                             tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13735                                 data[TG3_EXT_LOOPB_TEST] |=
13736                                                         TG3_JMB_LOOPBACK_FAILED;
13737                 }
13738
13739                 /* Re-enable gphy autopowerdown. */
13740                 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
13741                         tg3_phy_toggle_apd(tp, true);
13742         }
13743
13744         err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
13745                data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
13746
13747 done:
13748         tp->phy_flags |= eee_cap;
13749
13750         return err;
13751 }
13752
13753 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
13754                           u64 *data)
13755 {
13756         struct tg3 *tp = netdev_priv(dev);
13757         bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
13758
13759         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
13760                 if (tg3_power_up(tp)) {
13761                         etest->flags |= ETH_TEST_FL_FAILED;
13762                         memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
13763                         return;
13764                 }
13765                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
13766         }
13767
13768         memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
13769
13770         if (tg3_test_nvram(tp) != 0) {
13771                 etest->flags |= ETH_TEST_FL_FAILED;
13772                 data[TG3_NVRAM_TEST] = 1;
13773         }
13774         if (!doextlpbk && tg3_test_link(tp)) {
13775                 etest->flags |= ETH_TEST_FL_FAILED;
13776                 data[TG3_LINK_TEST] = 1;
13777         }
13778         if (etest->flags & ETH_TEST_FL_OFFLINE) {
13779                 int err, err2 = 0, irq_sync = 0;
13780
13781                 if (netif_running(dev)) {
13782                         tg3_phy_stop(tp);
13783                         tg3_netif_stop(tp);
13784                         irq_sync = 1;
13785                 }
13786
13787                 tg3_full_lock(tp, irq_sync);
13788                 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
13789                 err = tg3_nvram_lock(tp);
13790                 tg3_halt_cpu(tp, RX_CPU_BASE);
13791                 if (!tg3_flag(tp, 5705_PLUS))
13792                         tg3_halt_cpu(tp, TX_CPU_BASE);
13793                 if (!err)
13794                         tg3_nvram_unlock(tp);
13795
13796                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
13797                         tg3_phy_reset(tp);
13798
13799                 if (tg3_test_registers(tp) != 0) {
13800                         etest->flags |= ETH_TEST_FL_FAILED;
13801                         data[TG3_REGISTER_TEST] = 1;
13802                 }
13803
13804                 if (tg3_test_memory(tp) != 0) {
13805                         etest->flags |= ETH_TEST_FL_FAILED;
13806                         data[TG3_MEMORY_TEST] = 1;
13807                 }
13808
13809                 if (doextlpbk)
13810                         etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
13811
13812                 if (tg3_test_loopback(tp, data, doextlpbk))
13813                         etest->flags |= ETH_TEST_FL_FAILED;
13814
13815                 tg3_full_unlock(tp);
13816
13817                 if (tg3_test_interrupt(tp) != 0) {
13818                         etest->flags |= ETH_TEST_FL_FAILED;
13819                         data[TG3_INTERRUPT_TEST] = 1;
13820                 }
13821
13822                 tg3_full_lock(tp, 0);
13823
13824                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13825                 if (netif_running(dev)) {
13826                         tg3_flag_set(tp, INIT_COMPLETE);
13827                         err2 = tg3_restart_hw(tp, true);
13828                         if (!err2)
13829                                 tg3_netif_start(tp);
13830                 }
13831
13832                 tg3_full_unlock(tp);
13833
13834                 if (irq_sync && !err2)
13835                         tg3_phy_start(tp);
13836         }
13837         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
13838                 tg3_power_down_prepare(tp);
13839
13840 }
13841
13842 static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
13843 {
13844         struct tg3 *tp = netdev_priv(dev);
13845         struct hwtstamp_config stmpconf;
13846
13847         if (!tg3_flag(tp, PTP_CAPABLE))
13848                 return -EOPNOTSUPP;
13849
13850         if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
13851                 return -EFAULT;
13852
13853         if (stmpconf.flags)
13854                 return -EINVAL;
13855
13856         if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
13857             stmpconf.tx_type != HWTSTAMP_TX_OFF)
13858                 return -ERANGE;
13859
13860         switch (stmpconf.rx_filter) {
13861         case HWTSTAMP_FILTER_NONE:
13862                 tp->rxptpctl = 0;
13863                 break;
13864         case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
13865                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13866                                TG3_RX_PTP_CTL_ALL_V1_EVENTS;
13867                 break;
13868         case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
13869                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13870                                TG3_RX_PTP_CTL_SYNC_EVNT;
13871                 break;
13872         case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
13873                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13874                                TG3_RX_PTP_CTL_DELAY_REQ;
13875                 break;
13876         case HWTSTAMP_FILTER_PTP_V2_EVENT:
13877                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13878                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13879                 break;
13880         case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
13881                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13882                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13883                 break;
13884         case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
13885                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13886                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13887                 break;
13888         case HWTSTAMP_FILTER_PTP_V2_SYNC:
13889                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13890                                TG3_RX_PTP_CTL_SYNC_EVNT;
13891                 break;
13892         case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
13893                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13894                                TG3_RX_PTP_CTL_SYNC_EVNT;
13895                 break;
13896         case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
13897                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13898                                TG3_RX_PTP_CTL_SYNC_EVNT;
13899                 break;
13900         case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
13901                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13902                                TG3_RX_PTP_CTL_DELAY_REQ;
13903                 break;
13904         case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
13905                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13906                                TG3_RX_PTP_CTL_DELAY_REQ;
13907                 break;
13908         case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
13909                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13910                                TG3_RX_PTP_CTL_DELAY_REQ;
13911                 break;
13912         default:
13913                 return -ERANGE;
13914         }
13915
13916         if (netif_running(dev) && tp->rxptpctl)
13917                 tw32(TG3_RX_PTP_CTL,
13918                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
13919
13920         if (stmpconf.tx_type == HWTSTAMP_TX_ON)
13921                 tg3_flag_set(tp, TX_TSTAMP_EN);
13922         else
13923                 tg3_flag_clear(tp, TX_TSTAMP_EN);
13924
13925         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13926                 -EFAULT : 0;
13927 }
13928
13929 static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
13930 {
13931         struct tg3 *tp = netdev_priv(dev);
13932         struct hwtstamp_config stmpconf;
13933
13934         if (!tg3_flag(tp, PTP_CAPABLE))
13935                 return -EOPNOTSUPP;
13936
13937         stmpconf.flags = 0;
13938         stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ?
13939                             HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF);
13940
13941         switch (tp->rxptpctl) {
13942         case 0:
13943                 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE;
13944                 break;
13945         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS:
13946                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
13947                 break;
13948         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13949                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
13950                 break;
13951         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13952                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
13953                 break;
13954         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13955                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
13956                 break;
13957         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13958                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
13959                 break;
13960         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13961                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
13962                 break;
13963         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13964                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
13965                 break;
13966         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13967                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC;
13968                 break;
13969         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13970                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
13971                 break;
13972         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13973                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
13974                 break;
13975         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13976                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ;
13977                 break;
13978         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13979                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
13980                 break;
13981         default:
13982                 WARN_ON_ONCE(1);
13983                 return -ERANGE;
13984         }
13985
13986         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13987                 -EFAULT : 0;
13988 }
13989
13990 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
13991 {
13992         struct mii_ioctl_data *data = if_mii(ifr);
13993         struct tg3 *tp = netdev_priv(dev);
13994         int err;
13995
13996         if (tg3_flag(tp, USE_PHYLIB)) {
13997                 struct phy_device *phydev;
13998                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
13999                         return -EAGAIN;
14000                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
14001                 return phy_mii_ioctl(phydev, ifr, cmd);
14002         }
14003
14004         switch (cmd) {
14005         case SIOCGMIIPHY:
14006                 data->phy_id = tp->phy_addr;
14007
14008                 /* fall through */
14009         case SIOCGMIIREG: {
14010                 u32 mii_regval;
14011
14012                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
14013                         break;                  /* We have no PHY */
14014
14015                 if (!netif_running(dev))
14016                         return -EAGAIN;
14017
14018                 spin_lock_bh(&tp->lock);
14019                 err = __tg3_readphy(tp, data->phy_id & 0x1f,
14020                                     data->reg_num & 0x1f, &mii_regval);
14021                 spin_unlock_bh(&tp->lock);
14022
14023                 data->val_out = mii_regval;
14024
14025                 return err;
14026         }
14027
14028         case SIOCSMIIREG:
14029                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
14030                         break;                  /* We have no PHY */
14031
14032                 if (!netif_running(dev))
14033                         return -EAGAIN;
14034
14035                 spin_lock_bh(&tp->lock);
14036                 err = __tg3_writephy(tp, data->phy_id & 0x1f,
14037                                      data->reg_num & 0x1f, data->val_in);
14038                 spin_unlock_bh(&tp->lock);
14039
14040                 return err;
14041
14042         case SIOCSHWTSTAMP:
14043                 return tg3_hwtstamp_set(dev, ifr);
14044
14045         case SIOCGHWTSTAMP:
14046                 return tg3_hwtstamp_get(dev, ifr);
14047
14048         default:
14049                 /* do nothing */
14050                 break;
14051         }
14052         return -EOPNOTSUPP;
14053 }
14054
14055 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
14056 {
14057         struct tg3 *tp = netdev_priv(dev);
14058
14059         memcpy(ec, &tp->coal, sizeof(*ec));
14060         return 0;
14061 }
14062
14063 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
14064 {
14065         struct tg3 *tp = netdev_priv(dev);
14066         u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
14067         u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
14068
14069         if (!tg3_flag(tp, 5705_PLUS)) {
14070                 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
14071                 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
14072                 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
14073                 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
14074         }
14075
14076         if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
14077             (!ec->rx_coalesce_usecs) ||
14078             (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
14079             (!ec->tx_coalesce_usecs) ||
14080             (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
14081             (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
14082             (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
14083             (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
14084             (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
14085             (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
14086             (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
14087             (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
14088                 return -EINVAL;
14089
14090         /* Only copy relevant parameters, ignore all others. */
14091         tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
14092         tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
14093         tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
14094         tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
14095         tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
14096         tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
14097         tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
14098         tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
14099         tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
14100
14101         if (netif_running(dev)) {
14102                 tg3_full_lock(tp, 0);
14103                 __tg3_set_coalesce(tp, &tp->coal);
14104                 tg3_full_unlock(tp);
14105         }
14106         return 0;
14107 }
14108
14109 static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata)
14110 {
14111         struct tg3 *tp = netdev_priv(dev);
14112
14113         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14114                 netdev_warn(tp->dev, "Board does not support EEE!\n");
14115                 return -EOPNOTSUPP;
14116         }
14117
14118         if (edata->advertised != tp->eee.advertised) {
14119                 netdev_warn(tp->dev,
14120                             "Direct manipulation of EEE advertisement is not supported\n");
14121                 return -EINVAL;
14122         }
14123
14124         if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) {
14125                 netdev_warn(tp->dev,
14126                             "Maximal Tx Lpi timer supported is %#x(u)\n",
14127                             TG3_CPMU_DBTMR1_LNKIDLE_MAX);
14128                 return -EINVAL;
14129         }
14130
14131         tp->eee = *edata;
14132
14133         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
14134         tg3_warn_mgmt_link_flap(tp);
14135
14136         if (netif_running(tp->dev)) {
14137                 tg3_full_lock(tp, 0);
14138                 tg3_setup_eee(tp);
14139                 tg3_phy_reset(tp);
14140                 tg3_full_unlock(tp);
14141         }
14142
14143         return 0;
14144 }
14145
14146 static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata)
14147 {
14148         struct tg3 *tp = netdev_priv(dev);
14149
14150         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14151                 netdev_warn(tp->dev,
14152                             "Board does not support EEE!\n");
14153                 return -EOPNOTSUPP;
14154         }
14155
14156         *edata = tp->eee;
14157         return 0;
14158 }
14159
14160 static const struct ethtool_ops tg3_ethtool_ops = {
14161         .get_drvinfo            = tg3_get_drvinfo,
14162         .get_regs_len           = tg3_get_regs_len,
14163         .get_regs               = tg3_get_regs,
14164         .get_wol                = tg3_get_wol,
14165         .set_wol                = tg3_set_wol,
14166         .get_msglevel           = tg3_get_msglevel,
14167         .set_msglevel           = tg3_set_msglevel,
14168         .nway_reset             = tg3_nway_reset,
14169         .get_link               = ethtool_op_get_link,
14170         .get_eeprom_len         = tg3_get_eeprom_len,
14171         .get_eeprom             = tg3_get_eeprom,
14172         .set_eeprom             = tg3_set_eeprom,
14173         .get_ringparam          = tg3_get_ringparam,
14174         .set_ringparam          = tg3_set_ringparam,
14175         .get_pauseparam         = tg3_get_pauseparam,
14176         .set_pauseparam         = tg3_set_pauseparam,
14177         .self_test              = tg3_self_test,
14178         .get_strings            = tg3_get_strings,
14179         .set_phys_id            = tg3_set_phys_id,
14180         .get_ethtool_stats      = tg3_get_ethtool_stats,
14181         .get_coalesce           = tg3_get_coalesce,
14182         .set_coalesce           = tg3_set_coalesce,
14183         .get_sset_count         = tg3_get_sset_count,
14184         .get_rxnfc              = tg3_get_rxnfc,
14185         .get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
14186         .get_rxfh               = tg3_get_rxfh,
14187         .set_rxfh               = tg3_set_rxfh,
14188         .get_channels           = tg3_get_channels,
14189         .set_channels           = tg3_set_channels,
14190         .get_ts_info            = tg3_get_ts_info,
14191         .get_eee                = tg3_get_eee,
14192         .set_eee                = tg3_set_eee,
14193         .get_link_ksettings     = tg3_get_link_ksettings,
14194         .set_link_ksettings     = tg3_set_link_ksettings,
14195 };
14196
14197 static void tg3_get_stats64(struct net_device *dev,
14198                             struct rtnl_link_stats64 *stats)
14199 {
14200         struct tg3 *tp = netdev_priv(dev);
14201
14202         spin_lock_bh(&tp->lock);
14203         if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) {
14204                 *stats = tp->net_stats_prev;
14205                 spin_unlock_bh(&tp->lock);
14206                 return;
14207         }
14208
14209         tg3_get_nstats(tp, stats);
14210         spin_unlock_bh(&tp->lock);
14211 }
14212
14213 static void tg3_set_rx_mode(struct net_device *dev)
14214 {
14215         struct tg3 *tp = netdev_priv(dev);
14216
14217         if (!netif_running(dev))
14218                 return;
14219
14220         tg3_full_lock(tp, 0);
14221         __tg3_set_rx_mode(dev);
14222         tg3_full_unlock(tp);
14223 }
14224
14225 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
14226                                int new_mtu)
14227 {
14228         dev->mtu = new_mtu;
14229
14230         if (new_mtu > ETH_DATA_LEN) {
14231                 if (tg3_flag(tp, 5780_CLASS)) {
14232                         netdev_update_features(dev);
14233                         tg3_flag_clear(tp, TSO_CAPABLE);
14234                 } else {
14235                         tg3_flag_set(tp, JUMBO_RING_ENABLE);
14236                 }
14237         } else {
14238                 if (tg3_flag(tp, 5780_CLASS)) {
14239                         tg3_flag_set(tp, TSO_CAPABLE);
14240                         netdev_update_features(dev);
14241                 }
14242                 tg3_flag_clear(tp, JUMBO_RING_ENABLE);
14243         }
14244 }
14245
14246 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
14247 {
14248         struct tg3 *tp = netdev_priv(dev);
14249         int err;
14250         bool reset_phy = false;
14251
14252         if (!netif_running(dev)) {
14253                 /* We'll just catch it later when the
14254                  * device is up'd.
14255                  */
14256                 tg3_set_mtu(dev, tp, new_mtu);
14257                 return 0;
14258         }
14259
14260         tg3_phy_stop(tp);
14261
14262         tg3_netif_stop(tp);
14263
14264         tg3_set_mtu(dev, tp, new_mtu);
14265
14266         tg3_full_lock(tp, 1);
14267
14268         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
14269
14270         /* Reset PHY, otherwise the read DMA engine will be in a mode that
14271          * breaks all requests to 256 bytes.
14272          */
14273         if (tg3_asic_rev(tp) == ASIC_REV_57766 ||
14274             tg3_asic_rev(tp) == ASIC_REV_5717 ||
14275             tg3_asic_rev(tp) == ASIC_REV_5719 ||
14276             tg3_asic_rev(tp) == ASIC_REV_5720)
14277                 reset_phy = true;
14278
14279         err = tg3_restart_hw(tp, reset_phy);
14280
14281         if (!err)
14282                 tg3_netif_start(tp);
14283
14284         tg3_full_unlock(tp);
14285
14286         if (!err)
14287                 tg3_phy_start(tp);
14288
14289         return err;
14290 }
14291
14292 static const struct net_device_ops tg3_netdev_ops = {
14293         .ndo_open               = tg3_open,
14294         .ndo_stop               = tg3_close,
14295         .ndo_start_xmit         = tg3_start_xmit,
14296         .ndo_get_stats64        = tg3_get_stats64,
14297         .ndo_validate_addr      = eth_validate_addr,
14298         .ndo_set_rx_mode        = tg3_set_rx_mode,
14299         .ndo_set_mac_address    = tg3_set_mac_addr,
14300         .ndo_do_ioctl           = tg3_ioctl,
14301         .ndo_tx_timeout         = tg3_tx_timeout,
14302         .ndo_change_mtu         = tg3_change_mtu,
14303         .ndo_fix_features       = tg3_fix_features,
14304         .ndo_set_features       = tg3_set_features,
14305 #ifdef CONFIG_NET_POLL_CONTROLLER
14306         .ndo_poll_controller    = tg3_poll_controller,
14307 #endif
14308 };
14309
14310 static void tg3_get_eeprom_size(struct tg3 *tp)
14311 {
14312         u32 cursize, val, magic;
14313
14314         tp->nvram_size = EEPROM_CHIP_SIZE;
14315
14316         if (tg3_nvram_read(tp, 0, &magic) != 0)
14317                 return;
14318
14319         if ((magic != TG3_EEPROM_MAGIC) &&
14320             ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
14321             ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
14322                 return;
14323
14324         /*
14325          * Size the chip by reading offsets at increasing powers of two.
14326          * When we encounter our validation signature, we know the addressing
14327          * has wrapped around, and thus have our chip size.
14328          */
14329         cursize = 0x10;
14330
14331         while (cursize < tp->nvram_size) {
14332                 if (tg3_nvram_read(tp, cursize, &val) != 0)
14333                         return;
14334
14335                 if (val == magic)
14336                         break;
14337
14338                 cursize <<= 1;
14339         }
14340
14341         tp->nvram_size = cursize;
14342 }
14343
14344 static void tg3_get_nvram_size(struct tg3 *tp)
14345 {
14346         u32 val;
14347
14348         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
14349                 return;
14350
14351         /* Selfboot format */
14352         if (val != TG3_EEPROM_MAGIC) {
14353                 tg3_get_eeprom_size(tp);
14354                 return;
14355         }
14356
14357         if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
14358                 if (val != 0) {
14359                         /* This is confusing.  We want to operate on the
14360                          * 16-bit value at offset 0xf2.  The tg3_nvram_read()
14361                          * call will read from NVRAM and byteswap the data
14362                          * according to the byteswapping settings for all
14363                          * other register accesses.  This ensures the data we
14364                          * want will always reside in the lower 16-bits.
14365                          * However, the data in NVRAM is in LE format, which
14366                          * means the data from the NVRAM read will always be
14367                          * opposite the endianness of the CPU.  The 16-bit
14368                          * byteswap then brings the data to CPU endianness.
14369                          */
14370                         tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
14371                         return;
14372                 }
14373         }
14374         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14375 }
14376
14377 static void tg3_get_nvram_info(struct tg3 *tp)
14378 {
14379         u32 nvcfg1;
14380
14381         nvcfg1 = tr32(NVRAM_CFG1);
14382         if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
14383                 tg3_flag_set(tp, FLASH);
14384         } else {
14385                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14386                 tw32(NVRAM_CFG1, nvcfg1);
14387         }
14388
14389         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
14390             tg3_flag(tp, 5780_CLASS)) {
14391                 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
14392                 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
14393                         tp->nvram_jedecnum = JEDEC_ATMEL;
14394                         tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14395                         tg3_flag_set(tp, NVRAM_BUFFERED);
14396                         break;
14397                 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
14398                         tp->nvram_jedecnum = JEDEC_ATMEL;
14399                         tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
14400                         break;
14401                 case FLASH_VENDOR_ATMEL_EEPROM:
14402                         tp->nvram_jedecnum = JEDEC_ATMEL;
14403                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14404                         tg3_flag_set(tp, NVRAM_BUFFERED);
14405                         break;
14406                 case FLASH_VENDOR_ST:
14407                         tp->nvram_jedecnum = JEDEC_ST;
14408                         tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
14409                         tg3_flag_set(tp, NVRAM_BUFFERED);
14410                         break;
14411                 case FLASH_VENDOR_SAIFUN:
14412                         tp->nvram_jedecnum = JEDEC_SAIFUN;
14413                         tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
14414                         break;
14415                 case FLASH_VENDOR_SST_SMALL:
14416                 case FLASH_VENDOR_SST_LARGE:
14417                         tp->nvram_jedecnum = JEDEC_SST;
14418                         tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
14419                         break;
14420                 }
14421         } else {
14422                 tp->nvram_jedecnum = JEDEC_ATMEL;
14423                 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14424                 tg3_flag_set(tp, NVRAM_BUFFERED);
14425         }
14426 }
14427
14428 static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
14429 {
14430         switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
14431         case FLASH_5752PAGE_SIZE_256:
14432                 tp->nvram_pagesize = 256;
14433                 break;
14434         case FLASH_5752PAGE_SIZE_512:
14435                 tp->nvram_pagesize = 512;
14436                 break;
14437         case FLASH_5752PAGE_SIZE_1K:
14438                 tp->nvram_pagesize = 1024;
14439                 break;
14440         case FLASH_5752PAGE_SIZE_2K:
14441                 tp->nvram_pagesize = 2048;
14442                 break;
14443         case FLASH_5752PAGE_SIZE_4K:
14444                 tp->nvram_pagesize = 4096;
14445                 break;
14446         case FLASH_5752PAGE_SIZE_264:
14447                 tp->nvram_pagesize = 264;
14448                 break;
14449         case FLASH_5752PAGE_SIZE_528:
14450                 tp->nvram_pagesize = 528;
14451                 break;
14452         }
14453 }
14454
14455 static void tg3_get_5752_nvram_info(struct tg3 *tp)
14456 {
14457         u32 nvcfg1;
14458
14459         nvcfg1 = tr32(NVRAM_CFG1);
14460
14461         /* NVRAM protection for TPM */
14462         if (nvcfg1 & (1 << 27))
14463                 tg3_flag_set(tp, PROTECTED_NVRAM);
14464
14465         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14466         case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
14467         case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
14468                 tp->nvram_jedecnum = JEDEC_ATMEL;
14469                 tg3_flag_set(tp, NVRAM_BUFFERED);
14470                 break;
14471         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14472                 tp->nvram_jedecnum = JEDEC_ATMEL;
14473                 tg3_flag_set(tp, NVRAM_BUFFERED);
14474                 tg3_flag_set(tp, FLASH);
14475                 break;
14476         case FLASH_5752VENDOR_ST_M45PE10:
14477         case FLASH_5752VENDOR_ST_M45PE20:
14478         case FLASH_5752VENDOR_ST_M45PE40:
14479                 tp->nvram_jedecnum = JEDEC_ST;
14480                 tg3_flag_set(tp, NVRAM_BUFFERED);
14481                 tg3_flag_set(tp, FLASH);
14482                 break;
14483         }
14484
14485         if (tg3_flag(tp, FLASH)) {
14486                 tg3_nvram_get_pagesize(tp, nvcfg1);
14487         } else {
14488                 /* For eeprom, set pagesize to maximum eeprom size */
14489                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14490
14491                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14492                 tw32(NVRAM_CFG1, nvcfg1);
14493         }
14494 }
14495
14496 static void tg3_get_5755_nvram_info(struct tg3 *tp)
14497 {
14498         u32 nvcfg1, protect = 0;
14499
14500         nvcfg1 = tr32(NVRAM_CFG1);
14501
14502         /* NVRAM protection for TPM */
14503         if (nvcfg1 & (1 << 27)) {
14504                 tg3_flag_set(tp, PROTECTED_NVRAM);
14505                 protect = 1;
14506         }
14507
14508         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14509         switch (nvcfg1) {
14510         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14511         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14512         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14513         case FLASH_5755VENDOR_ATMEL_FLASH_5:
14514                 tp->nvram_jedecnum = JEDEC_ATMEL;
14515                 tg3_flag_set(tp, NVRAM_BUFFERED);
14516                 tg3_flag_set(tp, FLASH);
14517                 tp->nvram_pagesize = 264;
14518                 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
14519                     nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
14520                         tp->nvram_size = (protect ? 0x3e200 :
14521                                           TG3_NVRAM_SIZE_512KB);
14522                 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
14523                         tp->nvram_size = (protect ? 0x1f200 :
14524                                           TG3_NVRAM_SIZE_256KB);
14525                 else
14526                         tp->nvram_size = (protect ? 0x1f200 :
14527                                           TG3_NVRAM_SIZE_128KB);
14528                 break;
14529         case FLASH_5752VENDOR_ST_M45PE10:
14530         case FLASH_5752VENDOR_ST_M45PE20:
14531         case FLASH_5752VENDOR_ST_M45PE40:
14532                 tp->nvram_jedecnum = JEDEC_ST;
14533                 tg3_flag_set(tp, NVRAM_BUFFERED);
14534                 tg3_flag_set(tp, FLASH);
14535                 tp->nvram_pagesize = 256;
14536                 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
14537                         tp->nvram_size = (protect ?
14538                                           TG3_NVRAM_SIZE_64KB :
14539                                           TG3_NVRAM_SIZE_128KB);
14540                 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
14541                         tp->nvram_size = (protect ?
14542                                           TG3_NVRAM_SIZE_64KB :
14543                                           TG3_NVRAM_SIZE_256KB);
14544                 else
14545                         tp->nvram_size = (protect ?
14546                                           TG3_NVRAM_SIZE_128KB :
14547                                           TG3_NVRAM_SIZE_512KB);
14548                 break;
14549         }
14550 }
14551
14552 static void tg3_get_5787_nvram_info(struct tg3 *tp)
14553 {
14554         u32 nvcfg1;
14555
14556         nvcfg1 = tr32(NVRAM_CFG1);
14557
14558         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14559         case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
14560         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14561         case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
14562         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14563                 tp->nvram_jedecnum = JEDEC_ATMEL;
14564                 tg3_flag_set(tp, NVRAM_BUFFERED);
14565                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14566
14567                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14568                 tw32(NVRAM_CFG1, nvcfg1);
14569                 break;
14570         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14571         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14572         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14573         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14574                 tp->nvram_jedecnum = JEDEC_ATMEL;
14575                 tg3_flag_set(tp, NVRAM_BUFFERED);
14576                 tg3_flag_set(tp, FLASH);
14577                 tp->nvram_pagesize = 264;
14578                 break;
14579         case FLASH_5752VENDOR_ST_M45PE10:
14580         case FLASH_5752VENDOR_ST_M45PE20:
14581         case FLASH_5752VENDOR_ST_M45PE40:
14582                 tp->nvram_jedecnum = JEDEC_ST;
14583                 tg3_flag_set(tp, NVRAM_BUFFERED);
14584                 tg3_flag_set(tp, FLASH);
14585                 tp->nvram_pagesize = 256;
14586                 break;
14587         }
14588 }
14589
14590 static void tg3_get_5761_nvram_info(struct tg3 *tp)
14591 {
14592         u32 nvcfg1, protect = 0;
14593
14594         nvcfg1 = tr32(NVRAM_CFG1);
14595
14596         /* NVRAM protection for TPM */
14597         if (nvcfg1 & (1 << 27)) {
14598                 tg3_flag_set(tp, PROTECTED_NVRAM);
14599                 protect = 1;
14600         }
14601
14602         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14603         switch (nvcfg1) {
14604         case FLASH_5761VENDOR_ATMEL_ADB021D:
14605         case FLASH_5761VENDOR_ATMEL_ADB041D:
14606         case FLASH_5761VENDOR_ATMEL_ADB081D:
14607         case FLASH_5761VENDOR_ATMEL_ADB161D:
14608         case FLASH_5761VENDOR_ATMEL_MDB021D:
14609         case FLASH_5761VENDOR_ATMEL_MDB041D:
14610         case FLASH_5761VENDOR_ATMEL_MDB081D:
14611         case FLASH_5761VENDOR_ATMEL_MDB161D:
14612                 tp->nvram_jedecnum = JEDEC_ATMEL;
14613                 tg3_flag_set(tp, NVRAM_BUFFERED);
14614                 tg3_flag_set(tp, FLASH);
14615                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14616                 tp->nvram_pagesize = 256;
14617                 break;
14618         case FLASH_5761VENDOR_ST_A_M45PE20:
14619         case FLASH_5761VENDOR_ST_A_M45PE40:
14620         case FLASH_5761VENDOR_ST_A_M45PE80:
14621         case FLASH_5761VENDOR_ST_A_M45PE16:
14622         case FLASH_5761VENDOR_ST_M_M45PE20:
14623         case FLASH_5761VENDOR_ST_M_M45PE40:
14624         case FLASH_5761VENDOR_ST_M_M45PE80:
14625         case FLASH_5761VENDOR_ST_M_M45PE16:
14626                 tp->nvram_jedecnum = JEDEC_ST;
14627                 tg3_flag_set(tp, NVRAM_BUFFERED);
14628                 tg3_flag_set(tp, FLASH);
14629                 tp->nvram_pagesize = 256;
14630                 break;
14631         }
14632
14633         if (protect) {
14634                 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
14635         } else {
14636                 switch (nvcfg1) {
14637                 case FLASH_5761VENDOR_ATMEL_ADB161D:
14638                 case FLASH_5761VENDOR_ATMEL_MDB161D:
14639                 case FLASH_5761VENDOR_ST_A_M45PE16:
14640                 case FLASH_5761VENDOR_ST_M_M45PE16:
14641                         tp->nvram_size = TG3_NVRAM_SIZE_2MB;
14642                         break;
14643                 case FLASH_5761VENDOR_ATMEL_ADB081D:
14644                 case FLASH_5761VENDOR_ATMEL_MDB081D:
14645                 case FLASH_5761VENDOR_ST_A_M45PE80:
14646                 case FLASH_5761VENDOR_ST_M_M45PE80:
14647                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14648                         break;
14649                 case FLASH_5761VENDOR_ATMEL_ADB041D:
14650                 case FLASH_5761VENDOR_ATMEL_MDB041D:
14651                 case FLASH_5761VENDOR_ST_A_M45PE40:
14652                 case FLASH_5761VENDOR_ST_M_M45PE40:
14653                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14654                         break;
14655                 case FLASH_5761VENDOR_ATMEL_ADB021D:
14656                 case FLASH_5761VENDOR_ATMEL_MDB021D:
14657                 case FLASH_5761VENDOR_ST_A_M45PE20:
14658                 case FLASH_5761VENDOR_ST_M_M45PE20:
14659                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14660                         break;
14661                 }
14662         }
14663 }
14664
14665 static void tg3_get_5906_nvram_info(struct tg3 *tp)
14666 {
14667         tp->nvram_jedecnum = JEDEC_ATMEL;
14668         tg3_flag_set(tp, NVRAM_BUFFERED);
14669         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14670 }
14671
14672 static void tg3_get_57780_nvram_info(struct tg3 *tp)
14673 {
14674         u32 nvcfg1;
14675
14676         nvcfg1 = tr32(NVRAM_CFG1);
14677
14678         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14679         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14680         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14681                 tp->nvram_jedecnum = JEDEC_ATMEL;
14682                 tg3_flag_set(tp, NVRAM_BUFFERED);
14683                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14684
14685                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14686                 tw32(NVRAM_CFG1, nvcfg1);
14687                 return;
14688         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14689         case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14690         case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14691         case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14692         case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14693         case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14694         case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14695                 tp->nvram_jedecnum = JEDEC_ATMEL;
14696                 tg3_flag_set(tp, NVRAM_BUFFERED);
14697                 tg3_flag_set(tp, FLASH);
14698
14699                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14700                 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14701                 case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14702                 case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14703                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14704                         break;
14705                 case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14706                 case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14707                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14708                         break;
14709                 case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14710                 case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14711                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14712                         break;
14713                 }
14714                 break;
14715         case FLASH_5752VENDOR_ST_M45PE10:
14716         case FLASH_5752VENDOR_ST_M45PE20:
14717         case FLASH_5752VENDOR_ST_M45PE40:
14718                 tp->nvram_jedecnum = JEDEC_ST;
14719                 tg3_flag_set(tp, NVRAM_BUFFERED);
14720                 tg3_flag_set(tp, FLASH);
14721
14722                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14723                 case FLASH_5752VENDOR_ST_M45PE10:
14724                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14725                         break;
14726                 case FLASH_5752VENDOR_ST_M45PE20:
14727                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14728                         break;
14729                 case FLASH_5752VENDOR_ST_M45PE40:
14730                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14731                         break;
14732                 }
14733                 break;
14734         default:
14735                 tg3_flag_set(tp, NO_NVRAM);
14736                 return;
14737         }
14738
14739         tg3_nvram_get_pagesize(tp, nvcfg1);
14740         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14741                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14742 }
14743
14744
14745 static void tg3_get_5717_nvram_info(struct tg3 *tp)
14746 {
14747         u32 nvcfg1;
14748
14749         nvcfg1 = tr32(NVRAM_CFG1);
14750
14751         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14752         case FLASH_5717VENDOR_ATMEL_EEPROM:
14753         case FLASH_5717VENDOR_MICRO_EEPROM:
14754                 tp->nvram_jedecnum = JEDEC_ATMEL;
14755                 tg3_flag_set(tp, NVRAM_BUFFERED);
14756                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14757
14758                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14759                 tw32(NVRAM_CFG1, nvcfg1);
14760                 return;
14761         case FLASH_5717VENDOR_ATMEL_MDB011D:
14762         case FLASH_5717VENDOR_ATMEL_ADB011B:
14763         case FLASH_5717VENDOR_ATMEL_ADB011D:
14764         case FLASH_5717VENDOR_ATMEL_MDB021D:
14765         case FLASH_5717VENDOR_ATMEL_ADB021B:
14766         case FLASH_5717VENDOR_ATMEL_ADB021D:
14767         case FLASH_5717VENDOR_ATMEL_45USPT:
14768                 tp->nvram_jedecnum = JEDEC_ATMEL;
14769                 tg3_flag_set(tp, NVRAM_BUFFERED);
14770                 tg3_flag_set(tp, FLASH);
14771
14772                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14773                 case FLASH_5717VENDOR_ATMEL_MDB021D:
14774                         /* Detect size with tg3_nvram_get_size() */
14775                         break;
14776                 case FLASH_5717VENDOR_ATMEL_ADB021B:
14777                 case FLASH_5717VENDOR_ATMEL_ADB021D:
14778                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14779                         break;
14780                 default:
14781                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14782                         break;
14783                 }
14784                 break;
14785         case FLASH_5717VENDOR_ST_M_M25PE10:
14786         case FLASH_5717VENDOR_ST_A_M25PE10:
14787         case FLASH_5717VENDOR_ST_M_M45PE10:
14788         case FLASH_5717VENDOR_ST_A_M45PE10:
14789         case FLASH_5717VENDOR_ST_M_M25PE20:
14790         case FLASH_5717VENDOR_ST_A_M25PE20:
14791         case FLASH_5717VENDOR_ST_M_M45PE20:
14792         case FLASH_5717VENDOR_ST_A_M45PE20:
14793         case FLASH_5717VENDOR_ST_25USPT:
14794         case FLASH_5717VENDOR_ST_45USPT:
14795                 tp->nvram_jedecnum = JEDEC_ST;
14796                 tg3_flag_set(tp, NVRAM_BUFFERED);
14797                 tg3_flag_set(tp, FLASH);
14798
14799                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14800                 case FLASH_5717VENDOR_ST_M_M25PE20:
14801                 case FLASH_5717VENDOR_ST_M_M45PE20:
14802                         /* Detect size with tg3_nvram_get_size() */
14803                         break;
14804                 case FLASH_5717VENDOR_ST_A_M25PE20:
14805                 case FLASH_5717VENDOR_ST_A_M45PE20:
14806                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14807                         break;
14808                 default:
14809                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14810                         break;
14811                 }
14812                 break;
14813         default:
14814                 tg3_flag_set(tp, NO_NVRAM);
14815                 return;
14816         }
14817
14818         tg3_nvram_get_pagesize(tp, nvcfg1);
14819         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14820                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14821 }
14822
14823 static void tg3_get_5720_nvram_info(struct tg3 *tp)
14824 {
14825         u32 nvcfg1, nvmpinstrp, nv_status;
14826
14827         nvcfg1 = tr32(NVRAM_CFG1);
14828         nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
14829
14830         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14831                 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) {
14832                         tg3_flag_set(tp, NO_NVRAM);
14833                         return;
14834                 }
14835
14836                 switch (nvmpinstrp) {
14837                 case FLASH_5762_MX25L_100:
14838                 case FLASH_5762_MX25L_200:
14839                 case FLASH_5762_MX25L_400:
14840                 case FLASH_5762_MX25L_800:
14841                 case FLASH_5762_MX25L_160_320:
14842                         tp->nvram_pagesize = 4096;
14843                         tp->nvram_jedecnum = JEDEC_MACRONIX;
14844                         tg3_flag_set(tp, NVRAM_BUFFERED);
14845                         tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14846                         tg3_flag_set(tp, FLASH);
14847                         nv_status = tr32(NVRAM_AUTOSENSE_STATUS);
14848                         tp->nvram_size =
14849                                 (1 << (nv_status >> AUTOSENSE_DEVID &
14850                                                 AUTOSENSE_DEVID_MASK)
14851                                         << AUTOSENSE_SIZE_IN_MB);
14852                         return;
14853
14854                 case FLASH_5762_EEPROM_HD:
14855                         nvmpinstrp = FLASH_5720_EEPROM_HD;
14856                         break;
14857                 case FLASH_5762_EEPROM_LD:
14858                         nvmpinstrp = FLASH_5720_EEPROM_LD;
14859                         break;
14860                 case FLASH_5720VENDOR_M_ST_M45PE20:
14861                         /* This pinstrap supports multiple sizes, so force it
14862                          * to read the actual size from location 0xf0.
14863                          */
14864                         nvmpinstrp = FLASH_5720VENDOR_ST_45USPT;
14865                         break;
14866                 }
14867         }
14868
14869         switch (nvmpinstrp) {
14870         case FLASH_5720_EEPROM_HD:
14871         case FLASH_5720_EEPROM_LD:
14872                 tp->nvram_jedecnum = JEDEC_ATMEL;
14873                 tg3_flag_set(tp, NVRAM_BUFFERED);
14874
14875                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14876                 tw32(NVRAM_CFG1, nvcfg1);
14877                 if (nvmpinstrp == FLASH_5720_EEPROM_HD)
14878                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14879                 else
14880                         tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
14881                 return;
14882         case FLASH_5720VENDOR_M_ATMEL_DB011D:
14883         case FLASH_5720VENDOR_A_ATMEL_DB011B:
14884         case FLASH_5720VENDOR_A_ATMEL_DB011D:
14885         case FLASH_5720VENDOR_M_ATMEL_DB021D:
14886         case FLASH_5720VENDOR_A_ATMEL_DB021B:
14887         case FLASH_5720VENDOR_A_ATMEL_DB021D:
14888         case FLASH_5720VENDOR_M_ATMEL_DB041D:
14889         case FLASH_5720VENDOR_A_ATMEL_DB041B:
14890         case FLASH_5720VENDOR_A_ATMEL_DB041D:
14891         case FLASH_5720VENDOR_M_ATMEL_DB081D:
14892         case FLASH_5720VENDOR_A_ATMEL_DB081D:
14893         case FLASH_5720VENDOR_ATMEL_45USPT:
14894                 tp->nvram_jedecnum = JEDEC_ATMEL;
14895                 tg3_flag_set(tp, NVRAM_BUFFERED);
14896                 tg3_flag_set(tp, FLASH);
14897
14898                 switch (nvmpinstrp) {
14899                 case FLASH_5720VENDOR_M_ATMEL_DB021D:
14900                 case FLASH_5720VENDOR_A_ATMEL_DB021B:
14901                 case FLASH_5720VENDOR_A_ATMEL_DB021D:
14902                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14903                         break;
14904                 case FLASH_5720VENDOR_M_ATMEL_DB041D:
14905                 case FLASH_5720VENDOR_A_ATMEL_DB041B:
14906                 case FLASH_5720VENDOR_A_ATMEL_DB041D:
14907                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14908                         break;
14909                 case FLASH_5720VENDOR_M_ATMEL_DB081D:
14910                 case FLASH_5720VENDOR_A_ATMEL_DB081D:
14911                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14912                         break;
14913                 default:
14914                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14915                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14916                         break;
14917                 }
14918                 break;
14919         case FLASH_5720VENDOR_M_ST_M25PE10:
14920         case FLASH_5720VENDOR_M_ST_M45PE10:
14921         case FLASH_5720VENDOR_A_ST_M25PE10:
14922         case FLASH_5720VENDOR_A_ST_M45PE10:
14923         case FLASH_5720VENDOR_M_ST_M25PE20:
14924         case FLASH_5720VENDOR_M_ST_M45PE20:
14925         case FLASH_5720VENDOR_A_ST_M25PE20:
14926         case FLASH_5720VENDOR_A_ST_M45PE20:
14927         case FLASH_5720VENDOR_M_ST_M25PE40:
14928         case FLASH_5720VENDOR_M_ST_M45PE40:
14929         case FLASH_5720VENDOR_A_ST_M25PE40:
14930         case FLASH_5720VENDOR_A_ST_M45PE40:
14931         case FLASH_5720VENDOR_M_ST_M25PE80:
14932         case FLASH_5720VENDOR_M_ST_M45PE80:
14933         case FLASH_5720VENDOR_A_ST_M25PE80:
14934         case FLASH_5720VENDOR_A_ST_M45PE80:
14935         case FLASH_5720VENDOR_ST_25USPT:
14936         case FLASH_5720VENDOR_ST_45USPT:
14937                 tp->nvram_jedecnum = JEDEC_ST;
14938                 tg3_flag_set(tp, NVRAM_BUFFERED);
14939                 tg3_flag_set(tp, FLASH);
14940
14941                 switch (nvmpinstrp) {
14942                 case FLASH_5720VENDOR_M_ST_M25PE20:
14943                 case FLASH_5720VENDOR_M_ST_M45PE20:
14944                 case FLASH_5720VENDOR_A_ST_M25PE20:
14945                 case FLASH_5720VENDOR_A_ST_M45PE20:
14946                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14947                         break;
14948                 case FLASH_5720VENDOR_M_ST_M25PE40:
14949                 case FLASH_5720VENDOR_M_ST_M45PE40:
14950                 case FLASH_5720VENDOR_A_ST_M25PE40:
14951                 case FLASH_5720VENDOR_A_ST_M45PE40:
14952                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14953                         break;
14954                 case FLASH_5720VENDOR_M_ST_M25PE80:
14955                 case FLASH_5720VENDOR_M_ST_M45PE80:
14956                 case FLASH_5720VENDOR_A_ST_M25PE80:
14957                 case FLASH_5720VENDOR_A_ST_M45PE80:
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         default:
14967                 tg3_flag_set(tp, NO_NVRAM);
14968                 return;
14969         }
14970
14971         tg3_nvram_get_pagesize(tp, nvcfg1);
14972         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14973                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14974
14975         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14976                 u32 val;
14977
14978                 if (tg3_nvram_read(tp, 0, &val))
14979                         return;
14980
14981                 if (val != TG3_EEPROM_MAGIC &&
14982                     (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW)
14983                         tg3_flag_set(tp, NO_NVRAM);
14984         }
14985 }
14986
14987 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
14988 static void tg3_nvram_init(struct tg3 *tp)
14989 {
14990         if (tg3_flag(tp, IS_SSB_CORE)) {
14991                 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
14992                 tg3_flag_clear(tp, NVRAM);
14993                 tg3_flag_clear(tp, NVRAM_BUFFERED);
14994                 tg3_flag_set(tp, NO_NVRAM);
14995                 return;
14996         }
14997
14998         tw32_f(GRC_EEPROM_ADDR,
14999              (EEPROM_ADDR_FSM_RESET |
15000               (EEPROM_DEFAULT_CLOCK_PERIOD <<
15001                EEPROM_ADDR_CLKPERD_SHIFT)));
15002
15003         msleep(1);
15004
15005         /* Enable seeprom accesses. */
15006         tw32_f(GRC_LOCAL_CTRL,
15007              tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
15008         udelay(100);
15009
15010         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15011             tg3_asic_rev(tp) != ASIC_REV_5701) {
15012                 tg3_flag_set(tp, NVRAM);
15013
15014                 if (tg3_nvram_lock(tp)) {
15015                         netdev_warn(tp->dev,
15016                                     "Cannot get nvram lock, %s failed\n",
15017                                     __func__);
15018                         return;
15019                 }
15020                 tg3_enable_nvram_access(tp);
15021
15022                 tp->nvram_size = 0;
15023
15024                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
15025                         tg3_get_5752_nvram_info(tp);
15026                 else if (tg3_asic_rev(tp) == ASIC_REV_5755)
15027                         tg3_get_5755_nvram_info(tp);
15028                 else if (tg3_asic_rev(tp) == ASIC_REV_5787 ||
15029                          tg3_asic_rev(tp) == ASIC_REV_5784 ||
15030                          tg3_asic_rev(tp) == ASIC_REV_5785)
15031                         tg3_get_5787_nvram_info(tp);
15032                 else if (tg3_asic_rev(tp) == ASIC_REV_5761)
15033                         tg3_get_5761_nvram_info(tp);
15034                 else if (tg3_asic_rev(tp) == ASIC_REV_5906)
15035                         tg3_get_5906_nvram_info(tp);
15036                 else if (tg3_asic_rev(tp) == ASIC_REV_57780 ||
15037                          tg3_flag(tp, 57765_CLASS))
15038                         tg3_get_57780_nvram_info(tp);
15039                 else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15040                          tg3_asic_rev(tp) == ASIC_REV_5719)
15041                         tg3_get_5717_nvram_info(tp);
15042                 else if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
15043                          tg3_asic_rev(tp) == ASIC_REV_5762)
15044                         tg3_get_5720_nvram_info(tp);
15045                 else
15046                         tg3_get_nvram_info(tp);
15047
15048                 if (tp->nvram_size == 0)
15049                         tg3_get_nvram_size(tp);
15050
15051                 tg3_disable_nvram_access(tp);
15052                 tg3_nvram_unlock(tp);
15053
15054         } else {
15055                 tg3_flag_clear(tp, NVRAM);
15056                 tg3_flag_clear(tp, NVRAM_BUFFERED);
15057
15058                 tg3_get_eeprom_size(tp);
15059         }
15060 }
15061
15062 struct subsys_tbl_ent {
15063         u16 subsys_vendor, subsys_devid;
15064         u32 phy_id;
15065 };
15066
15067 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
15068         /* Broadcom boards. */
15069         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15070           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
15071         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15072           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
15073         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15074           TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
15075         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15076           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
15077         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15078           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
15079         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15080           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
15081         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15082           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
15083         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15084           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
15085         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15086           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
15087         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15088           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
15089         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15090           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
15091
15092         /* 3com boards. */
15093         { TG3PCI_SUBVENDOR_ID_3COM,
15094           TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
15095         { TG3PCI_SUBVENDOR_ID_3COM,
15096           TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
15097         { TG3PCI_SUBVENDOR_ID_3COM,
15098           TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
15099         { TG3PCI_SUBVENDOR_ID_3COM,
15100           TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
15101         { TG3PCI_SUBVENDOR_ID_3COM,
15102           TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
15103
15104         /* DELL boards. */
15105         { TG3PCI_SUBVENDOR_ID_DELL,
15106           TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
15107         { TG3PCI_SUBVENDOR_ID_DELL,
15108           TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
15109         { TG3PCI_SUBVENDOR_ID_DELL,
15110           TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
15111         { TG3PCI_SUBVENDOR_ID_DELL,
15112           TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
15113
15114         /* Compaq boards. */
15115         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15116           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
15117         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15118           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
15119         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15120           TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
15121         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15122           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
15123         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15124           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
15125
15126         /* IBM boards. */
15127         { TG3PCI_SUBVENDOR_ID_IBM,
15128           TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
15129 };
15130
15131 static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
15132 {
15133         int i;
15134
15135         for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
15136                 if ((subsys_id_to_phy_id[i].subsys_vendor ==
15137                      tp->pdev->subsystem_vendor) &&
15138                     (subsys_id_to_phy_id[i].subsys_devid ==
15139                      tp->pdev->subsystem_device))
15140                         return &subsys_id_to_phy_id[i];
15141         }
15142         return NULL;
15143 }
15144
15145 static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
15146 {
15147         u32 val;
15148
15149         tp->phy_id = TG3_PHY_ID_INVALID;
15150         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15151
15152         /* Assume an onboard device and WOL capable by default.  */
15153         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15154         tg3_flag_set(tp, WOL_CAP);
15155
15156         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15157                 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
15158                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15159                         tg3_flag_set(tp, IS_NIC);
15160                 }
15161                 val = tr32(VCPU_CFGSHDW);
15162                 if (val & VCPU_CFGSHDW_ASPM_DBNC)
15163                         tg3_flag_set(tp, ASPM_WORKAROUND);
15164                 if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
15165                     (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
15166                         tg3_flag_set(tp, WOL_ENABLE);
15167                         device_set_wakeup_enable(&tp->pdev->dev, true);
15168                 }
15169                 goto done;
15170         }
15171
15172         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
15173         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
15174                 u32 nic_cfg, led_cfg;
15175                 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0;
15176                 u32 nic_phy_id, ver, eeprom_phy_id;
15177                 int eeprom_phy_serdes = 0;
15178
15179                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
15180                 tp->nic_sram_data_cfg = nic_cfg;
15181
15182                 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
15183                 ver >>= NIC_SRAM_DATA_VER_SHIFT;
15184                 if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15185                     tg3_asic_rev(tp) != ASIC_REV_5701 &&
15186                     tg3_asic_rev(tp) != ASIC_REV_5703 &&
15187                     (ver > 0) && (ver < 0x100))
15188                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
15189
15190                 if (tg3_asic_rev(tp) == ASIC_REV_5785)
15191                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
15192
15193                 if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15194                     tg3_asic_rev(tp) == ASIC_REV_5719 ||
15195                     tg3_asic_rev(tp) == ASIC_REV_5720)
15196                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5);
15197
15198                 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
15199                     NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
15200                         eeprom_phy_serdes = 1;
15201
15202                 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
15203                 if (nic_phy_id != 0) {
15204                         u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
15205                         u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
15206
15207                         eeprom_phy_id  = (id1 >> 16) << 10;
15208                         eeprom_phy_id |= (id2 & 0xfc00) << 16;
15209                         eeprom_phy_id |= (id2 & 0x03ff) <<  0;
15210                 } else
15211                         eeprom_phy_id = 0;
15212
15213                 tp->phy_id = eeprom_phy_id;
15214                 if (eeprom_phy_serdes) {
15215                         if (!tg3_flag(tp, 5705_PLUS))
15216                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15217                         else
15218                                 tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
15219                 }
15220
15221                 if (tg3_flag(tp, 5750_PLUS))
15222                         led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
15223                                     SHASTA_EXT_LED_MODE_MASK);
15224                 else
15225                         led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
15226
15227                 switch (led_cfg) {
15228                 default:
15229                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
15230                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15231                         break;
15232
15233                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
15234                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15235                         break;
15236
15237                 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
15238                         tp->led_ctrl = LED_CTRL_MODE_MAC;
15239
15240                         /* Default to PHY_1_MODE if 0 (MAC_MODE) is
15241                          * read on some older 5700/5701 bootcode.
15242                          */
15243                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
15244                             tg3_asic_rev(tp) == ASIC_REV_5701)
15245                                 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15246
15247                         break;
15248
15249                 case SHASTA_EXT_LED_SHARED:
15250                         tp->led_ctrl = LED_CTRL_MODE_SHARED;
15251                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
15252                             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1)
15253                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15254                                                  LED_CTRL_MODE_PHY_2);
15255
15256                         if (tg3_flag(tp, 5717_PLUS) ||
15257                             tg3_asic_rev(tp) == ASIC_REV_5762)
15258                                 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE |
15259                                                 LED_CTRL_BLINK_RATE_MASK;
15260
15261                         break;
15262
15263                 case SHASTA_EXT_LED_MAC:
15264                         tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
15265                         break;
15266
15267                 case SHASTA_EXT_LED_COMBO:
15268                         tp->led_ctrl = LED_CTRL_MODE_COMBO;
15269                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0)
15270                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15271                                                  LED_CTRL_MODE_PHY_2);
15272                         break;
15273
15274                 }
15275
15276                 if ((tg3_asic_rev(tp) == ASIC_REV_5700 ||
15277                      tg3_asic_rev(tp) == ASIC_REV_5701) &&
15278                     tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
15279                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15280
15281                 if (tg3_chip_rev(tp) == CHIPREV_5784_AX)
15282                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15283
15284                 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
15285                         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15286                         if ((tp->pdev->subsystem_vendor ==
15287                              PCI_VENDOR_ID_ARIMA) &&
15288                             (tp->pdev->subsystem_device == 0x205a ||
15289                              tp->pdev->subsystem_device == 0x2063))
15290                                 tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15291                 } else {
15292                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15293                         tg3_flag_set(tp, IS_NIC);
15294                 }
15295
15296                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
15297                         tg3_flag_set(tp, ENABLE_ASF);
15298                         if (tg3_flag(tp, 5750_PLUS))
15299                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
15300                 }
15301
15302                 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
15303                     tg3_flag(tp, 5750_PLUS))
15304                         tg3_flag_set(tp, ENABLE_APE);
15305
15306                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
15307                     !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
15308                         tg3_flag_clear(tp, WOL_CAP);
15309
15310                 if (tg3_flag(tp, WOL_CAP) &&
15311                     (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
15312                         tg3_flag_set(tp, WOL_ENABLE);
15313                         device_set_wakeup_enable(&tp->pdev->dev, true);
15314                 }
15315
15316                 if (cfg2 & (1 << 17))
15317                         tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
15318
15319                 /* serdes signal pre-emphasis in register 0x590 set by */
15320                 /* bootcode if bit 18 is set */
15321                 if (cfg2 & (1 << 18))
15322                         tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
15323
15324                 if ((tg3_flag(tp, 57765_PLUS) ||
15325                      (tg3_asic_rev(tp) == ASIC_REV_5784 &&
15326                       tg3_chip_rev(tp) != CHIPREV_5784_AX)) &&
15327                     (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
15328                         tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
15329
15330                 if (tg3_flag(tp, PCI_EXPRESS)) {
15331                         u32 cfg3;
15332
15333                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
15334                         if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
15335                             !tg3_flag(tp, 57765_PLUS) &&
15336                             (cfg3 & NIC_SRAM_ASPM_DEBOUNCE))
15337                                 tg3_flag_set(tp, ASPM_WORKAROUND);
15338                         if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID)
15339                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
15340                         if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK)
15341                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
15342                 }
15343
15344                 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
15345                         tg3_flag_set(tp, RGMII_INBAND_DISABLE);
15346                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
15347                         tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
15348                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
15349                         tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
15350
15351                 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV)
15352                         tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV;
15353         }
15354 done:
15355         if (tg3_flag(tp, WOL_CAP))
15356                 device_set_wakeup_enable(&tp->pdev->dev,
15357                                          tg3_flag(tp, WOL_ENABLE));
15358         else
15359                 device_set_wakeup_capable(&tp->pdev->dev, false);
15360 }
15361
15362 static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val)
15363 {
15364         int i, err;
15365         u32 val2, off = offset * 8;
15366
15367         err = tg3_nvram_lock(tp);
15368         if (err)
15369                 return err;
15370
15371         tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE);
15372         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN |
15373                         APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START);
15374         tg3_ape_read32(tp, TG3_APE_OTP_CTRL);
15375         udelay(10);
15376
15377         for (i = 0; i < 100; i++) {
15378                 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS);
15379                 if (val2 & APE_OTP_STATUS_CMD_DONE) {
15380                         *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA);
15381                         break;
15382                 }
15383                 udelay(10);
15384         }
15385
15386         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0);
15387
15388         tg3_nvram_unlock(tp);
15389         if (val2 & APE_OTP_STATUS_CMD_DONE)
15390                 return 0;
15391
15392         return -EBUSY;
15393 }
15394
15395 static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
15396 {
15397         int i;
15398         u32 val;
15399
15400         tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
15401         tw32(OTP_CTRL, cmd);
15402
15403         /* Wait for up to 1 ms for command to execute. */
15404         for (i = 0; i < 100; i++) {
15405                 val = tr32(OTP_STATUS);
15406                 if (val & OTP_STATUS_CMD_DONE)
15407                         break;
15408                 udelay(10);
15409         }
15410
15411         return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
15412 }
15413
15414 /* Read the gphy configuration from the OTP region of the chip.  The gphy
15415  * configuration is a 32-bit value that straddles the alignment boundary.
15416  * We do two 32-bit reads and then shift and merge the results.
15417  */
15418 static u32 tg3_read_otp_phycfg(struct tg3 *tp)
15419 {
15420         u32 bhalf_otp, thalf_otp;
15421
15422         tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
15423
15424         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
15425                 return 0;
15426
15427         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
15428
15429         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15430                 return 0;
15431
15432         thalf_otp = tr32(OTP_READ_DATA);
15433
15434         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
15435
15436         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15437                 return 0;
15438
15439         bhalf_otp = tr32(OTP_READ_DATA);
15440
15441         return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
15442 }
15443
15444 static void tg3_phy_init_link_config(struct tg3 *tp)
15445 {
15446         u32 adv = ADVERTISED_Autoneg;
15447
15448         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
15449                 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV))
15450                         adv |= ADVERTISED_1000baseT_Half;
15451                 adv |= ADVERTISED_1000baseT_Full;
15452         }
15453
15454         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15455                 adv |= ADVERTISED_100baseT_Half |
15456                        ADVERTISED_100baseT_Full |
15457                        ADVERTISED_10baseT_Half |
15458                        ADVERTISED_10baseT_Full |
15459                        ADVERTISED_TP;
15460         else
15461                 adv |= ADVERTISED_FIBRE;
15462
15463         tp->link_config.advertising = adv;
15464         tp->link_config.speed = SPEED_UNKNOWN;
15465         tp->link_config.duplex = DUPLEX_UNKNOWN;
15466         tp->link_config.autoneg = AUTONEG_ENABLE;
15467         tp->link_config.active_speed = SPEED_UNKNOWN;
15468         tp->link_config.active_duplex = DUPLEX_UNKNOWN;
15469
15470         tp->old_link = -1;
15471 }
15472
15473 static int tg3_phy_probe(struct tg3 *tp)
15474 {
15475         u32 hw_phy_id_1, hw_phy_id_2;
15476         u32 hw_phy_id, hw_phy_id_masked;
15477         int err;
15478
15479         /* flow control autonegotiation is default behavior */
15480         tg3_flag_set(tp, PAUSE_AUTONEG);
15481         tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
15482
15483         if (tg3_flag(tp, ENABLE_APE)) {
15484                 switch (tp->pci_fn) {
15485                 case 0:
15486                         tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
15487                         break;
15488                 case 1:
15489                         tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
15490                         break;
15491                 case 2:
15492                         tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
15493                         break;
15494                 case 3:
15495                         tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
15496                         break;
15497                 }
15498         }
15499
15500         if (!tg3_flag(tp, ENABLE_ASF) &&
15501             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15502             !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15503                 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
15504                                    TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
15505
15506         if (tg3_flag(tp, USE_PHYLIB))
15507                 return tg3_phy_init(tp);
15508
15509         /* Reading the PHY ID register can conflict with ASF
15510          * firmware access to the PHY hardware.
15511          */
15512         err = 0;
15513         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
15514                 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
15515         } else {
15516                 /* Now read the physical PHY_ID from the chip and verify
15517                  * that it is sane.  If it doesn't look good, we fall back
15518                  * to either the hard-coded table based PHY_ID and failing
15519                  * that the value found in the eeprom area.
15520                  */
15521                 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
15522                 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
15523
15524                 hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
15525                 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
15526                 hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
15527
15528                 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
15529         }
15530
15531         if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
15532                 tp->phy_id = hw_phy_id;
15533                 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
15534                         tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15535                 else
15536                         tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
15537         } else {
15538                 if (tp->phy_id != TG3_PHY_ID_INVALID) {
15539                         /* Do nothing, phy ID already set up in
15540                          * tg3_get_eeprom_hw_cfg().
15541                          */
15542                 } else {
15543                         struct subsys_tbl_ent *p;
15544
15545                         /* No eeprom signature?  Try the hardcoded
15546                          * subsys device table.
15547                          */
15548                         p = tg3_lookup_by_subsys(tp);
15549                         if (p) {
15550                                 tp->phy_id = p->phy_id;
15551                         } else if (!tg3_flag(tp, IS_SSB_CORE)) {
15552                                 /* For now we saw the IDs 0xbc050cd0,
15553                                  * 0xbc050f80 and 0xbc050c30 on devices
15554                                  * connected to an BCM4785 and there are
15555                                  * probably more. Just assume that the phy is
15556                                  * supported when it is connected to a SSB core
15557                                  * for now.
15558                                  */
15559                                 return -ENODEV;
15560                         }
15561
15562                         if (!tp->phy_id ||
15563                             tp->phy_id == TG3_PHY_ID_BCM8002)
15564                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15565                 }
15566         }
15567
15568         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15569             (tg3_asic_rev(tp) == ASIC_REV_5719 ||
15570              tg3_asic_rev(tp) == ASIC_REV_5720 ||
15571              tg3_asic_rev(tp) == ASIC_REV_57766 ||
15572              tg3_asic_rev(tp) == ASIC_REV_5762 ||
15573              (tg3_asic_rev(tp) == ASIC_REV_5717 &&
15574               tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) ||
15575              (tg3_asic_rev(tp) == ASIC_REV_57765 &&
15576               tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) {
15577                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
15578
15579                 tp->eee.supported = SUPPORTED_100baseT_Full |
15580                                     SUPPORTED_1000baseT_Full;
15581                 tp->eee.advertised = ADVERTISED_100baseT_Full |
15582                                      ADVERTISED_1000baseT_Full;
15583                 tp->eee.eee_enabled = 1;
15584                 tp->eee.tx_lpi_enabled = 1;
15585                 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US;
15586         }
15587
15588         tg3_phy_init_link_config(tp);
15589
15590         if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
15591             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15592             !tg3_flag(tp, ENABLE_APE) &&
15593             !tg3_flag(tp, ENABLE_ASF)) {
15594                 u32 bmsr, dummy;
15595
15596                 tg3_readphy(tp, MII_BMSR, &bmsr);
15597                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
15598                     (bmsr & BMSR_LSTATUS))
15599                         goto skip_phy_reset;
15600
15601                 err = tg3_phy_reset(tp);
15602                 if (err)
15603                         return err;
15604
15605                 tg3_phy_set_wirespeed(tp);
15606
15607                 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
15608                         tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
15609                                             tp->link_config.flowctrl);
15610
15611                         tg3_writephy(tp, MII_BMCR,
15612                                      BMCR_ANENABLE | BMCR_ANRESTART);
15613                 }
15614         }
15615
15616 skip_phy_reset:
15617         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
15618                 err = tg3_init_5401phy_dsp(tp);
15619                 if (err)
15620                         return err;
15621
15622                 err = tg3_init_5401phy_dsp(tp);
15623         }
15624
15625         return err;
15626 }
15627
15628 static void tg3_read_vpd(struct tg3 *tp)
15629 {
15630         u8 *vpd_data;
15631         unsigned int block_end, rosize, len;
15632         u32 vpdlen;
15633         int j, i = 0;
15634
15635         vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
15636         if (!vpd_data)
15637                 goto out_no_vpd;
15638
15639         i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
15640         if (i < 0)
15641                 goto out_not_found;
15642
15643         rosize = pci_vpd_lrdt_size(&vpd_data[i]);
15644         block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
15645         i += PCI_VPD_LRDT_TAG_SIZE;
15646
15647         if (block_end > vpdlen)
15648                 goto out_not_found;
15649
15650         j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15651                                       PCI_VPD_RO_KEYWORD_MFR_ID);
15652         if (j > 0) {
15653                 len = pci_vpd_info_field_size(&vpd_data[j]);
15654
15655                 j += PCI_VPD_INFO_FLD_HDR_SIZE;
15656                 if (j + len > block_end || len != 4 ||
15657                     memcmp(&vpd_data[j], "1028", 4))
15658                         goto partno;
15659
15660                 j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15661                                               PCI_VPD_RO_KEYWORD_VENDOR0);
15662                 if (j < 0)
15663                         goto partno;
15664
15665                 len = pci_vpd_info_field_size(&vpd_data[j]);
15666
15667                 j += PCI_VPD_INFO_FLD_HDR_SIZE;
15668                 if (j + len > block_end)
15669                         goto partno;
15670
15671                 if (len >= sizeof(tp->fw_ver))
15672                         len = sizeof(tp->fw_ver) - 1;
15673                 memset(tp->fw_ver, 0, sizeof(tp->fw_ver));
15674                 snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len,
15675                          &vpd_data[j]);
15676         }
15677
15678 partno:
15679         i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15680                                       PCI_VPD_RO_KEYWORD_PARTNO);
15681         if (i < 0)
15682                 goto out_not_found;
15683
15684         len = pci_vpd_info_field_size(&vpd_data[i]);
15685
15686         i += PCI_VPD_INFO_FLD_HDR_SIZE;
15687         if (len > TG3_BPN_SIZE ||
15688             (len + i) > vpdlen)
15689                 goto out_not_found;
15690
15691         memcpy(tp->board_part_number, &vpd_data[i], len);
15692
15693 out_not_found:
15694         kfree(vpd_data);
15695         if (tp->board_part_number[0])
15696                 return;
15697
15698 out_no_vpd:
15699         if (tg3_asic_rev(tp) == ASIC_REV_5717) {
15700                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15701                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
15702                         strcpy(tp->board_part_number, "BCM5717");
15703                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
15704                         strcpy(tp->board_part_number, "BCM5718");
15705                 else
15706                         goto nomatch;
15707         } else if (tg3_asic_rev(tp) == ASIC_REV_57780) {
15708                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
15709                         strcpy(tp->board_part_number, "BCM57780");
15710                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
15711                         strcpy(tp->board_part_number, "BCM57760");
15712                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
15713                         strcpy(tp->board_part_number, "BCM57790");
15714                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
15715                         strcpy(tp->board_part_number, "BCM57788");
15716                 else
15717                         goto nomatch;
15718         } else if (tg3_asic_rev(tp) == ASIC_REV_57765) {
15719                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
15720                         strcpy(tp->board_part_number, "BCM57761");
15721                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
15722                         strcpy(tp->board_part_number, "BCM57765");
15723                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
15724                         strcpy(tp->board_part_number, "BCM57781");
15725                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
15726                         strcpy(tp->board_part_number, "BCM57785");
15727                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
15728                         strcpy(tp->board_part_number, "BCM57791");
15729                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
15730                         strcpy(tp->board_part_number, "BCM57795");
15731                 else
15732                         goto nomatch;
15733         } else if (tg3_asic_rev(tp) == ASIC_REV_57766) {
15734                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
15735                         strcpy(tp->board_part_number, "BCM57762");
15736                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
15737                         strcpy(tp->board_part_number, "BCM57766");
15738                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
15739                         strcpy(tp->board_part_number, "BCM57782");
15740                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15741                         strcpy(tp->board_part_number, "BCM57786");
15742                 else
15743                         goto nomatch;
15744         } else if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15745                 strcpy(tp->board_part_number, "BCM95906");
15746         } else {
15747 nomatch:
15748                 strcpy(tp->board_part_number, "none");
15749         }
15750 }
15751
15752 static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
15753 {
15754         u32 val;
15755
15756         if (tg3_nvram_read(tp, offset, &val) ||
15757             (val & 0xfc000000) != 0x0c000000 ||
15758             tg3_nvram_read(tp, offset + 4, &val) ||
15759             val != 0)
15760                 return 0;
15761
15762         return 1;
15763 }
15764
15765 static void tg3_read_bc_ver(struct tg3 *tp)
15766 {
15767         u32 val, offset, start, ver_offset;
15768         int i, dst_off;
15769         bool newver = false;
15770
15771         if (tg3_nvram_read(tp, 0xc, &offset) ||
15772             tg3_nvram_read(tp, 0x4, &start))
15773                 return;
15774
15775         offset = tg3_nvram_logical_addr(tp, offset);
15776
15777         if (tg3_nvram_read(tp, offset, &val))
15778                 return;
15779
15780         if ((val & 0xfc000000) == 0x0c000000) {
15781                 if (tg3_nvram_read(tp, offset + 4, &val))
15782                         return;
15783
15784                 if (val == 0)
15785                         newver = true;
15786         }
15787
15788         dst_off = strlen(tp->fw_ver);
15789
15790         if (newver) {
15791                 if (TG3_VER_SIZE - dst_off < 16 ||
15792                     tg3_nvram_read(tp, offset + 8, &ver_offset))
15793                         return;
15794
15795                 offset = offset + ver_offset - start;
15796                 for (i = 0; i < 16; i += 4) {
15797                         __be32 v;
15798                         if (tg3_nvram_read_be32(tp, offset + i, &v))
15799                                 return;
15800
15801                         memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
15802                 }
15803         } else {
15804                 u32 major, minor;
15805
15806                 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
15807                         return;
15808
15809                 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
15810                         TG3_NVM_BCVER_MAJSFT;
15811                 minor = ver_offset & TG3_NVM_BCVER_MINMSK;
15812                 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
15813                          "v%d.%02d", major, minor);
15814         }
15815 }
15816
15817 static void tg3_read_hwsb_ver(struct tg3 *tp)
15818 {
15819         u32 val, major, minor;
15820
15821         /* Use native endian representation */
15822         if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
15823                 return;
15824
15825         major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
15826                 TG3_NVM_HWSB_CFG1_MAJSFT;
15827         minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
15828                 TG3_NVM_HWSB_CFG1_MINSFT;
15829
15830         snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
15831 }
15832
15833 static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
15834 {
15835         u32 offset, major, minor, build;
15836
15837         strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
15838
15839         if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
15840                 return;
15841
15842         switch (val & TG3_EEPROM_SB_REVISION_MASK) {
15843         case TG3_EEPROM_SB_REVISION_0:
15844                 offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
15845                 break;
15846         case TG3_EEPROM_SB_REVISION_2:
15847                 offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
15848                 break;
15849         case TG3_EEPROM_SB_REVISION_3:
15850                 offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
15851                 break;
15852         case TG3_EEPROM_SB_REVISION_4:
15853                 offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
15854                 break;
15855         case TG3_EEPROM_SB_REVISION_5:
15856                 offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
15857                 break;
15858         case TG3_EEPROM_SB_REVISION_6:
15859                 offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
15860                 break;
15861         default:
15862                 return;
15863         }
15864
15865         if (tg3_nvram_read(tp, offset, &val))
15866                 return;
15867
15868         build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
15869                 TG3_EEPROM_SB_EDH_BLD_SHFT;
15870         major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
15871                 TG3_EEPROM_SB_EDH_MAJ_SHFT;
15872         minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
15873
15874         if (minor > 99 || build > 26)
15875                 return;
15876
15877         offset = strlen(tp->fw_ver);
15878         snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
15879                  " v%d.%02d", major, minor);
15880
15881         if (build > 0) {
15882                 offset = strlen(tp->fw_ver);
15883                 if (offset < TG3_VER_SIZE - 1)
15884                         tp->fw_ver[offset] = 'a' + build - 1;
15885         }
15886 }
15887
15888 static void tg3_read_mgmtfw_ver(struct tg3 *tp)
15889 {
15890         u32 val, offset, start;
15891         int i, vlen;
15892
15893         for (offset = TG3_NVM_DIR_START;
15894              offset < TG3_NVM_DIR_END;
15895              offset += TG3_NVM_DIRENT_SIZE) {
15896                 if (tg3_nvram_read(tp, offset, &val))
15897                         return;
15898
15899                 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
15900                         break;
15901         }
15902
15903         if (offset == TG3_NVM_DIR_END)
15904                 return;
15905
15906         if (!tg3_flag(tp, 5705_PLUS))
15907                 start = 0x08000000;
15908         else if (tg3_nvram_read(tp, offset - 4, &start))
15909                 return;
15910
15911         if (tg3_nvram_read(tp, offset + 4, &offset) ||
15912             !tg3_fw_img_is_valid(tp, offset) ||
15913             tg3_nvram_read(tp, offset + 8, &val))
15914                 return;
15915
15916         offset += val - start;
15917
15918         vlen = strlen(tp->fw_ver);
15919
15920         tp->fw_ver[vlen++] = ',';
15921         tp->fw_ver[vlen++] = ' ';
15922
15923         for (i = 0; i < 4; i++) {
15924                 __be32 v;
15925                 if (tg3_nvram_read_be32(tp, offset, &v))
15926                         return;
15927
15928                 offset += sizeof(v);
15929
15930                 if (vlen > TG3_VER_SIZE - sizeof(v)) {
15931                         memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
15932                         break;
15933                 }
15934
15935                 memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
15936                 vlen += sizeof(v);
15937         }
15938 }
15939
15940 static void tg3_probe_ncsi(struct tg3 *tp)
15941 {
15942         u32 apedata;
15943
15944         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
15945         if (apedata != APE_SEG_SIG_MAGIC)
15946                 return;
15947
15948         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
15949         if (!(apedata & APE_FW_STATUS_READY))
15950                 return;
15951
15952         if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
15953                 tg3_flag_set(tp, APE_HAS_NCSI);
15954 }
15955
15956 static void tg3_read_dash_ver(struct tg3 *tp)
15957 {
15958         int vlen;
15959         u32 apedata;
15960         char *fwtype;
15961
15962         apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
15963
15964         if (tg3_flag(tp, APE_HAS_NCSI))
15965                 fwtype = "NCSI";
15966         else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725)
15967                 fwtype = "SMASH";
15968         else
15969                 fwtype = "DASH";
15970
15971         vlen = strlen(tp->fw_ver);
15972
15973         snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
15974                  fwtype,
15975                  (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
15976                  (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
15977                  (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
15978                  (apedata & APE_FW_VERSION_BLDMSK));
15979 }
15980
15981 static void tg3_read_otp_ver(struct tg3 *tp)
15982 {
15983         u32 val, val2;
15984
15985         if (tg3_asic_rev(tp) != ASIC_REV_5762)
15986                 return;
15987
15988         if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) &&
15989             !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) &&
15990             TG3_OTP_MAGIC0_VALID(val)) {
15991                 u64 val64 = (u64) val << 32 | val2;
15992                 u32 ver = 0;
15993                 int i, vlen;
15994
15995                 for (i = 0; i < 7; i++) {
15996                         if ((val64 & 0xff) == 0)
15997                                 break;
15998                         ver = val64 & 0xff;
15999                         val64 >>= 8;
16000                 }
16001                 vlen = strlen(tp->fw_ver);
16002                 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver);
16003         }
16004 }
16005
16006 static void tg3_read_fw_ver(struct tg3 *tp)
16007 {
16008         u32 val;
16009         bool vpd_vers = false;
16010
16011         if (tp->fw_ver[0] != 0)
16012                 vpd_vers = true;
16013
16014         if (tg3_flag(tp, NO_NVRAM)) {
16015                 strcat(tp->fw_ver, "sb");
16016                 tg3_read_otp_ver(tp);
16017                 return;
16018         }
16019
16020         if (tg3_nvram_read(tp, 0, &val))
16021                 return;
16022
16023         if (val == TG3_EEPROM_MAGIC)
16024                 tg3_read_bc_ver(tp);
16025         else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
16026                 tg3_read_sb_ver(tp, val);
16027         else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
16028                 tg3_read_hwsb_ver(tp);
16029
16030         if (tg3_flag(tp, ENABLE_ASF)) {
16031                 if (tg3_flag(tp, ENABLE_APE)) {
16032                         tg3_probe_ncsi(tp);
16033                         if (!vpd_vers)
16034                                 tg3_read_dash_ver(tp);
16035                 } else if (!vpd_vers) {
16036                         tg3_read_mgmtfw_ver(tp);
16037                 }
16038         }
16039
16040         tp->fw_ver[TG3_VER_SIZE - 1] = 0;
16041 }
16042
16043 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
16044 {
16045         if (tg3_flag(tp, LRG_PROD_RING_CAP))
16046                 return TG3_RX_RET_MAX_SIZE_5717;
16047         else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
16048                 return TG3_RX_RET_MAX_SIZE_5700;
16049         else
16050                 return TG3_RX_RET_MAX_SIZE_5705;
16051 }
16052
16053 static const struct pci_device_id tg3_write_reorder_chipsets[] = {
16054         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
16055         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
16056         { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
16057         { },
16058 };
16059
16060 static struct pci_dev *tg3_find_peer(struct tg3 *tp)
16061 {
16062         struct pci_dev *peer;
16063         unsigned int func, devnr = tp->pdev->devfn & ~7;
16064
16065         for (func = 0; func < 8; func++) {
16066                 peer = pci_get_slot(tp->pdev->bus, devnr | func);
16067                 if (peer && peer != tp->pdev)
16068                         break;
16069                 pci_dev_put(peer);
16070         }
16071         /* 5704 can be configured in single-port mode, set peer to
16072          * tp->pdev in that case.
16073          */
16074         if (!peer) {
16075                 peer = tp->pdev;
16076                 return peer;
16077         }
16078
16079         /*
16080          * We don't need to keep the refcount elevated; there's no way
16081          * to remove one half of this device without removing the other
16082          */
16083         pci_dev_put(peer);
16084
16085         return peer;
16086 }
16087
16088 static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
16089 {
16090         tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
16091         if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) {
16092                 u32 reg;
16093
16094                 /* All devices that use the alternate
16095                  * ASIC REV location have a CPMU.
16096                  */
16097                 tg3_flag_set(tp, CPMU_PRESENT);
16098
16099                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16100                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
16101                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16102                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16103                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
16104                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
16105                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
16106                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
16107                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
16108                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
16109                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787)
16110                         reg = TG3PCI_GEN2_PRODID_ASICREV;
16111                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
16112                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
16113                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
16114                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
16115                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
16116                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
16117                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
16118                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
16119                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
16120                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
16121                         reg = TG3PCI_GEN15_PRODID_ASICREV;
16122                 else
16123                         reg = TG3PCI_PRODID_ASICREV;
16124
16125                 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
16126         }
16127
16128         /* Wrong chip ID in 5752 A0. This code can be removed later
16129          * as A0 is not in production.
16130          */
16131         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW)
16132                 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
16133
16134         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0)
16135                 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
16136
16137         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16138             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16139             tg3_asic_rev(tp) == ASIC_REV_5720)
16140                 tg3_flag_set(tp, 5717_PLUS);
16141
16142         if (tg3_asic_rev(tp) == ASIC_REV_57765 ||
16143             tg3_asic_rev(tp) == ASIC_REV_57766)
16144                 tg3_flag_set(tp, 57765_CLASS);
16145
16146         if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) ||
16147              tg3_asic_rev(tp) == ASIC_REV_5762)
16148                 tg3_flag_set(tp, 57765_PLUS);
16149
16150         /* Intentionally exclude ASIC_REV_5906 */
16151         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16152             tg3_asic_rev(tp) == ASIC_REV_5787 ||
16153             tg3_asic_rev(tp) == ASIC_REV_5784 ||
16154             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16155             tg3_asic_rev(tp) == ASIC_REV_5785 ||
16156             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16157             tg3_flag(tp, 57765_PLUS))
16158                 tg3_flag_set(tp, 5755_PLUS);
16159
16160         if (tg3_asic_rev(tp) == ASIC_REV_5780 ||
16161             tg3_asic_rev(tp) == ASIC_REV_5714)
16162                 tg3_flag_set(tp, 5780_CLASS);
16163
16164         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16165             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16166             tg3_asic_rev(tp) == ASIC_REV_5906 ||
16167             tg3_flag(tp, 5755_PLUS) ||
16168             tg3_flag(tp, 5780_CLASS))
16169                 tg3_flag_set(tp, 5750_PLUS);
16170
16171         if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
16172             tg3_flag(tp, 5750_PLUS))
16173                 tg3_flag_set(tp, 5705_PLUS);
16174 }
16175
16176 static bool tg3_10_100_only_device(struct tg3 *tp,
16177                                    const struct pci_device_id *ent)
16178 {
16179         u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
16180
16181         if ((tg3_asic_rev(tp) == ASIC_REV_5703 &&
16182              (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
16183             (tp->phy_flags & TG3_PHYFLG_IS_FET))
16184                 return true;
16185
16186         if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
16187                 if (tg3_asic_rev(tp) == ASIC_REV_5705) {
16188                         if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
16189                                 return true;
16190                 } else {
16191                         return true;
16192                 }
16193         }
16194
16195         return false;
16196 }
16197
16198 static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
16199 {
16200         u32 misc_ctrl_reg;
16201         u32 pci_state_reg, grc_misc_cfg;
16202         u32 val;
16203         u16 pci_cmd;
16204         int err;
16205
16206         /* Force memory write invalidate off.  If we leave it on,
16207          * then on 5700_BX chips we have to enable a workaround.
16208          * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
16209          * to match the cacheline size.  The Broadcom driver have this
16210          * workaround but turns MWI off all the times so never uses
16211          * it.  This seems to suggest that the workaround is insufficient.
16212          */
16213         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16214         pci_cmd &= ~PCI_COMMAND_INVALIDATE;
16215         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16216
16217         /* Important! -- Make sure register accesses are byteswapped
16218          * correctly.  Also, for those chips that require it, make
16219          * sure that indirect register accesses are enabled before
16220          * the first operation.
16221          */
16222         pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16223                               &misc_ctrl_reg);
16224         tp->misc_host_ctrl |= (misc_ctrl_reg &
16225                                MISC_HOST_CTRL_CHIPREV);
16226         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16227                                tp->misc_host_ctrl);
16228
16229         tg3_detect_asic_rev(tp, misc_ctrl_reg);
16230
16231         /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
16232          * we need to disable memory and use config. cycles
16233          * only to access all registers. The 5702/03 chips
16234          * can mistakenly decode the special cycles from the
16235          * ICH chipsets as memory write cycles, causing corruption
16236          * of register and memory space. Only certain ICH bridges
16237          * will drive special cycles with non-zero data during the
16238          * address phase which can fall within the 5703's address
16239          * range. This is not an ICH bug as the PCI spec allows
16240          * non-zero address during special cycles. However, only
16241          * these ICH bridges are known to drive non-zero addresses
16242          * during special cycles.
16243          *
16244          * Since special cycles do not cross PCI bridges, we only
16245          * enable this workaround if the 5703 is on the secondary
16246          * bus of these ICH bridges.
16247          */
16248         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) ||
16249             (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) {
16250                 static struct tg3_dev_id {
16251                         u32     vendor;
16252                         u32     device;
16253                         u32     rev;
16254                 } ich_chipsets[] = {
16255                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
16256                           PCI_ANY_ID },
16257                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
16258                           PCI_ANY_ID },
16259                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
16260                           0xa },
16261                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
16262                           PCI_ANY_ID },
16263                         { },
16264                 };
16265                 struct tg3_dev_id *pci_id = &ich_chipsets[0];
16266                 struct pci_dev *bridge = NULL;
16267
16268                 while (pci_id->vendor != 0) {
16269                         bridge = pci_get_device(pci_id->vendor, pci_id->device,
16270                                                 bridge);
16271                         if (!bridge) {
16272                                 pci_id++;
16273                                 continue;
16274                         }
16275                         if (pci_id->rev != PCI_ANY_ID) {
16276                                 if (bridge->revision > pci_id->rev)
16277                                         continue;
16278                         }
16279                         if (bridge->subordinate &&
16280                             (bridge->subordinate->number ==
16281                              tp->pdev->bus->number)) {
16282                                 tg3_flag_set(tp, ICH_WORKAROUND);
16283                                 pci_dev_put(bridge);
16284                                 break;
16285                         }
16286                 }
16287         }
16288
16289         if (tg3_asic_rev(tp) == ASIC_REV_5701) {
16290                 static struct tg3_dev_id {
16291                         u32     vendor;
16292                         u32     device;
16293                 } bridge_chipsets[] = {
16294                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
16295                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
16296                         { },
16297                 };
16298                 struct tg3_dev_id *pci_id = &bridge_chipsets[0];
16299                 struct pci_dev *bridge = NULL;
16300
16301                 while (pci_id->vendor != 0) {
16302                         bridge = pci_get_device(pci_id->vendor,
16303                                                 pci_id->device,
16304                                                 bridge);
16305                         if (!bridge) {
16306                                 pci_id++;
16307                                 continue;
16308                         }
16309                         if (bridge->subordinate &&
16310                             (bridge->subordinate->number <=
16311                              tp->pdev->bus->number) &&
16312                             (bridge->subordinate->busn_res.end >=
16313                              tp->pdev->bus->number)) {
16314                                 tg3_flag_set(tp, 5701_DMA_BUG);
16315                                 pci_dev_put(bridge);
16316                                 break;
16317                         }
16318                 }
16319         }
16320
16321         /* The EPB bridge inside 5714, 5715, and 5780 cannot support
16322          * DMA addresses > 40-bit. This bridge may have other additional
16323          * 57xx devices behind it in some 4-port NIC designs for example.
16324          * Any tg3 device found behind the bridge will also need the 40-bit
16325          * DMA workaround.
16326          */
16327         if (tg3_flag(tp, 5780_CLASS)) {
16328                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16329                 tp->msi_cap = tp->pdev->msi_cap;
16330         } else {
16331                 struct pci_dev *bridge = NULL;
16332
16333                 do {
16334                         bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
16335                                                 PCI_DEVICE_ID_SERVERWORKS_EPB,
16336                                                 bridge);
16337                         if (bridge && bridge->subordinate &&
16338                             (bridge->subordinate->number <=
16339                              tp->pdev->bus->number) &&
16340                             (bridge->subordinate->busn_res.end >=
16341                              tp->pdev->bus->number)) {
16342                                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16343                                 pci_dev_put(bridge);
16344                                 break;
16345                         }
16346                 } while (bridge);
16347         }
16348
16349         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16350             tg3_asic_rev(tp) == ASIC_REV_5714)
16351                 tp->pdev_peer = tg3_find_peer(tp);
16352
16353         /* Determine TSO capabilities */
16354         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0)
16355                 ; /* Do nothing. HW bug. */
16356         else if (tg3_flag(tp, 57765_PLUS))
16357                 tg3_flag_set(tp, HW_TSO_3);
16358         else if (tg3_flag(tp, 5755_PLUS) ||
16359                  tg3_asic_rev(tp) == ASIC_REV_5906)
16360                 tg3_flag_set(tp, HW_TSO_2);
16361         else if (tg3_flag(tp, 5750_PLUS)) {
16362                 tg3_flag_set(tp, HW_TSO_1);
16363                 tg3_flag_set(tp, TSO_BUG);
16364                 if (tg3_asic_rev(tp) == ASIC_REV_5750 &&
16365                     tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2)
16366                         tg3_flag_clear(tp, TSO_BUG);
16367         } else if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16368                    tg3_asic_rev(tp) != ASIC_REV_5701 &&
16369                    tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
16370                 tg3_flag_set(tp, FW_TSO);
16371                 tg3_flag_set(tp, TSO_BUG);
16372                 if (tg3_asic_rev(tp) == ASIC_REV_5705)
16373                         tp->fw_needed = FIRMWARE_TG3TSO5;
16374                 else
16375                         tp->fw_needed = FIRMWARE_TG3TSO;
16376         }
16377
16378         /* Selectively allow TSO based on operating conditions */
16379         if (tg3_flag(tp, HW_TSO_1) ||
16380             tg3_flag(tp, HW_TSO_2) ||
16381             tg3_flag(tp, HW_TSO_3) ||
16382             tg3_flag(tp, FW_TSO)) {
16383                 /* For firmware TSO, assume ASF is disabled.
16384                  * We'll disable TSO later if we discover ASF
16385                  * is enabled in tg3_get_eeprom_hw_cfg().
16386                  */
16387                 tg3_flag_set(tp, TSO_CAPABLE);
16388         } else {
16389                 tg3_flag_clear(tp, TSO_CAPABLE);
16390                 tg3_flag_clear(tp, TSO_BUG);
16391                 tp->fw_needed = NULL;
16392         }
16393
16394         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0)
16395                 tp->fw_needed = FIRMWARE_TG3;
16396
16397         if (tg3_asic_rev(tp) == ASIC_REV_57766)
16398                 tp->fw_needed = FIRMWARE_TG357766;
16399
16400         tp->irq_max = 1;
16401
16402         if (tg3_flag(tp, 5750_PLUS)) {
16403                 tg3_flag_set(tp, SUPPORT_MSI);
16404                 if (tg3_chip_rev(tp) == CHIPREV_5750_AX ||
16405                     tg3_chip_rev(tp) == CHIPREV_5750_BX ||
16406                     (tg3_asic_rev(tp) == ASIC_REV_5714 &&
16407                      tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 &&
16408                      tp->pdev_peer == tp->pdev))
16409                         tg3_flag_clear(tp, SUPPORT_MSI);
16410
16411                 if (tg3_flag(tp, 5755_PLUS) ||
16412                     tg3_asic_rev(tp) == ASIC_REV_5906) {
16413                         tg3_flag_set(tp, 1SHOT_MSI);
16414                 }
16415
16416                 if (tg3_flag(tp, 57765_PLUS)) {
16417                         tg3_flag_set(tp, SUPPORT_MSIX);
16418                         tp->irq_max = TG3_IRQ_MAX_VECS;
16419                 }
16420         }
16421
16422         tp->txq_max = 1;
16423         tp->rxq_max = 1;
16424         if (tp->irq_max > 1) {
16425                 tp->rxq_max = TG3_RSS_MAX_NUM_QS;
16426                 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
16427
16428                 if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
16429                     tg3_asic_rev(tp) == ASIC_REV_5720)
16430                         tp->txq_max = tp->irq_max - 1;
16431         }
16432
16433         if (tg3_flag(tp, 5755_PLUS) ||
16434             tg3_asic_rev(tp) == ASIC_REV_5906)
16435                 tg3_flag_set(tp, SHORT_DMA_BUG);
16436
16437         if (tg3_asic_rev(tp) == ASIC_REV_5719)
16438                 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
16439
16440         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16441             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16442             tg3_asic_rev(tp) == ASIC_REV_5720 ||
16443             tg3_asic_rev(tp) == ASIC_REV_5762)
16444                 tg3_flag_set(tp, LRG_PROD_RING_CAP);
16445
16446         if (tg3_flag(tp, 57765_PLUS) &&
16447             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0)
16448                 tg3_flag_set(tp, USE_JUMBO_BDFLAG);
16449
16450         if (!tg3_flag(tp, 5705_PLUS) ||
16451             tg3_flag(tp, 5780_CLASS) ||
16452             tg3_flag(tp, USE_JUMBO_BDFLAG))
16453                 tg3_flag_set(tp, JUMBO_CAPABLE);
16454
16455         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16456                               &pci_state_reg);
16457
16458         if (pci_is_pcie(tp->pdev)) {
16459                 u16 lnkctl;
16460
16461                 tg3_flag_set(tp, PCI_EXPRESS);
16462
16463                 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
16464                 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
16465                         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16466                                 tg3_flag_clear(tp, HW_TSO_2);
16467                                 tg3_flag_clear(tp, TSO_CAPABLE);
16468                         }
16469                         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
16470                             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16471                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 ||
16472                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1)
16473                                 tg3_flag_set(tp, CLKREQ_BUG);
16474                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) {
16475                         tg3_flag_set(tp, L1PLLPD_EN);
16476                 }
16477         } else if (tg3_asic_rev(tp) == ASIC_REV_5785) {
16478                 /* BCM5785 devices are effectively PCIe devices, and should
16479                  * follow PCIe codepaths, but do not have a PCIe capabilities
16480                  * section.
16481                  */
16482                 tg3_flag_set(tp, PCI_EXPRESS);
16483         } else if (!tg3_flag(tp, 5705_PLUS) ||
16484                    tg3_flag(tp, 5780_CLASS)) {
16485                 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
16486                 if (!tp->pcix_cap) {
16487                         dev_err(&tp->pdev->dev,
16488                                 "Cannot find PCI-X capability, aborting\n");
16489                         return -EIO;
16490                 }
16491
16492                 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
16493                         tg3_flag_set(tp, PCIX_MODE);
16494         }
16495
16496         /* If we have an AMD 762 or VIA K8T800 chipset, write
16497          * reordering to the mailbox registers done by the host
16498          * controller can cause major troubles.  We read back from
16499          * every mailbox register write to force the writes to be
16500          * posted to the chip in order.
16501          */
16502         if (pci_dev_present(tg3_write_reorder_chipsets) &&
16503             !tg3_flag(tp, PCI_EXPRESS))
16504                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
16505
16506         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
16507                              &tp->pci_cacheline_sz);
16508         pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16509                              &tp->pci_lat_timer);
16510         if (tg3_asic_rev(tp) == ASIC_REV_5703 &&
16511             tp->pci_lat_timer < 64) {
16512                 tp->pci_lat_timer = 64;
16513                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16514                                       tp->pci_lat_timer);
16515         }
16516
16517         /* Important! -- It is critical that the PCI-X hw workaround
16518          * situation is decided before the first MMIO register access.
16519          */
16520         if (tg3_chip_rev(tp) == CHIPREV_5700_BX) {
16521                 /* 5700 BX chips need to have their TX producer index
16522                  * mailboxes written twice to workaround a bug.
16523                  */
16524                 tg3_flag_set(tp, TXD_MBOX_HWBUG);
16525
16526                 /* If we are in PCI-X mode, enable register write workaround.
16527                  *
16528                  * The workaround is to use indirect register accesses
16529                  * for all chip writes not to mailbox registers.
16530                  */
16531                 if (tg3_flag(tp, PCIX_MODE)) {
16532                         u32 pm_reg;
16533
16534                         tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16535
16536                         /* The chip can have it's power management PCI config
16537                          * space registers clobbered due to this bug.
16538                          * So explicitly force the chip into D0 here.
16539                          */
16540                         pci_read_config_dword(tp->pdev,
16541                                               tp->pdev->pm_cap + PCI_PM_CTRL,
16542                                               &pm_reg);
16543                         pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
16544                         pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
16545                         pci_write_config_dword(tp->pdev,
16546                                                tp->pdev->pm_cap + PCI_PM_CTRL,
16547                                                pm_reg);
16548
16549                         /* Also, force SERR#/PERR# in PCI command. */
16550                         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16551                         pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
16552                         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16553                 }
16554         }
16555
16556         if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
16557                 tg3_flag_set(tp, PCI_HIGH_SPEED);
16558         if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
16559                 tg3_flag_set(tp, PCI_32BIT);
16560
16561         /* Chip-specific fixup from Broadcom driver */
16562         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) &&
16563             (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
16564                 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
16565                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
16566         }
16567
16568         /* Default fast path register access methods */
16569         tp->read32 = tg3_read32;
16570         tp->write32 = tg3_write32;
16571         tp->read32_mbox = tg3_read32;
16572         tp->write32_mbox = tg3_write32;
16573         tp->write32_tx_mbox = tg3_write32;
16574         tp->write32_rx_mbox = tg3_write32;
16575
16576         /* Various workaround register access methods */
16577         if (tg3_flag(tp, PCIX_TARGET_HWBUG))
16578                 tp->write32 = tg3_write_indirect_reg32;
16579         else if (tg3_asic_rev(tp) == ASIC_REV_5701 ||
16580                  (tg3_flag(tp, PCI_EXPRESS) &&
16581                   tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) {
16582                 /*
16583                  * Back to back register writes can cause problems on these
16584                  * chips, the workaround is to read back all reg writes
16585                  * except those to mailbox regs.
16586                  *
16587                  * See tg3_write_indirect_reg32().
16588                  */
16589                 tp->write32 = tg3_write_flush_reg32;
16590         }
16591
16592         if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
16593                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
16594                 if (tg3_flag(tp, MBOX_WRITE_REORDER))
16595                         tp->write32_rx_mbox = tg3_write_flush_reg32;
16596         }
16597
16598         if (tg3_flag(tp, ICH_WORKAROUND)) {
16599                 tp->read32 = tg3_read_indirect_reg32;
16600                 tp->write32 = tg3_write_indirect_reg32;
16601                 tp->read32_mbox = tg3_read_indirect_mbox;
16602                 tp->write32_mbox = tg3_write_indirect_mbox;
16603                 tp->write32_tx_mbox = tg3_write_indirect_mbox;
16604                 tp->write32_rx_mbox = tg3_write_indirect_mbox;
16605
16606                 iounmap(tp->regs);
16607                 tp->regs = NULL;
16608
16609                 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16610                 pci_cmd &= ~PCI_COMMAND_MEMORY;
16611                 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16612         }
16613         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16614                 tp->read32_mbox = tg3_read32_mbox_5906;
16615                 tp->write32_mbox = tg3_write32_mbox_5906;
16616                 tp->write32_tx_mbox = tg3_write32_mbox_5906;
16617                 tp->write32_rx_mbox = tg3_write32_mbox_5906;
16618         }
16619
16620         if (tp->write32 == tg3_write_indirect_reg32 ||
16621             (tg3_flag(tp, PCIX_MODE) &&
16622              (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16623               tg3_asic_rev(tp) == ASIC_REV_5701)))
16624                 tg3_flag_set(tp, SRAM_USE_CONFIG);
16625
16626         /* The memory arbiter has to be enabled in order for SRAM accesses
16627          * to succeed.  Normally on powerup the tg3 chip firmware will make
16628          * sure it is enabled, but other entities such as system netboot
16629          * code might disable it.
16630          */
16631         val = tr32(MEMARB_MODE);
16632         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
16633
16634         tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
16635         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16636             tg3_flag(tp, 5780_CLASS)) {
16637                 if (tg3_flag(tp, PCIX_MODE)) {
16638                         pci_read_config_dword(tp->pdev,
16639                                               tp->pcix_cap + PCI_X_STATUS,
16640                                               &val);
16641                         tp->pci_fn = val & 0x7;
16642                 }
16643         } else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16644                    tg3_asic_rev(tp) == ASIC_REV_5719 ||
16645                    tg3_asic_rev(tp) == ASIC_REV_5720) {
16646                 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
16647                 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG)
16648                         val = tr32(TG3_CPMU_STATUS);
16649
16650                 if (tg3_asic_rev(tp) == ASIC_REV_5717)
16651                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0;
16652                 else
16653                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
16654                                      TG3_CPMU_STATUS_FSHFT_5719;
16655         }
16656
16657         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
16658                 tp->write32_tx_mbox = tg3_write_flush_reg32;
16659                 tp->write32_rx_mbox = tg3_write_flush_reg32;
16660         }
16661
16662         /* Get eeprom hw config before calling tg3_set_power_state().
16663          * In particular, the TG3_FLAG_IS_NIC flag must be
16664          * determined before calling tg3_set_power_state() so that
16665          * we know whether or not to switch out of Vaux power.
16666          * When the flag is set, it means that GPIO1 is used for eeprom
16667          * write protect and also implies that it is a LOM where GPIOs
16668          * are not used to switch power.
16669          */
16670         tg3_get_eeprom_hw_cfg(tp);
16671
16672         if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) {
16673                 tg3_flag_clear(tp, TSO_CAPABLE);
16674                 tg3_flag_clear(tp, TSO_BUG);
16675                 tp->fw_needed = NULL;
16676         }
16677
16678         if (tg3_flag(tp, ENABLE_APE)) {
16679                 /* Allow reads and writes to the
16680                  * APE register and memory space.
16681                  */
16682                 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
16683                                  PCISTATE_ALLOW_APE_SHMEM_WR |
16684                                  PCISTATE_ALLOW_APE_PSPACE_WR;
16685                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
16686                                        pci_state_reg);
16687
16688                 tg3_ape_lock_init(tp);
16689                 tp->ape_hb_interval =
16690                         msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC);
16691         }
16692
16693         /* Set up tp->grc_local_ctrl before calling
16694          * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
16695          * will bring 5700's external PHY out of reset.
16696          * It is also used as eeprom write protect on LOMs.
16697          */
16698         tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
16699         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16700             tg3_flag(tp, EEPROM_WRITE_PROT))
16701                 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
16702                                        GRC_LCLCTRL_GPIO_OUTPUT1);
16703         /* Unused GPIO3 must be driven as output on 5752 because there
16704          * are no pull-up resistors on unused GPIO pins.
16705          */
16706         else if (tg3_asic_rev(tp) == ASIC_REV_5752)
16707                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
16708
16709         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16710             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16711             tg3_flag(tp, 57765_CLASS))
16712                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16713
16714         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16715             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
16716                 /* Turn off the debug UART. */
16717                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16718                 if (tg3_flag(tp, IS_NIC))
16719                         /* Keep VMain power. */
16720                         tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
16721                                               GRC_LCLCTRL_GPIO_OUTPUT0;
16722         }
16723
16724         if (tg3_asic_rev(tp) == ASIC_REV_5762)
16725                 tp->grc_local_ctrl |=
16726                         tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL;
16727
16728         /* Switch out of Vaux if it is a NIC */
16729         tg3_pwrsrc_switch_to_vmain(tp);
16730
16731         /* Derive initial jumbo mode from MTU assigned in
16732          * ether_setup() via the alloc_etherdev() call
16733          */
16734         if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
16735                 tg3_flag_set(tp, JUMBO_RING_ENABLE);
16736
16737         /* Determine WakeOnLan speed to use. */
16738         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16739             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16740             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16741             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) {
16742                 tg3_flag_clear(tp, WOL_SPEED_100MB);
16743         } else {
16744                 tg3_flag_set(tp, WOL_SPEED_100MB);
16745         }
16746
16747         if (tg3_asic_rev(tp) == ASIC_REV_5906)
16748                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
16749
16750         /* A few boards don't want Ethernet@WireSpeed phy feature */
16751         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16752             (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16753              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) &&
16754              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) ||
16755             (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
16756             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
16757                 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
16758
16759         if (tg3_chip_rev(tp) == CHIPREV_5703_AX ||
16760             tg3_chip_rev(tp) == CHIPREV_5704_AX)
16761                 tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
16762         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0)
16763                 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
16764
16765         if (tg3_flag(tp, 5705_PLUS) &&
16766             !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
16767             tg3_asic_rev(tp) != ASIC_REV_5785 &&
16768             tg3_asic_rev(tp) != ASIC_REV_57780 &&
16769             !tg3_flag(tp, 57765_PLUS)) {
16770                 if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16771                     tg3_asic_rev(tp) == ASIC_REV_5787 ||
16772                     tg3_asic_rev(tp) == ASIC_REV_5784 ||
16773                     tg3_asic_rev(tp) == ASIC_REV_5761) {
16774                         if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
16775                             tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
16776                                 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
16777                         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
16778                                 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
16779                 } else
16780                         tp->phy_flags |= TG3_PHYFLG_BER_BUG;
16781         }
16782
16783         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
16784             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
16785                 tp->phy_otp = tg3_read_otp_phycfg(tp);
16786                 if (tp->phy_otp == 0)
16787                         tp->phy_otp = TG3_OTP_DEFAULT;
16788         }
16789
16790         if (tg3_flag(tp, CPMU_PRESENT))
16791                 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
16792         else
16793                 tp->mi_mode = MAC_MI_MODE_BASE;
16794
16795         tp->coalesce_mode = 0;
16796         if (tg3_chip_rev(tp) != CHIPREV_5700_AX &&
16797             tg3_chip_rev(tp) != CHIPREV_5700_BX)
16798                 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
16799
16800         /* Set these bits to enable statistics workaround. */
16801         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16802             tg3_asic_rev(tp) == ASIC_REV_5762 ||
16803             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
16804             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) {
16805                 tp->coalesce_mode |= HOSTCC_MODE_ATTN;
16806                 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
16807         }
16808
16809         if (tg3_asic_rev(tp) == ASIC_REV_5785 ||
16810             tg3_asic_rev(tp) == ASIC_REV_57780)
16811                 tg3_flag_set(tp, USE_PHYLIB);
16812
16813         err = tg3_mdio_init(tp);
16814         if (err)
16815                 return err;
16816
16817         /* Initialize data/descriptor byte/word swapping. */
16818         val = tr32(GRC_MODE);
16819         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
16820             tg3_asic_rev(tp) == ASIC_REV_5762)
16821                 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
16822                         GRC_MODE_WORD_SWAP_B2HRX_DATA |
16823                         GRC_MODE_B2HRX_ENABLE |
16824                         GRC_MODE_HTX2B_ENABLE |
16825                         GRC_MODE_HOST_STACKUP);
16826         else
16827                 val &= GRC_MODE_HOST_STACKUP;
16828
16829         tw32(GRC_MODE, val | tp->grc_mode);
16830
16831         tg3_switch_clocks(tp);
16832
16833         /* Clear this out for sanity. */
16834         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
16835
16836         /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */
16837         tw32(TG3PCI_REG_BASE_ADDR, 0);
16838
16839         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16840                               &pci_state_reg);
16841         if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
16842             !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
16843                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16844                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16845                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 ||
16846                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) {
16847                         void __iomem *sram_base;
16848
16849                         /* Write some dummy words into the SRAM status block
16850                          * area, see if it reads back correctly.  If the return
16851                          * value is bad, force enable the PCIX workaround.
16852                          */
16853                         sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
16854
16855                         writel(0x00000000, sram_base);
16856                         writel(0x00000000, sram_base + 4);
16857                         writel(0xffffffff, sram_base + 4);
16858                         if (readl(sram_base) != 0x00000000)
16859                                 tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16860                 }
16861         }
16862
16863         udelay(50);
16864         tg3_nvram_init(tp);
16865
16866         /* If the device has an NVRAM, no need to load patch firmware */
16867         if (tg3_asic_rev(tp) == ASIC_REV_57766 &&
16868             !tg3_flag(tp, NO_NVRAM))
16869                 tp->fw_needed = NULL;
16870
16871         grc_misc_cfg = tr32(GRC_MISC_CFG);
16872         grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
16873
16874         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16875             (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
16876              grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
16877                 tg3_flag_set(tp, IS_5788);
16878
16879         if (!tg3_flag(tp, IS_5788) &&
16880             tg3_asic_rev(tp) != ASIC_REV_5700)
16881                 tg3_flag_set(tp, TAGGED_STATUS);
16882         if (tg3_flag(tp, TAGGED_STATUS)) {
16883                 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
16884                                       HOSTCC_MODE_CLRTICK_TXBD);
16885
16886                 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
16887                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16888                                        tp->misc_host_ctrl);
16889         }
16890
16891         /* Preserve the APE MAC_MODE bits */
16892         if (tg3_flag(tp, ENABLE_APE))
16893                 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
16894         else
16895                 tp->mac_mode = 0;
16896
16897         if (tg3_10_100_only_device(tp, ent))
16898                 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
16899
16900         err = tg3_phy_probe(tp);
16901         if (err) {
16902                 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
16903                 /* ... but do not return immediately ... */
16904                 tg3_mdio_fini(tp);
16905         }
16906
16907         tg3_read_vpd(tp);
16908         tg3_read_fw_ver(tp);
16909
16910         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
16911                 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16912         } else {
16913                 if (tg3_asic_rev(tp) == ASIC_REV_5700)
16914                         tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16915                 else
16916                         tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16917         }
16918
16919         /* 5700 {AX,BX} chips have a broken status block link
16920          * change bit implementation, so we must use the
16921          * status register in those cases.
16922          */
16923         if (tg3_asic_rev(tp) == ASIC_REV_5700)
16924                 tg3_flag_set(tp, USE_LINKCHG_REG);
16925         else
16926                 tg3_flag_clear(tp, USE_LINKCHG_REG);
16927
16928         /* The led_ctrl is set during tg3_phy_probe, here we might
16929          * have to force the link status polling mechanism based
16930          * upon subsystem IDs.
16931          */
16932         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
16933             tg3_asic_rev(tp) == ASIC_REV_5701 &&
16934             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
16935                 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16936                 tg3_flag_set(tp, USE_LINKCHG_REG);
16937         }
16938
16939         /* For all SERDES we poll the MAC status register. */
16940         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
16941                 tg3_flag_set(tp, POLL_SERDES);
16942         else
16943                 tg3_flag_clear(tp, POLL_SERDES);
16944
16945         if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF))
16946                 tg3_flag_set(tp, POLL_CPMU_LINK);
16947
16948         tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
16949         tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
16950         if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
16951             tg3_flag(tp, PCIX_MODE)) {
16952                 tp->rx_offset = NET_SKB_PAD;
16953 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
16954                 tp->rx_copy_thresh = ~(u16)0;
16955 #endif
16956         }
16957
16958         tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
16959         tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
16960         tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
16961
16962         tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
16963
16964         /* Increment the rx prod index on the rx std ring by at most
16965          * 8 for these chips to workaround hw errata.
16966          */
16967         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16968             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16969             tg3_asic_rev(tp) == ASIC_REV_5755)
16970                 tp->rx_std_max_post = 8;
16971
16972         if (tg3_flag(tp, ASPM_WORKAROUND))
16973                 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
16974                                      PCIE_PWR_MGMT_L1_THRESH_MSK;
16975
16976         return err;
16977 }
16978
16979 static int tg3_get_device_address(struct tg3 *tp)
16980 {
16981         struct net_device *dev = tp->dev;
16982         u32 hi, lo, mac_offset;
16983         int addr_ok = 0;
16984         int err;
16985
16986         if (!eth_platform_get_mac_address(&tp->pdev->dev, dev->dev_addr))
16987                 return 0;
16988
16989         if (tg3_flag(tp, IS_SSB_CORE)) {
16990                 err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
16991                 if (!err && is_valid_ether_addr(&dev->dev_addr[0]))
16992                         return 0;
16993         }
16994
16995         mac_offset = 0x7c;
16996         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16997             tg3_flag(tp, 5780_CLASS)) {
16998                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
16999                         mac_offset = 0xcc;
17000                 if (tg3_nvram_lock(tp))
17001                         tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
17002                 else
17003                         tg3_nvram_unlock(tp);
17004         } else if (tg3_flag(tp, 5717_PLUS)) {
17005                 if (tp->pci_fn & 1)
17006                         mac_offset = 0xcc;
17007                 if (tp->pci_fn > 1)
17008                         mac_offset += 0x18c;
17009         } else if (tg3_asic_rev(tp) == ASIC_REV_5906)
17010                 mac_offset = 0x10;
17011
17012         /* First try to get it from MAC address mailbox. */
17013         tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
17014         if ((hi >> 16) == 0x484b) {
17015                 dev->dev_addr[0] = (hi >>  8) & 0xff;
17016                 dev->dev_addr[1] = (hi >>  0) & 0xff;
17017
17018                 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
17019                 dev->dev_addr[2] = (lo >> 24) & 0xff;
17020                 dev->dev_addr[3] = (lo >> 16) & 0xff;
17021                 dev->dev_addr[4] = (lo >>  8) & 0xff;
17022                 dev->dev_addr[5] = (lo >>  0) & 0xff;
17023
17024                 /* Some old bootcode may report a 0 MAC address in SRAM */
17025                 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
17026         }
17027         if (!addr_ok) {
17028                 /* Next, try NVRAM. */
17029                 if (!tg3_flag(tp, NO_NVRAM) &&
17030                     !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
17031                     !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
17032                         memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
17033                         memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
17034                 }
17035                 /* Finally just fetch it out of the MAC control regs. */
17036                 else {
17037                         hi = tr32(MAC_ADDR_0_HIGH);
17038                         lo = tr32(MAC_ADDR_0_LOW);
17039
17040                         dev->dev_addr[5] = lo & 0xff;
17041                         dev->dev_addr[4] = (lo >> 8) & 0xff;
17042                         dev->dev_addr[3] = (lo >> 16) & 0xff;
17043                         dev->dev_addr[2] = (lo >> 24) & 0xff;
17044                         dev->dev_addr[1] = hi & 0xff;
17045                         dev->dev_addr[0] = (hi >> 8) & 0xff;
17046                 }
17047         }
17048
17049         if (!is_valid_ether_addr(&dev->dev_addr[0]))
17050                 return -EINVAL;
17051         return 0;
17052 }
17053
17054 #define BOUNDARY_SINGLE_CACHELINE       1
17055 #define BOUNDARY_MULTI_CACHELINE        2
17056
17057 static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
17058 {
17059         int cacheline_size;
17060         u8 byte;
17061         int goal;
17062
17063         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
17064         if (byte == 0)
17065                 cacheline_size = 1024;
17066         else
17067                 cacheline_size = (int) byte * 4;
17068
17069         /* On 5703 and later chips, the boundary bits have no
17070          * effect.
17071          */
17072         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17073             tg3_asic_rev(tp) != ASIC_REV_5701 &&
17074             !tg3_flag(tp, PCI_EXPRESS))
17075                 goto out;
17076
17077 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
17078         goal = BOUNDARY_MULTI_CACHELINE;
17079 #else
17080 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
17081         goal = BOUNDARY_SINGLE_CACHELINE;
17082 #else
17083         goal = 0;
17084 #endif
17085 #endif
17086
17087         if (tg3_flag(tp, 57765_PLUS)) {
17088                 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
17089                 goto out;
17090         }
17091
17092         if (!goal)
17093                 goto out;
17094
17095         /* PCI controllers on most RISC systems tend to disconnect
17096          * when a device tries to burst across a cache-line boundary.
17097          * Therefore, letting tg3 do so just wastes PCI bandwidth.
17098          *
17099          * Unfortunately, for PCI-E there are only limited
17100          * write-side controls for this, and thus for reads
17101          * we will still get the disconnects.  We'll also waste
17102          * these PCI cycles for both read and write for chips
17103          * other than 5700 and 5701 which do not implement the
17104          * boundary bits.
17105          */
17106         if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
17107                 switch (cacheline_size) {
17108                 case 16:
17109                 case 32:
17110                 case 64:
17111                 case 128:
17112                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17113                                 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
17114                                         DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
17115                         } else {
17116                                 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17117                                         DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17118                         }
17119                         break;
17120
17121                 case 256:
17122                         val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
17123                                 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
17124                         break;
17125
17126                 default:
17127                         val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17128                                 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17129                         break;
17130                 }
17131         } else if (tg3_flag(tp, PCI_EXPRESS)) {
17132                 switch (cacheline_size) {
17133                 case 16:
17134                 case 32:
17135                 case 64:
17136                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17137                                 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17138                                 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
17139                                 break;
17140                         }
17141                         /* fallthrough */
17142                 case 128:
17143                 default:
17144                         val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17145                         val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
17146                         break;
17147                 }
17148         } else {
17149                 switch (cacheline_size) {
17150                 case 16:
17151                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17152                                 val |= (DMA_RWCTRL_READ_BNDRY_16 |
17153                                         DMA_RWCTRL_WRITE_BNDRY_16);
17154                                 break;
17155                         }
17156                         /* fallthrough */
17157                 case 32:
17158                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17159                                 val |= (DMA_RWCTRL_READ_BNDRY_32 |
17160                                         DMA_RWCTRL_WRITE_BNDRY_32);
17161                                 break;
17162                         }
17163                         /* fallthrough */
17164                 case 64:
17165                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17166                                 val |= (DMA_RWCTRL_READ_BNDRY_64 |
17167                                         DMA_RWCTRL_WRITE_BNDRY_64);
17168                                 break;
17169                         }
17170                         /* fallthrough */
17171                 case 128:
17172                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17173                                 val |= (DMA_RWCTRL_READ_BNDRY_128 |
17174                                         DMA_RWCTRL_WRITE_BNDRY_128);
17175                                 break;
17176                         }
17177                         /* fallthrough */
17178                 case 256:
17179                         val |= (DMA_RWCTRL_READ_BNDRY_256 |
17180                                 DMA_RWCTRL_WRITE_BNDRY_256);
17181                         break;
17182                 case 512:
17183                         val |= (DMA_RWCTRL_READ_BNDRY_512 |
17184                                 DMA_RWCTRL_WRITE_BNDRY_512);
17185                         break;
17186                 case 1024:
17187                 default:
17188                         val |= (DMA_RWCTRL_READ_BNDRY_1024 |
17189                                 DMA_RWCTRL_WRITE_BNDRY_1024);
17190                         break;
17191                 }
17192         }
17193
17194 out:
17195         return val;
17196 }
17197
17198 static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
17199                            int size, bool to_device)
17200 {
17201         struct tg3_internal_buffer_desc test_desc;
17202         u32 sram_dma_descs;
17203         int i, ret;
17204
17205         sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
17206
17207         tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
17208         tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
17209         tw32(RDMAC_STATUS, 0);
17210         tw32(WDMAC_STATUS, 0);
17211
17212         tw32(BUFMGR_MODE, 0);
17213         tw32(FTQ_RESET, 0);
17214
17215         test_desc.addr_hi = ((u64) buf_dma) >> 32;
17216         test_desc.addr_lo = buf_dma & 0xffffffff;
17217         test_desc.nic_mbuf = 0x00002100;
17218         test_desc.len = size;
17219
17220         /*
17221          * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
17222          * the *second* time the tg3 driver was getting loaded after an
17223          * initial scan.
17224          *
17225          * Broadcom tells me:
17226          *   ...the DMA engine is connected to the GRC block and a DMA
17227          *   reset may affect the GRC block in some unpredictable way...
17228          *   The behavior of resets to individual blocks has not been tested.
17229          *
17230          * Broadcom noted the GRC reset will also reset all sub-components.
17231          */
17232         if (to_device) {
17233                 test_desc.cqid_sqid = (13 << 8) | 2;
17234
17235                 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
17236                 udelay(40);
17237         } else {
17238                 test_desc.cqid_sqid = (16 << 8) | 7;
17239
17240                 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
17241                 udelay(40);
17242         }
17243         test_desc.flags = 0x00000005;
17244
17245         for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
17246                 u32 val;
17247
17248                 val = *(((u32 *)&test_desc) + i);
17249                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
17250                                        sram_dma_descs + (i * sizeof(u32)));
17251                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
17252         }
17253         pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
17254
17255         if (to_device)
17256                 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
17257         else
17258                 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
17259
17260         ret = -ENODEV;
17261         for (i = 0; i < 40; i++) {
17262                 u32 val;
17263
17264                 if (to_device)
17265                         val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
17266                 else
17267                         val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
17268                 if ((val & 0xffff) == sram_dma_descs) {
17269                         ret = 0;
17270                         break;
17271                 }
17272
17273                 udelay(100);
17274         }
17275
17276         return ret;
17277 }
17278
17279 #define TEST_BUFFER_SIZE        0x2000
17280
17281 static const struct pci_device_id tg3_dma_wait_state_chipsets[] = {
17282         { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
17283         { },
17284 };
17285
17286 static int tg3_test_dma(struct tg3 *tp)
17287 {
17288         dma_addr_t buf_dma;
17289         u32 *buf, saved_dma_rwctrl;
17290         int ret = 0;
17291
17292         buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
17293                                  &buf_dma, GFP_KERNEL);
17294         if (!buf) {
17295                 ret = -ENOMEM;
17296                 goto out_nofree;
17297         }
17298
17299         tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
17300                           (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
17301
17302         tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
17303
17304         if (tg3_flag(tp, 57765_PLUS))
17305                 goto out;
17306
17307         if (tg3_flag(tp, PCI_EXPRESS)) {
17308                 /* DMA read watermark not used on PCIE */
17309                 tp->dma_rwctrl |= 0x00180000;
17310         } else if (!tg3_flag(tp, PCIX_MODE)) {
17311                 if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
17312                     tg3_asic_rev(tp) == ASIC_REV_5750)
17313                         tp->dma_rwctrl |= 0x003f0000;
17314                 else
17315                         tp->dma_rwctrl |= 0x003f000f;
17316         } else {
17317                 if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17318                     tg3_asic_rev(tp) == ASIC_REV_5704) {
17319                         u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
17320                         u32 read_water = 0x7;
17321
17322                         /* If the 5704 is behind the EPB bridge, we can
17323                          * do the less restrictive ONE_DMA workaround for
17324                          * better performance.
17325                          */
17326                         if (tg3_flag(tp, 40BIT_DMA_BUG) &&
17327                             tg3_asic_rev(tp) == ASIC_REV_5704)
17328                                 tp->dma_rwctrl |= 0x8000;
17329                         else if (ccval == 0x6 || ccval == 0x7)
17330                                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17331
17332                         if (tg3_asic_rev(tp) == ASIC_REV_5703)
17333                                 read_water = 4;
17334                         /* Set bit 23 to enable PCIX hw bug fix */
17335                         tp->dma_rwctrl |=
17336                                 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
17337                                 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
17338                                 (1 << 23);
17339                 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) {
17340                         /* 5780 always in PCIX mode */
17341                         tp->dma_rwctrl |= 0x00144000;
17342                 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) {
17343                         /* 5714 always in PCIX mode */
17344                         tp->dma_rwctrl |= 0x00148000;
17345                 } else {
17346                         tp->dma_rwctrl |= 0x001b000f;
17347                 }
17348         }
17349         if (tg3_flag(tp, ONE_DMA_AT_ONCE))
17350                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17351
17352         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17353             tg3_asic_rev(tp) == ASIC_REV_5704)
17354                 tp->dma_rwctrl &= 0xfffffff0;
17355
17356         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
17357             tg3_asic_rev(tp) == ASIC_REV_5701) {
17358                 /* Remove this if it causes problems for some boards. */
17359                 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
17360
17361                 /* On 5700/5701 chips, we need to set this bit.
17362                  * Otherwise the chip will issue cacheline transactions
17363                  * to streamable DMA memory with not all the byte
17364                  * enables turned on.  This is an error on several
17365                  * RISC PCI controllers, in particular sparc64.
17366                  *
17367                  * On 5703/5704 chips, this bit has been reassigned
17368                  * a different meaning.  In particular, it is used
17369                  * on those chips to enable a PCI-X workaround.
17370                  */
17371                 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
17372         }
17373
17374         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17375
17376
17377         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17378             tg3_asic_rev(tp) != ASIC_REV_5701)
17379                 goto out;
17380
17381         /* It is best to perform DMA test with maximum write burst size
17382          * to expose the 5700/5701 write DMA bug.
17383          */
17384         saved_dma_rwctrl = tp->dma_rwctrl;
17385         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17386         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17387
17388         while (1) {
17389                 u32 *p = buf, i;
17390
17391                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
17392                         p[i] = i;
17393
17394                 /* Send the buffer to the chip. */
17395                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true);
17396                 if (ret) {
17397                         dev_err(&tp->pdev->dev,
17398                                 "%s: Buffer write failed. err = %d\n",
17399                                 __func__, ret);
17400                         break;
17401                 }
17402
17403                 /* Now read it back. */
17404                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false);
17405                 if (ret) {
17406                         dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
17407                                 "err = %d\n", __func__, ret);
17408                         break;
17409                 }
17410
17411                 /* Verify it. */
17412                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
17413                         if (p[i] == i)
17414                                 continue;
17415
17416                         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17417                             DMA_RWCTRL_WRITE_BNDRY_16) {
17418                                 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17419                                 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17420                                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17421                                 break;
17422                         } else {
17423                                 dev_err(&tp->pdev->dev,
17424                                         "%s: Buffer corrupted on read back! "
17425                                         "(%d != %d)\n", __func__, p[i], i);
17426                                 ret = -ENODEV;
17427                                 goto out;
17428                         }
17429                 }
17430
17431                 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
17432                         /* Success. */
17433                         ret = 0;
17434                         break;
17435                 }
17436         }
17437         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17438             DMA_RWCTRL_WRITE_BNDRY_16) {
17439                 /* DMA test passed without adjusting DMA boundary,
17440                  * now look for chipsets that are known to expose the
17441                  * DMA bug without failing the test.
17442                  */
17443                 if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
17444                         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17445                         tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17446                 } else {
17447                         /* Safe to use the calculated DMA boundary. */
17448                         tp->dma_rwctrl = saved_dma_rwctrl;
17449                 }
17450
17451                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17452         }
17453
17454 out:
17455         dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
17456 out_nofree:
17457         return ret;
17458 }
17459
17460 static void tg3_init_bufmgr_config(struct tg3 *tp)
17461 {
17462         if (tg3_flag(tp, 57765_PLUS)) {
17463                 tp->bufmgr_config.mbuf_read_dma_low_water =
17464                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17465                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17466                         DEFAULT_MB_MACRX_LOW_WATER_57765;
17467                 tp->bufmgr_config.mbuf_high_water =
17468                         DEFAULT_MB_HIGH_WATER_57765;
17469
17470                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17471                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17472                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17473                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
17474                 tp->bufmgr_config.mbuf_high_water_jumbo =
17475                         DEFAULT_MB_HIGH_WATER_JUMBO_57765;
17476         } else if (tg3_flag(tp, 5705_PLUS)) {
17477                 tp->bufmgr_config.mbuf_read_dma_low_water =
17478                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17479                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17480                         DEFAULT_MB_MACRX_LOW_WATER_5705;
17481                 tp->bufmgr_config.mbuf_high_water =
17482                         DEFAULT_MB_HIGH_WATER_5705;
17483                 if (tg3_asic_rev(tp) == ASIC_REV_5906) {
17484                         tp->bufmgr_config.mbuf_mac_rx_low_water =
17485                                 DEFAULT_MB_MACRX_LOW_WATER_5906;
17486                         tp->bufmgr_config.mbuf_high_water =
17487                                 DEFAULT_MB_HIGH_WATER_5906;
17488                 }
17489
17490                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17491                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
17492                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17493                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
17494                 tp->bufmgr_config.mbuf_high_water_jumbo =
17495                         DEFAULT_MB_HIGH_WATER_JUMBO_5780;
17496         } else {
17497                 tp->bufmgr_config.mbuf_read_dma_low_water =
17498                         DEFAULT_MB_RDMA_LOW_WATER;
17499                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17500                         DEFAULT_MB_MACRX_LOW_WATER;
17501                 tp->bufmgr_config.mbuf_high_water =
17502                         DEFAULT_MB_HIGH_WATER;
17503
17504                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17505                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
17506                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17507                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
17508                 tp->bufmgr_config.mbuf_high_water_jumbo =
17509                         DEFAULT_MB_HIGH_WATER_JUMBO;
17510         }
17511
17512         tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
17513         tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
17514 }
17515
17516 static char *tg3_phy_string(struct tg3 *tp)
17517 {
17518         switch (tp->phy_id & TG3_PHY_ID_MASK) {
17519         case TG3_PHY_ID_BCM5400:        return "5400";
17520         case TG3_PHY_ID_BCM5401:        return "5401";
17521         case TG3_PHY_ID_BCM5411:        return "5411";
17522         case TG3_PHY_ID_BCM5701:        return "5701";
17523         case TG3_PHY_ID_BCM5703:        return "5703";
17524         case TG3_PHY_ID_BCM5704:        return "5704";
17525         case TG3_PHY_ID_BCM5705:        return "5705";
17526         case TG3_PHY_ID_BCM5750:        return "5750";
17527         case TG3_PHY_ID_BCM5752:        return "5752";
17528         case TG3_PHY_ID_BCM5714:        return "5714";
17529         case TG3_PHY_ID_BCM5780:        return "5780";
17530         case TG3_PHY_ID_BCM5755:        return "5755";
17531         case TG3_PHY_ID_BCM5787:        return "5787";
17532         case TG3_PHY_ID_BCM5784:        return "5784";
17533         case TG3_PHY_ID_BCM5756:        return "5722/5756";
17534         case TG3_PHY_ID_BCM5906:        return "5906";
17535         case TG3_PHY_ID_BCM5761:        return "5761";
17536         case TG3_PHY_ID_BCM5718C:       return "5718C";
17537         case TG3_PHY_ID_BCM5718S:       return "5718S";
17538         case TG3_PHY_ID_BCM57765:       return "57765";
17539         case TG3_PHY_ID_BCM5719C:       return "5719C";
17540         case TG3_PHY_ID_BCM5720C:       return "5720C";
17541         case TG3_PHY_ID_BCM5762:        return "5762C";
17542         case TG3_PHY_ID_BCM8002:        return "8002/serdes";
17543         case 0:                 return "serdes";
17544         default:                return "unknown";
17545         }
17546 }
17547
17548 static char *tg3_bus_string(struct tg3 *tp, char *str)
17549 {
17550         if (tg3_flag(tp, PCI_EXPRESS)) {
17551                 strcpy(str, "PCI Express");
17552                 return str;
17553         } else if (tg3_flag(tp, PCIX_MODE)) {
17554                 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
17555
17556                 strcpy(str, "PCIX:");
17557
17558                 if ((clock_ctrl == 7) ||
17559                     ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
17560                      GRC_MISC_CFG_BOARD_ID_5704CIOBE))
17561                         strcat(str, "133MHz");
17562                 else if (clock_ctrl == 0)
17563                         strcat(str, "33MHz");
17564                 else if (clock_ctrl == 2)
17565                         strcat(str, "50MHz");
17566                 else if (clock_ctrl == 4)
17567                         strcat(str, "66MHz");
17568                 else if (clock_ctrl == 6)
17569                         strcat(str, "100MHz");
17570         } else {
17571                 strcpy(str, "PCI:");
17572                 if (tg3_flag(tp, PCI_HIGH_SPEED))
17573                         strcat(str, "66MHz");
17574                 else
17575                         strcat(str, "33MHz");
17576         }
17577         if (tg3_flag(tp, PCI_32BIT))
17578                 strcat(str, ":32-bit");
17579         else
17580                 strcat(str, ":64-bit");
17581         return str;
17582 }
17583
17584 static void tg3_init_coal(struct tg3 *tp)
17585 {
17586         struct ethtool_coalesce *ec = &tp->coal;
17587
17588         memset(ec, 0, sizeof(*ec));
17589         ec->cmd = ETHTOOL_GCOALESCE;
17590         ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
17591         ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
17592         ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
17593         ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
17594         ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
17595         ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
17596         ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
17597         ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
17598         ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
17599
17600         if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
17601                                  HOSTCC_MODE_CLRTICK_TXBD)) {
17602                 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
17603                 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
17604                 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
17605                 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
17606         }
17607
17608         if (tg3_flag(tp, 5705_PLUS)) {
17609                 ec->rx_coalesce_usecs_irq = 0;
17610                 ec->tx_coalesce_usecs_irq = 0;
17611                 ec->stats_block_coalesce_usecs = 0;
17612         }
17613 }
17614
17615 static int tg3_init_one(struct pci_dev *pdev,
17616                                   const struct pci_device_id *ent)
17617 {
17618         struct net_device *dev;
17619         struct tg3 *tp;
17620         int i, err;
17621         u32 sndmbx, rcvmbx, intmbx;
17622         char str[40];
17623         u64 dma_mask, persist_dma_mask;
17624         netdev_features_t features = 0;
17625
17626         printk_once(KERN_INFO "%s\n", version);
17627
17628         err = pci_enable_device(pdev);
17629         if (err) {
17630                 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
17631                 return err;
17632         }
17633
17634         err = pci_request_regions(pdev, DRV_MODULE_NAME);
17635         if (err) {
17636                 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
17637                 goto err_out_disable_pdev;
17638         }
17639
17640         pci_set_master(pdev);
17641
17642         dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
17643         if (!dev) {
17644                 err = -ENOMEM;
17645                 goto err_out_free_res;
17646         }
17647
17648         SET_NETDEV_DEV(dev, &pdev->dev);
17649
17650         tp = netdev_priv(dev);
17651         tp->pdev = pdev;
17652         tp->dev = dev;
17653         tp->rx_mode = TG3_DEF_RX_MODE;
17654         tp->tx_mode = TG3_DEF_TX_MODE;
17655         tp->irq_sync = 1;
17656         tp->pcierr_recovery = false;
17657
17658         if (tg3_debug > 0)
17659                 tp->msg_enable = tg3_debug;
17660         else
17661                 tp->msg_enable = TG3_DEF_MSG_ENABLE;
17662
17663         if (pdev_is_ssb_gige_core(pdev)) {
17664                 tg3_flag_set(tp, IS_SSB_CORE);
17665                 if (ssb_gige_must_flush_posted_writes(pdev))
17666                         tg3_flag_set(tp, FLUSH_POSTED_WRITES);
17667                 if (ssb_gige_one_dma_at_once(pdev))
17668                         tg3_flag_set(tp, ONE_DMA_AT_ONCE);
17669                 if (ssb_gige_have_roboswitch(pdev)) {
17670                         tg3_flag_set(tp, USE_PHYLIB);
17671                         tg3_flag_set(tp, ROBOSWITCH);
17672                 }
17673                 if (ssb_gige_is_rgmii(pdev))
17674                         tg3_flag_set(tp, RGMII_MODE);
17675         }
17676
17677         /* The word/byte swap controls here control register access byte
17678          * swapping.  DMA data byte swapping is controlled in the GRC_MODE
17679          * setting below.
17680          */
17681         tp->misc_host_ctrl =
17682                 MISC_HOST_CTRL_MASK_PCI_INT |
17683                 MISC_HOST_CTRL_WORD_SWAP |
17684                 MISC_HOST_CTRL_INDIR_ACCESS |
17685                 MISC_HOST_CTRL_PCISTATE_RW;
17686
17687         /* The NONFRM (non-frame) byte/word swap controls take effect
17688          * on descriptor entries, anything which isn't packet data.
17689          *
17690          * The StrongARM chips on the board (one for tx, one for rx)
17691          * are running in big-endian mode.
17692          */
17693         tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
17694                         GRC_MODE_WSWAP_NONFRM_DATA);
17695 #ifdef __BIG_ENDIAN
17696         tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
17697 #endif
17698         spin_lock_init(&tp->lock);
17699         spin_lock_init(&tp->indirect_lock);
17700         INIT_WORK(&tp->reset_task, tg3_reset_task);
17701
17702         tp->regs = pci_ioremap_bar(pdev, BAR_0);
17703         if (!tp->regs) {
17704                 dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
17705                 err = -ENOMEM;
17706                 goto err_out_free_dev;
17707         }
17708
17709         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
17710             tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
17711             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
17712             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
17713             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
17714             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
17715             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
17716             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
17717             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
17718             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
17719             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
17720             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
17721             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
17722             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
17723             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) {
17724                 tg3_flag_set(tp, ENABLE_APE);
17725                 tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
17726                 if (!tp->aperegs) {
17727                         dev_err(&pdev->dev,
17728                                 "Cannot map APE registers, aborting\n");
17729                         err = -ENOMEM;
17730                         goto err_out_iounmap;
17731                 }
17732         }
17733
17734         tp->rx_pending = TG3_DEF_RX_RING_PENDING;
17735         tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
17736
17737         dev->ethtool_ops = &tg3_ethtool_ops;
17738         dev->watchdog_timeo = TG3_TX_TIMEOUT;
17739         dev->netdev_ops = &tg3_netdev_ops;
17740         dev->irq = pdev->irq;
17741
17742         err = tg3_get_invariants(tp, ent);
17743         if (err) {
17744                 dev_err(&pdev->dev,
17745                         "Problem fetching invariants of chip, aborting\n");
17746                 goto err_out_apeunmap;
17747         }
17748
17749         /* The EPB bridge inside 5714, 5715, and 5780 and any
17750          * device behind the EPB cannot support DMA addresses > 40-bit.
17751          * On 64-bit systems with IOMMU, use 40-bit dma_mask.
17752          * On 64-bit systems without IOMMU, use 64-bit dma_mask and
17753          * do DMA address check in tg3_start_xmit().
17754          */
17755         if (tg3_flag(tp, IS_5788))
17756                 persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
17757         else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
17758                 persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
17759 #ifdef CONFIG_HIGHMEM
17760                 dma_mask = DMA_BIT_MASK(64);
17761 #endif
17762         } else
17763                 persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
17764
17765         /* Configure DMA attributes. */
17766         if (dma_mask > DMA_BIT_MASK(32)) {
17767                 err = pci_set_dma_mask(pdev, dma_mask);
17768                 if (!err) {
17769                         features |= NETIF_F_HIGHDMA;
17770                         err = pci_set_consistent_dma_mask(pdev,
17771                                                           persist_dma_mask);
17772                         if (err < 0) {
17773                                 dev_err(&pdev->dev, "Unable to obtain 64 bit "
17774                                         "DMA for consistent allocations\n");
17775                                 goto err_out_apeunmap;
17776                         }
17777                 }
17778         }
17779         if (err || dma_mask == DMA_BIT_MASK(32)) {
17780                 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
17781                 if (err) {
17782                         dev_err(&pdev->dev,
17783                                 "No usable DMA configuration, aborting\n");
17784                         goto err_out_apeunmap;
17785                 }
17786         }
17787
17788         tg3_init_bufmgr_config(tp);
17789
17790         /* 5700 B0 chips do not support checksumming correctly due
17791          * to hardware bugs.
17792          */
17793         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) {
17794                 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
17795
17796                 if (tg3_flag(tp, 5755_PLUS))
17797                         features |= NETIF_F_IPV6_CSUM;
17798         }
17799
17800         /* TSO is on by default on chips that support hardware TSO.
17801          * Firmware TSO on older chips gives lower performance, so it
17802          * is off by default, but can be enabled using ethtool.
17803          */
17804         if ((tg3_flag(tp, HW_TSO_1) ||
17805              tg3_flag(tp, HW_TSO_2) ||
17806              tg3_flag(tp, HW_TSO_3)) &&
17807             (features & NETIF_F_IP_CSUM))
17808                 features |= NETIF_F_TSO;
17809         if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
17810                 if (features & NETIF_F_IPV6_CSUM)
17811                         features |= NETIF_F_TSO6;
17812                 if (tg3_flag(tp, HW_TSO_3) ||
17813                     tg3_asic_rev(tp) == ASIC_REV_5761 ||
17814                     (tg3_asic_rev(tp) == ASIC_REV_5784 &&
17815                      tg3_chip_rev(tp) != CHIPREV_5784_AX) ||
17816                     tg3_asic_rev(tp) == ASIC_REV_5785 ||
17817                     tg3_asic_rev(tp) == ASIC_REV_57780)
17818                         features |= NETIF_F_TSO_ECN;
17819         }
17820
17821         dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX |
17822                          NETIF_F_HW_VLAN_CTAG_RX;
17823         dev->vlan_features |= features;
17824
17825         /*
17826          * Add loopback capability only for a subset of devices that support
17827          * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
17828          * loopback for the remaining devices.
17829          */
17830         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
17831             !tg3_flag(tp, CPMU_PRESENT))
17832                 /* Add the loopback capability */
17833                 features |= NETIF_F_LOOPBACK;
17834
17835         dev->hw_features |= features;
17836         dev->priv_flags |= IFF_UNICAST_FLT;
17837
17838         /* MTU range: 60 - 9000 or 1500, depending on hardware */
17839         dev->min_mtu = TG3_MIN_MTU;
17840         dev->max_mtu = TG3_MAX_MTU(tp);
17841
17842         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 &&
17843             !tg3_flag(tp, TSO_CAPABLE) &&
17844             !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
17845                 tg3_flag_set(tp, MAX_RXPEND_64);
17846                 tp->rx_pending = 63;
17847         }
17848
17849         err = tg3_get_device_address(tp);
17850         if (err) {
17851                 dev_err(&pdev->dev,
17852                         "Could not obtain valid ethernet address, aborting\n");
17853                 goto err_out_apeunmap;
17854         }
17855
17856         intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
17857         rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
17858         sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
17859         for (i = 0; i < tp->irq_max; i++) {
17860                 struct tg3_napi *tnapi = &tp->napi[i];
17861
17862                 tnapi->tp = tp;
17863                 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
17864
17865                 tnapi->int_mbox = intmbx;
17866                 if (i <= 4)
17867                         intmbx += 0x8;
17868                 else
17869                         intmbx += 0x4;
17870
17871                 tnapi->consmbox = rcvmbx;
17872                 tnapi->prodmbox = sndmbx;
17873
17874                 if (i)
17875                         tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
17876                 else
17877                         tnapi->coal_now = HOSTCC_MODE_NOW;
17878
17879                 if (!tg3_flag(tp, SUPPORT_MSIX))
17880                         break;
17881
17882                 /*
17883                  * If we support MSIX, we'll be using RSS.  If we're using
17884                  * RSS, the first vector only handles link interrupts and the
17885                  * remaining vectors handle rx and tx interrupts.  Reuse the
17886                  * mailbox values for the next iteration.  The values we setup
17887                  * above are still useful for the single vectored mode.
17888                  */
17889                 if (!i)
17890                         continue;
17891
17892                 rcvmbx += 0x8;
17893
17894                 if (sndmbx & 0x4)
17895                         sndmbx -= 0x4;
17896                 else
17897                         sndmbx += 0xc;
17898         }
17899
17900         /*
17901          * Reset chip in case UNDI or EFI driver did not shutdown
17902          * DMA self test will enable WDMAC and we'll see (spurious)
17903          * pending DMA on the PCI bus at that point.
17904          */
17905         if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
17906             (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
17907                 tg3_full_lock(tp, 0);
17908                 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
17909                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17910                 tg3_full_unlock(tp);
17911         }
17912
17913         err = tg3_test_dma(tp);
17914         if (err) {
17915                 dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
17916                 goto err_out_apeunmap;
17917         }
17918
17919         tg3_init_coal(tp);
17920
17921         pci_set_drvdata(pdev, dev);
17922
17923         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
17924             tg3_asic_rev(tp) == ASIC_REV_5720 ||
17925             tg3_asic_rev(tp) == ASIC_REV_5762)
17926                 tg3_flag_set(tp, PTP_CAPABLE);
17927
17928         tg3_timer_init(tp);
17929
17930         tg3_carrier_off(tp);
17931
17932         err = register_netdev(dev);
17933         if (err) {
17934                 dev_err(&pdev->dev, "Cannot register net device, aborting\n");
17935                 goto err_out_apeunmap;
17936         }
17937
17938         if (tg3_flag(tp, PTP_CAPABLE)) {
17939                 tg3_ptp_init(tp);
17940                 tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
17941                                                    &tp->pdev->dev);
17942                 if (IS_ERR(tp->ptp_clock))
17943                         tp->ptp_clock = NULL;
17944         }
17945
17946         netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
17947                     tp->board_part_number,
17948                     tg3_chip_rev_id(tp),
17949                     tg3_bus_string(tp, str),
17950                     dev->dev_addr);
17951
17952         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) {
17953                 char *ethtype;
17954
17955                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
17956                         ethtype = "10/100Base-TX";
17957                 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
17958                         ethtype = "1000Base-SX";
17959                 else
17960                         ethtype = "10/100/1000Base-T";
17961
17962                 netdev_info(dev, "attached PHY is %s (%s Ethernet) "
17963                             "(WireSpeed[%d], EEE[%d])\n",
17964                             tg3_phy_string(tp), ethtype,
17965                             (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
17966                             (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
17967         }
17968
17969         netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
17970                     (dev->features & NETIF_F_RXCSUM) != 0,
17971                     tg3_flag(tp, USE_LINKCHG_REG) != 0,
17972                     (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
17973                     tg3_flag(tp, ENABLE_ASF) != 0,
17974                     tg3_flag(tp, TSO_CAPABLE) != 0);
17975         netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
17976                     tp->dma_rwctrl,
17977                     pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
17978                     ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
17979
17980         pci_save_state(pdev);
17981
17982         return 0;
17983
17984 err_out_apeunmap:
17985         if (tp->aperegs) {
17986                 iounmap(tp->aperegs);
17987                 tp->aperegs = NULL;
17988         }
17989
17990 err_out_iounmap:
17991         if (tp->regs) {
17992                 iounmap(tp->regs);
17993                 tp->regs = NULL;
17994         }
17995
17996 err_out_free_dev:
17997         free_netdev(dev);
17998
17999 err_out_free_res:
18000         pci_release_regions(pdev);
18001
18002 err_out_disable_pdev:
18003         if (pci_is_enabled(pdev))
18004                 pci_disable_device(pdev);
18005         return err;
18006 }
18007
18008 static void tg3_remove_one(struct pci_dev *pdev)
18009 {
18010         struct net_device *dev = pci_get_drvdata(pdev);
18011
18012         if (dev) {
18013                 struct tg3 *tp = netdev_priv(dev);
18014
18015                 tg3_ptp_fini(tp);
18016
18017                 release_firmware(tp->fw);
18018
18019                 tg3_reset_task_cancel(tp);
18020
18021                 if (tg3_flag(tp, USE_PHYLIB)) {
18022                         tg3_phy_fini(tp);
18023                         tg3_mdio_fini(tp);
18024                 }
18025
18026                 unregister_netdev(dev);
18027                 if (tp->aperegs) {
18028                         iounmap(tp->aperegs);
18029                         tp->aperegs = NULL;
18030                 }
18031                 if (tp->regs) {
18032                         iounmap(tp->regs);
18033                         tp->regs = NULL;
18034                 }
18035                 free_netdev(dev);
18036                 pci_release_regions(pdev);
18037                 pci_disable_device(pdev);
18038         }
18039 }
18040
18041 #ifdef CONFIG_PM_SLEEP
18042 static int tg3_suspend(struct device *device)
18043 {
18044         struct net_device *dev = dev_get_drvdata(device);
18045         struct tg3 *tp = netdev_priv(dev);
18046         int err = 0;
18047
18048         rtnl_lock();
18049
18050         if (!netif_running(dev))
18051                 goto unlock;
18052
18053         tg3_reset_task_cancel(tp);
18054         tg3_phy_stop(tp);
18055         tg3_netif_stop(tp);
18056
18057         tg3_timer_stop(tp);
18058
18059         tg3_full_lock(tp, 1);
18060         tg3_disable_ints(tp);
18061         tg3_full_unlock(tp);
18062
18063         netif_device_detach(dev);
18064
18065         tg3_full_lock(tp, 0);
18066         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
18067         tg3_flag_clear(tp, INIT_COMPLETE);
18068         tg3_full_unlock(tp);
18069
18070         err = tg3_power_down_prepare(tp);
18071         if (err) {
18072                 int err2;
18073
18074                 tg3_full_lock(tp, 0);
18075
18076                 tg3_flag_set(tp, INIT_COMPLETE);
18077                 err2 = tg3_restart_hw(tp, true);
18078                 if (err2)
18079                         goto out;
18080
18081                 tg3_timer_start(tp);
18082
18083                 netif_device_attach(dev);
18084                 tg3_netif_start(tp);
18085
18086 out:
18087                 tg3_full_unlock(tp);
18088
18089                 if (!err2)
18090                         tg3_phy_start(tp);
18091         }
18092
18093 unlock:
18094         rtnl_unlock();
18095         return err;
18096 }
18097
18098 static int tg3_resume(struct device *device)
18099 {
18100         struct net_device *dev = dev_get_drvdata(device);
18101         struct tg3 *tp = netdev_priv(dev);
18102         int err = 0;
18103
18104         rtnl_lock();
18105
18106         if (!netif_running(dev))
18107                 goto unlock;
18108
18109         netif_device_attach(dev);
18110
18111         tg3_full_lock(tp, 0);
18112
18113         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18114
18115         tg3_flag_set(tp, INIT_COMPLETE);
18116         err = tg3_restart_hw(tp,
18117                              !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
18118         if (err)
18119                 goto out;
18120
18121         tg3_timer_start(tp);
18122
18123         tg3_netif_start(tp);
18124
18125 out:
18126         tg3_full_unlock(tp);
18127
18128         if (!err)
18129                 tg3_phy_start(tp);
18130
18131 unlock:
18132         rtnl_unlock();
18133         return err;
18134 }
18135 #endif /* CONFIG_PM_SLEEP */
18136
18137 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
18138
18139 static void tg3_shutdown(struct pci_dev *pdev)
18140 {
18141         struct net_device *dev = pci_get_drvdata(pdev);
18142         struct tg3 *tp = netdev_priv(dev);
18143
18144         rtnl_lock();
18145         netif_device_detach(dev);
18146
18147         if (netif_running(dev))
18148                 dev_close(dev);
18149
18150         if (system_state == SYSTEM_POWER_OFF)
18151                 tg3_power_down(tp);
18152
18153         rtnl_unlock();
18154 }
18155
18156 /**
18157  * tg3_io_error_detected - called when PCI error is detected
18158  * @pdev: Pointer to PCI device
18159  * @state: The current pci connection state
18160  *
18161  * This function is called after a PCI bus error affecting
18162  * this device has been detected.
18163  */
18164 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
18165                                               pci_channel_state_t state)
18166 {
18167         struct net_device *netdev = pci_get_drvdata(pdev);
18168         struct tg3 *tp = netdev_priv(netdev);
18169         pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
18170
18171         netdev_info(netdev, "PCI I/O error detected\n");
18172
18173         rtnl_lock();
18174
18175         /* We probably don't have netdev yet */
18176         if (!netdev || !netif_running(netdev))
18177                 goto done;
18178
18179         /* We needn't recover from permanent error */
18180         if (state == pci_channel_io_frozen)
18181                 tp->pcierr_recovery = true;
18182
18183         tg3_phy_stop(tp);
18184
18185         tg3_netif_stop(tp);
18186
18187         tg3_timer_stop(tp);
18188
18189         /* Want to make sure that the reset task doesn't run */
18190         tg3_reset_task_cancel(tp);
18191
18192         netif_device_detach(netdev);
18193
18194         /* Clean up software state, even if MMIO is blocked */
18195         tg3_full_lock(tp, 0);
18196         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
18197         tg3_full_unlock(tp);
18198
18199 done:
18200         if (state == pci_channel_io_perm_failure) {
18201                 if (netdev) {
18202                         tg3_napi_enable(tp);
18203                         dev_close(netdev);
18204                 }
18205                 err = PCI_ERS_RESULT_DISCONNECT;
18206         } else {
18207                 pci_disable_device(pdev);
18208         }
18209
18210         rtnl_unlock();
18211
18212         return err;
18213 }
18214
18215 /**
18216  * tg3_io_slot_reset - called after the pci bus has been reset.
18217  * @pdev: Pointer to PCI device
18218  *
18219  * Restart the card from scratch, as if from a cold-boot.
18220  * At this point, the card has exprienced a hard reset,
18221  * followed by fixups by BIOS, and has its config space
18222  * set up identically to what it was at cold boot.
18223  */
18224 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
18225 {
18226         struct net_device *netdev = pci_get_drvdata(pdev);
18227         struct tg3 *tp = netdev_priv(netdev);
18228         pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
18229         int err;
18230
18231         rtnl_lock();
18232
18233         if (pci_enable_device(pdev)) {
18234                 dev_err(&pdev->dev,
18235                         "Cannot re-enable PCI device after reset.\n");
18236                 goto done;
18237         }
18238
18239         pci_set_master(pdev);
18240         pci_restore_state(pdev);
18241         pci_save_state(pdev);
18242
18243         if (!netdev || !netif_running(netdev)) {
18244                 rc = PCI_ERS_RESULT_RECOVERED;
18245                 goto done;
18246         }
18247
18248         err = tg3_power_up(tp);
18249         if (err)
18250                 goto done;
18251
18252         rc = PCI_ERS_RESULT_RECOVERED;
18253
18254 done:
18255         if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) {
18256                 tg3_napi_enable(tp);
18257                 dev_close(netdev);
18258         }
18259         rtnl_unlock();
18260
18261         return rc;
18262 }
18263
18264 /**
18265  * tg3_io_resume - called when traffic can start flowing again.
18266  * @pdev: Pointer to PCI device
18267  *
18268  * This callback is called when the error recovery driver tells
18269  * us that its OK to resume normal operation.
18270  */
18271 static void tg3_io_resume(struct pci_dev *pdev)
18272 {
18273         struct net_device *netdev = pci_get_drvdata(pdev);
18274         struct tg3 *tp = netdev_priv(netdev);
18275         int err;
18276
18277         rtnl_lock();
18278
18279         if (!netdev || !netif_running(netdev))
18280                 goto done;
18281
18282         tg3_full_lock(tp, 0);
18283         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18284         tg3_flag_set(tp, INIT_COMPLETE);
18285         err = tg3_restart_hw(tp, true);
18286         if (err) {
18287                 tg3_full_unlock(tp);
18288                 netdev_err(netdev, "Cannot restart hardware after reset.\n");
18289                 goto done;
18290         }
18291
18292         netif_device_attach(netdev);
18293
18294         tg3_timer_start(tp);
18295
18296         tg3_netif_start(tp);
18297
18298         tg3_full_unlock(tp);
18299
18300         tg3_phy_start(tp);
18301
18302 done:
18303         tp->pcierr_recovery = false;
18304         rtnl_unlock();
18305 }
18306
18307 static const struct pci_error_handlers tg3_err_handler = {
18308         .error_detected = tg3_io_error_detected,
18309         .slot_reset     = tg3_io_slot_reset,
18310         .resume         = tg3_io_resume
18311 };
18312
18313 static struct pci_driver tg3_driver = {
18314         .name           = DRV_MODULE_NAME,
18315         .id_table       = tg3_pci_tbl,
18316         .probe          = tg3_init_one,
18317         .remove         = tg3_remove_one,
18318         .err_handler    = &tg3_err_handler,
18319         .driver.pm      = &tg3_pm_ops,
18320         .shutdown       = tg3_shutdown,
18321 };
18322
18323 module_pci_driver(tg3_driver);