Merge tag 'perf-urgent-for-mingo-4.14-20170928' of git://git.kernel.org/pub/scm/linux...
[sfrench/cifs-2.6.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-2014 Broadcom Corporation.
8  *
9  * Firmware is:
10  *      Derived from proprietary unpublished source code,
11  *      Copyright (C) 2000-2003 Broadcom Corporation.
12  *
13  *      Permission is hereby granted for the distribution of this firmware
14  *      data in hexadecimal or equivalent format, provided this copyright
15  *      notice is accompanying it.
16  */
17
18
19 #include <linux/module.h>
20 #include <linux/moduleparam.h>
21 #include <linux/stringify.h>
22 #include <linux/kernel.h>
23 #include <linux/sched/signal.h>
24 #include <linux/types.h>
25 #include <linux/compiler.h>
26 #include <linux/slab.h>
27 #include <linux/delay.h>
28 #include <linux/in.h>
29 #include <linux/interrupt.h>
30 #include <linux/ioport.h>
31 #include <linux/pci.h>
32 #include <linux/netdevice.h>
33 #include <linux/etherdevice.h>
34 #include <linux/skbuff.h>
35 #include <linux/ethtool.h>
36 #include <linux/mdio.h>
37 #include <linux/mii.h>
38 #include <linux/phy.h>
39 #include <linux/brcmphy.h>
40 #include <linux/if.h>
41 #include <linux/if_vlan.h>
42 #include <linux/ip.h>
43 #include <linux/tcp.h>
44 #include <linux/workqueue.h>
45 #include <linux/prefetch.h>
46 #include <linux/dma-mapping.h>
47 #include <linux/firmware.h>
48 #include <linux/ssb/ssb_driver_gige.h>
49 #include <linux/hwmon.h>
50 #include <linux/hwmon-sysfs.h>
51
52 #include <net/checksum.h>
53 #include <net/ip.h>
54
55 #include <linux/io.h>
56 #include <asm/byteorder.h>
57 #include <linux/uaccess.h>
58
59 #include <uapi/linux/net_tstamp.h>
60 #include <linux/ptp_clock_kernel.h>
61
62 #ifdef CONFIG_SPARC
63 #include <asm/idprom.h>
64 #include <asm/prom.h>
65 #endif
66
67 #define BAR_0   0
68 #define BAR_2   2
69
70 #include "tg3.h"
71
72 /* Functions & macros to verify TG3_FLAGS types */
73
74 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
75 {
76         return test_bit(flag, bits);
77 }
78
79 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
80 {
81         set_bit(flag, bits);
82 }
83
84 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
85 {
86         clear_bit(flag, bits);
87 }
88
89 #define tg3_flag(tp, flag)                              \
90         _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
91 #define tg3_flag_set(tp, flag)                          \
92         _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
93 #define tg3_flag_clear(tp, flag)                        \
94         _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
95
96 #define DRV_MODULE_NAME         "tg3"
97 #define TG3_MAJ_NUM                     3
98 #define TG3_MIN_NUM                     137
99 #define DRV_MODULE_VERSION      \
100         __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
101 #define DRV_MODULE_RELDATE      "May 11, 2014"
102
103 #define RESET_KIND_SHUTDOWN     0
104 #define RESET_KIND_INIT         1
105 #define RESET_KIND_SUSPEND      2
106
107 #define TG3_DEF_RX_MODE         0
108 #define TG3_DEF_TX_MODE         0
109 #define TG3_DEF_MSG_ENABLE        \
110         (NETIF_MSG_DRV          | \
111          NETIF_MSG_PROBE        | \
112          NETIF_MSG_LINK         | \
113          NETIF_MSG_TIMER        | \
114          NETIF_MSG_IFDOWN       | \
115          NETIF_MSG_IFUP         | \
116          NETIF_MSG_RX_ERR       | \
117          NETIF_MSG_TX_ERR)
118
119 #define TG3_GRC_LCLCTL_PWRSW_DELAY      100
120
121 /* length of time before we decide the hardware is borked,
122  * and dev->tx_timeout() should be called to fix the problem
123  */
124
125 #define TG3_TX_TIMEOUT                  (5 * HZ)
126
127 /* hardware minimum and maximum for a single frame's data payload */
128 #define TG3_MIN_MTU                     ETH_ZLEN
129 #define TG3_MAX_MTU(tp) \
130         (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
131
132 /* These numbers seem to be hard coded in the NIC firmware somehow.
133  * You can't change the ring sizes, but you can change where you place
134  * them in the NIC onboard memory.
135  */
136 #define TG3_RX_STD_RING_SIZE(tp) \
137         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
138          TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
139 #define TG3_DEF_RX_RING_PENDING         200
140 #define TG3_RX_JMB_RING_SIZE(tp) \
141         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
142          TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
143 #define TG3_DEF_RX_JUMBO_RING_PENDING   100
144
145 /* Do not place this n-ring entries value into the tp struct itself,
146  * we really want to expose these constants to GCC so that modulo et
147  * al.  operations are done with shifts and masks instead of with
148  * hw multiply/modulo instructions.  Another solution would be to
149  * replace things like '% foo' with '& (foo - 1)'.
150  */
151
152 #define TG3_TX_RING_SIZE                512
153 #define TG3_DEF_TX_RING_PENDING         (TG3_TX_RING_SIZE - 1)
154
155 #define TG3_RX_STD_RING_BYTES(tp) \
156         (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
157 #define TG3_RX_JMB_RING_BYTES(tp) \
158         (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
159 #define TG3_RX_RCB_RING_BYTES(tp) \
160         (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
161 #define TG3_TX_RING_BYTES       (sizeof(struct tg3_tx_buffer_desc) * \
162                                  TG3_TX_RING_SIZE)
163 #define NEXT_TX(N)              (((N) + 1) & (TG3_TX_RING_SIZE - 1))
164
165 #define TG3_DMA_BYTE_ENAB               64
166
167 #define TG3_RX_STD_DMA_SZ               1536
168 #define TG3_RX_JMB_DMA_SZ               9046
169
170 #define TG3_RX_DMA_TO_MAP_SZ(x)         ((x) + TG3_DMA_BYTE_ENAB)
171
172 #define TG3_RX_STD_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
173 #define TG3_RX_JMB_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
174
175 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
176         (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
177
178 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
179         (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
180
181 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
182  * that are at least dword aligned when used in PCIX mode.  The driver
183  * works around this bug by double copying the packet.  This workaround
184  * is built into the normal double copy length check for efficiency.
185  *
186  * However, the double copy is only necessary on those architectures
187  * where unaligned memory accesses are inefficient.  For those architectures
188  * where unaligned memory accesses incur little penalty, we can reintegrate
189  * the 5701 in the normal rx path.  Doing so saves a device structure
190  * dereference by hardcoding the double copy threshold in place.
191  */
192 #define TG3_RX_COPY_THRESHOLD           256
193 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
194         #define TG3_RX_COPY_THRESH(tp)  TG3_RX_COPY_THRESHOLD
195 #else
196         #define TG3_RX_COPY_THRESH(tp)  ((tp)->rx_copy_thresh)
197 #endif
198
199 #if (NET_IP_ALIGN != 0)
200 #define TG3_RX_OFFSET(tp)       ((tp)->rx_offset)
201 #else
202 #define TG3_RX_OFFSET(tp)       (NET_SKB_PAD)
203 #endif
204
205 /* minimum number of free TX descriptors required to wake up TX process */
206 #define TG3_TX_WAKEUP_THRESH(tnapi)             ((tnapi)->tx_pending / 4)
207 #define TG3_TX_BD_DMA_MAX_2K            2048
208 #define TG3_TX_BD_DMA_MAX_4K            4096
209
210 #define TG3_RAW_IP_ALIGN 2
211
212 #define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3)
213 #define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1)
214
215 #define TG3_FW_UPDATE_TIMEOUT_SEC       5
216 #define TG3_FW_UPDATE_FREQ_SEC          (TG3_FW_UPDATE_TIMEOUT_SEC / 2)
217
218 #define FIRMWARE_TG3            "tigon/tg3.bin"
219 #define FIRMWARE_TG357766       "tigon/tg357766.bin"
220 #define FIRMWARE_TG3TSO         "tigon/tg3_tso.bin"
221 #define FIRMWARE_TG3TSO5        "tigon/tg3_tso5.bin"
222
223 static char version[] =
224         DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")";
225
226 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
227 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
228 MODULE_LICENSE("GPL");
229 MODULE_VERSION(DRV_MODULE_VERSION);
230 MODULE_FIRMWARE(FIRMWARE_TG3);
231 MODULE_FIRMWARE(FIRMWARE_TG3TSO);
232 MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
233
234 static int tg3_debug = -1;      /* -1 == use TG3_DEF_MSG_ENABLE as value */
235 module_param(tg3_debug, int, 0);
236 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
237
238 #define TG3_DRV_DATA_FLAG_10_100_ONLY   0x0001
239 #define TG3_DRV_DATA_FLAG_5705_10_100   0x0002
240
241 static const struct pci_device_id tg3_pci_tbl[] = {
242         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
243         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
244         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
245         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
246         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
247         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
248         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
249         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
250         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
251         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
252         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
253         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
254         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
255         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
256         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
257         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
258         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
259         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
260         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
261          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
262                         TG3_DRV_DATA_FLAG_5705_10_100},
263         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2),
264          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
265                         TG3_DRV_DATA_FLAG_5705_10_100},
266         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
267         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
268          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
269                         TG3_DRV_DATA_FLAG_5705_10_100},
270         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
271         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
272         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
273         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
274         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
275         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
276          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
277         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
278         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
279         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
280         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
281         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
282          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
283         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
284         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
285         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
286         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
287         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
288         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
289         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
290         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
291                         PCI_VENDOR_ID_LENOVO,
292                         TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
293          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
294         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
295         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
296          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
297         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
298         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
299         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
300         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
301         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
302         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
303         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
304         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
305         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
306         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
307         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
308         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
309         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
310         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
311         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
312         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
313         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
314         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
315         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
316                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
317          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
318         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
319                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
320          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
321         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
322         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
323         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
324          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
325         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
326         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
327         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
328         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
329         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
330         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
331         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
332         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
333         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
334          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
335         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
336          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
337         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
338         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
339         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
340         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
341         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)},
342         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)},
343         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)},
344         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)},
345         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)},
346         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)},
347         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
348         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},
349         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
350         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
351         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
352         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
353         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
354         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
355         {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
356         {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
357         {}
358 };
359
360 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
361
362 static const struct {
363         const char string[ETH_GSTRING_LEN];
364 } ethtool_stats_keys[] = {
365         { "rx_octets" },
366         { "rx_fragments" },
367         { "rx_ucast_packets" },
368         { "rx_mcast_packets" },
369         { "rx_bcast_packets" },
370         { "rx_fcs_errors" },
371         { "rx_align_errors" },
372         { "rx_xon_pause_rcvd" },
373         { "rx_xoff_pause_rcvd" },
374         { "rx_mac_ctrl_rcvd" },
375         { "rx_xoff_entered" },
376         { "rx_frame_too_long_errors" },
377         { "rx_jabbers" },
378         { "rx_undersize_packets" },
379         { "rx_in_length_errors" },
380         { "rx_out_length_errors" },
381         { "rx_64_or_less_octet_packets" },
382         { "rx_65_to_127_octet_packets" },
383         { "rx_128_to_255_octet_packets" },
384         { "rx_256_to_511_octet_packets" },
385         { "rx_512_to_1023_octet_packets" },
386         { "rx_1024_to_1522_octet_packets" },
387         { "rx_1523_to_2047_octet_packets" },
388         { "rx_2048_to_4095_octet_packets" },
389         { "rx_4096_to_8191_octet_packets" },
390         { "rx_8192_to_9022_octet_packets" },
391
392         { "tx_octets" },
393         { "tx_collisions" },
394
395         { "tx_xon_sent" },
396         { "tx_xoff_sent" },
397         { "tx_flow_control" },
398         { "tx_mac_errors" },
399         { "tx_single_collisions" },
400         { "tx_mult_collisions" },
401         { "tx_deferred" },
402         { "tx_excessive_collisions" },
403         { "tx_late_collisions" },
404         { "tx_collide_2times" },
405         { "tx_collide_3times" },
406         { "tx_collide_4times" },
407         { "tx_collide_5times" },
408         { "tx_collide_6times" },
409         { "tx_collide_7times" },
410         { "tx_collide_8times" },
411         { "tx_collide_9times" },
412         { "tx_collide_10times" },
413         { "tx_collide_11times" },
414         { "tx_collide_12times" },
415         { "tx_collide_13times" },
416         { "tx_collide_14times" },
417         { "tx_collide_15times" },
418         { "tx_ucast_packets" },
419         { "tx_mcast_packets" },
420         { "tx_bcast_packets" },
421         { "tx_carrier_sense_errors" },
422         { "tx_discards" },
423         { "tx_errors" },
424
425         { "dma_writeq_full" },
426         { "dma_write_prioq_full" },
427         { "rxbds_empty" },
428         { "rx_discards" },
429         { "rx_errors" },
430         { "rx_threshold_hit" },
431
432         { "dma_readq_full" },
433         { "dma_read_prioq_full" },
434         { "tx_comp_queue_full" },
435
436         { "ring_set_send_prod_index" },
437         { "ring_status_update" },
438         { "nic_irqs" },
439         { "nic_avoided_irqs" },
440         { "nic_tx_threshold_hit" },
441
442         { "mbuf_lwm_thresh_hit" },
443 };
444
445 #define TG3_NUM_STATS   ARRAY_SIZE(ethtool_stats_keys)
446 #define TG3_NVRAM_TEST          0
447 #define TG3_LINK_TEST           1
448 #define TG3_REGISTER_TEST       2
449 #define TG3_MEMORY_TEST         3
450 #define TG3_MAC_LOOPB_TEST      4
451 #define TG3_PHY_LOOPB_TEST      5
452 #define TG3_EXT_LOOPB_TEST      6
453 #define TG3_INTERRUPT_TEST      7
454
455
456 static const struct {
457         const char string[ETH_GSTRING_LEN];
458 } ethtool_test_keys[] = {
459         [TG3_NVRAM_TEST]        = { "nvram test        (online) " },
460         [TG3_LINK_TEST]         = { "link test         (online) " },
461         [TG3_REGISTER_TEST]     = { "register test     (offline)" },
462         [TG3_MEMORY_TEST]       = { "memory test       (offline)" },
463         [TG3_MAC_LOOPB_TEST]    = { "mac loopback test (offline)" },
464         [TG3_PHY_LOOPB_TEST]    = { "phy loopback test (offline)" },
465         [TG3_EXT_LOOPB_TEST]    = { "ext loopback test (offline)" },
466         [TG3_INTERRUPT_TEST]    = { "interrupt test    (offline)" },
467 };
468
469 #define TG3_NUM_TEST    ARRAY_SIZE(ethtool_test_keys)
470
471
472 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
473 {
474         writel(val, tp->regs + off);
475 }
476
477 static u32 tg3_read32(struct tg3 *tp, u32 off)
478 {
479         return readl(tp->regs + off);
480 }
481
482 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
483 {
484         writel(val, tp->aperegs + off);
485 }
486
487 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
488 {
489         return readl(tp->aperegs + off);
490 }
491
492 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
493 {
494         unsigned long flags;
495
496         spin_lock_irqsave(&tp->indirect_lock, flags);
497         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
498         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
499         spin_unlock_irqrestore(&tp->indirect_lock, flags);
500 }
501
502 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
503 {
504         writel(val, tp->regs + off);
505         readl(tp->regs + off);
506 }
507
508 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
509 {
510         unsigned long flags;
511         u32 val;
512
513         spin_lock_irqsave(&tp->indirect_lock, flags);
514         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
515         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
516         spin_unlock_irqrestore(&tp->indirect_lock, flags);
517         return val;
518 }
519
520 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
521 {
522         unsigned long flags;
523
524         if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
525                 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
526                                        TG3_64BIT_REG_LOW, val);
527                 return;
528         }
529         if (off == TG3_RX_STD_PROD_IDX_REG) {
530                 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
531                                        TG3_64BIT_REG_LOW, val);
532                 return;
533         }
534
535         spin_lock_irqsave(&tp->indirect_lock, flags);
536         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
537         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
538         spin_unlock_irqrestore(&tp->indirect_lock, flags);
539
540         /* In indirect mode when disabling interrupts, we also need
541          * to clear the interrupt bit in the GRC local ctrl register.
542          */
543         if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
544             (val == 0x1)) {
545                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
546                                        tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
547         }
548 }
549
550 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
551 {
552         unsigned long flags;
553         u32 val;
554
555         spin_lock_irqsave(&tp->indirect_lock, flags);
556         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
557         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
558         spin_unlock_irqrestore(&tp->indirect_lock, flags);
559         return val;
560 }
561
562 /* usec_wait specifies the wait time in usec when writing to certain registers
563  * where it is unsafe to read back the register without some delay.
564  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
565  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
566  */
567 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
568 {
569         if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
570                 /* Non-posted methods */
571                 tp->write32(tp, off, val);
572         else {
573                 /* Posted method */
574                 tg3_write32(tp, off, val);
575                 if (usec_wait)
576                         udelay(usec_wait);
577                 tp->read32(tp, off);
578         }
579         /* Wait again after the read for the posted method to guarantee that
580          * the wait time is met.
581          */
582         if (usec_wait)
583                 udelay(usec_wait);
584 }
585
586 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
587 {
588         tp->write32_mbox(tp, off, val);
589         if (tg3_flag(tp, FLUSH_POSTED_WRITES) ||
590             (!tg3_flag(tp, MBOX_WRITE_REORDER) &&
591              !tg3_flag(tp, ICH_WORKAROUND)))
592                 tp->read32_mbox(tp, off);
593 }
594
595 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
596 {
597         void __iomem *mbox = tp->regs + off;
598         writel(val, mbox);
599         if (tg3_flag(tp, TXD_MBOX_HWBUG))
600                 writel(val, mbox);
601         if (tg3_flag(tp, MBOX_WRITE_REORDER) ||
602             tg3_flag(tp, FLUSH_POSTED_WRITES))
603                 readl(mbox);
604 }
605
606 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
607 {
608         return readl(tp->regs + off + GRCMBOX_BASE);
609 }
610
611 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
612 {
613         writel(val, tp->regs + off + GRCMBOX_BASE);
614 }
615
616 #define tw32_mailbox(reg, val)          tp->write32_mbox(tp, reg, val)
617 #define tw32_mailbox_f(reg, val)        tw32_mailbox_flush(tp, (reg), (val))
618 #define tw32_rx_mbox(reg, val)          tp->write32_rx_mbox(tp, reg, val)
619 #define tw32_tx_mbox(reg, val)          tp->write32_tx_mbox(tp, reg, val)
620 #define tr32_mailbox(reg)               tp->read32_mbox(tp, reg)
621
622 #define tw32(reg, val)                  tp->write32(tp, reg, val)
623 #define tw32_f(reg, val)                _tw32_flush(tp, (reg), (val), 0)
624 #define tw32_wait_f(reg, val, us)       _tw32_flush(tp, (reg), (val), (us))
625 #define tr32(reg)                       tp->read32(tp, reg)
626
627 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
628 {
629         unsigned long flags;
630
631         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
632             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
633                 return;
634
635         spin_lock_irqsave(&tp->indirect_lock, flags);
636         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
637                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
638                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
639
640                 /* Always leave this as zero. */
641                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
642         } else {
643                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
644                 tw32_f(TG3PCI_MEM_WIN_DATA, val);
645
646                 /* Always leave this as zero. */
647                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
648         }
649         spin_unlock_irqrestore(&tp->indirect_lock, flags);
650 }
651
652 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
653 {
654         unsigned long flags;
655
656         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
657             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
658                 *val = 0;
659                 return;
660         }
661
662         spin_lock_irqsave(&tp->indirect_lock, flags);
663         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
664                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
665                 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
666
667                 /* Always leave this as zero. */
668                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
669         } else {
670                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
671                 *val = tr32(TG3PCI_MEM_WIN_DATA);
672
673                 /* Always leave this as zero. */
674                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
675         }
676         spin_unlock_irqrestore(&tp->indirect_lock, flags);
677 }
678
679 static void tg3_ape_lock_init(struct tg3 *tp)
680 {
681         int i;
682         u32 regbase, bit;
683
684         if (tg3_asic_rev(tp) == ASIC_REV_5761)
685                 regbase = TG3_APE_LOCK_GRANT;
686         else
687                 regbase = TG3_APE_PER_LOCK_GRANT;
688
689         /* Make sure the driver hasn't any stale locks. */
690         for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
691                 switch (i) {
692                 case TG3_APE_LOCK_PHY0:
693                 case TG3_APE_LOCK_PHY1:
694                 case TG3_APE_LOCK_PHY2:
695                 case TG3_APE_LOCK_PHY3:
696                         bit = APE_LOCK_GRANT_DRIVER;
697                         break;
698                 default:
699                         if (!tp->pci_fn)
700                                 bit = APE_LOCK_GRANT_DRIVER;
701                         else
702                                 bit = 1 << tp->pci_fn;
703                 }
704                 tg3_ape_write32(tp, regbase + 4 * i, bit);
705         }
706
707 }
708
709 static int tg3_ape_lock(struct tg3 *tp, int locknum)
710 {
711         int i, off;
712         int ret = 0;
713         u32 status, req, gnt, bit;
714
715         if (!tg3_flag(tp, ENABLE_APE))
716                 return 0;
717
718         switch (locknum) {
719         case TG3_APE_LOCK_GPIO:
720                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
721                         return 0;
722         case TG3_APE_LOCK_GRC:
723         case TG3_APE_LOCK_MEM:
724                 if (!tp->pci_fn)
725                         bit = APE_LOCK_REQ_DRIVER;
726                 else
727                         bit = 1 << tp->pci_fn;
728                 break;
729         case TG3_APE_LOCK_PHY0:
730         case TG3_APE_LOCK_PHY1:
731         case TG3_APE_LOCK_PHY2:
732         case TG3_APE_LOCK_PHY3:
733                 bit = APE_LOCK_REQ_DRIVER;
734                 break;
735         default:
736                 return -EINVAL;
737         }
738
739         if (tg3_asic_rev(tp) == ASIC_REV_5761) {
740                 req = TG3_APE_LOCK_REQ;
741                 gnt = TG3_APE_LOCK_GRANT;
742         } else {
743                 req = TG3_APE_PER_LOCK_REQ;
744                 gnt = TG3_APE_PER_LOCK_GRANT;
745         }
746
747         off = 4 * locknum;
748
749         tg3_ape_write32(tp, req + off, bit);
750
751         /* Wait for up to 1 millisecond to acquire lock. */
752         for (i = 0; i < 100; i++) {
753                 status = tg3_ape_read32(tp, gnt + off);
754                 if (status == bit)
755                         break;
756                 if (pci_channel_offline(tp->pdev))
757                         break;
758
759                 udelay(10);
760         }
761
762         if (status != bit) {
763                 /* Revoke the lock request. */
764                 tg3_ape_write32(tp, gnt + off, bit);
765                 ret = -EBUSY;
766         }
767
768         return ret;
769 }
770
771 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
772 {
773         u32 gnt, bit;
774
775         if (!tg3_flag(tp, ENABLE_APE))
776                 return;
777
778         switch (locknum) {
779         case TG3_APE_LOCK_GPIO:
780                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
781                         return;
782         case TG3_APE_LOCK_GRC:
783         case TG3_APE_LOCK_MEM:
784                 if (!tp->pci_fn)
785                         bit = APE_LOCK_GRANT_DRIVER;
786                 else
787                         bit = 1 << tp->pci_fn;
788                 break;
789         case TG3_APE_LOCK_PHY0:
790         case TG3_APE_LOCK_PHY1:
791         case TG3_APE_LOCK_PHY2:
792         case TG3_APE_LOCK_PHY3:
793                 bit = APE_LOCK_GRANT_DRIVER;
794                 break;
795         default:
796                 return;
797         }
798
799         if (tg3_asic_rev(tp) == ASIC_REV_5761)
800                 gnt = TG3_APE_LOCK_GRANT;
801         else
802                 gnt = TG3_APE_PER_LOCK_GRANT;
803
804         tg3_ape_write32(tp, gnt + 4 * locknum, bit);
805 }
806
807 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
808 {
809         u32 apedata;
810
811         while (timeout_us) {
812                 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
813                         return -EBUSY;
814
815                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
816                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
817                         break;
818
819                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
820
821                 udelay(10);
822                 timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
823         }
824
825         return timeout_us ? 0 : -EBUSY;
826 }
827
828 #ifdef CONFIG_TIGON3_HWMON
829 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
830 {
831         u32 i, apedata;
832
833         for (i = 0; i < timeout_us / 10; i++) {
834                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
835
836                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
837                         break;
838
839                 udelay(10);
840         }
841
842         return i == timeout_us / 10;
843 }
844
845 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
846                                    u32 len)
847 {
848         int err;
849         u32 i, bufoff, msgoff, maxlen, apedata;
850
851         if (!tg3_flag(tp, APE_HAS_NCSI))
852                 return 0;
853
854         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
855         if (apedata != APE_SEG_SIG_MAGIC)
856                 return -ENODEV;
857
858         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
859         if (!(apedata & APE_FW_STATUS_READY))
860                 return -EAGAIN;
861
862         bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
863                  TG3_APE_SHMEM_BASE;
864         msgoff = bufoff + 2 * sizeof(u32);
865         maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
866
867         while (len) {
868                 u32 length;
869
870                 /* Cap xfer sizes to scratchpad limits. */
871                 length = (len > maxlen) ? maxlen : len;
872                 len -= length;
873
874                 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
875                 if (!(apedata & APE_FW_STATUS_READY))
876                         return -EAGAIN;
877
878                 /* Wait for up to 1 msec for APE to service previous event. */
879                 err = tg3_ape_event_lock(tp, 1000);
880                 if (err)
881                         return err;
882
883                 apedata = APE_EVENT_STATUS_DRIVER_EVNT |
884                           APE_EVENT_STATUS_SCRTCHPD_READ |
885                           APE_EVENT_STATUS_EVENT_PENDING;
886                 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
887
888                 tg3_ape_write32(tp, bufoff, base_off);
889                 tg3_ape_write32(tp, bufoff + sizeof(u32), length);
890
891                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
892                 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
893
894                 base_off += length;
895
896                 if (tg3_ape_wait_for_event(tp, 30000))
897                         return -EAGAIN;
898
899                 for (i = 0; length; i += 4, length -= 4) {
900                         u32 val = tg3_ape_read32(tp, msgoff + i);
901                         memcpy(data, &val, sizeof(u32));
902                         data++;
903                 }
904         }
905
906         return 0;
907 }
908 #endif
909
910 static int tg3_ape_send_event(struct tg3 *tp, u32 event)
911 {
912         int err;
913         u32 apedata;
914
915         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
916         if (apedata != APE_SEG_SIG_MAGIC)
917                 return -EAGAIN;
918
919         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
920         if (!(apedata & APE_FW_STATUS_READY))
921                 return -EAGAIN;
922
923         /* Wait for up to 1 millisecond for APE to service previous event. */
924         err = tg3_ape_event_lock(tp, 1000);
925         if (err)
926                 return err;
927
928         tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
929                         event | APE_EVENT_STATUS_EVENT_PENDING);
930
931         tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
932         tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
933
934         return 0;
935 }
936
937 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
938 {
939         u32 event;
940         u32 apedata;
941
942         if (!tg3_flag(tp, ENABLE_APE))
943                 return;
944
945         switch (kind) {
946         case RESET_KIND_INIT:
947                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
948                                 APE_HOST_SEG_SIG_MAGIC);
949                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
950                                 APE_HOST_SEG_LEN_MAGIC);
951                 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
952                 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
953                 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
954                         APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
955                 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
956                                 APE_HOST_BEHAV_NO_PHYLOCK);
957                 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
958                                     TG3_APE_HOST_DRVR_STATE_START);
959
960                 event = APE_EVENT_STATUS_STATE_START;
961                 break;
962         case RESET_KIND_SHUTDOWN:
963                 /* With the interface we are currently using,
964                  * APE does not track driver state.  Wiping
965                  * out the HOST SEGMENT SIGNATURE forces
966                  * the APE to assume OS absent status.
967                  */
968                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
969
970                 if (device_may_wakeup(&tp->pdev->dev) &&
971                     tg3_flag(tp, WOL_ENABLE)) {
972                         tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
973                                             TG3_APE_HOST_WOL_SPEED_AUTO);
974                         apedata = TG3_APE_HOST_DRVR_STATE_WOL;
975                 } else
976                         apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
977
978                 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
979
980                 event = APE_EVENT_STATUS_STATE_UNLOAD;
981                 break;
982         default:
983                 return;
984         }
985
986         event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
987
988         tg3_ape_send_event(tp, event);
989 }
990
991 static void tg3_disable_ints(struct tg3 *tp)
992 {
993         int i;
994
995         tw32(TG3PCI_MISC_HOST_CTRL,
996              (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
997         for (i = 0; i < tp->irq_max; i++)
998                 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
999 }
1000
1001 static void tg3_enable_ints(struct tg3 *tp)
1002 {
1003         int i;
1004
1005         tp->irq_sync = 0;
1006         wmb();
1007
1008         tw32(TG3PCI_MISC_HOST_CTRL,
1009              (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
1010
1011         tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
1012         for (i = 0; i < tp->irq_cnt; i++) {
1013                 struct tg3_napi *tnapi = &tp->napi[i];
1014
1015                 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1016                 if (tg3_flag(tp, 1SHOT_MSI))
1017                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1018
1019                 tp->coal_now |= tnapi->coal_now;
1020         }
1021
1022         /* Force an initial interrupt */
1023         if (!tg3_flag(tp, TAGGED_STATUS) &&
1024             (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
1025                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
1026         else
1027                 tw32(HOSTCC_MODE, tp->coal_now);
1028
1029         tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1030 }
1031
1032 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
1033 {
1034         struct tg3 *tp = tnapi->tp;
1035         struct tg3_hw_status *sblk = tnapi->hw_status;
1036         unsigned int work_exists = 0;
1037
1038         /* check for phy events */
1039         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
1040                 if (sblk->status & SD_STATUS_LINK_CHG)
1041                         work_exists = 1;
1042         }
1043
1044         /* check for TX work to do */
1045         if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
1046                 work_exists = 1;
1047
1048         /* check for RX work to do */
1049         if (tnapi->rx_rcb_prod_idx &&
1050             *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
1051                 work_exists = 1;
1052
1053         return work_exists;
1054 }
1055
1056 /* tg3_int_reenable
1057  *  similar to tg3_enable_ints, but it accurately determines whether there
1058  *  is new work pending and can return without flushing the PIO write
1059  *  which reenables interrupts
1060  */
1061 static void tg3_int_reenable(struct tg3_napi *tnapi)
1062 {
1063         struct tg3 *tp = tnapi->tp;
1064
1065         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1066         mmiowb();
1067
1068         /* When doing tagged status, this work check is unnecessary.
1069          * The last_tag we write above tells the chip which piece of
1070          * work we've completed.
1071          */
1072         if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1073                 tw32(HOSTCC_MODE, tp->coalesce_mode |
1074                      HOSTCC_MODE_ENABLE | tnapi->coal_now);
1075 }
1076
1077 static void tg3_switch_clocks(struct tg3 *tp)
1078 {
1079         u32 clock_ctrl;
1080         u32 orig_clock_ctrl;
1081
1082         if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1083                 return;
1084
1085         clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1086
1087         orig_clock_ctrl = clock_ctrl;
1088         clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1089                        CLOCK_CTRL_CLKRUN_OENABLE |
1090                        0x1f);
1091         tp->pci_clock_ctrl = clock_ctrl;
1092
1093         if (tg3_flag(tp, 5705_PLUS)) {
1094                 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1095                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
1096                                     clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1097                 }
1098         } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1099                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1100                             clock_ctrl |
1101                             (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1102                             40);
1103                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1104                             clock_ctrl | (CLOCK_CTRL_ALTCLK),
1105                             40);
1106         }
1107         tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1108 }
1109
1110 #define PHY_BUSY_LOOPS  5000
1111
1112 static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg,
1113                          u32 *val)
1114 {
1115         u32 frame_val;
1116         unsigned int loops;
1117         int ret;
1118
1119         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1120                 tw32_f(MAC_MI_MODE,
1121                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1122                 udelay(80);
1123         }
1124
1125         tg3_ape_lock(tp, tp->phy_ape_lock);
1126
1127         *val = 0x0;
1128
1129         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1130                       MI_COM_PHY_ADDR_MASK);
1131         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1132                       MI_COM_REG_ADDR_MASK);
1133         frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1134
1135         tw32_f(MAC_MI_COM, frame_val);
1136
1137         loops = PHY_BUSY_LOOPS;
1138         while (loops != 0) {
1139                 udelay(10);
1140                 frame_val = tr32(MAC_MI_COM);
1141
1142                 if ((frame_val & MI_COM_BUSY) == 0) {
1143                         udelay(5);
1144                         frame_val = tr32(MAC_MI_COM);
1145                         break;
1146                 }
1147                 loops -= 1;
1148         }
1149
1150         ret = -EBUSY;
1151         if (loops != 0) {
1152                 *val = frame_val & MI_COM_DATA_MASK;
1153                 ret = 0;
1154         }
1155
1156         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1157                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1158                 udelay(80);
1159         }
1160
1161         tg3_ape_unlock(tp, tp->phy_ape_lock);
1162
1163         return ret;
1164 }
1165
1166 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1167 {
1168         return __tg3_readphy(tp, tp->phy_addr, reg, val);
1169 }
1170
1171 static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg,
1172                           u32 val)
1173 {
1174         u32 frame_val;
1175         unsigned int loops;
1176         int ret;
1177
1178         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1179             (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1180                 return 0;
1181
1182         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1183                 tw32_f(MAC_MI_MODE,
1184                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1185                 udelay(80);
1186         }
1187
1188         tg3_ape_lock(tp, tp->phy_ape_lock);
1189
1190         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1191                       MI_COM_PHY_ADDR_MASK);
1192         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1193                       MI_COM_REG_ADDR_MASK);
1194         frame_val |= (val & MI_COM_DATA_MASK);
1195         frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1196
1197         tw32_f(MAC_MI_COM, frame_val);
1198
1199         loops = PHY_BUSY_LOOPS;
1200         while (loops != 0) {
1201                 udelay(10);
1202                 frame_val = tr32(MAC_MI_COM);
1203                 if ((frame_val & MI_COM_BUSY) == 0) {
1204                         udelay(5);
1205                         frame_val = tr32(MAC_MI_COM);
1206                         break;
1207                 }
1208                 loops -= 1;
1209         }
1210
1211         ret = -EBUSY;
1212         if (loops != 0)
1213                 ret = 0;
1214
1215         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1216                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1217                 udelay(80);
1218         }
1219
1220         tg3_ape_unlock(tp, tp->phy_ape_lock);
1221
1222         return ret;
1223 }
1224
1225 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1226 {
1227         return __tg3_writephy(tp, tp->phy_addr, reg, val);
1228 }
1229
1230 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1231 {
1232         int err;
1233
1234         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1235         if (err)
1236                 goto done;
1237
1238         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1239         if (err)
1240                 goto done;
1241
1242         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1243                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1244         if (err)
1245                 goto done;
1246
1247         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1248
1249 done:
1250         return err;
1251 }
1252
1253 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1254 {
1255         int err;
1256
1257         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1258         if (err)
1259                 goto done;
1260
1261         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1262         if (err)
1263                 goto done;
1264
1265         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1266                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1267         if (err)
1268                 goto done;
1269
1270         err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1271
1272 done:
1273         return err;
1274 }
1275
1276 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1277 {
1278         int err;
1279
1280         err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1281         if (!err)
1282                 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1283
1284         return err;
1285 }
1286
1287 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1288 {
1289         int err;
1290
1291         err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1292         if (!err)
1293                 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1294
1295         return err;
1296 }
1297
1298 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1299 {
1300         int err;
1301
1302         err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1303                            (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1304                            MII_TG3_AUXCTL_SHDWSEL_MISC);
1305         if (!err)
1306                 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1307
1308         return err;
1309 }
1310
1311 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1312 {
1313         if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1314                 set |= MII_TG3_AUXCTL_MISC_WREN;
1315
1316         return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1317 }
1318
1319 static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable)
1320 {
1321         u32 val;
1322         int err;
1323
1324         err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1325
1326         if (err)
1327                 return err;
1328
1329         if (enable)
1330                 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1331         else
1332                 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1333
1334         err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1335                                    val | MII_TG3_AUXCTL_ACTL_TX_6DB);
1336
1337         return err;
1338 }
1339
1340 static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val)
1341 {
1342         return tg3_writephy(tp, MII_TG3_MISC_SHDW,
1343                             reg | val | MII_TG3_MISC_SHDW_WREN);
1344 }
1345
1346 static int tg3_bmcr_reset(struct tg3 *tp)
1347 {
1348         u32 phy_control;
1349         int limit, err;
1350
1351         /* OK, reset it, and poll the BMCR_RESET bit until it
1352          * clears or we time out.
1353          */
1354         phy_control = BMCR_RESET;
1355         err = tg3_writephy(tp, MII_BMCR, phy_control);
1356         if (err != 0)
1357                 return -EBUSY;
1358
1359         limit = 5000;
1360         while (limit--) {
1361                 err = tg3_readphy(tp, MII_BMCR, &phy_control);
1362                 if (err != 0)
1363                         return -EBUSY;
1364
1365                 if ((phy_control & BMCR_RESET) == 0) {
1366                         udelay(40);
1367                         break;
1368                 }
1369                 udelay(10);
1370         }
1371         if (limit < 0)
1372                 return -EBUSY;
1373
1374         return 0;
1375 }
1376
1377 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1378 {
1379         struct tg3 *tp = bp->priv;
1380         u32 val;
1381
1382         spin_lock_bh(&tp->lock);
1383
1384         if (__tg3_readphy(tp, mii_id, reg, &val))
1385                 val = -EIO;
1386
1387         spin_unlock_bh(&tp->lock);
1388
1389         return val;
1390 }
1391
1392 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1393 {
1394         struct tg3 *tp = bp->priv;
1395         u32 ret = 0;
1396
1397         spin_lock_bh(&tp->lock);
1398
1399         if (__tg3_writephy(tp, mii_id, reg, val))
1400                 ret = -EIO;
1401
1402         spin_unlock_bh(&tp->lock);
1403
1404         return ret;
1405 }
1406
1407 static void tg3_mdio_config_5785(struct tg3 *tp)
1408 {
1409         u32 val;
1410         struct phy_device *phydev;
1411
1412         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1413         switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1414         case PHY_ID_BCM50610:
1415         case PHY_ID_BCM50610M:
1416                 val = MAC_PHYCFG2_50610_LED_MODES;
1417                 break;
1418         case PHY_ID_BCMAC131:
1419                 val = MAC_PHYCFG2_AC131_LED_MODES;
1420                 break;
1421         case PHY_ID_RTL8211C:
1422                 val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1423                 break;
1424         case PHY_ID_RTL8201E:
1425                 val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1426                 break;
1427         default:
1428                 return;
1429         }
1430
1431         if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1432                 tw32(MAC_PHYCFG2, val);
1433
1434                 val = tr32(MAC_PHYCFG1);
1435                 val &= ~(MAC_PHYCFG1_RGMII_INT |
1436                          MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1437                 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1438                 tw32(MAC_PHYCFG1, val);
1439
1440                 return;
1441         }
1442
1443         if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1444                 val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1445                        MAC_PHYCFG2_FMODE_MASK_MASK |
1446                        MAC_PHYCFG2_GMODE_MASK_MASK |
1447                        MAC_PHYCFG2_ACT_MASK_MASK   |
1448                        MAC_PHYCFG2_QUAL_MASK_MASK |
1449                        MAC_PHYCFG2_INBAND_ENABLE;
1450
1451         tw32(MAC_PHYCFG2, val);
1452
1453         val = tr32(MAC_PHYCFG1);
1454         val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1455                  MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1456         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1457                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1458                         val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1459                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1460                         val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1461         }
1462         val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1463                MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1464         tw32(MAC_PHYCFG1, val);
1465
1466         val = tr32(MAC_EXT_RGMII_MODE);
1467         val &= ~(MAC_RGMII_MODE_RX_INT_B |
1468                  MAC_RGMII_MODE_RX_QUALITY |
1469                  MAC_RGMII_MODE_RX_ACTIVITY |
1470                  MAC_RGMII_MODE_RX_ENG_DET |
1471                  MAC_RGMII_MODE_TX_ENABLE |
1472                  MAC_RGMII_MODE_TX_LOWPWR |
1473                  MAC_RGMII_MODE_TX_RESET);
1474         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1475                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
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                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1481                         val |= MAC_RGMII_MODE_TX_ENABLE |
1482                                MAC_RGMII_MODE_TX_LOWPWR |
1483                                MAC_RGMII_MODE_TX_RESET;
1484         }
1485         tw32(MAC_EXT_RGMII_MODE, val);
1486 }
1487
1488 static void tg3_mdio_start(struct tg3 *tp)
1489 {
1490         tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1491         tw32_f(MAC_MI_MODE, tp->mi_mode);
1492         udelay(80);
1493
1494         if (tg3_flag(tp, MDIOBUS_INITED) &&
1495             tg3_asic_rev(tp) == ASIC_REV_5785)
1496                 tg3_mdio_config_5785(tp);
1497 }
1498
1499 static int tg3_mdio_init(struct tg3 *tp)
1500 {
1501         int i;
1502         u32 reg;
1503         struct phy_device *phydev;
1504
1505         if (tg3_flag(tp, 5717_PLUS)) {
1506                 u32 is_serdes;
1507
1508                 tp->phy_addr = tp->pci_fn + 1;
1509
1510                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0)
1511                         is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1512                 else
1513                         is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1514                                     TG3_CPMU_PHY_STRAP_IS_SERDES;
1515                 if (is_serdes)
1516                         tp->phy_addr += 7;
1517         } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) {
1518                 int addr;
1519
1520                 addr = ssb_gige_get_phyaddr(tp->pdev);
1521                 if (addr < 0)
1522                         return addr;
1523                 tp->phy_addr = addr;
1524         } else
1525                 tp->phy_addr = TG3_PHY_MII_ADDR;
1526
1527         tg3_mdio_start(tp);
1528
1529         if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1530                 return 0;
1531
1532         tp->mdio_bus = mdiobus_alloc();
1533         if (tp->mdio_bus == NULL)
1534                 return -ENOMEM;
1535
1536         tp->mdio_bus->name     = "tg3 mdio bus";
1537         snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1538                  (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1539         tp->mdio_bus->priv     = tp;
1540         tp->mdio_bus->parent   = &tp->pdev->dev;
1541         tp->mdio_bus->read     = &tg3_mdio_read;
1542         tp->mdio_bus->write    = &tg3_mdio_write;
1543         tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
1544
1545         /* The bus registration will look for all the PHYs on the mdio bus.
1546          * Unfortunately, it does not ensure the PHY is powered up before
1547          * accessing the PHY ID registers.  A chip reset is the
1548          * quickest way to bring the device back to an operational state..
1549          */
1550         if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1551                 tg3_bmcr_reset(tp);
1552
1553         i = mdiobus_register(tp->mdio_bus);
1554         if (i) {
1555                 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1556                 mdiobus_free(tp->mdio_bus);
1557                 return i;
1558         }
1559
1560         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1561
1562         if (!phydev || !phydev->drv) {
1563                 dev_warn(&tp->pdev->dev, "No PHY devices\n");
1564                 mdiobus_unregister(tp->mdio_bus);
1565                 mdiobus_free(tp->mdio_bus);
1566                 return -ENODEV;
1567         }
1568
1569         switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1570         case PHY_ID_BCM57780:
1571                 phydev->interface = PHY_INTERFACE_MODE_GMII;
1572                 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1573                 break;
1574         case PHY_ID_BCM50610:
1575         case PHY_ID_BCM50610M:
1576                 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1577                                      PHY_BRCM_RX_REFCLK_UNUSED |
1578                                      PHY_BRCM_DIS_TXCRXC_NOENRGY |
1579                                      PHY_BRCM_AUTO_PWRDWN_ENABLE;
1580                 if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1581                         phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
1582                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1583                         phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
1584                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1585                         phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
1586                 /* fallthru */
1587         case PHY_ID_RTL8211C:
1588                 phydev->interface = PHY_INTERFACE_MODE_RGMII;
1589                 break;
1590         case PHY_ID_RTL8201E:
1591         case PHY_ID_BCMAC131:
1592                 phydev->interface = PHY_INTERFACE_MODE_MII;
1593                 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1594                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
1595                 break;
1596         }
1597
1598         tg3_flag_set(tp, MDIOBUS_INITED);
1599
1600         if (tg3_asic_rev(tp) == ASIC_REV_5785)
1601                 tg3_mdio_config_5785(tp);
1602
1603         return 0;
1604 }
1605
1606 static void tg3_mdio_fini(struct tg3 *tp)
1607 {
1608         if (tg3_flag(tp, MDIOBUS_INITED)) {
1609                 tg3_flag_clear(tp, MDIOBUS_INITED);
1610                 mdiobus_unregister(tp->mdio_bus);
1611                 mdiobus_free(tp->mdio_bus);
1612         }
1613 }
1614
1615 /* tp->lock is held. */
1616 static inline void tg3_generate_fw_event(struct tg3 *tp)
1617 {
1618         u32 val;
1619
1620         val = tr32(GRC_RX_CPU_EVENT);
1621         val |= GRC_RX_CPU_DRIVER_EVENT;
1622         tw32_f(GRC_RX_CPU_EVENT, val);
1623
1624         tp->last_event_jiffies = jiffies;
1625 }
1626
1627 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1628
1629 /* tp->lock is held. */
1630 static void tg3_wait_for_event_ack(struct tg3 *tp)
1631 {
1632         int i;
1633         unsigned int delay_cnt;
1634         long time_remain;
1635
1636         /* If enough time has passed, no wait is necessary. */
1637         time_remain = (long)(tp->last_event_jiffies + 1 +
1638                       usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1639                       (long)jiffies;
1640         if (time_remain < 0)
1641                 return;
1642
1643         /* Check if we can shorten the wait time. */
1644         delay_cnt = jiffies_to_usecs(time_remain);
1645         if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1646                 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1647         delay_cnt = (delay_cnt >> 3) + 1;
1648
1649         for (i = 0; i < delay_cnt; i++) {
1650                 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1651                         break;
1652                 if (pci_channel_offline(tp->pdev))
1653                         break;
1654
1655                 udelay(8);
1656         }
1657 }
1658
1659 /* tp->lock is held. */
1660 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1661 {
1662         u32 reg, val;
1663
1664         val = 0;
1665         if (!tg3_readphy(tp, MII_BMCR, &reg))
1666                 val = reg << 16;
1667         if (!tg3_readphy(tp, MII_BMSR, &reg))
1668                 val |= (reg & 0xffff);
1669         *data++ = val;
1670
1671         val = 0;
1672         if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1673                 val = reg << 16;
1674         if (!tg3_readphy(tp, MII_LPA, &reg))
1675                 val |= (reg & 0xffff);
1676         *data++ = val;
1677
1678         val = 0;
1679         if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1680                 if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1681                         val = reg << 16;
1682                 if (!tg3_readphy(tp, MII_STAT1000, &reg))
1683                         val |= (reg & 0xffff);
1684         }
1685         *data++ = val;
1686
1687         if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1688                 val = reg << 16;
1689         else
1690                 val = 0;
1691         *data++ = val;
1692 }
1693
1694 /* tp->lock is held. */
1695 static void tg3_ump_link_report(struct tg3 *tp)
1696 {
1697         u32 data[4];
1698
1699         if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1700                 return;
1701
1702         tg3_phy_gather_ump_data(tp, data);
1703
1704         tg3_wait_for_event_ack(tp);
1705
1706         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1707         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1708         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1709         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1710         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1711         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1712
1713         tg3_generate_fw_event(tp);
1714 }
1715
1716 /* tp->lock is held. */
1717 static void tg3_stop_fw(struct tg3 *tp)
1718 {
1719         if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1720                 /* Wait for RX cpu to ACK the previous event. */
1721                 tg3_wait_for_event_ack(tp);
1722
1723                 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1724
1725                 tg3_generate_fw_event(tp);
1726
1727                 /* Wait for RX cpu to ACK this event. */
1728                 tg3_wait_for_event_ack(tp);
1729         }
1730 }
1731
1732 /* tp->lock is held. */
1733 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1734 {
1735         tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1736                       NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1737
1738         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1739                 switch (kind) {
1740                 case RESET_KIND_INIT:
1741                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1742                                       DRV_STATE_START);
1743                         break;
1744
1745                 case RESET_KIND_SHUTDOWN:
1746                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1747                                       DRV_STATE_UNLOAD);
1748                         break;
1749
1750                 case RESET_KIND_SUSPEND:
1751                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1752                                       DRV_STATE_SUSPEND);
1753                         break;
1754
1755                 default:
1756                         break;
1757                 }
1758         }
1759 }
1760
1761 /* tp->lock is held. */
1762 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1763 {
1764         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1765                 switch (kind) {
1766                 case RESET_KIND_INIT:
1767                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1768                                       DRV_STATE_START_DONE);
1769                         break;
1770
1771                 case RESET_KIND_SHUTDOWN:
1772                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1773                                       DRV_STATE_UNLOAD_DONE);
1774                         break;
1775
1776                 default:
1777                         break;
1778                 }
1779         }
1780 }
1781
1782 /* tp->lock is held. */
1783 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1784 {
1785         if (tg3_flag(tp, ENABLE_ASF)) {
1786                 switch (kind) {
1787                 case RESET_KIND_INIT:
1788                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1789                                       DRV_STATE_START);
1790                         break;
1791
1792                 case RESET_KIND_SHUTDOWN:
1793                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1794                                       DRV_STATE_UNLOAD);
1795                         break;
1796
1797                 case RESET_KIND_SUSPEND:
1798                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1799                                       DRV_STATE_SUSPEND);
1800                         break;
1801
1802                 default:
1803                         break;
1804                 }
1805         }
1806 }
1807
1808 static int tg3_poll_fw(struct tg3 *tp)
1809 {
1810         int i;
1811         u32 val;
1812
1813         if (tg3_flag(tp, NO_FWARE_REPORTED))
1814                 return 0;
1815
1816         if (tg3_flag(tp, IS_SSB_CORE)) {
1817                 /* We don't use firmware. */
1818                 return 0;
1819         }
1820
1821         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
1822                 /* Wait up to 20ms for init done. */
1823                 for (i = 0; i < 200; i++) {
1824                         if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1825                                 return 0;
1826                         if (pci_channel_offline(tp->pdev))
1827                                 return -ENODEV;
1828
1829                         udelay(100);
1830                 }
1831                 return -ENODEV;
1832         }
1833
1834         /* Wait for firmware initialization to complete. */
1835         for (i = 0; i < 100000; i++) {
1836                 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1837                 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1838                         break;
1839                 if (pci_channel_offline(tp->pdev)) {
1840                         if (!tg3_flag(tp, NO_FWARE_REPORTED)) {
1841                                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1842                                 netdev_info(tp->dev, "No firmware running\n");
1843                         }
1844
1845                         break;
1846                 }
1847
1848                 udelay(10);
1849         }
1850
1851         /* Chip might not be fitted with firmware.  Some Sun onboard
1852          * parts are configured like that.  So don't signal the timeout
1853          * of the above loop as an error, but do report the lack of
1854          * running firmware once.
1855          */
1856         if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1857                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1858
1859                 netdev_info(tp->dev, "No firmware running\n");
1860         }
1861
1862         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
1863                 /* The 57765 A0 needs a little more
1864                  * time to do some important work.
1865                  */
1866                 mdelay(10);
1867         }
1868
1869         return 0;
1870 }
1871
1872 static void tg3_link_report(struct tg3 *tp)
1873 {
1874         if (!netif_carrier_ok(tp->dev)) {
1875                 netif_info(tp, link, tp->dev, "Link is down\n");
1876                 tg3_ump_link_report(tp);
1877         } else if (netif_msg_link(tp)) {
1878                 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1879                             (tp->link_config.active_speed == SPEED_1000 ?
1880                              1000 :
1881                              (tp->link_config.active_speed == SPEED_100 ?
1882                               100 : 10)),
1883                             (tp->link_config.active_duplex == DUPLEX_FULL ?
1884                              "full" : "half"));
1885
1886                 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1887                             (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1888                             "on" : "off",
1889                             (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1890                             "on" : "off");
1891
1892                 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1893                         netdev_info(tp->dev, "EEE is %s\n",
1894                                     tp->setlpicnt ? "enabled" : "disabled");
1895
1896                 tg3_ump_link_report(tp);
1897         }
1898
1899         tp->link_up = netif_carrier_ok(tp->dev);
1900 }
1901
1902 static u32 tg3_decode_flowctrl_1000T(u32 adv)
1903 {
1904         u32 flowctrl = 0;
1905
1906         if (adv & ADVERTISE_PAUSE_CAP) {
1907                 flowctrl |= FLOW_CTRL_RX;
1908                 if (!(adv & ADVERTISE_PAUSE_ASYM))
1909                         flowctrl |= FLOW_CTRL_TX;
1910         } else if (adv & ADVERTISE_PAUSE_ASYM)
1911                 flowctrl |= FLOW_CTRL_TX;
1912
1913         return flowctrl;
1914 }
1915
1916 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1917 {
1918         u16 miireg;
1919
1920         if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1921                 miireg = ADVERTISE_1000XPAUSE;
1922         else if (flow_ctrl & FLOW_CTRL_TX)
1923                 miireg = ADVERTISE_1000XPSE_ASYM;
1924         else if (flow_ctrl & FLOW_CTRL_RX)
1925                 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1926         else
1927                 miireg = 0;
1928
1929         return miireg;
1930 }
1931
1932 static u32 tg3_decode_flowctrl_1000X(u32 adv)
1933 {
1934         u32 flowctrl = 0;
1935
1936         if (adv & ADVERTISE_1000XPAUSE) {
1937                 flowctrl |= FLOW_CTRL_RX;
1938                 if (!(adv & ADVERTISE_1000XPSE_ASYM))
1939                         flowctrl |= FLOW_CTRL_TX;
1940         } else if (adv & ADVERTISE_1000XPSE_ASYM)
1941                 flowctrl |= FLOW_CTRL_TX;
1942
1943         return flowctrl;
1944 }
1945
1946 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1947 {
1948         u8 cap = 0;
1949
1950         if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1951                 cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1952         } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1953                 if (lcladv & ADVERTISE_1000XPAUSE)
1954                         cap = FLOW_CTRL_RX;
1955                 if (rmtadv & ADVERTISE_1000XPAUSE)
1956                         cap = FLOW_CTRL_TX;
1957         }
1958
1959         return cap;
1960 }
1961
1962 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1963 {
1964         u8 autoneg;
1965         u8 flowctrl = 0;
1966         u32 old_rx_mode = tp->rx_mode;
1967         u32 old_tx_mode = tp->tx_mode;
1968
1969         if (tg3_flag(tp, USE_PHYLIB))
1970                 autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg;
1971         else
1972                 autoneg = tp->link_config.autoneg;
1973
1974         if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1975                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1976                         flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1977                 else
1978                         flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1979         } else
1980                 flowctrl = tp->link_config.flowctrl;
1981
1982         tp->link_config.active_flowctrl = flowctrl;
1983
1984         if (flowctrl & FLOW_CTRL_RX)
1985                 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1986         else
1987                 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1988
1989         if (old_rx_mode != tp->rx_mode)
1990                 tw32_f(MAC_RX_MODE, tp->rx_mode);
1991
1992         if (flowctrl & FLOW_CTRL_TX)
1993                 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1994         else
1995                 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1996
1997         if (old_tx_mode != tp->tx_mode)
1998                 tw32_f(MAC_TX_MODE, tp->tx_mode);
1999 }
2000
2001 static void tg3_adjust_link(struct net_device *dev)
2002 {
2003         u8 oldflowctrl, linkmesg = 0;
2004         u32 mac_mode, lcl_adv, rmt_adv;
2005         struct tg3 *tp = netdev_priv(dev);
2006         struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2007
2008         spin_lock_bh(&tp->lock);
2009
2010         mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
2011                                     MAC_MODE_HALF_DUPLEX);
2012
2013         oldflowctrl = tp->link_config.active_flowctrl;
2014
2015         if (phydev->link) {
2016                 lcl_adv = 0;
2017                 rmt_adv = 0;
2018
2019                 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
2020                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2021                 else if (phydev->speed == SPEED_1000 ||
2022                          tg3_asic_rev(tp) != ASIC_REV_5785)
2023                         mac_mode |= MAC_MODE_PORT_MODE_GMII;
2024                 else
2025                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2026
2027                 if (phydev->duplex == DUPLEX_HALF)
2028                         mac_mode |= MAC_MODE_HALF_DUPLEX;
2029                 else {
2030                         lcl_adv = mii_advertise_flowctrl(
2031                                   tp->link_config.flowctrl);
2032
2033                         if (phydev->pause)
2034                                 rmt_adv = LPA_PAUSE_CAP;
2035                         if (phydev->asym_pause)
2036                                 rmt_adv |= LPA_PAUSE_ASYM;
2037                 }
2038
2039                 tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2040         } else
2041                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
2042
2043         if (mac_mode != tp->mac_mode) {
2044                 tp->mac_mode = mac_mode;
2045                 tw32_f(MAC_MODE, tp->mac_mode);
2046                 udelay(40);
2047         }
2048
2049         if (tg3_asic_rev(tp) == ASIC_REV_5785) {
2050                 if (phydev->speed == SPEED_10)
2051                         tw32(MAC_MI_STAT,
2052                              MAC_MI_STAT_10MBPS_MODE |
2053                              MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2054                 else
2055                         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2056         }
2057
2058         if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
2059                 tw32(MAC_TX_LENGTHS,
2060                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2061                       (6 << TX_LENGTHS_IPG_SHIFT) |
2062                       (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
2063         else
2064                 tw32(MAC_TX_LENGTHS,
2065                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2066                       (6 << TX_LENGTHS_IPG_SHIFT) |
2067                       (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
2068
2069         if (phydev->link != tp->old_link ||
2070             phydev->speed != tp->link_config.active_speed ||
2071             phydev->duplex != tp->link_config.active_duplex ||
2072             oldflowctrl != tp->link_config.active_flowctrl)
2073                 linkmesg = 1;
2074
2075         tp->old_link = phydev->link;
2076         tp->link_config.active_speed = phydev->speed;
2077         tp->link_config.active_duplex = phydev->duplex;
2078
2079         spin_unlock_bh(&tp->lock);
2080
2081         if (linkmesg)
2082                 tg3_link_report(tp);
2083 }
2084
2085 static int tg3_phy_init(struct tg3 *tp)
2086 {
2087         struct phy_device *phydev;
2088
2089         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
2090                 return 0;
2091
2092         /* Bring the PHY back to a known state. */
2093         tg3_bmcr_reset(tp);
2094
2095         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2096
2097         /* Attach the MAC to the PHY. */
2098         phydev = phy_connect(tp->dev, phydev_name(phydev),
2099                              tg3_adjust_link, phydev->interface);
2100         if (IS_ERR(phydev)) {
2101                 dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
2102                 return PTR_ERR(phydev);
2103         }
2104
2105         /* Mask with MAC supported features. */
2106         switch (phydev->interface) {
2107         case PHY_INTERFACE_MODE_GMII:
2108         case PHY_INTERFACE_MODE_RGMII:
2109                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
2110                         phydev->supported &= (PHY_GBIT_FEATURES |
2111                                               SUPPORTED_Pause |
2112                                               SUPPORTED_Asym_Pause);
2113                         break;
2114                 }
2115                 /* fallthru */
2116         case PHY_INTERFACE_MODE_MII:
2117                 phydev->supported &= (PHY_BASIC_FEATURES |
2118                                       SUPPORTED_Pause |
2119                                       SUPPORTED_Asym_Pause);
2120                 break;
2121         default:
2122                 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2123                 return -EINVAL;
2124         }
2125
2126         tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
2127
2128         phydev->advertising = phydev->supported;
2129
2130         phy_attached_info(phydev);
2131
2132         return 0;
2133 }
2134
2135 static void tg3_phy_start(struct tg3 *tp)
2136 {
2137         struct phy_device *phydev;
2138
2139         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2140                 return;
2141
2142         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2143
2144         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2145                 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2146                 phydev->speed = tp->link_config.speed;
2147                 phydev->duplex = tp->link_config.duplex;
2148                 phydev->autoneg = tp->link_config.autoneg;
2149                 phydev->advertising = tp->link_config.advertising;
2150         }
2151
2152         phy_start(phydev);
2153
2154         phy_start_aneg(phydev);
2155 }
2156
2157 static void tg3_phy_stop(struct tg3 *tp)
2158 {
2159         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2160                 return;
2161
2162         phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2163 }
2164
2165 static void tg3_phy_fini(struct tg3 *tp)
2166 {
2167         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2168                 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2169                 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2170         }
2171 }
2172
2173 static int tg3_phy_set_extloopbk(struct tg3 *tp)
2174 {
2175         int err;
2176         u32 val;
2177
2178         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2179                 return 0;
2180
2181         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2182                 /* Cannot do read-modify-write on 5401 */
2183                 err = tg3_phy_auxctl_write(tp,
2184                                            MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2185                                            MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2186                                            0x4c20);
2187                 goto done;
2188         }
2189
2190         err = tg3_phy_auxctl_read(tp,
2191                                   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2192         if (err)
2193                 return err;
2194
2195         val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2196         err = tg3_phy_auxctl_write(tp,
2197                                    MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2198
2199 done:
2200         return err;
2201 }
2202
2203 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2204 {
2205         u32 phytest;
2206
2207         if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2208                 u32 phy;
2209
2210                 tg3_writephy(tp, MII_TG3_FET_TEST,
2211                              phytest | MII_TG3_FET_SHADOW_EN);
2212                 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2213                         if (enable)
2214                                 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2215                         else
2216                                 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2217                         tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2218                 }
2219                 tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2220         }
2221 }
2222
2223 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2224 {
2225         u32 reg;
2226
2227         if (!tg3_flag(tp, 5705_PLUS) ||
2228             (tg3_flag(tp, 5717_PLUS) &&
2229              (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2230                 return;
2231
2232         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2233                 tg3_phy_fet_toggle_apd(tp, enable);
2234                 return;
2235         }
2236
2237         reg = MII_TG3_MISC_SHDW_SCR5_LPED |
2238               MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2239               MII_TG3_MISC_SHDW_SCR5_SDTL |
2240               MII_TG3_MISC_SHDW_SCR5_C125OE;
2241         if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable)
2242                 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2243
2244         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg);
2245
2246
2247         reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2248         if (enable)
2249                 reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2250
2251         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg);
2252 }
2253
2254 static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable)
2255 {
2256         u32 phy;
2257
2258         if (!tg3_flag(tp, 5705_PLUS) ||
2259             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2260                 return;
2261
2262         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2263                 u32 ephy;
2264
2265                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2266                         u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2267
2268                         tg3_writephy(tp, MII_TG3_FET_TEST,
2269                                      ephy | MII_TG3_FET_SHADOW_EN);
2270                         if (!tg3_readphy(tp, reg, &phy)) {
2271                                 if (enable)
2272                                         phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2273                                 else
2274                                         phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2275                                 tg3_writephy(tp, reg, phy);
2276                         }
2277                         tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2278                 }
2279         } else {
2280                 int ret;
2281
2282                 ret = tg3_phy_auxctl_read(tp,
2283                                           MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2284                 if (!ret) {
2285                         if (enable)
2286                                 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2287                         else
2288                                 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2289                         tg3_phy_auxctl_write(tp,
2290                                              MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2291                 }
2292         }
2293 }
2294
2295 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2296 {
2297         int ret;
2298         u32 val;
2299
2300         if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2301                 return;
2302
2303         ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2304         if (!ret)
2305                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2306                                      val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2307 }
2308
2309 static void tg3_phy_apply_otp(struct tg3 *tp)
2310 {
2311         u32 otp, phy;
2312
2313         if (!tp->phy_otp)
2314                 return;
2315
2316         otp = tp->phy_otp;
2317
2318         if (tg3_phy_toggle_auxctl_smdsp(tp, true))
2319                 return;
2320
2321         phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2322         phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2323         tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2324
2325         phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2326               ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2327         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2328
2329         phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2330         phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2331         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2332
2333         phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2334         tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2335
2336         phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2337         tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2338
2339         phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2340               ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2341         tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2342
2343         tg3_phy_toggle_auxctl_smdsp(tp, false);
2344 }
2345
2346 static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee)
2347 {
2348         u32 val;
2349         struct ethtool_eee *dest = &tp->eee;
2350
2351         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2352                 return;
2353
2354         if (eee)
2355                 dest = eee;
2356
2357         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val))
2358                 return;
2359
2360         /* Pull eee_active */
2361         if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2362             val == TG3_CL45_D7_EEERES_STAT_LP_100TX) {
2363                 dest->eee_active = 1;
2364         } else
2365                 dest->eee_active = 0;
2366
2367         /* Pull lp advertised settings */
2368         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val))
2369                 return;
2370         dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2371
2372         /* Pull advertised and eee_enabled settings */
2373         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val))
2374                 return;
2375         dest->eee_enabled = !!val;
2376         dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2377
2378         /* Pull tx_lpi_enabled */
2379         val = tr32(TG3_CPMU_EEE_MODE);
2380         dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX);
2381
2382         /* Pull lpi timer value */
2383         dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff;
2384 }
2385
2386 static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up)
2387 {
2388         u32 val;
2389
2390         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2391                 return;
2392
2393         tp->setlpicnt = 0;
2394
2395         if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2396             current_link_up &&
2397             tp->link_config.active_duplex == DUPLEX_FULL &&
2398             (tp->link_config.active_speed == SPEED_100 ||
2399              tp->link_config.active_speed == SPEED_1000)) {
2400                 u32 eeectl;
2401
2402                 if (tp->link_config.active_speed == SPEED_1000)
2403                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2404                 else
2405                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2406
2407                 tw32(TG3_CPMU_EEE_CTRL, eeectl);
2408
2409                 tg3_eee_pull_config(tp, NULL);
2410                 if (tp->eee.eee_active)
2411                         tp->setlpicnt = 2;
2412         }
2413
2414         if (!tp->setlpicnt) {
2415                 if (current_link_up &&
2416                    !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2417                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2418                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2419                 }
2420
2421                 val = tr32(TG3_CPMU_EEE_MODE);
2422                 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2423         }
2424 }
2425
2426 static void tg3_phy_eee_enable(struct tg3 *tp)
2427 {
2428         u32 val;
2429
2430         if (tp->link_config.active_speed == SPEED_1000 &&
2431             (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2432              tg3_asic_rev(tp) == ASIC_REV_5719 ||
2433              tg3_flag(tp, 57765_CLASS)) &&
2434             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2435                 val = MII_TG3_DSP_TAP26_ALNOKO |
2436                       MII_TG3_DSP_TAP26_RMRXSTO;
2437                 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2438                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2439         }
2440
2441         val = tr32(TG3_CPMU_EEE_MODE);
2442         tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2443 }
2444
2445 static int tg3_wait_macro_done(struct tg3 *tp)
2446 {
2447         int limit = 100;
2448
2449         while (limit--) {
2450                 u32 tmp32;
2451
2452                 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2453                         if ((tmp32 & 0x1000) == 0)
2454                                 break;
2455                 }
2456         }
2457         if (limit < 0)
2458                 return -EBUSY;
2459
2460         return 0;
2461 }
2462
2463 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2464 {
2465         static const u32 test_pat[4][6] = {
2466         { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2467         { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2468         { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2469         { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2470         };
2471         int chan;
2472
2473         for (chan = 0; chan < 4; chan++) {
2474                 int i;
2475
2476                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2477                              (chan * 0x2000) | 0x0200);
2478                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2479
2480                 for (i = 0; i < 6; i++)
2481                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2482                                      test_pat[chan][i]);
2483
2484                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2485                 if (tg3_wait_macro_done(tp)) {
2486                         *resetp = 1;
2487                         return -EBUSY;
2488                 }
2489
2490                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2491                              (chan * 0x2000) | 0x0200);
2492                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2493                 if (tg3_wait_macro_done(tp)) {
2494                         *resetp = 1;
2495                         return -EBUSY;
2496                 }
2497
2498                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2499                 if (tg3_wait_macro_done(tp)) {
2500                         *resetp = 1;
2501                         return -EBUSY;
2502                 }
2503
2504                 for (i = 0; i < 6; i += 2) {
2505                         u32 low, high;
2506
2507                         if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2508                             tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2509                             tg3_wait_macro_done(tp)) {
2510                                 *resetp = 1;
2511                                 return -EBUSY;
2512                         }
2513                         low &= 0x7fff;
2514                         high &= 0x000f;
2515                         if (low != test_pat[chan][i] ||
2516                             high != test_pat[chan][i+1]) {
2517                                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2518                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2519                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2520
2521                                 return -EBUSY;
2522                         }
2523                 }
2524         }
2525
2526         return 0;
2527 }
2528
2529 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2530 {
2531         int chan;
2532
2533         for (chan = 0; chan < 4; chan++) {
2534                 int i;
2535
2536                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2537                              (chan * 0x2000) | 0x0200);
2538                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2539                 for (i = 0; i < 6; i++)
2540                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2541                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2542                 if (tg3_wait_macro_done(tp))
2543                         return -EBUSY;
2544         }
2545
2546         return 0;
2547 }
2548
2549 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2550 {
2551         u32 reg32, phy9_orig;
2552         int retries, do_phy_reset, err;
2553
2554         retries = 10;
2555         do_phy_reset = 1;
2556         do {
2557                 if (do_phy_reset) {
2558                         err = tg3_bmcr_reset(tp);
2559                         if (err)
2560                                 return err;
2561                         do_phy_reset = 0;
2562                 }
2563
2564                 /* Disable transmitter and interrupt.  */
2565                 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2566                         continue;
2567
2568                 reg32 |= 0x3000;
2569                 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2570
2571                 /* Set full-duplex, 1000 mbps.  */
2572                 tg3_writephy(tp, MII_BMCR,
2573                              BMCR_FULLDPLX | BMCR_SPEED1000);
2574
2575                 /* Set to master mode.  */
2576                 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2577                         continue;
2578
2579                 tg3_writephy(tp, MII_CTRL1000,
2580                              CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2581
2582                 err = tg3_phy_toggle_auxctl_smdsp(tp, true);
2583                 if (err)
2584                         return err;
2585
2586                 /* Block the PHY control access.  */
2587                 tg3_phydsp_write(tp, 0x8005, 0x0800);
2588
2589                 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2590                 if (!err)
2591                         break;
2592         } while (--retries);
2593
2594         err = tg3_phy_reset_chanpat(tp);
2595         if (err)
2596                 return err;
2597
2598         tg3_phydsp_write(tp, 0x8005, 0x0000);
2599
2600         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2601         tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2602
2603         tg3_phy_toggle_auxctl_smdsp(tp, false);
2604
2605         tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2606
2607         err = tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
2608         if (err)
2609                 return err;
2610
2611         reg32 &= ~0x3000;
2612         tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2613
2614         return 0;
2615 }
2616
2617 static void tg3_carrier_off(struct tg3 *tp)
2618 {
2619         netif_carrier_off(tp->dev);
2620         tp->link_up = false;
2621 }
2622
2623 static void tg3_warn_mgmt_link_flap(struct tg3 *tp)
2624 {
2625         if (tg3_flag(tp, ENABLE_ASF))
2626                 netdev_warn(tp->dev,
2627                             "Management side-band traffic will be interrupted during phy settings change\n");
2628 }
2629
2630 /* This will reset the tigon3 PHY if there is no valid
2631  * link unless the FORCE argument is non-zero.
2632  */
2633 static int tg3_phy_reset(struct tg3 *tp)
2634 {
2635         u32 val, cpmuctrl;
2636         int err;
2637
2638         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2639                 val = tr32(GRC_MISC_CFG);
2640                 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2641                 udelay(40);
2642         }
2643         err  = tg3_readphy(tp, MII_BMSR, &val);
2644         err |= tg3_readphy(tp, MII_BMSR, &val);
2645         if (err != 0)
2646                 return -EBUSY;
2647
2648         if (netif_running(tp->dev) && tp->link_up) {
2649                 netif_carrier_off(tp->dev);
2650                 tg3_link_report(tp);
2651         }
2652
2653         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
2654             tg3_asic_rev(tp) == ASIC_REV_5704 ||
2655             tg3_asic_rev(tp) == ASIC_REV_5705) {
2656                 err = tg3_phy_reset_5703_4_5(tp);
2657                 if (err)
2658                         return err;
2659                 goto out;
2660         }
2661
2662         cpmuctrl = 0;
2663         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
2664             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
2665                 cpmuctrl = tr32(TG3_CPMU_CTRL);
2666                 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2667                         tw32(TG3_CPMU_CTRL,
2668                              cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2669         }
2670
2671         err = tg3_bmcr_reset(tp);
2672         if (err)
2673                 return err;
2674
2675         if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2676                 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2677                 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2678
2679                 tw32(TG3_CPMU_CTRL, cpmuctrl);
2680         }
2681
2682         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
2683             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
2684                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2685                 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2686                     CPMU_LSPD_1000MB_MACCLK_12_5) {
2687                         val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2688                         udelay(40);
2689                         tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2690                 }
2691         }
2692
2693         if (tg3_flag(tp, 5717_PLUS) &&
2694             (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2695                 return 0;
2696
2697         tg3_phy_apply_otp(tp);
2698
2699         if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2700                 tg3_phy_toggle_apd(tp, true);
2701         else
2702                 tg3_phy_toggle_apd(tp, false);
2703
2704 out:
2705         if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2706             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2707                 tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2708                 tg3_phydsp_write(tp, 0x000a, 0x0323);
2709                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2710         }
2711
2712         if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2713                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2714                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2715         }
2716
2717         if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2718                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2719                         tg3_phydsp_write(tp, 0x000a, 0x310b);
2720                         tg3_phydsp_write(tp, 0x201f, 0x9506);
2721                         tg3_phydsp_write(tp, 0x401f, 0x14e2);
2722                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2723                 }
2724         } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2725                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2726                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2727                         if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2728                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2729                                 tg3_writephy(tp, MII_TG3_TEST1,
2730                                              MII_TG3_TEST1_TRIM_EN | 0x4);
2731                         } else
2732                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2733
2734                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2735                 }
2736         }
2737
2738         /* Set Extended packet length bit (bit 14) on all chips that */
2739         /* support jumbo frames */
2740         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2741                 /* Cannot do read-modify-write on 5401 */
2742                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2743         } else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2744                 /* Set bit 14 with read-modify-write to preserve other bits */
2745                 err = tg3_phy_auxctl_read(tp,
2746                                           MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2747                 if (!err)
2748                         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2749                                            val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2750         }
2751
2752         /* Set phy register 0x10 bit 0 to high fifo elasticity to support
2753          * jumbo frames transmission.
2754          */
2755         if (tg3_flag(tp, JUMBO_CAPABLE)) {
2756                 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2757                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
2758                                      val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2759         }
2760
2761         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2762                 /* adjust output voltage */
2763                 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2764         }
2765
2766         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0)
2767                 tg3_phydsp_write(tp, 0xffb, 0x4000);
2768
2769         tg3_phy_toggle_automdix(tp, true);
2770         tg3_phy_set_wirespeed(tp);
2771         return 0;
2772 }
2773
2774 #define TG3_GPIO_MSG_DRVR_PRES           0x00000001
2775 #define TG3_GPIO_MSG_NEED_VAUX           0x00000002
2776 #define TG3_GPIO_MSG_MASK                (TG3_GPIO_MSG_DRVR_PRES | \
2777                                           TG3_GPIO_MSG_NEED_VAUX)
2778 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2779         ((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2780          (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2781          (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2782          (TG3_GPIO_MSG_DRVR_PRES << 12))
2783
2784 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2785         ((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2786          (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2787          (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2788          (TG3_GPIO_MSG_NEED_VAUX << 12))
2789
2790 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2791 {
2792         u32 status, shift;
2793
2794         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2795             tg3_asic_rev(tp) == ASIC_REV_5719)
2796                 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2797         else
2798                 status = tr32(TG3_CPMU_DRV_STATUS);
2799
2800         shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2801         status &= ~(TG3_GPIO_MSG_MASK << shift);
2802         status |= (newstat << shift);
2803
2804         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2805             tg3_asic_rev(tp) == ASIC_REV_5719)
2806                 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2807         else
2808                 tw32(TG3_CPMU_DRV_STATUS, status);
2809
2810         return status >> TG3_APE_GPIO_MSG_SHIFT;
2811 }
2812
2813 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2814 {
2815         if (!tg3_flag(tp, IS_NIC))
2816                 return 0;
2817
2818         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2819             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2820             tg3_asic_rev(tp) == ASIC_REV_5720) {
2821                 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2822                         return -EIO;
2823
2824                 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2825
2826                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2827                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2828
2829                 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2830         } else {
2831                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2832                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2833         }
2834
2835         return 0;
2836 }
2837
2838 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2839 {
2840         u32 grc_local_ctrl;
2841
2842         if (!tg3_flag(tp, IS_NIC) ||
2843             tg3_asic_rev(tp) == ASIC_REV_5700 ||
2844             tg3_asic_rev(tp) == ASIC_REV_5701)
2845                 return;
2846
2847         grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2848
2849         tw32_wait_f(GRC_LOCAL_CTRL,
2850                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2851                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2852
2853         tw32_wait_f(GRC_LOCAL_CTRL,
2854                     grc_local_ctrl,
2855                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2856
2857         tw32_wait_f(GRC_LOCAL_CTRL,
2858                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2859                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2860 }
2861
2862 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2863 {
2864         if (!tg3_flag(tp, IS_NIC))
2865                 return;
2866
2867         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
2868             tg3_asic_rev(tp) == ASIC_REV_5701) {
2869                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2870                             (GRC_LCLCTRL_GPIO_OE0 |
2871                              GRC_LCLCTRL_GPIO_OE1 |
2872                              GRC_LCLCTRL_GPIO_OE2 |
2873                              GRC_LCLCTRL_GPIO_OUTPUT0 |
2874                              GRC_LCLCTRL_GPIO_OUTPUT1),
2875                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2876         } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2877                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2878                 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2879                 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2880                                      GRC_LCLCTRL_GPIO_OE1 |
2881                                      GRC_LCLCTRL_GPIO_OE2 |
2882                                      GRC_LCLCTRL_GPIO_OUTPUT0 |
2883                                      GRC_LCLCTRL_GPIO_OUTPUT1 |
2884                                      tp->grc_local_ctrl;
2885                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2886                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2887
2888                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2889                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2890                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2891
2892                 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2893                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2894                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2895         } else {
2896                 u32 no_gpio2;
2897                 u32 grc_local_ctrl = 0;
2898
2899                 /* Workaround to prevent overdrawing Amps. */
2900                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
2901                         grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2902                         tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2903                                     grc_local_ctrl,
2904                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2905                 }
2906
2907                 /* On 5753 and variants, GPIO2 cannot be used. */
2908                 no_gpio2 = tp->nic_sram_data_cfg &
2909                            NIC_SRAM_DATA_CFG_NO_GPIO2;
2910
2911                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2912                                   GRC_LCLCTRL_GPIO_OE1 |
2913                                   GRC_LCLCTRL_GPIO_OE2 |
2914                                   GRC_LCLCTRL_GPIO_OUTPUT1 |
2915                                   GRC_LCLCTRL_GPIO_OUTPUT2;
2916                 if (no_gpio2) {
2917                         grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2918                                             GRC_LCLCTRL_GPIO_OUTPUT2);
2919                 }
2920                 tw32_wait_f(GRC_LOCAL_CTRL,
2921                             tp->grc_local_ctrl | grc_local_ctrl,
2922                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2923
2924                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2925
2926                 tw32_wait_f(GRC_LOCAL_CTRL,
2927                             tp->grc_local_ctrl | grc_local_ctrl,
2928                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2929
2930                 if (!no_gpio2) {
2931                         grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2932                         tw32_wait_f(GRC_LOCAL_CTRL,
2933                                     tp->grc_local_ctrl | grc_local_ctrl,
2934                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2935                 }
2936         }
2937 }
2938
2939 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2940 {
2941         u32 msg = 0;
2942
2943         /* Serialize power state transitions */
2944         if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2945                 return;
2946
2947         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2948                 msg = TG3_GPIO_MSG_NEED_VAUX;
2949
2950         msg = tg3_set_function_status(tp, msg);
2951
2952         if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2953                 goto done;
2954
2955         if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2956                 tg3_pwrsrc_switch_to_vaux(tp);
2957         else
2958                 tg3_pwrsrc_die_with_vmain(tp);
2959
2960 done:
2961         tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2962 }
2963
2964 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2965 {
2966         bool need_vaux = false;
2967
2968         /* The GPIOs do something completely different on 57765. */
2969         if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2970                 return;
2971
2972         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2973             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2974             tg3_asic_rev(tp) == ASIC_REV_5720) {
2975                 tg3_frob_aux_power_5717(tp, include_wol ?
2976                                         tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2977                 return;
2978         }
2979
2980         if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2981                 struct net_device *dev_peer;
2982
2983                 dev_peer = pci_get_drvdata(tp->pdev_peer);
2984
2985                 /* remove_one() may have been run on the peer. */
2986                 if (dev_peer) {
2987                         struct tg3 *tp_peer = netdev_priv(dev_peer);
2988
2989                         if (tg3_flag(tp_peer, INIT_COMPLETE))
2990                                 return;
2991
2992                         if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2993                             tg3_flag(tp_peer, ENABLE_ASF))
2994                                 need_vaux = true;
2995                 }
2996         }
2997
2998         if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2999             tg3_flag(tp, ENABLE_ASF))
3000                 need_vaux = true;
3001
3002         if (need_vaux)
3003                 tg3_pwrsrc_switch_to_vaux(tp);
3004         else
3005                 tg3_pwrsrc_die_with_vmain(tp);
3006 }
3007
3008 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
3009 {
3010         if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
3011                 return 1;
3012         else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
3013                 if (speed != SPEED_10)
3014                         return 1;
3015         } else if (speed == SPEED_10)
3016                 return 1;
3017
3018         return 0;
3019 }
3020
3021 static bool tg3_phy_power_bug(struct tg3 *tp)
3022 {
3023         switch (tg3_asic_rev(tp)) {
3024         case ASIC_REV_5700:
3025         case ASIC_REV_5704:
3026                 return true;
3027         case ASIC_REV_5780:
3028                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3029                         return true;
3030                 return false;
3031         case ASIC_REV_5717:
3032                 if (!tp->pci_fn)
3033                         return true;
3034                 return false;
3035         case ASIC_REV_5719:
3036         case ASIC_REV_5720:
3037                 if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
3038                     !tp->pci_fn)
3039                         return true;
3040                 return false;
3041         }
3042
3043         return false;
3044 }
3045
3046 static bool tg3_phy_led_bug(struct tg3 *tp)
3047 {
3048         switch (tg3_asic_rev(tp)) {
3049         case ASIC_REV_5719:
3050         case ASIC_REV_5720:
3051                 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
3052                     !tp->pci_fn)
3053                         return true;
3054                 return false;
3055         }
3056
3057         return false;
3058 }
3059
3060 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
3061 {
3062         u32 val;
3063
3064         if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)
3065                 return;
3066
3067         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
3068                 if (tg3_asic_rev(tp) == ASIC_REV_5704) {
3069                         u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
3070                         u32 serdes_cfg = tr32(MAC_SERDES_CFG);
3071
3072                         sg_dig_ctrl |=
3073                                 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
3074                         tw32(SG_DIG_CTRL, sg_dig_ctrl);
3075                         tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
3076                 }
3077                 return;
3078         }
3079
3080         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3081                 tg3_bmcr_reset(tp);
3082                 val = tr32(GRC_MISC_CFG);
3083                 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
3084                 udelay(40);
3085                 return;
3086         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3087                 u32 phytest;
3088                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
3089                         u32 phy;
3090
3091                         tg3_writephy(tp, MII_ADVERTISE, 0);
3092                         tg3_writephy(tp, MII_BMCR,
3093                                      BMCR_ANENABLE | BMCR_ANRESTART);
3094
3095                         tg3_writephy(tp, MII_TG3_FET_TEST,
3096                                      phytest | MII_TG3_FET_SHADOW_EN);
3097                         if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
3098                                 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
3099                                 tg3_writephy(tp,
3100                                              MII_TG3_FET_SHDW_AUXMODE4,
3101                                              phy);
3102                         }
3103                         tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
3104                 }
3105                 return;
3106         } else if (do_low_power) {
3107                 if (!tg3_phy_led_bug(tp))
3108                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
3109                                      MII_TG3_EXT_CTRL_FORCE_LED_OFF);
3110
3111                 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3112                       MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
3113                       MII_TG3_AUXCTL_PCTL_VREG_11V;
3114                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
3115         }
3116
3117         /* The PHY should not be powered down on some chips because
3118          * of bugs.
3119          */
3120         if (tg3_phy_power_bug(tp))
3121                 return;
3122
3123         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
3124             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
3125                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
3126                 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
3127                 val |= CPMU_LSPD_1000MB_MACCLK_12_5;
3128                 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
3129         }
3130
3131         tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
3132 }
3133
3134 /* tp->lock is held. */
3135 static int tg3_nvram_lock(struct tg3 *tp)
3136 {
3137         if (tg3_flag(tp, NVRAM)) {
3138                 int i;
3139
3140                 if (tp->nvram_lock_cnt == 0) {
3141                         tw32(NVRAM_SWARB, SWARB_REQ_SET1);
3142                         for (i = 0; i < 8000; i++) {
3143                                 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
3144                                         break;
3145                                 udelay(20);
3146                         }
3147                         if (i == 8000) {
3148                                 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
3149                                 return -ENODEV;
3150                         }
3151                 }
3152                 tp->nvram_lock_cnt++;
3153         }
3154         return 0;
3155 }
3156
3157 /* tp->lock is held. */
3158 static void tg3_nvram_unlock(struct tg3 *tp)
3159 {
3160         if (tg3_flag(tp, NVRAM)) {
3161                 if (tp->nvram_lock_cnt > 0)
3162                         tp->nvram_lock_cnt--;
3163                 if (tp->nvram_lock_cnt == 0)
3164                         tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
3165         }
3166 }
3167
3168 /* tp->lock is held. */
3169 static void tg3_enable_nvram_access(struct tg3 *tp)
3170 {
3171         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3172                 u32 nvaccess = tr32(NVRAM_ACCESS);
3173
3174                 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
3175         }
3176 }
3177
3178 /* tp->lock is held. */
3179 static void tg3_disable_nvram_access(struct tg3 *tp)
3180 {
3181         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3182                 u32 nvaccess = tr32(NVRAM_ACCESS);
3183
3184                 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
3185         }
3186 }
3187
3188 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
3189                                         u32 offset, u32 *val)
3190 {
3191         u32 tmp;
3192         int i;
3193
3194         if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
3195                 return -EINVAL;
3196
3197         tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
3198                                         EEPROM_ADDR_DEVID_MASK |
3199                                         EEPROM_ADDR_READ);
3200         tw32(GRC_EEPROM_ADDR,
3201              tmp |
3202              (0 << EEPROM_ADDR_DEVID_SHIFT) |
3203              ((offset << EEPROM_ADDR_ADDR_SHIFT) &
3204               EEPROM_ADDR_ADDR_MASK) |
3205              EEPROM_ADDR_READ | EEPROM_ADDR_START);
3206
3207         for (i = 0; i < 1000; i++) {
3208                 tmp = tr32(GRC_EEPROM_ADDR);
3209
3210                 if (tmp & EEPROM_ADDR_COMPLETE)
3211                         break;
3212                 msleep(1);
3213         }
3214         if (!(tmp & EEPROM_ADDR_COMPLETE))
3215                 return -EBUSY;
3216
3217         tmp = tr32(GRC_EEPROM_DATA);
3218
3219         /*
3220          * The data will always be opposite the native endian
3221          * format.  Perform a blind byteswap to compensate.
3222          */
3223         *val = swab32(tmp);
3224
3225         return 0;
3226 }
3227
3228 #define NVRAM_CMD_TIMEOUT 5000
3229
3230 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3231 {
3232         int i;
3233
3234         tw32(NVRAM_CMD, nvram_cmd);
3235         for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3236                 usleep_range(10, 40);
3237                 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3238                         udelay(10);
3239                         break;
3240                 }
3241         }
3242
3243         if (i == NVRAM_CMD_TIMEOUT)
3244                 return -EBUSY;
3245
3246         return 0;
3247 }
3248
3249 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3250 {
3251         if (tg3_flag(tp, NVRAM) &&
3252             tg3_flag(tp, NVRAM_BUFFERED) &&
3253             tg3_flag(tp, FLASH) &&
3254             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3255             (tp->nvram_jedecnum == JEDEC_ATMEL))
3256
3257                 addr = ((addr / tp->nvram_pagesize) <<
3258                         ATMEL_AT45DB0X1B_PAGE_POS) +
3259                        (addr % tp->nvram_pagesize);
3260
3261         return addr;
3262 }
3263
3264 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3265 {
3266         if (tg3_flag(tp, NVRAM) &&
3267             tg3_flag(tp, NVRAM_BUFFERED) &&
3268             tg3_flag(tp, FLASH) &&
3269             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3270             (tp->nvram_jedecnum == JEDEC_ATMEL))
3271
3272                 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3273                         tp->nvram_pagesize) +
3274                        (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3275
3276         return addr;
3277 }
3278
3279 /* NOTE: Data read in from NVRAM is byteswapped according to
3280  * the byteswapping settings for all other register accesses.
3281  * tg3 devices are BE devices, so on a BE machine, the data
3282  * returned will be exactly as it is seen in NVRAM.  On a LE
3283  * machine, the 32-bit value will be byteswapped.
3284  */
3285 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3286 {
3287         int ret;
3288
3289         if (!tg3_flag(tp, NVRAM))
3290                 return tg3_nvram_read_using_eeprom(tp, offset, val);
3291
3292         offset = tg3_nvram_phys_addr(tp, offset);
3293
3294         if (offset > NVRAM_ADDR_MSK)
3295                 return -EINVAL;
3296
3297         ret = tg3_nvram_lock(tp);
3298         if (ret)
3299                 return ret;
3300
3301         tg3_enable_nvram_access(tp);
3302
3303         tw32(NVRAM_ADDR, offset);
3304         ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3305                 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3306
3307         if (ret == 0)
3308                 *val = tr32(NVRAM_RDDATA);
3309
3310         tg3_disable_nvram_access(tp);
3311
3312         tg3_nvram_unlock(tp);
3313
3314         return ret;
3315 }
3316
3317 /* Ensures NVRAM data is in bytestream format. */
3318 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3319 {
3320         u32 v;
3321         int res = tg3_nvram_read(tp, offset, &v);
3322         if (!res)
3323                 *val = cpu_to_be32(v);
3324         return res;
3325 }
3326
3327 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3328                                     u32 offset, u32 len, u8 *buf)
3329 {
3330         int i, j, rc = 0;
3331         u32 val;
3332
3333         for (i = 0; i < len; i += 4) {
3334                 u32 addr;
3335                 __be32 data;
3336
3337                 addr = offset + i;
3338
3339                 memcpy(&data, buf + i, 4);
3340
3341                 /*
3342                  * The SEEPROM interface expects the data to always be opposite
3343                  * the native endian format.  We accomplish this by reversing
3344                  * all the operations that would have been performed on the
3345                  * data from a call to tg3_nvram_read_be32().
3346                  */
3347                 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3348
3349                 val = tr32(GRC_EEPROM_ADDR);
3350                 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3351
3352                 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3353                         EEPROM_ADDR_READ);
3354                 tw32(GRC_EEPROM_ADDR, val |
3355                         (0 << EEPROM_ADDR_DEVID_SHIFT) |
3356                         (addr & EEPROM_ADDR_ADDR_MASK) |
3357                         EEPROM_ADDR_START |
3358                         EEPROM_ADDR_WRITE);
3359
3360                 for (j = 0; j < 1000; j++) {
3361                         val = tr32(GRC_EEPROM_ADDR);
3362
3363                         if (val & EEPROM_ADDR_COMPLETE)
3364                                 break;
3365                         msleep(1);
3366                 }
3367                 if (!(val & EEPROM_ADDR_COMPLETE)) {
3368                         rc = -EBUSY;
3369                         break;
3370                 }
3371         }
3372
3373         return rc;
3374 }
3375
3376 /* offset and length are dword aligned */
3377 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3378                 u8 *buf)
3379 {
3380         int ret = 0;
3381         u32 pagesize = tp->nvram_pagesize;
3382         u32 pagemask = pagesize - 1;
3383         u32 nvram_cmd;
3384         u8 *tmp;
3385
3386         tmp = kmalloc(pagesize, GFP_KERNEL);
3387         if (tmp == NULL)
3388                 return -ENOMEM;
3389
3390         while (len) {
3391                 int j;
3392                 u32 phy_addr, page_off, size;
3393
3394                 phy_addr = offset & ~pagemask;
3395
3396                 for (j = 0; j < pagesize; j += 4) {
3397                         ret = tg3_nvram_read_be32(tp, phy_addr + j,
3398                                                   (__be32 *) (tmp + j));
3399                         if (ret)
3400                                 break;
3401                 }
3402                 if (ret)
3403                         break;
3404
3405                 page_off = offset & pagemask;
3406                 size = pagesize;
3407                 if (len < size)
3408                         size = len;
3409
3410                 len -= size;
3411
3412                 memcpy(tmp + page_off, buf, size);
3413
3414                 offset = offset + (pagesize - page_off);
3415
3416                 tg3_enable_nvram_access(tp);
3417
3418                 /*
3419                  * Before we can erase the flash page, we need
3420                  * to issue a special "write enable" command.
3421                  */
3422                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3423
3424                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3425                         break;
3426
3427                 /* Erase the target page */
3428                 tw32(NVRAM_ADDR, phy_addr);
3429
3430                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3431                         NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3432
3433                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3434                         break;
3435
3436                 /* Issue another write enable to start the write. */
3437                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3438
3439                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3440                         break;
3441
3442                 for (j = 0; j < pagesize; j += 4) {
3443                         __be32 data;
3444
3445                         data = *((__be32 *) (tmp + j));
3446
3447                         tw32(NVRAM_WRDATA, be32_to_cpu(data));
3448
3449                         tw32(NVRAM_ADDR, phy_addr + j);
3450
3451                         nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3452                                 NVRAM_CMD_WR;
3453
3454                         if (j == 0)
3455                                 nvram_cmd |= NVRAM_CMD_FIRST;
3456                         else if (j == (pagesize - 4))
3457                                 nvram_cmd |= NVRAM_CMD_LAST;
3458
3459                         ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3460                         if (ret)
3461                                 break;
3462                 }
3463                 if (ret)
3464                         break;
3465         }
3466
3467         nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3468         tg3_nvram_exec_cmd(tp, nvram_cmd);
3469
3470         kfree(tmp);
3471
3472         return ret;
3473 }
3474
3475 /* offset and length are dword aligned */
3476 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3477                 u8 *buf)
3478 {
3479         int i, ret = 0;
3480
3481         for (i = 0; i < len; i += 4, offset += 4) {
3482                 u32 page_off, phy_addr, nvram_cmd;
3483                 __be32 data;
3484
3485                 memcpy(&data, buf + i, 4);
3486                 tw32(NVRAM_WRDATA, be32_to_cpu(data));
3487
3488                 page_off = offset % tp->nvram_pagesize;
3489
3490                 phy_addr = tg3_nvram_phys_addr(tp, offset);
3491
3492                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3493
3494                 if (page_off == 0 || i == 0)
3495                         nvram_cmd |= NVRAM_CMD_FIRST;
3496                 if (page_off == (tp->nvram_pagesize - 4))
3497                         nvram_cmd |= NVRAM_CMD_LAST;
3498
3499                 if (i == (len - 4))
3500                         nvram_cmd |= NVRAM_CMD_LAST;
3501
3502                 if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3503                     !tg3_flag(tp, FLASH) ||
3504                     !tg3_flag(tp, 57765_PLUS))
3505                         tw32(NVRAM_ADDR, phy_addr);
3506
3507                 if (tg3_asic_rev(tp) != ASIC_REV_5752 &&
3508                     !tg3_flag(tp, 5755_PLUS) &&
3509                     (tp->nvram_jedecnum == JEDEC_ST) &&
3510                     (nvram_cmd & NVRAM_CMD_FIRST)) {
3511                         u32 cmd;
3512
3513                         cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3514                         ret = tg3_nvram_exec_cmd(tp, cmd);
3515                         if (ret)
3516                                 break;
3517                 }
3518                 if (!tg3_flag(tp, FLASH)) {
3519                         /* We always do complete word writes to eeprom. */
3520                         nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3521                 }
3522
3523                 ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3524                 if (ret)
3525                         break;
3526         }
3527         return ret;
3528 }
3529
3530 /* offset and length are dword aligned */
3531 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3532 {
3533         int ret;
3534
3535         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3536                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3537                        ~GRC_LCLCTRL_GPIO_OUTPUT1);
3538                 udelay(40);
3539         }
3540
3541         if (!tg3_flag(tp, NVRAM)) {
3542                 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3543         } else {
3544                 u32 grc_mode;
3545
3546                 ret = tg3_nvram_lock(tp);
3547                 if (ret)
3548                         return ret;
3549
3550                 tg3_enable_nvram_access(tp);
3551                 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3552                         tw32(NVRAM_WRITE1, 0x406);
3553
3554                 grc_mode = tr32(GRC_MODE);
3555                 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3556
3557                 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3558                         ret = tg3_nvram_write_block_buffered(tp, offset, len,
3559                                 buf);
3560                 } else {
3561                         ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3562                                 buf);
3563                 }
3564
3565                 grc_mode = tr32(GRC_MODE);
3566                 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3567
3568                 tg3_disable_nvram_access(tp);
3569                 tg3_nvram_unlock(tp);
3570         }
3571
3572         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3573                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3574                 udelay(40);
3575         }
3576
3577         return ret;
3578 }
3579
3580 #define RX_CPU_SCRATCH_BASE     0x30000
3581 #define RX_CPU_SCRATCH_SIZE     0x04000
3582 #define TX_CPU_SCRATCH_BASE     0x34000
3583 #define TX_CPU_SCRATCH_SIZE     0x04000
3584
3585 /* tp->lock is held. */
3586 static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base)
3587 {
3588         int i;
3589         const int iters = 10000;
3590
3591         for (i = 0; i < iters; i++) {
3592                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3593                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3594                 if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT)
3595                         break;
3596                 if (pci_channel_offline(tp->pdev))
3597                         return -EBUSY;
3598         }
3599
3600         return (i == iters) ? -EBUSY : 0;
3601 }
3602
3603 /* tp->lock is held. */
3604 static int tg3_rxcpu_pause(struct tg3 *tp)
3605 {
3606         int rc = tg3_pause_cpu(tp, RX_CPU_BASE);
3607
3608         tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3609         tw32_f(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3610         udelay(10);
3611
3612         return rc;
3613 }
3614
3615 /* tp->lock is held. */
3616 static int tg3_txcpu_pause(struct tg3 *tp)
3617 {
3618         return tg3_pause_cpu(tp, TX_CPU_BASE);
3619 }
3620
3621 /* tp->lock is held. */
3622 static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base)
3623 {
3624         tw32(cpu_base + CPU_STATE, 0xffffffff);
3625         tw32_f(cpu_base + CPU_MODE,  0x00000000);
3626 }
3627
3628 /* tp->lock is held. */
3629 static void tg3_rxcpu_resume(struct tg3 *tp)
3630 {
3631         tg3_resume_cpu(tp, RX_CPU_BASE);
3632 }
3633
3634 /* tp->lock is held. */
3635 static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base)
3636 {
3637         int rc;
3638
3639         BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3640
3641         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3642                 u32 val = tr32(GRC_VCPU_EXT_CTRL);
3643
3644                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3645                 return 0;
3646         }
3647         if (cpu_base == RX_CPU_BASE) {
3648                 rc = tg3_rxcpu_pause(tp);
3649         } else {
3650                 /*
3651                  * There is only an Rx CPU for the 5750 derivative in the
3652                  * BCM4785.
3653                  */
3654                 if (tg3_flag(tp, IS_SSB_CORE))
3655                         return 0;
3656
3657                 rc = tg3_txcpu_pause(tp);
3658         }
3659
3660         if (rc) {
3661                 netdev_err(tp->dev, "%s timed out, %s CPU\n",
3662                            __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX");
3663                 return -ENODEV;
3664         }
3665
3666         /* Clear firmware's nvram arbitration. */
3667         if (tg3_flag(tp, NVRAM))
3668                 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3669         return 0;
3670 }
3671
3672 static int tg3_fw_data_len(struct tg3 *tp,
3673                            const struct tg3_firmware_hdr *fw_hdr)
3674 {
3675         int fw_len;
3676
3677         /* Non fragmented firmware have one firmware header followed by a
3678          * contiguous chunk of data to be written. The length field in that
3679          * header is not the length of data to be written but the complete
3680          * length of the bss. The data length is determined based on
3681          * tp->fw->size minus headers.
3682          *
3683          * Fragmented firmware have a main header followed by multiple
3684          * fragments. Each fragment is identical to non fragmented firmware
3685          * with a firmware header followed by a contiguous chunk of data. In
3686          * the main header, the length field is unused and set to 0xffffffff.
3687          * In each fragment header the length is the entire size of that
3688          * fragment i.e. fragment data + header length. Data length is
3689          * therefore length field in the header minus TG3_FW_HDR_LEN.
3690          */
3691         if (tp->fw_len == 0xffffffff)
3692                 fw_len = be32_to_cpu(fw_hdr->len);
3693         else
3694                 fw_len = tp->fw->size;
3695
3696         return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32);
3697 }
3698
3699 /* tp->lock is held. */
3700 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3701                                  u32 cpu_scratch_base, int cpu_scratch_size,
3702                                  const struct tg3_firmware_hdr *fw_hdr)
3703 {
3704         int err, i;
3705         void (*write_op)(struct tg3 *, u32, u32);
3706         int total_len = tp->fw->size;
3707
3708         if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3709                 netdev_err(tp->dev,
3710                            "%s: Trying to load TX cpu firmware which is 5705\n",
3711                            __func__);
3712                 return -EINVAL;
3713         }
3714
3715         if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766)
3716                 write_op = tg3_write_mem;
3717         else
3718                 write_op = tg3_write_indirect_reg32;
3719
3720         if (tg3_asic_rev(tp) != ASIC_REV_57766) {
3721                 /* It is possible that bootcode is still loading at this point.
3722                  * Get the nvram lock first before halting the cpu.
3723                  */
3724                 int lock_err = tg3_nvram_lock(tp);
3725                 err = tg3_halt_cpu(tp, cpu_base);
3726                 if (!lock_err)
3727                         tg3_nvram_unlock(tp);
3728                 if (err)
3729                         goto out;
3730
3731                 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3732                         write_op(tp, cpu_scratch_base + i, 0);
3733                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3734                 tw32(cpu_base + CPU_MODE,
3735                      tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT);
3736         } else {
3737                 /* Subtract additional main header for fragmented firmware and
3738                  * advance to the first fragment
3739                  */
3740                 total_len -= TG3_FW_HDR_LEN;
3741                 fw_hdr++;
3742         }
3743
3744         do {
3745                 u32 *fw_data = (u32 *)(fw_hdr + 1);
3746                 for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++)
3747                         write_op(tp, cpu_scratch_base +
3748                                      (be32_to_cpu(fw_hdr->base_addr) & 0xffff) +
3749                                      (i * sizeof(u32)),
3750                                  be32_to_cpu(fw_data[i]));
3751
3752                 total_len -= be32_to_cpu(fw_hdr->len);
3753
3754                 /* Advance to next fragment */
3755                 fw_hdr = (struct tg3_firmware_hdr *)
3756                          ((void *)fw_hdr + be32_to_cpu(fw_hdr->len));
3757         } while (total_len > 0);
3758
3759         err = 0;
3760
3761 out:
3762         return err;
3763 }
3764
3765 /* tp->lock is held. */
3766 static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc)
3767 {
3768         int i;
3769         const int iters = 5;
3770
3771         tw32(cpu_base + CPU_STATE, 0xffffffff);
3772         tw32_f(cpu_base + CPU_PC, pc);
3773
3774         for (i = 0; i < iters; i++) {
3775                 if (tr32(cpu_base + CPU_PC) == pc)
3776                         break;
3777                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3778                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3779                 tw32_f(cpu_base + CPU_PC, pc);
3780                 udelay(1000);
3781         }
3782
3783         return (i == iters) ? -EBUSY : 0;
3784 }
3785
3786 /* tp->lock is held. */
3787 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3788 {
3789         const struct tg3_firmware_hdr *fw_hdr;
3790         int err;
3791
3792         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3793
3794         /* Firmware blob starts with version numbers, followed by
3795            start address and length. We are setting complete length.
3796            length = end_address_of_bss - start_address_of_text.
3797            Remainder is the blob to be loaded contiguously
3798            from start address. */
3799
3800         err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3801                                     RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3802                                     fw_hdr);
3803         if (err)
3804                 return err;
3805
3806         err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3807                                     TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3808                                     fw_hdr);
3809         if (err)
3810                 return err;
3811
3812         /* Now startup only the RX cpu. */
3813         err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE,
3814                                        be32_to_cpu(fw_hdr->base_addr));
3815         if (err) {
3816                 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3817                            "should be %08x\n", __func__,
3818                            tr32(RX_CPU_BASE + CPU_PC),
3819                                 be32_to_cpu(fw_hdr->base_addr));
3820                 return -ENODEV;
3821         }
3822
3823         tg3_rxcpu_resume(tp);
3824
3825         return 0;
3826 }
3827
3828 static int tg3_validate_rxcpu_state(struct tg3 *tp)
3829 {
3830         const int iters = 1000;
3831         int i;
3832         u32 val;
3833
3834         /* Wait for boot code to complete initialization and enter service
3835          * loop. It is then safe to download service patches
3836          */
3837         for (i = 0; i < iters; i++) {
3838                 if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP)
3839                         break;
3840
3841                 udelay(10);
3842         }
3843
3844         if (i == iters) {
3845                 netdev_err(tp->dev, "Boot code not ready for service patches\n");
3846                 return -EBUSY;
3847         }
3848
3849         val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE);
3850         if (val & 0xff) {
3851                 netdev_warn(tp->dev,
3852                             "Other patches exist. Not downloading EEE patch\n");
3853                 return -EEXIST;
3854         }
3855
3856         return 0;
3857 }
3858
3859 /* tp->lock is held. */
3860 static void tg3_load_57766_firmware(struct tg3 *tp)
3861 {
3862         struct tg3_firmware_hdr *fw_hdr;
3863
3864         if (!tg3_flag(tp, NO_NVRAM))
3865                 return;
3866
3867         if (tg3_validate_rxcpu_state(tp))
3868                 return;
3869
3870         if (!tp->fw)
3871                 return;
3872
3873         /* This firmware blob has a different format than older firmware
3874          * releases as given below. The main difference is we have fragmented
3875          * data to be written to non-contiguous locations.
3876          *
3877          * In the beginning we have a firmware header identical to other
3878          * firmware which consists of version, base addr and length. The length
3879          * here is unused and set to 0xffffffff.
3880          *
3881          * This is followed by a series of firmware fragments which are
3882          * individually identical to previous firmware. i.e. they have the
3883          * firmware header and followed by data for that fragment. The version
3884          * field of the individual fragment header is unused.
3885          */
3886
3887         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3888         if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR)
3889                 return;
3890
3891         if (tg3_rxcpu_pause(tp))
3892                 return;
3893
3894         /* tg3_load_firmware_cpu() will always succeed for the 57766 */
3895         tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr);
3896
3897         tg3_rxcpu_resume(tp);
3898 }
3899
3900 /* tp->lock is held. */
3901 static int tg3_load_tso_firmware(struct tg3 *tp)
3902 {
3903         const struct tg3_firmware_hdr *fw_hdr;
3904         unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3905         int err;
3906
3907         if (!tg3_flag(tp, FW_TSO))
3908                 return 0;
3909
3910         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3911
3912         /* Firmware blob starts with version numbers, followed by
3913            start address and length. We are setting complete length.
3914            length = end_address_of_bss - start_address_of_text.
3915            Remainder is the blob to be loaded contiguously
3916            from start address. */
3917
3918         cpu_scratch_size = tp->fw_len;
3919
3920         if (tg3_asic_rev(tp) == ASIC_REV_5705) {
3921                 cpu_base = RX_CPU_BASE;
3922                 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3923         } else {
3924                 cpu_base = TX_CPU_BASE;
3925                 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3926                 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3927         }
3928
3929         err = tg3_load_firmware_cpu(tp, cpu_base,
3930                                     cpu_scratch_base, cpu_scratch_size,
3931                                     fw_hdr);
3932         if (err)
3933                 return err;
3934
3935         /* Now startup the cpu. */
3936         err = tg3_pause_cpu_and_set_pc(tp, cpu_base,
3937                                        be32_to_cpu(fw_hdr->base_addr));
3938         if (err) {
3939                 netdev_err(tp->dev,
3940                            "%s fails to set CPU PC, is %08x should be %08x\n",
3941                            __func__, tr32(cpu_base + CPU_PC),
3942                            be32_to_cpu(fw_hdr->base_addr));
3943                 return -ENODEV;
3944         }
3945
3946         tg3_resume_cpu(tp, cpu_base);
3947         return 0;
3948 }
3949
3950 /* tp->lock is held. */
3951 static void __tg3_set_one_mac_addr(struct tg3 *tp, u8 *mac_addr, int index)
3952 {
3953         u32 addr_high, addr_low;
3954
3955         addr_high = ((mac_addr[0] << 8) | mac_addr[1]);
3956         addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) |
3957                     (mac_addr[4] <<  8) | mac_addr[5]);
3958
3959         if (index < 4) {
3960                 tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high);
3961                 tw32(MAC_ADDR_0_LOW + (index * 8), addr_low);
3962         } else {
3963                 index -= 4;
3964                 tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high);
3965                 tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low);
3966         }
3967 }
3968
3969 /* tp->lock is held. */
3970 static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1)
3971 {
3972         u32 addr_high;
3973         int i;
3974
3975         for (i = 0; i < 4; i++) {
3976                 if (i == 1 && skip_mac_1)
3977                         continue;
3978                 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3979         }
3980
3981         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
3982             tg3_asic_rev(tp) == ASIC_REV_5704) {
3983                 for (i = 4; i < 16; i++)
3984                         __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3985         }
3986
3987         addr_high = (tp->dev->dev_addr[0] +
3988                      tp->dev->dev_addr[1] +
3989                      tp->dev->dev_addr[2] +
3990                      tp->dev->dev_addr[3] +
3991                      tp->dev->dev_addr[4] +
3992                      tp->dev->dev_addr[5]) &
3993                 TX_BACKOFF_SEED_MASK;
3994         tw32(MAC_TX_BACKOFF_SEED, addr_high);
3995 }
3996
3997 static void tg3_enable_register_access(struct tg3 *tp)
3998 {
3999         /*
4000          * Make sure register accesses (indirect or otherwise) will function
4001          * correctly.
4002          */
4003         pci_write_config_dword(tp->pdev,
4004                                TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
4005 }
4006
4007 static int tg3_power_up(struct tg3 *tp)
4008 {
4009         int err;
4010
4011         tg3_enable_register_access(tp);
4012
4013         err = pci_set_power_state(tp->pdev, PCI_D0);
4014         if (!err) {
4015                 /* Switch out of Vaux if it is a NIC */
4016                 tg3_pwrsrc_switch_to_vmain(tp);
4017         } else {
4018                 netdev_err(tp->dev, "Transition to D0 failed\n");
4019         }
4020
4021         return err;
4022 }
4023
4024 static int tg3_setup_phy(struct tg3 *, bool);
4025
4026 static int tg3_power_down_prepare(struct tg3 *tp)
4027 {
4028         u32 misc_host_ctrl;
4029         bool device_should_wake, do_low_power;
4030
4031         tg3_enable_register_access(tp);
4032
4033         /* Restore the CLKREQ setting. */
4034         if (tg3_flag(tp, CLKREQ_BUG))
4035                 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4036                                          PCI_EXP_LNKCTL_CLKREQ_EN);
4037
4038         misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
4039         tw32(TG3PCI_MISC_HOST_CTRL,
4040              misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
4041
4042         device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
4043                              tg3_flag(tp, WOL_ENABLE);
4044
4045         if (tg3_flag(tp, USE_PHYLIB)) {
4046                 do_low_power = false;
4047                 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
4048                     !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4049                         struct phy_device *phydev;
4050                         u32 phyid, advertising;
4051
4052                         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
4053
4054                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4055
4056                         tp->link_config.speed = phydev->speed;
4057                         tp->link_config.duplex = phydev->duplex;
4058                         tp->link_config.autoneg = phydev->autoneg;
4059                         tp->link_config.advertising = phydev->advertising;
4060
4061                         advertising = ADVERTISED_TP |
4062                                       ADVERTISED_Pause |
4063                                       ADVERTISED_Autoneg |
4064                                       ADVERTISED_10baseT_Half;
4065
4066                         if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
4067                                 if (tg3_flag(tp, WOL_SPEED_100MB))
4068                                         advertising |=
4069                                                 ADVERTISED_100baseT_Half |
4070                                                 ADVERTISED_100baseT_Full |
4071                                                 ADVERTISED_10baseT_Full;
4072                                 else
4073                                         advertising |= ADVERTISED_10baseT_Full;
4074                         }
4075
4076                         phydev->advertising = advertising;
4077
4078                         phy_start_aneg(phydev);
4079
4080                         phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
4081                         if (phyid != PHY_ID_BCMAC131) {
4082                                 phyid &= PHY_BCM_OUI_MASK;
4083                                 if (phyid == PHY_BCM_OUI_1 ||
4084                                     phyid == PHY_BCM_OUI_2 ||
4085                                     phyid == PHY_BCM_OUI_3)
4086                                         do_low_power = true;
4087                         }
4088                 }
4089         } else {
4090                 do_low_power = true;
4091
4092                 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
4093                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4094
4095                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
4096                         tg3_setup_phy(tp, false);
4097         }
4098
4099         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
4100                 u32 val;
4101
4102                 val = tr32(GRC_VCPU_EXT_CTRL);
4103                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
4104         } else if (!tg3_flag(tp, ENABLE_ASF)) {
4105                 int i;
4106                 u32 val;
4107
4108                 for (i = 0; i < 200; i++) {
4109                         tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
4110                         if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4111                                 break;
4112                         msleep(1);
4113                 }
4114         }
4115         if (tg3_flag(tp, WOL_CAP))
4116                 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
4117                                                      WOL_DRV_STATE_SHUTDOWN |
4118                                                      WOL_DRV_WOL |
4119                                                      WOL_SET_MAGIC_PKT);
4120
4121         if (device_should_wake) {
4122                 u32 mac_mode;
4123
4124                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
4125                         if (do_low_power &&
4126                             !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
4127                                 tg3_phy_auxctl_write(tp,
4128                                                MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
4129                                                MII_TG3_AUXCTL_PCTL_WOL_EN |
4130                                                MII_TG3_AUXCTL_PCTL_100TX_LPWR |
4131                                                MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
4132                                 udelay(40);
4133                         }
4134
4135                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4136                                 mac_mode = MAC_MODE_PORT_MODE_GMII;
4137                         else if (tp->phy_flags &
4138                                  TG3_PHYFLG_KEEP_LINK_ON_PWRDN) {
4139                                 if (tp->link_config.active_speed == SPEED_1000)
4140                                         mac_mode = MAC_MODE_PORT_MODE_GMII;
4141                                 else
4142                                         mac_mode = MAC_MODE_PORT_MODE_MII;
4143                         } else
4144                                 mac_mode = MAC_MODE_PORT_MODE_MII;
4145
4146                         mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
4147                         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
4148                                 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
4149                                              SPEED_100 : SPEED_10;
4150                                 if (tg3_5700_link_polarity(tp, speed))
4151                                         mac_mode |= MAC_MODE_LINK_POLARITY;
4152                                 else
4153                                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
4154                         }
4155                 } else {
4156                         mac_mode = MAC_MODE_PORT_MODE_TBI;
4157                 }
4158
4159                 if (!tg3_flag(tp, 5750_PLUS))
4160                         tw32(MAC_LED_CTRL, tp->led_ctrl);
4161
4162                 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
4163                 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
4164                     (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
4165                         mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
4166
4167                 if (tg3_flag(tp, ENABLE_APE))
4168                         mac_mode |= MAC_MODE_APE_TX_EN |
4169                                     MAC_MODE_APE_RX_EN |
4170                                     MAC_MODE_TDE_ENABLE;
4171
4172                 tw32_f(MAC_MODE, mac_mode);
4173                 udelay(100);
4174
4175                 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
4176                 udelay(10);
4177         }
4178
4179         if (!tg3_flag(tp, WOL_SPEED_100MB) &&
4180             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4181              tg3_asic_rev(tp) == ASIC_REV_5701)) {
4182                 u32 base_val;
4183
4184                 base_val = tp->pci_clock_ctrl;
4185                 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
4186                              CLOCK_CTRL_TXCLK_DISABLE);
4187
4188                 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
4189                             CLOCK_CTRL_PWRDOWN_PLL133, 40);
4190         } else if (tg3_flag(tp, 5780_CLASS) ||
4191                    tg3_flag(tp, CPMU_PRESENT) ||
4192                    tg3_asic_rev(tp) == ASIC_REV_5906) {
4193                 /* do nothing */
4194         } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
4195                 u32 newbits1, newbits2;
4196
4197                 if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4198                     tg3_asic_rev(tp) == ASIC_REV_5701) {
4199                         newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
4200                                     CLOCK_CTRL_TXCLK_DISABLE |
4201                                     CLOCK_CTRL_ALTCLK);
4202                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4203                 } else if (tg3_flag(tp, 5705_PLUS)) {
4204                         newbits1 = CLOCK_CTRL_625_CORE;
4205                         newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
4206                 } else {
4207                         newbits1 = CLOCK_CTRL_ALTCLK;
4208                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4209                 }
4210
4211                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
4212                             40);
4213
4214                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
4215                             40);
4216
4217                 if (!tg3_flag(tp, 5705_PLUS)) {
4218                         u32 newbits3;
4219
4220                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4221                             tg3_asic_rev(tp) == ASIC_REV_5701) {
4222                                 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
4223                                             CLOCK_CTRL_TXCLK_DISABLE |
4224                                             CLOCK_CTRL_44MHZ_CORE);
4225                         } else {
4226                                 newbits3 = CLOCK_CTRL_44MHZ_CORE;
4227                         }
4228
4229                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
4230                                     tp->pci_clock_ctrl | newbits3, 40);
4231                 }
4232         }
4233
4234         if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
4235                 tg3_power_down_phy(tp, do_low_power);
4236
4237         tg3_frob_aux_power(tp, true);
4238
4239         /* Workaround for unstable PLL clock */
4240         if ((!tg3_flag(tp, IS_SSB_CORE)) &&
4241             ((tg3_chip_rev(tp) == CHIPREV_5750_AX) ||
4242              (tg3_chip_rev(tp) == CHIPREV_5750_BX))) {
4243                 u32 val = tr32(0x7d00);
4244
4245                 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
4246                 tw32(0x7d00, val);
4247                 if (!tg3_flag(tp, ENABLE_ASF)) {
4248                         int err;
4249
4250                         err = tg3_nvram_lock(tp);
4251                         tg3_halt_cpu(tp, RX_CPU_BASE);
4252                         if (!err)
4253                                 tg3_nvram_unlock(tp);
4254                 }
4255         }
4256
4257         tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
4258
4259         tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
4260
4261         return 0;
4262 }
4263
4264 static void tg3_power_down(struct tg3 *tp)
4265 {
4266         pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
4267         pci_set_power_state(tp->pdev, PCI_D3hot);
4268 }
4269
4270 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
4271 {
4272         switch (val & MII_TG3_AUX_STAT_SPDMASK) {
4273         case MII_TG3_AUX_STAT_10HALF:
4274                 *speed = SPEED_10;
4275                 *duplex = DUPLEX_HALF;
4276                 break;
4277
4278         case MII_TG3_AUX_STAT_10FULL:
4279                 *speed = SPEED_10;
4280                 *duplex = DUPLEX_FULL;
4281                 break;
4282
4283         case MII_TG3_AUX_STAT_100HALF:
4284                 *speed = SPEED_100;
4285                 *duplex = DUPLEX_HALF;
4286                 break;
4287
4288         case MII_TG3_AUX_STAT_100FULL:
4289                 *speed = SPEED_100;
4290                 *duplex = DUPLEX_FULL;
4291                 break;
4292
4293         case MII_TG3_AUX_STAT_1000HALF:
4294                 *speed = SPEED_1000;
4295                 *duplex = DUPLEX_HALF;
4296                 break;
4297
4298         case MII_TG3_AUX_STAT_1000FULL:
4299                 *speed = SPEED_1000;
4300                 *duplex = DUPLEX_FULL;
4301                 break;
4302
4303         default:
4304                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4305                         *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
4306                                  SPEED_10;
4307                         *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
4308                                   DUPLEX_HALF;
4309                         break;
4310                 }
4311                 *speed = SPEED_UNKNOWN;
4312                 *duplex = DUPLEX_UNKNOWN;
4313                 break;
4314         }
4315 }
4316
4317 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
4318 {
4319         int err = 0;
4320         u32 val, new_adv;
4321
4322         new_adv = ADVERTISE_CSMA;
4323         new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
4324         new_adv |= mii_advertise_flowctrl(flowctrl);
4325
4326         err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
4327         if (err)
4328                 goto done;
4329
4330         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4331                 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
4332
4333                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4334                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)
4335                         new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4336
4337                 err = tg3_writephy(tp, MII_CTRL1000, new_adv);
4338                 if (err)
4339                         goto done;
4340         }
4341
4342         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4343                 goto done;
4344
4345         tw32(TG3_CPMU_EEE_MODE,
4346              tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
4347
4348         err = tg3_phy_toggle_auxctl_smdsp(tp, true);
4349         if (!err) {
4350                 u32 err2;
4351
4352                 val = 0;
4353                 /* Advertise 100-BaseTX EEE ability */
4354                 if (advertise & ADVERTISED_100baseT_Full)
4355                         val |= MDIO_AN_EEE_ADV_100TX;
4356                 /* Advertise 1000-BaseT EEE ability */
4357                 if (advertise & ADVERTISED_1000baseT_Full)
4358                         val |= MDIO_AN_EEE_ADV_1000T;
4359
4360                 if (!tp->eee.eee_enabled) {
4361                         val = 0;
4362                         tp->eee.advertised = 0;
4363                 } else {
4364                         tp->eee.advertised = advertise &
4365                                              (ADVERTISED_100baseT_Full |
4366                                               ADVERTISED_1000baseT_Full);
4367                 }
4368
4369                 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
4370                 if (err)
4371                         val = 0;
4372
4373                 switch (tg3_asic_rev(tp)) {
4374                 case ASIC_REV_5717:
4375                 case ASIC_REV_57765:
4376                 case ASIC_REV_57766:
4377                 case ASIC_REV_5719:
4378                         /* If we advertised any eee advertisements above... */
4379                         if (val)
4380                                 val = MII_TG3_DSP_TAP26_ALNOKO |
4381                                       MII_TG3_DSP_TAP26_RMRXSTO |
4382                                       MII_TG3_DSP_TAP26_OPCSINPT;
4383                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
4384                         /* Fall through */
4385                 case ASIC_REV_5720:
4386                 case ASIC_REV_5762:
4387                         if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4388                                 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4389                                                  MII_TG3_DSP_CH34TP2_HIBW01);
4390                 }
4391
4392                 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false);
4393                 if (!err)
4394                         err = err2;
4395         }
4396
4397 done:
4398         return err;
4399 }
4400
4401 static void tg3_phy_copper_begin(struct tg3 *tp)
4402 {
4403         if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4404             (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4405                 u32 adv, fc;
4406
4407                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4408                     !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4409                         adv = ADVERTISED_10baseT_Half |
4410                               ADVERTISED_10baseT_Full;
4411                         if (tg3_flag(tp, WOL_SPEED_100MB))
4412                                 adv |= ADVERTISED_100baseT_Half |
4413                                        ADVERTISED_100baseT_Full;
4414                         if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) {
4415                                 if (!(tp->phy_flags &
4416                                       TG3_PHYFLG_DISABLE_1G_HD_ADV))
4417                                         adv |= ADVERTISED_1000baseT_Half;
4418                                 adv |= ADVERTISED_1000baseT_Full;
4419                         }
4420
4421                         fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4422                 } else {
4423                         adv = tp->link_config.advertising;
4424                         if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4425                                 adv &= ~(ADVERTISED_1000baseT_Half |
4426                                          ADVERTISED_1000baseT_Full);
4427
4428                         fc = tp->link_config.flowctrl;
4429                 }
4430
4431                 tg3_phy_autoneg_cfg(tp, adv, fc);
4432
4433                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4434                     (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4435                         /* Normally during power down we want to autonegotiate
4436                          * the lowest possible speed for WOL. However, to avoid
4437                          * link flap, we leave it untouched.
4438                          */
4439                         return;
4440                 }
4441
4442                 tg3_writephy(tp, MII_BMCR,
4443                              BMCR_ANENABLE | BMCR_ANRESTART);
4444         } else {
4445                 int i;
4446                 u32 bmcr, orig_bmcr;
4447
4448                 tp->link_config.active_speed = tp->link_config.speed;
4449                 tp->link_config.active_duplex = tp->link_config.duplex;
4450
4451                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
4452                         /* With autoneg disabled, 5715 only links up when the
4453                          * advertisement register has the configured speed
4454                          * enabled.
4455                          */
4456                         tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL);
4457                 }
4458
4459                 bmcr = 0;
4460                 switch (tp->link_config.speed) {
4461                 default:
4462                 case SPEED_10:
4463                         break;
4464
4465                 case SPEED_100:
4466                         bmcr |= BMCR_SPEED100;
4467                         break;
4468
4469                 case SPEED_1000:
4470                         bmcr |= BMCR_SPEED1000;
4471                         break;
4472                 }
4473
4474                 if (tp->link_config.duplex == DUPLEX_FULL)
4475                         bmcr |= BMCR_FULLDPLX;
4476
4477                 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4478                     (bmcr != orig_bmcr)) {
4479                         tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4480                         for (i = 0; i < 1500; i++) {
4481                                 u32 tmp;
4482
4483                                 udelay(10);
4484                                 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4485                                     tg3_readphy(tp, MII_BMSR, &tmp))
4486                                         continue;
4487                                 if (!(tmp & BMSR_LSTATUS)) {
4488                                         udelay(40);
4489                                         break;
4490                                 }
4491                         }
4492                         tg3_writephy(tp, MII_BMCR, bmcr);
4493                         udelay(40);
4494                 }
4495         }
4496 }
4497
4498 static int tg3_phy_pull_config(struct tg3 *tp)
4499 {
4500         int err;
4501         u32 val;
4502
4503         err = tg3_readphy(tp, MII_BMCR, &val);
4504         if (err)
4505                 goto done;
4506
4507         if (!(val & BMCR_ANENABLE)) {
4508                 tp->link_config.autoneg = AUTONEG_DISABLE;
4509                 tp->link_config.advertising = 0;
4510                 tg3_flag_clear(tp, PAUSE_AUTONEG);
4511
4512                 err = -EIO;
4513
4514                 switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) {
4515                 case 0:
4516                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4517                                 goto done;
4518
4519                         tp->link_config.speed = SPEED_10;
4520                         break;
4521                 case BMCR_SPEED100:
4522                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4523                                 goto done;
4524
4525                         tp->link_config.speed = SPEED_100;
4526                         break;
4527                 case BMCR_SPEED1000:
4528                         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4529                                 tp->link_config.speed = SPEED_1000;
4530                                 break;
4531                         }
4532                         /* Fall through */
4533                 default:
4534                         goto done;
4535                 }
4536
4537                 if (val & BMCR_FULLDPLX)
4538                         tp->link_config.duplex = DUPLEX_FULL;
4539                 else
4540                         tp->link_config.duplex = DUPLEX_HALF;
4541
4542                 tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
4543
4544                 err = 0;
4545                 goto done;
4546         }
4547
4548         tp->link_config.autoneg = AUTONEG_ENABLE;
4549         tp->link_config.advertising = ADVERTISED_Autoneg;
4550         tg3_flag_set(tp, PAUSE_AUTONEG);
4551
4552         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4553                 u32 adv;
4554
4555                 err = tg3_readphy(tp, MII_ADVERTISE, &val);
4556                 if (err)
4557                         goto done;
4558
4559                 adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL);
4560                 tp->link_config.advertising |= adv | ADVERTISED_TP;
4561
4562                 tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val);
4563         } else {
4564                 tp->link_config.advertising |= ADVERTISED_FIBRE;
4565         }
4566
4567         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4568                 u32 adv;
4569
4570                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4571                         err = tg3_readphy(tp, MII_CTRL1000, &val);
4572                         if (err)
4573                                 goto done;
4574
4575                         adv = mii_ctrl1000_to_ethtool_adv_t(val);
4576                 } else {
4577                         err = tg3_readphy(tp, MII_ADVERTISE, &val);
4578                         if (err)
4579                                 goto done;
4580
4581                         adv = tg3_decode_flowctrl_1000X(val);
4582                         tp->link_config.flowctrl = adv;
4583
4584                         val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL);
4585                         adv = mii_adv_to_ethtool_adv_x(val);
4586                 }
4587
4588                 tp->link_config.advertising |= adv;
4589         }
4590
4591 done:
4592         return err;
4593 }
4594
4595 static int tg3_init_5401phy_dsp(struct tg3 *tp)
4596 {
4597         int err;
4598
4599         /* Turn off tap power management. */
4600         /* Set Extended packet length bit */
4601         err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4602
4603         err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4604         err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4605         err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4606         err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4607         err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4608
4609         udelay(40);
4610
4611         return err;
4612 }
4613
4614 static bool tg3_phy_eee_config_ok(struct tg3 *tp)
4615 {
4616         struct ethtool_eee eee;
4617
4618         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4619                 return true;
4620
4621         tg3_eee_pull_config(tp, &eee);
4622
4623         if (tp->eee.eee_enabled) {
4624                 if (tp->eee.advertised != eee.advertised ||
4625                     tp->eee.tx_lpi_timer != eee.tx_lpi_timer ||
4626                     tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled)
4627                         return false;
4628         } else {
4629                 /* EEE is disabled but we're advertising */
4630                 if (eee.advertised)
4631                         return false;
4632         }
4633
4634         return true;
4635 }
4636
4637 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4638 {
4639         u32 advmsk, tgtadv, advertising;
4640
4641         advertising = tp->link_config.advertising;
4642         tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4643
4644         advmsk = ADVERTISE_ALL;
4645         if (tp->link_config.active_duplex == DUPLEX_FULL) {
4646                 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4647                 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4648         }
4649
4650         if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4651                 return false;
4652
4653         if ((*lcladv & advmsk) != tgtadv)
4654                 return false;
4655
4656         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4657                 u32 tg3_ctrl;
4658
4659                 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4660
4661                 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4662                         return false;
4663
4664                 if (tgtadv &&
4665                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4666                      tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) {
4667                         tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4668                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4669                                      CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4670                 } else {
4671                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4672                 }
4673
4674                 if (tg3_ctrl != tgtadv)
4675                         return false;
4676         }
4677
4678         return true;
4679 }
4680
4681 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4682 {
4683         u32 lpeth = 0;
4684
4685         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4686                 u32 val;
4687
4688                 if (tg3_readphy(tp, MII_STAT1000, &val))
4689                         return false;
4690
4691                 lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4692         }
4693
4694         if (tg3_readphy(tp, MII_LPA, rmtadv))
4695                 return false;
4696
4697         lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4698         tp->link_config.rmt_adv = lpeth;
4699
4700         return true;
4701 }
4702
4703 static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up)
4704 {
4705         if (curr_link_up != tp->link_up) {
4706                 if (curr_link_up) {
4707                         netif_carrier_on(tp->dev);
4708                 } else {
4709                         netif_carrier_off(tp->dev);
4710                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4711                                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4712                 }
4713
4714                 tg3_link_report(tp);
4715                 return true;
4716         }
4717
4718         return false;
4719 }
4720
4721 static void tg3_clear_mac_status(struct tg3 *tp)
4722 {
4723         tw32(MAC_EVENT, 0);
4724
4725         tw32_f(MAC_STATUS,
4726                MAC_STATUS_SYNC_CHANGED |
4727                MAC_STATUS_CFG_CHANGED |
4728                MAC_STATUS_MI_COMPLETION |
4729                MAC_STATUS_LNKSTATE_CHANGED);
4730         udelay(40);
4731 }
4732
4733 static void tg3_setup_eee(struct tg3 *tp)
4734 {
4735         u32 val;
4736
4737         val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
4738               TG3_CPMU_EEE_LNKIDL_UART_IDL;
4739         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
4740                 val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT;
4741
4742         tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val);
4743
4744         tw32_f(TG3_CPMU_EEE_CTRL,
4745                TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
4746
4747         val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
4748               (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) |
4749               TG3_CPMU_EEEMD_LPI_IN_RX |
4750               TG3_CPMU_EEEMD_EEE_ENABLE;
4751
4752         if (tg3_asic_rev(tp) != ASIC_REV_5717)
4753                 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
4754
4755         if (tg3_flag(tp, ENABLE_APE))
4756                 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
4757
4758         tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0);
4759
4760         tw32_f(TG3_CPMU_EEE_DBTMR1,
4761                TG3_CPMU_DBTMR1_PCIEXIT_2047US |
4762                (tp->eee.tx_lpi_timer & 0xffff));
4763
4764         tw32_f(TG3_CPMU_EEE_DBTMR2,
4765                TG3_CPMU_DBTMR2_APE_TX_2047US |
4766                TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
4767 }
4768
4769 static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
4770 {
4771         bool current_link_up;
4772         u32 bmsr, val;
4773         u32 lcl_adv, rmt_adv;
4774         u16 current_speed;
4775         u8 current_duplex;
4776         int i, err;
4777
4778         tg3_clear_mac_status(tp);
4779
4780         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4781                 tw32_f(MAC_MI_MODE,
4782                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4783                 udelay(80);
4784         }
4785
4786         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4787
4788         /* Some third-party PHYs need to be reset on link going
4789          * down.
4790          */
4791         if ((tg3_asic_rev(tp) == ASIC_REV_5703 ||
4792              tg3_asic_rev(tp) == ASIC_REV_5704 ||
4793              tg3_asic_rev(tp) == ASIC_REV_5705) &&
4794             tp->link_up) {
4795                 tg3_readphy(tp, MII_BMSR, &bmsr);
4796                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4797                     !(bmsr & BMSR_LSTATUS))
4798                         force_reset = true;
4799         }
4800         if (force_reset)
4801                 tg3_phy_reset(tp);
4802
4803         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4804                 tg3_readphy(tp, MII_BMSR, &bmsr);
4805                 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4806                     !tg3_flag(tp, INIT_COMPLETE))
4807                         bmsr = 0;
4808
4809                 if (!(bmsr & BMSR_LSTATUS)) {
4810                         err = tg3_init_5401phy_dsp(tp);
4811                         if (err)
4812                                 return err;
4813
4814                         tg3_readphy(tp, MII_BMSR, &bmsr);
4815                         for (i = 0; i < 1000; i++) {
4816                                 udelay(10);
4817                                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4818                                     (bmsr & BMSR_LSTATUS)) {
4819                                         udelay(40);
4820                                         break;
4821                                 }
4822                         }
4823
4824                         if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4825                             TG3_PHY_REV_BCM5401_B0 &&
4826                             !(bmsr & BMSR_LSTATUS) &&
4827                             tp->link_config.active_speed == SPEED_1000) {
4828                                 err = tg3_phy_reset(tp);
4829                                 if (!err)
4830                                         err = tg3_init_5401phy_dsp(tp);
4831                                 if (err)
4832                                         return err;
4833                         }
4834                 }
4835         } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4836                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) {
4837                 /* 5701 {A0,B0} CRC bug workaround */
4838                 tg3_writephy(tp, 0x15, 0x0a75);
4839                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4840                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4841                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4842         }
4843
4844         /* Clear pending interrupts... */
4845         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4846         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4847
4848         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4849                 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4850         else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4851                 tg3_writephy(tp, MII_TG3_IMASK, ~0);
4852
4853         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4854             tg3_asic_rev(tp) == ASIC_REV_5701) {
4855                 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4856                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
4857                                      MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4858                 else
4859                         tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4860         }
4861
4862         current_link_up = false;
4863         current_speed = SPEED_UNKNOWN;
4864         current_duplex = DUPLEX_UNKNOWN;
4865         tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4866         tp->link_config.rmt_adv = 0;
4867
4868         if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4869                 err = tg3_phy_auxctl_read(tp,
4870                                           MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4871                                           &val);
4872                 if (!err && !(val & (1 << 10))) {
4873                         tg3_phy_auxctl_write(tp,
4874                                              MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4875                                              val | (1 << 10));
4876                         goto relink;
4877                 }
4878         }
4879
4880         bmsr = 0;
4881         for (i = 0; i < 100; i++) {
4882                 tg3_readphy(tp, MII_BMSR, &bmsr);
4883                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4884                     (bmsr & BMSR_LSTATUS))
4885                         break;
4886                 udelay(40);
4887         }
4888
4889         if (bmsr & BMSR_LSTATUS) {
4890                 u32 aux_stat, bmcr;
4891
4892                 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4893                 for (i = 0; i < 2000; i++) {
4894                         udelay(10);
4895                         if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4896                             aux_stat)
4897                                 break;
4898                 }
4899
4900                 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4901                                              &current_speed,
4902                                              &current_duplex);
4903
4904                 bmcr = 0;
4905                 for (i = 0; i < 200; i++) {
4906                         tg3_readphy(tp, MII_BMCR, &bmcr);
4907                         if (tg3_readphy(tp, MII_BMCR, &bmcr))
4908                                 continue;
4909                         if (bmcr && bmcr != 0x7fff)
4910                                 break;
4911                         udelay(10);
4912                 }
4913
4914                 lcl_adv = 0;
4915                 rmt_adv = 0;
4916
4917                 tp->link_config.active_speed = current_speed;
4918                 tp->link_config.active_duplex = current_duplex;
4919
4920                 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4921                         bool eee_config_ok = tg3_phy_eee_config_ok(tp);
4922
4923                         if ((bmcr & BMCR_ANENABLE) &&
4924                             eee_config_ok &&
4925                             tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4926                             tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4927                                 current_link_up = true;
4928
4929                         /* EEE settings changes take effect only after a phy
4930                          * reset.  If we have skipped a reset due to Link Flap
4931                          * Avoidance being enabled, do it now.
4932                          */
4933                         if (!eee_config_ok &&
4934                             (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
4935                             !force_reset) {
4936                                 tg3_setup_eee(tp);
4937                                 tg3_phy_reset(tp);
4938                         }
4939                 } else {
4940                         if (!(bmcr & BMCR_ANENABLE) &&
4941                             tp->link_config.speed == current_speed &&
4942                             tp->link_config.duplex == current_duplex) {
4943                                 current_link_up = true;
4944                         }
4945                 }
4946
4947                 if (current_link_up &&
4948                     tp->link_config.active_duplex == DUPLEX_FULL) {
4949                         u32 reg, bit;
4950
4951                         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4952                                 reg = MII_TG3_FET_GEN_STAT;
4953                                 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4954                         } else {
4955                                 reg = MII_TG3_EXT_STAT;
4956                                 bit = MII_TG3_EXT_STAT_MDIX;
4957                         }
4958
4959                         if (!tg3_readphy(tp, reg, &val) && (val & bit))
4960                                 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4961
4962                         tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4963                 }
4964         }
4965
4966 relink:
4967         if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4968                 tg3_phy_copper_begin(tp);
4969
4970                 if (tg3_flag(tp, ROBOSWITCH)) {
4971                         current_link_up = true;
4972                         /* FIXME: when BCM5325 switch is used use 100 MBit/s */
4973                         current_speed = SPEED_1000;
4974                         current_duplex = DUPLEX_FULL;
4975                         tp->link_config.active_speed = current_speed;
4976                         tp->link_config.active_duplex = current_duplex;
4977                 }
4978
4979                 tg3_readphy(tp, MII_BMSR, &bmsr);
4980                 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4981                     (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4982                         current_link_up = true;
4983         }
4984
4985         tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4986         if (current_link_up) {
4987                 if (tp->link_config.active_speed == SPEED_100 ||
4988                     tp->link_config.active_speed == SPEED_10)
4989                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4990                 else
4991                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4992         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4993                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4994         else
4995                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4996
4997         /* In order for the 5750 core in BCM4785 chip to work properly
4998          * in RGMII mode, the Led Control Register must be set up.
4999          */
5000         if (tg3_flag(tp, RGMII_MODE)) {
5001                 u32 led_ctrl = tr32(MAC_LED_CTRL);
5002                 led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON);
5003
5004                 if (tp->link_config.active_speed == SPEED_10)
5005                         led_ctrl |= LED_CTRL_LNKLED_OVERRIDE;
5006                 else if (tp->link_config.active_speed == SPEED_100)
5007                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5008                                      LED_CTRL_100MBPS_ON);
5009                 else if (tp->link_config.active_speed == SPEED_1000)
5010                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5011                                      LED_CTRL_1000MBPS_ON);
5012
5013                 tw32(MAC_LED_CTRL, led_ctrl);
5014                 udelay(40);
5015         }
5016
5017         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5018         if (tp->link_config.active_duplex == DUPLEX_HALF)
5019                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5020
5021         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
5022                 if (current_link_up &&
5023                     tg3_5700_link_polarity(tp, tp->link_config.active_speed))
5024                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
5025                 else
5026                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
5027         }
5028
5029         /* ??? Without this setting Netgear GA302T PHY does not
5030          * ??? send/receive packets...
5031          */
5032         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
5033             tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) {
5034                 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
5035                 tw32_f(MAC_MI_MODE, tp->mi_mode);
5036                 udelay(80);
5037         }
5038
5039         tw32_f(MAC_MODE, tp->mac_mode);
5040         udelay(40);
5041
5042         tg3_phy_eee_adjust(tp, current_link_up);
5043
5044         if (tg3_flag(tp, USE_LINKCHG_REG)) {
5045                 /* Polled via timer. */
5046                 tw32_f(MAC_EVENT, 0);
5047         } else {
5048                 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5049         }
5050         udelay(40);
5051
5052         if (tg3_asic_rev(tp) == ASIC_REV_5700 &&
5053             current_link_up &&
5054             tp->link_config.active_speed == SPEED_1000 &&
5055             (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
5056                 udelay(120);
5057                 tw32_f(MAC_STATUS,
5058                      (MAC_STATUS_SYNC_CHANGED |
5059                       MAC_STATUS_CFG_CHANGED));
5060                 udelay(40);
5061                 tg3_write_mem(tp,
5062                               NIC_SRAM_FIRMWARE_MBOX,
5063                               NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
5064         }
5065
5066         /* Prevent send BD corruption. */
5067         if (tg3_flag(tp, CLKREQ_BUG)) {
5068                 if (tp->link_config.active_speed == SPEED_100 ||
5069                     tp->link_config.active_speed == SPEED_10)
5070                         pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
5071                                                    PCI_EXP_LNKCTL_CLKREQ_EN);
5072                 else
5073                         pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
5074                                                  PCI_EXP_LNKCTL_CLKREQ_EN);
5075         }
5076
5077         tg3_test_and_report_link_chg(tp, current_link_up);
5078
5079         return 0;
5080 }
5081
5082 struct tg3_fiber_aneginfo {
5083         int state;
5084 #define ANEG_STATE_UNKNOWN              0
5085 #define ANEG_STATE_AN_ENABLE            1
5086 #define ANEG_STATE_RESTART_INIT         2
5087 #define ANEG_STATE_RESTART              3
5088 #define ANEG_STATE_DISABLE_LINK_OK      4
5089 #define ANEG_STATE_ABILITY_DETECT_INIT  5
5090 #define ANEG_STATE_ABILITY_DETECT       6
5091 #define ANEG_STATE_ACK_DETECT_INIT      7
5092 #define ANEG_STATE_ACK_DETECT           8
5093 #define ANEG_STATE_COMPLETE_ACK_INIT    9
5094 #define ANEG_STATE_COMPLETE_ACK         10
5095 #define ANEG_STATE_IDLE_DETECT_INIT     11
5096 #define ANEG_STATE_IDLE_DETECT          12
5097 #define ANEG_STATE_LINK_OK              13
5098 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT  14
5099 #define ANEG_STATE_NEXT_PAGE_WAIT       15
5100
5101         u32 flags;
5102 #define MR_AN_ENABLE            0x00000001
5103 #define MR_RESTART_AN           0x00000002
5104 #define MR_AN_COMPLETE          0x00000004
5105 #define MR_PAGE_RX              0x00000008
5106 #define MR_NP_LOADED            0x00000010
5107 #define MR_TOGGLE_TX            0x00000020
5108 #define MR_LP_ADV_FULL_DUPLEX   0x00000040
5109 #define MR_LP_ADV_HALF_DUPLEX   0x00000080
5110 #define MR_LP_ADV_SYM_PAUSE     0x00000100
5111 #define MR_LP_ADV_ASYM_PAUSE    0x00000200
5112 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400
5113 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800
5114 #define MR_LP_ADV_NEXT_PAGE     0x00001000
5115 #define MR_TOGGLE_RX            0x00002000
5116 #define MR_NP_RX                0x00004000
5117
5118 #define MR_LINK_OK              0x80000000
5119
5120         unsigned long link_time, cur_time;
5121
5122         u32 ability_match_cfg;
5123         int ability_match_count;
5124
5125         char ability_match, idle_match, ack_match;
5126
5127         u32 txconfig, rxconfig;
5128 #define ANEG_CFG_NP             0x00000080
5129 #define ANEG_CFG_ACK            0x00000040
5130 #define ANEG_CFG_RF2            0x00000020
5131 #define ANEG_CFG_RF1            0x00000010
5132 #define ANEG_CFG_PS2            0x00000001
5133 #define ANEG_CFG_PS1            0x00008000
5134 #define ANEG_CFG_HD             0x00004000
5135 #define ANEG_CFG_FD             0x00002000
5136 #define ANEG_CFG_INVAL          0x00001f06
5137
5138 };
5139 #define ANEG_OK         0
5140 #define ANEG_DONE       1
5141 #define ANEG_TIMER_ENAB 2
5142 #define ANEG_FAILED     -1
5143
5144 #define ANEG_STATE_SETTLE_TIME  10000
5145
5146 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
5147                                    struct tg3_fiber_aneginfo *ap)
5148 {
5149         u16 flowctrl;
5150         unsigned long delta;
5151         u32 rx_cfg_reg;
5152         int ret;
5153
5154         if (ap->state == ANEG_STATE_UNKNOWN) {
5155                 ap->rxconfig = 0;
5156                 ap->link_time = 0;
5157                 ap->cur_time = 0;
5158                 ap->ability_match_cfg = 0;
5159                 ap->ability_match_count = 0;
5160                 ap->ability_match = 0;
5161                 ap->idle_match = 0;
5162                 ap->ack_match = 0;
5163         }
5164         ap->cur_time++;
5165
5166         if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
5167                 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
5168
5169                 if (rx_cfg_reg != ap->ability_match_cfg) {
5170                         ap->ability_match_cfg = rx_cfg_reg;
5171                         ap->ability_match = 0;
5172                         ap->ability_match_count = 0;
5173                 } else {
5174                         if (++ap->ability_match_count > 1) {
5175                                 ap->ability_match = 1;
5176                                 ap->ability_match_cfg = rx_cfg_reg;
5177                         }
5178                 }
5179                 if (rx_cfg_reg & ANEG_CFG_ACK)
5180                         ap->ack_match = 1;
5181                 else
5182                         ap->ack_match = 0;
5183
5184                 ap->idle_match = 0;
5185         } else {
5186                 ap->idle_match = 1;
5187                 ap->ability_match_cfg = 0;
5188                 ap->ability_match_count = 0;
5189                 ap->ability_match = 0;
5190                 ap->ack_match = 0;
5191
5192                 rx_cfg_reg = 0;
5193         }
5194
5195         ap->rxconfig = rx_cfg_reg;
5196         ret = ANEG_OK;
5197
5198         switch (ap->state) {
5199         case ANEG_STATE_UNKNOWN:
5200                 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
5201                         ap->state = ANEG_STATE_AN_ENABLE;
5202
5203                 /* fallthru */
5204         case ANEG_STATE_AN_ENABLE:
5205                 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
5206                 if (ap->flags & MR_AN_ENABLE) {
5207                         ap->link_time = 0;
5208                         ap->cur_time = 0;
5209                         ap->ability_match_cfg = 0;
5210                         ap->ability_match_count = 0;
5211                         ap->ability_match = 0;
5212                         ap->idle_match = 0;
5213                         ap->ack_match = 0;
5214
5215                         ap->state = ANEG_STATE_RESTART_INIT;
5216                 } else {
5217                         ap->state = ANEG_STATE_DISABLE_LINK_OK;
5218                 }
5219                 break;
5220
5221         case ANEG_STATE_RESTART_INIT:
5222                 ap->link_time = ap->cur_time;
5223                 ap->flags &= ~(MR_NP_LOADED);
5224                 ap->txconfig = 0;
5225                 tw32(MAC_TX_AUTO_NEG, 0);
5226                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5227                 tw32_f(MAC_MODE, tp->mac_mode);
5228                 udelay(40);
5229
5230                 ret = ANEG_TIMER_ENAB;
5231                 ap->state = ANEG_STATE_RESTART;
5232
5233                 /* fallthru */
5234         case ANEG_STATE_RESTART:
5235                 delta = ap->cur_time - ap->link_time;
5236                 if (delta > ANEG_STATE_SETTLE_TIME)
5237                         ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
5238                 else
5239                         ret = ANEG_TIMER_ENAB;
5240                 break;
5241
5242         case ANEG_STATE_DISABLE_LINK_OK:
5243                 ret = ANEG_DONE;
5244                 break;
5245
5246         case ANEG_STATE_ABILITY_DETECT_INIT:
5247                 ap->flags &= ~(MR_TOGGLE_TX);
5248                 ap->txconfig = ANEG_CFG_FD;
5249                 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5250                 if (flowctrl & ADVERTISE_1000XPAUSE)
5251                         ap->txconfig |= ANEG_CFG_PS1;
5252                 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5253                         ap->txconfig |= ANEG_CFG_PS2;
5254                 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5255                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5256                 tw32_f(MAC_MODE, tp->mac_mode);
5257                 udelay(40);
5258
5259                 ap->state = ANEG_STATE_ABILITY_DETECT;
5260                 break;
5261
5262         case ANEG_STATE_ABILITY_DETECT:
5263                 if (ap->ability_match != 0 && ap->rxconfig != 0)
5264                         ap->state = ANEG_STATE_ACK_DETECT_INIT;
5265                 break;
5266
5267         case ANEG_STATE_ACK_DETECT_INIT:
5268                 ap->txconfig |= ANEG_CFG_ACK;
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_ACK_DETECT;
5275
5276                 /* fallthru */
5277         case ANEG_STATE_ACK_DETECT:
5278                 if (ap->ack_match != 0) {
5279                         if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
5280                             (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
5281                                 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
5282                         } else {
5283                                 ap->state = ANEG_STATE_AN_ENABLE;
5284                         }
5285                 } else if (ap->ability_match != 0 &&
5286                            ap->rxconfig == 0) {
5287                         ap->state = ANEG_STATE_AN_ENABLE;
5288                 }
5289                 break;
5290
5291         case ANEG_STATE_COMPLETE_ACK_INIT:
5292                 if (ap->rxconfig & ANEG_CFG_INVAL) {
5293                         ret = ANEG_FAILED;
5294                         break;
5295                 }
5296                 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
5297                                MR_LP_ADV_HALF_DUPLEX |
5298                                MR_LP_ADV_SYM_PAUSE |
5299                                MR_LP_ADV_ASYM_PAUSE |
5300                                MR_LP_ADV_REMOTE_FAULT1 |
5301                                MR_LP_ADV_REMOTE_FAULT2 |
5302                                MR_LP_ADV_NEXT_PAGE |
5303                                MR_TOGGLE_RX |
5304                                MR_NP_RX);
5305                 if (ap->rxconfig & ANEG_CFG_FD)
5306                         ap->flags |= MR_LP_ADV_FULL_DUPLEX;
5307                 if (ap->rxconfig & ANEG_CFG_HD)
5308                         ap->flags |= MR_LP_ADV_HALF_DUPLEX;
5309                 if (ap->rxconfig & ANEG_CFG_PS1)
5310                         ap->flags |= MR_LP_ADV_SYM_PAUSE;
5311                 if (ap->rxconfig & ANEG_CFG_PS2)
5312                         ap->flags |= MR_LP_ADV_ASYM_PAUSE;
5313                 if (ap->rxconfig & ANEG_CFG_RF1)
5314                         ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
5315                 if (ap->rxconfig & ANEG_CFG_RF2)
5316                         ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
5317                 if (ap->rxconfig & ANEG_CFG_NP)
5318                         ap->flags |= MR_LP_ADV_NEXT_PAGE;
5319
5320                 ap->link_time = ap->cur_time;
5321
5322                 ap->flags ^= (MR_TOGGLE_TX);
5323                 if (ap->rxconfig & 0x0008)
5324                         ap->flags |= MR_TOGGLE_RX;
5325                 if (ap->rxconfig & ANEG_CFG_NP)
5326                         ap->flags |= MR_NP_RX;
5327                 ap->flags |= MR_PAGE_RX;
5328
5329                 ap->state = ANEG_STATE_COMPLETE_ACK;
5330                 ret = ANEG_TIMER_ENAB;
5331                 break;
5332
5333         case ANEG_STATE_COMPLETE_ACK:
5334                 if (ap->ability_match != 0 &&
5335                     ap->rxconfig == 0) {
5336                         ap->state = ANEG_STATE_AN_ENABLE;
5337                         break;
5338                 }
5339                 delta = ap->cur_time - ap->link_time;
5340                 if (delta > ANEG_STATE_SETTLE_TIME) {
5341                         if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
5342                                 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5343                         } else {
5344                                 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
5345                                     !(ap->flags & MR_NP_RX)) {
5346                                         ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5347                                 } else {
5348                                         ret = ANEG_FAILED;
5349                                 }
5350                         }
5351                 }
5352                 break;
5353
5354         case ANEG_STATE_IDLE_DETECT_INIT:
5355                 ap->link_time = ap->cur_time;
5356                 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5357                 tw32_f(MAC_MODE, tp->mac_mode);
5358                 udelay(40);
5359
5360                 ap->state = ANEG_STATE_IDLE_DETECT;
5361                 ret = ANEG_TIMER_ENAB;
5362                 break;
5363
5364         case ANEG_STATE_IDLE_DETECT:
5365                 if (ap->ability_match != 0 &&
5366                     ap->rxconfig == 0) {
5367                         ap->state = ANEG_STATE_AN_ENABLE;
5368                         break;
5369                 }
5370                 delta = ap->cur_time - ap->link_time;
5371                 if (delta > ANEG_STATE_SETTLE_TIME) {
5372                         /* XXX another gem from the Broadcom driver :( */
5373                         ap->state = ANEG_STATE_LINK_OK;
5374                 }
5375                 break;
5376
5377         case ANEG_STATE_LINK_OK:
5378                 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
5379                 ret = ANEG_DONE;
5380                 break;
5381
5382         case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
5383                 /* ??? unimplemented */
5384                 break;
5385
5386         case ANEG_STATE_NEXT_PAGE_WAIT:
5387                 /* ??? unimplemented */
5388                 break;
5389
5390         default:
5391                 ret = ANEG_FAILED;
5392                 break;
5393         }
5394
5395         return ret;
5396 }
5397
5398 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
5399 {
5400         int res = 0;
5401         struct tg3_fiber_aneginfo aninfo;
5402         int status = ANEG_FAILED;
5403         unsigned int tick;
5404         u32 tmp;
5405
5406         tw32_f(MAC_TX_AUTO_NEG, 0);
5407
5408         tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
5409         tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
5410         udelay(40);
5411
5412         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
5413         udelay(40);
5414
5415         memset(&aninfo, 0, sizeof(aninfo));
5416         aninfo.flags |= MR_AN_ENABLE;
5417         aninfo.state = ANEG_STATE_UNKNOWN;
5418         aninfo.cur_time = 0;
5419         tick = 0;
5420         while (++tick < 195000) {
5421                 status = tg3_fiber_aneg_smachine(tp, &aninfo);
5422                 if (status == ANEG_DONE || status == ANEG_FAILED)
5423                         break;
5424
5425                 udelay(1);
5426         }
5427
5428         tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5429         tw32_f(MAC_MODE, tp->mac_mode);
5430         udelay(40);
5431
5432         *txflags = aninfo.txconfig;
5433         *rxflags = aninfo.flags;
5434
5435         if (status == ANEG_DONE &&
5436             (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
5437                              MR_LP_ADV_FULL_DUPLEX)))
5438                 res = 1;
5439
5440         return res;
5441 }
5442
5443 static void tg3_init_bcm8002(struct tg3 *tp)
5444 {
5445         u32 mac_status = tr32(MAC_STATUS);
5446         int i;
5447
5448         /* Reset when initting first time or we have a link. */
5449         if (tg3_flag(tp, INIT_COMPLETE) &&
5450             !(mac_status & MAC_STATUS_PCS_SYNCED))
5451                 return;
5452
5453         /* Set PLL lock range. */
5454         tg3_writephy(tp, 0x16, 0x8007);
5455
5456         /* SW reset */
5457         tg3_writephy(tp, MII_BMCR, BMCR_RESET);
5458
5459         /* Wait for reset to complete. */
5460         /* XXX schedule_timeout() ... */
5461         for (i = 0; i < 500; i++)
5462                 udelay(10);
5463
5464         /* Config mode; select PMA/Ch 1 regs. */
5465         tg3_writephy(tp, 0x10, 0x8411);
5466
5467         /* Enable auto-lock and comdet, select txclk for tx. */
5468         tg3_writephy(tp, 0x11, 0x0a10);
5469
5470         tg3_writephy(tp, 0x18, 0x00a0);
5471         tg3_writephy(tp, 0x16, 0x41ff);
5472
5473         /* Assert and deassert POR. */
5474         tg3_writephy(tp, 0x13, 0x0400);
5475         udelay(40);
5476         tg3_writephy(tp, 0x13, 0x0000);
5477
5478         tg3_writephy(tp, 0x11, 0x0a50);
5479         udelay(40);
5480         tg3_writephy(tp, 0x11, 0x0a10);
5481
5482         /* Wait for signal to stabilize */
5483         /* XXX schedule_timeout() ... */
5484         for (i = 0; i < 15000; i++)
5485                 udelay(10);
5486
5487         /* Deselect the channel register so we can read the PHYID
5488          * later.
5489          */
5490         tg3_writephy(tp, 0x10, 0x8011);
5491 }
5492
5493 static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
5494 {
5495         u16 flowctrl;
5496         bool current_link_up;
5497         u32 sg_dig_ctrl, sg_dig_status;
5498         u32 serdes_cfg, expected_sg_dig_ctrl;
5499         int workaround, port_a;
5500
5501         serdes_cfg = 0;
5502         expected_sg_dig_ctrl = 0;
5503         workaround = 0;
5504         port_a = 1;
5505         current_link_up = false;
5506
5507         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 &&
5508             tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) {
5509                 workaround = 1;
5510                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
5511                         port_a = 0;
5512
5513                 /* preserve bits 0-11,13,14 for signal pre-emphasis */
5514                 /* preserve bits 20-23 for voltage regulator */
5515                 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
5516         }
5517
5518         sg_dig_ctrl = tr32(SG_DIG_CTRL);
5519
5520         if (tp->link_config.autoneg != AUTONEG_ENABLE) {
5521                 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
5522                         if (workaround) {
5523                                 u32 val = serdes_cfg;
5524
5525                                 if (port_a)
5526                                         val |= 0xc010000;
5527                                 else
5528                                         val |= 0x4010000;
5529                                 tw32_f(MAC_SERDES_CFG, val);
5530                         }
5531
5532                         tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5533                 }
5534                 if (mac_status & MAC_STATUS_PCS_SYNCED) {
5535                         tg3_setup_flow_control(tp, 0, 0);
5536                         current_link_up = true;
5537                 }
5538                 goto out;
5539         }
5540
5541         /* Want auto-negotiation.  */
5542         expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
5543
5544         flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5545         if (flowctrl & ADVERTISE_1000XPAUSE)
5546                 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
5547         if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5548                 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
5549
5550         if (sg_dig_ctrl != expected_sg_dig_ctrl) {
5551                 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
5552                     tp->serdes_counter &&
5553                     ((mac_status & (MAC_STATUS_PCS_SYNCED |
5554                                     MAC_STATUS_RCVD_CFG)) ==
5555                      MAC_STATUS_PCS_SYNCED)) {
5556                         tp->serdes_counter--;
5557                         current_link_up = true;
5558                         goto out;
5559                 }
5560 restart_autoneg:
5561                 if (workaround)
5562                         tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
5563                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
5564                 udelay(5);
5565                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
5566
5567                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5568                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5569         } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
5570                                  MAC_STATUS_SIGNAL_DET)) {
5571                 sg_dig_status = tr32(SG_DIG_STATUS);
5572                 mac_status = tr32(MAC_STATUS);
5573
5574                 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
5575                     (mac_status & MAC_STATUS_PCS_SYNCED)) {
5576                         u32 local_adv = 0, remote_adv = 0;
5577
5578                         if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
5579                                 local_adv |= ADVERTISE_1000XPAUSE;
5580                         if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
5581                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5582
5583                         if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
5584                                 remote_adv |= LPA_1000XPAUSE;
5585                         if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
5586                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5587
5588                         tp->link_config.rmt_adv =
5589                                            mii_adv_to_ethtool_adv_x(remote_adv);
5590
5591                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5592                         current_link_up = true;
5593                         tp->serdes_counter = 0;
5594                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5595                 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
5596                         if (tp->serdes_counter)
5597                                 tp->serdes_counter--;
5598                         else {
5599                                 if (workaround) {
5600                                         u32 val = serdes_cfg;
5601
5602                                         if (port_a)
5603                                                 val |= 0xc010000;
5604                                         else
5605                                                 val |= 0x4010000;
5606
5607                                         tw32_f(MAC_SERDES_CFG, val);
5608                                 }
5609
5610                                 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5611                                 udelay(40);
5612
5613                                 /* Link parallel detection - link is up */
5614                                 /* only if we have PCS_SYNC and not */
5615                                 /* receiving config code words */
5616                                 mac_status = tr32(MAC_STATUS);
5617                                 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5618                                     !(mac_status & MAC_STATUS_RCVD_CFG)) {
5619                                         tg3_setup_flow_control(tp, 0, 0);
5620                                         current_link_up = true;
5621                                         tp->phy_flags |=
5622                                                 TG3_PHYFLG_PARALLEL_DETECT;
5623                                         tp->serdes_counter =
5624                                                 SERDES_PARALLEL_DET_TIMEOUT;
5625                                 } else
5626                                         goto restart_autoneg;
5627                         }
5628                 }
5629         } else {
5630                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5631                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5632         }
5633
5634 out:
5635         return current_link_up;
5636 }
5637
5638 static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5639 {
5640         bool current_link_up = false;
5641
5642         if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5643                 goto out;
5644
5645         if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5646                 u32 txflags, rxflags;
5647                 int i;
5648
5649                 if (fiber_autoneg(tp, &txflags, &rxflags)) {
5650                         u32 local_adv = 0, remote_adv = 0;
5651
5652                         if (txflags & ANEG_CFG_PS1)
5653                                 local_adv |= ADVERTISE_1000XPAUSE;
5654                         if (txflags & ANEG_CFG_PS2)
5655                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5656
5657                         if (rxflags & MR_LP_ADV_SYM_PAUSE)
5658                                 remote_adv |= LPA_1000XPAUSE;
5659                         if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5660                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5661
5662                         tp->link_config.rmt_adv =
5663                                            mii_adv_to_ethtool_adv_x(remote_adv);
5664
5665                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5666
5667                         current_link_up = true;
5668                 }
5669                 for (i = 0; i < 30; i++) {
5670                         udelay(20);
5671                         tw32_f(MAC_STATUS,
5672                                (MAC_STATUS_SYNC_CHANGED |
5673                                 MAC_STATUS_CFG_CHANGED));
5674                         udelay(40);
5675                         if ((tr32(MAC_STATUS) &
5676                              (MAC_STATUS_SYNC_CHANGED |
5677                               MAC_STATUS_CFG_CHANGED)) == 0)
5678                                 break;
5679                 }
5680
5681                 mac_status = tr32(MAC_STATUS);
5682                 if (!current_link_up &&
5683                     (mac_status & MAC_STATUS_PCS_SYNCED) &&
5684                     !(mac_status & MAC_STATUS_RCVD_CFG))
5685                         current_link_up = true;
5686         } else {
5687                 tg3_setup_flow_control(tp, 0, 0);
5688
5689                 /* Forcing 1000FD link up. */
5690                 current_link_up = true;
5691
5692                 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5693                 udelay(40);
5694
5695                 tw32_f(MAC_MODE, tp->mac_mode);
5696                 udelay(40);
5697         }
5698
5699 out:
5700         return current_link_up;
5701 }
5702
5703 static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
5704 {
5705         u32 orig_pause_cfg;
5706         u16 orig_active_speed;
5707         u8 orig_active_duplex;
5708         u32 mac_status;
5709         bool current_link_up;
5710         int i;
5711
5712         orig_pause_cfg = tp->link_config.active_flowctrl;
5713         orig_active_speed = tp->link_config.active_speed;
5714         orig_active_duplex = tp->link_config.active_duplex;
5715
5716         if (!tg3_flag(tp, HW_AUTONEG) &&
5717             tp->link_up &&
5718             tg3_flag(tp, INIT_COMPLETE)) {
5719                 mac_status = tr32(MAC_STATUS);
5720                 mac_status &= (MAC_STATUS_PCS_SYNCED |
5721                                MAC_STATUS_SIGNAL_DET |
5722                                MAC_STATUS_CFG_CHANGED |
5723                                MAC_STATUS_RCVD_CFG);
5724                 if (mac_status == (MAC_STATUS_PCS_SYNCED |
5725                                    MAC_STATUS_SIGNAL_DET)) {
5726                         tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5727                                             MAC_STATUS_CFG_CHANGED));
5728                         return 0;
5729                 }
5730         }
5731
5732         tw32_f(MAC_TX_AUTO_NEG, 0);
5733
5734         tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5735         tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5736         tw32_f(MAC_MODE, tp->mac_mode);
5737         udelay(40);
5738
5739         if (tp->phy_id == TG3_PHY_ID_BCM8002)
5740                 tg3_init_bcm8002(tp);
5741
5742         /* Enable link change event even when serdes polling.  */
5743         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5744         udelay(40);
5745
5746         current_link_up = false;
5747         tp->link_config.rmt_adv = 0;
5748         mac_status = tr32(MAC_STATUS);
5749
5750         if (tg3_flag(tp, HW_AUTONEG))
5751                 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5752         else
5753                 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5754
5755         tp->napi[0].hw_status->status =
5756                 (SD_STATUS_UPDATED |
5757                  (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5758
5759         for (i = 0; i < 100; i++) {
5760                 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5761                                     MAC_STATUS_CFG_CHANGED));
5762                 udelay(5);
5763                 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5764                                          MAC_STATUS_CFG_CHANGED |
5765                                          MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5766                         break;
5767         }
5768
5769         mac_status = tr32(MAC_STATUS);
5770         if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5771                 current_link_up = false;
5772                 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5773                     tp->serdes_counter == 0) {
5774                         tw32_f(MAC_MODE, (tp->mac_mode |
5775                                           MAC_MODE_SEND_CONFIGS));
5776                         udelay(1);
5777                         tw32_f(MAC_MODE, tp->mac_mode);
5778                 }
5779         }
5780
5781         if (current_link_up) {
5782                 tp->link_config.active_speed = SPEED_1000;
5783                 tp->link_config.active_duplex = DUPLEX_FULL;
5784                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5785                                     LED_CTRL_LNKLED_OVERRIDE |
5786                                     LED_CTRL_1000MBPS_ON));
5787         } else {
5788                 tp->link_config.active_speed = SPEED_UNKNOWN;
5789                 tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5790                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5791                                     LED_CTRL_LNKLED_OVERRIDE |
5792                                     LED_CTRL_TRAFFIC_OVERRIDE));
5793         }
5794
5795         if (!tg3_test_and_report_link_chg(tp, current_link_up)) {
5796                 u32 now_pause_cfg = tp->link_config.active_flowctrl;
5797                 if (orig_pause_cfg != now_pause_cfg ||
5798                     orig_active_speed != tp->link_config.active_speed ||
5799                     orig_active_duplex != tp->link_config.active_duplex)
5800                         tg3_link_report(tp);
5801         }
5802
5803         return 0;
5804 }
5805
5806 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)
5807 {
5808         int err = 0;
5809         u32 bmsr, bmcr;
5810         u16 current_speed = SPEED_UNKNOWN;
5811         u8 current_duplex = DUPLEX_UNKNOWN;
5812         bool current_link_up = false;
5813         u32 local_adv, remote_adv, sgsr;
5814
5815         if ((tg3_asic_rev(tp) == ASIC_REV_5719 ||
5816              tg3_asic_rev(tp) == ASIC_REV_5720) &&
5817              !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) &&
5818              (sgsr & SERDES_TG3_SGMII_MODE)) {
5819
5820                 if (force_reset)
5821                         tg3_phy_reset(tp);
5822
5823                 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
5824
5825                 if (!(sgsr & SERDES_TG3_LINK_UP)) {
5826                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5827                 } else {
5828                         current_link_up = true;
5829                         if (sgsr & SERDES_TG3_SPEED_1000) {
5830                                 current_speed = SPEED_1000;
5831                                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5832                         } else if (sgsr & SERDES_TG3_SPEED_100) {
5833                                 current_speed = SPEED_100;
5834                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5835                         } else {
5836                                 current_speed = SPEED_10;
5837                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5838                         }
5839
5840                         if (sgsr & SERDES_TG3_FULL_DUPLEX)
5841                                 current_duplex = DUPLEX_FULL;
5842                         else
5843                                 current_duplex = DUPLEX_HALF;
5844                 }
5845
5846                 tw32_f(MAC_MODE, tp->mac_mode);
5847                 udelay(40);
5848
5849                 tg3_clear_mac_status(tp);
5850
5851                 goto fiber_setup_done;
5852         }
5853
5854         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5855         tw32_f(MAC_MODE, tp->mac_mode);
5856         udelay(40);
5857
5858         tg3_clear_mac_status(tp);
5859
5860         if (force_reset)
5861                 tg3_phy_reset(tp);
5862
5863         tp->link_config.rmt_adv = 0;
5864
5865         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5866         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5867         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5868                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5869                         bmsr |= BMSR_LSTATUS;
5870                 else
5871                         bmsr &= ~BMSR_LSTATUS;
5872         }
5873
5874         err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5875
5876         if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5877             (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5878                 /* do nothing, just check for link up at the end */
5879         } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5880                 u32 adv, newadv;
5881
5882                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5883                 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5884                                  ADVERTISE_1000XPAUSE |
5885                                  ADVERTISE_1000XPSE_ASYM |
5886                                  ADVERTISE_SLCT);
5887
5888                 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5889                 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5890
5891                 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5892                         tg3_writephy(tp, MII_ADVERTISE, newadv);
5893                         bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5894                         tg3_writephy(tp, MII_BMCR, bmcr);
5895
5896                         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5897                         tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5898                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5899
5900                         return err;
5901                 }
5902         } else {
5903                 u32 new_bmcr;
5904
5905                 bmcr &= ~BMCR_SPEED1000;
5906                 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5907
5908                 if (tp->link_config.duplex == DUPLEX_FULL)
5909                         new_bmcr |= BMCR_FULLDPLX;
5910
5911                 if (new_bmcr != bmcr) {
5912                         /* BMCR_SPEED1000 is a reserved bit that needs
5913                          * to be set on write.
5914                          */
5915                         new_bmcr |= BMCR_SPEED1000;
5916
5917                         /* Force a linkdown */
5918                         if (tp->link_up) {
5919                                 u32 adv;
5920
5921                                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5922                                 adv &= ~(ADVERTISE_1000XFULL |
5923                                          ADVERTISE_1000XHALF |
5924                                          ADVERTISE_SLCT);
5925                                 tg3_writephy(tp, MII_ADVERTISE, adv);
5926                                 tg3_writephy(tp, MII_BMCR, bmcr |
5927                                                            BMCR_ANRESTART |
5928                                                            BMCR_ANENABLE);
5929                                 udelay(10);
5930                                 tg3_carrier_off(tp);
5931                         }
5932                         tg3_writephy(tp, MII_BMCR, new_bmcr);
5933                         bmcr = new_bmcr;
5934                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5935                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5936                         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5937                                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5938                                         bmsr |= BMSR_LSTATUS;
5939                                 else
5940                                         bmsr &= ~BMSR_LSTATUS;
5941                         }
5942                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5943                 }
5944         }
5945
5946         if (bmsr & BMSR_LSTATUS) {
5947                 current_speed = SPEED_1000;
5948                 current_link_up = true;
5949                 if (bmcr & BMCR_FULLDPLX)
5950                         current_duplex = DUPLEX_FULL;
5951                 else
5952                         current_duplex = DUPLEX_HALF;
5953
5954                 local_adv = 0;
5955                 remote_adv = 0;
5956
5957                 if (bmcr & BMCR_ANENABLE) {
5958                         u32 common;
5959
5960                         err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5961                         err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5962                         common = local_adv & remote_adv;
5963                         if (common & (ADVERTISE_1000XHALF |
5964                                       ADVERTISE_1000XFULL)) {
5965                                 if (common & ADVERTISE_1000XFULL)
5966                                         current_duplex = DUPLEX_FULL;
5967                                 else
5968                                         current_duplex = DUPLEX_HALF;
5969
5970                                 tp->link_config.rmt_adv =
5971                                            mii_adv_to_ethtool_adv_x(remote_adv);
5972                         } else if (!tg3_flag(tp, 5780_CLASS)) {
5973                                 /* Link is up via parallel detect */
5974                         } else {
5975                                 current_link_up = false;
5976                         }
5977                 }
5978         }
5979
5980 fiber_setup_done:
5981         if (current_link_up && current_duplex == DUPLEX_FULL)
5982                 tg3_setup_flow_control(tp, local_adv, remote_adv);
5983
5984         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5985         if (tp->link_config.active_duplex == DUPLEX_HALF)
5986                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5987
5988         tw32_f(MAC_MODE, tp->mac_mode);
5989         udelay(40);
5990
5991         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5992
5993         tp->link_config.active_speed = current_speed;
5994         tp->link_config.active_duplex = current_duplex;
5995
5996         tg3_test_and_report_link_chg(tp, current_link_up);
5997         return err;
5998 }
5999
6000 static void tg3_serdes_parallel_detect(struct tg3 *tp)
6001 {
6002         if (tp->serdes_counter) {
6003                 /* Give autoneg time to complete. */
6004                 tp->serdes_counter--;
6005                 return;
6006         }
6007
6008         if (!tp->link_up &&
6009             (tp->link_config.autoneg == AUTONEG_ENABLE)) {
6010                 u32 bmcr;
6011
6012                 tg3_readphy(tp, MII_BMCR, &bmcr);
6013                 if (bmcr & BMCR_ANENABLE) {
6014                         u32 phy1, phy2;
6015
6016                         /* Select shadow register 0x1f */
6017                         tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
6018                         tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
6019
6020                         /* Select expansion interrupt status register */
6021                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6022                                          MII_TG3_DSP_EXP1_INT_STAT);
6023                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6024                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6025
6026                         if ((phy1 & 0x10) && !(phy2 & 0x20)) {
6027                                 /* We have signal detect and not receiving
6028                                  * config code words, link is up by parallel
6029                                  * detection.
6030                                  */
6031
6032                                 bmcr &= ~BMCR_ANENABLE;
6033                                 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
6034                                 tg3_writephy(tp, MII_BMCR, bmcr);
6035                                 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
6036                         }
6037                 }
6038         } else if (tp->link_up &&
6039                    (tp->link_config.autoneg == AUTONEG_ENABLE) &&
6040                    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
6041                 u32 phy2;
6042
6043                 /* Select expansion interrupt status register */
6044                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6045                                  MII_TG3_DSP_EXP1_INT_STAT);
6046                 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6047                 if (phy2 & 0x20) {
6048                         u32 bmcr;
6049
6050                         /* Config code words received, turn on autoneg. */
6051                         tg3_readphy(tp, MII_BMCR, &bmcr);
6052                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
6053
6054                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
6055
6056                 }
6057         }
6058 }
6059
6060 static int tg3_setup_phy(struct tg3 *tp, bool force_reset)
6061 {
6062         u32 val;
6063         int err;
6064
6065         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
6066                 err = tg3_setup_fiber_phy(tp, force_reset);
6067         else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
6068                 err = tg3_setup_fiber_mii_phy(tp, force_reset);
6069         else
6070                 err = tg3_setup_copper_phy(tp, force_reset);
6071
6072         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
6073                 u32 scale;
6074
6075                 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
6076                 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
6077                         scale = 65;
6078                 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
6079                         scale = 6;
6080                 else
6081                         scale = 12;
6082
6083                 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
6084                 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
6085                 tw32(GRC_MISC_CFG, val);
6086         }
6087
6088         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6089               (6 << TX_LENGTHS_IPG_SHIFT);
6090         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
6091             tg3_asic_rev(tp) == ASIC_REV_5762)
6092                 val |= tr32(MAC_TX_LENGTHS) &
6093                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
6094                         TX_LENGTHS_CNT_DWN_VAL_MSK);
6095
6096         if (tp->link_config.active_speed == SPEED_1000 &&
6097             tp->link_config.active_duplex == DUPLEX_HALF)
6098                 tw32(MAC_TX_LENGTHS, val |
6099                      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
6100         else
6101                 tw32(MAC_TX_LENGTHS, val |
6102                      (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6103
6104         if (!tg3_flag(tp, 5705_PLUS)) {
6105                 if (tp->link_up) {
6106                         tw32(HOSTCC_STAT_COAL_TICKS,
6107                              tp->coal.stats_block_coalesce_usecs);
6108                 } else {
6109                         tw32(HOSTCC_STAT_COAL_TICKS, 0);
6110                 }
6111         }
6112
6113         if (tg3_flag(tp, ASPM_WORKAROUND)) {
6114                 val = tr32(PCIE_PWR_MGMT_THRESH);
6115                 if (!tp->link_up)
6116                         val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
6117                               tp->pwrmgmt_thresh;
6118                 else
6119                         val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
6120                 tw32(PCIE_PWR_MGMT_THRESH, val);
6121         }
6122
6123         return err;
6124 }
6125
6126 /* tp->lock must be held */
6127 static u64 tg3_refclk_read(struct tg3 *tp)
6128 {
6129         u64 stamp = tr32(TG3_EAV_REF_CLCK_LSB);
6130         return stamp | (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32;
6131 }
6132
6133 /* tp->lock must be held */
6134 static void tg3_refclk_write(struct tg3 *tp, u64 newval)
6135 {
6136         u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6137
6138         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP);
6139         tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff);
6140         tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32);
6141         tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME);
6142 }
6143
6144 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync);
6145 static inline void tg3_full_unlock(struct tg3 *tp);
6146 static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
6147 {
6148         struct tg3 *tp = netdev_priv(dev);
6149
6150         info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
6151                                 SOF_TIMESTAMPING_RX_SOFTWARE |
6152                                 SOF_TIMESTAMPING_SOFTWARE;
6153
6154         if (tg3_flag(tp, PTP_CAPABLE)) {
6155                 info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE |
6156                                         SOF_TIMESTAMPING_RX_HARDWARE |
6157                                         SOF_TIMESTAMPING_RAW_HARDWARE;
6158         }
6159
6160         if (tp->ptp_clock)
6161                 info->phc_index = ptp_clock_index(tp->ptp_clock);
6162         else
6163                 info->phc_index = -1;
6164
6165         info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
6166
6167         info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
6168                            (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
6169                            (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
6170                            (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
6171         return 0;
6172 }
6173
6174 static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
6175 {
6176         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6177         bool neg_adj = false;
6178         u32 correction = 0;
6179
6180         if (ppb < 0) {
6181                 neg_adj = true;
6182                 ppb = -ppb;
6183         }
6184
6185         /* Frequency adjustment is performed using hardware with a 24 bit
6186          * accumulator and a programmable correction value. On each clk, the
6187          * correction value gets added to the accumulator and when it
6188          * overflows, the time counter is incremented/decremented.
6189          *
6190          * So conversion from ppb to correction value is
6191          *              ppb * (1 << 24) / 1000000000
6192          */
6193         correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) &
6194                      TG3_EAV_REF_CLK_CORRECT_MASK;
6195
6196         tg3_full_lock(tp, 0);
6197
6198         if (correction)
6199                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
6200                      TG3_EAV_REF_CLK_CORRECT_EN |
6201                      (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction);
6202         else
6203                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0);
6204
6205         tg3_full_unlock(tp);
6206
6207         return 0;
6208 }
6209
6210 static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
6211 {
6212         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6213
6214         tg3_full_lock(tp, 0);
6215         tp->ptp_adjust += delta;
6216         tg3_full_unlock(tp);
6217
6218         return 0;
6219 }
6220
6221 static int tg3_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
6222 {
6223         u64 ns;
6224         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6225
6226         tg3_full_lock(tp, 0);
6227         ns = tg3_refclk_read(tp);
6228         ns += tp->ptp_adjust;
6229         tg3_full_unlock(tp);
6230
6231         *ts = ns_to_timespec64(ns);
6232
6233         return 0;
6234 }
6235
6236 static int tg3_ptp_settime(struct ptp_clock_info *ptp,
6237                            const struct timespec64 *ts)
6238 {
6239         u64 ns;
6240         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6241
6242         ns = timespec64_to_ns(ts);
6243
6244         tg3_full_lock(tp, 0);
6245         tg3_refclk_write(tp, ns);
6246         tp->ptp_adjust = 0;
6247         tg3_full_unlock(tp);
6248
6249         return 0;
6250 }
6251
6252 static int tg3_ptp_enable(struct ptp_clock_info *ptp,
6253                           struct ptp_clock_request *rq, int on)
6254 {
6255         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6256         u32 clock_ctl;
6257         int rval = 0;
6258
6259         switch (rq->type) {
6260         case PTP_CLK_REQ_PEROUT:
6261                 if (rq->perout.index != 0)
6262                         return -EINVAL;
6263
6264                 tg3_full_lock(tp, 0);
6265                 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6266                 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK;
6267
6268                 if (on) {
6269                         u64 nsec;
6270
6271                         nsec = rq->perout.start.sec * 1000000000ULL +
6272                                rq->perout.start.nsec;
6273
6274                         if (rq->perout.period.sec || rq->perout.period.nsec) {
6275                                 netdev_warn(tp->dev,
6276                                             "Device supports only a one-shot timesync output, period must be 0\n");
6277                                 rval = -EINVAL;
6278                                 goto err_out;
6279                         }
6280
6281                         if (nsec & (1ULL << 63)) {
6282                                 netdev_warn(tp->dev,
6283                                             "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n");
6284                                 rval = -EINVAL;
6285                                 goto err_out;
6286                         }
6287
6288                         tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff));
6289                         tw32(TG3_EAV_WATCHDOG0_MSB,
6290                              TG3_EAV_WATCHDOG0_EN |
6291                              ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK));
6292
6293                         tw32(TG3_EAV_REF_CLCK_CTL,
6294                              clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0);
6295                 } else {
6296                         tw32(TG3_EAV_WATCHDOG0_MSB, 0);
6297                         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl);
6298                 }
6299
6300 err_out:
6301                 tg3_full_unlock(tp);
6302                 return rval;
6303
6304         default:
6305                 break;
6306         }
6307
6308         return -EOPNOTSUPP;
6309 }
6310
6311 static const struct ptp_clock_info tg3_ptp_caps = {
6312         .owner          = THIS_MODULE,
6313         .name           = "tg3 clock",
6314         .max_adj        = 250000000,
6315         .n_alarm        = 0,
6316         .n_ext_ts       = 0,
6317         .n_per_out      = 1,
6318         .n_pins         = 0,
6319         .pps            = 0,
6320         .adjfreq        = tg3_ptp_adjfreq,
6321         .adjtime        = tg3_ptp_adjtime,
6322         .gettime64      = tg3_ptp_gettime,
6323         .settime64      = tg3_ptp_settime,
6324         .enable         = tg3_ptp_enable,
6325 };
6326
6327 static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
6328                                      struct skb_shared_hwtstamps *timestamp)
6329 {
6330         memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
6331         timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
6332                                            tp->ptp_adjust);
6333 }
6334
6335 /* tp->lock must be held */
6336 static void tg3_ptp_init(struct tg3 *tp)
6337 {
6338         if (!tg3_flag(tp, PTP_CAPABLE))
6339                 return;
6340
6341         /* Initialize the hardware clock to the system time. */
6342         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
6343         tp->ptp_adjust = 0;
6344         tp->ptp_info = tg3_ptp_caps;
6345 }
6346
6347 /* tp->lock must be held */
6348 static void tg3_ptp_resume(struct tg3 *tp)
6349 {
6350         if (!tg3_flag(tp, PTP_CAPABLE))
6351                 return;
6352
6353         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
6354         tp->ptp_adjust = 0;
6355 }
6356
6357 static void tg3_ptp_fini(struct tg3 *tp)
6358 {
6359         if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
6360                 return;
6361
6362         ptp_clock_unregister(tp->ptp_clock);
6363         tp->ptp_clock = NULL;
6364         tp->ptp_adjust = 0;
6365 }
6366
6367 static inline int tg3_irq_sync(struct tg3 *tp)
6368 {
6369         return tp->irq_sync;
6370 }
6371
6372 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
6373 {
6374         int i;
6375
6376         dst = (u32 *)((u8 *)dst + off);
6377         for (i = 0; i < len; i += sizeof(u32))
6378                 *dst++ = tr32(off + i);
6379 }
6380
6381 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
6382 {
6383         tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
6384         tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
6385         tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
6386         tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
6387         tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
6388         tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
6389         tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
6390         tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
6391         tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
6392         tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
6393         tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
6394         tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
6395         tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
6396         tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
6397         tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
6398         tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
6399         tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
6400         tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
6401         tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
6402
6403         if (tg3_flag(tp, SUPPORT_MSIX))
6404                 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
6405
6406         tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
6407         tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
6408         tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
6409         tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
6410         tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
6411         tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
6412         tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
6413         tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
6414
6415         if (!tg3_flag(tp, 5705_PLUS)) {
6416                 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
6417                 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
6418                 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
6419         }
6420
6421         tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
6422         tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
6423         tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
6424         tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
6425         tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
6426
6427         if (tg3_flag(tp, NVRAM))
6428                 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
6429 }
6430
6431 static void tg3_dump_state(struct tg3 *tp)
6432 {
6433         int i;
6434         u32 *regs;
6435
6436         regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
6437         if (!regs)
6438                 return;
6439
6440         if (tg3_flag(tp, PCI_EXPRESS)) {
6441                 /* Read up to but not including private PCI registers */
6442                 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
6443                         regs[i / sizeof(u32)] = tr32(i);
6444         } else
6445                 tg3_dump_legacy_regs(tp, regs);
6446
6447         for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
6448                 if (!regs[i + 0] && !regs[i + 1] &&
6449                     !regs[i + 2] && !regs[i + 3])
6450                         continue;
6451
6452                 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
6453                            i * 4,
6454                            regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
6455         }
6456
6457         kfree(regs);
6458
6459         for (i = 0; i < tp->irq_cnt; i++) {
6460                 struct tg3_napi *tnapi = &tp->napi[i];
6461
6462                 /* SW status block */
6463                 netdev_err(tp->dev,
6464                          "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6465                            i,
6466                            tnapi->hw_status->status,
6467                            tnapi->hw_status->status_tag,
6468                            tnapi->hw_status->rx_jumbo_consumer,
6469                            tnapi->hw_status->rx_consumer,
6470                            tnapi->hw_status->rx_mini_consumer,
6471                            tnapi->hw_status->idx[0].rx_producer,
6472                            tnapi->hw_status->idx[0].tx_consumer);
6473
6474                 netdev_err(tp->dev,
6475                 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
6476                            i,
6477                            tnapi->last_tag, tnapi->last_irq_tag,
6478                            tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
6479                            tnapi->rx_rcb_ptr,
6480                            tnapi->prodring.rx_std_prod_idx,
6481                            tnapi->prodring.rx_std_cons_idx,
6482                            tnapi->prodring.rx_jmb_prod_idx,
6483                            tnapi->prodring.rx_jmb_cons_idx);
6484         }
6485 }
6486
6487 /* This is called whenever we suspect that the system chipset is re-
6488  * ordering the sequence of MMIO to the tx send mailbox. The symptom
6489  * is bogus tx completions. We try to recover by setting the
6490  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
6491  * in the workqueue.
6492  */
6493 static void tg3_tx_recover(struct tg3 *tp)
6494 {
6495         BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
6496                tp->write32_tx_mbox == tg3_write_indirect_mbox);
6497
6498         netdev_warn(tp->dev,
6499                     "The system may be re-ordering memory-mapped I/O "
6500                     "cycles to the network device, attempting to recover. "
6501                     "Please report the problem to the driver maintainer "
6502                     "and include system chipset information.\n");
6503
6504         tg3_flag_set(tp, TX_RECOVERY_PENDING);
6505 }
6506
6507 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
6508 {
6509         /* Tell compiler to fetch tx indices from memory. */
6510         barrier();
6511         return tnapi->tx_pending -
6512                ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
6513 }
6514
6515 /* Tigon3 never reports partial packet sends.  So we do not
6516  * need special logic to handle SKBs that have not had all
6517  * of their frags sent yet, like SunGEM does.
6518  */
6519 static void tg3_tx(struct tg3_napi *tnapi)
6520 {
6521         struct tg3 *tp = tnapi->tp;
6522         u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
6523         u32 sw_idx = tnapi->tx_cons;
6524         struct netdev_queue *txq;
6525         int index = tnapi - tp->napi;
6526         unsigned int pkts_compl = 0, bytes_compl = 0;
6527
6528         if (tg3_flag(tp, ENABLE_TSS))
6529                 index--;
6530
6531         txq = netdev_get_tx_queue(tp->dev, index);
6532
6533         while (sw_idx != hw_idx) {
6534                 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
6535                 struct sk_buff *skb = ri->skb;
6536                 int i, tx_bug = 0;
6537
6538                 if (unlikely(skb == NULL)) {
6539                         tg3_tx_recover(tp);
6540                         return;
6541                 }
6542
6543                 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
6544                         struct skb_shared_hwtstamps timestamp;
6545                         u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
6546                         hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
6547
6548                         tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
6549
6550                         skb_tstamp_tx(skb, &timestamp);
6551                 }
6552
6553                 pci_unmap_single(tp->pdev,
6554                                  dma_unmap_addr(ri, mapping),
6555                                  skb_headlen(skb),
6556                                  PCI_DMA_TODEVICE);
6557
6558                 ri->skb = NULL;
6559
6560                 while (ri->fragmented) {
6561                         ri->fragmented = false;
6562                         sw_idx = NEXT_TX(sw_idx);
6563                         ri = &tnapi->tx_buffers[sw_idx];
6564                 }
6565
6566                 sw_idx = NEXT_TX(sw_idx);
6567
6568                 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
6569                         ri = &tnapi->tx_buffers[sw_idx];
6570                         if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
6571                                 tx_bug = 1;
6572
6573                         pci_unmap_page(tp->pdev,
6574                                        dma_unmap_addr(ri, mapping),
6575                                        skb_frag_size(&skb_shinfo(skb)->frags[i]),
6576                                        PCI_DMA_TODEVICE);
6577
6578                         while (ri->fragmented) {
6579                                 ri->fragmented = false;
6580                                 sw_idx = NEXT_TX(sw_idx);
6581                                 ri = &tnapi->tx_buffers[sw_idx];
6582                         }
6583
6584                         sw_idx = NEXT_TX(sw_idx);
6585                 }
6586
6587                 pkts_compl++;
6588                 bytes_compl += skb->len;
6589
6590                 dev_consume_skb_any(skb);
6591
6592                 if (unlikely(tx_bug)) {
6593                         tg3_tx_recover(tp);
6594                         return;
6595                 }
6596         }
6597
6598         netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
6599
6600         tnapi->tx_cons = sw_idx;
6601
6602         /* Need to make the tx_cons update visible to tg3_start_xmit()
6603          * before checking for netif_queue_stopped().  Without the
6604          * memory barrier, there is a small possibility that tg3_start_xmit()
6605          * will miss it and cause the queue to be stopped forever.
6606          */
6607         smp_mb();
6608
6609         if (unlikely(netif_tx_queue_stopped(txq) &&
6610                      (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
6611                 __netif_tx_lock(txq, smp_processor_id());
6612                 if (netif_tx_queue_stopped(txq) &&
6613                     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
6614                         netif_tx_wake_queue(txq);
6615                 __netif_tx_unlock(txq);
6616         }
6617 }
6618
6619 static void tg3_frag_free(bool is_frag, void *data)
6620 {
6621         if (is_frag)
6622                 skb_free_frag(data);
6623         else
6624                 kfree(data);
6625 }
6626
6627 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
6628 {
6629         unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
6630                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6631
6632         if (!ri->data)
6633                 return;
6634
6635         pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
6636                          map_sz, PCI_DMA_FROMDEVICE);
6637         tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
6638         ri->data = NULL;
6639 }
6640
6641
6642 /* Returns size of skb allocated or < 0 on error.
6643  *
6644  * We only need to fill in the address because the other members
6645  * of the RX descriptor are invariant, see tg3_init_rings.
6646  *
6647  * Note the purposeful assymetry of cpu vs. chip accesses.  For
6648  * posting buffers we only dirty the first cache line of the RX
6649  * descriptor (containing the address).  Whereas for the RX status
6650  * buffers the cpu only reads the last cacheline of the RX descriptor
6651  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6652  */
6653 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6654                              u32 opaque_key, u32 dest_idx_unmasked,
6655                              unsigned int *frag_size)
6656 {
6657         struct tg3_rx_buffer_desc *desc;
6658         struct ring_info *map;
6659         u8 *data;
6660         dma_addr_t mapping;
6661         int skb_size, data_size, dest_idx;
6662
6663         switch (opaque_key) {
6664         case RXD_OPAQUE_RING_STD:
6665                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6666                 desc = &tpr->rx_std[dest_idx];
6667                 map = &tpr->rx_std_buffers[dest_idx];
6668                 data_size = tp->rx_pkt_map_sz;
6669                 break;
6670
6671         case RXD_OPAQUE_RING_JUMBO:
6672                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6673                 desc = &tpr->rx_jmb[dest_idx].std;
6674                 map = &tpr->rx_jmb_buffers[dest_idx];
6675                 data_size = TG3_RX_JMB_MAP_SZ;
6676                 break;
6677
6678         default:
6679                 return -EINVAL;
6680         }
6681
6682         /* Do not overwrite any of the map or rp information
6683          * until we are sure we can commit to a new buffer.
6684          *
6685          * Callers depend upon this behavior and assume that
6686          * we leave everything unchanged if we fail.
6687          */
6688         skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6689                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6690         if (skb_size <= PAGE_SIZE) {
6691                 data = netdev_alloc_frag(skb_size);
6692                 *frag_size = skb_size;
6693         } else {
6694                 data = kmalloc(skb_size, GFP_ATOMIC);
6695                 *frag_size = 0;
6696         }
6697         if (!data)
6698                 return -ENOMEM;
6699
6700         mapping = pci_map_single(tp->pdev,
6701                                  data + TG3_RX_OFFSET(tp),
6702                                  data_size,
6703                                  PCI_DMA_FROMDEVICE);
6704         if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) {
6705                 tg3_frag_free(skb_size <= PAGE_SIZE, data);
6706                 return -EIO;
6707         }
6708
6709         map->data = data;
6710         dma_unmap_addr_set(map, mapping, mapping);
6711
6712         desc->addr_hi = ((u64)mapping >> 32);
6713         desc->addr_lo = ((u64)mapping & 0xffffffff);
6714
6715         return data_size;
6716 }
6717
6718 /* We only need to move over in the address because the other
6719  * members of the RX descriptor are invariant.  See notes above
6720  * tg3_alloc_rx_data for full details.
6721  */
6722 static void tg3_recycle_rx(struct tg3_napi *tnapi,
6723                            struct tg3_rx_prodring_set *dpr,
6724                            u32 opaque_key, int src_idx,
6725                            u32 dest_idx_unmasked)
6726 {
6727         struct tg3 *tp = tnapi->tp;
6728         struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6729         struct ring_info *src_map, *dest_map;
6730         struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6731         int dest_idx;
6732
6733         switch (opaque_key) {
6734         case RXD_OPAQUE_RING_STD:
6735                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6736                 dest_desc = &dpr->rx_std[dest_idx];
6737                 dest_map = &dpr->rx_std_buffers[dest_idx];
6738                 src_desc = &spr->rx_std[src_idx];
6739                 src_map = &spr->rx_std_buffers[src_idx];
6740                 break;
6741
6742         case RXD_OPAQUE_RING_JUMBO:
6743                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6744                 dest_desc = &dpr->rx_jmb[dest_idx].std;
6745                 dest_map = &dpr->rx_jmb_buffers[dest_idx];
6746                 src_desc = &spr->rx_jmb[src_idx].std;
6747                 src_map = &spr->rx_jmb_buffers[src_idx];
6748                 break;
6749
6750         default:
6751                 return;
6752         }
6753
6754         dest_map->data = src_map->data;
6755         dma_unmap_addr_set(dest_map, mapping,
6756                            dma_unmap_addr(src_map, mapping));
6757         dest_desc->addr_hi = src_desc->addr_hi;
6758         dest_desc->addr_lo = src_desc->addr_lo;
6759
6760         /* Ensure that the update to the skb happens after the physical
6761          * addresses have been transferred to the new BD location.
6762          */
6763         smp_wmb();
6764
6765         src_map->data = NULL;
6766 }
6767
6768 /* The RX ring scheme is composed of multiple rings which post fresh
6769  * buffers to the chip, and one special ring the chip uses to report
6770  * status back to the host.
6771  *
6772  * The special ring reports the status of received packets to the
6773  * host.  The chip does not write into the original descriptor the
6774  * RX buffer was obtained from.  The chip simply takes the original
6775  * descriptor as provided by the host, updates the status and length
6776  * field, then writes this into the next status ring entry.
6777  *
6778  * Each ring the host uses to post buffers to the chip is described
6779  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6780  * it is first placed into the on-chip ram.  When the packet's length
6781  * is known, it walks down the TG3_BDINFO entries to select the ring.
6782  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6783  * which is within the range of the new packet's length is chosen.
6784  *
6785  * The "separate ring for rx status" scheme may sound queer, but it makes
6786  * sense from a cache coherency perspective.  If only the host writes
6787  * to the buffer post rings, and only the chip writes to the rx status
6788  * rings, then cache lines never move beyond shared-modified state.
6789  * If both the host and chip were to write into the same ring, cache line
6790  * eviction could occur since both entities want it in an exclusive state.
6791  */
6792 static int tg3_rx(struct tg3_napi *tnapi, int budget)
6793 {
6794         struct tg3 *tp = tnapi->tp;
6795         u32 work_mask, rx_std_posted = 0;
6796         u32 std_prod_idx, jmb_prod_idx;
6797         u32 sw_idx = tnapi->rx_rcb_ptr;
6798         u16 hw_idx;
6799         int received;
6800         struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6801
6802         hw_idx = *(tnapi->rx_rcb_prod_idx);
6803         /*
6804          * We need to order the read of hw_idx and the read of
6805          * the opaque cookie.
6806          */
6807         rmb();
6808         work_mask = 0;
6809         received = 0;
6810         std_prod_idx = tpr->rx_std_prod_idx;
6811         jmb_prod_idx = tpr->rx_jmb_prod_idx;
6812         while (sw_idx != hw_idx && budget > 0) {
6813                 struct ring_info *ri;
6814                 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6815                 unsigned int len;
6816                 struct sk_buff *skb;
6817                 dma_addr_t dma_addr;
6818                 u32 opaque_key, desc_idx, *post_ptr;
6819                 u8 *data;
6820                 u64 tstamp = 0;
6821
6822                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6823                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6824                 if (opaque_key == RXD_OPAQUE_RING_STD) {
6825                         ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6826                         dma_addr = dma_unmap_addr(ri, mapping);
6827                         data = ri->data;
6828                         post_ptr = &std_prod_idx;
6829                         rx_std_posted++;
6830                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6831                         ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6832                         dma_addr = dma_unmap_addr(ri, mapping);
6833                         data = ri->data;
6834                         post_ptr = &jmb_prod_idx;
6835                 } else
6836                         goto next_pkt_nopost;
6837
6838                 work_mask |= opaque_key;
6839
6840                 if (desc->err_vlan & RXD_ERR_MASK) {
6841                 drop_it:
6842                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6843                                        desc_idx, *post_ptr);
6844                 drop_it_no_recycle:
6845                         /* Other statistics kept track of by card. */
6846                         tp->rx_dropped++;
6847                         goto next_pkt;
6848                 }
6849
6850                 prefetch(data + TG3_RX_OFFSET(tp));
6851                 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6852                       ETH_FCS_LEN;
6853
6854                 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6855                      RXD_FLAG_PTPSTAT_PTPV1 ||
6856                     (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6857                      RXD_FLAG_PTPSTAT_PTPV2) {
6858                         tstamp = tr32(TG3_RX_TSTAMP_LSB);
6859                         tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6860                 }
6861
6862                 if (len > TG3_RX_COPY_THRESH(tp)) {
6863                         int skb_size;
6864                         unsigned int frag_size;
6865
6866                         skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6867                                                     *post_ptr, &frag_size);
6868                         if (skb_size < 0)
6869                                 goto drop_it;
6870
6871                         pci_unmap_single(tp->pdev, dma_addr, skb_size,
6872                                          PCI_DMA_FROMDEVICE);
6873
6874                         /* Ensure that the update to the data happens
6875                          * after the usage of the old DMA mapping.
6876                          */
6877                         smp_wmb();
6878
6879                         ri->data = NULL;
6880
6881                         skb = build_skb(data, frag_size);
6882                         if (!skb) {
6883                                 tg3_frag_free(frag_size != 0, data);
6884                                 goto drop_it_no_recycle;
6885                         }
6886                         skb_reserve(skb, TG3_RX_OFFSET(tp));
6887                 } else {
6888                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6889                                        desc_idx, *post_ptr);
6890
6891                         skb = netdev_alloc_skb(tp->dev,
6892                                                len + TG3_RAW_IP_ALIGN);
6893                         if (skb == NULL)
6894                                 goto drop_it_no_recycle;
6895
6896                         skb_reserve(skb, TG3_RAW_IP_ALIGN);
6897                         pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6898                         memcpy(skb->data,
6899                                data + TG3_RX_OFFSET(tp),
6900                                len);
6901                         pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6902                 }
6903
6904                 skb_put(skb, len);
6905                 if (tstamp)
6906                         tg3_hwclock_to_timestamp(tp, tstamp,
6907                                                  skb_hwtstamps(skb));
6908
6909                 if ((tp->dev->features & NETIF_F_RXCSUM) &&
6910                     (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6911                     (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6912                       >> RXD_TCPCSUM_SHIFT) == 0xffff))
6913                         skb->ip_summed = CHECKSUM_UNNECESSARY;
6914                 else
6915                         skb_checksum_none_assert(skb);
6916
6917                 skb->protocol = eth_type_trans(skb, tp->dev);
6918
6919                 if (len > (tp->dev->mtu + ETH_HLEN) &&
6920                     skb->protocol != htons(ETH_P_8021Q) &&
6921                     skb->protocol != htons(ETH_P_8021AD)) {
6922                         dev_kfree_skb_any(skb);
6923                         goto drop_it_no_recycle;
6924                 }
6925
6926                 if (desc->type_flags & RXD_FLAG_VLAN &&
6927                     !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6928                         __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
6929                                                desc->err_vlan & RXD_VLAN_MASK);
6930
6931                 napi_gro_receive(&tnapi->napi, skb);
6932
6933                 received++;
6934                 budget--;
6935
6936 next_pkt:
6937                 (*post_ptr)++;
6938
6939                 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6940                         tpr->rx_std_prod_idx = std_prod_idx &
6941                                                tp->rx_std_ring_mask;
6942                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6943                                      tpr->rx_std_prod_idx);
6944                         work_mask &= ~RXD_OPAQUE_RING_STD;
6945                         rx_std_posted = 0;
6946                 }
6947 next_pkt_nopost:
6948                 sw_idx++;
6949                 sw_idx &= tp->rx_ret_ring_mask;
6950
6951                 /* Refresh hw_idx to see if there is new work */
6952                 if (sw_idx == hw_idx) {
6953                         hw_idx = *(tnapi->rx_rcb_prod_idx);
6954                         rmb();
6955                 }
6956         }
6957
6958         /* ACK the status ring. */
6959         tnapi->rx_rcb_ptr = sw_idx;
6960         tw32_rx_mbox(tnapi->consmbox, sw_idx);
6961
6962         /* Refill RX ring(s). */
6963         if (!tg3_flag(tp, ENABLE_RSS)) {
6964                 /* Sync BD data before updating mailbox */
6965                 wmb();
6966
6967                 if (work_mask & RXD_OPAQUE_RING_STD) {
6968                         tpr->rx_std_prod_idx = std_prod_idx &
6969                                                tp->rx_std_ring_mask;
6970                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6971                                      tpr->rx_std_prod_idx);
6972                 }
6973                 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6974                         tpr->rx_jmb_prod_idx = jmb_prod_idx &
6975                                                tp->rx_jmb_ring_mask;
6976                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6977                                      tpr->rx_jmb_prod_idx);
6978                 }
6979                 mmiowb();
6980         } else if (work_mask) {
6981                 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6982                  * updated before the producer indices can be updated.
6983                  */
6984                 smp_wmb();
6985
6986                 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6987                 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6988
6989                 if (tnapi != &tp->napi[1]) {
6990                         tp->rx_refill = true;
6991                         napi_schedule(&tp->napi[1].napi);
6992                 }
6993         }
6994
6995         return received;
6996 }
6997
6998 static void tg3_poll_link(struct tg3 *tp)
6999 {
7000         /* handle link change and other phy events */
7001         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
7002                 struct tg3_hw_status *sblk = tp->napi[0].hw_status;
7003
7004                 if (sblk->status & SD_STATUS_LINK_CHG) {
7005                         sblk->status = SD_STATUS_UPDATED |
7006                                        (sblk->status & ~SD_STATUS_LINK_CHG);
7007                         spin_lock(&tp->lock);
7008                         if (tg3_flag(tp, USE_PHYLIB)) {
7009                                 tw32_f(MAC_STATUS,
7010                                      (MAC_STATUS_SYNC_CHANGED |
7011                                       MAC_STATUS_CFG_CHANGED |
7012                                       MAC_STATUS_MI_COMPLETION |
7013                                       MAC_STATUS_LNKSTATE_CHANGED));
7014                                 udelay(40);
7015                         } else
7016                                 tg3_setup_phy(tp, false);
7017                         spin_unlock(&tp->lock);
7018                 }
7019         }
7020 }
7021
7022 static int tg3_rx_prodring_xfer(struct tg3 *tp,
7023                                 struct tg3_rx_prodring_set *dpr,
7024                                 struct tg3_rx_prodring_set *spr)
7025 {
7026         u32 si, di, cpycnt, src_prod_idx;
7027         int i, err = 0;
7028
7029         while (1) {
7030                 src_prod_idx = spr->rx_std_prod_idx;
7031
7032                 /* Make sure updates to the rx_std_buffers[] entries and the
7033                  * standard producer index are seen in the correct order.
7034                  */
7035                 smp_rmb();
7036
7037                 if (spr->rx_std_cons_idx == src_prod_idx)
7038                         break;
7039
7040                 if (spr->rx_std_cons_idx < src_prod_idx)
7041                         cpycnt = src_prod_idx - spr->rx_std_cons_idx;
7042                 else
7043                         cpycnt = tp->rx_std_ring_mask + 1 -
7044                                  spr->rx_std_cons_idx;
7045
7046                 cpycnt = min(cpycnt,
7047                              tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
7048
7049                 si = spr->rx_std_cons_idx;
7050                 di = dpr->rx_std_prod_idx;
7051
7052                 for (i = di; i < di + cpycnt; i++) {
7053                         if (dpr->rx_std_buffers[i].data) {
7054                                 cpycnt = i - di;
7055                                 err = -ENOSPC;
7056                                 break;
7057                         }
7058                 }
7059
7060                 if (!cpycnt)
7061                         break;
7062
7063                 /* Ensure that updates to the rx_std_buffers ring and the
7064                  * shadowed hardware producer ring from tg3_recycle_skb() are
7065                  * ordered correctly WRT the skb check above.
7066                  */
7067                 smp_rmb();
7068
7069                 memcpy(&dpr->rx_std_buffers[di],
7070                        &spr->rx_std_buffers[si],
7071                        cpycnt * sizeof(struct ring_info));
7072
7073                 for (i = 0; i < cpycnt; i++, di++, si++) {
7074                         struct tg3_rx_buffer_desc *sbd, *dbd;
7075                         sbd = &spr->rx_std[si];
7076                         dbd = &dpr->rx_std[di];
7077                         dbd->addr_hi = sbd->addr_hi;
7078                         dbd->addr_lo = sbd->addr_lo;
7079                 }
7080
7081                 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
7082                                        tp->rx_std_ring_mask;
7083                 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
7084                                        tp->rx_std_ring_mask;
7085         }
7086
7087         while (1) {
7088                 src_prod_idx = spr->rx_jmb_prod_idx;
7089
7090                 /* Make sure updates to the rx_jmb_buffers[] entries and
7091                  * the jumbo producer index are seen in the correct order.
7092                  */
7093                 smp_rmb();
7094
7095                 if (spr->rx_jmb_cons_idx == src_prod_idx)
7096                         break;
7097
7098                 if (spr->rx_jmb_cons_idx < src_prod_idx)
7099                         cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
7100                 else
7101                         cpycnt = tp->rx_jmb_ring_mask + 1 -
7102                                  spr->rx_jmb_cons_idx;
7103
7104                 cpycnt = min(cpycnt,
7105                              tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
7106
7107                 si = spr->rx_jmb_cons_idx;
7108                 di = dpr->rx_jmb_prod_idx;
7109
7110                 for (i = di; i < di + cpycnt; i++) {
7111                         if (dpr->rx_jmb_buffers[i].data) {
7112                                 cpycnt = i - di;
7113                                 err = -ENOSPC;
7114                                 break;
7115                         }
7116                 }
7117
7118                 if (!cpycnt)
7119                         break;
7120
7121                 /* Ensure that updates to the rx_jmb_buffers ring and the
7122                  * shadowed hardware producer ring from tg3_recycle_skb() are
7123                  * ordered correctly WRT the skb check above.
7124                  */
7125                 smp_rmb();
7126
7127                 memcpy(&dpr->rx_jmb_buffers[di],
7128                        &spr->rx_jmb_buffers[si],
7129                        cpycnt * sizeof(struct ring_info));
7130
7131                 for (i = 0; i < cpycnt; i++, di++, si++) {
7132                         struct tg3_rx_buffer_desc *sbd, *dbd;
7133                         sbd = &spr->rx_jmb[si].std;
7134                         dbd = &dpr->rx_jmb[di].std;
7135                         dbd->addr_hi = sbd->addr_hi;
7136                         dbd->addr_lo = sbd->addr_lo;
7137                 }
7138
7139                 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
7140                                        tp->rx_jmb_ring_mask;
7141                 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
7142                                        tp->rx_jmb_ring_mask;
7143         }
7144
7145         return err;
7146 }
7147
7148 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
7149 {
7150         struct tg3 *tp = tnapi->tp;
7151
7152         /* run TX completion thread */
7153         if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
7154                 tg3_tx(tnapi);
7155                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7156                         return work_done;
7157         }
7158
7159         if (!tnapi->rx_rcb_prod_idx)
7160                 return work_done;
7161
7162         /* run RX thread, within the bounds set by NAPI.
7163          * All RX "locking" is done by ensuring outside
7164          * code synchronizes with tg3->napi.poll()
7165          */
7166         if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
7167                 work_done += tg3_rx(tnapi, budget - work_done);
7168
7169         if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
7170                 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
7171                 int i, err = 0;
7172                 u32 std_prod_idx = dpr->rx_std_prod_idx;
7173                 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
7174
7175                 tp->rx_refill = false;
7176                 for (i = 1; i <= tp->rxq_cnt; i++)
7177                         err |= tg3_rx_prodring_xfer(tp, dpr,
7178                                                     &tp->napi[i].prodring);
7179
7180                 wmb();
7181
7182                 if (std_prod_idx != dpr->rx_std_prod_idx)
7183                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7184                                      dpr->rx_std_prod_idx);
7185
7186                 if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
7187                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7188                                      dpr->rx_jmb_prod_idx);
7189
7190                 mmiowb();
7191
7192                 if (err)
7193                         tw32_f(HOSTCC_MODE, tp->coal_now);
7194         }
7195
7196         return work_done;
7197 }
7198
7199 static inline void tg3_reset_task_schedule(struct tg3 *tp)
7200 {
7201         if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7202                 schedule_work(&tp->reset_task);
7203 }
7204
7205 static inline void tg3_reset_task_cancel(struct tg3 *tp)
7206 {
7207         cancel_work_sync(&tp->reset_task);
7208         tg3_flag_clear(tp, RESET_TASK_PENDING);
7209         tg3_flag_clear(tp, TX_RECOVERY_PENDING);
7210 }
7211
7212 static int tg3_poll_msix(struct napi_struct *napi, int budget)
7213 {
7214         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7215         struct tg3 *tp = tnapi->tp;
7216         int work_done = 0;
7217         struct tg3_hw_status *sblk = tnapi->hw_status;
7218
7219         while (1) {
7220                 work_done = tg3_poll_work(tnapi, work_done, budget);
7221
7222                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7223                         goto tx_recovery;
7224
7225                 if (unlikely(work_done >= budget))
7226                         break;
7227
7228                 /* tp->last_tag is used in tg3_int_reenable() below
7229                  * to tell the hw how much work has been processed,
7230                  * so we must read it before checking for more work.
7231                  */
7232                 tnapi->last_tag = sblk->status_tag;
7233                 tnapi->last_irq_tag = tnapi->last_tag;
7234                 rmb();
7235
7236                 /* check for RX/TX work to do */
7237                 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
7238                            *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
7239
7240                         /* This test here is not race free, but will reduce
7241                          * the number of interrupts by looping again.
7242                          */
7243                         if (tnapi == &tp->napi[1] && tp->rx_refill)
7244                                 continue;
7245
7246                         napi_complete_done(napi, work_done);
7247                         /* Reenable interrupts. */
7248                         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
7249
7250                         /* This test here is synchronized by napi_schedule()
7251                          * and napi_complete() to close the race condition.
7252                          */
7253                         if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
7254                                 tw32(HOSTCC_MODE, tp->coalesce_mode |
7255                                                   HOSTCC_MODE_ENABLE |
7256                                                   tnapi->coal_now);
7257                         }
7258                         mmiowb();
7259                         break;
7260                 }
7261         }
7262
7263         return work_done;
7264
7265 tx_recovery:
7266         /* work_done is guaranteed to be less than budget. */
7267         napi_complete(napi);
7268         tg3_reset_task_schedule(tp);
7269         return work_done;
7270 }
7271
7272 static void tg3_process_error(struct tg3 *tp)
7273 {
7274         u32 val;
7275         bool real_error = false;
7276
7277         if (tg3_flag(tp, ERROR_PROCESSED))
7278                 return;
7279
7280         /* Check Flow Attention register */
7281         val = tr32(HOSTCC_FLOW_ATTN);
7282         if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
7283                 netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
7284                 real_error = true;
7285         }
7286
7287         if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
7288                 netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
7289                 real_error = true;
7290         }
7291
7292         if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
7293                 netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
7294                 real_error = true;
7295         }
7296
7297         if (!real_error)
7298                 return;
7299
7300         tg3_dump_state(tp);
7301
7302         tg3_flag_set(tp, ERROR_PROCESSED);
7303         tg3_reset_task_schedule(tp);
7304 }
7305
7306 static int tg3_poll(struct napi_struct *napi, int budget)
7307 {
7308         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7309         struct tg3 *tp = tnapi->tp;
7310         int work_done = 0;
7311         struct tg3_hw_status *sblk = tnapi->hw_status;
7312
7313         while (1) {
7314                 if (sblk->status & SD_STATUS_ERROR)
7315                         tg3_process_error(tp);
7316
7317                 tg3_poll_link(tp);
7318
7319                 work_done = tg3_poll_work(tnapi, work_done, budget);
7320
7321                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7322                         goto tx_recovery;
7323
7324                 if (unlikely(work_done >= budget))
7325                         break;
7326
7327                 if (tg3_flag(tp, TAGGED_STATUS)) {
7328                         /* tp->last_tag is used in tg3_int_reenable() below
7329                          * to tell the hw how much work has been processed,
7330                          * so we must read it before checking for more work.
7331                          */
7332                         tnapi->last_tag = sblk->status_tag;
7333                         tnapi->last_irq_tag = tnapi->last_tag;
7334                         rmb();
7335                 } else
7336                         sblk->status &= ~SD_STATUS_UPDATED;
7337
7338                 if (likely(!tg3_has_work(tnapi))) {
7339                         napi_complete_done(napi, work_done);
7340                         tg3_int_reenable(tnapi);
7341                         break;
7342                 }
7343         }
7344
7345         return work_done;
7346
7347 tx_recovery:
7348         /* work_done is guaranteed to be less than budget. */
7349         napi_complete(napi);
7350         tg3_reset_task_schedule(tp);
7351         return work_done;
7352 }
7353
7354 static void tg3_napi_disable(struct tg3 *tp)
7355 {
7356         int i;
7357
7358         for (i = tp->irq_cnt - 1; i >= 0; i--)
7359                 napi_disable(&tp->napi[i].napi);
7360 }
7361
7362 static void tg3_napi_enable(struct tg3 *tp)
7363 {
7364         int i;
7365
7366         for (i = 0; i < tp->irq_cnt; i++)
7367                 napi_enable(&tp->napi[i].napi);
7368 }
7369
7370 static void tg3_napi_init(struct tg3 *tp)
7371 {
7372         int i;
7373
7374         netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
7375         for (i = 1; i < tp->irq_cnt; i++)
7376                 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
7377 }
7378
7379 static void tg3_napi_fini(struct tg3 *tp)
7380 {
7381         int i;
7382
7383         for (i = 0; i < tp->irq_cnt; i++)
7384                 netif_napi_del(&tp->napi[i].napi);
7385 }
7386
7387 static inline void tg3_netif_stop(struct tg3 *tp)
7388 {
7389         netif_trans_update(tp->dev);    /* prevent tx timeout */
7390         tg3_napi_disable(tp);
7391         netif_carrier_off(tp->dev);
7392         netif_tx_disable(tp->dev);
7393 }
7394
7395 /* tp->lock must be held */
7396 static inline void tg3_netif_start(struct tg3 *tp)
7397 {
7398         tg3_ptp_resume(tp);
7399
7400         /* NOTE: unconditional netif_tx_wake_all_queues is only
7401          * appropriate so long as all callers are assured to
7402          * have free tx slots (such as after tg3_init_hw)
7403          */
7404         netif_tx_wake_all_queues(tp->dev);
7405
7406         if (tp->link_up)
7407                 netif_carrier_on(tp->dev);
7408
7409         tg3_napi_enable(tp);
7410         tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
7411         tg3_enable_ints(tp);
7412 }
7413
7414 static void tg3_irq_quiesce(struct tg3 *tp)
7415         __releases(tp->lock)
7416         __acquires(tp->lock)
7417 {
7418         int i;
7419
7420         BUG_ON(tp->irq_sync);
7421
7422         tp->irq_sync = 1;
7423         smp_mb();
7424
7425         spin_unlock_bh(&tp->lock);
7426
7427         for (i = 0; i < tp->irq_cnt; i++)
7428                 synchronize_irq(tp->napi[i].irq_vec);
7429
7430         spin_lock_bh(&tp->lock);
7431 }
7432
7433 /* Fully shutdown all tg3 driver activity elsewhere in the system.
7434  * If irq_sync is non-zero, then the IRQ handler must be synchronized
7435  * with as well.  Most of the time, this is not necessary except when
7436  * shutting down the device.
7437  */
7438 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
7439 {
7440         spin_lock_bh(&tp->lock);
7441         if (irq_sync)
7442                 tg3_irq_quiesce(tp);
7443 }
7444
7445 static inline void tg3_full_unlock(struct tg3 *tp)
7446 {
7447         spin_unlock_bh(&tp->lock);
7448 }
7449
7450 /* One-shot MSI handler - Chip automatically disables interrupt
7451  * after sending MSI so driver doesn't have to do it.
7452  */
7453 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
7454 {
7455         struct tg3_napi *tnapi = dev_id;
7456         struct tg3 *tp = tnapi->tp;
7457
7458         prefetch(tnapi->hw_status);
7459         if (tnapi->rx_rcb)
7460                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7461
7462         if (likely(!tg3_irq_sync(tp)))
7463                 napi_schedule(&tnapi->napi);
7464
7465         return IRQ_HANDLED;
7466 }
7467
7468 /* MSI ISR - No need to check for interrupt sharing and no need to
7469  * flush status block and interrupt mailbox. PCI ordering rules
7470  * guarantee that MSI will arrive after the status block.
7471  */
7472 static irqreturn_t tg3_msi(int irq, void *dev_id)
7473 {
7474         struct tg3_napi *tnapi = dev_id;
7475         struct tg3 *tp = tnapi->tp;
7476
7477         prefetch(tnapi->hw_status);
7478         if (tnapi->rx_rcb)
7479                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7480         /*
7481          * Writing any value to intr-mbox-0 clears PCI INTA# and
7482          * chip-internal interrupt pending events.
7483          * Writing non-zero to intr-mbox-0 additional tells the
7484          * NIC to stop sending us irqs, engaging "in-intr-handler"
7485          * event coalescing.
7486          */
7487         tw32_mailbox(tnapi->int_mbox, 0x00000001);
7488         if (likely(!tg3_irq_sync(tp)))
7489                 napi_schedule(&tnapi->napi);
7490
7491         return IRQ_RETVAL(1);
7492 }
7493
7494 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
7495 {
7496         struct tg3_napi *tnapi = dev_id;
7497         struct tg3 *tp = tnapi->tp;
7498         struct tg3_hw_status *sblk = tnapi->hw_status;
7499         unsigned int handled = 1;
7500
7501         /* In INTx mode, it is possible for the interrupt to arrive at
7502          * the CPU before the status block posted prior to the interrupt.
7503          * Reading the PCI State register will confirm whether the
7504          * interrupt is ours and will flush the status block.
7505          */
7506         if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
7507                 if (tg3_flag(tp, CHIP_RESETTING) ||
7508                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7509                         handled = 0;
7510                         goto out;
7511                 }
7512         }
7513
7514         /*
7515          * Writing any value to intr-mbox-0 clears PCI INTA# and
7516          * chip-internal interrupt pending events.
7517          * Writing non-zero to intr-mbox-0 additional tells the
7518          * NIC to stop sending us irqs, engaging "in-intr-handler"
7519          * event coalescing.
7520          *
7521          * Flush the mailbox to de-assert the IRQ immediately to prevent
7522          * spurious interrupts.  The flush impacts performance but
7523          * excessive spurious interrupts can be worse in some cases.
7524          */
7525         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7526         if (tg3_irq_sync(tp))
7527                 goto out;
7528         sblk->status &= ~SD_STATUS_UPDATED;
7529         if (likely(tg3_has_work(tnapi))) {
7530                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7531                 napi_schedule(&tnapi->napi);
7532         } else {
7533                 /* No work, shared interrupt perhaps?  re-enable
7534                  * interrupts, and flush that PCI write
7535                  */
7536                 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
7537                                0x00000000);
7538         }
7539 out:
7540         return IRQ_RETVAL(handled);
7541 }
7542
7543 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
7544 {
7545         struct tg3_napi *tnapi = dev_id;
7546         struct tg3 *tp = tnapi->tp;
7547         struct tg3_hw_status *sblk = tnapi->hw_status;
7548         unsigned int handled = 1;
7549
7550         /* In INTx mode, it is possible for the interrupt to arrive at
7551          * the CPU before the status block posted prior to the interrupt.
7552          * Reading the PCI State register will confirm whether the
7553          * interrupt is ours and will flush the status block.
7554          */
7555         if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
7556                 if (tg3_flag(tp, CHIP_RESETTING) ||
7557                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7558                         handled = 0;
7559                         goto out;
7560                 }
7561         }
7562
7563         /*
7564          * writing any value to intr-mbox-0 clears PCI INTA# and
7565          * chip-internal interrupt pending events.
7566          * writing non-zero to intr-mbox-0 additional tells the
7567          * NIC to stop sending us irqs, engaging "in-intr-handler"
7568          * event coalescing.
7569          *
7570          * Flush the mailbox to de-assert the IRQ immediately to prevent
7571          * spurious interrupts.  The flush impacts performance but
7572          * excessive spurious interrupts can be worse in some cases.
7573          */
7574         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7575
7576         /*
7577          * In a shared interrupt configuration, sometimes other devices'
7578          * interrupts will scream.  We record the current status tag here
7579          * so that the above check can report that the screaming interrupts
7580          * are unhandled.  Eventually they will be silenced.
7581          */
7582         tnapi->last_irq_tag = sblk->status_tag;
7583
7584         if (tg3_irq_sync(tp))
7585                 goto out;
7586
7587         prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7588
7589         napi_schedule(&tnapi->napi);
7590
7591 out:
7592         return IRQ_RETVAL(handled);
7593 }
7594
7595 /* ISR for interrupt test */
7596 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7597 {
7598         struct tg3_napi *tnapi = dev_id;
7599         struct tg3 *tp = tnapi->tp;
7600         struct tg3_hw_status *sblk = tnapi->hw_status;
7601
7602         if ((sblk->status & SD_STATUS_UPDATED) ||
7603             !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7604                 tg3_disable_ints(tp);
7605                 return IRQ_RETVAL(1);
7606         }
7607         return IRQ_RETVAL(0);
7608 }
7609
7610 #ifdef CONFIG_NET_POLL_CONTROLLER
7611 static void tg3_poll_controller(struct net_device *dev)
7612 {
7613         int i;
7614         struct tg3 *tp = netdev_priv(dev);
7615
7616         if (tg3_irq_sync(tp))
7617                 return;
7618
7619         for (i = 0; i < tp->irq_cnt; i++)
7620                 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
7621 }
7622 #endif
7623
7624 static void tg3_tx_timeout(struct net_device *dev)
7625 {
7626         struct tg3 *tp = netdev_priv(dev);
7627
7628         if (netif_msg_tx_err(tp)) {
7629                 netdev_err(dev, "transmit timed out, resetting\n");
7630                 tg3_dump_state(tp);
7631         }
7632
7633         tg3_reset_task_schedule(tp);
7634 }
7635
7636 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
7637 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7638 {
7639         u32 base = (u32) mapping & 0xffffffff;
7640
7641         return base + len + 8 < base;
7642 }
7643
7644 /* Test for TSO DMA buffers that cross into regions which are within MSS bytes
7645  * of any 4GB boundaries: 4G, 8G, etc
7646  */
7647 static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7648                                            u32 len, u32 mss)
7649 {
7650         if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
7651                 u32 base = (u32) mapping & 0xffffffff;
7652
7653                 return ((base + len + (mss & 0x3fff)) < base);
7654         }
7655         return 0;
7656 }
7657
7658 /* Test for DMA addresses > 40-bit */
7659 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7660                                           int len)
7661 {
7662 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
7663         if (tg3_flag(tp, 40BIT_DMA_BUG))
7664                 return ((u64) mapping + len) > DMA_BIT_MASK(40);
7665         return 0;
7666 #else
7667         return 0;
7668 #endif
7669 }
7670
7671 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7672                                  dma_addr_t mapping, u32 len, u32 flags,
7673                                  u32 mss, u32 vlan)
7674 {
7675         txbd->addr_hi = ((u64) mapping >> 32);
7676         txbd->addr_lo = ((u64) mapping & 0xffffffff);
7677         txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7678         txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7679 }
7680
7681 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7682                             dma_addr_t map, u32 len, u32 flags,
7683                             u32 mss, u32 vlan)
7684 {
7685         struct tg3 *tp = tnapi->tp;
7686         bool hwbug = false;
7687
7688         if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7689                 hwbug = true;
7690
7691         if (tg3_4g_overflow_test(map, len))
7692                 hwbug = true;
7693
7694         if (tg3_4g_tso_overflow_test(tp, map, len, mss))
7695                 hwbug = true;
7696
7697         if (tg3_40bit_overflow_test(tp, map, len))
7698                 hwbug = true;
7699
7700         if (tp->dma_limit) {
7701                 u32 prvidx = *entry;
7702                 u32 tmp_flag = flags & ~TXD_FLAG_END;
7703                 while (len > tp->dma_limit && *budget) {
7704                         u32 frag_len = tp->dma_limit;
7705                         len -= tp->dma_limit;
7706
7707                         /* Avoid the 8byte DMA problem */
7708                         if (len <= 8) {
7709                                 len += tp->dma_limit / 2;
7710                                 frag_len = tp->dma_limit / 2;
7711                         }
7712
7713                         tnapi->tx_buffers[*entry].fragmented = true;
7714
7715                         tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7716                                       frag_len, tmp_flag, mss, vlan);
7717                         *budget -= 1;
7718                         prvidx = *entry;
7719                         *entry = NEXT_TX(*entry);
7720
7721                         map += frag_len;
7722                 }
7723
7724                 if (len) {
7725                         if (*budget) {
7726                                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7727                                               len, flags, mss, vlan);
7728                                 *budget -= 1;
7729                                 *entry = NEXT_TX(*entry);
7730                         } else {
7731                                 hwbug = true;
7732                                 tnapi->tx_buffers[prvidx].fragmented = false;
7733                         }
7734                 }
7735         } else {
7736                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7737                               len, flags, mss, vlan);
7738                 *entry = NEXT_TX(*entry);
7739         }
7740
7741         return hwbug;
7742 }
7743
7744 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7745 {
7746         int i;
7747         struct sk_buff *skb;
7748         struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7749
7750         skb = txb->skb;
7751         txb->skb = NULL;
7752
7753         pci_unmap_single(tnapi->tp->pdev,
7754                          dma_unmap_addr(txb, mapping),
7755                          skb_headlen(skb),
7756                          PCI_DMA_TODEVICE);
7757
7758         while (txb->fragmented) {
7759                 txb->fragmented = false;
7760                 entry = NEXT_TX(entry);
7761                 txb = &tnapi->tx_buffers[entry];
7762         }
7763
7764         for (i = 0; i <= last; i++) {
7765                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7766
7767                 entry = NEXT_TX(entry);
7768                 txb = &tnapi->tx_buffers[entry];
7769
7770                 pci_unmap_page(tnapi->tp->pdev,
7771                                dma_unmap_addr(txb, mapping),
7772                                skb_frag_size(frag), PCI_DMA_TODEVICE);
7773
7774                 while (txb->fragmented) {
7775                         txb->fragmented = false;
7776                         entry = NEXT_TX(entry);
7777                         txb = &tnapi->tx_buffers[entry];
7778                 }
7779         }
7780 }
7781
7782 /* Workaround 4GB and 40-bit hardware DMA bugs. */
7783 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7784                                        struct sk_buff **pskb,
7785                                        u32 *entry, u32 *budget,
7786                                        u32 base_flags, u32 mss, u32 vlan)
7787 {
7788         struct tg3 *tp = tnapi->tp;
7789         struct sk_buff *new_skb, *skb = *pskb;
7790         dma_addr_t new_addr = 0;
7791         int ret = 0;
7792
7793         if (tg3_asic_rev(tp) != ASIC_REV_5701)
7794                 new_skb = skb_copy(skb, GFP_ATOMIC);
7795         else {
7796                 int more_headroom = 4 - ((unsigned long)skb->data & 3);
7797
7798                 new_skb = skb_copy_expand(skb,
7799                                           skb_headroom(skb) + more_headroom,
7800                                           skb_tailroom(skb), GFP_ATOMIC);
7801         }
7802
7803         if (!new_skb) {
7804                 ret = -1;
7805         } else {
7806                 /* New SKB is guaranteed to be linear. */
7807                 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
7808                                           PCI_DMA_TODEVICE);
7809                 /* Make sure the mapping succeeded */
7810                 if (pci_dma_mapping_error(tp->pdev, new_addr)) {
7811                         dev_kfree_skb_any(new_skb);
7812                         ret = -1;
7813                 } else {
7814                         u32 save_entry = *entry;
7815
7816                         base_flags |= TXD_FLAG_END;
7817
7818                         tnapi->tx_buffers[*entry].skb = new_skb;
7819                         dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7820                                            mapping, new_addr);
7821
7822                         if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7823                                             new_skb->len, base_flags,
7824                                             mss, vlan)) {
7825                                 tg3_tx_skb_unmap(tnapi, save_entry, -1);
7826                                 dev_kfree_skb_any(new_skb);
7827                                 ret = -1;
7828                         }
7829                 }
7830         }
7831
7832         dev_consume_skb_any(skb);
7833         *pskb = new_skb;
7834         return ret;
7835 }
7836
7837 static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb)
7838 {
7839         /* Check if we will never have enough descriptors,
7840          * as gso_segs can be more than current ring size
7841          */
7842         return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3;
7843 }
7844
7845 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7846
7847 /* Use GSO to workaround all TSO packets that meet HW bug conditions
7848  * indicated in tg3_tx_frag_set()
7849  */
7850 static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
7851                        struct netdev_queue *txq, struct sk_buff *skb)
7852 {
7853         struct sk_buff *segs, *nskb;
7854         u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7855
7856         /* Estimate the number of fragments in the worst case */
7857         if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
7858                 netif_tx_stop_queue(txq);
7859
7860                 /* netif_tx_stop_queue() must be done before checking
7861                  * checking tx index in tg3_tx_avail() below, because in
7862                  * tg3_tx(), we update tx index before checking for
7863                  * netif_tx_queue_stopped().
7864                  */
7865                 smp_mb();
7866                 if (tg3_tx_avail(tnapi) <= frag_cnt_est)
7867                         return NETDEV_TX_BUSY;
7868
7869                 netif_tx_wake_queue(txq);
7870         }
7871
7872         segs = skb_gso_segment(skb, tp->dev->features &
7873                                     ~(NETIF_F_TSO | NETIF_F_TSO6));
7874         if (IS_ERR(segs) || !segs)
7875                 goto tg3_tso_bug_end;
7876
7877         do {
7878                 nskb = segs;
7879                 segs = segs->next;
7880                 nskb->next = NULL;
7881                 tg3_start_xmit(nskb, tp->dev);
7882         } while (segs);
7883
7884 tg3_tso_bug_end:
7885         dev_consume_skb_any(skb);
7886
7887         return NETDEV_TX_OK;
7888 }
7889
7890 /* hard_start_xmit for all devices */
7891 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7892 {
7893         struct tg3 *tp = netdev_priv(dev);
7894         u32 len, entry, base_flags, mss, vlan = 0;
7895         u32 budget;
7896         int i = -1, would_hit_hwbug;
7897         dma_addr_t mapping;
7898         struct tg3_napi *tnapi;
7899         struct netdev_queue *txq;
7900         unsigned int last;
7901         struct iphdr *iph = NULL;
7902         struct tcphdr *tcph = NULL;
7903         __sum16 tcp_csum = 0, ip_csum = 0;
7904         __be16 ip_tot_len = 0;
7905
7906         txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7907         tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7908         if (tg3_flag(tp, ENABLE_TSS))
7909                 tnapi++;
7910
7911         budget = tg3_tx_avail(tnapi);
7912
7913         /* We are running in BH disabled context with netif_tx_lock
7914          * and TX reclaim runs via tp->napi.poll inside of a software
7915          * interrupt.  Furthermore, IRQ processing runs lockless so we have
7916          * no IRQ context deadlocks to worry about either.  Rejoice!
7917          */
7918         if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7919                 if (!netif_tx_queue_stopped(txq)) {
7920                         netif_tx_stop_queue(txq);
7921
7922                         /* This is a hard error, log it. */
7923                         netdev_err(dev,
7924                                    "BUG! Tx Ring full when queue awake!\n");
7925                 }
7926                 return NETDEV_TX_BUSY;
7927         }
7928
7929         entry = tnapi->tx_prod;
7930         base_flags = 0;
7931
7932         mss = skb_shinfo(skb)->gso_size;
7933         if (mss) {
7934                 u32 tcp_opt_len, hdr_len;
7935
7936                 if (skb_cow_head(skb, 0))
7937                         goto drop;
7938
7939                 iph = ip_hdr(skb);
7940                 tcp_opt_len = tcp_optlen(skb);
7941
7942                 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
7943
7944                 /* HW/FW can not correctly segment packets that have been
7945                  * vlan encapsulated.
7946                  */
7947                 if (skb->protocol == htons(ETH_P_8021Q) ||
7948                     skb->protocol == htons(ETH_P_8021AD)) {
7949                         if (tg3_tso_bug_gso_check(tnapi, skb))
7950                                 return tg3_tso_bug(tp, tnapi, txq, skb);
7951                         goto drop;
7952                 }
7953
7954                 if (!skb_is_gso_v6(skb)) {
7955                         if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7956                             tg3_flag(tp, TSO_BUG)) {
7957                                 if (tg3_tso_bug_gso_check(tnapi, skb))
7958                                         return tg3_tso_bug(tp, tnapi, txq, skb);
7959                                 goto drop;
7960                         }
7961                         ip_csum = iph->check;
7962                         ip_tot_len = iph->tot_len;
7963                         iph->check = 0;
7964                         iph->tot_len = htons(mss + hdr_len);
7965                 }
7966
7967                 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7968                                TXD_FLAG_CPU_POST_DMA);
7969
7970                 tcph = tcp_hdr(skb);
7971                 tcp_csum = tcph->check;
7972
7973                 if (tg3_flag(tp, HW_TSO_1) ||
7974                     tg3_flag(tp, HW_TSO_2) ||
7975                     tg3_flag(tp, HW_TSO_3)) {
7976                         tcph->check = 0;
7977                         base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7978                 } else {
7979                         tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
7980                                                          0, IPPROTO_TCP, 0);
7981                 }
7982
7983                 if (tg3_flag(tp, HW_TSO_3)) {
7984                         mss |= (hdr_len & 0xc) << 12;
7985                         if (hdr_len & 0x10)
7986                                 base_flags |= 0x00000010;
7987                         base_flags |= (hdr_len & 0x3e0) << 5;
7988                 } else if (tg3_flag(tp, HW_TSO_2))
7989                         mss |= hdr_len << 9;
7990                 else if (tg3_flag(tp, HW_TSO_1) ||
7991                          tg3_asic_rev(tp) == ASIC_REV_5705) {
7992                         if (tcp_opt_len || iph->ihl > 5) {
7993                                 int tsflags;
7994
7995                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7996                                 mss |= (tsflags << 11);
7997                         }
7998                 } else {
7999                         if (tcp_opt_len || iph->ihl > 5) {
8000                                 int tsflags;
8001
8002                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8003                                 base_flags |= tsflags << 12;
8004                         }
8005                 }
8006         } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
8007                 /* HW/FW can not correctly checksum packets that have been
8008                  * vlan encapsulated.
8009                  */
8010                 if (skb->protocol == htons(ETH_P_8021Q) ||
8011                     skb->protocol == htons(ETH_P_8021AD)) {
8012                         if (skb_checksum_help(skb))
8013                                 goto drop;
8014                 } else  {
8015                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
8016                 }
8017         }
8018
8019         if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
8020             !mss && skb->len > VLAN_ETH_FRAME_LEN)
8021                 base_flags |= TXD_FLAG_JMB_PKT;
8022
8023         if (skb_vlan_tag_present(skb)) {
8024                 base_flags |= TXD_FLAG_VLAN;
8025                 vlan = skb_vlan_tag_get(skb);
8026         }
8027
8028         if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
8029             tg3_flag(tp, TX_TSTAMP_EN)) {
8030                 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
8031                 base_flags |= TXD_FLAG_HWTSTAMP;
8032         }
8033
8034         len = skb_headlen(skb);
8035
8036         mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
8037         if (pci_dma_mapping_error(tp->pdev, mapping))
8038                 goto drop;
8039
8040
8041         tnapi->tx_buffers[entry].skb = skb;
8042         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
8043
8044         would_hit_hwbug = 0;
8045
8046         if (tg3_flag(tp, 5701_DMA_BUG))
8047                 would_hit_hwbug = 1;
8048
8049         if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
8050                           ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
8051                             mss, vlan)) {
8052                 would_hit_hwbug = 1;
8053         } else if (skb_shinfo(skb)->nr_frags > 0) {
8054                 u32 tmp_mss = mss;
8055
8056                 if (!tg3_flag(tp, HW_TSO_1) &&
8057                     !tg3_flag(tp, HW_TSO_2) &&
8058                     !tg3_flag(tp, HW_TSO_3))
8059                         tmp_mss = 0;
8060
8061                 /* Now loop through additional data
8062                  * fragments, and queue them.
8063                  */
8064                 last = skb_shinfo(skb)->nr_frags - 1;
8065                 for (i = 0; i <= last; i++) {
8066                         skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
8067
8068                         len = skb_frag_size(frag);
8069                         mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
8070                                                    len, DMA_TO_DEVICE);
8071
8072                         tnapi->tx_buffers[entry].skb = NULL;
8073                         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
8074                                            mapping);
8075                         if (dma_mapping_error(&tp->pdev->dev, mapping))
8076                                 goto dma_error;
8077
8078                         if (!budget ||
8079                             tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
8080                                             len, base_flags |
8081                                             ((i == last) ? TXD_FLAG_END : 0),
8082                                             tmp_mss, vlan)) {
8083                                 would_hit_hwbug = 1;
8084                                 break;
8085                         }
8086                 }
8087         }
8088
8089         if (would_hit_hwbug) {
8090                 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
8091
8092                 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) {
8093                         /* If it's a TSO packet, do GSO instead of
8094                          * allocating and copying to a large linear SKB
8095                          */
8096                         if (ip_tot_len) {
8097                                 iph->check = ip_csum;
8098                                 iph->tot_len = ip_tot_len;
8099                         }
8100                         tcph->check = tcp_csum;
8101                         return tg3_tso_bug(tp, tnapi, txq, skb);
8102                 }
8103
8104                 /* If the workaround fails due to memory/mapping
8105                  * failure, silently drop this packet.
8106                  */
8107                 entry = tnapi->tx_prod;
8108                 budget = tg3_tx_avail(tnapi);
8109                 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
8110                                                 base_flags, mss, vlan))
8111                         goto drop_nofree;
8112         }
8113
8114         skb_tx_timestamp(skb);
8115         netdev_tx_sent_queue(txq, skb->len);
8116
8117         /* Sync BD data before updating mailbox */
8118         wmb();
8119
8120         tnapi->tx_prod = entry;
8121         if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
8122                 netif_tx_stop_queue(txq);
8123
8124                 /* netif_tx_stop_queue() must be done before checking
8125                  * checking tx index in tg3_tx_avail() below, because in
8126                  * tg3_tx(), we update tx index before checking for
8127                  * netif_tx_queue_stopped().
8128                  */
8129                 smp_mb();
8130                 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
8131                         netif_tx_wake_queue(txq);
8132         }
8133
8134         if (!skb->xmit_more || netif_xmit_stopped(txq)) {
8135                 /* Packets are ready, update Tx producer idx on card. */
8136                 tw32_tx_mbox(tnapi->prodmbox, entry);
8137                 mmiowb();
8138         }
8139
8140         return NETDEV_TX_OK;
8141
8142 dma_error:
8143         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
8144         tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
8145 drop:
8146         dev_kfree_skb_any(skb);
8147 drop_nofree:
8148         tp->tx_dropped++;
8149         return NETDEV_TX_OK;
8150 }
8151
8152 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
8153 {
8154         if (enable) {
8155                 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
8156                                   MAC_MODE_PORT_MODE_MASK);
8157
8158                 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
8159
8160                 if (!tg3_flag(tp, 5705_PLUS))
8161                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
8162
8163                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
8164                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
8165                 else
8166                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
8167         } else {
8168                 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
8169
8170                 if (tg3_flag(tp, 5705_PLUS) ||
8171                     (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
8172                     tg3_asic_rev(tp) == ASIC_REV_5700)
8173                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
8174         }
8175
8176         tw32(MAC_MODE, tp->mac_mode);
8177         udelay(40);
8178 }
8179
8180 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
8181 {
8182         u32 val, bmcr, mac_mode, ptest = 0;
8183
8184         tg3_phy_toggle_apd(tp, false);
8185         tg3_phy_toggle_automdix(tp, false);
8186
8187         if (extlpbk && tg3_phy_set_extloopbk(tp))
8188                 return -EIO;
8189
8190         bmcr = BMCR_FULLDPLX;
8191         switch (speed) {
8192         case SPEED_10:
8193                 break;
8194         case SPEED_100:
8195                 bmcr |= BMCR_SPEED100;
8196                 break;
8197         case SPEED_1000:
8198         default:
8199                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
8200                         speed = SPEED_100;
8201                         bmcr |= BMCR_SPEED100;
8202                 } else {
8203                         speed = SPEED_1000;
8204                         bmcr |= BMCR_SPEED1000;
8205                 }
8206         }
8207
8208         if (extlpbk) {
8209                 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
8210                         tg3_readphy(tp, MII_CTRL1000, &val);
8211                         val |= CTL1000_AS_MASTER |
8212                                CTL1000_ENABLE_MASTER;
8213                         tg3_writephy(tp, MII_CTRL1000, val);
8214                 } else {
8215                         ptest = MII_TG3_FET_PTEST_TRIM_SEL |
8216                                 MII_TG3_FET_PTEST_TRIM_2;
8217                         tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
8218                 }
8219         } else
8220                 bmcr |= BMCR_LOOPBACK;
8221
8222         tg3_writephy(tp, MII_BMCR, bmcr);
8223
8224         /* The write needs to be flushed for the FETs */
8225         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
8226                 tg3_readphy(tp, MII_BMCR, &bmcr);
8227
8228         udelay(40);
8229
8230         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
8231             tg3_asic_rev(tp) == ASIC_REV_5785) {
8232                 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
8233                              MII_TG3_FET_PTEST_FRC_TX_LINK |
8234                              MII_TG3_FET_PTEST_FRC_TX_LOCK);
8235
8236                 /* The write needs to be flushed for the AC131 */
8237                 tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
8238         }
8239
8240         /* Reset to prevent losing 1st rx packet intermittently */
8241         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
8242             tg3_flag(tp, 5780_CLASS)) {
8243                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8244                 udelay(10);
8245                 tw32_f(MAC_RX_MODE, tp->rx_mode);
8246         }
8247
8248         mac_mode = tp->mac_mode &
8249                    ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
8250         if (speed == SPEED_1000)
8251                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
8252         else
8253                 mac_mode |= MAC_MODE_PORT_MODE_MII;
8254
8255         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
8256                 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
8257
8258                 if (masked_phy_id == TG3_PHY_ID_BCM5401)
8259                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
8260                 else if (masked_phy_id == TG3_PHY_ID_BCM5411)
8261                         mac_mode |= MAC_MODE_LINK_POLARITY;
8262
8263                 tg3_writephy(tp, MII_TG3_EXT_CTRL,
8264                              MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8265         }
8266
8267         tw32(MAC_MODE, mac_mode);
8268         udelay(40);
8269
8270         return 0;
8271 }
8272
8273 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
8274 {
8275         struct tg3 *tp = netdev_priv(dev);
8276
8277         if (features & NETIF_F_LOOPBACK) {
8278                 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
8279                         return;
8280
8281                 spin_lock_bh(&tp->lock);
8282                 tg3_mac_loopback(tp, true);
8283                 netif_carrier_on(tp->dev);
8284                 spin_unlock_bh(&tp->lock);
8285                 netdev_info(dev, "Internal MAC loopback mode enabled.\n");
8286         } else {
8287                 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
8288                         return;
8289
8290                 spin_lock_bh(&tp->lock);
8291                 tg3_mac_loopback(tp, false);
8292                 /* Force link status check */
8293                 tg3_setup_phy(tp, true);
8294                 spin_unlock_bh(&tp->lock);
8295                 netdev_info(dev, "Internal MAC loopback mode disabled.\n");
8296         }
8297 }
8298
8299 static netdev_features_t tg3_fix_features(struct net_device *dev,
8300         netdev_features_t features)
8301 {
8302         struct tg3 *tp = netdev_priv(dev);
8303
8304         if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
8305                 features &= ~NETIF_F_ALL_TSO;
8306
8307         return features;
8308 }
8309
8310 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
8311 {
8312         netdev_features_t changed = dev->features ^ features;
8313
8314         if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
8315                 tg3_set_loopback(dev, features);
8316
8317         return 0;
8318 }
8319
8320 static void tg3_rx_prodring_free(struct tg3 *tp,
8321                                  struct tg3_rx_prodring_set *tpr)
8322 {
8323         int i;
8324
8325         if (tpr != &tp->napi[0].prodring) {
8326                 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
8327                      i = (i + 1) & tp->rx_std_ring_mask)
8328                         tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8329                                         tp->rx_pkt_map_sz);
8330
8331                 if (tg3_flag(tp, JUMBO_CAPABLE)) {
8332                         for (i = tpr->rx_jmb_cons_idx;
8333                              i != tpr->rx_jmb_prod_idx;
8334                              i = (i + 1) & tp->rx_jmb_ring_mask) {
8335                                 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8336                                                 TG3_RX_JMB_MAP_SZ);
8337                         }
8338                 }
8339
8340                 return;
8341         }
8342
8343         for (i = 0; i <= tp->rx_std_ring_mask; i++)
8344                 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8345                                 tp->rx_pkt_map_sz);
8346
8347         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8348                 for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
8349                         tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8350                                         TG3_RX_JMB_MAP_SZ);
8351         }
8352 }
8353
8354 /* Initialize rx rings for packet processing.
8355  *
8356  * The chip has been shut down and the driver detached from
8357  * the networking, so no interrupts or new tx packets will
8358  * end up in the driver.  tp->{tx,}lock are held and thus
8359  * we may not sleep.
8360  */
8361 static int tg3_rx_prodring_alloc(struct tg3 *tp,
8362                                  struct tg3_rx_prodring_set *tpr)
8363 {
8364         u32 i, rx_pkt_dma_sz;
8365
8366         tpr->rx_std_cons_idx = 0;
8367         tpr->rx_std_prod_idx = 0;
8368         tpr->rx_jmb_cons_idx = 0;
8369         tpr->rx_jmb_prod_idx = 0;
8370
8371         if (tpr != &tp->napi[0].prodring) {
8372                 memset(&tpr->rx_std_buffers[0], 0,
8373                        TG3_RX_STD_BUFF_RING_SIZE(tp));
8374                 if (tpr->rx_jmb_buffers)
8375                         memset(&tpr->rx_jmb_buffers[0], 0,
8376                                TG3_RX_JMB_BUFF_RING_SIZE(tp));
8377                 goto done;
8378         }
8379
8380         /* Zero out all descriptors. */
8381         memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
8382
8383         rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
8384         if (tg3_flag(tp, 5780_CLASS) &&
8385             tp->dev->mtu > ETH_DATA_LEN)
8386                 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
8387         tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
8388
8389         /* Initialize invariants of the rings, we only set this
8390          * stuff once.  This works because the card does not
8391          * write into the rx buffer posting rings.
8392          */
8393         for (i = 0; i <= tp->rx_std_ring_mask; i++) {
8394                 struct tg3_rx_buffer_desc *rxd;
8395
8396                 rxd = &tpr->rx_std[i];
8397                 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
8398                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
8399                 rxd->opaque = (RXD_OPAQUE_RING_STD |
8400                                (i << RXD_OPAQUE_INDEX_SHIFT));
8401         }
8402
8403         /* Now allocate fresh SKBs for each rx ring. */
8404         for (i = 0; i < tp->rx_pending; i++) {
8405                 unsigned int frag_size;
8406
8407                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
8408                                       &frag_size) < 0) {
8409                         netdev_warn(tp->dev,
8410                                     "Using a smaller RX standard ring. Only "
8411                                     "%d out of %d buffers were allocated "
8412                                     "successfully\n", i, tp->rx_pending);
8413                         if (i == 0)
8414                                 goto initfail;
8415                         tp->rx_pending = i;
8416                         break;
8417                 }
8418         }
8419
8420         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8421                 goto done;
8422
8423         memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
8424
8425         if (!tg3_flag(tp, JUMBO_RING_ENABLE))
8426                 goto done;
8427
8428         for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
8429                 struct tg3_rx_buffer_desc *rxd;
8430
8431                 rxd = &tpr->rx_jmb[i].std;
8432                 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
8433                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
8434                                   RXD_FLAG_JUMBO;
8435                 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
8436                        (i << RXD_OPAQUE_INDEX_SHIFT));
8437         }
8438
8439         for (i = 0; i < tp->rx_jumbo_pending; i++) {
8440                 unsigned int frag_size;
8441
8442                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
8443                                       &frag_size) < 0) {
8444                         netdev_warn(tp->dev,
8445                                     "Using a smaller RX jumbo ring. Only %d "
8446                                     "out of %d buffers were allocated "
8447                                     "successfully\n", i, tp->rx_jumbo_pending);
8448                         if (i == 0)
8449                                 goto initfail;
8450                         tp->rx_jumbo_pending = i;
8451                         break;
8452                 }
8453         }
8454
8455 done:
8456         return 0;
8457
8458 initfail:
8459         tg3_rx_prodring_free(tp, tpr);
8460         return -ENOMEM;
8461 }
8462
8463 static void tg3_rx_prodring_fini(struct tg3 *tp,
8464                                  struct tg3_rx_prodring_set *tpr)
8465 {
8466         kfree(tpr->rx_std_buffers);
8467         tpr->rx_std_buffers = NULL;
8468         kfree(tpr->rx_jmb_buffers);
8469         tpr->rx_jmb_buffers = NULL;
8470         if (tpr->rx_std) {
8471                 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
8472                                   tpr->rx_std, tpr->rx_std_mapping);
8473                 tpr->rx_std = NULL;
8474         }
8475         if (tpr->rx_jmb) {
8476                 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
8477                                   tpr->rx_jmb, tpr->rx_jmb_mapping);
8478                 tpr->rx_jmb = NULL;
8479         }
8480 }
8481
8482 static int tg3_rx_prodring_init(struct tg3 *tp,
8483                                 struct tg3_rx_prodring_set *tpr)
8484 {
8485         tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
8486                                       GFP_KERNEL);
8487         if (!tpr->rx_std_buffers)
8488                 return -ENOMEM;
8489
8490         tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
8491                                          TG3_RX_STD_RING_BYTES(tp),
8492                                          &tpr->rx_std_mapping,
8493                                          GFP_KERNEL);
8494         if (!tpr->rx_std)
8495                 goto err_out;
8496
8497         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8498                 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
8499                                               GFP_KERNEL);
8500                 if (!tpr->rx_jmb_buffers)
8501                         goto err_out;
8502
8503                 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
8504                                                  TG3_RX_JMB_RING_BYTES(tp),
8505                                                  &tpr->rx_jmb_mapping,
8506                                                  GFP_KERNEL);
8507                 if (!tpr->rx_jmb)
8508                         goto err_out;
8509         }
8510
8511         return 0;
8512
8513 err_out:
8514         tg3_rx_prodring_fini(tp, tpr);
8515         return -ENOMEM;
8516 }
8517
8518 /* Free up pending packets in all rx/tx rings.
8519  *
8520  * The chip has been shut down and the driver detached from
8521  * the networking, so no interrupts or new tx packets will
8522  * end up in the driver.  tp->{tx,}lock is not held and we are not
8523  * in an interrupt context and thus may sleep.
8524  */
8525 static void tg3_free_rings(struct tg3 *tp)
8526 {
8527         int i, j;
8528
8529         for (j = 0; j < tp->irq_cnt; j++) {
8530                 struct tg3_napi *tnapi = &tp->napi[j];
8531
8532                 tg3_rx_prodring_free(tp, &tnapi->prodring);
8533
8534                 if (!tnapi->tx_buffers)
8535                         continue;
8536
8537                 for (i = 0; i < TG3_TX_RING_SIZE; i++) {
8538                         struct sk_buff *skb = tnapi->tx_buffers[i].skb;
8539
8540                         if (!skb)
8541                                 continue;
8542
8543                         tg3_tx_skb_unmap(tnapi, i,
8544                                          skb_shinfo(skb)->nr_frags - 1);
8545
8546                         dev_consume_skb_any(skb);
8547                 }
8548                 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
8549         }
8550 }
8551
8552 /* Initialize tx/rx rings for packet processing.
8553  *
8554  * The chip has been shut down and the driver detached from
8555  * the networking, so no interrupts or new tx packets will
8556  * end up in the driver.  tp->{tx,}lock are held and thus
8557  * we may not sleep.
8558  */
8559 static int tg3_init_rings(struct tg3 *tp)
8560 {
8561         int i;
8562
8563         /* Free up all the SKBs. */
8564         tg3_free_rings(tp);
8565
8566         for (i = 0; i < tp->irq_cnt; i++) {
8567                 struct tg3_napi *tnapi = &tp->napi[i];
8568
8569                 tnapi->last_tag = 0;
8570                 tnapi->last_irq_tag = 0;
8571                 tnapi->hw_status->status = 0;
8572                 tnapi->hw_status->status_tag = 0;
8573                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8574
8575                 tnapi->tx_prod = 0;
8576                 tnapi->tx_cons = 0;
8577                 if (tnapi->tx_ring)
8578                         memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
8579
8580                 tnapi->rx_rcb_ptr = 0;
8581                 if (tnapi->rx_rcb)
8582                         memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
8583
8584                 if (tnapi->prodring.rx_std &&
8585                     tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
8586                         tg3_free_rings(tp);
8587                         return -ENOMEM;
8588                 }
8589         }
8590
8591         return 0;
8592 }
8593
8594 static void tg3_mem_tx_release(struct tg3 *tp)
8595 {
8596         int i;
8597
8598         for (i = 0; i < tp->irq_max; i++) {
8599                 struct tg3_napi *tnapi = &tp->napi[i];
8600
8601                 if (tnapi->tx_ring) {
8602                         dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
8603                                 tnapi->tx_ring, tnapi->tx_desc_mapping);
8604                         tnapi->tx_ring = NULL;
8605                 }
8606
8607                 kfree(tnapi->tx_buffers);
8608                 tnapi->tx_buffers = NULL;
8609         }
8610 }
8611
8612 static int tg3_mem_tx_acquire(struct tg3 *tp)
8613 {
8614         int i;
8615         struct tg3_napi *tnapi = &tp->napi[0];
8616
8617         /* If multivector TSS is enabled, vector 0 does not handle
8618          * tx interrupts.  Don't allocate any resources for it.
8619          */
8620         if (tg3_flag(tp, ENABLE_TSS))
8621                 tnapi++;
8622
8623         for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
8624                 tnapi->tx_buffers = kzalloc(sizeof(struct tg3_tx_ring_info) *
8625                                             TG3_TX_RING_SIZE, GFP_KERNEL);
8626                 if (!tnapi->tx_buffers)
8627                         goto err_out;
8628
8629                 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
8630                                                     TG3_TX_RING_BYTES,
8631                                                     &tnapi->tx_desc_mapping,
8632                                                     GFP_KERNEL);
8633                 if (!tnapi->tx_ring)
8634                         goto err_out;
8635         }
8636
8637         return 0;
8638
8639 err_out:
8640         tg3_mem_tx_release(tp);
8641         return -ENOMEM;
8642 }
8643
8644 static void tg3_mem_rx_release(struct tg3 *tp)
8645 {
8646         int i;
8647
8648         for (i = 0; i < tp->irq_max; i++) {
8649                 struct tg3_napi *tnapi = &tp->napi[i];
8650
8651                 tg3_rx_prodring_fini(tp, &tnapi->prodring);
8652
8653                 if (!tnapi->rx_rcb)
8654                         continue;
8655
8656                 dma_free_coherent(&tp->pdev->dev,
8657                                   TG3_RX_RCB_RING_BYTES(tp),
8658                                   tnapi->rx_rcb,
8659                                   tnapi->rx_rcb_mapping);
8660                 tnapi->rx_rcb = NULL;
8661         }
8662 }
8663
8664 static int tg3_mem_rx_acquire(struct tg3 *tp)
8665 {
8666         unsigned int i, limit;
8667
8668         limit = tp->rxq_cnt;
8669
8670         /* If RSS is enabled, we need a (dummy) producer ring
8671          * set on vector zero.  This is the true hw prodring.
8672          */
8673         if (tg3_flag(tp, ENABLE_RSS))
8674                 limit++;
8675
8676         for (i = 0; i < limit; i++) {
8677                 struct tg3_napi *tnapi = &tp->napi[i];
8678
8679                 if (tg3_rx_prodring_init(tp, &tnapi->prodring))
8680                         goto err_out;
8681
8682                 /* If multivector RSS is enabled, vector 0
8683                  * does not handle rx or tx interrupts.
8684                  * Don't allocate any resources for it.
8685                  */
8686                 if (!i && tg3_flag(tp, ENABLE_RSS))
8687                         continue;
8688
8689                 tnapi->rx_rcb = dma_zalloc_coherent(&tp->pdev->dev,
8690                                                     TG3_RX_RCB_RING_BYTES(tp),
8691                                                     &tnapi->rx_rcb_mapping,
8692                                                     GFP_KERNEL);
8693                 if (!tnapi->rx_rcb)
8694                         goto err_out;
8695         }
8696
8697         return 0;
8698
8699 err_out:
8700         tg3_mem_rx_release(tp);
8701         return -ENOMEM;
8702 }
8703
8704 /*
8705  * Must not be invoked with interrupt sources disabled and
8706  * the hardware shutdown down.
8707  */
8708 static void tg3_free_consistent(struct tg3 *tp)
8709 {
8710         int i;
8711
8712         for (i = 0; i < tp->irq_cnt; i++) {
8713                 struct tg3_napi *tnapi = &tp->napi[i];
8714
8715                 if (tnapi->hw_status) {
8716                         dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8717                                           tnapi->hw_status,
8718                                           tnapi->status_mapping);
8719                         tnapi->hw_status = NULL;
8720                 }
8721         }
8722
8723         tg3_mem_rx_release(tp);
8724         tg3_mem_tx_release(tp);
8725
8726         /* Protect tg3_get_stats64() from reading freed tp->hw_stats. */
8727         tg3_full_lock(tp, 0);
8728         if (tp->hw_stats) {
8729                 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8730                                   tp->hw_stats, tp->stats_mapping);
8731                 tp->hw_stats = NULL;
8732         }
8733         tg3_full_unlock(tp);
8734 }
8735
8736 /*
8737  * Must not be invoked with interrupt sources disabled and
8738  * the hardware shutdown down.  Can sleep.
8739  */
8740 static int tg3_alloc_consistent(struct tg3 *tp)
8741 {
8742         int i;
8743
8744         tp->hw_stats = dma_zalloc_coherent(&tp->pdev->dev,
8745                                            sizeof(struct tg3_hw_stats),
8746                                            &tp->stats_mapping, GFP_KERNEL);
8747         if (!tp->hw_stats)
8748                 goto err_out;
8749
8750         for (i = 0; i < tp->irq_cnt; i++) {
8751                 struct tg3_napi *tnapi = &tp->napi[i];
8752                 struct tg3_hw_status *sblk;
8753
8754                 tnapi->hw_status = dma_zalloc_coherent(&tp->pdev->dev,
8755                                                        TG3_HW_STATUS_SIZE,
8756                                                        &tnapi->status_mapping,
8757                                                        GFP_KERNEL);
8758                 if (!tnapi->hw_status)
8759                         goto err_out;
8760
8761                 sblk = tnapi->hw_status;
8762
8763                 if (tg3_flag(tp, ENABLE_RSS)) {
8764                         u16 *prodptr = NULL;
8765
8766                         /*
8767                          * When RSS is enabled, the status block format changes
8768                          * slightly.  The "rx_jumbo_consumer", "reserved",
8769                          * and "rx_mini_consumer" members get mapped to the
8770                          * other three rx return ring producer indexes.
8771                          */
8772                         switch (i) {
8773                         case 1:
8774                                 prodptr = &sblk->idx[0].rx_producer;
8775                                 break;
8776                         case 2:
8777                                 prodptr = &sblk->rx_jumbo_consumer;
8778                                 break;
8779                         case 3:
8780                                 prodptr = &sblk->reserved;
8781                                 break;
8782                         case 4:
8783                                 prodptr = &sblk->rx_mini_consumer;
8784                                 break;
8785                         }
8786                         tnapi->rx_rcb_prod_idx = prodptr;
8787                 } else {
8788                         tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8789                 }
8790         }
8791
8792         if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8793                 goto err_out;
8794
8795         return 0;
8796
8797 err_out:
8798         tg3_free_consistent(tp);
8799         return -ENOMEM;
8800 }
8801
8802 #define MAX_WAIT_CNT 1000
8803
8804 /* To stop a block, clear the enable bit and poll till it
8805  * clears.  tp->lock is held.
8806  */
8807 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent)
8808 {
8809         unsigned int i;
8810         u32 val;
8811
8812         if (tg3_flag(tp, 5705_PLUS)) {
8813                 switch (ofs) {
8814                 case RCVLSC_MODE:
8815                 case DMAC_MODE:
8816                 case MBFREE_MODE:
8817                 case BUFMGR_MODE:
8818                 case MEMARB_MODE:
8819                         /* We can't enable/disable these bits of the
8820                          * 5705/5750, just say success.
8821                          */
8822                         return 0;
8823
8824                 default:
8825                         break;
8826                 }
8827         }
8828
8829         val = tr32(ofs);
8830         val &= ~enable_bit;
8831         tw32_f(ofs, val);
8832
8833         for (i = 0; i < MAX_WAIT_CNT; i++) {
8834                 if (pci_channel_offline(tp->pdev)) {
8835                         dev_err(&tp->pdev->dev,
8836                                 "tg3_stop_block device offline, "
8837                                 "ofs=%lx enable_bit=%x\n",
8838                                 ofs, enable_bit);
8839                         return -ENODEV;
8840                 }
8841
8842                 udelay(100);
8843                 val = tr32(ofs);
8844                 if ((val & enable_bit) == 0)
8845                         break;
8846         }
8847
8848         if (i == MAX_WAIT_CNT && !silent) {
8849                 dev_err(&tp->pdev->dev,
8850                         "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8851                         ofs, enable_bit);
8852                 return -ENODEV;
8853         }
8854
8855         return 0;
8856 }
8857
8858 /* tp->lock is held. */
8859 static int tg3_abort_hw(struct tg3 *tp, bool silent)
8860 {
8861         int i, err;
8862
8863         tg3_disable_ints(tp);
8864
8865         if (pci_channel_offline(tp->pdev)) {
8866                 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE);
8867                 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8868                 err = -ENODEV;
8869                 goto err_no_dev;
8870         }
8871
8872         tp->rx_mode &= ~RX_MODE_ENABLE;
8873         tw32_f(MAC_RX_MODE, tp->rx_mode);
8874         udelay(10);
8875
8876         err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8877         err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8878         err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8879         err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8880         err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8881         err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8882
8883         err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8884         err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8885         err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8886         err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8887         err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8888         err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8889         err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8890
8891         tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8892         tw32_f(MAC_MODE, tp->mac_mode);
8893         udelay(40);
8894
8895         tp->tx_mode &= ~TX_MODE_ENABLE;
8896         tw32_f(MAC_TX_MODE, tp->tx_mode);
8897
8898         for (i = 0; i < MAX_WAIT_CNT; i++) {
8899                 udelay(100);
8900                 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8901                         break;
8902         }
8903         if (i >= MAX_WAIT_CNT) {
8904                 dev_err(&tp->pdev->dev,
8905                         "%s timed out, TX_MODE_ENABLE will not clear "
8906                         "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8907                 err |= -ENODEV;
8908         }
8909
8910         err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8911         err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8912         err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8913
8914         tw32(FTQ_RESET, 0xffffffff);
8915         tw32(FTQ_RESET, 0x00000000);
8916
8917         err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8918         err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8919
8920 err_no_dev:
8921         for (i = 0; i < tp->irq_cnt; i++) {
8922                 struct tg3_napi *tnapi = &tp->napi[i];
8923                 if (tnapi->hw_status)
8924                         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8925         }
8926
8927         return err;
8928 }
8929
8930 /* Save PCI command register before chip reset */
8931 static void tg3_save_pci_state(struct tg3 *tp)
8932 {
8933         pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8934 }
8935
8936 /* Restore PCI state after chip reset */
8937 static void tg3_restore_pci_state(struct tg3 *tp)
8938 {
8939         u32 val;
8940
8941         /* Re-enable indirect register accesses. */
8942         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8943                                tp->misc_host_ctrl);
8944
8945         /* Set MAX PCI retry to zero. */
8946         val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8947         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
8948             tg3_flag(tp, PCIX_MODE))
8949                 val |= PCISTATE_RETRY_SAME_DMA;
8950         /* Allow reads and writes to the APE register and memory space. */
8951         if (tg3_flag(tp, ENABLE_APE))
8952                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8953                        PCISTATE_ALLOW_APE_SHMEM_WR |
8954                        PCISTATE_ALLOW_APE_PSPACE_WR;
8955         pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8956
8957         pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8958
8959         if (!tg3_flag(tp, PCI_EXPRESS)) {
8960                 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8961                                       tp->pci_cacheline_sz);
8962                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8963                                       tp->pci_lat_timer);
8964         }
8965
8966         /* Make sure PCI-X relaxed ordering bit is clear. */
8967         if (tg3_flag(tp, PCIX_MODE)) {
8968                 u16 pcix_cmd;
8969
8970                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8971                                      &pcix_cmd);
8972                 pcix_cmd &= ~PCI_X_CMD_ERO;
8973                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8974                                       pcix_cmd);
8975         }
8976
8977         if (tg3_flag(tp, 5780_CLASS)) {
8978
8979                 /* Chip reset on 5780 will reset MSI enable bit,
8980                  * so need to restore it.
8981                  */
8982                 if (tg3_flag(tp, USING_MSI)) {
8983                         u16 ctrl;
8984
8985                         pci_read_config_word(tp->pdev,
8986                                              tp->msi_cap + PCI_MSI_FLAGS,
8987                                              &ctrl);
8988                         pci_write_config_word(tp->pdev,
8989                                               tp->msi_cap + PCI_MSI_FLAGS,
8990                                               ctrl | PCI_MSI_FLAGS_ENABLE);
8991                         val = tr32(MSGINT_MODE);
8992                         tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
8993                 }
8994         }
8995 }
8996
8997 static void tg3_override_clk(struct tg3 *tp)
8998 {
8999         u32 val;
9000
9001         switch (tg3_asic_rev(tp)) {
9002         case ASIC_REV_5717:
9003                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9004                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9005                      TG3_CPMU_MAC_ORIDE_ENABLE);
9006                 break;
9007
9008         case ASIC_REV_5719:
9009         case ASIC_REV_5720:
9010                 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9011                 break;
9012
9013         default:
9014                 return;
9015         }
9016 }
9017
9018 static void tg3_restore_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,
9026                      val & ~TG3_CPMU_MAC_ORIDE_ENABLE);
9027                 break;
9028
9029         case ASIC_REV_5719:
9030         case ASIC_REV_5720:
9031                 val = tr32(TG3_CPMU_CLCK_ORIDE);
9032                 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9033                 break;
9034
9035         default:
9036                 return;
9037         }
9038 }
9039
9040 /* tp->lock is held. */
9041 static int tg3_chip_reset(struct tg3 *tp)
9042         __releases(tp->lock)
9043         __acquires(tp->lock)
9044 {
9045         u32 val;
9046         void (*write_op)(struct tg3 *, u32, u32);
9047         int i, err;
9048
9049         if (!pci_device_is_present(tp->pdev))
9050                 return -ENODEV;
9051
9052         tg3_nvram_lock(tp);
9053
9054         tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
9055
9056         /* No matching tg3_nvram_unlock() after this because
9057          * chip reset below will undo the nvram lock.
9058          */
9059         tp->nvram_lock_cnt = 0;
9060
9061         /* GRC_MISC_CFG core clock reset will clear the memory
9062          * enable bit in PCI register 4 and the MSI enable bit
9063          * on some chips, so we save relevant registers here.
9064          */
9065         tg3_save_pci_state(tp);
9066
9067         if (tg3_asic_rev(tp) == ASIC_REV_5752 ||
9068             tg3_flag(tp, 5755_PLUS))
9069                 tw32(GRC_FASTBOOT_PC, 0);
9070
9071         /*
9072          * We must avoid the readl() that normally takes place.
9073          * It locks machines, causes machine checks, and other
9074          * fun things.  So, temporarily disable the 5701
9075          * hardware workaround, while we do the reset.
9076          */
9077         write_op = tp->write32;
9078         if (write_op == tg3_write_flush_reg32)
9079                 tp->write32 = tg3_write32;
9080
9081         /* Prevent the irq handler from reading or writing PCI registers
9082          * during chip reset when the memory enable bit in the PCI command
9083          * register may be cleared.  The chip does not generate interrupt
9084          * at this time, but the irq handler may still be called due to irq
9085          * sharing or irqpoll.
9086          */
9087         tg3_flag_set(tp, CHIP_RESETTING);
9088         for (i = 0; i < tp->irq_cnt; i++) {
9089                 struct tg3_napi *tnapi = &tp->napi[i];
9090                 if (tnapi->hw_status) {
9091                         tnapi->hw_status->status = 0;
9092                         tnapi->hw_status->status_tag = 0;
9093                 }
9094                 tnapi->last_tag = 0;
9095                 tnapi->last_irq_tag = 0;
9096         }
9097         smp_mb();
9098
9099         tg3_full_unlock(tp);
9100
9101         for (i = 0; i < tp->irq_cnt; i++)
9102                 synchronize_irq(tp->napi[i].irq_vec);
9103
9104         tg3_full_lock(tp, 0);
9105
9106         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9107                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9108                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9109         }
9110
9111         /* do the reset */
9112         val = GRC_MISC_CFG_CORECLK_RESET;
9113
9114         if (tg3_flag(tp, PCI_EXPRESS)) {
9115                 /* Force PCIe 1.0a mode */
9116                 if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
9117                     !tg3_flag(tp, 57765_PLUS) &&
9118                     tr32(TG3_PCIE_PHY_TSTCTL) ==
9119                     (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
9120                         tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
9121
9122                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) {
9123                         tw32(GRC_MISC_CFG, (1 << 29));
9124                         val |= (1 << 29);
9125                 }
9126         }
9127
9128         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
9129                 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
9130                 tw32(GRC_VCPU_EXT_CTRL,
9131                      tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
9132         }
9133
9134         /* Set the clock to the highest frequency to avoid timeouts. With link
9135          * aware mode, the clock speed could be slow and bootcode does not
9136          * complete within the expected time. Override the clock to allow the
9137          * bootcode to finish sooner and then restore it.
9138          */
9139         tg3_override_clk(tp);
9140
9141         /* Manage gphy power for all CPMU absent PCIe devices. */
9142         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
9143                 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
9144
9145         tw32(GRC_MISC_CFG, val);
9146
9147         /* restore 5701 hardware bug workaround write method */
9148         tp->write32 = write_op;
9149
9150         /* Unfortunately, we have to delay before the PCI read back.
9151          * Some 575X chips even will not respond to a PCI cfg access
9152          * when the reset command is given to the chip.
9153          *
9154          * How do these hardware designers expect things to work
9155          * properly if the PCI write is posted for a long period
9156          * of time?  It is always necessary to have some method by
9157          * which a register read back can occur to push the write
9158          * out which does the reset.
9159          *
9160          * For most tg3 variants the trick below was working.
9161          * Ho hum...
9162          */
9163         udelay(120);
9164
9165         /* Flush PCI posted writes.  The normal MMIO registers
9166          * are inaccessible at this time so this is the only
9167          * way to make this reliably (actually, this is no longer
9168          * the case, see above).  I tried to use indirect
9169          * register read/write but this upset some 5701 variants.
9170          */
9171         pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
9172
9173         udelay(120);
9174
9175         if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
9176                 u16 val16;
9177
9178                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) {
9179                         int j;
9180                         u32 cfg_val;
9181
9182                         /* Wait for link training to complete.  */
9183                         for (j = 0; j < 5000; j++)
9184                                 udelay(100);
9185
9186                         pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
9187                         pci_write_config_dword(tp->pdev, 0xc4,
9188                                                cfg_val | (1 << 15));
9189                 }
9190
9191                 /* Clear the "no snoop" and "relaxed ordering" bits. */
9192                 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
9193                 /*
9194                  * Older PCIe devices only support the 128 byte
9195                  * MPS setting.  Enforce the restriction.
9196                  */
9197                 if (!tg3_flag(tp, CPMU_PRESENT))
9198                         val16 |= PCI_EXP_DEVCTL_PAYLOAD;
9199                 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
9200
9201                 /* Clear error status */
9202                 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
9203                                       PCI_EXP_DEVSTA_CED |
9204                                       PCI_EXP_DEVSTA_NFED |
9205                                       PCI_EXP_DEVSTA_FED |
9206                                       PCI_EXP_DEVSTA_URD);
9207         }
9208
9209         tg3_restore_pci_state(tp);
9210
9211         tg3_flag_clear(tp, CHIP_RESETTING);
9212         tg3_flag_clear(tp, ERROR_PROCESSED);
9213
9214         val = 0;
9215         if (tg3_flag(tp, 5780_CLASS))
9216                 val = tr32(MEMARB_MODE);
9217         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9218
9219         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) {
9220                 tg3_stop_fw(tp);
9221                 tw32(0x5000, 0x400);
9222         }
9223
9224         if (tg3_flag(tp, IS_SSB_CORE)) {
9225                 /*
9226                  * BCM4785: In order to avoid repercussions from using
9227                  * potentially defective internal ROM, stop the Rx RISC CPU,
9228                  * which is not required.
9229                  */
9230                 tg3_stop_fw(tp);
9231                 tg3_halt_cpu(tp, RX_CPU_BASE);
9232         }
9233
9234         err = tg3_poll_fw(tp);
9235         if (err)
9236                 return err;
9237
9238         tw32(GRC_MODE, tp->grc_mode);
9239
9240         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
9241                 val = tr32(0xc4);
9242
9243                 tw32(0xc4, val | (1 << 15));
9244         }
9245
9246         if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
9247             tg3_asic_rev(tp) == ASIC_REV_5705) {
9248                 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
9249                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0)
9250                         tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
9251                 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9252         }
9253
9254         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9255                 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
9256                 val = tp->mac_mode;
9257         } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9258                 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
9259                 val = tp->mac_mode;
9260         } else
9261                 val = 0;
9262
9263         tw32_f(MAC_MODE, val);
9264         udelay(40);
9265
9266         tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
9267
9268         tg3_mdio_start(tp);
9269
9270         if (tg3_flag(tp, PCI_EXPRESS) &&
9271             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
9272             tg3_asic_rev(tp) != ASIC_REV_5785 &&
9273             !tg3_flag(tp, 57765_PLUS)) {
9274                 val = tr32(0x7c00);
9275
9276                 tw32(0x7c00, val | (1 << 25));
9277         }
9278
9279         tg3_restore_clk(tp);
9280
9281         /* Reprobe ASF enable state.  */
9282         tg3_flag_clear(tp, ENABLE_ASF);
9283         tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
9284                            TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
9285
9286         tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
9287         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9288         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9289                 u32 nic_cfg;
9290
9291                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9292                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9293                         tg3_flag_set(tp, ENABLE_ASF);
9294                         tp->last_event_jiffies = jiffies;
9295                         if (tg3_flag(tp, 5750_PLUS))
9296                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
9297
9298                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg);
9299                         if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK)
9300                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
9301                         if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID)
9302                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
9303                 }
9304         }
9305
9306         return 0;
9307 }
9308
9309 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
9310 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
9311 static void __tg3_set_rx_mode(struct net_device *);
9312
9313 /* tp->lock is held. */
9314 static int tg3_halt(struct tg3 *tp, int kind, bool silent)
9315 {
9316         int err;
9317
9318         tg3_stop_fw(tp);
9319
9320         tg3_write_sig_pre_reset(tp, kind);
9321
9322         tg3_abort_hw(tp, silent);
9323         err = tg3_chip_reset(tp);
9324
9325         __tg3_set_mac_addr(tp, false);
9326
9327         tg3_write_sig_legacy(tp, kind);
9328         tg3_write_sig_post_reset(tp, kind);
9329
9330         if (tp->hw_stats) {
9331                 /* Save the stats across chip resets... */
9332                 tg3_get_nstats(tp, &tp->net_stats_prev);
9333                 tg3_get_estats(tp, &tp->estats_prev);
9334
9335                 /* And make sure the next sample is new data */
9336                 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
9337         }
9338
9339         return err;
9340 }
9341
9342 static int tg3_set_mac_addr(struct net_device *dev, void *p)
9343 {
9344         struct tg3 *tp = netdev_priv(dev);
9345         struct sockaddr *addr = p;
9346         int err = 0;
9347         bool skip_mac_1 = false;
9348
9349         if (!is_valid_ether_addr(addr->sa_data))
9350                 return -EADDRNOTAVAIL;
9351
9352         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
9353
9354         if (!netif_running(dev))
9355                 return 0;
9356
9357         if (tg3_flag(tp, ENABLE_ASF)) {
9358                 u32 addr0_high, addr0_low, addr1_high, addr1_low;
9359
9360                 addr0_high = tr32(MAC_ADDR_0_HIGH);
9361                 addr0_low = tr32(MAC_ADDR_0_LOW);
9362                 addr1_high = tr32(MAC_ADDR_1_HIGH);
9363                 addr1_low = tr32(MAC_ADDR_1_LOW);
9364
9365                 /* Skip MAC addr 1 if ASF is using it. */
9366                 if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
9367                     !(addr1_high == 0 && addr1_low == 0))
9368                         skip_mac_1 = true;
9369         }
9370         spin_lock_bh(&tp->lock);
9371         __tg3_set_mac_addr(tp, skip_mac_1);
9372         __tg3_set_rx_mode(dev);
9373         spin_unlock_bh(&tp->lock);
9374
9375         return err;
9376 }
9377
9378 /* tp->lock is held. */
9379 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
9380                            dma_addr_t mapping, u32 maxlen_flags,
9381                            u32 nic_addr)
9382 {
9383         tg3_write_mem(tp,
9384                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
9385                       ((u64) mapping >> 32));
9386         tg3_write_mem(tp,
9387                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
9388                       ((u64) mapping & 0xffffffff));
9389         tg3_write_mem(tp,
9390                       (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
9391                        maxlen_flags);
9392
9393         if (!tg3_flag(tp, 5705_PLUS))
9394                 tg3_write_mem(tp,
9395                               (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
9396                               nic_addr);
9397 }
9398
9399
9400 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9401 {
9402         int i = 0;
9403
9404         if (!tg3_flag(tp, ENABLE_TSS)) {
9405                 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
9406                 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
9407                 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
9408         } else {
9409                 tw32(HOSTCC_TXCOL_TICKS, 0);
9410                 tw32(HOSTCC_TXMAX_FRAMES, 0);
9411                 tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
9412
9413                 for (; i < tp->txq_cnt; i++) {
9414                         u32 reg;
9415
9416                         reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
9417                         tw32(reg, ec->tx_coalesce_usecs);
9418                         reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
9419                         tw32(reg, ec->tx_max_coalesced_frames);
9420                         reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
9421                         tw32(reg, ec->tx_max_coalesced_frames_irq);
9422                 }
9423         }
9424
9425         for (; i < tp->irq_max - 1; i++) {
9426                 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
9427                 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
9428                 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9429         }
9430 }
9431
9432 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9433 {
9434         int i = 0;
9435         u32 limit = tp->rxq_cnt;
9436
9437         if (!tg3_flag(tp, ENABLE_RSS)) {
9438                 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
9439                 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
9440                 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
9441                 limit--;
9442         } else {
9443                 tw32(HOSTCC_RXCOL_TICKS, 0);
9444                 tw32(HOSTCC_RXMAX_FRAMES, 0);
9445                 tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
9446         }
9447
9448         for (; i < limit; i++) {
9449                 u32 reg;
9450
9451                 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
9452                 tw32(reg, ec->rx_coalesce_usecs);
9453                 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
9454                 tw32(reg, ec->rx_max_coalesced_frames);
9455                 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
9456                 tw32(reg, ec->rx_max_coalesced_frames_irq);
9457         }
9458
9459         for (; i < tp->irq_max - 1; i++) {
9460                 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
9461                 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
9462                 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9463         }
9464 }
9465
9466 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
9467 {
9468         tg3_coal_tx_init(tp, ec);
9469         tg3_coal_rx_init(tp, ec);
9470
9471         if (!tg3_flag(tp, 5705_PLUS)) {
9472                 u32 val = ec->stats_block_coalesce_usecs;
9473
9474                 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
9475                 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
9476
9477                 if (!tp->link_up)
9478                         val = 0;
9479
9480                 tw32(HOSTCC_STAT_COAL_TICKS, val);
9481         }
9482 }
9483
9484 /* tp->lock is held. */
9485 static void tg3_tx_rcbs_disable(struct tg3 *tp)
9486 {
9487         u32 txrcb, limit;
9488
9489         /* Disable all transmit rings but the first. */
9490         if (!tg3_flag(tp, 5705_PLUS))
9491                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
9492         else if (tg3_flag(tp, 5717_PLUS))
9493                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
9494         else if (tg3_flag(tp, 57765_CLASS) ||
9495                  tg3_asic_rev(tp) == ASIC_REV_5762)
9496                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
9497         else
9498                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9499
9500         for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9501              txrcb < limit; txrcb += TG3_BDINFO_SIZE)
9502                 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
9503                               BDINFO_FLAGS_DISABLED);
9504 }
9505
9506 /* tp->lock is held. */
9507 static void tg3_tx_rcbs_init(struct tg3 *tp)
9508 {
9509         int i = 0;
9510         u32 txrcb = NIC_SRAM_SEND_RCB;
9511
9512         if (tg3_flag(tp, ENABLE_TSS))
9513                 i++;
9514
9515         for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) {
9516                 struct tg3_napi *tnapi = &tp->napi[i];
9517
9518                 if (!tnapi->tx_ring)
9519                         continue;
9520
9521                 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
9522                                (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
9523                                NIC_SRAM_TX_BUFFER_DESC);
9524         }
9525 }
9526
9527 /* tp->lock is held. */
9528 static void tg3_rx_ret_rcbs_disable(struct tg3 *tp)
9529 {
9530         u32 rxrcb, limit;
9531
9532         /* Disable all receive return rings but the first. */
9533         if (tg3_flag(tp, 5717_PLUS))
9534                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
9535         else if (!tg3_flag(tp, 5705_PLUS))
9536                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
9537         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9538                  tg3_asic_rev(tp) == ASIC_REV_5762 ||
9539                  tg3_flag(tp, 57765_CLASS))
9540                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
9541         else
9542                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9543
9544         for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9545              rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
9546                 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
9547                               BDINFO_FLAGS_DISABLED);
9548 }
9549
9550 /* tp->lock is held. */
9551 static void tg3_rx_ret_rcbs_init(struct tg3 *tp)
9552 {
9553         int i = 0;
9554         u32 rxrcb = NIC_SRAM_RCV_RET_RCB;
9555
9556         if (tg3_flag(tp, ENABLE_RSS))
9557                 i++;
9558
9559         for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) {
9560                 struct tg3_napi *tnapi = &tp->napi[i];
9561
9562                 if (!tnapi->rx_rcb)
9563                         continue;
9564
9565                 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
9566                                (tp->rx_ret_ring_mask + 1) <<
9567                                 BDINFO_FLAGS_MAXLEN_SHIFT, 0);
9568         }
9569 }
9570
9571 /* tp->lock is held. */
9572 static void tg3_rings_reset(struct tg3 *tp)
9573 {
9574         int i;
9575         u32 stblk;
9576         struct tg3_napi *tnapi = &tp->napi[0];
9577
9578         tg3_tx_rcbs_disable(tp);
9579
9580         tg3_rx_ret_rcbs_disable(tp);
9581
9582         /* Disable interrupts */
9583         tw32_mailbox_f(tp->napi[0].int_mbox, 1);
9584         tp->napi[0].chk_msi_cnt = 0;
9585         tp->napi[0].last_rx_cons = 0;
9586         tp->napi[0].last_tx_cons = 0;
9587
9588         /* Zero mailbox registers. */
9589         if (tg3_flag(tp, SUPPORT_MSIX)) {
9590                 for (i = 1; i < tp->irq_max; i++) {
9591                         tp->napi[i].tx_prod = 0;
9592                         tp->napi[i].tx_cons = 0;
9593                         if (tg3_flag(tp, ENABLE_TSS))
9594                                 tw32_mailbox(tp->napi[i].prodmbox, 0);
9595                         tw32_rx_mbox(tp->napi[i].consmbox, 0);
9596                         tw32_mailbox_f(tp->napi[i].int_mbox, 1);
9597                         tp->napi[i].chk_msi_cnt = 0;
9598                         tp->napi[i].last_rx_cons = 0;
9599                         tp->napi[i].last_tx_cons = 0;
9600                 }
9601                 if (!tg3_flag(tp, ENABLE_TSS))
9602                         tw32_mailbox(tp->napi[0].prodmbox, 0);
9603         } else {
9604                 tp->napi[0].tx_prod = 0;
9605                 tp->napi[0].tx_cons = 0;
9606                 tw32_mailbox(tp->napi[0].prodmbox, 0);
9607                 tw32_rx_mbox(tp->napi[0].consmbox, 0);
9608         }
9609
9610         /* Make sure the NIC-based send BD rings are disabled. */
9611         if (!tg3_flag(tp, 5705_PLUS)) {
9612                 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
9613                 for (i = 0; i < 16; i++)
9614                         tw32_tx_mbox(mbox + i * 8, 0);
9615         }
9616
9617         /* Clear status block in ram. */
9618         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9619
9620         /* Set status block DMA address */
9621         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9622              ((u64) tnapi->status_mapping >> 32));
9623         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9624              ((u64) tnapi->status_mapping & 0xffffffff));
9625
9626         stblk = HOSTCC_STATBLCK_RING1;
9627
9628         for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
9629                 u64 mapping = (u64)tnapi->status_mapping;
9630                 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
9631                 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
9632                 stblk += 8;
9633
9634                 /* Clear status block in ram. */
9635                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9636         }
9637
9638         tg3_tx_rcbs_init(tp);
9639         tg3_rx_ret_rcbs_init(tp);
9640 }
9641
9642 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
9643 {
9644         u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
9645
9646         if (!tg3_flag(tp, 5750_PLUS) ||
9647             tg3_flag(tp, 5780_CLASS) ||
9648             tg3_asic_rev(tp) == ASIC_REV_5750 ||
9649             tg3_asic_rev(tp) == ASIC_REV_5752 ||
9650             tg3_flag(tp, 57765_PLUS))
9651                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
9652         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9653                  tg3_asic_rev(tp) == ASIC_REV_5787)
9654                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
9655         else
9656                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
9657
9658         nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
9659         host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
9660
9661         val = min(nic_rep_thresh, host_rep_thresh);
9662         tw32(RCVBDI_STD_THRESH, val);
9663
9664         if (tg3_flag(tp, 57765_PLUS))
9665                 tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
9666
9667         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
9668                 return;
9669
9670         bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
9671
9672         host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
9673
9674         val = min(bdcache_maxcnt / 2, host_rep_thresh);
9675         tw32(RCVBDI_JUMBO_THRESH, val);
9676
9677         if (tg3_flag(tp, 57765_PLUS))
9678                 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
9679 }
9680
9681 static inline u32 calc_crc(unsigned char *buf, int len)
9682 {
9683         u32 reg;
9684         u32 tmp;
9685         int j, k;
9686
9687         reg = 0xffffffff;
9688
9689         for (j = 0; j < len; j++) {
9690                 reg ^= buf[j];
9691
9692                 for (k = 0; k < 8; k++) {
9693                         tmp = reg & 0x01;
9694
9695                         reg >>= 1;
9696
9697                         if (tmp)
9698                                 reg ^= 0xedb88320;
9699                 }
9700         }
9701
9702         return ~reg;
9703 }
9704
9705 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
9706 {
9707         /* accept or reject all multicast frames */
9708         tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
9709         tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
9710         tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
9711         tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
9712 }
9713
9714 static void __tg3_set_rx_mode(struct net_device *dev)
9715 {
9716         struct tg3 *tp = netdev_priv(dev);
9717         u32 rx_mode;
9718
9719         rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
9720                                   RX_MODE_KEEP_VLAN_TAG);
9721
9722 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
9723         /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
9724          * flag clear.
9725          */
9726         if (!tg3_flag(tp, ENABLE_ASF))
9727                 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
9728 #endif
9729
9730         if (dev->flags & IFF_PROMISC) {
9731                 /* Promiscuous mode. */
9732                 rx_mode |= RX_MODE_PROMISC;
9733         } else if (dev->flags & IFF_ALLMULTI) {
9734                 /* Accept all multicast. */
9735                 tg3_set_multi(tp, 1);
9736         } else if (netdev_mc_empty(dev)) {
9737                 /* Reject all multicast. */
9738                 tg3_set_multi(tp, 0);
9739         } else {
9740                 /* Accept one or more multicast(s). */
9741                 struct netdev_hw_addr *ha;
9742                 u32 mc_filter[4] = { 0, };
9743                 u32 regidx;
9744                 u32 bit;
9745                 u32 crc;
9746
9747                 netdev_for_each_mc_addr(ha, dev) {
9748                         crc = calc_crc(ha->addr, ETH_ALEN);
9749                         bit = ~crc & 0x7f;
9750                         regidx = (bit & 0x60) >> 5;
9751                         bit &= 0x1f;
9752                         mc_filter[regidx] |= (1 << bit);
9753                 }
9754
9755                 tw32(MAC_HASH_REG_0, mc_filter[0]);
9756                 tw32(MAC_HASH_REG_1, mc_filter[1]);
9757                 tw32(MAC_HASH_REG_2, mc_filter[2]);
9758                 tw32(MAC_HASH_REG_3, mc_filter[3]);
9759         }
9760
9761         if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) {
9762                 rx_mode |= RX_MODE_PROMISC;
9763         } else if (!(dev->flags & IFF_PROMISC)) {
9764                 /* Add all entries into to the mac addr filter list */
9765                 int i = 0;
9766                 struct netdev_hw_addr *ha;
9767
9768                 netdev_for_each_uc_addr(ha, dev) {
9769                         __tg3_set_one_mac_addr(tp, ha->addr,
9770                                                i + TG3_UCAST_ADDR_IDX(tp));
9771                         i++;
9772                 }
9773         }
9774
9775         if (rx_mode != tp->rx_mode) {
9776                 tp->rx_mode = rx_mode;
9777                 tw32_f(MAC_RX_MODE, rx_mode);
9778                 udelay(10);
9779         }
9780 }
9781
9782 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
9783 {
9784         int i;
9785
9786         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
9787                 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
9788 }
9789
9790 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
9791 {
9792         int i;
9793
9794         if (!tg3_flag(tp, SUPPORT_MSIX))
9795                 return;
9796
9797         if (tp->rxq_cnt == 1) {
9798                 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
9799                 return;
9800         }
9801
9802         /* Validate table against current IRQ count */
9803         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
9804                 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
9805                         break;
9806         }
9807
9808         if (i != TG3_RSS_INDIR_TBL_SIZE)
9809                 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
9810 }
9811
9812 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
9813 {
9814         int i = 0;
9815         u32 reg = MAC_RSS_INDIR_TBL_0;
9816
9817         while (i < TG3_RSS_INDIR_TBL_SIZE) {
9818                 u32 val = tp->rss_ind_tbl[i];
9819                 i++;
9820                 for (; i % 8; i++) {
9821                         val <<= 4;
9822                         val |= tp->rss_ind_tbl[i];
9823                 }
9824                 tw32(reg, val);
9825                 reg += 4;
9826         }
9827 }
9828
9829 static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp)
9830 {
9831         if (tg3_asic_rev(tp) == ASIC_REV_5719)
9832                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719;
9833         else
9834                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720;
9835 }
9836
9837 /* tp->lock is held. */
9838 static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
9839 {
9840         u32 val, rdmac_mode;
9841         int i, err, limit;
9842         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
9843
9844         tg3_disable_ints(tp);
9845
9846         tg3_stop_fw(tp);
9847
9848         tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
9849
9850         if (tg3_flag(tp, INIT_COMPLETE))
9851                 tg3_abort_hw(tp, 1);
9852
9853         if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
9854             !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) {
9855                 tg3_phy_pull_config(tp);
9856                 tg3_eee_pull_config(tp, NULL);
9857                 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
9858         }
9859
9860         /* Enable MAC control of LPI */
9861         if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
9862                 tg3_setup_eee(tp);
9863
9864         if (reset_phy)
9865                 tg3_phy_reset(tp);
9866
9867         err = tg3_chip_reset(tp);
9868         if (err)
9869                 return err;
9870
9871         tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9872
9873         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
9874                 val = tr32(TG3_CPMU_CTRL);
9875                 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9876                 tw32(TG3_CPMU_CTRL, val);
9877
9878                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9879                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9880                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9881                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9882
9883                 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9884                 val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9885                 val |= CPMU_LNK_AWARE_MACCLK_6_25;
9886                 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9887
9888                 val = tr32(TG3_CPMU_HST_ACC);
9889                 val &= ~CPMU_HST_ACC_MACCLK_MASK;
9890                 val |= CPMU_HST_ACC_MACCLK_6_25;
9891                 tw32(TG3_CPMU_HST_ACC, val);
9892         }
9893
9894         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9895                 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9896                 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9897                        PCIE_PWR_MGMT_L1_THRESH_4MS;
9898                 tw32(PCIE_PWR_MGMT_THRESH, val);
9899
9900                 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9901                 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9902
9903                 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9904
9905                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9906                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9907         }
9908
9909         if (tg3_flag(tp, L1PLLPD_EN)) {
9910                 u32 grc_mode = tr32(GRC_MODE);
9911
9912                 /* Access the lower 1K of PL PCIE block registers. */
9913                 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9914                 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9915
9916                 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9917                 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9918                      val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9919
9920                 tw32(GRC_MODE, grc_mode);
9921         }
9922
9923         if (tg3_flag(tp, 57765_CLASS)) {
9924                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
9925                         u32 grc_mode = tr32(GRC_MODE);
9926
9927                         /* Access the lower 1K of PL PCIE block registers. */
9928                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9929                         tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9930
9931                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9932                                    TG3_PCIE_PL_LO_PHYCTL5);
9933                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9934                              val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9935
9936                         tw32(GRC_MODE, grc_mode);
9937                 }
9938
9939                 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) {
9940                         u32 grc_mode;
9941
9942                         /* Fix transmit hangs */
9943                         val = tr32(TG3_CPMU_PADRNG_CTL);
9944                         val |= TG3_CPMU_PADRNG_CTL_RDIV2;
9945                         tw32(TG3_CPMU_PADRNG_CTL, val);
9946
9947                         grc_mode = tr32(GRC_MODE);
9948
9949                         /* Access the lower 1K of DL PCIE block registers. */
9950                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9951                         tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9952
9953                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9954                                    TG3_PCIE_DL_LO_FTSMAX);
9955                         val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
9956                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
9957                              val | TG3_PCIE_DL_LO_FTSMAX_VAL);
9958
9959                         tw32(GRC_MODE, grc_mode);
9960                 }
9961
9962                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9963                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9964                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9965                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9966         }
9967
9968         /* This works around an issue with Athlon chipsets on
9969          * B3 tigon3 silicon.  This bit has no effect on any
9970          * other revision.  But do not set this on PCI Express
9971          * chips and don't even touch the clocks if the CPMU is present.
9972          */
9973         if (!tg3_flag(tp, CPMU_PRESENT)) {
9974                 if (!tg3_flag(tp, PCI_EXPRESS))
9975                         tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
9976                 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9977         }
9978
9979         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
9980             tg3_flag(tp, PCIX_MODE)) {
9981                 val = tr32(TG3PCI_PCISTATE);
9982                 val |= PCISTATE_RETRY_SAME_DMA;
9983                 tw32(TG3PCI_PCISTATE, val);
9984         }
9985
9986         if (tg3_flag(tp, ENABLE_APE)) {
9987                 /* Allow reads and writes to the
9988                  * APE register and memory space.
9989                  */
9990                 val = tr32(TG3PCI_PCISTATE);
9991                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
9992                        PCISTATE_ALLOW_APE_SHMEM_WR |
9993                        PCISTATE_ALLOW_APE_PSPACE_WR;
9994                 tw32(TG3PCI_PCISTATE, val);
9995         }
9996
9997         if (tg3_chip_rev(tp) == CHIPREV_5704_BX) {
9998                 /* Enable some hw fixes.  */
9999                 val = tr32(TG3PCI_MSI_DATA);
10000                 val |= (1 << 26) | (1 << 28) | (1 << 29);
10001                 tw32(TG3PCI_MSI_DATA, val);
10002         }
10003
10004         /* Descriptor ring init may make accesses to the
10005          * NIC SRAM area to setup the TX descriptors, so we
10006          * can only do this after the hardware has been
10007          * successfully reset.
10008          */
10009         err = tg3_init_rings(tp);
10010         if (err)
10011                 return err;
10012
10013         if (tg3_flag(tp, 57765_PLUS)) {
10014                 val = tr32(TG3PCI_DMA_RW_CTRL) &
10015                       ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
10016                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
10017                         val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
10018                 if (!tg3_flag(tp, 57765_CLASS) &&
10019                     tg3_asic_rev(tp) != ASIC_REV_5717 &&
10020                     tg3_asic_rev(tp) != ASIC_REV_5762)
10021                         val |= DMA_RWCTRL_TAGGED_STAT_WA;
10022                 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
10023         } else if (tg3_asic_rev(tp) != ASIC_REV_5784 &&
10024                    tg3_asic_rev(tp) != ASIC_REV_5761) {
10025                 /* This value is determined during the probe time DMA
10026                  * engine test, tg3_test_dma.
10027                  */
10028                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10029         }
10030
10031         tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
10032                           GRC_MODE_4X_NIC_SEND_RINGS |
10033                           GRC_MODE_NO_TX_PHDR_CSUM |
10034                           GRC_MODE_NO_RX_PHDR_CSUM);
10035         tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
10036
10037         /* Pseudo-header checksum is done by hardware logic and not
10038          * the offload processers, so make the chip do the pseudo-
10039          * header checksums on receive.  For transmit it is more
10040          * convenient to do the pseudo-header checksum in software
10041          * as Linux does that on transmit for us in all cases.
10042          */
10043         tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
10044
10045         val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
10046         if (tp->rxptpctl)
10047                 tw32(TG3_RX_PTP_CTL,
10048                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
10049
10050         if (tg3_flag(tp, PTP_CAPABLE))
10051                 val |= GRC_MODE_TIME_SYNC_ENABLE;
10052
10053         tw32(GRC_MODE, tp->grc_mode | val);
10054
10055         /* Setup the timer prescalar register.  Clock is always 66Mhz. */
10056         val = tr32(GRC_MISC_CFG);
10057         val &= ~0xff;
10058         val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
10059         tw32(GRC_MISC_CFG, val);
10060
10061         /* Initialize MBUF/DESC pool. */
10062         if (tg3_flag(tp, 5750_PLUS)) {
10063                 /* Do nothing.  */
10064         } else if (tg3_asic_rev(tp) != ASIC_REV_5705) {
10065                 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
10066                 if (tg3_asic_rev(tp) == ASIC_REV_5704)
10067                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
10068                 else
10069                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
10070                 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
10071                 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
10072         } else if (tg3_flag(tp, TSO_CAPABLE)) {
10073                 int fw_len;
10074
10075                 fw_len = tp->fw_len;
10076                 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
10077                 tw32(BUFMGR_MB_POOL_ADDR,
10078                      NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
10079                 tw32(BUFMGR_MB_POOL_SIZE,
10080                      NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
10081         }
10082
10083         if (tp->dev->mtu <= ETH_DATA_LEN) {
10084                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10085                      tp->bufmgr_config.mbuf_read_dma_low_water);
10086                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10087                      tp->bufmgr_config.mbuf_mac_rx_low_water);
10088                 tw32(BUFMGR_MB_HIGH_WATER,
10089                      tp->bufmgr_config.mbuf_high_water);
10090         } else {
10091                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10092                      tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
10093                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10094                      tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
10095                 tw32(BUFMGR_MB_HIGH_WATER,
10096                      tp->bufmgr_config.mbuf_high_water_jumbo);
10097         }
10098         tw32(BUFMGR_DMA_LOW_WATER,
10099              tp->bufmgr_config.dma_low_water);
10100         tw32(BUFMGR_DMA_HIGH_WATER,
10101              tp->bufmgr_config.dma_high_water);
10102
10103         val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
10104         if (tg3_asic_rev(tp) == ASIC_REV_5719)
10105                 val |= BUFMGR_MODE_NO_TX_UNDERRUN;
10106         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10107             tg3_asic_rev(tp) == ASIC_REV_5762 ||
10108             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10109             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0)
10110                 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
10111         tw32(BUFMGR_MODE, val);
10112         for (i = 0; i < 2000; i++) {
10113                 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
10114                         break;
10115                 udelay(10);
10116         }
10117         if (i >= 2000) {
10118                 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
10119                 return -ENODEV;
10120         }
10121
10122         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1)
10123                 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
10124
10125         tg3_setup_rxbd_thresholds(tp);
10126
10127         /* Initialize TG3_BDINFO's at:
10128          *  RCVDBDI_STD_BD:     standard eth size rx ring
10129          *  RCVDBDI_JUMBO_BD:   jumbo frame rx ring
10130          *  RCVDBDI_MINI_BD:    small frame rx ring (??? does not work)
10131          *
10132          * like so:
10133          *  TG3_BDINFO_HOST_ADDR:       high/low parts of DMA address of ring
10134          *  TG3_BDINFO_MAXLEN_FLAGS:    (rx max buffer size << 16) |
10135          *                              ring attribute flags
10136          *  TG3_BDINFO_NIC_ADDR:        location of descriptors in nic SRAM
10137          *
10138          * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
10139          * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
10140          *
10141          * The size of each ring is fixed in the firmware, but the location is
10142          * configurable.
10143          */
10144         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10145              ((u64) tpr->rx_std_mapping >> 32));
10146         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10147              ((u64) tpr->rx_std_mapping & 0xffffffff));
10148         if (!tg3_flag(tp, 5717_PLUS))
10149                 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
10150                      NIC_SRAM_RX_BUFFER_DESC);
10151
10152         /* Disable the mini ring */
10153         if (!tg3_flag(tp, 5705_PLUS))
10154                 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
10155                      BDINFO_FLAGS_DISABLED);
10156
10157         /* Program the jumbo buffer descriptor ring control
10158          * blocks on those devices that have them.
10159          */
10160         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10161             (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
10162
10163                 if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
10164                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10165                              ((u64) tpr->rx_jmb_mapping >> 32));
10166                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10167                              ((u64) tpr->rx_jmb_mapping & 0xffffffff));
10168                         val = TG3_RX_JMB_RING_SIZE(tp) <<
10169                               BDINFO_FLAGS_MAXLEN_SHIFT;
10170                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10171                              val | BDINFO_FLAGS_USE_EXT_RECV);
10172                         if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
10173                             tg3_flag(tp, 57765_CLASS) ||
10174                             tg3_asic_rev(tp) == ASIC_REV_5762)
10175                                 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
10176                                      NIC_SRAM_RX_JUMBO_BUFFER_DESC);
10177                 } else {
10178                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10179                              BDINFO_FLAGS_DISABLED);
10180                 }
10181
10182                 if (tg3_flag(tp, 57765_PLUS)) {
10183                         val = TG3_RX_STD_RING_SIZE(tp);
10184                         val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
10185                         val |= (TG3_RX_STD_DMA_SZ << 2);
10186                 } else
10187                         val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
10188         } else
10189                 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
10190
10191         tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
10192
10193         tpr->rx_std_prod_idx = tp->rx_pending;
10194         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
10195
10196         tpr->rx_jmb_prod_idx =
10197                 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
10198         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
10199
10200         tg3_rings_reset(tp);
10201
10202         /* Initialize MAC address and backoff seed. */
10203         __tg3_set_mac_addr(tp, false);
10204
10205         /* MTU + ethernet header + FCS + optional VLAN tag */
10206         tw32(MAC_RX_MTU_SIZE,
10207              tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
10208
10209         /* The slot time is changed by tg3_setup_phy if we
10210          * run at gigabit with half duplex.
10211          */
10212         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
10213               (6 << TX_LENGTHS_IPG_SHIFT) |
10214               (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
10215
10216         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10217             tg3_asic_rev(tp) == ASIC_REV_5762)
10218                 val |= tr32(MAC_TX_LENGTHS) &
10219                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
10220                         TX_LENGTHS_CNT_DWN_VAL_MSK);
10221
10222         tw32(MAC_TX_LENGTHS, val);
10223
10224         /* Receive rules. */
10225         tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
10226         tw32(RCVLPC_CONFIG, 0x0181);
10227
10228         /* Calculate RDMAC_MODE setting early, we need it to determine
10229          * the RCVLPC_STATE_ENABLE mask.
10230          */
10231         rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
10232                       RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
10233                       RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
10234                       RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
10235                       RDMAC_MODE_LNGREAD_ENAB);
10236
10237         if (tg3_asic_rev(tp) == ASIC_REV_5717)
10238                 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
10239
10240         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
10241             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10242             tg3_asic_rev(tp) == ASIC_REV_57780)
10243                 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
10244                               RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
10245                               RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
10246
10247         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10248             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10249                 if (tg3_flag(tp, TSO_CAPABLE) &&
10250                     tg3_asic_rev(tp) == ASIC_REV_5705) {
10251                         rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
10252                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10253                            !tg3_flag(tp, IS_5788)) {
10254                         rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10255                 }
10256         }
10257
10258         if (tg3_flag(tp, PCI_EXPRESS))
10259                 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10260
10261         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10262                 tp->dma_limit = 0;
10263                 if (tp->dev->mtu <= ETH_DATA_LEN) {
10264                         rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR;
10265                         tp->dma_limit = TG3_TX_BD_DMA_MAX_2K;
10266                 }
10267         }
10268
10269         if (tg3_flag(tp, HW_TSO_1) ||
10270             tg3_flag(tp, HW_TSO_2) ||
10271             tg3_flag(tp, HW_TSO_3))
10272                 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
10273
10274         if (tg3_flag(tp, 57765_PLUS) ||
10275             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10276             tg3_asic_rev(tp) == ASIC_REV_57780)
10277                 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
10278
10279         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10280             tg3_asic_rev(tp) == ASIC_REV_5762)
10281                 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
10282
10283         if (tg3_asic_rev(tp) == ASIC_REV_5761 ||
10284             tg3_asic_rev(tp) == ASIC_REV_5784 ||
10285             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10286             tg3_asic_rev(tp) == ASIC_REV_57780 ||
10287             tg3_flag(tp, 57765_PLUS)) {
10288                 u32 tgtreg;
10289
10290                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10291                         tgtreg = TG3_RDMA_RSRVCTRL_REG2;
10292                 else
10293                         tgtreg = TG3_RDMA_RSRVCTRL_REG;
10294
10295                 val = tr32(tgtreg);
10296                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10297                     tg3_asic_rev(tp) == ASIC_REV_5762) {
10298                         val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
10299                                  TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
10300                                  TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
10301                         val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
10302                                TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
10303                                TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
10304                 }
10305                 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
10306         }
10307
10308         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10309             tg3_asic_rev(tp) == ASIC_REV_5720 ||
10310             tg3_asic_rev(tp) == ASIC_REV_5762) {
10311                 u32 tgtreg;
10312
10313                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10314                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2;
10315                 else
10316                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL;
10317
10318                 val = tr32(tgtreg);
10319                 tw32(tgtreg, val |
10320                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
10321                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
10322         }
10323
10324         /* Receive/send statistics. */
10325         if (tg3_flag(tp, 5750_PLUS)) {
10326                 val = tr32(RCVLPC_STATS_ENABLE);
10327                 val &= ~RCVLPC_STATSENAB_DACK_FIX;
10328                 tw32(RCVLPC_STATS_ENABLE, val);
10329         } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
10330                    tg3_flag(tp, TSO_CAPABLE)) {
10331                 val = tr32(RCVLPC_STATS_ENABLE);
10332                 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
10333                 tw32(RCVLPC_STATS_ENABLE, val);
10334         } else {
10335                 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
10336         }
10337         tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
10338         tw32(SNDDATAI_STATSENAB, 0xffffff);
10339         tw32(SNDDATAI_STATSCTRL,
10340              (SNDDATAI_SCTRL_ENABLE |
10341               SNDDATAI_SCTRL_FASTUPD));
10342
10343         /* Setup host coalescing engine. */
10344         tw32(HOSTCC_MODE, 0);
10345         for (i = 0; i < 2000; i++) {
10346                 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
10347                         break;
10348                 udelay(10);
10349         }
10350
10351         __tg3_set_coalesce(tp, &tp->coal);
10352
10353         if (!tg3_flag(tp, 5705_PLUS)) {
10354                 /* Status/statistics block address.  See tg3_timer,
10355                  * the tg3_periodic_fetch_stats call there, and
10356                  * tg3_get_stats to see how this works for 5705/5750 chips.
10357                  */
10358                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
10359                      ((u64) tp->stats_mapping >> 32));
10360                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
10361                      ((u64) tp->stats_mapping & 0xffffffff));
10362                 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
10363
10364                 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
10365
10366                 /* Clear statistics and status block memory areas */
10367                 for (i = NIC_SRAM_STATS_BLK;
10368                      i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
10369                      i += sizeof(u32)) {
10370                         tg3_write_mem(tp, i, 0);
10371                         udelay(40);
10372                 }
10373         }
10374
10375         tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
10376
10377         tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
10378         tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
10379         if (!tg3_flag(tp, 5705_PLUS))
10380                 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
10381
10382         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
10383                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
10384                 /* reset to prevent losing 1st rx packet intermittently */
10385                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10386                 udelay(10);
10387         }
10388
10389         tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
10390                         MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
10391                         MAC_MODE_FHDE_ENABLE;
10392         if (tg3_flag(tp, ENABLE_APE))
10393                 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
10394         if (!tg3_flag(tp, 5705_PLUS) &&
10395             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10396             tg3_asic_rev(tp) != ASIC_REV_5700)
10397                 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
10398         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
10399         udelay(40);
10400
10401         /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
10402          * If TG3_FLAG_IS_NIC is zero, we should read the
10403          * register to preserve the GPIO settings for LOMs. The GPIOs,
10404          * whether used as inputs or outputs, are set by boot code after
10405          * reset.
10406          */
10407         if (!tg3_flag(tp, IS_NIC)) {
10408                 u32 gpio_mask;
10409
10410                 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
10411                             GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
10412                             GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
10413
10414                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
10415                         gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
10416                                      GRC_LCLCTRL_GPIO_OUTPUT3;
10417
10418                 if (tg3_asic_rev(tp) == ASIC_REV_5755)
10419                         gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
10420
10421                 tp->grc_local_ctrl &= ~gpio_mask;
10422                 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
10423
10424                 /* GPIO1 must be driven high for eeprom write protect */
10425                 if (tg3_flag(tp, EEPROM_WRITE_PROT))
10426                         tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10427                                                GRC_LCLCTRL_GPIO_OUTPUT1);
10428         }
10429         tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10430         udelay(100);
10431
10432         if (tg3_flag(tp, USING_MSIX)) {
10433                 val = tr32(MSGINT_MODE);
10434                 val |= MSGINT_MODE_ENABLE;
10435                 if (tp->irq_cnt > 1)
10436                         val |= MSGINT_MODE_MULTIVEC_EN;
10437                 if (!tg3_flag(tp, 1SHOT_MSI))
10438                         val |= MSGINT_MODE_ONE_SHOT_DISABLE;
10439                 tw32(MSGINT_MODE, val);
10440         }
10441
10442         if (!tg3_flag(tp, 5705_PLUS)) {
10443                 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
10444                 udelay(40);
10445         }
10446
10447         val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
10448                WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
10449                WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
10450                WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
10451                WDMAC_MODE_LNGREAD_ENAB);
10452
10453         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10454             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10455                 if (tg3_flag(tp, TSO_CAPABLE) &&
10456                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 ||
10457                      tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) {
10458                         /* nothing */
10459                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10460                            !tg3_flag(tp, IS_5788)) {
10461                         val |= WDMAC_MODE_RX_ACCEL;
10462                 }
10463         }
10464
10465         /* Enable host coalescing bug fix */
10466         if (tg3_flag(tp, 5755_PLUS))
10467                 val |= WDMAC_MODE_STATUS_TAG_FIX;
10468
10469         if (tg3_asic_rev(tp) == ASIC_REV_5785)
10470                 val |= WDMAC_MODE_BURST_ALL_DATA;
10471
10472         tw32_f(WDMAC_MODE, val);
10473         udelay(40);
10474
10475         if (tg3_flag(tp, PCIX_MODE)) {
10476                 u16 pcix_cmd;
10477
10478                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10479                                      &pcix_cmd);
10480                 if (tg3_asic_rev(tp) == ASIC_REV_5703) {
10481                         pcix_cmd &= ~PCI_X_CMD_MAX_READ;
10482                         pcix_cmd |= PCI_X_CMD_READ_2K;
10483                 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) {
10484                         pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
10485                         pcix_cmd |= PCI_X_CMD_READ_2K;
10486                 }
10487                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10488                                       pcix_cmd);
10489         }
10490
10491         tw32_f(RDMAC_MODE, rdmac_mode);
10492         udelay(40);
10493
10494         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10495             tg3_asic_rev(tp) == ASIC_REV_5720) {
10496                 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
10497                         if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
10498                                 break;
10499                 }
10500                 if (i < TG3_NUM_RDMA_CHANNELS) {
10501                         val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10502                         val |= tg3_lso_rd_dma_workaround_bit(tp);
10503                         tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10504                         tg3_flag_set(tp, 5719_5720_RDMA_BUG);
10505                 }
10506         }
10507
10508         tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
10509         if (!tg3_flag(tp, 5705_PLUS))
10510                 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
10511
10512         if (tg3_asic_rev(tp) == ASIC_REV_5761)
10513                 tw32(SNDDATAC_MODE,
10514                      SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
10515         else
10516                 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
10517
10518         tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
10519         tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
10520         val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
10521         if (tg3_flag(tp, LRG_PROD_RING_CAP))
10522                 val |= RCVDBDI_MODE_LRG_RING_SZ;
10523         tw32(RCVDBDI_MODE, val);
10524         tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
10525         if (tg3_flag(tp, HW_TSO_1) ||
10526             tg3_flag(tp, HW_TSO_2) ||
10527             tg3_flag(tp, HW_TSO_3))
10528                 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
10529         val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
10530         if (tg3_flag(tp, ENABLE_TSS))
10531                 val |= SNDBDI_MODE_MULTI_TXQ_EN;
10532         tw32(SNDBDI_MODE, val);
10533         tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
10534
10535         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
10536                 err = tg3_load_5701_a0_firmware_fix(tp);
10537                 if (err)
10538                         return err;
10539         }
10540
10541         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10542                 /* Ignore any errors for the firmware download. If download
10543                  * fails, the device will operate with EEE disabled
10544                  */
10545                 tg3_load_57766_firmware(tp);
10546         }
10547
10548         if (tg3_flag(tp, TSO_CAPABLE)) {
10549                 err = tg3_load_tso_firmware(tp);
10550                 if (err)
10551                         return err;
10552         }
10553
10554         tp->tx_mode = TX_MODE_ENABLE;
10555
10556         if (tg3_flag(tp, 5755_PLUS) ||
10557             tg3_asic_rev(tp) == ASIC_REV_5906)
10558                 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
10559
10560         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10561             tg3_asic_rev(tp) == ASIC_REV_5762) {
10562                 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
10563                 tp->tx_mode &= ~val;
10564                 tp->tx_mode |= tr32(MAC_TX_MODE) & val;
10565         }
10566
10567         tw32_f(MAC_TX_MODE, tp->tx_mode);
10568         udelay(100);
10569
10570         if (tg3_flag(tp, ENABLE_RSS)) {
10571                 u32 rss_key[10];
10572
10573                 tg3_rss_write_indir_tbl(tp);
10574
10575                 netdev_rss_key_fill(rss_key, 10 * sizeof(u32));
10576
10577                 for (i = 0; i < 10 ; i++)
10578                         tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]);
10579         }
10580
10581         tp->rx_mode = RX_MODE_ENABLE;
10582         if (tg3_flag(tp, 5755_PLUS))
10583                 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
10584
10585         if (tg3_asic_rev(tp) == ASIC_REV_5762)
10586                 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX;
10587
10588         if (tg3_flag(tp, ENABLE_RSS))
10589                 tp->rx_mode |= RX_MODE_RSS_ENABLE |
10590                                RX_MODE_RSS_ITBL_HASH_BITS_7 |
10591                                RX_MODE_RSS_IPV6_HASH_EN |
10592                                RX_MODE_RSS_TCP_IPV6_HASH_EN |
10593                                RX_MODE_RSS_IPV4_HASH_EN |
10594                                RX_MODE_RSS_TCP_IPV4_HASH_EN;
10595
10596         tw32_f(MAC_RX_MODE, tp->rx_mode);
10597         udelay(10);
10598
10599         tw32(MAC_LED_CTRL, tp->led_ctrl);
10600
10601         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
10602         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10603                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10604                 udelay(10);
10605         }
10606         tw32_f(MAC_RX_MODE, tp->rx_mode);
10607         udelay(10);
10608
10609         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10610                 if ((tg3_asic_rev(tp) == ASIC_REV_5704) &&
10611                     !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
10612                         /* Set drive transmission level to 1.2V  */
10613                         /* only if the signal pre-emphasis bit is not set  */
10614                         val = tr32(MAC_SERDES_CFG);
10615                         val &= 0xfffff000;
10616                         val |= 0x880;
10617                         tw32(MAC_SERDES_CFG, val);
10618                 }
10619                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1)
10620                         tw32(MAC_SERDES_CFG, 0x616000);
10621         }
10622
10623         /* Prevent chip from dropping frames when flow control
10624          * is enabled.
10625          */
10626         if (tg3_flag(tp, 57765_CLASS))
10627                 val = 1;
10628         else
10629                 val = 2;
10630         tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
10631
10632         if (tg3_asic_rev(tp) == ASIC_REV_5704 &&
10633             (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
10634                 /* Use hardware link auto-negotiation */
10635                 tg3_flag_set(tp, HW_AUTONEG);
10636         }
10637
10638         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10639             tg3_asic_rev(tp) == ASIC_REV_5714) {
10640                 u32 tmp;
10641
10642                 tmp = tr32(SERDES_RX_CTRL);
10643                 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
10644                 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
10645                 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
10646                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10647         }
10648
10649         if (!tg3_flag(tp, USE_PHYLIB)) {
10650                 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10651                         tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
10652
10653                 err = tg3_setup_phy(tp, false);
10654                 if (err)
10655                         return err;
10656
10657                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10658                     !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
10659                         u32 tmp;
10660
10661                         /* Clear CRC stats. */
10662                         if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
10663                                 tg3_writephy(tp, MII_TG3_TEST1,
10664                                              tmp | MII_TG3_TEST1_CRC_EN);
10665                                 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
10666                         }
10667                 }
10668         }
10669
10670         __tg3_set_rx_mode(tp->dev);
10671
10672         /* Initialize receive rules. */
10673         tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
10674         tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
10675         tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
10676         tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
10677
10678         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
10679                 limit = 8;
10680         else
10681                 limit = 16;
10682         if (tg3_flag(tp, ENABLE_ASF))
10683                 limit -= 4;
10684         switch (limit) {
10685         case 16:
10686                 tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
10687         case 15:
10688                 tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
10689         case 14:
10690                 tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
10691         case 13:
10692                 tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
10693         case 12:
10694                 tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
10695         case 11:
10696                 tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
10697         case 10:
10698                 tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
10699         case 9:
10700                 tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
10701         case 8:
10702                 tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
10703         case 7:
10704                 tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
10705         case 6:
10706                 tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
10707         case 5:
10708                 tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
10709         case 4:
10710                 /* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
10711         case 3:
10712                 /* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
10713         case 2:
10714         case 1:
10715
10716         default:
10717                 break;
10718         }
10719
10720         if (tg3_flag(tp, ENABLE_APE))
10721                 /* Write our heartbeat update interval to APE. */
10722                 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
10723                                 APE_HOST_HEARTBEAT_INT_DISABLE);
10724
10725         tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
10726
10727         return 0;
10728 }
10729
10730 /* Called at device open time to get the chip ready for
10731  * packet processing.  Invoked with tp->lock held.
10732  */
10733 static int tg3_init_hw(struct tg3 *tp, bool reset_phy)
10734 {
10735         /* Chip may have been just powered on. If so, the boot code may still
10736          * be running initialization. Wait for it to finish to avoid races in
10737          * accessing the hardware.
10738          */
10739         tg3_enable_register_access(tp);
10740         tg3_poll_fw(tp);
10741
10742         tg3_switch_clocks(tp);
10743
10744         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10745
10746         return tg3_reset_hw(tp, reset_phy);
10747 }
10748
10749 #ifdef CONFIG_TIGON3_HWMON
10750 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
10751 {
10752         int i;
10753
10754         for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) {
10755                 u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN;
10756
10757                 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
10758                 off += len;
10759
10760                 if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
10761                     !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
10762                         memset(ocir, 0, TG3_OCIR_LEN);
10763         }
10764 }
10765
10766 /* sysfs attributes for hwmon */
10767 static ssize_t tg3_show_temp(struct device *dev,
10768                              struct device_attribute *devattr, char *buf)
10769 {
10770         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
10771         struct tg3 *tp = dev_get_drvdata(dev);
10772         u32 temperature;
10773
10774         spin_lock_bh(&tp->lock);
10775         tg3_ape_scratchpad_read(tp, &temperature, attr->index,
10776                                 sizeof(temperature));
10777         spin_unlock_bh(&tp->lock);
10778         return sprintf(buf, "%u\n", temperature * 1000);
10779 }
10780
10781
10782 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tg3_show_temp, NULL,
10783                           TG3_TEMP_SENSOR_OFFSET);
10784 static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL,
10785                           TG3_TEMP_CAUTION_OFFSET);
10786 static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL,
10787                           TG3_TEMP_MAX_OFFSET);
10788
10789 static struct attribute *tg3_attrs[] = {
10790         &sensor_dev_attr_temp1_input.dev_attr.attr,
10791         &sensor_dev_attr_temp1_crit.dev_attr.attr,
10792         &sensor_dev_attr_temp1_max.dev_attr.attr,
10793         NULL
10794 };
10795 ATTRIBUTE_GROUPS(tg3);
10796
10797 static void tg3_hwmon_close(struct tg3 *tp)
10798 {
10799         if (tp->hwmon_dev) {
10800                 hwmon_device_unregister(tp->hwmon_dev);
10801                 tp->hwmon_dev = NULL;
10802         }
10803 }
10804
10805 static void tg3_hwmon_open(struct tg3 *tp)
10806 {
10807         int i;
10808         u32 size = 0;
10809         struct pci_dev *pdev = tp->pdev;
10810         struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
10811
10812         tg3_sd_scan_scratchpad(tp, ocirs);
10813
10814         for (i = 0; i < TG3_SD_NUM_RECS; i++) {
10815                 if (!ocirs[i].src_data_length)
10816                         continue;
10817
10818                 size += ocirs[i].src_hdr_length;
10819                 size += ocirs[i].src_data_length;
10820         }
10821
10822         if (!size)
10823                 return;
10824
10825         tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3",
10826                                                           tp, tg3_groups);
10827         if (IS_ERR(tp->hwmon_dev)) {
10828                 tp->hwmon_dev = NULL;
10829                 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
10830         }
10831 }
10832 #else
10833 static inline void tg3_hwmon_close(struct tg3 *tp) { }
10834 static inline void tg3_hwmon_open(struct tg3 *tp) { }
10835 #endif /* CONFIG_TIGON3_HWMON */
10836
10837
10838 #define TG3_STAT_ADD32(PSTAT, REG) \
10839 do {    u32 __val = tr32(REG); \
10840         (PSTAT)->low += __val; \
10841         if ((PSTAT)->low < __val) \
10842                 (PSTAT)->high += 1; \
10843 } while (0)
10844
10845 static void tg3_periodic_fetch_stats(struct tg3 *tp)
10846 {
10847         struct tg3_hw_stats *sp = tp->hw_stats;
10848
10849         if (!tp->link_up)
10850                 return;
10851
10852         TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
10853         TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
10854         TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
10855         TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
10856         TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
10857         TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
10858         TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
10859         TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
10860         TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
10861         TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
10862         TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
10863         TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
10864         TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
10865         if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) &&
10866                      (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
10867                       sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
10868                 u32 val;
10869
10870                 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10871                 val &= ~tg3_lso_rd_dma_workaround_bit(tp);
10872                 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10873                 tg3_flag_clear(tp, 5719_5720_RDMA_BUG);
10874         }
10875
10876         TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
10877         TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
10878         TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10879         TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10880         TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10881         TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10882         TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10883         TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10884         TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10885         TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10886         TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10887         TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10888         TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10889         TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10890
10891         TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10892         if (tg3_asic_rev(tp) != ASIC_REV_5717 &&
10893             tg3_asic_rev(tp) != ASIC_REV_5762 &&
10894             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 &&
10895             tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) {
10896                 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10897         } else {
10898                 u32 val = tr32(HOSTCC_FLOW_ATTN);
10899                 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10900                 if (val) {
10901                         tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10902                         sp->rx_discards.low += val;
10903                         if (sp->rx_discards.low < val)
10904                                 sp->rx_discards.high += 1;
10905                 }
10906                 sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10907         }
10908         TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10909 }
10910
10911 static void tg3_chk_missed_msi(struct tg3 *tp)
10912 {
10913         u32 i;
10914
10915         for (i = 0; i < tp->irq_cnt; i++) {
10916                 struct tg3_napi *tnapi = &tp->napi[i];
10917
10918                 if (tg3_has_work(tnapi)) {
10919                         if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10920                             tnapi->last_tx_cons == tnapi->tx_cons) {
10921                                 if (tnapi->chk_msi_cnt < 1) {
10922                                         tnapi->chk_msi_cnt++;
10923                                         return;
10924                                 }
10925                                 tg3_msi(0, tnapi);
10926                         }
10927                 }
10928                 tnapi->chk_msi_cnt = 0;
10929                 tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10930                 tnapi->last_tx_cons = tnapi->tx_cons;
10931         }
10932 }
10933
10934 static void tg3_timer(unsigned long __opaque)
10935 {
10936         struct tg3 *tp = (struct tg3 *) __opaque;
10937
10938         spin_lock(&tp->lock);
10939
10940         if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) {
10941                 spin_unlock(&tp->lock);
10942                 goto restart_timer;
10943         }
10944
10945         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10946             tg3_flag(tp, 57765_CLASS))
10947                 tg3_chk_missed_msi(tp);
10948
10949         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
10950                 /* BCM4785: Flush posted writes from GbE to host memory. */
10951                 tr32(HOSTCC_MODE);
10952         }
10953
10954         if (!tg3_flag(tp, TAGGED_STATUS)) {
10955                 /* All of this garbage is because when using non-tagged
10956                  * IRQ status the mailbox/status_block protocol the chip
10957                  * uses with the cpu is race prone.
10958                  */
10959                 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
10960                         tw32(GRC_LOCAL_CTRL,
10961                              tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
10962                 } else {
10963                         tw32(HOSTCC_MODE, tp->coalesce_mode |
10964                              HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
10965                 }
10966
10967                 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
10968                         spin_unlock(&tp->lock);
10969                         tg3_reset_task_schedule(tp);
10970                         goto restart_timer;
10971                 }
10972         }
10973
10974         /* This part only runs once per second. */
10975         if (!--tp->timer_counter) {
10976                 if (tg3_flag(tp, 5705_PLUS))
10977                         tg3_periodic_fetch_stats(tp);
10978
10979                 if (tp->setlpicnt && !--tp->setlpicnt)
10980                         tg3_phy_eee_enable(tp);
10981
10982                 if (tg3_flag(tp, USE_LINKCHG_REG)) {
10983                         u32 mac_stat;
10984                         int phy_event;
10985
10986                         mac_stat = tr32(MAC_STATUS);
10987
10988                         phy_event = 0;
10989                         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
10990                                 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
10991                                         phy_event = 1;
10992                         } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
10993                                 phy_event = 1;
10994
10995                         if (phy_event)
10996                                 tg3_setup_phy(tp, false);
10997                 } else if (tg3_flag(tp, POLL_SERDES)) {
10998                         u32 mac_stat = tr32(MAC_STATUS);
10999                         int need_setup = 0;
11000
11001                         if (tp->link_up &&
11002                             (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
11003                                 need_setup = 1;
11004                         }
11005                         if (!tp->link_up &&
11006                             (mac_stat & (MAC_STATUS_PCS_SYNCED |
11007                                          MAC_STATUS_SIGNAL_DET))) {
11008                                 need_setup = 1;
11009                         }
11010                         if (need_setup) {
11011                                 if (!tp->serdes_counter) {
11012                                         tw32_f(MAC_MODE,
11013                                              (tp->mac_mode &
11014                                               ~MAC_MODE_PORT_MODE_MASK));
11015                                         udelay(40);
11016                                         tw32_f(MAC_MODE, tp->mac_mode);
11017                                         udelay(40);
11018                                 }
11019                                 tg3_setup_phy(tp, false);
11020                         }
11021                 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
11022                            tg3_flag(tp, 5780_CLASS)) {
11023                         tg3_serdes_parallel_detect(tp);
11024                 } else if (tg3_flag(tp, POLL_CPMU_LINK)) {
11025                         u32 cpmu = tr32(TG3_CPMU_STATUS);
11026                         bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) ==
11027                                          TG3_CPMU_STATUS_LINK_MASK);
11028
11029                         if (link_up != tp->link_up)
11030                                 tg3_setup_phy(tp, false);
11031                 }
11032
11033                 tp->timer_counter = tp->timer_multiplier;
11034         }
11035
11036         /* Heartbeat is only sent once every 2 seconds.
11037          *
11038          * The heartbeat is to tell the ASF firmware that the host
11039          * driver is still alive.  In the event that the OS crashes,
11040          * ASF needs to reset the hardware to free up the FIFO space
11041          * that may be filled with rx packets destined for the host.
11042          * If the FIFO is full, ASF will no longer function properly.
11043          *
11044          * Unintended resets have been reported on real time kernels
11045          * where the timer doesn't run on time.  Netpoll will also have
11046          * same problem.
11047          *
11048          * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
11049          * to check the ring condition when the heartbeat is expiring
11050          * before doing the reset.  This will prevent most unintended
11051          * resets.
11052          */
11053         if (!--tp->asf_counter) {
11054                 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
11055                         tg3_wait_for_event_ack(tp);
11056
11057                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
11058                                       FWCMD_NICDRV_ALIVE3);
11059                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
11060                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
11061                                       TG3_FW_UPDATE_TIMEOUT_SEC);
11062
11063                         tg3_generate_fw_event(tp);
11064                 }
11065                 tp->asf_counter = tp->asf_multiplier;
11066         }
11067
11068         spin_unlock(&tp->lock);
11069
11070 restart_timer:
11071         tp->timer.expires = jiffies + tp->timer_offset;
11072         add_timer(&tp->timer);
11073 }
11074
11075 static void tg3_timer_init(struct tg3 *tp)
11076 {
11077         if (tg3_flag(tp, TAGGED_STATUS) &&
11078             tg3_asic_rev(tp) != ASIC_REV_5717 &&
11079             !tg3_flag(tp, 57765_CLASS))
11080                 tp->timer_offset = HZ;
11081         else
11082                 tp->timer_offset = HZ / 10;
11083
11084         BUG_ON(tp->timer_offset > HZ);
11085
11086         tp->timer_multiplier = (HZ / tp->timer_offset);
11087         tp->asf_multiplier = (HZ / tp->timer_offset) *
11088                              TG3_FW_UPDATE_FREQ_SEC;
11089
11090         init_timer(&tp->timer);
11091         tp->timer.data = (unsigned long) tp;
11092         tp->timer.function = tg3_timer;
11093 }
11094
11095 static void tg3_timer_start(struct tg3 *tp)
11096 {
11097         tp->asf_counter   = tp->asf_multiplier;
11098         tp->timer_counter = tp->timer_multiplier;
11099
11100         tp->timer.expires = jiffies + tp->timer_offset;
11101         add_timer(&tp->timer);
11102 }
11103
11104 static void tg3_timer_stop(struct tg3 *tp)
11105 {
11106         del_timer_sync(&tp->timer);
11107 }
11108
11109 /* Restart hardware after configuration changes, self-test, etc.
11110  * Invoked with tp->lock held.
11111  */
11112 static int tg3_restart_hw(struct tg3 *tp, bool reset_phy)
11113         __releases(tp->lock)
11114         __acquires(tp->lock)
11115 {
11116         int err;
11117
11118         err = tg3_init_hw(tp, reset_phy);
11119         if (err) {
11120                 netdev_err(tp->dev,
11121                            "Failed to re-initialize device, aborting\n");
11122                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11123                 tg3_full_unlock(tp);
11124                 tg3_timer_stop(tp);
11125                 tp->irq_sync = 0;
11126                 tg3_napi_enable(tp);
11127                 dev_close(tp->dev);
11128                 tg3_full_lock(tp, 0);
11129         }
11130         return err;
11131 }
11132
11133 static void tg3_reset_task(struct work_struct *work)
11134 {
11135         struct tg3 *tp = container_of(work, struct tg3, reset_task);
11136         int err;
11137
11138         rtnl_lock();
11139         tg3_full_lock(tp, 0);
11140
11141         if (!netif_running(tp->dev)) {
11142                 tg3_flag_clear(tp, RESET_TASK_PENDING);
11143                 tg3_full_unlock(tp);
11144                 rtnl_unlock();
11145                 return;
11146         }
11147
11148         tg3_full_unlock(tp);
11149
11150         tg3_phy_stop(tp);
11151
11152         tg3_netif_stop(tp);
11153
11154         tg3_full_lock(tp, 1);
11155
11156         if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
11157                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
11158                 tp->write32_rx_mbox = tg3_write_flush_reg32;
11159                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
11160                 tg3_flag_clear(tp, TX_RECOVERY_PENDING);
11161         }
11162
11163         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
11164         err = tg3_init_hw(tp, true);
11165         if (err)
11166                 goto out;
11167
11168         tg3_netif_start(tp);
11169
11170 out:
11171         tg3_full_unlock(tp);
11172
11173         if (!err)
11174                 tg3_phy_start(tp);
11175
11176         tg3_flag_clear(tp, RESET_TASK_PENDING);
11177         rtnl_unlock();
11178 }
11179
11180 static int tg3_request_irq(struct tg3 *tp, int irq_num)
11181 {
11182         irq_handler_t fn;
11183         unsigned long flags;
11184         char *name;
11185         struct tg3_napi *tnapi = &tp->napi[irq_num];
11186
11187         if (tp->irq_cnt == 1)
11188                 name = tp->dev->name;
11189         else {
11190                 name = &tnapi->irq_lbl[0];
11191                 if (tnapi->tx_buffers && tnapi->rx_rcb)
11192                         snprintf(name, IFNAMSIZ,
11193                                  "%s-txrx-%d", tp->dev->name, irq_num);
11194                 else if (tnapi->tx_buffers)
11195                         snprintf(name, IFNAMSIZ,
11196                                  "%s-tx-%d", tp->dev->name, irq_num);
11197                 else if (tnapi->rx_rcb)
11198                         snprintf(name, IFNAMSIZ,
11199                                  "%s-rx-%d", tp->dev->name, irq_num);
11200                 else
11201                         snprintf(name, IFNAMSIZ,
11202                                  "%s-%d", tp->dev->name, irq_num);
11203                 name[IFNAMSIZ-1] = 0;
11204         }
11205
11206         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11207                 fn = tg3_msi;
11208                 if (tg3_flag(tp, 1SHOT_MSI))
11209                         fn = tg3_msi_1shot;
11210                 flags = 0;
11211         } else {
11212                 fn = tg3_interrupt;
11213                 if (tg3_flag(tp, TAGGED_STATUS))
11214                         fn = tg3_interrupt_tagged;
11215                 flags = IRQF_SHARED;
11216         }
11217
11218         return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
11219 }
11220
11221 static int tg3_test_interrupt(struct tg3 *tp)
11222 {
11223         struct tg3_napi *tnapi = &tp->napi[0];
11224         struct net_device *dev = tp->dev;
11225         int err, i, intr_ok = 0;
11226         u32 val;
11227
11228         if (!netif_running(dev))
11229                 return -ENODEV;
11230
11231         tg3_disable_ints(tp);
11232
11233         free_irq(tnapi->irq_vec, tnapi);
11234
11235         /*
11236          * Turn off MSI one shot mode.  Otherwise this test has no
11237          * observable way to know whether the interrupt was delivered.
11238          */
11239         if (tg3_flag(tp, 57765_PLUS)) {
11240                 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
11241                 tw32(MSGINT_MODE, val);
11242         }
11243
11244         err = request_irq(tnapi->irq_vec, tg3_test_isr,
11245                           IRQF_SHARED, dev->name, tnapi);
11246         if (err)
11247                 return err;
11248
11249         tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
11250         tg3_enable_ints(tp);
11251
11252         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11253                tnapi->coal_now);
11254
11255         for (i = 0; i < 5; i++) {
11256                 u32 int_mbox, misc_host_ctrl;
11257
11258                 int_mbox = tr32_mailbox(tnapi->int_mbox);
11259                 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
11260
11261                 if ((int_mbox != 0) ||
11262                     (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
11263                         intr_ok = 1;
11264                         break;
11265                 }
11266
11267                 if (tg3_flag(tp, 57765_PLUS) &&
11268                     tnapi->hw_status->status_tag != tnapi->last_tag)
11269                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
11270
11271                 msleep(10);
11272         }
11273
11274         tg3_disable_ints(tp);
11275
11276         free_irq(tnapi->irq_vec, tnapi);
11277
11278         err = tg3_request_irq(tp, 0);
11279
11280         if (err)
11281                 return err;
11282
11283         if (intr_ok) {
11284                 /* Reenable MSI one shot mode. */
11285                 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
11286                         val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
11287                         tw32(MSGINT_MODE, val);
11288                 }
11289                 return 0;
11290         }
11291
11292         return -EIO;
11293 }
11294
11295 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
11296  * successfully restored
11297  */
11298 static int tg3_test_msi(struct tg3 *tp)
11299 {
11300         int err;
11301         u16 pci_cmd;
11302
11303         if (!tg3_flag(tp, USING_MSI))
11304                 return 0;
11305
11306         /* Turn off SERR reporting in case MSI terminates with Master
11307          * Abort.
11308          */
11309         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11310         pci_write_config_word(tp->pdev, PCI_COMMAND,
11311                               pci_cmd & ~PCI_COMMAND_SERR);
11312
11313         err = tg3_test_interrupt(tp);
11314
11315         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11316
11317         if (!err)
11318                 return 0;
11319
11320         /* other failures */
11321         if (err != -EIO)
11322                 return err;
11323
11324         /* MSI test failed, go back to INTx mode */
11325         netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
11326                     "to INTx mode. Please report this failure to the PCI "
11327                     "maintainer and include system chipset information\n");
11328
11329         free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11330
11331         pci_disable_msi(tp->pdev);
11332
11333         tg3_flag_clear(tp, USING_MSI);
11334         tp->napi[0].irq_vec = tp->pdev->irq;
11335
11336         err = tg3_request_irq(tp, 0);
11337         if (err)
11338                 return err;
11339
11340         /* Need to reset the chip because the MSI cycle may have terminated
11341          * with Master Abort.
11342          */
11343         tg3_full_lock(tp, 1);
11344
11345         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11346         err = tg3_init_hw(tp, true);
11347
11348         tg3_full_unlock(tp);
11349
11350         if (err)
11351                 free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11352
11353         return err;
11354 }
11355
11356 static int tg3_request_firmware(struct tg3 *tp)
11357 {
11358         const struct tg3_firmware_hdr *fw_hdr;
11359
11360         if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
11361                 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
11362                            tp->fw_needed);
11363                 return -ENOENT;
11364         }
11365
11366         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
11367
11368         /* Firmware blob starts with version numbers, followed by
11369          * start address and _full_ length including BSS sections
11370          * (which must be longer than the actual data, of course
11371          */
11372
11373         tp->fw_len = be32_to_cpu(fw_hdr->len);  /* includes bss */
11374         if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) {
11375                 netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
11376                            tp->fw_len, tp->fw_needed);
11377                 release_firmware(tp->fw);
11378                 tp->fw = NULL;
11379                 return -EINVAL;
11380         }
11381
11382         /* We no longer need firmware; we have it. */
11383         tp->fw_needed = NULL;
11384         return 0;
11385 }
11386
11387 static u32 tg3_irq_count(struct tg3 *tp)
11388 {
11389         u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
11390
11391         if (irq_cnt > 1) {
11392                 /* We want as many rx rings enabled as there are cpus.
11393                  * In multiqueue MSI-X mode, the first MSI-X vector
11394                  * only deals with link interrupts, etc, so we add
11395                  * one to the number of vectors we are requesting.
11396                  */
11397                 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
11398         }
11399
11400         return irq_cnt;
11401 }
11402
11403 static bool tg3_enable_msix(struct tg3 *tp)
11404 {
11405         int i, rc;
11406         struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
11407
11408         tp->txq_cnt = tp->txq_req;
11409         tp->rxq_cnt = tp->rxq_req;
11410         if (!tp->rxq_cnt)
11411                 tp->rxq_cnt = netif_get_num_default_rss_queues();
11412         if (tp->rxq_cnt > tp->rxq_max)
11413                 tp->rxq_cnt = tp->rxq_max;
11414
11415         /* Disable multiple TX rings by default.  Simple round-robin hardware
11416          * scheduling of the TX rings can cause starvation of rings with
11417          * small packets when other rings have TSO or jumbo packets.
11418          */
11419         if (!tp->txq_req)
11420                 tp->txq_cnt = 1;
11421
11422         tp->irq_cnt = tg3_irq_count(tp);
11423
11424         for (i = 0; i < tp->irq_max; i++) {
11425                 msix_ent[i].entry  = i;
11426                 msix_ent[i].vector = 0;
11427         }
11428
11429         rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt);
11430         if (rc < 0) {
11431                 return false;
11432         } else if (rc < tp->irq_cnt) {
11433                 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
11434                               tp->irq_cnt, rc);
11435                 tp->irq_cnt = rc;
11436                 tp->rxq_cnt = max(rc - 1, 1);
11437                 if (tp->txq_cnt)
11438                         tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
11439         }
11440
11441         for (i = 0; i < tp->irq_max; i++)
11442                 tp->napi[i].irq_vec = msix_ent[i].vector;
11443
11444         if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
11445                 pci_disable_msix(tp->pdev);
11446                 return false;
11447         }
11448
11449         if (tp->irq_cnt == 1)
11450                 return true;
11451
11452         tg3_flag_set(tp, ENABLE_RSS);
11453
11454         if (tp->txq_cnt > 1)
11455                 tg3_flag_set(tp, ENABLE_TSS);
11456
11457         netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
11458
11459         return true;
11460 }
11461
11462 static void tg3_ints_init(struct tg3 *tp)
11463 {
11464         if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
11465             !tg3_flag(tp, TAGGED_STATUS)) {
11466                 /* All MSI supporting chips should support tagged
11467                  * status.  Assert that this is the case.
11468                  */
11469                 netdev_warn(tp->dev,
11470                             "MSI without TAGGED_STATUS? Not using MSI\n");
11471                 goto defcfg;
11472         }
11473
11474         if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
11475                 tg3_flag_set(tp, USING_MSIX);
11476         else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
11477                 tg3_flag_set(tp, USING_MSI);
11478
11479         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11480                 u32 msi_mode = tr32(MSGINT_MODE);
11481                 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
11482                         msi_mode |= MSGINT_MODE_MULTIVEC_EN;
11483                 if (!tg3_flag(tp, 1SHOT_MSI))
11484                         msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
11485                 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
11486         }
11487 defcfg:
11488         if (!tg3_flag(tp, USING_MSIX)) {
11489                 tp->irq_cnt = 1;
11490                 tp->napi[0].irq_vec = tp->pdev->irq;
11491         }
11492
11493         if (tp->irq_cnt == 1) {
11494                 tp->txq_cnt = 1;
11495                 tp->rxq_cnt = 1;
11496                 netif_set_real_num_tx_queues(tp->dev, 1);
11497                 netif_set_real_num_rx_queues(tp->dev, 1);
11498         }
11499 }
11500
11501 static void tg3_ints_fini(struct tg3 *tp)
11502 {
11503         if (tg3_flag(tp, USING_MSIX))
11504                 pci_disable_msix(tp->pdev);
11505         else if (tg3_flag(tp, USING_MSI))
11506                 pci_disable_msi(tp->pdev);
11507         tg3_flag_clear(tp, USING_MSI);
11508         tg3_flag_clear(tp, USING_MSIX);
11509         tg3_flag_clear(tp, ENABLE_RSS);
11510         tg3_flag_clear(tp, ENABLE_TSS);
11511 }
11512
11513 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
11514                      bool init)
11515 {
11516         struct net_device *dev = tp->dev;
11517         int i, err;
11518
11519         /*
11520          * Setup interrupts first so we know how
11521          * many NAPI resources to allocate
11522          */
11523         tg3_ints_init(tp);
11524
11525         tg3_rss_check_indir_tbl(tp);
11526
11527         /* The placement of this call is tied
11528          * to the setup and use of Host TX descriptors.
11529          */
11530         err = tg3_alloc_consistent(tp);
11531         if (err)
11532                 goto out_ints_fini;
11533
11534         tg3_napi_init(tp);
11535
11536         tg3_napi_enable(tp);
11537
11538         for (i = 0; i < tp->irq_cnt; i++) {
11539                 err = tg3_request_irq(tp, i);
11540                 if (err) {
11541                         for (i--; i >= 0; i--) {
11542                                 struct tg3_napi *tnapi = &tp->napi[i];
11543
11544                                 free_irq(tnapi->irq_vec, tnapi);
11545                         }
11546                         goto out_napi_fini;
11547                 }
11548         }
11549
11550         tg3_full_lock(tp, 0);
11551
11552         if (init)
11553                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
11554
11555         err = tg3_init_hw(tp, reset_phy);
11556         if (err) {
11557                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11558                 tg3_free_rings(tp);
11559         }
11560
11561         tg3_full_unlock(tp);
11562
11563         if (err)
11564                 goto out_free_irq;
11565
11566         if (test_irq && tg3_flag(tp, USING_MSI)) {
11567                 err = tg3_test_msi(tp);
11568
11569                 if (err) {
11570                         tg3_full_lock(tp, 0);
11571                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11572                         tg3_free_rings(tp);
11573                         tg3_full_unlock(tp);
11574
11575                         goto out_napi_fini;
11576                 }
11577
11578                 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
11579                         u32 val = tr32(PCIE_TRANSACTION_CFG);
11580
11581                         tw32(PCIE_TRANSACTION_CFG,
11582                              val | PCIE_TRANS_CFG_1SHOT_MSI);
11583                 }
11584         }
11585
11586         tg3_phy_start(tp);
11587
11588         tg3_hwmon_open(tp);
11589
11590         tg3_full_lock(tp, 0);
11591
11592         tg3_timer_start(tp);
11593         tg3_flag_set(tp, INIT_COMPLETE);
11594         tg3_enable_ints(tp);
11595
11596         tg3_ptp_resume(tp);
11597
11598         tg3_full_unlock(tp);
11599
11600         netif_tx_start_all_queues(dev);
11601
11602         /*
11603          * Reset loopback feature if it was turned on while the device was down
11604          * make sure that it's installed properly now.
11605          */
11606         if (dev->features & NETIF_F_LOOPBACK)
11607                 tg3_set_loopback(dev, dev->features);
11608
11609         return 0;
11610
11611 out_free_irq:
11612         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11613                 struct tg3_napi *tnapi = &tp->napi[i];
11614                 free_irq(tnapi->irq_vec, tnapi);
11615         }
11616
11617 out_napi_fini:
11618         tg3_napi_disable(tp);
11619         tg3_napi_fini(tp);
11620         tg3_free_consistent(tp);
11621
11622 out_ints_fini:
11623         tg3_ints_fini(tp);
11624
11625         return err;
11626 }
11627
11628 static void tg3_stop(struct tg3 *tp)
11629 {
11630         int i;
11631
11632         tg3_reset_task_cancel(tp);
11633         tg3_netif_stop(tp);
11634
11635         tg3_timer_stop(tp);
11636
11637         tg3_hwmon_close(tp);
11638
11639         tg3_phy_stop(tp);
11640
11641         tg3_full_lock(tp, 1);
11642
11643         tg3_disable_ints(tp);
11644
11645         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11646         tg3_free_rings(tp);
11647         tg3_flag_clear(tp, INIT_COMPLETE);
11648
11649         tg3_full_unlock(tp);
11650
11651         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11652                 struct tg3_napi *tnapi = &tp->napi[i];
11653                 free_irq(tnapi->irq_vec, tnapi);
11654         }
11655
11656         tg3_ints_fini(tp);
11657
11658         tg3_napi_fini(tp);
11659
11660         tg3_free_consistent(tp);
11661 }
11662
11663 static int tg3_open(struct net_device *dev)
11664 {
11665         struct tg3 *tp = netdev_priv(dev);
11666         int err;
11667
11668         if (tp->pcierr_recovery) {
11669                 netdev_err(dev, "Failed to open device. PCI error recovery "
11670                            "in progress\n");
11671                 return -EAGAIN;
11672         }
11673
11674         if (tp->fw_needed) {
11675                 err = tg3_request_firmware(tp);
11676                 if (tg3_asic_rev(tp) == ASIC_REV_57766) {
11677                         if (err) {
11678                                 netdev_warn(tp->dev, "EEE capability disabled\n");
11679                                 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11680                         } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
11681                                 netdev_warn(tp->dev, "EEE capability restored\n");
11682                                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
11683                         }
11684                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
11685                         if (err)
11686                                 return err;
11687                 } else if (err) {
11688                         netdev_warn(tp->dev, "TSO capability disabled\n");
11689                         tg3_flag_clear(tp, TSO_CAPABLE);
11690                 } else if (!tg3_flag(tp, TSO_CAPABLE)) {
11691                         netdev_notice(tp->dev, "TSO capability restored\n");
11692                         tg3_flag_set(tp, TSO_CAPABLE);
11693                 }
11694         }
11695
11696         tg3_carrier_off(tp);
11697
11698         err = tg3_power_up(tp);
11699         if (err)
11700                 return err;
11701
11702         tg3_full_lock(tp, 0);
11703
11704         tg3_disable_ints(tp);
11705         tg3_flag_clear(tp, INIT_COMPLETE);
11706
11707         tg3_full_unlock(tp);
11708
11709         err = tg3_start(tp,
11710                         !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN),
11711                         true, true);
11712         if (err) {
11713                 tg3_frob_aux_power(tp, false);
11714                 pci_set_power_state(tp->pdev, PCI_D3hot);
11715         }
11716
11717         return err;
11718 }
11719
11720 static int tg3_close(struct net_device *dev)
11721 {
11722         struct tg3 *tp = netdev_priv(dev);
11723
11724         if (tp->pcierr_recovery) {
11725                 netdev_err(dev, "Failed to close device. PCI error recovery "
11726                            "in progress\n");
11727                 return -EAGAIN;
11728         }
11729
11730         tg3_stop(tp);
11731
11732         if (pci_device_is_present(tp->pdev)) {
11733                 tg3_power_down_prepare(tp);
11734
11735                 tg3_carrier_off(tp);
11736         }
11737         return 0;
11738 }
11739
11740 static inline u64 get_stat64(tg3_stat64_t *val)
11741 {
11742        return ((u64)val->high << 32) | ((u64)val->low);
11743 }
11744
11745 static u64 tg3_calc_crc_errors(struct tg3 *tp)
11746 {
11747         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11748
11749         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11750             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
11751              tg3_asic_rev(tp) == ASIC_REV_5701)) {
11752                 u32 val;
11753
11754                 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
11755                         tg3_writephy(tp, MII_TG3_TEST1,
11756                                      val | MII_TG3_TEST1_CRC_EN);
11757                         tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
11758                 } else
11759                         val = 0;
11760
11761                 tp->phy_crc_errors += val;
11762
11763                 return tp->phy_crc_errors;
11764         }
11765
11766         return get_stat64(&hw_stats->rx_fcs_errors);
11767 }
11768
11769 #define ESTAT_ADD(member) \
11770         estats->member =        old_estats->member + \
11771                                 get_stat64(&hw_stats->member)
11772
11773 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
11774 {
11775         struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
11776         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11777
11778         ESTAT_ADD(rx_octets);
11779         ESTAT_ADD(rx_fragments);
11780         ESTAT_ADD(rx_ucast_packets);
11781         ESTAT_ADD(rx_mcast_packets);
11782         ESTAT_ADD(rx_bcast_packets);
11783         ESTAT_ADD(rx_fcs_errors);
11784         ESTAT_ADD(rx_align_errors);
11785         ESTAT_ADD(rx_xon_pause_rcvd);
11786         ESTAT_ADD(rx_xoff_pause_rcvd);
11787         ESTAT_ADD(rx_mac_ctrl_rcvd);
11788         ESTAT_ADD(rx_xoff_entered);
11789         ESTAT_ADD(rx_frame_too_long_errors);
11790         ESTAT_ADD(rx_jabbers);
11791         ESTAT_ADD(rx_undersize_packets);
11792         ESTAT_ADD(rx_in_length_errors);
11793         ESTAT_ADD(rx_out_length_errors);
11794         ESTAT_ADD(rx_64_or_less_octet_packets);
11795         ESTAT_ADD(rx_65_to_127_octet_packets);
11796         ESTAT_ADD(rx_128_to_255_octet_packets);
11797         ESTAT_ADD(rx_256_to_511_octet_packets);
11798         ESTAT_ADD(rx_512_to_1023_octet_packets);
11799         ESTAT_ADD(rx_1024_to_1522_octet_packets);
11800         ESTAT_ADD(rx_1523_to_2047_octet_packets);
11801         ESTAT_ADD(rx_2048_to_4095_octet_packets);
11802         ESTAT_ADD(rx_4096_to_8191_octet_packets);
11803         ESTAT_ADD(rx_8192_to_9022_octet_packets);
11804
11805         ESTAT_ADD(tx_octets);
11806         ESTAT_ADD(tx_collisions);
11807         ESTAT_ADD(tx_xon_sent);
11808         ESTAT_ADD(tx_xoff_sent);
11809         ESTAT_ADD(tx_flow_control);
11810         ESTAT_ADD(tx_mac_errors);
11811         ESTAT_ADD(tx_single_collisions);
11812         ESTAT_ADD(tx_mult_collisions);
11813         ESTAT_ADD(tx_deferred);
11814         ESTAT_ADD(tx_excessive_collisions);
11815         ESTAT_ADD(tx_late_collisions);
11816         ESTAT_ADD(tx_collide_2times);
11817         ESTAT_ADD(tx_collide_3times);
11818         ESTAT_ADD(tx_collide_4times);
11819         ESTAT_ADD(tx_collide_5times);
11820         ESTAT_ADD(tx_collide_6times);
11821         ESTAT_ADD(tx_collide_7times);
11822         ESTAT_ADD(tx_collide_8times);
11823         ESTAT_ADD(tx_collide_9times);
11824         ESTAT_ADD(tx_collide_10times);
11825         ESTAT_ADD(tx_collide_11times);
11826         ESTAT_ADD(tx_collide_12times);
11827         ESTAT_ADD(tx_collide_13times);
11828         ESTAT_ADD(tx_collide_14times);
11829         ESTAT_ADD(tx_collide_15times);
11830         ESTAT_ADD(tx_ucast_packets);
11831         ESTAT_ADD(tx_mcast_packets);
11832         ESTAT_ADD(tx_bcast_packets);
11833         ESTAT_ADD(tx_carrier_sense_errors);
11834         ESTAT_ADD(tx_discards);
11835         ESTAT_ADD(tx_errors);
11836
11837         ESTAT_ADD(dma_writeq_full);
11838         ESTAT_ADD(dma_write_prioq_full);
11839         ESTAT_ADD(rxbds_empty);
11840         ESTAT_ADD(rx_discards);
11841         ESTAT_ADD(rx_errors);
11842         ESTAT_ADD(rx_threshold_hit);
11843
11844         ESTAT_ADD(dma_readq_full);
11845         ESTAT_ADD(dma_read_prioq_full);
11846         ESTAT_ADD(tx_comp_queue_full);
11847
11848         ESTAT_ADD(ring_set_send_prod_index);
11849         ESTAT_ADD(ring_status_update);
11850         ESTAT_ADD(nic_irqs);
11851         ESTAT_ADD(nic_avoided_irqs);
11852         ESTAT_ADD(nic_tx_threshold_hit);
11853
11854         ESTAT_ADD(mbuf_lwm_thresh_hit);
11855 }
11856
11857 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
11858 {
11859         struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
11860         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11861
11862         stats->rx_packets = old_stats->rx_packets +
11863                 get_stat64(&hw_stats->rx_ucast_packets) +
11864                 get_stat64(&hw_stats->rx_mcast_packets) +
11865                 get_stat64(&hw_stats->rx_bcast_packets);
11866
11867         stats->tx_packets = old_stats->tx_packets +
11868                 get_stat64(&hw_stats->tx_ucast_packets) +
11869                 get_stat64(&hw_stats->tx_mcast_packets) +
11870                 get_stat64(&hw_stats->tx_bcast_packets);
11871
11872         stats->rx_bytes = old_stats->rx_bytes +
11873                 get_stat64(&hw_stats->rx_octets);
11874         stats->tx_bytes = old_stats->tx_bytes +
11875                 get_stat64(&hw_stats->tx_octets);
11876
11877         stats->rx_errors = old_stats->rx_errors +
11878                 get_stat64(&hw_stats->rx_errors);
11879         stats->tx_errors = old_stats->tx_errors +
11880                 get_stat64(&hw_stats->tx_errors) +
11881                 get_stat64(&hw_stats->tx_mac_errors) +
11882                 get_stat64(&hw_stats->tx_carrier_sense_errors) +
11883                 get_stat64(&hw_stats->tx_discards);
11884
11885         stats->multicast = old_stats->multicast +
11886                 get_stat64(&hw_stats->rx_mcast_packets);
11887         stats->collisions = old_stats->collisions +
11888                 get_stat64(&hw_stats->tx_collisions);
11889
11890         stats->rx_length_errors = old_stats->rx_length_errors +
11891                 get_stat64(&hw_stats->rx_frame_too_long_errors) +
11892                 get_stat64(&hw_stats->rx_undersize_packets);
11893
11894         stats->rx_frame_errors = old_stats->rx_frame_errors +
11895                 get_stat64(&hw_stats->rx_align_errors);
11896         stats->tx_aborted_errors = old_stats->tx_aborted_errors +
11897                 get_stat64(&hw_stats->tx_discards);
11898         stats->tx_carrier_errors = old_stats->tx_carrier_errors +
11899                 get_stat64(&hw_stats->tx_carrier_sense_errors);
11900
11901         stats->rx_crc_errors = old_stats->rx_crc_errors +
11902                 tg3_calc_crc_errors(tp);
11903
11904         stats->rx_missed_errors = old_stats->rx_missed_errors +
11905                 get_stat64(&hw_stats->rx_discards);
11906
11907         stats->rx_dropped = tp->rx_dropped;
11908         stats->tx_dropped = tp->tx_dropped;
11909 }
11910
11911 static int tg3_get_regs_len(struct net_device *dev)
11912 {
11913         return TG3_REG_BLK_SIZE;
11914 }
11915
11916 static void tg3_get_regs(struct net_device *dev,
11917                 struct ethtool_regs *regs, void *_p)
11918 {
11919         struct tg3 *tp = netdev_priv(dev);
11920
11921         regs->version = 0;
11922
11923         memset(_p, 0, TG3_REG_BLK_SIZE);
11924
11925         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11926                 return;
11927
11928         tg3_full_lock(tp, 0);
11929
11930         tg3_dump_legacy_regs(tp, (u32 *)_p);
11931
11932         tg3_full_unlock(tp);
11933 }
11934
11935 static int tg3_get_eeprom_len(struct net_device *dev)
11936 {
11937         struct tg3 *tp = netdev_priv(dev);
11938
11939         return tp->nvram_size;
11940 }
11941
11942 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11943 {
11944         struct tg3 *tp = netdev_priv(dev);
11945         int ret, cpmu_restore = 0;
11946         u8  *pd;
11947         u32 i, offset, len, b_offset, b_count, cpmu_val = 0;
11948         __be32 val;
11949
11950         if (tg3_flag(tp, NO_NVRAM))
11951                 return -EINVAL;
11952
11953         offset = eeprom->offset;
11954         len = eeprom->len;
11955         eeprom->len = 0;
11956
11957         eeprom->magic = TG3_EEPROM_MAGIC;
11958
11959         /* Override clock, link aware and link idle modes */
11960         if (tg3_flag(tp, CPMU_PRESENT)) {
11961                 cpmu_val = tr32(TG3_CPMU_CTRL);
11962                 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE |
11963                                 CPMU_CTRL_LINK_IDLE_MODE)) {
11964                         tw32(TG3_CPMU_CTRL, cpmu_val &
11965                                             ~(CPMU_CTRL_LINK_AWARE_MODE |
11966                                              CPMU_CTRL_LINK_IDLE_MODE));
11967                         cpmu_restore = 1;
11968                 }
11969         }
11970         tg3_override_clk(tp);
11971
11972         if (offset & 3) {
11973                 /* adjustments to start on required 4 byte boundary */
11974                 b_offset = offset & 3;
11975                 b_count = 4 - b_offset;
11976                 if (b_count > len) {
11977                         /* i.e. offset=1 len=2 */
11978                         b_count = len;
11979                 }
11980                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
11981                 if (ret)
11982                         goto eeprom_done;
11983                 memcpy(data, ((char *)&val) + b_offset, b_count);
11984                 len -= b_count;
11985                 offset += b_count;
11986                 eeprom->len += b_count;
11987         }
11988
11989         /* read bytes up to the last 4 byte boundary */
11990         pd = &data[eeprom->len];
11991         for (i = 0; i < (len - (len & 3)); i += 4) {
11992                 ret = tg3_nvram_read_be32(tp, offset + i, &val);
11993                 if (ret) {
11994                         if (i)
11995                                 i -= 4;
11996                         eeprom->len += i;
11997                         goto eeprom_done;
11998                 }
11999                 memcpy(pd + i, &val, 4);
12000                 if (need_resched()) {
12001                         if (signal_pending(current)) {
12002                                 eeprom->len += i;
12003                                 ret = -EINTR;
12004                                 goto eeprom_done;
12005                         }
12006                         cond_resched();
12007                 }
12008         }
12009         eeprom->len += i;
12010
12011         if (len & 3) {
12012                 /* read last bytes not ending on 4 byte boundary */
12013                 pd = &data[eeprom->len];
12014                 b_count = len & 3;
12015                 b_offset = offset + len - b_count;
12016                 ret = tg3_nvram_read_be32(tp, b_offset, &val);
12017                 if (ret)
12018                         goto eeprom_done;
12019                 memcpy(pd, &val, b_count);
12020                 eeprom->len += b_count;
12021         }
12022         ret = 0;
12023
12024 eeprom_done:
12025         /* Restore clock, link aware and link idle modes */
12026         tg3_restore_clk(tp);
12027         if (cpmu_restore)
12028                 tw32(TG3_CPMU_CTRL, cpmu_val);
12029
12030         return ret;
12031 }
12032
12033 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
12034 {
12035         struct tg3 *tp = netdev_priv(dev);
12036         int ret;
12037         u32 offset, len, b_offset, odd_len;
12038         u8 *buf;
12039         __be32 start = 0, end;
12040
12041         if (tg3_flag(tp, NO_NVRAM) ||
12042             eeprom->magic != TG3_EEPROM_MAGIC)
12043                 return -EINVAL;
12044
12045         offset = eeprom->offset;
12046         len = eeprom->len;
12047
12048         if ((b_offset = (offset & 3))) {
12049                 /* adjustments to start on required 4 byte boundary */
12050                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
12051                 if (ret)
12052                         return ret;
12053                 len += b_offset;
12054                 offset &= ~3;
12055                 if (len < 4)
12056                         len = 4;
12057         }
12058
12059         odd_len = 0;
12060         if (len & 3) {
12061                 /* adjustments to end on required 4 byte boundary */
12062                 odd_len = 1;
12063                 len = (len + 3) & ~3;
12064                 ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
12065                 if (ret)
12066                         return ret;
12067         }
12068
12069         buf = data;
12070         if (b_offset || odd_len) {
12071                 buf = kmalloc(len, GFP_KERNEL);
12072                 if (!buf)
12073                         return -ENOMEM;
12074                 if (b_offset)
12075                         memcpy(buf, &start, 4);
12076                 if (odd_len)
12077                         memcpy(buf+len-4, &end, 4);
12078                 memcpy(buf + b_offset, data, eeprom->len);
12079         }
12080
12081         ret = tg3_nvram_write_block(tp, offset, len, buf);
12082
12083         if (buf != data)
12084                 kfree(buf);
12085
12086         return ret;
12087 }
12088
12089 static int tg3_get_link_ksettings(struct net_device *dev,
12090                                   struct ethtool_link_ksettings *cmd)
12091 {
12092         struct tg3 *tp = netdev_priv(dev);
12093         u32 supported, advertising;
12094
12095         if (tg3_flag(tp, USE_PHYLIB)) {
12096                 struct phy_device *phydev;
12097                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12098                         return -EAGAIN;
12099                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12100                 phy_ethtool_ksettings_get(phydev, cmd);
12101
12102                 return 0;
12103         }
12104
12105         supported = (SUPPORTED_Autoneg);
12106
12107         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12108                 supported |= (SUPPORTED_1000baseT_Half |
12109                               SUPPORTED_1000baseT_Full);
12110
12111         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12112                 supported |= (SUPPORTED_100baseT_Half |
12113                               SUPPORTED_100baseT_Full |
12114                               SUPPORTED_10baseT_Half |
12115                               SUPPORTED_10baseT_Full |
12116                               SUPPORTED_TP);
12117                 cmd->base.port = PORT_TP;
12118         } else {
12119                 supported |= SUPPORTED_FIBRE;
12120                 cmd->base.port = PORT_FIBRE;
12121         }
12122         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
12123                                                 supported);
12124
12125         advertising = tp->link_config.advertising;
12126         if (tg3_flag(tp, PAUSE_AUTONEG)) {
12127                 if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
12128                         if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12129                                 advertising |= ADVERTISED_Pause;
12130                         } else {
12131                                 advertising |= ADVERTISED_Pause |
12132                                         ADVERTISED_Asym_Pause;
12133                         }
12134                 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12135                         advertising |= ADVERTISED_Asym_Pause;
12136                 }
12137         }
12138         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
12139                                                 advertising);
12140
12141         if (netif_running(dev) && tp->link_up) {
12142                 cmd->base.speed = tp->link_config.active_speed;
12143                 cmd->base.duplex = tp->link_config.active_duplex;
12144                 ethtool_convert_legacy_u32_to_link_mode(
12145                         cmd->link_modes.lp_advertising,
12146                         tp->link_config.rmt_adv);
12147
12148                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12149                         if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
12150                                 cmd->base.eth_tp_mdix = ETH_TP_MDI_X;
12151                         else
12152                                 cmd->base.eth_tp_mdix = ETH_TP_MDI;
12153                 }
12154         } else {
12155                 cmd->base.speed = SPEED_UNKNOWN;
12156                 cmd->base.duplex = DUPLEX_UNKNOWN;
12157                 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
12158         }
12159         cmd->base.phy_address = tp->phy_addr;
12160         cmd->base.autoneg = tp->link_config.autoneg;
12161         return 0;
12162 }
12163
12164 static int tg3_set_link_ksettings(struct net_device *dev,
12165                                   const struct ethtool_link_ksettings *cmd)
12166 {
12167         struct tg3 *tp = netdev_priv(dev);
12168         u32 speed = cmd->base.speed;
12169         u32 advertising;
12170
12171         if (tg3_flag(tp, USE_PHYLIB)) {
12172                 struct phy_device *phydev;
12173                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12174                         return -EAGAIN;
12175                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12176                 return phy_ethtool_ksettings_set(phydev, cmd);
12177         }
12178
12179         if (cmd->base.autoneg != AUTONEG_ENABLE &&
12180             cmd->base.autoneg != AUTONEG_DISABLE)
12181                 return -EINVAL;
12182
12183         if (cmd->base.autoneg == AUTONEG_DISABLE &&
12184             cmd->base.duplex != DUPLEX_FULL &&
12185             cmd->base.duplex != DUPLEX_HALF)
12186                 return -EINVAL;
12187
12188         ethtool_convert_link_mode_to_legacy_u32(&advertising,
12189                                                 cmd->link_modes.advertising);
12190
12191         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12192                 u32 mask = ADVERTISED_Autoneg |
12193                            ADVERTISED_Pause |
12194                            ADVERTISED_Asym_Pause;
12195
12196                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12197                         mask |= ADVERTISED_1000baseT_Half |
12198                                 ADVERTISED_1000baseT_Full;
12199
12200                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
12201                         mask |= ADVERTISED_100baseT_Half |
12202                                 ADVERTISED_100baseT_Full |
12203                                 ADVERTISED_10baseT_Half |
12204                                 ADVERTISED_10baseT_Full |
12205                                 ADVERTISED_TP;
12206                 else
12207                         mask |= ADVERTISED_FIBRE;
12208
12209                 if (advertising & ~mask)
12210                         return -EINVAL;
12211
12212                 mask &= (ADVERTISED_1000baseT_Half |
12213                          ADVERTISED_1000baseT_Full |
12214                          ADVERTISED_100baseT_Half |
12215                          ADVERTISED_100baseT_Full |
12216                          ADVERTISED_10baseT_Half |
12217                          ADVERTISED_10baseT_Full);
12218
12219                 advertising &= mask;
12220         } else {
12221                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
12222                         if (speed != SPEED_1000)
12223                                 return -EINVAL;
12224
12225                         if (cmd->base.duplex != DUPLEX_FULL)
12226                                 return -EINVAL;
12227                 } else {
12228                         if (speed != SPEED_100 &&
12229                             speed != SPEED_10)
12230                                 return -EINVAL;
12231                 }
12232         }
12233
12234         tg3_full_lock(tp, 0);
12235
12236         tp->link_config.autoneg = cmd->base.autoneg;
12237         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12238                 tp->link_config.advertising = (advertising |
12239                                               ADVERTISED_Autoneg);
12240                 tp->link_config.speed = SPEED_UNKNOWN;
12241                 tp->link_config.duplex = DUPLEX_UNKNOWN;
12242         } else {
12243                 tp->link_config.advertising = 0;
12244                 tp->link_config.speed = speed;
12245                 tp->link_config.duplex = cmd->base.duplex;
12246         }
12247
12248         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12249
12250         tg3_warn_mgmt_link_flap(tp);
12251
12252         if (netif_running(dev))
12253                 tg3_setup_phy(tp, true);
12254
12255         tg3_full_unlock(tp);
12256
12257         return 0;
12258 }
12259
12260 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
12261 {
12262         struct tg3 *tp = netdev_priv(dev);
12263
12264         strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
12265         strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
12266         strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
12267         strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
12268 }
12269
12270 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12271 {
12272         struct tg3 *tp = netdev_priv(dev);
12273
12274         if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
12275                 wol->supported = WAKE_MAGIC;
12276         else
12277                 wol->supported = 0;
12278         wol->wolopts = 0;
12279         if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
12280                 wol->wolopts = WAKE_MAGIC;
12281         memset(&wol->sopass, 0, sizeof(wol->sopass));
12282 }
12283
12284 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12285 {
12286         struct tg3 *tp = netdev_priv(dev);
12287         struct device *dp = &tp->pdev->dev;
12288
12289         if (wol->wolopts & ~WAKE_MAGIC)
12290                 return -EINVAL;
12291         if ((wol->wolopts & WAKE_MAGIC) &&
12292             !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
12293                 return -EINVAL;
12294
12295         device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
12296
12297         if (device_may_wakeup(dp))
12298                 tg3_flag_set(tp, WOL_ENABLE);
12299         else
12300                 tg3_flag_clear(tp, WOL_ENABLE);
12301
12302         return 0;
12303 }
12304
12305 static u32 tg3_get_msglevel(struct net_device *dev)
12306 {
12307         struct tg3 *tp = netdev_priv(dev);
12308         return tp->msg_enable;
12309 }
12310
12311 static void tg3_set_msglevel(struct net_device *dev, u32 value)
12312 {
12313         struct tg3 *tp = netdev_priv(dev);
12314         tp->msg_enable = value;
12315 }
12316
12317 static int tg3_nway_reset(struct net_device *dev)
12318 {
12319         struct tg3 *tp = netdev_priv(dev);
12320         int r;
12321
12322         if (!netif_running(dev))
12323                 return -EAGAIN;
12324
12325         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12326                 return -EINVAL;
12327
12328         tg3_warn_mgmt_link_flap(tp);
12329
12330         if (tg3_flag(tp, USE_PHYLIB)) {
12331                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12332                         return -EAGAIN;
12333                 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
12334         } else {
12335                 u32 bmcr;
12336
12337                 spin_lock_bh(&tp->lock);
12338                 r = -EINVAL;
12339                 tg3_readphy(tp, MII_BMCR, &bmcr);
12340                 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
12341                     ((bmcr & BMCR_ANENABLE) ||
12342                      (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
12343                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
12344                                                    BMCR_ANENABLE);
12345                         r = 0;
12346                 }
12347                 spin_unlock_bh(&tp->lock);
12348         }
12349
12350         return r;
12351 }
12352
12353 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12354 {
12355         struct tg3 *tp = netdev_priv(dev);
12356
12357         ering->rx_max_pending = tp->rx_std_ring_mask;
12358         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12359                 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
12360         else
12361                 ering->rx_jumbo_max_pending = 0;
12362
12363         ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
12364
12365         ering->rx_pending = tp->rx_pending;
12366         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12367                 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
12368         else
12369                 ering->rx_jumbo_pending = 0;
12370
12371         ering->tx_pending = tp->napi[0].tx_pending;
12372 }
12373
12374 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12375 {
12376         struct tg3 *tp = netdev_priv(dev);
12377         int i, irq_sync = 0, err = 0;
12378
12379         if ((ering->rx_pending > tp->rx_std_ring_mask) ||
12380             (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
12381             (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
12382             (ering->tx_pending <= MAX_SKB_FRAGS) ||
12383             (tg3_flag(tp, TSO_BUG) &&
12384              (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
12385                 return -EINVAL;
12386
12387         if (netif_running(dev)) {
12388                 tg3_phy_stop(tp);
12389                 tg3_netif_stop(tp);
12390                 irq_sync = 1;
12391         }
12392
12393         tg3_full_lock(tp, irq_sync);
12394
12395         tp->rx_pending = ering->rx_pending;
12396
12397         if (tg3_flag(tp, MAX_RXPEND_64) &&
12398             tp->rx_pending > 63)
12399                 tp->rx_pending = 63;
12400
12401         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12402                 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
12403
12404         for (i = 0; i < tp->irq_max; i++)
12405                 tp->napi[i].tx_pending = ering->tx_pending;
12406
12407         if (netif_running(dev)) {
12408                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12409                 err = tg3_restart_hw(tp, false);
12410                 if (!err)
12411                         tg3_netif_start(tp);
12412         }
12413
12414         tg3_full_unlock(tp);
12415
12416         if (irq_sync && !err)
12417                 tg3_phy_start(tp);
12418
12419         return err;
12420 }
12421
12422 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12423 {
12424         struct tg3 *tp = netdev_priv(dev);
12425
12426         epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
12427
12428         if (tp->link_config.flowctrl & FLOW_CTRL_RX)
12429                 epause->rx_pause = 1;
12430         else
12431                 epause->rx_pause = 0;
12432
12433         if (tp->link_config.flowctrl & FLOW_CTRL_TX)
12434                 epause->tx_pause = 1;
12435         else
12436                 epause->tx_pause = 0;
12437 }
12438
12439 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12440 {
12441         struct tg3 *tp = netdev_priv(dev);
12442         int err = 0;
12443
12444         if (tp->link_config.autoneg == AUTONEG_ENABLE)
12445                 tg3_warn_mgmt_link_flap(tp);
12446
12447         if (tg3_flag(tp, USE_PHYLIB)) {
12448                 u32 newadv;
12449                 struct phy_device *phydev;
12450
12451                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12452
12453                 if (!(phydev->supported & SUPPORTED_Pause) ||
12454                     (!(phydev->supported & SUPPORTED_Asym_Pause) &&
12455                      (epause->rx_pause != epause->tx_pause)))
12456                         return -EINVAL;
12457
12458                 tp->link_config.flowctrl = 0;
12459                 if (epause->rx_pause) {
12460                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12461
12462                         if (epause->tx_pause) {
12463                                 tp->link_config.flowctrl |= FLOW_CTRL_TX;
12464                                 newadv = ADVERTISED_Pause;
12465                         } else
12466                                 newadv = ADVERTISED_Pause |
12467                                          ADVERTISED_Asym_Pause;
12468                 } else if (epause->tx_pause) {
12469                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12470                         newadv = ADVERTISED_Asym_Pause;
12471                 } else
12472                         newadv = 0;
12473
12474                 if (epause->autoneg)
12475                         tg3_flag_set(tp, PAUSE_AUTONEG);
12476                 else
12477                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12478
12479                 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
12480                         u32 oldadv = phydev->advertising &
12481                                      (ADVERTISED_Pause | ADVERTISED_Asym_Pause);
12482                         if (oldadv != newadv) {
12483                                 phydev->advertising &=
12484                                         ~(ADVERTISED_Pause |
12485                                           ADVERTISED_Asym_Pause);
12486                                 phydev->advertising |= newadv;
12487                                 if (phydev->autoneg) {
12488                                         /*
12489                                          * Always renegotiate the link to
12490                                          * inform our link partner of our
12491                                          * flow control settings, even if the
12492                                          * flow control is forced.  Let
12493                                          * tg3_adjust_link() do the final
12494                                          * flow control setup.
12495                                          */
12496                                         return phy_start_aneg(phydev);
12497                                 }
12498                         }
12499
12500                         if (!epause->autoneg)
12501                                 tg3_setup_flow_control(tp, 0, 0);
12502                 } else {
12503                         tp->link_config.advertising &=
12504                                         ~(ADVERTISED_Pause |
12505                                           ADVERTISED_Asym_Pause);
12506                         tp->link_config.advertising |= newadv;
12507                 }
12508         } else {
12509                 int irq_sync = 0;
12510
12511                 if (netif_running(dev)) {
12512                         tg3_netif_stop(tp);
12513                         irq_sync = 1;
12514                 }
12515
12516                 tg3_full_lock(tp, irq_sync);
12517
12518                 if (epause->autoneg)
12519                         tg3_flag_set(tp, PAUSE_AUTONEG);
12520                 else
12521                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12522                 if (epause->rx_pause)
12523                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12524                 else
12525                         tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
12526                 if (epause->tx_pause)
12527                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12528                 else
12529                         tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
12530
12531                 if (netif_running(dev)) {
12532                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12533                         err = tg3_restart_hw(tp, false);
12534                         if (!err)
12535                                 tg3_netif_start(tp);
12536                 }
12537
12538                 tg3_full_unlock(tp);
12539         }
12540
12541         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12542
12543         return err;
12544 }
12545
12546 static int tg3_get_sset_count(struct net_device *dev, int sset)
12547 {
12548         switch (sset) {
12549         case ETH_SS_TEST:
12550                 return TG3_NUM_TEST;
12551         case ETH_SS_STATS:
12552                 return TG3_NUM_STATS;
12553         default:
12554                 return -EOPNOTSUPP;
12555         }
12556 }
12557
12558 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
12559                          u32 *rules __always_unused)
12560 {
12561         struct tg3 *tp = netdev_priv(dev);
12562
12563         if (!tg3_flag(tp, SUPPORT_MSIX))
12564                 return -EOPNOTSUPP;
12565
12566         switch (info->cmd) {
12567         case ETHTOOL_GRXRINGS:
12568                 if (netif_running(tp->dev))
12569                         info->data = tp->rxq_cnt;
12570                 else {
12571                         info->data = num_online_cpus();
12572                         if (info->data > TG3_RSS_MAX_NUM_QS)
12573                                 info->data = TG3_RSS_MAX_NUM_QS;
12574                 }
12575
12576                 return 0;
12577
12578         default:
12579                 return -EOPNOTSUPP;
12580         }
12581 }
12582
12583 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
12584 {
12585         u32 size = 0;
12586         struct tg3 *tp = netdev_priv(dev);
12587
12588         if (tg3_flag(tp, SUPPORT_MSIX))
12589                 size = TG3_RSS_INDIR_TBL_SIZE;
12590
12591         return size;
12592 }
12593
12594 static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc)
12595 {
12596         struct tg3 *tp = netdev_priv(dev);
12597         int i;
12598
12599         if (hfunc)
12600                 *hfunc = ETH_RSS_HASH_TOP;
12601         if (!indir)
12602                 return 0;
12603
12604         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12605                 indir[i] = tp->rss_ind_tbl[i];
12606
12607         return 0;
12608 }
12609
12610 static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key,
12611                         const u8 hfunc)
12612 {
12613         struct tg3 *tp = netdev_priv(dev);
12614         size_t i;
12615
12616         /* We require at least one supported parameter to be changed and no
12617          * change in any of the unsupported parameters
12618          */
12619         if (key ||
12620             (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
12621                 return -EOPNOTSUPP;
12622
12623         if (!indir)
12624                 return 0;
12625
12626         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12627                 tp->rss_ind_tbl[i] = indir[i];
12628
12629         if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
12630                 return 0;
12631
12632         /* It is legal to write the indirection
12633          * table while the device is running.
12634          */
12635         tg3_full_lock(tp, 0);
12636         tg3_rss_write_indir_tbl(tp);
12637         tg3_full_unlock(tp);
12638
12639         return 0;
12640 }
12641
12642 static void tg3_get_channels(struct net_device *dev,
12643                              struct ethtool_channels *channel)
12644 {
12645         struct tg3 *tp = netdev_priv(dev);
12646         u32 deflt_qs = netif_get_num_default_rss_queues();
12647
12648         channel->max_rx = tp->rxq_max;
12649         channel->max_tx = tp->txq_max;
12650
12651         if (netif_running(dev)) {
12652                 channel->rx_count = tp->rxq_cnt;
12653                 channel->tx_count = tp->txq_cnt;
12654         } else {
12655                 if (tp->rxq_req)
12656                         channel->rx_count = tp->rxq_req;
12657                 else
12658                         channel->rx_count = min(deflt_qs, tp->rxq_max);
12659
12660                 if (tp->txq_req)
12661                         channel->tx_count = tp->txq_req;
12662                 else
12663                         channel->tx_count = min(deflt_qs, tp->txq_max);
12664         }
12665 }
12666
12667 static int tg3_set_channels(struct net_device *dev,
12668                             struct ethtool_channels *channel)
12669 {
12670         struct tg3 *tp = netdev_priv(dev);
12671
12672         if (!tg3_flag(tp, SUPPORT_MSIX))
12673                 return -EOPNOTSUPP;
12674
12675         if (channel->rx_count > tp->rxq_max ||
12676             channel->tx_count > tp->txq_max)
12677                 return -EINVAL;
12678
12679         tp->rxq_req = channel->rx_count;
12680         tp->txq_req = channel->tx_count;
12681
12682         if (!netif_running(dev))
12683                 return 0;
12684
12685         tg3_stop(tp);
12686
12687         tg3_carrier_off(tp);
12688
12689         tg3_start(tp, true, false, false);
12690
12691         return 0;
12692 }
12693
12694 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
12695 {
12696         switch (stringset) {
12697         case ETH_SS_STATS:
12698                 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
12699                 break;
12700         case ETH_SS_TEST:
12701                 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
12702                 break;
12703         default:
12704                 WARN_ON(1);     /* we need a WARN() */
12705                 break;
12706         }
12707 }
12708
12709 static int tg3_set_phys_id(struct net_device *dev,
12710                             enum ethtool_phys_id_state state)
12711 {
12712         struct tg3 *tp = netdev_priv(dev);
12713
12714         if (!netif_running(tp->dev))
12715                 return -EAGAIN;
12716
12717         switch (state) {
12718         case ETHTOOL_ID_ACTIVE:
12719                 return 1;       /* cycle on/off once per second */
12720
12721         case ETHTOOL_ID_ON:
12722                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12723                      LED_CTRL_1000MBPS_ON |
12724                      LED_CTRL_100MBPS_ON |
12725                      LED_CTRL_10MBPS_ON |
12726                      LED_CTRL_TRAFFIC_OVERRIDE |
12727                      LED_CTRL_TRAFFIC_BLINK |
12728                      LED_CTRL_TRAFFIC_LED);
12729                 break;
12730
12731         case ETHTOOL_ID_OFF:
12732                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12733                      LED_CTRL_TRAFFIC_OVERRIDE);
12734                 break;
12735
12736         case ETHTOOL_ID_INACTIVE:
12737                 tw32(MAC_LED_CTRL, tp->led_ctrl);
12738                 break;
12739         }
12740
12741         return 0;
12742 }
12743
12744 static void tg3_get_ethtool_stats(struct net_device *dev,
12745                                    struct ethtool_stats *estats, u64 *tmp_stats)
12746 {
12747         struct tg3 *tp = netdev_priv(dev);
12748
12749         if (tp->hw_stats)
12750                 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
12751         else
12752                 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
12753 }
12754
12755 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
12756 {
12757         int i;
12758         __be32 *buf;
12759         u32 offset = 0, len = 0;
12760         u32 magic, val;
12761
12762         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
12763                 return NULL;
12764
12765         if (magic == TG3_EEPROM_MAGIC) {
12766                 for (offset = TG3_NVM_DIR_START;
12767                      offset < TG3_NVM_DIR_END;
12768                      offset += TG3_NVM_DIRENT_SIZE) {
12769                         if (tg3_nvram_read(tp, offset, &val))
12770                                 return NULL;
12771
12772                         if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
12773                             TG3_NVM_DIRTYPE_EXTVPD)
12774                                 break;
12775                 }
12776
12777                 if (offset != TG3_NVM_DIR_END) {
12778                         len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
12779                         if (tg3_nvram_read(tp, offset + 4, &offset))
12780                                 return NULL;
12781
12782                         offset = tg3_nvram_logical_addr(tp, offset);
12783                 }
12784         }
12785
12786         if (!offset || !len) {
12787                 offset = TG3_NVM_VPD_OFF;
12788                 len = TG3_NVM_VPD_LEN;
12789         }
12790
12791         buf = kmalloc(len, GFP_KERNEL);
12792         if (buf == NULL)
12793                 return NULL;
12794
12795         if (magic == TG3_EEPROM_MAGIC) {
12796                 for (i = 0; i < len; i += 4) {
12797                         /* The data is in little-endian format in NVRAM.
12798                          * Use the big-endian read routines to preserve
12799                          * the byte order as it exists in NVRAM.
12800                          */
12801                         if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
12802                                 goto error;
12803                 }
12804         } else {
12805                 u8 *ptr;
12806                 ssize_t cnt;
12807                 unsigned int pos = 0;
12808
12809                 ptr = (u8 *)&buf[0];
12810                 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
12811                         cnt = pci_read_vpd(tp->pdev, pos,
12812                                            len - pos, ptr);
12813                         if (cnt == -ETIMEDOUT || cnt == -EINTR)
12814                                 cnt = 0;
12815                         else if (cnt < 0)
12816                                 goto error;
12817                 }
12818                 if (pos != len)
12819                         goto error;
12820         }
12821
12822         *vpdlen = len;
12823
12824         return buf;
12825
12826 error:
12827         kfree(buf);
12828         return NULL;
12829 }
12830
12831 #define NVRAM_TEST_SIZE 0x100
12832 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE   0x14
12833 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE   0x18
12834 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE   0x1c
12835 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE   0x20
12836 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE   0x24
12837 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE   0x50
12838 #define NVRAM_SELFBOOT_HW_SIZE 0x20
12839 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
12840
12841 static int tg3_test_nvram(struct tg3 *tp)
12842 {
12843         u32 csum, magic, len;
12844         __be32 *buf;
12845         int i, j, k, err = 0, size;
12846
12847         if (tg3_flag(tp, NO_NVRAM))
12848                 return 0;
12849
12850         if (tg3_nvram_read(tp, 0, &magic) != 0)
12851                 return -EIO;
12852
12853         if (magic == TG3_EEPROM_MAGIC)
12854                 size = NVRAM_TEST_SIZE;
12855         else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
12856                 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
12857                     TG3_EEPROM_SB_FORMAT_1) {
12858                         switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
12859                         case TG3_EEPROM_SB_REVISION_0:
12860                                 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
12861                                 break;
12862                         case TG3_EEPROM_SB_REVISION_2:
12863                                 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
12864                                 break;
12865                         case TG3_EEPROM_SB_REVISION_3:
12866                                 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
12867                                 break;
12868                         case TG3_EEPROM_SB_REVISION_4:
12869                                 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
12870                                 break;
12871                         case TG3_EEPROM_SB_REVISION_5:
12872                                 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
12873                                 break;
12874                         case TG3_EEPROM_SB_REVISION_6:
12875                                 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
12876                                 break;
12877                         default:
12878                                 return -EIO;
12879                         }
12880                 } else
12881                         return 0;
12882         } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
12883                 size = NVRAM_SELFBOOT_HW_SIZE;
12884         else
12885                 return -EIO;
12886
12887         buf = kmalloc(size, GFP_KERNEL);
12888         if (buf == NULL)
12889                 return -ENOMEM;
12890
12891         err = -EIO;
12892         for (i = 0, j = 0; i < size; i += 4, j++) {
12893                 err = tg3_nvram_read_be32(tp, i, &buf[j]);
12894                 if (err)
12895                         break;
12896         }
12897         if (i < size)
12898                 goto out;
12899
12900         /* Selfboot format */
12901         magic = be32_to_cpu(buf[0]);
12902         if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
12903             TG3_EEPROM_MAGIC_FW) {
12904                 u8 *buf8 = (u8 *) buf, csum8 = 0;
12905
12906                 if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
12907                     TG3_EEPROM_SB_REVISION_2) {
12908                         /* For rev 2, the csum doesn't include the MBA. */
12909                         for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
12910                                 csum8 += buf8[i];
12911                         for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
12912                                 csum8 += buf8[i];
12913                 } else {
12914                         for (i = 0; i < size; i++)
12915                                 csum8 += buf8[i];
12916                 }
12917
12918                 if (csum8 == 0) {
12919                         err = 0;
12920                         goto out;
12921                 }
12922
12923                 err = -EIO;
12924                 goto out;
12925         }
12926
12927         if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
12928             TG3_EEPROM_MAGIC_HW) {
12929                 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
12930                 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
12931                 u8 *buf8 = (u8 *) buf;
12932
12933                 /* Separate the parity bits and the data bytes.  */
12934                 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
12935                         if ((i == 0) || (i == 8)) {
12936                                 int l;
12937                                 u8 msk;
12938
12939                                 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
12940                                         parity[k++] = buf8[i] & msk;
12941                                 i++;
12942                         } else if (i == 16) {
12943                                 int l;
12944                                 u8 msk;
12945
12946                                 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
12947                                         parity[k++] = buf8[i] & msk;
12948                                 i++;
12949
12950                                 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
12951                                         parity[k++] = buf8[i] & msk;
12952                                 i++;
12953                         }
12954                         data[j++] = buf8[i];
12955                 }
12956
12957                 err = -EIO;
12958                 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
12959                         u8 hw8 = hweight8(data[i]);
12960
12961                         if ((hw8 & 0x1) && parity[i])
12962                                 goto out;
12963                         else if (!(hw8 & 0x1) && !parity[i])
12964                                 goto out;
12965                 }
12966                 err = 0;
12967                 goto out;
12968         }
12969
12970         err = -EIO;
12971
12972         /* Bootstrap checksum at offset 0x10 */
12973         csum = calc_crc((unsigned char *) buf, 0x10);
12974         if (csum != le32_to_cpu(buf[0x10/4]))
12975                 goto out;
12976
12977         /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
12978         csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
12979         if (csum != le32_to_cpu(buf[0xfc/4]))
12980                 goto out;
12981
12982         kfree(buf);
12983
12984         buf = tg3_vpd_readblock(tp, &len);
12985         if (!buf)
12986                 return -ENOMEM;
12987
12988         i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
12989         if (i > 0) {
12990                 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
12991                 if (j < 0)
12992                         goto out;
12993
12994                 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
12995                         goto out;
12996
12997                 i += PCI_VPD_LRDT_TAG_SIZE;
12998                 j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
12999                                               PCI_VPD_RO_KEYWORD_CHKSUM);
13000                 if (j > 0) {
13001                         u8 csum8 = 0;
13002
13003                         j += PCI_VPD_INFO_FLD_HDR_SIZE;
13004
13005                         for (i = 0; i <= j; i++)
13006                                 csum8 += ((u8 *)buf)[i];
13007
13008                         if (csum8)
13009                                 goto out;
13010                 }
13011         }
13012
13013         err = 0;
13014
13015 out:
13016         kfree(buf);
13017         return err;
13018 }
13019
13020 #define TG3_SERDES_TIMEOUT_SEC  2
13021 #define TG3_COPPER_TIMEOUT_SEC  6
13022
13023 static int tg3_test_link(struct tg3 *tp)
13024 {
13025         int i, max;
13026
13027         if (!netif_running(tp->dev))
13028                 return -ENODEV;
13029
13030         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
13031                 max = TG3_SERDES_TIMEOUT_SEC;
13032         else
13033                 max = TG3_COPPER_TIMEOUT_SEC;
13034
13035         for (i = 0; i < max; i++) {
13036                 if (tp->link_up)
13037                         return 0;
13038
13039                 if (msleep_interruptible(1000))
13040                         break;
13041         }
13042
13043         return -EIO;
13044 }
13045
13046 /* Only test the commonly used registers */
13047 static int tg3_test_registers(struct tg3 *tp)
13048 {
13049         int i, is_5705, is_5750;
13050         u32 offset, read_mask, write_mask, val, save_val, read_val;
13051         static struct {
13052                 u16 offset;
13053                 u16 flags;
13054 #define TG3_FL_5705     0x1
13055 #define TG3_FL_NOT_5705 0x2
13056 #define TG3_FL_NOT_5788 0x4
13057 #define TG3_FL_NOT_5750 0x8
13058                 u32 read_mask;
13059                 u32 write_mask;
13060         } reg_tbl[] = {
13061                 /* MAC Control Registers */
13062                 { MAC_MODE, TG3_FL_NOT_5705,
13063                         0x00000000, 0x00ef6f8c },
13064                 { MAC_MODE, TG3_FL_5705,
13065                         0x00000000, 0x01ef6b8c },
13066                 { MAC_STATUS, TG3_FL_NOT_5705,
13067                         0x03800107, 0x00000000 },
13068                 { MAC_STATUS, TG3_FL_5705,
13069                         0x03800100, 0x00000000 },
13070                 { MAC_ADDR_0_HIGH, 0x0000,
13071                         0x00000000, 0x0000ffff },
13072                 { MAC_ADDR_0_LOW, 0x0000,
13073                         0x00000000, 0xffffffff },
13074                 { MAC_RX_MTU_SIZE, 0x0000,
13075                         0x00000000, 0x0000ffff },
13076                 { MAC_TX_MODE, 0x0000,
13077                         0x00000000, 0x00000070 },
13078                 { MAC_TX_LENGTHS, 0x0000,
13079                         0x00000000, 0x00003fff },
13080                 { MAC_RX_MODE, TG3_FL_NOT_5705,
13081                         0x00000000, 0x000007fc },
13082                 { MAC_RX_MODE, TG3_FL_5705,
13083                         0x00000000, 0x000007dc },
13084                 { MAC_HASH_REG_0, 0x0000,
13085                         0x00000000, 0xffffffff },
13086                 { MAC_HASH_REG_1, 0x0000,
13087                         0x00000000, 0xffffffff },
13088                 { MAC_HASH_REG_2, 0x0000,
13089                         0x00000000, 0xffffffff },
13090                 { MAC_HASH_REG_3, 0x0000,
13091                         0x00000000, 0xffffffff },
13092
13093                 /* Receive Data and Receive BD Initiator Control Registers. */
13094                 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
13095                         0x00000000, 0xffffffff },
13096                 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
13097                         0x00000000, 0xffffffff },
13098                 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
13099                         0x00000000, 0x00000003 },
13100                 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
13101                         0x00000000, 0xffffffff },
13102                 { RCVDBDI_STD_BD+0, 0x0000,
13103                         0x00000000, 0xffffffff },
13104                 { RCVDBDI_STD_BD+4, 0x0000,
13105                         0x00000000, 0xffffffff },
13106                 { RCVDBDI_STD_BD+8, 0x0000,
13107                         0x00000000, 0xffff0002 },
13108                 { RCVDBDI_STD_BD+0xc, 0x0000,
13109                         0x00000000, 0xffffffff },
13110
13111                 /* Receive BD Initiator Control Registers. */
13112                 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
13113                         0x00000000, 0xffffffff },
13114                 { RCVBDI_STD_THRESH, TG3_FL_5705,
13115                         0x00000000, 0x000003ff },
13116                 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
13117                         0x00000000, 0xffffffff },
13118
13119                 /* Host Coalescing Control Registers. */
13120                 { HOSTCC_MODE, TG3_FL_NOT_5705,
13121                         0x00000000, 0x00000004 },
13122                 { HOSTCC_MODE, TG3_FL_5705,
13123                         0x00000000, 0x000000f6 },
13124                 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
13125                         0x00000000, 0xffffffff },
13126                 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
13127                         0x00000000, 0x000003ff },
13128                 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
13129                         0x00000000, 0xffffffff },
13130                 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
13131                         0x00000000, 0x000003ff },
13132                 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
13133                         0x00000000, 0xffffffff },
13134                 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13135                         0x00000000, 0x000000ff },
13136                 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
13137                         0x00000000, 0xffffffff },
13138                 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13139                         0x00000000, 0x000000ff },
13140                 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
13141                         0x00000000, 0xffffffff },
13142                 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
13143                         0x00000000, 0xffffffff },
13144                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13145                         0x00000000, 0xffffffff },
13146                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13147                         0x00000000, 0x000000ff },
13148                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13149                         0x00000000, 0xffffffff },
13150                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13151                         0x00000000, 0x000000ff },
13152                 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
13153                         0x00000000, 0xffffffff },
13154                 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
13155                         0x00000000, 0xffffffff },
13156                 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
13157                         0x00000000, 0xffffffff },
13158                 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
13159                         0x00000000, 0xffffffff },
13160                 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
13161                         0x00000000, 0xffffffff },
13162                 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
13163                         0xffffffff, 0x00000000 },
13164                 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
13165                         0xffffffff, 0x00000000 },
13166
13167                 /* Buffer Manager Control Registers. */
13168                 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
13169                         0x00000000, 0x007fff80 },
13170                 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
13171                         0x00000000, 0x007fffff },
13172                 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
13173                         0x00000000, 0x0000003f },
13174                 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
13175                         0x00000000, 0x000001ff },
13176                 { BUFMGR_MB_HIGH_WATER, 0x0000,
13177                         0x00000000, 0x000001ff },
13178                 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
13179                         0xffffffff, 0x00000000 },
13180                 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
13181                         0xffffffff, 0x00000000 },
13182
13183                 /* Mailbox Registers */
13184                 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
13185                         0x00000000, 0x000001ff },
13186                 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
13187                         0x00000000, 0x000001ff },
13188                 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
13189                         0x00000000, 0x000007ff },
13190                 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
13191                         0x00000000, 0x000001ff },
13192
13193                 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
13194         };
13195
13196         is_5705 = is_5750 = 0;
13197         if (tg3_flag(tp, 5705_PLUS)) {
13198                 is_5705 = 1;
13199                 if (tg3_flag(tp, 5750_PLUS))
13200                         is_5750 = 1;
13201         }
13202
13203         for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
13204                 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
13205                         continue;
13206
13207                 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
13208                         continue;
13209
13210                 if (tg3_flag(tp, IS_5788) &&
13211                     (reg_tbl[i].flags & TG3_FL_NOT_5788))
13212                         continue;
13213
13214                 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
13215                         continue;
13216
13217                 offset = (u32) reg_tbl[i].offset;
13218                 read_mask = reg_tbl[i].read_mask;
13219                 write_mask = reg_tbl[i].write_mask;
13220
13221                 /* Save the original register content */
13222                 save_val = tr32(offset);
13223
13224                 /* Determine the read-only value. */
13225                 read_val = save_val & read_mask;
13226
13227                 /* Write zero to the register, then make sure the read-only bits
13228                  * are not changed and the read/write bits are all zeros.
13229                  */
13230                 tw32(offset, 0);
13231
13232                 val = tr32(offset);
13233
13234                 /* Test the read-only and read/write bits. */
13235                 if (((val & read_mask) != read_val) || (val & write_mask))
13236                         goto out;
13237
13238                 /* Write ones to all the bits defined by RdMask and WrMask, then
13239                  * make sure the read-only bits are not changed and the
13240                  * read/write bits are all ones.
13241                  */
13242                 tw32(offset, read_mask | write_mask);
13243
13244                 val = tr32(offset);
13245
13246                 /* Test the read-only bits. */
13247                 if ((val & read_mask) != read_val)
13248                         goto out;
13249
13250                 /* Test the read/write bits. */
13251                 if ((val & write_mask) != write_mask)
13252                         goto out;
13253
13254                 tw32(offset, save_val);
13255         }
13256
13257         return 0;
13258
13259 out:
13260         if (netif_msg_hw(tp))
13261                 netdev_err(tp->dev,
13262                            "Register test failed at offset %x\n", offset);
13263         tw32(offset, save_val);
13264         return -EIO;
13265 }
13266
13267 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
13268 {
13269         static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
13270         int i;
13271         u32 j;
13272
13273         for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
13274                 for (j = 0; j < len; j += 4) {
13275                         u32 val;
13276
13277                         tg3_write_mem(tp, offset + j, test_pattern[i]);
13278                         tg3_read_mem(tp, offset + j, &val);
13279                         if (val != test_pattern[i])
13280                                 return -EIO;
13281                 }
13282         }
13283         return 0;
13284 }
13285
13286 static int tg3_test_memory(struct tg3 *tp)
13287 {
13288         static struct mem_entry {
13289                 u32 offset;
13290                 u32 len;
13291         } mem_tbl_570x[] = {
13292                 { 0x00000000, 0x00b50},
13293                 { 0x00002000, 0x1c000},
13294                 { 0xffffffff, 0x00000}
13295         }, mem_tbl_5705[] = {
13296                 { 0x00000100, 0x0000c},
13297                 { 0x00000200, 0x00008},
13298                 { 0x00004000, 0x00800},
13299                 { 0x00006000, 0x01000},
13300                 { 0x00008000, 0x02000},
13301                 { 0x00010000, 0x0e000},
13302                 { 0xffffffff, 0x00000}
13303         }, mem_tbl_5755[] = {
13304                 { 0x00000200, 0x00008},
13305                 { 0x00004000, 0x00800},
13306                 { 0x00006000, 0x00800},
13307                 { 0x00008000, 0x02000},
13308                 { 0x00010000, 0x0c000},
13309                 { 0xffffffff, 0x00000}
13310         }, mem_tbl_5906[] = {
13311                 { 0x00000200, 0x00008},
13312                 { 0x00004000, 0x00400},
13313                 { 0x00006000, 0x00400},
13314                 { 0x00008000, 0x01000},
13315                 { 0x00010000, 0x01000},
13316                 { 0xffffffff, 0x00000}
13317         }, mem_tbl_5717[] = {
13318                 { 0x00000200, 0x00008},
13319                 { 0x00010000, 0x0a000},
13320                 { 0x00020000, 0x13c00},
13321                 { 0xffffffff, 0x00000}
13322         }, mem_tbl_57765[] = {
13323                 { 0x00000200, 0x00008},
13324                 { 0x00004000, 0x00800},
13325                 { 0x00006000, 0x09800},
13326                 { 0x00010000, 0x0a000},
13327                 { 0xffffffff, 0x00000}
13328         };
13329         struct mem_entry *mem_tbl;
13330         int err = 0;
13331         int i;
13332
13333         if (tg3_flag(tp, 5717_PLUS))
13334                 mem_tbl = mem_tbl_5717;
13335         else if (tg3_flag(tp, 57765_CLASS) ||
13336                  tg3_asic_rev(tp) == ASIC_REV_5762)
13337                 mem_tbl = mem_tbl_57765;
13338         else if (tg3_flag(tp, 5755_PLUS))
13339                 mem_tbl = mem_tbl_5755;
13340         else if (tg3_asic_rev(tp) == ASIC_REV_5906)
13341                 mem_tbl = mem_tbl_5906;
13342         else if (tg3_flag(tp, 5705_PLUS))
13343                 mem_tbl = mem_tbl_5705;
13344         else
13345                 mem_tbl = mem_tbl_570x;
13346
13347         for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
13348                 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
13349                 if (err)
13350                         break;
13351         }
13352
13353         return err;
13354 }
13355
13356 #define TG3_TSO_MSS             500
13357
13358 #define TG3_TSO_IP_HDR_LEN      20
13359 #define TG3_TSO_TCP_HDR_LEN     20
13360 #define TG3_TSO_TCP_OPT_LEN     12
13361
13362 static const u8 tg3_tso_header[] = {
13363 0x08, 0x00,
13364 0x45, 0x00, 0x00, 0x00,
13365 0x00, 0x00, 0x40, 0x00,
13366 0x40, 0x06, 0x00, 0x00,
13367 0x0a, 0x00, 0x00, 0x01,
13368 0x0a, 0x00, 0x00, 0x02,
13369 0x0d, 0x00, 0xe0, 0x00,
13370 0x00, 0x00, 0x01, 0x00,
13371 0x00, 0x00, 0x02, 0x00,
13372 0x80, 0x10, 0x10, 0x00,
13373 0x14, 0x09, 0x00, 0x00,
13374 0x01, 0x01, 0x08, 0x0a,
13375 0x11, 0x11, 0x11, 0x11,
13376 0x11, 0x11, 0x11, 0x11,
13377 };
13378
13379 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
13380 {
13381         u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
13382         u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
13383         u32 budget;
13384         struct sk_buff *skb;
13385         u8 *tx_data, *rx_data;
13386         dma_addr_t map;
13387         int num_pkts, tx_len, rx_len, i, err;
13388         struct tg3_rx_buffer_desc *desc;
13389         struct tg3_napi *tnapi, *rnapi;
13390         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
13391
13392         tnapi = &tp->napi[0];
13393         rnapi = &tp->napi[0];
13394         if (tp->irq_cnt > 1) {
13395                 if (tg3_flag(tp, ENABLE_RSS))
13396                         rnapi = &tp->napi[1];
13397                 if (tg3_flag(tp, ENABLE_TSS))
13398                         tnapi = &tp->napi[1];
13399         }
13400         coal_now = tnapi->coal_now | rnapi->coal_now;
13401
13402         err = -EIO;
13403
13404         tx_len = pktsz;
13405         skb = netdev_alloc_skb(tp->dev, tx_len);
13406         if (!skb)
13407                 return -ENOMEM;
13408
13409         tx_data = skb_put(skb, tx_len);
13410         memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN);
13411         memset(tx_data + ETH_ALEN, 0x0, 8);
13412
13413         tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
13414
13415         if (tso_loopback) {
13416                 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
13417
13418                 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
13419                               TG3_TSO_TCP_OPT_LEN;
13420
13421                 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
13422                        sizeof(tg3_tso_header));
13423                 mss = TG3_TSO_MSS;
13424
13425                 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
13426                 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
13427
13428                 /* Set the total length field in the IP header */
13429                 iph->tot_len = htons((u16)(mss + hdr_len));
13430
13431                 base_flags = (TXD_FLAG_CPU_PRE_DMA |
13432                               TXD_FLAG_CPU_POST_DMA);
13433
13434                 if (tg3_flag(tp, HW_TSO_1) ||
13435                     tg3_flag(tp, HW_TSO_2) ||
13436                     tg3_flag(tp, HW_TSO_3)) {
13437                         struct tcphdr *th;
13438                         val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
13439                         th = (struct tcphdr *)&tx_data[val];
13440                         th->check = 0;
13441                 } else
13442                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
13443
13444                 if (tg3_flag(tp, HW_TSO_3)) {
13445                         mss |= (hdr_len & 0xc) << 12;
13446                         if (hdr_len & 0x10)
13447                                 base_flags |= 0x00000010;
13448                         base_flags |= (hdr_len & 0x3e0) << 5;
13449                 } else if (tg3_flag(tp, HW_TSO_2))
13450                         mss |= hdr_len << 9;
13451                 else if (tg3_flag(tp, HW_TSO_1) ||
13452                          tg3_asic_rev(tp) == ASIC_REV_5705) {
13453                         mss |= (TG3_TSO_TCP_OPT_LEN << 9);
13454                 } else {
13455                         base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
13456                 }
13457
13458                 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
13459         } else {
13460                 num_pkts = 1;
13461                 data_off = ETH_HLEN;
13462
13463                 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
13464                     tx_len > VLAN_ETH_FRAME_LEN)
13465                         base_flags |= TXD_FLAG_JMB_PKT;
13466         }
13467
13468         for (i = data_off; i < tx_len; i++)
13469                 tx_data[i] = (u8) (i & 0xff);
13470
13471         map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
13472         if (pci_dma_mapping_error(tp->pdev, map)) {
13473                 dev_kfree_skb(skb);
13474                 return -EIO;
13475         }
13476
13477         val = tnapi->tx_prod;
13478         tnapi->tx_buffers[val].skb = skb;
13479         dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
13480
13481         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13482                rnapi->coal_now);
13483
13484         udelay(10);
13485
13486         rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
13487
13488         budget = tg3_tx_avail(tnapi);
13489         if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
13490                             base_flags | TXD_FLAG_END, mss, 0)) {
13491                 tnapi->tx_buffers[val].skb = NULL;
13492                 dev_kfree_skb(skb);
13493                 return -EIO;
13494         }
13495
13496         tnapi->tx_prod++;
13497
13498         /* Sync BD data before updating mailbox */
13499         wmb();
13500
13501         tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
13502         tr32_mailbox(tnapi->prodmbox);
13503
13504         udelay(10);
13505
13506         /* 350 usec to allow enough time on some 10/100 Mbps devices.  */
13507         for (i = 0; i < 35; i++) {
13508                 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13509                        coal_now);
13510
13511                 udelay(10);
13512
13513                 tx_idx = tnapi->hw_status->idx[0].tx_consumer;
13514                 rx_idx = rnapi->hw_status->idx[0].rx_producer;
13515                 if ((tx_idx == tnapi->tx_prod) &&
13516                     (rx_idx == (rx_start_idx + num_pkts)))
13517                         break;
13518         }
13519
13520         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
13521         dev_kfree_skb(skb);
13522
13523         if (tx_idx != tnapi->tx_prod)
13524                 goto out;
13525
13526         if (rx_idx != rx_start_idx + num_pkts)
13527                 goto out;
13528
13529         val = data_off;
13530         while (rx_idx != rx_start_idx) {
13531                 desc = &rnapi->rx_rcb[rx_start_idx++];
13532                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
13533                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
13534
13535                 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
13536                     (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
13537                         goto out;
13538
13539                 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
13540                          - ETH_FCS_LEN;
13541
13542                 if (!tso_loopback) {
13543                         if (rx_len != tx_len)
13544                                 goto out;
13545
13546                         if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
13547                                 if (opaque_key != RXD_OPAQUE_RING_STD)
13548                                         goto out;
13549                         } else {
13550                                 if (opaque_key != RXD_OPAQUE_RING_JUMBO)
13551                                         goto out;
13552                         }
13553                 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
13554                            (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
13555                             >> RXD_TCPCSUM_SHIFT != 0xffff) {
13556                         goto out;
13557                 }
13558
13559                 if (opaque_key == RXD_OPAQUE_RING_STD) {
13560                         rx_data = tpr->rx_std_buffers[desc_idx].data;
13561                         map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
13562                                              mapping);
13563                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
13564                         rx_data = tpr->rx_jmb_buffers[desc_idx].data;
13565                         map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
13566                                              mapping);
13567                 } else
13568                         goto out;
13569
13570                 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
13571                                             PCI_DMA_FROMDEVICE);
13572
13573                 rx_data += TG3_RX_OFFSET(tp);
13574                 for (i = data_off; i < rx_len; i++, val++) {
13575                         if (*(rx_data + i) != (u8) (val & 0xff))
13576                                 goto out;
13577                 }
13578         }
13579
13580         err = 0;
13581
13582         /* tg3_free_rings will unmap and free the rx_data */
13583 out:
13584         return err;
13585 }
13586
13587 #define TG3_STD_LOOPBACK_FAILED         1
13588 #define TG3_JMB_LOOPBACK_FAILED         2
13589 #define TG3_TSO_LOOPBACK_FAILED         4
13590 #define TG3_LOOPBACK_FAILED \
13591         (TG3_STD_LOOPBACK_FAILED | \
13592          TG3_JMB_LOOPBACK_FAILED | \
13593          TG3_TSO_LOOPBACK_FAILED)
13594
13595 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
13596 {
13597         int err = -EIO;
13598         u32 eee_cap;
13599         u32 jmb_pkt_sz = 9000;
13600
13601         if (tp->dma_limit)
13602                 jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
13603
13604         eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
13605         tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
13606
13607         if (!netif_running(tp->dev)) {
13608                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13609                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13610                 if (do_extlpbk)
13611                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13612                 goto done;
13613         }
13614
13615         err = tg3_reset_hw(tp, true);
13616         if (err) {
13617                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13618                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13619                 if (do_extlpbk)
13620                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13621                 goto done;
13622         }
13623
13624         if (tg3_flag(tp, ENABLE_RSS)) {
13625                 int i;
13626
13627                 /* Reroute all rx packets to the 1st queue */
13628                 for (i = MAC_RSS_INDIR_TBL_0;
13629                      i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
13630                         tw32(i, 0x0);
13631         }
13632
13633         /* HW errata - mac loopback fails in some cases on 5780.
13634          * Normal traffic and PHY loopback are not affected by
13635          * errata.  Also, the MAC loopback test is deprecated for
13636          * all newer ASIC revisions.
13637          */
13638         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
13639             !tg3_flag(tp, CPMU_PRESENT)) {
13640                 tg3_mac_loopback(tp, true);
13641
13642                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13643                         data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13644
13645                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13646                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13647                         data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13648
13649                 tg3_mac_loopback(tp, false);
13650         }
13651
13652         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
13653             !tg3_flag(tp, USE_PHYLIB)) {
13654                 int i;
13655
13656                 tg3_phy_lpbk_set(tp, 0, false);
13657
13658                 /* Wait for link */
13659                 for (i = 0; i < 100; i++) {
13660                         if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
13661                                 break;
13662                         mdelay(1);
13663                 }
13664
13665                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13666                         data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13667                 if (tg3_flag(tp, TSO_CAPABLE) &&
13668                     tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13669                         data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
13670                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13671                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13672                         data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13673
13674                 if (do_extlpbk) {
13675                         tg3_phy_lpbk_set(tp, 0, true);
13676
13677                         /* All link indications report up, but the hardware
13678                          * isn't really ready for about 20 msec.  Double it
13679                          * to be sure.
13680                          */
13681                         mdelay(40);
13682
13683                         if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13684                                 data[TG3_EXT_LOOPB_TEST] |=
13685                                                         TG3_STD_LOOPBACK_FAILED;
13686                         if (tg3_flag(tp, TSO_CAPABLE) &&
13687                             tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13688                                 data[TG3_EXT_LOOPB_TEST] |=
13689                                                         TG3_TSO_LOOPBACK_FAILED;
13690                         if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13691                             tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13692                                 data[TG3_EXT_LOOPB_TEST] |=
13693                                                         TG3_JMB_LOOPBACK_FAILED;
13694                 }
13695
13696                 /* Re-enable gphy autopowerdown. */
13697                 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
13698                         tg3_phy_toggle_apd(tp, true);
13699         }
13700
13701         err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
13702                data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
13703
13704 done:
13705         tp->phy_flags |= eee_cap;
13706
13707         return err;
13708 }
13709
13710 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
13711                           u64 *data)
13712 {
13713         struct tg3 *tp = netdev_priv(dev);
13714         bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
13715
13716         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
13717                 if (tg3_power_up(tp)) {
13718                         etest->flags |= ETH_TEST_FL_FAILED;
13719                         memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
13720                         return;
13721                 }
13722                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
13723         }
13724
13725         memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
13726
13727         if (tg3_test_nvram(tp) != 0) {
13728                 etest->flags |= ETH_TEST_FL_FAILED;
13729                 data[TG3_NVRAM_TEST] = 1;
13730         }
13731         if (!doextlpbk && tg3_test_link(tp)) {
13732                 etest->flags |= ETH_TEST_FL_FAILED;
13733                 data[TG3_LINK_TEST] = 1;
13734         }
13735         if (etest->flags & ETH_TEST_FL_OFFLINE) {
13736                 int err, err2 = 0, irq_sync = 0;
13737
13738                 if (netif_running(dev)) {
13739                         tg3_phy_stop(tp);
13740                         tg3_netif_stop(tp);
13741                         irq_sync = 1;
13742                 }
13743
13744                 tg3_full_lock(tp, irq_sync);
13745                 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
13746                 err = tg3_nvram_lock(tp);
13747                 tg3_halt_cpu(tp, RX_CPU_BASE);
13748                 if (!tg3_flag(tp, 5705_PLUS))
13749                         tg3_halt_cpu(tp, TX_CPU_BASE);
13750                 if (!err)
13751                         tg3_nvram_unlock(tp);
13752
13753                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
13754                         tg3_phy_reset(tp);
13755
13756                 if (tg3_test_registers(tp) != 0) {
13757                         etest->flags |= ETH_TEST_FL_FAILED;
13758                         data[TG3_REGISTER_TEST] = 1;
13759                 }
13760
13761                 if (tg3_test_memory(tp) != 0) {
13762                         etest->flags |= ETH_TEST_FL_FAILED;
13763                         data[TG3_MEMORY_TEST] = 1;
13764                 }
13765
13766                 if (doextlpbk)
13767                         etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
13768
13769                 if (tg3_test_loopback(tp, data, doextlpbk))
13770                         etest->flags |= ETH_TEST_FL_FAILED;
13771
13772                 tg3_full_unlock(tp);
13773
13774                 if (tg3_test_interrupt(tp) != 0) {
13775                         etest->flags |= ETH_TEST_FL_FAILED;
13776                         data[TG3_INTERRUPT_TEST] = 1;
13777                 }
13778
13779                 tg3_full_lock(tp, 0);
13780
13781                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13782                 if (netif_running(dev)) {
13783                         tg3_flag_set(tp, INIT_COMPLETE);
13784                         err2 = tg3_restart_hw(tp, true);
13785                         if (!err2)
13786                                 tg3_netif_start(tp);
13787                 }
13788
13789                 tg3_full_unlock(tp);
13790
13791                 if (irq_sync && !err2)
13792                         tg3_phy_start(tp);
13793         }
13794         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
13795                 tg3_power_down_prepare(tp);
13796
13797 }
13798
13799 static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
13800 {
13801         struct tg3 *tp = netdev_priv(dev);
13802         struct hwtstamp_config stmpconf;
13803
13804         if (!tg3_flag(tp, PTP_CAPABLE))
13805                 return -EOPNOTSUPP;
13806
13807         if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
13808                 return -EFAULT;
13809
13810         if (stmpconf.flags)
13811                 return -EINVAL;
13812
13813         if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
13814             stmpconf.tx_type != HWTSTAMP_TX_OFF)
13815                 return -ERANGE;
13816
13817         switch (stmpconf.rx_filter) {
13818         case HWTSTAMP_FILTER_NONE:
13819                 tp->rxptpctl = 0;
13820                 break;
13821         case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
13822                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13823                                TG3_RX_PTP_CTL_ALL_V1_EVENTS;
13824                 break;
13825         case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
13826                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13827                                TG3_RX_PTP_CTL_SYNC_EVNT;
13828                 break;
13829         case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
13830                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13831                                TG3_RX_PTP_CTL_DELAY_REQ;
13832                 break;
13833         case HWTSTAMP_FILTER_PTP_V2_EVENT:
13834                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13835                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13836                 break;
13837         case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
13838                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13839                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13840                 break;
13841         case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
13842                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13843                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13844                 break;
13845         case HWTSTAMP_FILTER_PTP_V2_SYNC:
13846                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13847                                TG3_RX_PTP_CTL_SYNC_EVNT;
13848                 break;
13849         case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
13850                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13851                                TG3_RX_PTP_CTL_SYNC_EVNT;
13852                 break;
13853         case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
13854                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13855                                TG3_RX_PTP_CTL_SYNC_EVNT;
13856                 break;
13857         case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
13858                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13859                                TG3_RX_PTP_CTL_DELAY_REQ;
13860                 break;
13861         case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
13862                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13863                                TG3_RX_PTP_CTL_DELAY_REQ;
13864                 break;
13865         case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
13866                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13867                                TG3_RX_PTP_CTL_DELAY_REQ;
13868                 break;
13869         default:
13870                 return -ERANGE;
13871         }
13872
13873         if (netif_running(dev) && tp->rxptpctl)
13874                 tw32(TG3_RX_PTP_CTL,
13875                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
13876
13877         if (stmpconf.tx_type == HWTSTAMP_TX_ON)
13878                 tg3_flag_set(tp, TX_TSTAMP_EN);
13879         else
13880                 tg3_flag_clear(tp, TX_TSTAMP_EN);
13881
13882         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13883                 -EFAULT : 0;
13884 }
13885
13886 static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
13887 {
13888         struct tg3 *tp = netdev_priv(dev);
13889         struct hwtstamp_config stmpconf;
13890
13891         if (!tg3_flag(tp, PTP_CAPABLE))
13892                 return -EOPNOTSUPP;
13893
13894         stmpconf.flags = 0;
13895         stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ?
13896                             HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF);
13897
13898         switch (tp->rxptpctl) {
13899         case 0:
13900                 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE;
13901                 break;
13902         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS:
13903                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
13904                 break;
13905         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13906                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
13907                 break;
13908         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13909                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
13910                 break;
13911         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13912                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
13913                 break;
13914         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13915                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
13916                 break;
13917         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13918                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
13919                 break;
13920         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13921                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
13922                 break;
13923         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13924                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC;
13925                 break;
13926         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13927                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
13928                 break;
13929         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13930                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
13931                 break;
13932         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13933                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ;
13934                 break;
13935         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13936                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
13937                 break;
13938         default:
13939                 WARN_ON_ONCE(1);
13940                 return -ERANGE;
13941         }
13942
13943         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13944                 -EFAULT : 0;
13945 }
13946
13947 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
13948 {
13949         struct mii_ioctl_data *data = if_mii(ifr);
13950         struct tg3 *tp = netdev_priv(dev);
13951         int err;
13952
13953         if (tg3_flag(tp, USE_PHYLIB)) {
13954                 struct phy_device *phydev;
13955                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
13956                         return -EAGAIN;
13957                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
13958                 return phy_mii_ioctl(phydev, ifr, cmd);
13959         }
13960
13961         switch (cmd) {
13962         case SIOCGMIIPHY:
13963                 data->phy_id = tp->phy_addr;
13964
13965                 /* fallthru */
13966         case SIOCGMIIREG: {
13967                 u32 mii_regval;
13968
13969                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13970                         break;                  /* We have no PHY */
13971
13972                 if (!netif_running(dev))
13973                         return -EAGAIN;
13974
13975                 spin_lock_bh(&tp->lock);
13976                 err = __tg3_readphy(tp, data->phy_id & 0x1f,
13977                                     data->reg_num & 0x1f, &mii_regval);
13978                 spin_unlock_bh(&tp->lock);
13979
13980                 data->val_out = mii_regval;
13981
13982                 return err;
13983         }
13984
13985         case SIOCSMIIREG:
13986                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13987                         break;                  /* We have no PHY */
13988
13989                 if (!netif_running(dev))
13990                         return -EAGAIN;
13991
13992                 spin_lock_bh(&tp->lock);
13993                 err = __tg3_writephy(tp, data->phy_id & 0x1f,
13994                                      data->reg_num & 0x1f, data->val_in);
13995                 spin_unlock_bh(&tp->lock);
13996
13997                 return err;
13998
13999         case SIOCSHWTSTAMP:
14000                 return tg3_hwtstamp_set(dev, ifr);
14001
14002         case SIOCGHWTSTAMP:
14003                 return tg3_hwtstamp_get(dev, ifr);
14004
14005         default:
14006                 /* do nothing */
14007                 break;
14008         }
14009         return -EOPNOTSUPP;
14010 }
14011
14012 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
14013 {
14014         struct tg3 *tp = netdev_priv(dev);
14015
14016         memcpy(ec, &tp->coal, sizeof(*ec));
14017         return 0;
14018 }
14019
14020 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
14021 {
14022         struct tg3 *tp = netdev_priv(dev);
14023         u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
14024         u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
14025
14026         if (!tg3_flag(tp, 5705_PLUS)) {
14027                 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
14028                 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
14029                 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
14030                 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
14031         }
14032
14033         if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
14034             (!ec->rx_coalesce_usecs) ||
14035             (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
14036             (!ec->tx_coalesce_usecs) ||
14037             (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
14038             (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
14039             (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
14040             (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
14041             (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
14042             (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
14043             (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
14044             (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
14045                 return -EINVAL;
14046
14047         /* Only copy relevant parameters, ignore all others. */
14048         tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
14049         tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
14050         tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
14051         tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
14052         tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
14053         tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
14054         tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
14055         tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
14056         tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
14057
14058         if (netif_running(dev)) {
14059                 tg3_full_lock(tp, 0);
14060                 __tg3_set_coalesce(tp, &tp->coal);
14061                 tg3_full_unlock(tp);
14062         }
14063         return 0;
14064 }
14065
14066 static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata)
14067 {
14068         struct tg3 *tp = netdev_priv(dev);
14069
14070         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14071                 netdev_warn(tp->dev, "Board does not support EEE!\n");
14072                 return -EOPNOTSUPP;
14073         }
14074
14075         if (edata->advertised != tp->eee.advertised) {
14076                 netdev_warn(tp->dev,
14077                             "Direct manipulation of EEE advertisement is not supported\n");
14078                 return -EINVAL;
14079         }
14080
14081         if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) {
14082                 netdev_warn(tp->dev,
14083                             "Maximal Tx Lpi timer supported is %#x(u)\n",
14084                             TG3_CPMU_DBTMR1_LNKIDLE_MAX);
14085                 return -EINVAL;
14086         }
14087
14088         tp->eee = *edata;
14089
14090         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
14091         tg3_warn_mgmt_link_flap(tp);
14092
14093         if (netif_running(tp->dev)) {
14094                 tg3_full_lock(tp, 0);
14095                 tg3_setup_eee(tp);
14096                 tg3_phy_reset(tp);
14097                 tg3_full_unlock(tp);
14098         }
14099
14100         return 0;
14101 }
14102
14103 static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata)
14104 {
14105         struct tg3 *tp = netdev_priv(dev);
14106
14107         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14108                 netdev_warn(tp->dev,
14109                             "Board does not support EEE!\n");
14110                 return -EOPNOTSUPP;
14111         }
14112
14113         *edata = tp->eee;
14114         return 0;
14115 }
14116
14117 static const struct ethtool_ops tg3_ethtool_ops = {
14118         .get_drvinfo            = tg3_get_drvinfo,
14119         .get_regs_len           = tg3_get_regs_len,
14120         .get_regs               = tg3_get_regs,
14121         .get_wol                = tg3_get_wol,
14122         .set_wol                = tg3_set_wol,
14123         .get_msglevel           = tg3_get_msglevel,
14124         .set_msglevel           = tg3_set_msglevel,
14125         .nway_reset             = tg3_nway_reset,
14126         .get_link               = ethtool_op_get_link,
14127         .get_eeprom_len         = tg3_get_eeprom_len,
14128         .get_eeprom             = tg3_get_eeprom,
14129         .set_eeprom             = tg3_set_eeprom,
14130         .get_ringparam          = tg3_get_ringparam,
14131         .set_ringparam          = tg3_set_ringparam,
14132         .get_pauseparam         = tg3_get_pauseparam,
14133         .set_pauseparam         = tg3_set_pauseparam,
14134         .self_test              = tg3_self_test,
14135         .get_strings            = tg3_get_strings,
14136         .set_phys_id            = tg3_set_phys_id,
14137         .get_ethtool_stats      = tg3_get_ethtool_stats,
14138         .get_coalesce           = tg3_get_coalesce,
14139         .set_coalesce           = tg3_set_coalesce,
14140         .get_sset_count         = tg3_get_sset_count,
14141         .get_rxnfc              = tg3_get_rxnfc,
14142         .get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
14143         .get_rxfh               = tg3_get_rxfh,
14144         .set_rxfh               = tg3_set_rxfh,
14145         .get_channels           = tg3_get_channels,
14146         .set_channels           = tg3_set_channels,
14147         .get_ts_info            = tg3_get_ts_info,
14148         .get_eee                = tg3_get_eee,
14149         .set_eee                = tg3_set_eee,
14150         .get_link_ksettings     = tg3_get_link_ksettings,
14151         .set_link_ksettings     = tg3_set_link_ksettings,
14152 };
14153
14154 static void tg3_get_stats64(struct net_device *dev,
14155                             struct rtnl_link_stats64 *stats)
14156 {
14157         struct tg3 *tp = netdev_priv(dev);
14158
14159         spin_lock_bh(&tp->lock);
14160         if (!tp->hw_stats) {
14161                 *stats = tp->net_stats_prev;
14162                 spin_unlock_bh(&tp->lock);
14163                 return;
14164         }
14165
14166         tg3_get_nstats(tp, stats);
14167         spin_unlock_bh(&tp->lock);
14168 }
14169
14170 static void tg3_set_rx_mode(struct net_device *dev)
14171 {
14172         struct tg3 *tp = netdev_priv(dev);
14173
14174         if (!netif_running(dev))
14175                 return;
14176
14177         tg3_full_lock(tp, 0);
14178         __tg3_set_rx_mode(dev);
14179         tg3_full_unlock(tp);
14180 }
14181
14182 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
14183                                int new_mtu)
14184 {
14185         dev->mtu = new_mtu;
14186
14187         if (new_mtu > ETH_DATA_LEN) {
14188                 if (tg3_flag(tp, 5780_CLASS)) {
14189                         netdev_update_features(dev);
14190                         tg3_flag_clear(tp, TSO_CAPABLE);
14191                 } else {
14192                         tg3_flag_set(tp, JUMBO_RING_ENABLE);
14193                 }
14194         } else {
14195                 if (tg3_flag(tp, 5780_CLASS)) {
14196                         tg3_flag_set(tp, TSO_CAPABLE);
14197                         netdev_update_features(dev);
14198                 }
14199                 tg3_flag_clear(tp, JUMBO_RING_ENABLE);
14200         }
14201 }
14202
14203 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
14204 {
14205         struct tg3 *tp = netdev_priv(dev);
14206         int err;
14207         bool reset_phy = false;
14208
14209         if (!netif_running(dev)) {
14210                 /* We'll just catch it later when the
14211                  * device is up'd.
14212                  */
14213                 tg3_set_mtu(dev, tp, new_mtu);
14214                 return 0;
14215         }
14216
14217         tg3_phy_stop(tp);
14218
14219         tg3_netif_stop(tp);
14220
14221         tg3_set_mtu(dev, tp, new_mtu);
14222
14223         tg3_full_lock(tp, 1);
14224
14225         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
14226
14227         /* Reset PHY, otherwise the read DMA engine will be in a mode that
14228          * breaks all requests to 256 bytes.
14229          */
14230         if (tg3_asic_rev(tp) == ASIC_REV_57766)
14231                 reset_phy = true;
14232
14233         err = tg3_restart_hw(tp, reset_phy);
14234
14235         if (!err)
14236                 tg3_netif_start(tp);
14237
14238         tg3_full_unlock(tp);
14239
14240         if (!err)
14241                 tg3_phy_start(tp);
14242
14243         return err;
14244 }
14245
14246 static const struct net_device_ops tg3_netdev_ops = {
14247         .ndo_open               = tg3_open,
14248         .ndo_stop               = tg3_close,
14249         .ndo_start_xmit         = tg3_start_xmit,
14250         .ndo_get_stats64        = tg3_get_stats64,
14251         .ndo_validate_addr      = eth_validate_addr,
14252         .ndo_set_rx_mode        = tg3_set_rx_mode,
14253         .ndo_set_mac_address    = tg3_set_mac_addr,
14254         .ndo_do_ioctl           = tg3_ioctl,
14255         .ndo_tx_timeout         = tg3_tx_timeout,
14256         .ndo_change_mtu         = tg3_change_mtu,
14257         .ndo_fix_features       = tg3_fix_features,
14258         .ndo_set_features       = tg3_set_features,
14259 #ifdef CONFIG_NET_POLL_CONTROLLER
14260         .ndo_poll_controller    = tg3_poll_controller,
14261 #endif
14262 };
14263
14264 static void tg3_get_eeprom_size(struct tg3 *tp)
14265 {
14266         u32 cursize, val, magic;
14267
14268         tp->nvram_size = EEPROM_CHIP_SIZE;
14269
14270         if (tg3_nvram_read(tp, 0, &magic) != 0)
14271                 return;
14272
14273         if ((magic != TG3_EEPROM_MAGIC) &&
14274             ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
14275             ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
14276                 return;
14277
14278         /*
14279          * Size the chip by reading offsets at increasing powers of two.
14280          * When we encounter our validation signature, we know the addressing
14281          * has wrapped around, and thus have our chip size.
14282          */
14283         cursize = 0x10;
14284
14285         while (cursize < tp->nvram_size) {
14286                 if (tg3_nvram_read(tp, cursize, &val) != 0)
14287                         return;
14288
14289                 if (val == magic)
14290                         break;
14291
14292                 cursize <<= 1;
14293         }
14294
14295         tp->nvram_size = cursize;
14296 }
14297
14298 static void tg3_get_nvram_size(struct tg3 *tp)
14299 {
14300         u32 val;
14301
14302         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
14303                 return;
14304
14305         /* Selfboot format */
14306         if (val != TG3_EEPROM_MAGIC) {
14307                 tg3_get_eeprom_size(tp);
14308                 return;
14309         }
14310
14311         if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
14312                 if (val != 0) {
14313                         /* This is confusing.  We want to operate on the
14314                          * 16-bit value at offset 0xf2.  The tg3_nvram_read()
14315                          * call will read from NVRAM and byteswap the data
14316                          * according to the byteswapping settings for all
14317                          * other register accesses.  This ensures the data we
14318                          * want will always reside in the lower 16-bits.
14319                          * However, the data in NVRAM is in LE format, which
14320                          * means the data from the NVRAM read will always be
14321                          * opposite the endianness of the CPU.  The 16-bit
14322                          * byteswap then brings the data to CPU endianness.
14323                          */
14324                         tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
14325                         return;
14326                 }
14327         }
14328         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14329 }
14330
14331 static void tg3_get_nvram_info(struct tg3 *tp)
14332 {
14333         u32 nvcfg1;
14334
14335         nvcfg1 = tr32(NVRAM_CFG1);
14336         if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
14337                 tg3_flag_set(tp, FLASH);
14338         } else {
14339                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14340                 tw32(NVRAM_CFG1, nvcfg1);
14341         }
14342
14343         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
14344             tg3_flag(tp, 5780_CLASS)) {
14345                 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
14346                 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
14347                         tp->nvram_jedecnum = JEDEC_ATMEL;
14348                         tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14349                         tg3_flag_set(tp, NVRAM_BUFFERED);
14350                         break;
14351                 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
14352                         tp->nvram_jedecnum = JEDEC_ATMEL;
14353                         tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
14354                         break;
14355                 case FLASH_VENDOR_ATMEL_EEPROM:
14356                         tp->nvram_jedecnum = JEDEC_ATMEL;
14357                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14358                         tg3_flag_set(tp, NVRAM_BUFFERED);
14359                         break;
14360                 case FLASH_VENDOR_ST:
14361                         tp->nvram_jedecnum = JEDEC_ST;
14362                         tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
14363                         tg3_flag_set(tp, NVRAM_BUFFERED);
14364                         break;
14365                 case FLASH_VENDOR_SAIFUN:
14366                         tp->nvram_jedecnum = JEDEC_SAIFUN;
14367                         tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
14368                         break;
14369                 case FLASH_VENDOR_SST_SMALL:
14370                 case FLASH_VENDOR_SST_LARGE:
14371                         tp->nvram_jedecnum = JEDEC_SST;
14372                         tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
14373                         break;
14374                 }
14375         } else {
14376                 tp->nvram_jedecnum = JEDEC_ATMEL;
14377                 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14378                 tg3_flag_set(tp, NVRAM_BUFFERED);
14379         }
14380 }
14381
14382 static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
14383 {
14384         switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
14385         case FLASH_5752PAGE_SIZE_256:
14386                 tp->nvram_pagesize = 256;
14387                 break;
14388         case FLASH_5752PAGE_SIZE_512:
14389                 tp->nvram_pagesize = 512;
14390                 break;
14391         case FLASH_5752PAGE_SIZE_1K:
14392                 tp->nvram_pagesize = 1024;
14393                 break;
14394         case FLASH_5752PAGE_SIZE_2K:
14395                 tp->nvram_pagesize = 2048;
14396                 break;
14397         case FLASH_5752PAGE_SIZE_4K:
14398                 tp->nvram_pagesize = 4096;
14399                 break;
14400         case FLASH_5752PAGE_SIZE_264:
14401                 tp->nvram_pagesize = 264;
14402                 break;
14403         case FLASH_5752PAGE_SIZE_528:
14404                 tp->nvram_pagesize = 528;
14405                 break;
14406         }
14407 }
14408
14409 static void tg3_get_5752_nvram_info(struct tg3 *tp)
14410 {
14411         u32 nvcfg1;
14412
14413         nvcfg1 = tr32(NVRAM_CFG1);
14414
14415         /* NVRAM protection for TPM */
14416         if (nvcfg1 & (1 << 27))
14417                 tg3_flag_set(tp, PROTECTED_NVRAM);
14418
14419         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14420         case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
14421         case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
14422                 tp->nvram_jedecnum = JEDEC_ATMEL;
14423                 tg3_flag_set(tp, NVRAM_BUFFERED);
14424                 break;
14425         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14426                 tp->nvram_jedecnum = JEDEC_ATMEL;
14427                 tg3_flag_set(tp, NVRAM_BUFFERED);
14428                 tg3_flag_set(tp, FLASH);
14429                 break;
14430         case FLASH_5752VENDOR_ST_M45PE10:
14431         case FLASH_5752VENDOR_ST_M45PE20:
14432         case FLASH_5752VENDOR_ST_M45PE40:
14433                 tp->nvram_jedecnum = JEDEC_ST;
14434                 tg3_flag_set(tp, NVRAM_BUFFERED);
14435                 tg3_flag_set(tp, FLASH);
14436                 break;
14437         }
14438
14439         if (tg3_flag(tp, FLASH)) {
14440                 tg3_nvram_get_pagesize(tp, nvcfg1);
14441         } else {
14442                 /* For eeprom, set pagesize to maximum eeprom size */
14443                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14444
14445                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14446                 tw32(NVRAM_CFG1, nvcfg1);
14447         }
14448 }
14449
14450 static void tg3_get_5755_nvram_info(struct tg3 *tp)
14451 {
14452         u32 nvcfg1, protect = 0;
14453
14454         nvcfg1 = tr32(NVRAM_CFG1);
14455
14456         /* NVRAM protection for TPM */
14457         if (nvcfg1 & (1 << 27)) {
14458                 tg3_flag_set(tp, PROTECTED_NVRAM);
14459                 protect = 1;
14460         }
14461
14462         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14463         switch (nvcfg1) {
14464         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14465         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14466         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14467         case FLASH_5755VENDOR_ATMEL_FLASH_5:
14468                 tp->nvram_jedecnum = JEDEC_ATMEL;
14469                 tg3_flag_set(tp, NVRAM_BUFFERED);
14470                 tg3_flag_set(tp, FLASH);
14471                 tp->nvram_pagesize = 264;
14472                 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
14473                     nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
14474                         tp->nvram_size = (protect ? 0x3e200 :
14475                                           TG3_NVRAM_SIZE_512KB);
14476                 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
14477                         tp->nvram_size = (protect ? 0x1f200 :
14478                                           TG3_NVRAM_SIZE_256KB);
14479                 else
14480                         tp->nvram_size = (protect ? 0x1f200 :
14481                                           TG3_NVRAM_SIZE_128KB);
14482                 break;
14483         case FLASH_5752VENDOR_ST_M45PE10:
14484         case FLASH_5752VENDOR_ST_M45PE20:
14485         case FLASH_5752VENDOR_ST_M45PE40:
14486                 tp->nvram_jedecnum = JEDEC_ST;
14487                 tg3_flag_set(tp, NVRAM_BUFFERED);
14488                 tg3_flag_set(tp, FLASH);
14489                 tp->nvram_pagesize = 256;
14490                 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
14491                         tp->nvram_size = (protect ?
14492                                           TG3_NVRAM_SIZE_64KB :
14493                                           TG3_NVRAM_SIZE_128KB);
14494                 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
14495                         tp->nvram_size = (protect ?
14496                                           TG3_NVRAM_SIZE_64KB :
14497                                           TG3_NVRAM_SIZE_256KB);
14498                 else
14499                         tp->nvram_size = (protect ?
14500                                           TG3_NVRAM_SIZE_128KB :
14501                                           TG3_NVRAM_SIZE_512KB);
14502                 break;
14503         }
14504 }
14505
14506 static void tg3_get_5787_nvram_info(struct tg3 *tp)
14507 {
14508         u32 nvcfg1;
14509
14510         nvcfg1 = tr32(NVRAM_CFG1);
14511
14512         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14513         case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
14514         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14515         case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
14516         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14517                 tp->nvram_jedecnum = JEDEC_ATMEL;
14518                 tg3_flag_set(tp, NVRAM_BUFFERED);
14519                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14520
14521                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14522                 tw32(NVRAM_CFG1, nvcfg1);
14523                 break;
14524         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14525         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14526         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14527         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14528                 tp->nvram_jedecnum = JEDEC_ATMEL;
14529                 tg3_flag_set(tp, NVRAM_BUFFERED);
14530                 tg3_flag_set(tp, FLASH);
14531                 tp->nvram_pagesize = 264;
14532                 break;
14533         case FLASH_5752VENDOR_ST_M45PE10:
14534         case FLASH_5752VENDOR_ST_M45PE20:
14535         case FLASH_5752VENDOR_ST_M45PE40:
14536                 tp->nvram_jedecnum = JEDEC_ST;
14537                 tg3_flag_set(tp, NVRAM_BUFFERED);
14538                 tg3_flag_set(tp, FLASH);
14539                 tp->nvram_pagesize = 256;
14540                 break;
14541         }
14542 }
14543
14544 static void tg3_get_5761_nvram_info(struct tg3 *tp)
14545 {
14546         u32 nvcfg1, protect = 0;
14547
14548         nvcfg1 = tr32(NVRAM_CFG1);
14549
14550         /* NVRAM protection for TPM */
14551         if (nvcfg1 & (1 << 27)) {
14552                 tg3_flag_set(tp, PROTECTED_NVRAM);
14553                 protect = 1;
14554         }
14555
14556         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14557         switch (nvcfg1) {
14558         case FLASH_5761VENDOR_ATMEL_ADB021D:
14559         case FLASH_5761VENDOR_ATMEL_ADB041D:
14560         case FLASH_5761VENDOR_ATMEL_ADB081D:
14561         case FLASH_5761VENDOR_ATMEL_ADB161D:
14562         case FLASH_5761VENDOR_ATMEL_MDB021D:
14563         case FLASH_5761VENDOR_ATMEL_MDB041D:
14564         case FLASH_5761VENDOR_ATMEL_MDB081D:
14565         case FLASH_5761VENDOR_ATMEL_MDB161D:
14566                 tp->nvram_jedecnum = JEDEC_ATMEL;
14567                 tg3_flag_set(tp, NVRAM_BUFFERED);
14568                 tg3_flag_set(tp, FLASH);
14569                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14570                 tp->nvram_pagesize = 256;
14571                 break;
14572         case FLASH_5761VENDOR_ST_A_M45PE20:
14573         case FLASH_5761VENDOR_ST_A_M45PE40:
14574         case FLASH_5761VENDOR_ST_A_M45PE80:
14575         case FLASH_5761VENDOR_ST_A_M45PE16:
14576         case FLASH_5761VENDOR_ST_M_M45PE20:
14577         case FLASH_5761VENDOR_ST_M_M45PE40:
14578         case FLASH_5761VENDOR_ST_M_M45PE80:
14579         case FLASH_5761VENDOR_ST_M_M45PE16:
14580                 tp->nvram_jedecnum = JEDEC_ST;
14581                 tg3_flag_set(tp, NVRAM_BUFFERED);
14582                 tg3_flag_set(tp, FLASH);
14583                 tp->nvram_pagesize = 256;
14584                 break;
14585         }
14586
14587         if (protect) {
14588                 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
14589         } else {
14590                 switch (nvcfg1) {
14591                 case FLASH_5761VENDOR_ATMEL_ADB161D:
14592                 case FLASH_5761VENDOR_ATMEL_MDB161D:
14593                 case FLASH_5761VENDOR_ST_A_M45PE16:
14594                 case FLASH_5761VENDOR_ST_M_M45PE16:
14595                         tp->nvram_size = TG3_NVRAM_SIZE_2MB;
14596                         break;
14597                 case FLASH_5761VENDOR_ATMEL_ADB081D:
14598                 case FLASH_5761VENDOR_ATMEL_MDB081D:
14599                 case FLASH_5761VENDOR_ST_A_M45PE80:
14600                 case FLASH_5761VENDOR_ST_M_M45PE80:
14601                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14602                         break;
14603                 case FLASH_5761VENDOR_ATMEL_ADB041D:
14604                 case FLASH_5761VENDOR_ATMEL_MDB041D:
14605                 case FLASH_5761VENDOR_ST_A_M45PE40:
14606                 case FLASH_5761VENDOR_ST_M_M45PE40:
14607                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14608                         break;
14609                 case FLASH_5761VENDOR_ATMEL_ADB021D:
14610                 case FLASH_5761VENDOR_ATMEL_MDB021D:
14611                 case FLASH_5761VENDOR_ST_A_M45PE20:
14612                 case FLASH_5761VENDOR_ST_M_M45PE20:
14613                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14614                         break;
14615                 }
14616         }
14617 }
14618
14619 static void tg3_get_5906_nvram_info(struct tg3 *tp)
14620 {
14621         tp->nvram_jedecnum = JEDEC_ATMEL;
14622         tg3_flag_set(tp, NVRAM_BUFFERED);
14623         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14624 }
14625
14626 static void tg3_get_57780_nvram_info(struct tg3 *tp)
14627 {
14628         u32 nvcfg1;
14629
14630         nvcfg1 = tr32(NVRAM_CFG1);
14631
14632         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14633         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14634         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14635                 tp->nvram_jedecnum = JEDEC_ATMEL;
14636                 tg3_flag_set(tp, NVRAM_BUFFERED);
14637                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14638
14639                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14640                 tw32(NVRAM_CFG1, nvcfg1);
14641                 return;
14642         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14643         case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14644         case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14645         case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14646         case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14647         case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14648         case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14649                 tp->nvram_jedecnum = JEDEC_ATMEL;
14650                 tg3_flag_set(tp, NVRAM_BUFFERED);
14651                 tg3_flag_set(tp, FLASH);
14652
14653                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14654                 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14655                 case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14656                 case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14657                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14658                         break;
14659                 case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14660                 case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14661                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14662                         break;
14663                 case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14664                 case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14665                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14666                         break;
14667                 }
14668                 break;
14669         case FLASH_5752VENDOR_ST_M45PE10:
14670         case FLASH_5752VENDOR_ST_M45PE20:
14671         case FLASH_5752VENDOR_ST_M45PE40:
14672                 tp->nvram_jedecnum = JEDEC_ST;
14673                 tg3_flag_set(tp, NVRAM_BUFFERED);
14674                 tg3_flag_set(tp, FLASH);
14675
14676                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14677                 case FLASH_5752VENDOR_ST_M45PE10:
14678                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14679                         break;
14680                 case FLASH_5752VENDOR_ST_M45PE20:
14681                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14682                         break;
14683                 case FLASH_5752VENDOR_ST_M45PE40:
14684                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14685                         break;
14686                 }
14687                 break;
14688         default:
14689                 tg3_flag_set(tp, NO_NVRAM);
14690                 return;
14691         }
14692
14693         tg3_nvram_get_pagesize(tp, nvcfg1);
14694         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14695                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14696 }
14697
14698
14699 static void tg3_get_5717_nvram_info(struct tg3 *tp)
14700 {
14701         u32 nvcfg1;
14702
14703         nvcfg1 = tr32(NVRAM_CFG1);
14704
14705         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14706         case FLASH_5717VENDOR_ATMEL_EEPROM:
14707         case FLASH_5717VENDOR_MICRO_EEPROM:
14708                 tp->nvram_jedecnum = JEDEC_ATMEL;
14709                 tg3_flag_set(tp, NVRAM_BUFFERED);
14710                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14711
14712                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14713                 tw32(NVRAM_CFG1, nvcfg1);
14714                 return;
14715         case FLASH_5717VENDOR_ATMEL_MDB011D:
14716         case FLASH_5717VENDOR_ATMEL_ADB011B:
14717         case FLASH_5717VENDOR_ATMEL_ADB011D:
14718         case FLASH_5717VENDOR_ATMEL_MDB021D:
14719         case FLASH_5717VENDOR_ATMEL_ADB021B:
14720         case FLASH_5717VENDOR_ATMEL_ADB021D:
14721         case FLASH_5717VENDOR_ATMEL_45USPT:
14722                 tp->nvram_jedecnum = JEDEC_ATMEL;
14723                 tg3_flag_set(tp, NVRAM_BUFFERED);
14724                 tg3_flag_set(tp, FLASH);
14725
14726                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14727                 case FLASH_5717VENDOR_ATMEL_MDB021D:
14728                         /* Detect size with tg3_nvram_get_size() */
14729                         break;
14730                 case FLASH_5717VENDOR_ATMEL_ADB021B:
14731                 case FLASH_5717VENDOR_ATMEL_ADB021D:
14732                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14733                         break;
14734                 default:
14735                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14736                         break;
14737                 }
14738                 break;
14739         case FLASH_5717VENDOR_ST_M_M25PE10:
14740         case FLASH_5717VENDOR_ST_A_M25PE10:
14741         case FLASH_5717VENDOR_ST_M_M45PE10:
14742         case FLASH_5717VENDOR_ST_A_M45PE10:
14743         case FLASH_5717VENDOR_ST_M_M25PE20:
14744         case FLASH_5717VENDOR_ST_A_M25PE20:
14745         case FLASH_5717VENDOR_ST_M_M45PE20:
14746         case FLASH_5717VENDOR_ST_A_M45PE20:
14747         case FLASH_5717VENDOR_ST_25USPT:
14748         case FLASH_5717VENDOR_ST_45USPT:
14749                 tp->nvram_jedecnum = JEDEC_ST;
14750                 tg3_flag_set(tp, NVRAM_BUFFERED);
14751                 tg3_flag_set(tp, FLASH);
14752
14753                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14754                 case FLASH_5717VENDOR_ST_M_M25PE20:
14755                 case FLASH_5717VENDOR_ST_M_M45PE20:
14756                         /* Detect size with tg3_nvram_get_size() */
14757                         break;
14758                 case FLASH_5717VENDOR_ST_A_M25PE20:
14759                 case FLASH_5717VENDOR_ST_A_M45PE20:
14760                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14761                         break;
14762                 default:
14763                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14764                         break;
14765                 }
14766                 break;
14767         default:
14768                 tg3_flag_set(tp, NO_NVRAM);
14769                 return;
14770         }
14771
14772         tg3_nvram_get_pagesize(tp, nvcfg1);
14773         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14774                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14775 }
14776
14777 static void tg3_get_5720_nvram_info(struct tg3 *tp)
14778 {
14779         u32 nvcfg1, nvmpinstrp;
14780
14781         nvcfg1 = tr32(NVRAM_CFG1);
14782         nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
14783
14784         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14785                 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) {
14786                         tg3_flag_set(tp, NO_NVRAM);
14787                         return;
14788                 }
14789
14790                 switch (nvmpinstrp) {
14791                 case FLASH_5762_EEPROM_HD:
14792                         nvmpinstrp = FLASH_5720_EEPROM_HD;
14793                         break;
14794                 case FLASH_5762_EEPROM_LD:
14795                         nvmpinstrp = FLASH_5720_EEPROM_LD;
14796                         break;
14797                 case FLASH_5720VENDOR_M_ST_M45PE20:
14798                         /* This pinstrap supports multiple sizes, so force it
14799                          * to read the actual size from location 0xf0.
14800                          */
14801                         nvmpinstrp = FLASH_5720VENDOR_ST_45USPT;
14802                         break;
14803                 }
14804         }
14805
14806         switch (nvmpinstrp) {
14807         case FLASH_5720_EEPROM_HD:
14808         case FLASH_5720_EEPROM_LD:
14809                 tp->nvram_jedecnum = JEDEC_ATMEL;
14810                 tg3_flag_set(tp, NVRAM_BUFFERED);
14811
14812                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14813                 tw32(NVRAM_CFG1, nvcfg1);
14814                 if (nvmpinstrp == FLASH_5720_EEPROM_HD)
14815                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14816                 else
14817                         tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
14818                 return;
14819         case FLASH_5720VENDOR_M_ATMEL_DB011D:
14820         case FLASH_5720VENDOR_A_ATMEL_DB011B:
14821         case FLASH_5720VENDOR_A_ATMEL_DB011D:
14822         case FLASH_5720VENDOR_M_ATMEL_DB021D:
14823         case FLASH_5720VENDOR_A_ATMEL_DB021B:
14824         case FLASH_5720VENDOR_A_ATMEL_DB021D:
14825         case FLASH_5720VENDOR_M_ATMEL_DB041D:
14826         case FLASH_5720VENDOR_A_ATMEL_DB041B:
14827         case FLASH_5720VENDOR_A_ATMEL_DB041D:
14828         case FLASH_5720VENDOR_M_ATMEL_DB081D:
14829         case FLASH_5720VENDOR_A_ATMEL_DB081D:
14830         case FLASH_5720VENDOR_ATMEL_45USPT:
14831                 tp->nvram_jedecnum = JEDEC_ATMEL;
14832                 tg3_flag_set(tp, NVRAM_BUFFERED);
14833                 tg3_flag_set(tp, FLASH);
14834
14835                 switch (nvmpinstrp) {
14836                 case FLASH_5720VENDOR_M_ATMEL_DB021D:
14837                 case FLASH_5720VENDOR_A_ATMEL_DB021B:
14838                 case FLASH_5720VENDOR_A_ATMEL_DB021D:
14839                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14840                         break;
14841                 case FLASH_5720VENDOR_M_ATMEL_DB041D:
14842                 case FLASH_5720VENDOR_A_ATMEL_DB041B:
14843                 case FLASH_5720VENDOR_A_ATMEL_DB041D:
14844                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14845                         break;
14846                 case FLASH_5720VENDOR_M_ATMEL_DB081D:
14847                 case FLASH_5720VENDOR_A_ATMEL_DB081D:
14848                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14849                         break;
14850                 default:
14851                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14852                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14853                         break;
14854                 }
14855                 break;
14856         case FLASH_5720VENDOR_M_ST_M25PE10:
14857         case FLASH_5720VENDOR_M_ST_M45PE10:
14858         case FLASH_5720VENDOR_A_ST_M25PE10:
14859         case FLASH_5720VENDOR_A_ST_M45PE10:
14860         case FLASH_5720VENDOR_M_ST_M25PE20:
14861         case FLASH_5720VENDOR_M_ST_M45PE20:
14862         case FLASH_5720VENDOR_A_ST_M25PE20:
14863         case FLASH_5720VENDOR_A_ST_M45PE20:
14864         case FLASH_5720VENDOR_M_ST_M25PE40:
14865         case FLASH_5720VENDOR_M_ST_M45PE40:
14866         case FLASH_5720VENDOR_A_ST_M25PE40:
14867         case FLASH_5720VENDOR_A_ST_M45PE40:
14868         case FLASH_5720VENDOR_M_ST_M25PE80:
14869         case FLASH_5720VENDOR_M_ST_M45PE80:
14870         case FLASH_5720VENDOR_A_ST_M25PE80:
14871         case FLASH_5720VENDOR_A_ST_M45PE80:
14872         case FLASH_5720VENDOR_ST_25USPT:
14873         case FLASH_5720VENDOR_ST_45USPT:
14874                 tp->nvram_jedecnum = JEDEC_ST;
14875                 tg3_flag_set(tp, NVRAM_BUFFERED);
14876                 tg3_flag_set(tp, FLASH);
14877
14878                 switch (nvmpinstrp) {
14879                 case FLASH_5720VENDOR_M_ST_M25PE20:
14880                 case FLASH_5720VENDOR_M_ST_M45PE20:
14881                 case FLASH_5720VENDOR_A_ST_M25PE20:
14882                 case FLASH_5720VENDOR_A_ST_M45PE20:
14883                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14884                         break;
14885                 case FLASH_5720VENDOR_M_ST_M25PE40:
14886                 case FLASH_5720VENDOR_M_ST_M45PE40:
14887                 case FLASH_5720VENDOR_A_ST_M25PE40:
14888                 case FLASH_5720VENDOR_A_ST_M45PE40:
14889                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14890                         break;
14891                 case FLASH_5720VENDOR_M_ST_M25PE80:
14892                 case FLASH_5720VENDOR_M_ST_M45PE80:
14893                 case FLASH_5720VENDOR_A_ST_M25PE80:
14894                 case FLASH_5720VENDOR_A_ST_M45PE80:
14895                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14896                         break;
14897                 default:
14898                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14899                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14900                         break;
14901                 }
14902                 break;
14903         default:
14904                 tg3_flag_set(tp, NO_NVRAM);
14905                 return;
14906         }
14907
14908         tg3_nvram_get_pagesize(tp, nvcfg1);
14909         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14910                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14911
14912         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14913                 u32 val;
14914
14915                 if (tg3_nvram_read(tp, 0, &val))
14916                         return;
14917
14918                 if (val != TG3_EEPROM_MAGIC &&
14919                     (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW)
14920                         tg3_flag_set(tp, NO_NVRAM);
14921         }
14922 }
14923
14924 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
14925 static void tg3_nvram_init(struct tg3 *tp)
14926 {
14927         if (tg3_flag(tp, IS_SSB_CORE)) {
14928                 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
14929                 tg3_flag_clear(tp, NVRAM);
14930                 tg3_flag_clear(tp, NVRAM_BUFFERED);
14931                 tg3_flag_set(tp, NO_NVRAM);
14932                 return;
14933         }
14934
14935         tw32_f(GRC_EEPROM_ADDR,
14936              (EEPROM_ADDR_FSM_RESET |
14937               (EEPROM_DEFAULT_CLOCK_PERIOD <<
14938                EEPROM_ADDR_CLKPERD_SHIFT)));
14939
14940         msleep(1);
14941
14942         /* Enable seeprom accesses. */
14943         tw32_f(GRC_LOCAL_CTRL,
14944              tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
14945         udelay(100);
14946
14947         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
14948             tg3_asic_rev(tp) != ASIC_REV_5701) {
14949                 tg3_flag_set(tp, NVRAM);
14950
14951                 if (tg3_nvram_lock(tp)) {
14952                         netdev_warn(tp->dev,
14953                                     "Cannot get nvram lock, %s failed\n",
14954                                     __func__);
14955                         return;
14956                 }
14957                 tg3_enable_nvram_access(tp);
14958
14959                 tp->nvram_size = 0;
14960
14961                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
14962                         tg3_get_5752_nvram_info(tp);
14963                 else if (tg3_asic_rev(tp) == ASIC_REV_5755)
14964                         tg3_get_5755_nvram_info(tp);
14965                 else if (tg3_asic_rev(tp) == ASIC_REV_5787 ||
14966                          tg3_asic_rev(tp) == ASIC_REV_5784 ||
14967                          tg3_asic_rev(tp) == ASIC_REV_5785)
14968                         tg3_get_5787_nvram_info(tp);
14969                 else if (tg3_asic_rev(tp) == ASIC_REV_5761)
14970                         tg3_get_5761_nvram_info(tp);
14971                 else if (tg3_asic_rev(tp) == ASIC_REV_5906)
14972                         tg3_get_5906_nvram_info(tp);
14973                 else if (tg3_asic_rev(tp) == ASIC_REV_57780 ||
14974                          tg3_flag(tp, 57765_CLASS))
14975                         tg3_get_57780_nvram_info(tp);
14976                 else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
14977                          tg3_asic_rev(tp) == ASIC_REV_5719)
14978                         tg3_get_5717_nvram_info(tp);
14979                 else if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
14980                          tg3_asic_rev(tp) == ASIC_REV_5762)
14981                         tg3_get_5720_nvram_info(tp);
14982                 else
14983                         tg3_get_nvram_info(tp);
14984
14985                 if (tp->nvram_size == 0)
14986                         tg3_get_nvram_size(tp);
14987
14988                 tg3_disable_nvram_access(tp);
14989                 tg3_nvram_unlock(tp);
14990
14991         } else {
14992                 tg3_flag_clear(tp, NVRAM);
14993                 tg3_flag_clear(tp, NVRAM_BUFFERED);
14994
14995                 tg3_get_eeprom_size(tp);
14996         }
14997 }
14998
14999 struct subsys_tbl_ent {
15000         u16 subsys_vendor, subsys_devid;
15001         u32 phy_id;
15002 };
15003
15004 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
15005         /* Broadcom boards. */
15006         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15007           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
15008         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15009           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
15010         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15011           TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
15012         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15013           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
15014         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15015           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
15016         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15017           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
15018         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15019           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
15020         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15021           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
15022         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15023           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
15024         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15025           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
15026         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15027           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
15028
15029         /* 3com boards. */
15030         { TG3PCI_SUBVENDOR_ID_3COM,
15031           TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
15032         { TG3PCI_SUBVENDOR_ID_3COM,
15033           TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
15034         { TG3PCI_SUBVENDOR_ID_3COM,
15035           TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
15036         { TG3PCI_SUBVENDOR_ID_3COM,
15037           TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
15038         { TG3PCI_SUBVENDOR_ID_3COM,
15039           TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
15040
15041         /* DELL boards. */
15042         { TG3PCI_SUBVENDOR_ID_DELL,
15043           TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
15044         { TG3PCI_SUBVENDOR_ID_DELL,
15045           TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
15046         { TG3PCI_SUBVENDOR_ID_DELL,
15047           TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
15048         { TG3PCI_SUBVENDOR_ID_DELL,
15049           TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
15050
15051         /* Compaq boards. */
15052         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15053           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
15054         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15055           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
15056         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15057           TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
15058         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15059           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
15060         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15061           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
15062
15063         /* IBM boards. */
15064         { TG3PCI_SUBVENDOR_ID_IBM,
15065           TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
15066 };
15067
15068 static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
15069 {
15070         int i;
15071
15072         for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
15073                 if ((subsys_id_to_phy_id[i].subsys_vendor ==
15074                      tp->pdev->subsystem_vendor) &&
15075                     (subsys_id_to_phy_id[i].subsys_devid ==
15076                      tp->pdev->subsystem_device))
15077                         return &subsys_id_to_phy_id[i];
15078         }
15079         return NULL;
15080 }
15081
15082 static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
15083 {
15084         u32 val;
15085
15086         tp->phy_id = TG3_PHY_ID_INVALID;
15087         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15088
15089         /* Assume an onboard device and WOL capable by default.  */
15090         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15091         tg3_flag_set(tp, WOL_CAP);
15092
15093         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15094                 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
15095                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15096                         tg3_flag_set(tp, IS_NIC);
15097                 }
15098                 val = tr32(VCPU_CFGSHDW);
15099                 if (val & VCPU_CFGSHDW_ASPM_DBNC)
15100                         tg3_flag_set(tp, ASPM_WORKAROUND);
15101                 if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
15102                     (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
15103                         tg3_flag_set(tp, WOL_ENABLE);
15104                         device_set_wakeup_enable(&tp->pdev->dev, true);
15105                 }
15106                 goto done;
15107         }
15108
15109         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
15110         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
15111                 u32 nic_cfg, led_cfg;
15112                 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0;
15113                 u32 nic_phy_id, ver, eeprom_phy_id;
15114                 int eeprom_phy_serdes = 0;
15115
15116                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
15117                 tp->nic_sram_data_cfg = nic_cfg;
15118
15119                 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
15120                 ver >>= NIC_SRAM_DATA_VER_SHIFT;
15121                 if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15122                     tg3_asic_rev(tp) != ASIC_REV_5701 &&
15123                     tg3_asic_rev(tp) != ASIC_REV_5703 &&
15124                     (ver > 0) && (ver < 0x100))
15125                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
15126
15127                 if (tg3_asic_rev(tp) == ASIC_REV_5785)
15128                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
15129
15130                 if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15131                     tg3_asic_rev(tp) == ASIC_REV_5719 ||
15132                     tg3_asic_rev(tp) == ASIC_REV_5720)
15133                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5);
15134
15135                 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
15136                     NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
15137                         eeprom_phy_serdes = 1;
15138
15139                 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
15140                 if (nic_phy_id != 0) {
15141                         u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
15142                         u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
15143
15144                         eeprom_phy_id  = (id1 >> 16) << 10;
15145                         eeprom_phy_id |= (id2 & 0xfc00) << 16;
15146                         eeprom_phy_id |= (id2 & 0x03ff) <<  0;
15147                 } else
15148                         eeprom_phy_id = 0;
15149
15150                 tp->phy_id = eeprom_phy_id;
15151                 if (eeprom_phy_serdes) {
15152                         if (!tg3_flag(tp, 5705_PLUS))
15153                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15154                         else
15155                                 tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
15156                 }
15157
15158                 if (tg3_flag(tp, 5750_PLUS))
15159                         led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
15160                                     SHASTA_EXT_LED_MODE_MASK);
15161                 else
15162                         led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
15163
15164                 switch (led_cfg) {
15165                 default:
15166                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
15167                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15168                         break;
15169
15170                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
15171                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15172                         break;
15173
15174                 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
15175                         tp->led_ctrl = LED_CTRL_MODE_MAC;
15176
15177                         /* Default to PHY_1_MODE if 0 (MAC_MODE) is
15178                          * read on some older 5700/5701 bootcode.
15179                          */
15180                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
15181                             tg3_asic_rev(tp) == ASIC_REV_5701)
15182                                 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15183
15184                         break;
15185
15186                 case SHASTA_EXT_LED_SHARED:
15187                         tp->led_ctrl = LED_CTRL_MODE_SHARED;
15188                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
15189                             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1)
15190                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15191                                                  LED_CTRL_MODE_PHY_2);
15192
15193                         if (tg3_flag(tp, 5717_PLUS) ||
15194                             tg3_asic_rev(tp) == ASIC_REV_5762)
15195                                 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE |
15196                                                 LED_CTRL_BLINK_RATE_MASK;
15197
15198                         break;
15199
15200                 case SHASTA_EXT_LED_MAC:
15201                         tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
15202                         break;
15203
15204                 case SHASTA_EXT_LED_COMBO:
15205                         tp->led_ctrl = LED_CTRL_MODE_COMBO;
15206                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0)
15207                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15208                                                  LED_CTRL_MODE_PHY_2);
15209                         break;
15210
15211                 }
15212
15213                 if ((tg3_asic_rev(tp) == ASIC_REV_5700 ||
15214                      tg3_asic_rev(tp) == ASIC_REV_5701) &&
15215                     tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
15216                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15217
15218                 if (tg3_chip_rev(tp) == CHIPREV_5784_AX)
15219                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15220
15221                 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
15222                         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15223                         if ((tp->pdev->subsystem_vendor ==
15224                              PCI_VENDOR_ID_ARIMA) &&
15225                             (tp->pdev->subsystem_device == 0x205a ||
15226                              tp->pdev->subsystem_device == 0x2063))
15227                                 tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15228                 } else {
15229                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15230                         tg3_flag_set(tp, IS_NIC);
15231                 }
15232
15233                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
15234                         tg3_flag_set(tp, ENABLE_ASF);
15235                         if (tg3_flag(tp, 5750_PLUS))
15236                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
15237                 }
15238
15239                 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
15240                     tg3_flag(tp, 5750_PLUS))
15241                         tg3_flag_set(tp, ENABLE_APE);
15242
15243                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
15244                     !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
15245                         tg3_flag_clear(tp, WOL_CAP);
15246
15247                 if (tg3_flag(tp, WOL_CAP) &&
15248                     (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
15249                         tg3_flag_set(tp, WOL_ENABLE);
15250                         device_set_wakeup_enable(&tp->pdev->dev, true);
15251                 }
15252
15253                 if (cfg2 & (1 << 17))
15254                         tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
15255
15256                 /* serdes signal pre-emphasis in register 0x590 set by */
15257                 /* bootcode if bit 18 is set */
15258                 if (cfg2 & (1 << 18))
15259                         tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
15260
15261                 if ((tg3_flag(tp, 57765_PLUS) ||
15262                      (tg3_asic_rev(tp) == ASIC_REV_5784 &&
15263                       tg3_chip_rev(tp) != CHIPREV_5784_AX)) &&
15264                     (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
15265                         tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
15266
15267                 if (tg3_flag(tp, PCI_EXPRESS)) {
15268                         u32 cfg3;
15269
15270                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
15271                         if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
15272                             !tg3_flag(tp, 57765_PLUS) &&
15273                             (cfg3 & NIC_SRAM_ASPM_DEBOUNCE))
15274                                 tg3_flag_set(tp, ASPM_WORKAROUND);
15275                         if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID)
15276                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
15277                         if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK)
15278                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
15279                 }
15280
15281                 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
15282                         tg3_flag_set(tp, RGMII_INBAND_DISABLE);
15283                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
15284                         tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
15285                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
15286                         tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
15287
15288                 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV)
15289                         tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV;
15290         }
15291 done:
15292         if (tg3_flag(tp, WOL_CAP))
15293                 device_set_wakeup_enable(&tp->pdev->dev,
15294                                          tg3_flag(tp, WOL_ENABLE));
15295         else
15296                 device_set_wakeup_capable(&tp->pdev->dev, false);
15297 }
15298
15299 static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val)
15300 {
15301         int i, err;
15302         u32 val2, off = offset * 8;
15303
15304         err = tg3_nvram_lock(tp);
15305         if (err)
15306                 return err;
15307
15308         tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE);
15309         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN |
15310                         APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START);
15311         tg3_ape_read32(tp, TG3_APE_OTP_CTRL);
15312         udelay(10);
15313
15314         for (i = 0; i < 100; i++) {
15315                 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS);
15316                 if (val2 & APE_OTP_STATUS_CMD_DONE) {
15317                         *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA);
15318                         break;
15319                 }
15320                 udelay(10);
15321         }
15322
15323         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0);
15324
15325         tg3_nvram_unlock(tp);
15326         if (val2 & APE_OTP_STATUS_CMD_DONE)
15327                 return 0;
15328
15329         return -EBUSY;
15330 }
15331
15332 static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
15333 {
15334         int i;
15335         u32 val;
15336
15337         tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
15338         tw32(OTP_CTRL, cmd);
15339
15340         /* Wait for up to 1 ms for command to execute. */
15341         for (i = 0; i < 100; i++) {
15342                 val = tr32(OTP_STATUS);
15343                 if (val & OTP_STATUS_CMD_DONE)
15344                         break;
15345                 udelay(10);
15346         }
15347
15348         return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
15349 }
15350
15351 /* Read the gphy configuration from the OTP region of the chip.  The gphy
15352  * configuration is a 32-bit value that straddles the alignment boundary.
15353  * We do two 32-bit reads and then shift and merge the results.
15354  */
15355 static u32 tg3_read_otp_phycfg(struct tg3 *tp)
15356 {
15357         u32 bhalf_otp, thalf_otp;
15358
15359         tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
15360
15361         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
15362                 return 0;
15363
15364         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
15365
15366         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15367                 return 0;
15368
15369         thalf_otp = tr32(OTP_READ_DATA);
15370
15371         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
15372
15373         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15374                 return 0;
15375
15376         bhalf_otp = tr32(OTP_READ_DATA);
15377
15378         return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
15379 }
15380
15381 static void tg3_phy_init_link_config(struct tg3 *tp)
15382 {
15383         u32 adv = ADVERTISED_Autoneg;
15384
15385         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
15386                 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV))
15387                         adv |= ADVERTISED_1000baseT_Half;
15388                 adv |= ADVERTISED_1000baseT_Full;
15389         }
15390
15391         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15392                 adv |= ADVERTISED_100baseT_Half |
15393                        ADVERTISED_100baseT_Full |
15394                        ADVERTISED_10baseT_Half |
15395                        ADVERTISED_10baseT_Full |
15396                        ADVERTISED_TP;
15397         else
15398                 adv |= ADVERTISED_FIBRE;
15399
15400         tp->link_config.advertising = adv;
15401         tp->link_config.speed = SPEED_UNKNOWN;
15402         tp->link_config.duplex = DUPLEX_UNKNOWN;
15403         tp->link_config.autoneg = AUTONEG_ENABLE;
15404         tp->link_config.active_speed = SPEED_UNKNOWN;
15405         tp->link_config.active_duplex = DUPLEX_UNKNOWN;
15406
15407         tp->old_link = -1;
15408 }
15409
15410 static int tg3_phy_probe(struct tg3 *tp)
15411 {
15412         u32 hw_phy_id_1, hw_phy_id_2;
15413         u32 hw_phy_id, hw_phy_id_masked;
15414         int err;
15415
15416         /* flow control autonegotiation is default behavior */
15417         tg3_flag_set(tp, PAUSE_AUTONEG);
15418         tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
15419
15420         if (tg3_flag(tp, ENABLE_APE)) {
15421                 switch (tp->pci_fn) {
15422                 case 0:
15423                         tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
15424                         break;
15425                 case 1:
15426                         tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
15427                         break;
15428                 case 2:
15429                         tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
15430                         break;
15431                 case 3:
15432                         tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
15433                         break;
15434                 }
15435         }
15436
15437         if (!tg3_flag(tp, ENABLE_ASF) &&
15438             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15439             !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15440                 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
15441                                    TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
15442
15443         if (tg3_flag(tp, USE_PHYLIB))
15444                 return tg3_phy_init(tp);
15445
15446         /* Reading the PHY ID register can conflict with ASF
15447          * firmware access to the PHY hardware.
15448          */
15449         err = 0;
15450         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
15451                 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
15452         } else {
15453                 /* Now read the physical PHY_ID from the chip and verify
15454                  * that it is sane.  If it doesn't look good, we fall back
15455                  * to either the hard-coded table based PHY_ID and failing
15456                  * that the value found in the eeprom area.
15457                  */
15458                 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
15459                 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
15460
15461                 hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
15462                 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
15463                 hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
15464
15465                 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
15466         }
15467
15468         if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
15469                 tp->phy_id = hw_phy_id;
15470                 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
15471                         tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15472                 else
15473                         tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
15474         } else {
15475                 if (tp->phy_id != TG3_PHY_ID_INVALID) {
15476                         /* Do nothing, phy ID already set up in
15477                          * tg3_get_eeprom_hw_cfg().
15478                          */
15479                 } else {
15480                         struct subsys_tbl_ent *p;
15481
15482                         /* No eeprom signature?  Try the hardcoded
15483                          * subsys device table.
15484                          */
15485                         p = tg3_lookup_by_subsys(tp);
15486                         if (p) {
15487                                 tp->phy_id = p->phy_id;
15488                         } else if (!tg3_flag(tp, IS_SSB_CORE)) {
15489                                 /* For now we saw the IDs 0xbc050cd0,
15490                                  * 0xbc050f80 and 0xbc050c30 on devices
15491                                  * connected to an BCM4785 and there are
15492                                  * probably more. Just assume that the phy is
15493                                  * supported when it is connected to a SSB core
15494                                  * for now.
15495                                  */
15496                                 return -ENODEV;
15497                         }
15498
15499                         if (!tp->phy_id ||
15500                             tp->phy_id == TG3_PHY_ID_BCM8002)
15501                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15502                 }
15503         }
15504
15505         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15506             (tg3_asic_rev(tp) == ASIC_REV_5719 ||
15507              tg3_asic_rev(tp) == ASIC_REV_5720 ||
15508              tg3_asic_rev(tp) == ASIC_REV_57766 ||
15509              tg3_asic_rev(tp) == ASIC_REV_5762 ||
15510              (tg3_asic_rev(tp) == ASIC_REV_5717 &&
15511               tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) ||
15512              (tg3_asic_rev(tp) == ASIC_REV_57765 &&
15513               tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) {
15514                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
15515
15516                 tp->eee.supported = SUPPORTED_100baseT_Full |
15517                                     SUPPORTED_1000baseT_Full;
15518                 tp->eee.advertised = ADVERTISED_100baseT_Full |
15519                                      ADVERTISED_1000baseT_Full;
15520                 tp->eee.eee_enabled = 1;
15521                 tp->eee.tx_lpi_enabled = 1;
15522                 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US;
15523         }
15524
15525         tg3_phy_init_link_config(tp);
15526
15527         if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
15528             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15529             !tg3_flag(tp, ENABLE_APE) &&
15530             !tg3_flag(tp, ENABLE_ASF)) {
15531                 u32 bmsr, dummy;
15532
15533                 tg3_readphy(tp, MII_BMSR, &bmsr);
15534                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
15535                     (bmsr & BMSR_LSTATUS))
15536                         goto skip_phy_reset;
15537
15538                 err = tg3_phy_reset(tp);
15539                 if (err)
15540                         return err;
15541
15542                 tg3_phy_set_wirespeed(tp);
15543
15544                 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
15545                         tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
15546                                             tp->link_config.flowctrl);
15547
15548                         tg3_writephy(tp, MII_BMCR,
15549                                      BMCR_ANENABLE | BMCR_ANRESTART);
15550                 }
15551         }
15552
15553 skip_phy_reset:
15554         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
15555                 err = tg3_init_5401phy_dsp(tp);
15556                 if (err)
15557                         return err;
15558
15559                 err = tg3_init_5401phy_dsp(tp);
15560         }
15561
15562         return err;
15563 }
15564
15565 static void tg3_read_vpd(struct tg3 *tp)
15566 {
15567         u8 *vpd_data;
15568         unsigned int block_end, rosize, len;
15569         u32 vpdlen;
15570         int j, i = 0;
15571
15572         vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
15573         if (!vpd_data)
15574                 goto out_no_vpd;
15575
15576         i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
15577         if (i < 0)
15578                 goto out_not_found;
15579
15580         rosize = pci_vpd_lrdt_size(&vpd_data[i]);
15581         block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
15582         i += PCI_VPD_LRDT_TAG_SIZE;
15583
15584         if (block_end > vpdlen)
15585                 goto out_not_found;
15586
15587         j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15588                                       PCI_VPD_RO_KEYWORD_MFR_ID);
15589         if (j > 0) {
15590                 len = pci_vpd_info_field_size(&vpd_data[j]);
15591
15592                 j += PCI_VPD_INFO_FLD_HDR_SIZE;
15593                 if (j + len > block_end || len != 4 ||
15594                     memcmp(&vpd_data[j], "1028", 4))
15595                         goto partno;
15596
15597                 j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15598                                               PCI_VPD_RO_KEYWORD_VENDOR0);
15599                 if (j < 0)
15600                         goto partno;
15601
15602                 len = pci_vpd_info_field_size(&vpd_data[j]);
15603
15604                 j += PCI_VPD_INFO_FLD_HDR_SIZE;
15605                 if (j + len > block_end)
15606                         goto partno;
15607
15608                 if (len >= sizeof(tp->fw_ver))
15609                         len = sizeof(tp->fw_ver) - 1;
15610                 memset(tp->fw_ver, 0, sizeof(tp->fw_ver));
15611                 snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len,
15612                          &vpd_data[j]);
15613         }
15614
15615 partno:
15616         i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15617                                       PCI_VPD_RO_KEYWORD_PARTNO);
15618         if (i < 0)
15619                 goto out_not_found;
15620
15621         len = pci_vpd_info_field_size(&vpd_data[i]);
15622
15623         i += PCI_VPD_INFO_FLD_HDR_SIZE;
15624         if (len > TG3_BPN_SIZE ||
15625             (len + i) > vpdlen)
15626                 goto out_not_found;
15627
15628         memcpy(tp->board_part_number, &vpd_data[i], len);
15629
15630 out_not_found:
15631         kfree(vpd_data);
15632         if (tp->board_part_number[0])
15633                 return;
15634
15635 out_no_vpd:
15636         if (tg3_asic_rev(tp) == ASIC_REV_5717) {
15637                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15638                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
15639                         strcpy(tp->board_part_number, "BCM5717");
15640                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
15641                         strcpy(tp->board_part_number, "BCM5718");
15642                 else
15643                         goto nomatch;
15644         } else if (tg3_asic_rev(tp) == ASIC_REV_57780) {
15645                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
15646                         strcpy(tp->board_part_number, "BCM57780");
15647                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
15648                         strcpy(tp->board_part_number, "BCM57760");
15649                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
15650                         strcpy(tp->board_part_number, "BCM57790");
15651                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
15652                         strcpy(tp->board_part_number, "BCM57788");
15653                 else
15654                         goto nomatch;
15655         } else if (tg3_asic_rev(tp) == ASIC_REV_57765) {
15656                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
15657                         strcpy(tp->board_part_number, "BCM57761");
15658                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
15659                         strcpy(tp->board_part_number, "BCM57765");
15660                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
15661                         strcpy(tp->board_part_number, "BCM57781");
15662                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
15663                         strcpy(tp->board_part_number, "BCM57785");
15664                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
15665                         strcpy(tp->board_part_number, "BCM57791");
15666                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
15667                         strcpy(tp->board_part_number, "BCM57795");
15668                 else
15669                         goto nomatch;
15670         } else if (tg3_asic_rev(tp) == ASIC_REV_57766) {
15671                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
15672                         strcpy(tp->board_part_number, "BCM57762");
15673                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
15674                         strcpy(tp->board_part_number, "BCM57766");
15675                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
15676                         strcpy(tp->board_part_number, "BCM57782");
15677                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15678                         strcpy(tp->board_part_number, "BCM57786");
15679                 else
15680                         goto nomatch;
15681         } else if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15682                 strcpy(tp->board_part_number, "BCM95906");
15683         } else {
15684 nomatch:
15685                 strcpy(tp->board_part_number, "none");
15686         }
15687 }
15688
15689 static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
15690 {
15691         u32 val;
15692
15693         if (tg3_nvram_read(tp, offset, &val) ||
15694             (val & 0xfc000000) != 0x0c000000 ||
15695             tg3_nvram_read(tp, offset + 4, &val) ||
15696             val != 0)
15697                 return 0;
15698
15699         return 1;
15700 }
15701
15702 static void tg3_read_bc_ver(struct tg3 *tp)
15703 {
15704         u32 val, offset, start, ver_offset;
15705         int i, dst_off;
15706         bool newver = false;
15707
15708         if (tg3_nvram_read(tp, 0xc, &offset) ||
15709             tg3_nvram_read(tp, 0x4, &start))
15710                 return;
15711
15712         offset = tg3_nvram_logical_addr(tp, offset);
15713
15714         if (tg3_nvram_read(tp, offset, &val))
15715                 return;
15716
15717         if ((val & 0xfc000000) == 0x0c000000) {
15718                 if (tg3_nvram_read(tp, offset + 4, &val))
15719                         return;
15720
15721                 if (val == 0)
15722                         newver = true;
15723         }
15724
15725         dst_off = strlen(tp->fw_ver);
15726
15727         if (newver) {
15728                 if (TG3_VER_SIZE - dst_off < 16 ||
15729                     tg3_nvram_read(tp, offset + 8, &ver_offset))
15730                         return;
15731
15732                 offset = offset + ver_offset - start;
15733                 for (i = 0; i < 16; i += 4) {
15734                         __be32 v;
15735                         if (tg3_nvram_read_be32(tp, offset + i, &v))
15736                                 return;
15737
15738                         memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
15739                 }
15740         } else {
15741                 u32 major, minor;
15742
15743                 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
15744                         return;
15745
15746                 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
15747                         TG3_NVM_BCVER_MAJSFT;
15748                 minor = ver_offset & TG3_NVM_BCVER_MINMSK;
15749                 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
15750                          "v%d.%02d", major, minor);
15751         }
15752 }
15753
15754 static void tg3_read_hwsb_ver(struct tg3 *tp)
15755 {
15756         u32 val, major, minor;
15757
15758         /* Use native endian representation */
15759         if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
15760                 return;
15761
15762         major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
15763                 TG3_NVM_HWSB_CFG1_MAJSFT;
15764         minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
15765                 TG3_NVM_HWSB_CFG1_MINSFT;
15766
15767         snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
15768 }
15769
15770 static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
15771 {
15772         u32 offset, major, minor, build;
15773
15774         strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
15775
15776         if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
15777                 return;
15778
15779         switch (val & TG3_EEPROM_SB_REVISION_MASK) {
15780         case TG3_EEPROM_SB_REVISION_0:
15781                 offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
15782                 break;
15783         case TG3_EEPROM_SB_REVISION_2:
15784                 offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
15785                 break;
15786         case TG3_EEPROM_SB_REVISION_3:
15787                 offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
15788                 break;
15789         case TG3_EEPROM_SB_REVISION_4:
15790                 offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
15791                 break;
15792         case TG3_EEPROM_SB_REVISION_5:
15793                 offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
15794                 break;
15795         case TG3_EEPROM_SB_REVISION_6:
15796                 offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
15797                 break;
15798         default:
15799                 return;
15800         }
15801
15802         if (tg3_nvram_read(tp, offset, &val))
15803                 return;
15804
15805         build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
15806                 TG3_EEPROM_SB_EDH_BLD_SHFT;
15807         major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
15808                 TG3_EEPROM_SB_EDH_MAJ_SHFT;
15809         minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
15810
15811         if (minor > 99 || build > 26)
15812                 return;
15813
15814         offset = strlen(tp->fw_ver);
15815         snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
15816                  " v%d.%02d", major, minor);
15817
15818         if (build > 0) {
15819                 offset = strlen(tp->fw_ver);
15820                 if (offset < TG3_VER_SIZE - 1)
15821                         tp->fw_ver[offset] = 'a' + build - 1;
15822         }
15823 }
15824
15825 static void tg3_read_mgmtfw_ver(struct tg3 *tp)
15826 {
15827         u32 val, offset, start;
15828         int i, vlen;
15829
15830         for (offset = TG3_NVM_DIR_START;
15831              offset < TG3_NVM_DIR_END;
15832              offset += TG3_NVM_DIRENT_SIZE) {
15833                 if (tg3_nvram_read(tp, offset, &val))
15834                         return;
15835
15836                 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
15837                         break;
15838         }
15839
15840         if (offset == TG3_NVM_DIR_END)
15841                 return;
15842
15843         if (!tg3_flag(tp, 5705_PLUS))
15844                 start = 0x08000000;
15845         else if (tg3_nvram_read(tp, offset - 4, &start))
15846                 return;
15847
15848         if (tg3_nvram_read(tp, offset + 4, &offset) ||
15849             !tg3_fw_img_is_valid(tp, offset) ||
15850             tg3_nvram_read(tp, offset + 8, &val))
15851                 return;
15852
15853         offset += val - start;
15854
15855         vlen = strlen(tp->fw_ver);
15856
15857         tp->fw_ver[vlen++] = ',';
15858         tp->fw_ver[vlen++] = ' ';
15859
15860         for (i = 0; i < 4; i++) {
15861                 __be32 v;
15862                 if (tg3_nvram_read_be32(tp, offset, &v))
15863                         return;
15864
15865                 offset += sizeof(v);
15866
15867                 if (vlen > TG3_VER_SIZE - sizeof(v)) {
15868                         memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
15869                         break;
15870                 }
15871
15872                 memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
15873                 vlen += sizeof(v);
15874         }
15875 }
15876
15877 static void tg3_probe_ncsi(struct tg3 *tp)
15878 {
15879         u32 apedata;
15880
15881         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
15882         if (apedata != APE_SEG_SIG_MAGIC)
15883                 return;
15884
15885         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
15886         if (!(apedata & APE_FW_STATUS_READY))
15887                 return;
15888
15889         if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
15890                 tg3_flag_set(tp, APE_HAS_NCSI);
15891 }
15892
15893 static void tg3_read_dash_ver(struct tg3 *tp)
15894 {
15895         int vlen;
15896         u32 apedata;
15897         char *fwtype;
15898
15899         apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
15900
15901         if (tg3_flag(tp, APE_HAS_NCSI))
15902                 fwtype = "NCSI";
15903         else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725)
15904                 fwtype = "SMASH";
15905         else
15906                 fwtype = "DASH";
15907
15908         vlen = strlen(tp->fw_ver);
15909
15910         snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
15911                  fwtype,
15912                  (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
15913                  (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
15914                  (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
15915                  (apedata & APE_FW_VERSION_BLDMSK));
15916 }
15917
15918 static void tg3_read_otp_ver(struct tg3 *tp)
15919 {
15920         u32 val, val2;
15921
15922         if (tg3_asic_rev(tp) != ASIC_REV_5762)
15923                 return;
15924
15925         if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) &&
15926             !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) &&
15927             TG3_OTP_MAGIC0_VALID(val)) {
15928                 u64 val64 = (u64) val << 32 | val2;
15929                 u32 ver = 0;
15930                 int i, vlen;
15931
15932                 for (i = 0; i < 7; i++) {
15933                         if ((val64 & 0xff) == 0)
15934                                 break;
15935                         ver = val64 & 0xff;
15936                         val64 >>= 8;
15937                 }
15938                 vlen = strlen(tp->fw_ver);
15939                 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver);
15940         }
15941 }
15942
15943 static void tg3_read_fw_ver(struct tg3 *tp)
15944 {
15945         u32 val;
15946         bool vpd_vers = false;
15947
15948         if (tp->fw_ver[0] != 0)
15949                 vpd_vers = true;
15950
15951         if (tg3_flag(tp, NO_NVRAM)) {
15952                 strcat(tp->fw_ver, "sb");
15953                 tg3_read_otp_ver(tp);
15954                 return;
15955         }
15956
15957         if (tg3_nvram_read(tp, 0, &val))
15958                 return;
15959
15960         if (val == TG3_EEPROM_MAGIC)
15961                 tg3_read_bc_ver(tp);
15962         else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
15963                 tg3_read_sb_ver(tp, val);
15964         else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
15965                 tg3_read_hwsb_ver(tp);
15966
15967         if (tg3_flag(tp, ENABLE_ASF)) {
15968                 if (tg3_flag(tp, ENABLE_APE)) {
15969                         tg3_probe_ncsi(tp);
15970                         if (!vpd_vers)
15971                                 tg3_read_dash_ver(tp);
15972                 } else if (!vpd_vers) {
15973                         tg3_read_mgmtfw_ver(tp);
15974                 }
15975         }
15976
15977         tp->fw_ver[TG3_VER_SIZE - 1] = 0;
15978 }
15979
15980 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
15981 {
15982         if (tg3_flag(tp, LRG_PROD_RING_CAP))
15983                 return TG3_RX_RET_MAX_SIZE_5717;
15984         else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
15985                 return TG3_RX_RET_MAX_SIZE_5700;
15986         else
15987                 return TG3_RX_RET_MAX_SIZE_5705;
15988 }
15989
15990 static const struct pci_device_id tg3_write_reorder_chipsets[] = {
15991         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
15992         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
15993         { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
15994         { },
15995 };
15996
15997 static struct pci_dev *tg3_find_peer(struct tg3 *tp)
15998 {
15999         struct pci_dev *peer;
16000         unsigned int func, devnr = tp->pdev->devfn & ~7;
16001
16002         for (func = 0; func < 8; func++) {
16003                 peer = pci_get_slot(tp->pdev->bus, devnr | func);
16004                 if (peer && peer != tp->pdev)
16005                         break;
16006                 pci_dev_put(peer);
16007         }
16008         /* 5704 can be configured in single-port mode, set peer to
16009          * tp->pdev in that case.
16010          */
16011         if (!peer) {
16012                 peer = tp->pdev;
16013                 return peer;
16014         }
16015
16016         /*
16017          * We don't need to keep the refcount elevated; there's no way
16018          * to remove one half of this device without removing the other
16019          */
16020         pci_dev_put(peer);
16021
16022         return peer;
16023 }
16024
16025 static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
16026 {
16027         tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
16028         if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) {
16029                 u32 reg;
16030
16031                 /* All devices that use the alternate
16032                  * ASIC REV location have a CPMU.
16033                  */
16034                 tg3_flag_set(tp, CPMU_PRESENT);
16035
16036                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16037                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
16038                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16039                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16040                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
16041                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
16042                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
16043                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
16044                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
16045                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
16046                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787)
16047                         reg = TG3PCI_GEN2_PRODID_ASICREV;
16048                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
16049                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
16050                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
16051                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
16052                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
16053                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
16054                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
16055                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
16056                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
16057                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
16058                         reg = TG3PCI_GEN15_PRODID_ASICREV;
16059                 else
16060                         reg = TG3PCI_PRODID_ASICREV;
16061
16062                 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
16063         }
16064
16065         /* Wrong chip ID in 5752 A0. This code can be removed later
16066          * as A0 is not in production.
16067          */
16068         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW)
16069                 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
16070
16071         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0)
16072                 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
16073
16074         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16075             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16076             tg3_asic_rev(tp) == ASIC_REV_5720)
16077                 tg3_flag_set(tp, 5717_PLUS);
16078
16079         if (tg3_asic_rev(tp) == ASIC_REV_57765 ||
16080             tg3_asic_rev(tp) == ASIC_REV_57766)
16081                 tg3_flag_set(tp, 57765_CLASS);
16082
16083         if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) ||
16084              tg3_asic_rev(tp) == ASIC_REV_5762)
16085                 tg3_flag_set(tp, 57765_PLUS);
16086
16087         /* Intentionally exclude ASIC_REV_5906 */
16088         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16089             tg3_asic_rev(tp) == ASIC_REV_5787 ||
16090             tg3_asic_rev(tp) == ASIC_REV_5784 ||
16091             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16092             tg3_asic_rev(tp) == ASIC_REV_5785 ||
16093             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16094             tg3_flag(tp, 57765_PLUS))
16095                 tg3_flag_set(tp, 5755_PLUS);
16096
16097         if (tg3_asic_rev(tp) == ASIC_REV_5780 ||
16098             tg3_asic_rev(tp) == ASIC_REV_5714)
16099                 tg3_flag_set(tp, 5780_CLASS);
16100
16101         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16102             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16103             tg3_asic_rev(tp) == ASIC_REV_5906 ||
16104             tg3_flag(tp, 5755_PLUS) ||
16105             tg3_flag(tp, 5780_CLASS))
16106                 tg3_flag_set(tp, 5750_PLUS);
16107
16108         if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
16109             tg3_flag(tp, 5750_PLUS))
16110                 tg3_flag_set(tp, 5705_PLUS);
16111 }
16112
16113 static bool tg3_10_100_only_device(struct tg3 *tp,
16114                                    const struct pci_device_id *ent)
16115 {
16116         u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
16117
16118         if ((tg3_asic_rev(tp) == ASIC_REV_5703 &&
16119              (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
16120             (tp->phy_flags & TG3_PHYFLG_IS_FET))
16121                 return true;
16122
16123         if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
16124                 if (tg3_asic_rev(tp) == ASIC_REV_5705) {
16125                         if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
16126                                 return true;
16127                 } else {
16128                         return true;
16129                 }
16130         }
16131
16132         return false;
16133 }
16134
16135 static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
16136 {
16137         u32 misc_ctrl_reg;
16138         u32 pci_state_reg, grc_misc_cfg;
16139         u32 val;
16140         u16 pci_cmd;
16141         int err;
16142
16143         /* Force memory write invalidate off.  If we leave it on,
16144          * then on 5700_BX chips we have to enable a workaround.
16145          * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
16146          * to match the cacheline size.  The Broadcom driver have this
16147          * workaround but turns MWI off all the times so never uses
16148          * it.  This seems to suggest that the workaround is insufficient.
16149          */
16150         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16151         pci_cmd &= ~PCI_COMMAND_INVALIDATE;
16152         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16153
16154         /* Important! -- Make sure register accesses are byteswapped
16155          * correctly.  Also, for those chips that require it, make
16156          * sure that indirect register accesses are enabled before
16157          * the first operation.
16158          */
16159         pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16160                               &misc_ctrl_reg);
16161         tp->misc_host_ctrl |= (misc_ctrl_reg &
16162                                MISC_HOST_CTRL_CHIPREV);
16163         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16164                                tp->misc_host_ctrl);
16165
16166         tg3_detect_asic_rev(tp, misc_ctrl_reg);
16167
16168         /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
16169          * we need to disable memory and use config. cycles
16170          * only to access all registers. The 5702/03 chips
16171          * can mistakenly decode the special cycles from the
16172          * ICH chipsets as memory write cycles, causing corruption
16173          * of register and memory space. Only certain ICH bridges
16174          * will drive special cycles with non-zero data during the
16175          * address phase which can fall within the 5703's address
16176          * range. This is not an ICH bug as the PCI spec allows
16177          * non-zero address during special cycles. However, only
16178          * these ICH bridges are known to drive non-zero addresses
16179          * during special cycles.
16180          *
16181          * Since special cycles do not cross PCI bridges, we only
16182          * enable this workaround if the 5703 is on the secondary
16183          * bus of these ICH bridges.
16184          */
16185         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) ||
16186             (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) {
16187                 static struct tg3_dev_id {
16188                         u32     vendor;
16189                         u32     device;
16190                         u32     rev;
16191                 } ich_chipsets[] = {
16192                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
16193                           PCI_ANY_ID },
16194                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
16195                           PCI_ANY_ID },
16196                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
16197                           0xa },
16198                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
16199                           PCI_ANY_ID },
16200                         { },
16201                 };
16202                 struct tg3_dev_id *pci_id = &ich_chipsets[0];
16203                 struct pci_dev *bridge = NULL;
16204
16205                 while (pci_id->vendor != 0) {
16206                         bridge = pci_get_device(pci_id->vendor, pci_id->device,
16207                                                 bridge);
16208                         if (!bridge) {
16209                                 pci_id++;
16210                                 continue;
16211                         }
16212                         if (pci_id->rev != PCI_ANY_ID) {
16213                                 if (bridge->revision > pci_id->rev)
16214                                         continue;
16215                         }
16216                         if (bridge->subordinate &&
16217                             (bridge->subordinate->number ==
16218                              tp->pdev->bus->number)) {
16219                                 tg3_flag_set(tp, ICH_WORKAROUND);
16220                                 pci_dev_put(bridge);
16221                                 break;
16222                         }
16223                 }
16224         }
16225
16226         if (tg3_asic_rev(tp) == ASIC_REV_5701) {
16227                 static struct tg3_dev_id {
16228                         u32     vendor;
16229                         u32     device;
16230                 } bridge_chipsets[] = {
16231                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
16232                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
16233                         { },
16234                 };
16235                 struct tg3_dev_id *pci_id = &bridge_chipsets[0];
16236                 struct pci_dev *bridge = NULL;
16237
16238                 while (pci_id->vendor != 0) {
16239                         bridge = pci_get_device(pci_id->vendor,
16240                                                 pci_id->device,
16241                                                 bridge);
16242                         if (!bridge) {
16243                                 pci_id++;
16244                                 continue;
16245                         }
16246                         if (bridge->subordinate &&
16247                             (bridge->subordinate->number <=
16248                              tp->pdev->bus->number) &&
16249                             (bridge->subordinate->busn_res.end >=
16250                              tp->pdev->bus->number)) {
16251                                 tg3_flag_set(tp, 5701_DMA_BUG);
16252                                 pci_dev_put(bridge);
16253                                 break;
16254                         }
16255                 }
16256         }
16257
16258         /* The EPB bridge inside 5714, 5715, and 5780 cannot support
16259          * DMA addresses > 40-bit. This bridge may have other additional
16260          * 57xx devices behind it in some 4-port NIC designs for example.
16261          * Any tg3 device found behind the bridge will also need the 40-bit
16262          * DMA workaround.
16263          */
16264         if (tg3_flag(tp, 5780_CLASS)) {
16265                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16266                 tp->msi_cap = tp->pdev->msi_cap;
16267         } else {
16268                 struct pci_dev *bridge = NULL;
16269
16270                 do {
16271                         bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
16272                                                 PCI_DEVICE_ID_SERVERWORKS_EPB,
16273                                                 bridge);
16274                         if (bridge && bridge->subordinate &&
16275                             (bridge->subordinate->number <=
16276                              tp->pdev->bus->number) &&
16277                             (bridge->subordinate->busn_res.end >=
16278                              tp->pdev->bus->number)) {
16279                                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16280                                 pci_dev_put(bridge);
16281                                 break;
16282                         }
16283                 } while (bridge);
16284         }
16285
16286         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16287             tg3_asic_rev(tp) == ASIC_REV_5714)
16288                 tp->pdev_peer = tg3_find_peer(tp);
16289
16290         /* Determine TSO capabilities */
16291         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0)
16292                 ; /* Do nothing. HW bug. */
16293         else if (tg3_flag(tp, 57765_PLUS))
16294                 tg3_flag_set(tp, HW_TSO_3);
16295         else if (tg3_flag(tp, 5755_PLUS) ||
16296                  tg3_asic_rev(tp) == ASIC_REV_5906)
16297                 tg3_flag_set(tp, HW_TSO_2);
16298         else if (tg3_flag(tp, 5750_PLUS)) {
16299                 tg3_flag_set(tp, HW_TSO_1);
16300                 tg3_flag_set(tp, TSO_BUG);
16301                 if (tg3_asic_rev(tp) == ASIC_REV_5750 &&
16302                     tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2)
16303                         tg3_flag_clear(tp, TSO_BUG);
16304         } else if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16305                    tg3_asic_rev(tp) != ASIC_REV_5701 &&
16306                    tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
16307                 tg3_flag_set(tp, FW_TSO);
16308                 tg3_flag_set(tp, TSO_BUG);
16309                 if (tg3_asic_rev(tp) == ASIC_REV_5705)
16310                         tp->fw_needed = FIRMWARE_TG3TSO5;
16311                 else
16312                         tp->fw_needed = FIRMWARE_TG3TSO;
16313         }
16314
16315         /* Selectively allow TSO based on operating conditions */
16316         if (tg3_flag(tp, HW_TSO_1) ||
16317             tg3_flag(tp, HW_TSO_2) ||
16318             tg3_flag(tp, HW_TSO_3) ||
16319             tg3_flag(tp, FW_TSO)) {
16320                 /* For firmware TSO, assume ASF is disabled.
16321                  * We'll disable TSO later if we discover ASF
16322                  * is enabled in tg3_get_eeprom_hw_cfg().
16323                  */
16324                 tg3_flag_set(tp, TSO_CAPABLE);
16325         } else {
16326                 tg3_flag_clear(tp, TSO_CAPABLE);
16327                 tg3_flag_clear(tp, TSO_BUG);
16328                 tp->fw_needed = NULL;
16329         }
16330
16331         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0)
16332                 tp->fw_needed = FIRMWARE_TG3;
16333
16334         if (tg3_asic_rev(tp) == ASIC_REV_57766)
16335                 tp->fw_needed = FIRMWARE_TG357766;
16336
16337         tp->irq_max = 1;
16338
16339         if (tg3_flag(tp, 5750_PLUS)) {
16340                 tg3_flag_set(tp, SUPPORT_MSI);
16341                 if (tg3_chip_rev(tp) == CHIPREV_5750_AX ||
16342                     tg3_chip_rev(tp) == CHIPREV_5750_BX ||
16343                     (tg3_asic_rev(tp) == ASIC_REV_5714 &&
16344                      tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 &&
16345                      tp->pdev_peer == tp->pdev))
16346                         tg3_flag_clear(tp, SUPPORT_MSI);
16347
16348                 if (tg3_flag(tp, 5755_PLUS) ||
16349                     tg3_asic_rev(tp) == ASIC_REV_5906) {
16350                         tg3_flag_set(tp, 1SHOT_MSI);
16351                 }
16352
16353                 if (tg3_flag(tp, 57765_PLUS)) {
16354                         tg3_flag_set(tp, SUPPORT_MSIX);
16355                         tp->irq_max = TG3_IRQ_MAX_VECS;
16356                 }
16357         }
16358
16359         tp->txq_max = 1;
16360         tp->rxq_max = 1;
16361         if (tp->irq_max > 1) {
16362                 tp->rxq_max = TG3_RSS_MAX_NUM_QS;
16363                 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
16364
16365                 if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
16366                     tg3_asic_rev(tp) == ASIC_REV_5720)
16367                         tp->txq_max = tp->irq_max - 1;
16368         }
16369
16370         if (tg3_flag(tp, 5755_PLUS) ||
16371             tg3_asic_rev(tp) == ASIC_REV_5906)
16372                 tg3_flag_set(tp, SHORT_DMA_BUG);
16373
16374         if (tg3_asic_rev(tp) == ASIC_REV_5719)
16375                 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
16376
16377         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16378             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16379             tg3_asic_rev(tp) == ASIC_REV_5720 ||
16380             tg3_asic_rev(tp) == ASIC_REV_5762)
16381                 tg3_flag_set(tp, LRG_PROD_RING_CAP);
16382
16383         if (tg3_flag(tp, 57765_PLUS) &&
16384             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0)
16385                 tg3_flag_set(tp, USE_JUMBO_BDFLAG);
16386
16387         if (!tg3_flag(tp, 5705_PLUS) ||
16388             tg3_flag(tp, 5780_CLASS) ||
16389             tg3_flag(tp, USE_JUMBO_BDFLAG))
16390                 tg3_flag_set(tp, JUMBO_CAPABLE);
16391
16392         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16393                               &pci_state_reg);
16394
16395         if (pci_is_pcie(tp->pdev)) {
16396                 u16 lnkctl;
16397
16398                 tg3_flag_set(tp, PCI_EXPRESS);
16399
16400                 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
16401                 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
16402                         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16403                                 tg3_flag_clear(tp, HW_TSO_2);
16404                                 tg3_flag_clear(tp, TSO_CAPABLE);
16405                         }
16406                         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
16407                             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16408                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 ||
16409                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1)
16410                                 tg3_flag_set(tp, CLKREQ_BUG);
16411                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) {
16412                         tg3_flag_set(tp, L1PLLPD_EN);
16413                 }
16414         } else if (tg3_asic_rev(tp) == ASIC_REV_5785) {
16415                 /* BCM5785 devices are effectively PCIe devices, and should
16416                  * follow PCIe codepaths, but do not have a PCIe capabilities
16417                  * section.
16418                  */
16419                 tg3_flag_set(tp, PCI_EXPRESS);
16420         } else if (!tg3_flag(tp, 5705_PLUS) ||
16421                    tg3_flag(tp, 5780_CLASS)) {
16422                 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
16423                 if (!tp->pcix_cap) {
16424                         dev_err(&tp->pdev->dev,
16425                                 "Cannot find PCI-X capability, aborting\n");
16426                         return -EIO;
16427                 }
16428
16429                 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
16430                         tg3_flag_set(tp, PCIX_MODE);
16431         }
16432
16433         /* If we have an AMD 762 or VIA K8T800 chipset, write
16434          * reordering to the mailbox registers done by the host
16435          * controller can cause major troubles.  We read back from
16436          * every mailbox register write to force the writes to be
16437          * posted to the chip in order.
16438          */
16439         if (pci_dev_present(tg3_write_reorder_chipsets) &&
16440             !tg3_flag(tp, PCI_EXPRESS))
16441                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
16442
16443         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
16444                              &tp->pci_cacheline_sz);
16445         pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16446                              &tp->pci_lat_timer);
16447         if (tg3_asic_rev(tp) == ASIC_REV_5703 &&
16448             tp->pci_lat_timer < 64) {
16449                 tp->pci_lat_timer = 64;
16450                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16451                                       tp->pci_lat_timer);
16452         }
16453
16454         /* Important! -- It is critical that the PCI-X hw workaround
16455          * situation is decided before the first MMIO register access.
16456          */
16457         if (tg3_chip_rev(tp) == CHIPREV_5700_BX) {
16458                 /* 5700 BX chips need to have their TX producer index
16459                  * mailboxes written twice to workaround a bug.
16460                  */
16461                 tg3_flag_set(tp, TXD_MBOX_HWBUG);
16462
16463                 /* If we are in PCI-X mode, enable register write workaround.
16464                  *
16465                  * The workaround is to use indirect register accesses
16466                  * for all chip writes not to mailbox registers.
16467                  */
16468                 if (tg3_flag(tp, PCIX_MODE)) {
16469                         u32 pm_reg;
16470
16471                         tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16472
16473                         /* The chip can have it's power management PCI config
16474                          * space registers clobbered due to this bug.
16475                          * So explicitly force the chip into D0 here.
16476                          */
16477                         pci_read_config_dword(tp->pdev,
16478                                               tp->pdev->pm_cap + PCI_PM_CTRL,
16479                                               &pm_reg);
16480                         pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
16481                         pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
16482                         pci_write_config_dword(tp->pdev,
16483                                                tp->pdev->pm_cap + PCI_PM_CTRL,
16484                                                pm_reg);
16485
16486                         /* Also, force SERR#/PERR# in PCI command. */
16487                         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16488                         pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
16489                         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16490                 }
16491         }
16492
16493         if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
16494                 tg3_flag_set(tp, PCI_HIGH_SPEED);
16495         if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
16496                 tg3_flag_set(tp, PCI_32BIT);
16497
16498         /* Chip-specific fixup from Broadcom driver */
16499         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) &&
16500             (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
16501                 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
16502                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
16503         }
16504
16505         /* Default fast path register access methods */
16506         tp->read32 = tg3_read32;
16507         tp->write32 = tg3_write32;
16508         tp->read32_mbox = tg3_read32;
16509         tp->write32_mbox = tg3_write32;
16510         tp->write32_tx_mbox = tg3_write32;
16511         tp->write32_rx_mbox = tg3_write32;
16512
16513         /* Various workaround register access methods */
16514         if (tg3_flag(tp, PCIX_TARGET_HWBUG))
16515                 tp->write32 = tg3_write_indirect_reg32;
16516         else if (tg3_asic_rev(tp) == ASIC_REV_5701 ||
16517                  (tg3_flag(tp, PCI_EXPRESS) &&
16518                   tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) {
16519                 /*
16520                  * Back to back register writes can cause problems on these
16521                  * chips, the workaround is to read back all reg writes
16522                  * except those to mailbox regs.
16523                  *
16524                  * See tg3_write_indirect_reg32().
16525                  */
16526                 tp->write32 = tg3_write_flush_reg32;
16527         }
16528
16529         if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
16530                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
16531                 if (tg3_flag(tp, MBOX_WRITE_REORDER))
16532                         tp->write32_rx_mbox = tg3_write_flush_reg32;
16533         }
16534
16535         if (tg3_flag(tp, ICH_WORKAROUND)) {
16536                 tp->read32 = tg3_read_indirect_reg32;
16537                 tp->write32 = tg3_write_indirect_reg32;
16538                 tp->read32_mbox = tg3_read_indirect_mbox;
16539                 tp->write32_mbox = tg3_write_indirect_mbox;
16540                 tp->write32_tx_mbox = tg3_write_indirect_mbox;
16541                 tp->write32_rx_mbox = tg3_write_indirect_mbox;
16542
16543                 iounmap(tp->regs);
16544                 tp->regs = NULL;
16545
16546                 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16547                 pci_cmd &= ~PCI_COMMAND_MEMORY;
16548                 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16549         }
16550         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16551                 tp->read32_mbox = tg3_read32_mbox_5906;
16552                 tp->write32_mbox = tg3_write32_mbox_5906;
16553                 tp->write32_tx_mbox = tg3_write32_mbox_5906;
16554                 tp->write32_rx_mbox = tg3_write32_mbox_5906;
16555         }
16556
16557         if (tp->write32 == tg3_write_indirect_reg32 ||
16558             (tg3_flag(tp, PCIX_MODE) &&
16559              (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16560               tg3_asic_rev(tp) == ASIC_REV_5701)))
16561                 tg3_flag_set(tp, SRAM_USE_CONFIG);
16562
16563         /* The memory arbiter has to be enabled in order for SRAM accesses
16564          * to succeed.  Normally on powerup the tg3 chip firmware will make
16565          * sure it is enabled, but other entities such as system netboot
16566          * code might disable it.
16567          */
16568         val = tr32(MEMARB_MODE);
16569         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
16570
16571         tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
16572         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16573             tg3_flag(tp, 5780_CLASS)) {
16574                 if (tg3_flag(tp, PCIX_MODE)) {
16575                         pci_read_config_dword(tp->pdev,
16576                                               tp->pcix_cap + PCI_X_STATUS,
16577                                               &val);
16578                         tp->pci_fn = val & 0x7;
16579                 }
16580         } else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16581                    tg3_asic_rev(tp) == ASIC_REV_5719 ||
16582                    tg3_asic_rev(tp) == ASIC_REV_5720) {
16583                 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
16584                 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG)
16585                         val = tr32(TG3_CPMU_STATUS);
16586
16587                 if (tg3_asic_rev(tp) == ASIC_REV_5717)
16588                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0;
16589                 else
16590                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
16591                                      TG3_CPMU_STATUS_FSHFT_5719;
16592         }
16593
16594         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
16595                 tp->write32_tx_mbox = tg3_write_flush_reg32;
16596                 tp->write32_rx_mbox = tg3_write_flush_reg32;
16597         }
16598
16599         /* Get eeprom hw config before calling tg3_set_power_state().
16600          * In particular, the TG3_FLAG_IS_NIC flag must be
16601          * determined before calling tg3_set_power_state() so that
16602          * we know whether or not to switch out of Vaux power.
16603          * When the flag is set, it means that GPIO1 is used for eeprom
16604          * write protect and also implies that it is a LOM where GPIOs
16605          * are not used to switch power.
16606          */
16607         tg3_get_eeprom_hw_cfg(tp);
16608
16609         if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) {
16610                 tg3_flag_clear(tp, TSO_CAPABLE);
16611                 tg3_flag_clear(tp, TSO_BUG);
16612                 tp->fw_needed = NULL;
16613         }
16614
16615         if (tg3_flag(tp, ENABLE_APE)) {
16616                 /* Allow reads and writes to the
16617                  * APE register and memory space.
16618                  */
16619                 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
16620                                  PCISTATE_ALLOW_APE_SHMEM_WR |
16621                                  PCISTATE_ALLOW_APE_PSPACE_WR;
16622                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
16623                                        pci_state_reg);
16624
16625                 tg3_ape_lock_init(tp);
16626         }
16627
16628         /* Set up tp->grc_local_ctrl before calling
16629          * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
16630          * will bring 5700's external PHY out of reset.
16631          * It is also used as eeprom write protect on LOMs.
16632          */
16633         tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
16634         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16635             tg3_flag(tp, EEPROM_WRITE_PROT))
16636                 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
16637                                        GRC_LCLCTRL_GPIO_OUTPUT1);
16638         /* Unused GPIO3 must be driven as output on 5752 because there
16639          * are no pull-up resistors on unused GPIO pins.
16640          */
16641         else if (tg3_asic_rev(tp) == ASIC_REV_5752)
16642                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
16643
16644         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16645             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16646             tg3_flag(tp, 57765_CLASS))
16647                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16648
16649         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16650             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
16651                 /* Turn off the debug UART. */
16652                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16653                 if (tg3_flag(tp, IS_NIC))
16654                         /* Keep VMain power. */
16655                         tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
16656                                               GRC_LCLCTRL_GPIO_OUTPUT0;
16657         }
16658
16659         if (tg3_asic_rev(tp) == ASIC_REV_5762)
16660                 tp->grc_local_ctrl |=
16661                         tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL;
16662
16663         /* Switch out of Vaux if it is a NIC */
16664         tg3_pwrsrc_switch_to_vmain(tp);
16665
16666         /* Derive initial jumbo mode from MTU assigned in
16667          * ether_setup() via the alloc_etherdev() call
16668          */
16669         if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
16670                 tg3_flag_set(tp, JUMBO_RING_ENABLE);
16671
16672         /* Determine WakeOnLan speed to use. */
16673         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16674             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16675             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16676             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) {
16677                 tg3_flag_clear(tp, WOL_SPEED_100MB);
16678         } else {
16679                 tg3_flag_set(tp, WOL_SPEED_100MB);
16680         }
16681
16682         if (tg3_asic_rev(tp) == ASIC_REV_5906)
16683                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
16684
16685         /* A few boards don't want Ethernet@WireSpeed phy feature */
16686         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16687             (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16688              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) &&
16689              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) ||
16690             (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
16691             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
16692                 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
16693
16694         if (tg3_chip_rev(tp) == CHIPREV_5703_AX ||
16695             tg3_chip_rev(tp) == CHIPREV_5704_AX)
16696                 tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
16697         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0)
16698                 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
16699
16700         if (tg3_flag(tp, 5705_PLUS) &&
16701             !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
16702             tg3_asic_rev(tp) != ASIC_REV_5785 &&
16703             tg3_asic_rev(tp) != ASIC_REV_57780 &&
16704             !tg3_flag(tp, 57765_PLUS)) {
16705                 if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16706                     tg3_asic_rev(tp) == ASIC_REV_5787 ||
16707                     tg3_asic_rev(tp) == ASIC_REV_5784 ||
16708                     tg3_asic_rev(tp) == ASIC_REV_5761) {
16709                         if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
16710                             tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
16711                                 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
16712                         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
16713                                 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
16714                 } else
16715                         tp->phy_flags |= TG3_PHYFLG_BER_BUG;
16716         }
16717
16718         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
16719             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
16720                 tp->phy_otp = tg3_read_otp_phycfg(tp);
16721                 if (tp->phy_otp == 0)
16722                         tp->phy_otp = TG3_OTP_DEFAULT;
16723         }
16724
16725         if (tg3_flag(tp, CPMU_PRESENT))
16726                 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
16727         else
16728                 tp->mi_mode = MAC_MI_MODE_BASE;
16729
16730         tp->coalesce_mode = 0;
16731         if (tg3_chip_rev(tp) != CHIPREV_5700_AX &&
16732             tg3_chip_rev(tp) != CHIPREV_5700_BX)
16733                 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
16734
16735         /* Set these bits to enable statistics workaround. */
16736         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16737             tg3_asic_rev(tp) == ASIC_REV_5762 ||
16738             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
16739             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) {
16740                 tp->coalesce_mode |= HOSTCC_MODE_ATTN;
16741                 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
16742         }
16743
16744         if (tg3_asic_rev(tp) == ASIC_REV_5785 ||
16745             tg3_asic_rev(tp) == ASIC_REV_57780)
16746                 tg3_flag_set(tp, USE_PHYLIB);
16747
16748         err = tg3_mdio_init(tp);
16749         if (err)
16750                 return err;
16751
16752         /* Initialize data/descriptor byte/word swapping. */
16753         val = tr32(GRC_MODE);
16754         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
16755             tg3_asic_rev(tp) == ASIC_REV_5762)
16756                 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
16757                         GRC_MODE_WORD_SWAP_B2HRX_DATA |
16758                         GRC_MODE_B2HRX_ENABLE |
16759                         GRC_MODE_HTX2B_ENABLE |
16760                         GRC_MODE_HOST_STACKUP);
16761         else
16762                 val &= GRC_MODE_HOST_STACKUP;
16763
16764         tw32(GRC_MODE, val | tp->grc_mode);
16765
16766         tg3_switch_clocks(tp);
16767
16768         /* Clear this out for sanity. */
16769         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
16770
16771         /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */
16772         tw32(TG3PCI_REG_BASE_ADDR, 0);
16773
16774         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16775                               &pci_state_reg);
16776         if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
16777             !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
16778                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16779                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16780                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 ||
16781                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) {
16782                         void __iomem *sram_base;
16783
16784                         /* Write some dummy words into the SRAM status block
16785                          * area, see if it reads back correctly.  If the return
16786                          * value is bad, force enable the PCIX workaround.
16787                          */
16788                         sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
16789
16790                         writel(0x00000000, sram_base);
16791                         writel(0x00000000, sram_base + 4);
16792                         writel(0xffffffff, sram_base + 4);
16793                         if (readl(sram_base) != 0x00000000)
16794                                 tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16795                 }
16796         }
16797
16798         udelay(50);
16799         tg3_nvram_init(tp);
16800
16801         /* If the device has an NVRAM, no need to load patch firmware */
16802         if (tg3_asic_rev(tp) == ASIC_REV_57766 &&
16803             !tg3_flag(tp, NO_NVRAM))
16804                 tp->fw_needed = NULL;
16805
16806         grc_misc_cfg = tr32(GRC_MISC_CFG);
16807         grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
16808
16809         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16810             (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
16811              grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
16812                 tg3_flag_set(tp, IS_5788);
16813
16814         if (!tg3_flag(tp, IS_5788) &&
16815             tg3_asic_rev(tp) != ASIC_REV_5700)
16816                 tg3_flag_set(tp, TAGGED_STATUS);
16817         if (tg3_flag(tp, TAGGED_STATUS)) {
16818                 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
16819                                       HOSTCC_MODE_CLRTICK_TXBD);
16820
16821                 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
16822                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16823                                        tp->misc_host_ctrl);
16824         }
16825
16826         /* Preserve the APE MAC_MODE bits */
16827         if (tg3_flag(tp, ENABLE_APE))
16828                 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
16829         else
16830                 tp->mac_mode = 0;
16831
16832         if (tg3_10_100_only_device(tp, ent))
16833                 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
16834
16835         err = tg3_phy_probe(tp);
16836         if (err) {
16837                 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
16838                 /* ... but do not return immediately ... */
16839                 tg3_mdio_fini(tp);
16840         }
16841
16842         tg3_read_vpd(tp);
16843         tg3_read_fw_ver(tp);
16844
16845         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
16846                 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16847         } else {
16848                 if (tg3_asic_rev(tp) == ASIC_REV_5700)
16849                         tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16850                 else
16851                         tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16852         }
16853
16854         /* 5700 {AX,BX} chips have a broken status block link
16855          * change bit implementation, so we must use the
16856          * status register in those cases.
16857          */
16858         if (tg3_asic_rev(tp) == ASIC_REV_5700)
16859                 tg3_flag_set(tp, USE_LINKCHG_REG);
16860         else
16861                 tg3_flag_clear(tp, USE_LINKCHG_REG);
16862
16863         /* The led_ctrl is set during tg3_phy_probe, here we might
16864          * have to force the link status polling mechanism based
16865          * upon subsystem IDs.
16866          */
16867         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
16868             tg3_asic_rev(tp) == ASIC_REV_5701 &&
16869             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
16870                 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16871                 tg3_flag_set(tp, USE_LINKCHG_REG);
16872         }
16873
16874         /* For all SERDES we poll the MAC status register. */
16875         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
16876                 tg3_flag_set(tp, POLL_SERDES);
16877         else
16878                 tg3_flag_clear(tp, POLL_SERDES);
16879
16880         if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF))
16881                 tg3_flag_set(tp, POLL_CPMU_LINK);
16882
16883         tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
16884         tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
16885         if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
16886             tg3_flag(tp, PCIX_MODE)) {
16887                 tp->rx_offset = NET_SKB_PAD;
16888 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
16889                 tp->rx_copy_thresh = ~(u16)0;
16890 #endif
16891         }
16892
16893         tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
16894         tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
16895         tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
16896
16897         tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
16898
16899         /* Increment the rx prod index on the rx std ring by at most
16900          * 8 for these chips to workaround hw errata.
16901          */
16902         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16903             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16904             tg3_asic_rev(tp) == ASIC_REV_5755)
16905                 tp->rx_std_max_post = 8;
16906
16907         if (tg3_flag(tp, ASPM_WORKAROUND))
16908                 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
16909                                      PCIE_PWR_MGMT_L1_THRESH_MSK;
16910
16911         return err;
16912 }
16913
16914 #ifdef CONFIG_SPARC
16915 static int tg3_get_macaddr_sparc(struct tg3 *tp)
16916 {
16917         struct net_device *dev = tp->dev;
16918         struct pci_dev *pdev = tp->pdev;
16919         struct device_node *dp = pci_device_to_OF_node(pdev);
16920         const unsigned char *addr;
16921         int len;
16922
16923         addr = of_get_property(dp, "local-mac-address", &len);
16924         if (addr && len == ETH_ALEN) {
16925                 memcpy(dev->dev_addr, addr, ETH_ALEN);
16926                 return 0;
16927         }
16928         return -ENODEV;
16929 }
16930
16931 static int tg3_get_default_macaddr_sparc(struct tg3 *tp)
16932 {
16933         struct net_device *dev = tp->dev;
16934
16935         memcpy(dev->dev_addr, idprom->id_ethaddr, ETH_ALEN);
16936         return 0;
16937 }
16938 #endif
16939
16940 static int tg3_get_device_address(struct tg3 *tp)
16941 {
16942         struct net_device *dev = tp->dev;
16943         u32 hi, lo, mac_offset;
16944         int addr_ok = 0;
16945         int err;
16946
16947 #ifdef CONFIG_SPARC
16948         if (!tg3_get_macaddr_sparc(tp))
16949                 return 0;
16950 #endif
16951
16952         if (tg3_flag(tp, IS_SSB_CORE)) {
16953                 err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
16954                 if (!err && is_valid_ether_addr(&dev->dev_addr[0]))
16955                         return 0;
16956         }
16957
16958         mac_offset = 0x7c;
16959         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16960             tg3_flag(tp, 5780_CLASS)) {
16961                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
16962                         mac_offset = 0xcc;
16963                 if (tg3_nvram_lock(tp))
16964                         tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
16965                 else
16966                         tg3_nvram_unlock(tp);
16967         } else if (tg3_flag(tp, 5717_PLUS)) {
16968                 if (tp->pci_fn & 1)
16969                         mac_offset = 0xcc;
16970                 if (tp->pci_fn > 1)
16971                         mac_offset += 0x18c;
16972         } else if (tg3_asic_rev(tp) == ASIC_REV_5906)
16973                 mac_offset = 0x10;
16974
16975         /* First try to get it from MAC address mailbox. */
16976         tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
16977         if ((hi >> 16) == 0x484b) {
16978                 dev->dev_addr[0] = (hi >>  8) & 0xff;
16979                 dev->dev_addr[1] = (hi >>  0) & 0xff;
16980
16981                 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
16982                 dev->dev_addr[2] = (lo >> 24) & 0xff;
16983                 dev->dev_addr[3] = (lo >> 16) & 0xff;
16984                 dev->dev_addr[4] = (lo >>  8) & 0xff;
16985                 dev->dev_addr[5] = (lo >>  0) & 0xff;
16986
16987                 /* Some old bootcode may report a 0 MAC address in SRAM */
16988                 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
16989         }
16990         if (!addr_ok) {
16991                 /* Next, try NVRAM. */
16992                 if (!tg3_flag(tp, NO_NVRAM) &&
16993                     !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
16994                     !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
16995                         memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
16996                         memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
16997                 }
16998                 /* Finally just fetch it out of the MAC control regs. */
16999                 else {
17000                         hi = tr32(MAC_ADDR_0_HIGH);
17001                         lo = tr32(MAC_ADDR_0_LOW);
17002
17003                         dev->dev_addr[5] = lo & 0xff;
17004                         dev->dev_addr[4] = (lo >> 8) & 0xff;
17005                         dev->dev_addr[3] = (lo >> 16) & 0xff;
17006                         dev->dev_addr[2] = (lo >> 24) & 0xff;
17007                         dev->dev_addr[1] = hi & 0xff;
17008                         dev->dev_addr[0] = (hi >> 8) & 0xff;
17009                 }
17010         }
17011
17012         if (!is_valid_ether_addr(&dev->dev_addr[0])) {
17013 #ifdef CONFIG_SPARC
17014                 if (!tg3_get_default_macaddr_sparc(tp))
17015                         return 0;
17016 #endif
17017                 return -EINVAL;
17018         }
17019         return 0;
17020 }
17021
17022 #define BOUNDARY_SINGLE_CACHELINE       1
17023 #define BOUNDARY_MULTI_CACHELINE        2
17024
17025 static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
17026 {
17027         int cacheline_size;
17028         u8 byte;
17029         int goal;
17030
17031         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
17032         if (byte == 0)
17033                 cacheline_size = 1024;
17034         else
17035                 cacheline_size = (int) byte * 4;
17036
17037         /* On 5703 and later chips, the boundary bits have no
17038          * effect.
17039          */
17040         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17041             tg3_asic_rev(tp) != ASIC_REV_5701 &&
17042             !tg3_flag(tp, PCI_EXPRESS))
17043                 goto out;
17044
17045 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
17046         goal = BOUNDARY_MULTI_CACHELINE;
17047 #else
17048 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
17049         goal = BOUNDARY_SINGLE_CACHELINE;
17050 #else
17051         goal = 0;
17052 #endif
17053 #endif
17054
17055         if (tg3_flag(tp, 57765_PLUS)) {
17056                 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
17057                 goto out;
17058         }
17059
17060         if (!goal)
17061                 goto out;
17062
17063         /* PCI controllers on most RISC systems tend to disconnect
17064          * when a device tries to burst across a cache-line boundary.
17065          * Therefore, letting tg3 do so just wastes PCI bandwidth.
17066          *
17067          * Unfortunately, for PCI-E there are only limited
17068          * write-side controls for this, and thus for reads
17069          * we will still get the disconnects.  We'll also waste
17070          * these PCI cycles for both read and write for chips
17071          * other than 5700 and 5701 which do not implement the
17072          * boundary bits.
17073          */
17074         if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
17075                 switch (cacheline_size) {
17076                 case 16:
17077                 case 32:
17078                 case 64:
17079                 case 128:
17080                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17081                                 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
17082                                         DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
17083                         } else {
17084                                 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17085                                         DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17086                         }
17087                         break;
17088
17089                 case 256:
17090                         val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
17091                                 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
17092                         break;
17093
17094                 default:
17095                         val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17096                                 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17097                         break;
17098                 }
17099         } else if (tg3_flag(tp, PCI_EXPRESS)) {
17100                 switch (cacheline_size) {
17101                 case 16:
17102                 case 32:
17103                 case 64:
17104                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17105                                 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17106                                 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
17107                                 break;
17108                         }
17109                         /* fallthrough */
17110                 case 128:
17111                 default:
17112                         val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17113                         val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
17114                         break;
17115                 }
17116         } else {
17117                 switch (cacheline_size) {
17118                 case 16:
17119                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17120                                 val |= (DMA_RWCTRL_READ_BNDRY_16 |
17121                                         DMA_RWCTRL_WRITE_BNDRY_16);
17122                                 break;
17123                         }
17124                         /* fallthrough */
17125                 case 32:
17126                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17127                                 val |= (DMA_RWCTRL_READ_BNDRY_32 |
17128                                         DMA_RWCTRL_WRITE_BNDRY_32);
17129                                 break;
17130                         }
17131                         /* fallthrough */
17132                 case 64:
17133                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17134                                 val |= (DMA_RWCTRL_READ_BNDRY_64 |
17135                                         DMA_RWCTRL_WRITE_BNDRY_64);
17136                                 break;
17137                         }
17138                         /* fallthrough */
17139                 case 128:
17140                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17141                                 val |= (DMA_RWCTRL_READ_BNDRY_128 |
17142                                         DMA_RWCTRL_WRITE_BNDRY_128);
17143                                 break;
17144                         }
17145                         /* fallthrough */
17146                 case 256:
17147                         val |= (DMA_RWCTRL_READ_BNDRY_256 |
17148                                 DMA_RWCTRL_WRITE_BNDRY_256);
17149                         break;
17150                 case 512:
17151                         val |= (DMA_RWCTRL_READ_BNDRY_512 |
17152                                 DMA_RWCTRL_WRITE_BNDRY_512);
17153                         break;
17154                 case 1024:
17155                 default:
17156                         val |= (DMA_RWCTRL_READ_BNDRY_1024 |
17157                                 DMA_RWCTRL_WRITE_BNDRY_1024);
17158                         break;
17159                 }
17160         }
17161
17162 out:
17163         return val;
17164 }
17165
17166 static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
17167                            int size, bool to_device)
17168 {
17169         struct tg3_internal_buffer_desc test_desc;
17170         u32 sram_dma_descs;
17171         int i, ret;
17172
17173         sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
17174
17175         tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
17176         tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
17177         tw32(RDMAC_STATUS, 0);
17178         tw32(WDMAC_STATUS, 0);
17179
17180         tw32(BUFMGR_MODE, 0);
17181         tw32(FTQ_RESET, 0);
17182
17183         test_desc.addr_hi = ((u64) buf_dma) >> 32;
17184         test_desc.addr_lo = buf_dma & 0xffffffff;
17185         test_desc.nic_mbuf = 0x00002100;
17186         test_desc.len = size;
17187
17188         /*
17189          * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
17190          * the *second* time the tg3 driver was getting loaded after an
17191          * initial scan.
17192          *
17193          * Broadcom tells me:
17194          *   ...the DMA engine is connected to the GRC block and a DMA
17195          *   reset may affect the GRC block in some unpredictable way...
17196          *   The behavior of resets to individual blocks has not been tested.
17197          *
17198          * Broadcom noted the GRC reset will also reset all sub-components.
17199          */
17200         if (to_device) {
17201                 test_desc.cqid_sqid = (13 << 8) | 2;
17202
17203                 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
17204                 udelay(40);
17205         } else {
17206                 test_desc.cqid_sqid = (16 << 8) | 7;
17207
17208                 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
17209                 udelay(40);
17210         }
17211         test_desc.flags = 0x00000005;
17212
17213         for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
17214                 u32 val;
17215
17216                 val = *(((u32 *)&test_desc) + i);
17217                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
17218                                        sram_dma_descs + (i * sizeof(u32)));
17219                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
17220         }
17221         pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
17222
17223         if (to_device)
17224                 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
17225         else
17226                 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
17227
17228         ret = -ENODEV;
17229         for (i = 0; i < 40; i++) {
17230                 u32 val;
17231
17232                 if (to_device)
17233                         val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
17234                 else
17235                         val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
17236                 if ((val & 0xffff) == sram_dma_descs) {
17237                         ret = 0;
17238                         break;
17239                 }
17240
17241                 udelay(100);
17242         }
17243
17244         return ret;
17245 }
17246
17247 #define TEST_BUFFER_SIZE        0x2000
17248
17249 static const struct pci_device_id tg3_dma_wait_state_chipsets[] = {
17250         { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
17251         { },
17252 };
17253
17254 static int tg3_test_dma(struct tg3 *tp)
17255 {
17256         dma_addr_t buf_dma;
17257         u32 *buf, saved_dma_rwctrl;
17258         int ret = 0;
17259
17260         buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
17261                                  &buf_dma, GFP_KERNEL);
17262         if (!buf) {
17263                 ret = -ENOMEM;
17264                 goto out_nofree;
17265         }
17266
17267         tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
17268                           (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
17269
17270         tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
17271
17272         if (tg3_flag(tp, 57765_PLUS))
17273                 goto out;
17274
17275         if (tg3_flag(tp, PCI_EXPRESS)) {
17276                 /* DMA read watermark not used on PCIE */
17277                 tp->dma_rwctrl |= 0x00180000;
17278         } else if (!tg3_flag(tp, PCIX_MODE)) {
17279                 if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
17280                     tg3_asic_rev(tp) == ASIC_REV_5750)
17281                         tp->dma_rwctrl |= 0x003f0000;
17282                 else
17283                         tp->dma_rwctrl |= 0x003f000f;
17284         } else {
17285                 if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17286                     tg3_asic_rev(tp) == ASIC_REV_5704) {
17287                         u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
17288                         u32 read_water = 0x7;
17289
17290                         /* If the 5704 is behind the EPB bridge, we can
17291                          * do the less restrictive ONE_DMA workaround for
17292                          * better performance.
17293                          */
17294                         if (tg3_flag(tp, 40BIT_DMA_BUG) &&
17295                             tg3_asic_rev(tp) == ASIC_REV_5704)
17296                                 tp->dma_rwctrl |= 0x8000;
17297                         else if (ccval == 0x6 || ccval == 0x7)
17298                                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17299
17300                         if (tg3_asic_rev(tp) == ASIC_REV_5703)
17301                                 read_water = 4;
17302                         /* Set bit 23 to enable PCIX hw bug fix */
17303                         tp->dma_rwctrl |=
17304                                 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
17305                                 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
17306                                 (1 << 23);
17307                 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) {
17308                         /* 5780 always in PCIX mode */
17309                         tp->dma_rwctrl |= 0x00144000;
17310                 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) {
17311                         /* 5714 always in PCIX mode */
17312                         tp->dma_rwctrl |= 0x00148000;
17313                 } else {
17314                         tp->dma_rwctrl |= 0x001b000f;
17315                 }
17316         }
17317         if (tg3_flag(tp, ONE_DMA_AT_ONCE))
17318                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17319
17320         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17321             tg3_asic_rev(tp) == ASIC_REV_5704)
17322                 tp->dma_rwctrl &= 0xfffffff0;
17323
17324         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
17325             tg3_asic_rev(tp) == ASIC_REV_5701) {
17326                 /* Remove this if it causes problems for some boards. */
17327                 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
17328
17329                 /* On 5700/5701 chips, we need to set this bit.
17330                  * Otherwise the chip will issue cacheline transactions
17331                  * to streamable DMA memory with not all the byte
17332                  * enables turned on.  This is an error on several
17333                  * RISC PCI controllers, in particular sparc64.
17334                  *
17335                  * On 5703/5704 chips, this bit has been reassigned
17336                  * a different meaning.  In particular, it is used
17337                  * on those chips to enable a PCI-X workaround.
17338                  */
17339                 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
17340         }
17341
17342         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17343
17344
17345         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17346             tg3_asic_rev(tp) != ASIC_REV_5701)
17347                 goto out;
17348
17349         /* It is best to perform DMA test with maximum write burst size
17350          * to expose the 5700/5701 write DMA bug.
17351          */
17352         saved_dma_rwctrl = tp->dma_rwctrl;
17353         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17354         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17355
17356         while (1) {
17357                 u32 *p = buf, i;
17358
17359                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
17360                         p[i] = i;
17361
17362                 /* Send the buffer to the chip. */
17363                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true);
17364                 if (ret) {
17365                         dev_err(&tp->pdev->dev,
17366                                 "%s: Buffer write failed. err = %d\n",
17367                                 __func__, ret);
17368                         break;
17369                 }
17370
17371                 /* Now read it back. */
17372                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false);
17373                 if (ret) {
17374                         dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
17375                                 "err = %d\n", __func__, ret);
17376                         break;
17377                 }
17378
17379                 /* Verify it. */
17380                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
17381                         if (p[i] == i)
17382                                 continue;
17383
17384                         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17385                             DMA_RWCTRL_WRITE_BNDRY_16) {
17386                                 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17387                                 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17388                                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17389                                 break;
17390                         } else {
17391                                 dev_err(&tp->pdev->dev,
17392                                         "%s: Buffer corrupted on read back! "
17393                                         "(%d != %d)\n", __func__, p[i], i);
17394                                 ret = -ENODEV;
17395                                 goto out;
17396                         }
17397                 }
17398
17399                 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
17400                         /* Success. */
17401                         ret = 0;
17402                         break;
17403                 }
17404         }
17405         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17406             DMA_RWCTRL_WRITE_BNDRY_16) {
17407                 /* DMA test passed without adjusting DMA boundary,
17408                  * now look for chipsets that are known to expose the
17409                  * DMA bug without failing the test.
17410                  */
17411                 if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
17412                         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17413                         tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17414                 } else {
17415                         /* Safe to use the calculated DMA boundary. */
17416                         tp->dma_rwctrl = saved_dma_rwctrl;
17417                 }
17418
17419                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17420         }
17421
17422 out:
17423         dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
17424 out_nofree:
17425         return ret;
17426 }
17427
17428 static void tg3_init_bufmgr_config(struct tg3 *tp)
17429 {
17430         if (tg3_flag(tp, 57765_PLUS)) {
17431                 tp->bufmgr_config.mbuf_read_dma_low_water =
17432                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17433                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17434                         DEFAULT_MB_MACRX_LOW_WATER_57765;
17435                 tp->bufmgr_config.mbuf_high_water =
17436                         DEFAULT_MB_HIGH_WATER_57765;
17437
17438                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17439                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17440                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17441                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
17442                 tp->bufmgr_config.mbuf_high_water_jumbo =
17443                         DEFAULT_MB_HIGH_WATER_JUMBO_57765;
17444         } else if (tg3_flag(tp, 5705_PLUS)) {
17445                 tp->bufmgr_config.mbuf_read_dma_low_water =
17446                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17447                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17448                         DEFAULT_MB_MACRX_LOW_WATER_5705;
17449                 tp->bufmgr_config.mbuf_high_water =
17450                         DEFAULT_MB_HIGH_WATER_5705;
17451                 if (tg3_asic_rev(tp) == ASIC_REV_5906) {
17452                         tp->bufmgr_config.mbuf_mac_rx_low_water =
17453                                 DEFAULT_MB_MACRX_LOW_WATER_5906;
17454                         tp->bufmgr_config.mbuf_high_water =
17455                                 DEFAULT_MB_HIGH_WATER_5906;
17456                 }
17457
17458                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17459                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
17460                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17461                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
17462                 tp->bufmgr_config.mbuf_high_water_jumbo =
17463                         DEFAULT_MB_HIGH_WATER_JUMBO_5780;
17464         } else {
17465                 tp->bufmgr_config.mbuf_read_dma_low_water =
17466                         DEFAULT_MB_RDMA_LOW_WATER;
17467                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17468                         DEFAULT_MB_MACRX_LOW_WATER;
17469                 tp->bufmgr_config.mbuf_high_water =
17470                         DEFAULT_MB_HIGH_WATER;
17471
17472                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17473                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
17474                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17475                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
17476                 tp->bufmgr_config.mbuf_high_water_jumbo =
17477                         DEFAULT_MB_HIGH_WATER_JUMBO;
17478         }
17479
17480         tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
17481         tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
17482 }
17483
17484 static char *tg3_phy_string(struct tg3 *tp)
17485 {
17486         switch (tp->phy_id & TG3_PHY_ID_MASK) {
17487         case TG3_PHY_ID_BCM5400:        return "5400";
17488         case TG3_PHY_ID_BCM5401:        return "5401";
17489         case TG3_PHY_ID_BCM5411:        return "5411";
17490         case TG3_PHY_ID_BCM5701:        return "5701";
17491         case TG3_PHY_ID_BCM5703:        return "5703";
17492         case TG3_PHY_ID_BCM5704:        return "5704";
17493         case TG3_PHY_ID_BCM5705:        return "5705";
17494         case TG3_PHY_ID_BCM5750:        return "5750";
17495         case TG3_PHY_ID_BCM5752:        return "5752";
17496         case TG3_PHY_ID_BCM5714:        return "5714";
17497         case TG3_PHY_ID_BCM5780:        return "5780";
17498         case TG3_PHY_ID_BCM5755:        return "5755";
17499         case TG3_PHY_ID_BCM5787:        return "5787";
17500         case TG3_PHY_ID_BCM5784:        return "5784";
17501         case TG3_PHY_ID_BCM5756:        return "5722/5756";
17502         case TG3_PHY_ID_BCM5906:        return "5906";
17503         case TG3_PHY_ID_BCM5761:        return "5761";
17504         case TG3_PHY_ID_BCM5718C:       return "5718C";
17505         case TG3_PHY_ID_BCM5718S:       return "5718S";
17506         case TG3_PHY_ID_BCM57765:       return "57765";
17507         case TG3_PHY_ID_BCM5719C:       return "5719C";
17508         case TG3_PHY_ID_BCM5720C:       return "5720C";
17509         case TG3_PHY_ID_BCM5762:        return "5762C";
17510         case TG3_PHY_ID_BCM8002:        return "8002/serdes";
17511         case 0:                 return "serdes";
17512         default:                return "unknown";
17513         }
17514 }
17515
17516 static char *tg3_bus_string(struct tg3 *tp, char *str)
17517 {
17518         if (tg3_flag(tp, PCI_EXPRESS)) {
17519                 strcpy(str, "PCI Express");
17520                 return str;
17521         } else if (tg3_flag(tp, PCIX_MODE)) {
17522                 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
17523
17524                 strcpy(str, "PCIX:");
17525
17526                 if ((clock_ctrl == 7) ||
17527                     ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
17528                      GRC_MISC_CFG_BOARD_ID_5704CIOBE))
17529                         strcat(str, "133MHz");
17530                 else if (clock_ctrl == 0)
17531                         strcat(str, "33MHz");
17532                 else if (clock_ctrl == 2)
17533                         strcat(str, "50MHz");
17534                 else if (clock_ctrl == 4)
17535                         strcat(str, "66MHz");
17536                 else if (clock_ctrl == 6)
17537                         strcat(str, "100MHz");
17538         } else {
17539                 strcpy(str, "PCI:");
17540                 if (tg3_flag(tp, PCI_HIGH_SPEED))
17541                         strcat(str, "66MHz");
17542                 else
17543                         strcat(str, "33MHz");
17544         }
17545         if (tg3_flag(tp, PCI_32BIT))
17546                 strcat(str, ":32-bit");
17547         else
17548                 strcat(str, ":64-bit");
17549         return str;
17550 }
17551
17552 static void tg3_init_coal(struct tg3 *tp)
17553 {
17554         struct ethtool_coalesce *ec = &tp->coal;
17555
17556         memset(ec, 0, sizeof(*ec));
17557         ec->cmd = ETHTOOL_GCOALESCE;
17558         ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
17559         ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
17560         ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
17561         ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
17562         ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
17563         ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
17564         ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
17565         ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
17566         ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
17567
17568         if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
17569                                  HOSTCC_MODE_CLRTICK_TXBD)) {
17570                 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
17571                 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
17572                 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
17573                 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
17574         }
17575
17576         if (tg3_flag(tp, 5705_PLUS)) {
17577                 ec->rx_coalesce_usecs_irq = 0;
17578                 ec->tx_coalesce_usecs_irq = 0;
17579                 ec->stats_block_coalesce_usecs = 0;
17580         }
17581 }
17582
17583 static int tg3_init_one(struct pci_dev *pdev,
17584                                   const struct pci_device_id *ent)
17585 {
17586         struct net_device *dev;
17587         struct tg3 *tp;
17588         int i, err;
17589         u32 sndmbx, rcvmbx, intmbx;
17590         char str[40];
17591         u64 dma_mask, persist_dma_mask;
17592         netdev_features_t features = 0;
17593
17594         printk_once(KERN_INFO "%s\n", version);
17595
17596         err = pci_enable_device(pdev);
17597         if (err) {
17598                 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
17599                 return err;
17600         }
17601
17602         err = pci_request_regions(pdev, DRV_MODULE_NAME);
17603         if (err) {
17604                 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
17605                 goto err_out_disable_pdev;
17606         }
17607
17608         pci_set_master(pdev);
17609
17610         dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
17611         if (!dev) {
17612                 err = -ENOMEM;
17613                 goto err_out_free_res;
17614         }
17615
17616         SET_NETDEV_DEV(dev, &pdev->dev);
17617
17618         tp = netdev_priv(dev);
17619         tp->pdev = pdev;
17620         tp->dev = dev;
17621         tp->rx_mode = TG3_DEF_RX_MODE;
17622         tp->tx_mode = TG3_DEF_TX_MODE;
17623         tp->irq_sync = 1;
17624         tp->pcierr_recovery = false;
17625
17626         if (tg3_debug > 0)
17627                 tp->msg_enable = tg3_debug;
17628         else
17629                 tp->msg_enable = TG3_DEF_MSG_ENABLE;
17630
17631         if (pdev_is_ssb_gige_core(pdev)) {
17632                 tg3_flag_set(tp, IS_SSB_CORE);
17633                 if (ssb_gige_must_flush_posted_writes(pdev))
17634                         tg3_flag_set(tp, FLUSH_POSTED_WRITES);
17635                 if (ssb_gige_one_dma_at_once(pdev))
17636                         tg3_flag_set(tp, ONE_DMA_AT_ONCE);
17637                 if (ssb_gige_have_roboswitch(pdev)) {
17638                         tg3_flag_set(tp, USE_PHYLIB);
17639                         tg3_flag_set(tp, ROBOSWITCH);
17640                 }
17641                 if (ssb_gige_is_rgmii(pdev))
17642                         tg3_flag_set(tp, RGMII_MODE);
17643         }
17644
17645         /* The word/byte swap controls here control register access byte
17646          * swapping.  DMA data byte swapping is controlled in the GRC_MODE
17647          * setting below.
17648          */
17649         tp->misc_host_ctrl =
17650                 MISC_HOST_CTRL_MASK_PCI_INT |
17651                 MISC_HOST_CTRL_WORD_SWAP |
17652                 MISC_HOST_CTRL_INDIR_ACCESS |
17653                 MISC_HOST_CTRL_PCISTATE_RW;
17654
17655         /* The NONFRM (non-frame) byte/word swap controls take effect
17656          * on descriptor entries, anything which isn't packet data.
17657          *
17658          * The StrongARM chips on the board (one for tx, one for rx)
17659          * are running in big-endian mode.
17660          */
17661         tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
17662                         GRC_MODE_WSWAP_NONFRM_DATA);
17663 #ifdef __BIG_ENDIAN
17664         tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
17665 #endif
17666         spin_lock_init(&tp->lock);
17667         spin_lock_init(&tp->indirect_lock);
17668         INIT_WORK(&tp->reset_task, tg3_reset_task);
17669
17670         tp->regs = pci_ioremap_bar(pdev, BAR_0);
17671         if (!tp->regs) {
17672                 dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
17673                 err = -ENOMEM;
17674                 goto err_out_free_dev;
17675         }
17676
17677         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
17678             tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
17679             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
17680             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
17681             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
17682             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
17683             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
17684             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
17685             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
17686             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
17687             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
17688             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
17689             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
17690             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
17691             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) {
17692                 tg3_flag_set(tp, ENABLE_APE);
17693                 tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
17694                 if (!tp->aperegs) {
17695                         dev_err(&pdev->dev,
17696                                 "Cannot map APE registers, aborting\n");
17697                         err = -ENOMEM;
17698                         goto err_out_iounmap;
17699                 }
17700         }
17701
17702         tp->rx_pending = TG3_DEF_RX_RING_PENDING;
17703         tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
17704
17705         dev->ethtool_ops = &tg3_ethtool_ops;
17706         dev->watchdog_timeo = TG3_TX_TIMEOUT;
17707         dev->netdev_ops = &tg3_netdev_ops;
17708         dev->irq = pdev->irq;
17709
17710         err = tg3_get_invariants(tp, ent);
17711         if (err) {
17712                 dev_err(&pdev->dev,
17713                         "Problem fetching invariants of chip, aborting\n");
17714                 goto err_out_apeunmap;
17715         }
17716
17717         /* The EPB bridge inside 5714, 5715, and 5780 and any
17718          * device behind the EPB cannot support DMA addresses > 40-bit.
17719          * On 64-bit systems with IOMMU, use 40-bit dma_mask.
17720          * On 64-bit systems without IOMMU, use 64-bit dma_mask and
17721          * do DMA address check in tg3_start_xmit().
17722          */
17723         if (tg3_flag(tp, IS_5788))
17724                 persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
17725         else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
17726                 persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
17727 #ifdef CONFIG_HIGHMEM
17728                 dma_mask = DMA_BIT_MASK(64);
17729 #endif
17730         } else
17731                 persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
17732
17733         /* Configure DMA attributes. */
17734         if (dma_mask > DMA_BIT_MASK(32)) {
17735                 err = pci_set_dma_mask(pdev, dma_mask);
17736                 if (!err) {
17737                         features |= NETIF_F_HIGHDMA;
17738                         err = pci_set_consistent_dma_mask(pdev,
17739                                                           persist_dma_mask);
17740                         if (err < 0) {
17741                                 dev_err(&pdev->dev, "Unable to obtain 64 bit "
17742                                         "DMA for consistent allocations\n");
17743                                 goto err_out_apeunmap;
17744                         }
17745                 }
17746         }
17747         if (err || dma_mask == DMA_BIT_MASK(32)) {
17748                 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
17749                 if (err) {
17750                         dev_err(&pdev->dev,
17751                                 "No usable DMA configuration, aborting\n");
17752                         goto err_out_apeunmap;
17753                 }
17754         }
17755
17756         tg3_init_bufmgr_config(tp);
17757
17758         /* 5700 B0 chips do not support checksumming correctly due
17759          * to hardware bugs.
17760          */
17761         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) {
17762                 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
17763
17764                 if (tg3_flag(tp, 5755_PLUS))
17765                         features |= NETIF_F_IPV6_CSUM;
17766         }
17767
17768         /* TSO is on by default on chips that support hardware TSO.
17769          * Firmware TSO on older chips gives lower performance, so it
17770          * is off by default, but can be enabled using ethtool.
17771          */
17772         if ((tg3_flag(tp, HW_TSO_1) ||
17773              tg3_flag(tp, HW_TSO_2) ||
17774              tg3_flag(tp, HW_TSO_3)) &&
17775             (features & NETIF_F_IP_CSUM))
17776                 features |= NETIF_F_TSO;
17777         if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
17778                 if (features & NETIF_F_IPV6_CSUM)
17779                         features |= NETIF_F_TSO6;
17780                 if (tg3_flag(tp, HW_TSO_3) ||
17781                     tg3_asic_rev(tp) == ASIC_REV_5761 ||
17782                     (tg3_asic_rev(tp) == ASIC_REV_5784 &&
17783                      tg3_chip_rev(tp) != CHIPREV_5784_AX) ||
17784                     tg3_asic_rev(tp) == ASIC_REV_5785 ||
17785                     tg3_asic_rev(tp) == ASIC_REV_57780)
17786                         features |= NETIF_F_TSO_ECN;
17787         }
17788
17789         dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX |
17790                          NETIF_F_HW_VLAN_CTAG_RX;
17791         dev->vlan_features |= features;
17792
17793         /*
17794          * Add loopback capability only for a subset of devices that support
17795          * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
17796          * loopback for the remaining devices.
17797          */
17798         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
17799             !tg3_flag(tp, CPMU_PRESENT))
17800                 /* Add the loopback capability */
17801                 features |= NETIF_F_LOOPBACK;
17802
17803         dev->hw_features |= features;
17804         dev->priv_flags |= IFF_UNICAST_FLT;
17805
17806         /* MTU range: 60 - 9000 or 1500, depending on hardware */
17807         dev->min_mtu = TG3_MIN_MTU;
17808         dev->max_mtu = TG3_MAX_MTU(tp);
17809
17810         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 &&
17811             !tg3_flag(tp, TSO_CAPABLE) &&
17812             !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
17813                 tg3_flag_set(tp, MAX_RXPEND_64);
17814                 tp->rx_pending = 63;
17815         }
17816
17817         err = tg3_get_device_address(tp);
17818         if (err) {
17819                 dev_err(&pdev->dev,
17820                         "Could not obtain valid ethernet address, aborting\n");
17821                 goto err_out_apeunmap;
17822         }
17823
17824         intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
17825         rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
17826         sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
17827         for (i = 0; i < tp->irq_max; i++) {
17828                 struct tg3_napi *tnapi = &tp->napi[i];
17829
17830                 tnapi->tp = tp;
17831                 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
17832
17833                 tnapi->int_mbox = intmbx;
17834                 if (i <= 4)
17835                         intmbx += 0x8;
17836                 else
17837                         intmbx += 0x4;
17838
17839                 tnapi->consmbox = rcvmbx;
17840                 tnapi->prodmbox = sndmbx;
17841
17842                 if (i)
17843                         tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
17844                 else
17845                         tnapi->coal_now = HOSTCC_MODE_NOW;
17846
17847                 if (!tg3_flag(tp, SUPPORT_MSIX))
17848                         break;
17849
17850                 /*
17851                  * If we support MSIX, we'll be using RSS.  If we're using
17852                  * RSS, the first vector only handles link interrupts and the
17853                  * remaining vectors handle rx and tx interrupts.  Reuse the
17854                  * mailbox values for the next iteration.  The values we setup
17855                  * above are still useful for the single vectored mode.
17856                  */
17857                 if (!i)
17858                         continue;
17859
17860                 rcvmbx += 0x8;
17861
17862                 if (sndmbx & 0x4)
17863                         sndmbx -= 0x4;
17864                 else
17865                         sndmbx += 0xc;
17866         }
17867
17868         /*
17869          * Reset chip in case UNDI or EFI driver did not shutdown
17870          * DMA self test will enable WDMAC and we'll see (spurious)
17871          * pending DMA on the PCI bus at that point.
17872          */
17873         if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
17874             (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
17875                 tg3_full_lock(tp, 0);
17876                 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
17877                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17878                 tg3_full_unlock(tp);
17879         }
17880
17881         err = tg3_test_dma(tp);
17882         if (err) {
17883                 dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
17884                 goto err_out_apeunmap;
17885         }
17886
17887         tg3_init_coal(tp);
17888
17889         pci_set_drvdata(pdev, dev);
17890
17891         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
17892             tg3_asic_rev(tp) == ASIC_REV_5720 ||
17893             tg3_asic_rev(tp) == ASIC_REV_5762)
17894                 tg3_flag_set(tp, PTP_CAPABLE);
17895
17896         tg3_timer_init(tp);
17897
17898         tg3_carrier_off(tp);
17899
17900         err = register_netdev(dev);
17901         if (err) {
17902                 dev_err(&pdev->dev, "Cannot register net device, aborting\n");
17903                 goto err_out_apeunmap;
17904         }
17905
17906         if (tg3_flag(tp, PTP_CAPABLE)) {
17907                 tg3_ptp_init(tp);
17908                 tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
17909                                                    &tp->pdev->dev);
17910                 if (IS_ERR(tp->ptp_clock))
17911                         tp->ptp_clock = NULL;
17912         }
17913
17914         netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
17915                     tp->board_part_number,
17916                     tg3_chip_rev_id(tp),
17917                     tg3_bus_string(tp, str),
17918                     dev->dev_addr);
17919
17920         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) {
17921                 char *ethtype;
17922
17923                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
17924                         ethtype = "10/100Base-TX";
17925                 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
17926                         ethtype = "1000Base-SX";
17927                 else
17928                         ethtype = "10/100/1000Base-T";
17929
17930                 netdev_info(dev, "attached PHY is %s (%s Ethernet) "
17931                             "(WireSpeed[%d], EEE[%d])\n",
17932                             tg3_phy_string(tp), ethtype,
17933                             (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
17934                             (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
17935         }
17936
17937         netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
17938                     (dev->features & NETIF_F_RXCSUM) != 0,
17939                     tg3_flag(tp, USE_LINKCHG_REG) != 0,
17940                     (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
17941                     tg3_flag(tp, ENABLE_ASF) != 0,
17942                     tg3_flag(tp, TSO_CAPABLE) != 0);
17943         netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
17944                     tp->dma_rwctrl,
17945                     pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
17946                     ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
17947
17948         pci_save_state(pdev);
17949
17950         return 0;
17951
17952 err_out_apeunmap:
17953         if (tp->aperegs) {
17954                 iounmap(tp->aperegs);
17955                 tp->aperegs = NULL;
17956         }
17957
17958 err_out_iounmap:
17959         if (tp->regs) {
17960                 iounmap(tp->regs);
17961                 tp->regs = NULL;
17962         }
17963
17964 err_out_free_dev:
17965         free_netdev(dev);
17966
17967 err_out_free_res:
17968         pci_release_regions(pdev);
17969
17970 err_out_disable_pdev:
17971         if (pci_is_enabled(pdev))
17972                 pci_disable_device(pdev);
17973         return err;
17974 }
17975
17976 static void tg3_remove_one(struct pci_dev *pdev)
17977 {
17978         struct net_device *dev = pci_get_drvdata(pdev);
17979
17980         if (dev) {
17981                 struct tg3 *tp = netdev_priv(dev);
17982
17983                 tg3_ptp_fini(tp);
17984
17985                 release_firmware(tp->fw);
17986
17987                 tg3_reset_task_cancel(tp);
17988
17989                 if (tg3_flag(tp, USE_PHYLIB)) {
17990                         tg3_phy_fini(tp);
17991                         tg3_mdio_fini(tp);
17992                 }
17993
17994                 unregister_netdev(dev);
17995                 if (tp->aperegs) {
17996                         iounmap(tp->aperegs);
17997                         tp->aperegs = NULL;
17998                 }
17999                 if (tp->regs) {
18000                         iounmap(tp->regs);
18001                         tp->regs = NULL;
18002                 }
18003                 free_netdev(dev);
18004                 pci_release_regions(pdev);
18005                 pci_disable_device(pdev);
18006         }
18007 }
18008
18009 #ifdef CONFIG_PM_SLEEP
18010 static int tg3_suspend(struct device *device)
18011 {
18012         struct pci_dev *pdev = to_pci_dev(device);
18013         struct net_device *dev = pci_get_drvdata(pdev);
18014         struct tg3 *tp = netdev_priv(dev);
18015         int err = 0;
18016
18017         rtnl_lock();
18018
18019         if (!netif_running(dev))
18020                 goto unlock;
18021
18022         tg3_reset_task_cancel(tp);
18023         tg3_phy_stop(tp);
18024         tg3_netif_stop(tp);
18025
18026         tg3_timer_stop(tp);
18027
18028         tg3_full_lock(tp, 1);
18029         tg3_disable_ints(tp);
18030         tg3_full_unlock(tp);
18031
18032         netif_device_detach(dev);
18033
18034         tg3_full_lock(tp, 0);
18035         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
18036         tg3_flag_clear(tp, INIT_COMPLETE);
18037         tg3_full_unlock(tp);
18038
18039         err = tg3_power_down_prepare(tp);
18040         if (err) {
18041                 int err2;
18042
18043                 tg3_full_lock(tp, 0);
18044
18045                 tg3_flag_set(tp, INIT_COMPLETE);
18046                 err2 = tg3_restart_hw(tp, true);
18047                 if (err2)
18048                         goto out;
18049
18050                 tg3_timer_start(tp);
18051
18052                 netif_device_attach(dev);
18053                 tg3_netif_start(tp);
18054
18055 out:
18056                 tg3_full_unlock(tp);
18057
18058                 if (!err2)
18059                         tg3_phy_start(tp);
18060         }
18061
18062 unlock:
18063         rtnl_unlock();
18064         return err;
18065 }
18066
18067 static int tg3_resume(struct device *device)
18068 {
18069         struct pci_dev *pdev = to_pci_dev(device);
18070         struct net_device *dev = pci_get_drvdata(pdev);
18071         struct tg3 *tp = netdev_priv(dev);
18072         int err = 0;
18073
18074         rtnl_lock();
18075
18076         if (!netif_running(dev))
18077                 goto unlock;
18078
18079         netif_device_attach(dev);
18080
18081         tg3_full_lock(tp, 0);
18082
18083         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18084
18085         tg3_flag_set(tp, INIT_COMPLETE);
18086         err = tg3_restart_hw(tp,
18087                              !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
18088         if (err)
18089                 goto out;
18090
18091         tg3_timer_start(tp);
18092
18093         tg3_netif_start(tp);
18094
18095 out:
18096         tg3_full_unlock(tp);
18097
18098         if (!err)
18099                 tg3_phy_start(tp);
18100
18101 unlock:
18102         rtnl_unlock();
18103         return err;
18104 }
18105 #endif /* CONFIG_PM_SLEEP */
18106
18107 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
18108
18109 static void tg3_shutdown(struct pci_dev *pdev)
18110 {
18111         struct net_device *dev = pci_get_drvdata(pdev);
18112         struct tg3 *tp = netdev_priv(dev);
18113
18114         rtnl_lock();
18115         netif_device_detach(dev);
18116
18117         if (netif_running(dev))
18118                 dev_close(dev);
18119
18120         if (system_state == SYSTEM_POWER_OFF)
18121                 tg3_power_down(tp);
18122
18123         rtnl_unlock();
18124 }
18125
18126 /**
18127  * tg3_io_error_detected - called when PCI error is detected
18128  * @pdev: Pointer to PCI device
18129  * @state: The current pci connection state
18130  *
18131  * This function is called after a PCI bus error affecting
18132  * this device has been detected.
18133  */
18134 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
18135                                               pci_channel_state_t state)
18136 {
18137         struct net_device *netdev = pci_get_drvdata(pdev);
18138         struct tg3 *tp = netdev_priv(netdev);
18139         pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
18140
18141         netdev_info(netdev, "PCI I/O error detected\n");
18142
18143         rtnl_lock();
18144
18145         /* We probably don't have netdev yet */
18146         if (!netdev || !netif_running(netdev))
18147                 goto done;
18148
18149         /* We needn't recover from permanent error */
18150         if (state == pci_channel_io_frozen)
18151                 tp->pcierr_recovery = true;
18152
18153         tg3_phy_stop(tp);
18154
18155         tg3_netif_stop(tp);
18156
18157         tg3_timer_stop(tp);
18158
18159         /* Want to make sure that the reset task doesn't run */
18160         tg3_reset_task_cancel(tp);
18161
18162         netif_device_detach(netdev);
18163
18164         /* Clean up software state, even if MMIO is blocked */
18165         tg3_full_lock(tp, 0);
18166         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
18167         tg3_full_unlock(tp);
18168
18169 done:
18170         if (state == pci_channel_io_perm_failure) {
18171                 if (netdev) {
18172                         tg3_napi_enable(tp);
18173                         dev_close(netdev);
18174                 }
18175                 err = PCI_ERS_RESULT_DISCONNECT;
18176         } else {
18177                 pci_disable_device(pdev);
18178         }
18179
18180         rtnl_unlock();
18181
18182         return err;
18183 }
18184
18185 /**
18186  * tg3_io_slot_reset - called after the pci bus has been reset.
18187  * @pdev: Pointer to PCI device
18188  *
18189  * Restart the card from scratch, as if from a cold-boot.
18190  * At this point, the card has exprienced a hard reset,
18191  * followed by fixups by BIOS, and has its config space
18192  * set up identically to what it was at cold boot.
18193  */
18194 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
18195 {
18196         struct net_device *netdev = pci_get_drvdata(pdev);
18197         struct tg3 *tp = netdev_priv(netdev);
18198         pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
18199         int err;
18200
18201         rtnl_lock();
18202
18203         if (pci_enable_device(pdev)) {
18204                 dev_err(&pdev->dev,
18205                         "Cannot re-enable PCI device after reset.\n");
18206                 goto done;
18207         }
18208
18209         pci_set_master(pdev);
18210         pci_restore_state(pdev);
18211         pci_save_state(pdev);
18212
18213         if (!netdev || !netif_running(netdev)) {
18214                 rc = PCI_ERS_RESULT_RECOVERED;
18215                 goto done;
18216         }
18217
18218         err = tg3_power_up(tp);
18219         if (err)
18220                 goto done;
18221
18222         rc = PCI_ERS_RESULT_RECOVERED;
18223
18224 done:
18225         if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) {
18226                 tg3_napi_enable(tp);
18227                 dev_close(netdev);
18228         }
18229         rtnl_unlock();
18230
18231         return rc;
18232 }
18233
18234 /**
18235  * tg3_io_resume - called when traffic can start flowing again.
18236  * @pdev: Pointer to PCI device
18237  *
18238  * This callback is called when the error recovery driver tells
18239  * us that its OK to resume normal operation.
18240  */
18241 static void tg3_io_resume(struct pci_dev *pdev)
18242 {
18243         struct net_device *netdev = pci_get_drvdata(pdev);
18244         struct tg3 *tp = netdev_priv(netdev);
18245         int err;
18246
18247         rtnl_lock();
18248
18249         if (!netdev || !netif_running(netdev))
18250                 goto done;
18251
18252         tg3_full_lock(tp, 0);
18253         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18254         tg3_flag_set(tp, INIT_COMPLETE);
18255         err = tg3_restart_hw(tp, true);
18256         if (err) {
18257                 tg3_full_unlock(tp);
18258                 netdev_err(netdev, "Cannot restart hardware after reset.\n");
18259                 goto done;
18260         }
18261
18262         netif_device_attach(netdev);
18263
18264         tg3_timer_start(tp);
18265
18266         tg3_netif_start(tp);
18267
18268         tg3_full_unlock(tp);
18269
18270         tg3_phy_start(tp);
18271
18272 done:
18273         tp->pcierr_recovery = false;
18274         rtnl_unlock();
18275 }
18276
18277 static const struct pci_error_handlers tg3_err_handler = {
18278         .error_detected = tg3_io_error_detected,
18279         .slot_reset     = tg3_io_slot_reset,
18280         .resume         = tg3_io_resume
18281 };
18282
18283 static struct pci_driver tg3_driver = {
18284         .name           = DRV_MODULE_NAME,
18285         .id_table       = tg3_pci_tbl,
18286         .probe          = tg3_init_one,
18287         .remove         = tg3_remove_one,
18288         .err_handler    = &tg3_err_handler,
18289         .driver.pm      = &tg3_pm_ops,
18290         .shutdown       = tg3_shutdown,
18291 };
18292
18293 module_pci_driver(tg3_driver);