Merge branches 'pm-cpuidle', 'pm-core' and 'pm-sleep'
[linux-2.6-microblaze.git] / drivers / net / ethernet / broadcom / tg3.c
1 /*
2  * tg3.c: Broadcom Tigon3 ethernet driver.
3  *
4  * Copyright (C) 2001, 2002, 2003, 2004 David S. Miller (davem@redhat.com)
5  * Copyright (C) 2001, 2002, 2003 Jeff Garzik (jgarzik@pobox.com)
6  * Copyright (C) 2004 Sun Microsystems Inc.
7  * Copyright (C) 2005-2016 Broadcom Corporation.
8  * Copyright (C) 2016-2017 Broadcom Limited.
9  * Copyright (C) 2018 Broadcom. All Rights Reserved. The term "Broadcom"
10  * refers to Broadcom Inc. and/or its subsidiaries.
11  *
12  * Firmware is:
13  *      Derived from proprietary unpublished source code,
14  *      Copyright (C) 2000-2016 Broadcom Corporation.
15  *      Copyright (C) 2016-2017 Broadcom Ltd.
16  *      Copyright (C) 2018 Broadcom. All Rights Reserved. The term "Broadcom"
17  *      refers to Broadcom Inc. and/or its subsidiaries.
18  *
19  *      Permission is hereby granted for the distribution of this firmware
20  *      data in hexadecimal or equivalent format, provided this copyright
21  *      notice is accompanying it.
22  */
23
24
25 #include <linux/module.h>
26 #include <linux/moduleparam.h>
27 #include <linux/stringify.h>
28 #include <linux/kernel.h>
29 #include <linux/sched/signal.h>
30 #include <linux/types.h>
31 #include <linux/compiler.h>
32 #include <linux/slab.h>
33 #include <linux/delay.h>
34 #include <linux/in.h>
35 #include <linux/interrupt.h>
36 #include <linux/ioport.h>
37 #include <linux/pci.h>
38 #include <linux/netdevice.h>
39 #include <linux/etherdevice.h>
40 #include <linux/skbuff.h>
41 #include <linux/ethtool.h>
42 #include <linux/mdio.h>
43 #include <linux/mii.h>
44 #include <linux/phy.h>
45 #include <linux/brcmphy.h>
46 #include <linux/if.h>
47 #include <linux/if_vlan.h>
48 #include <linux/ip.h>
49 #include <linux/tcp.h>
50 #include <linux/workqueue.h>
51 #include <linux/prefetch.h>
52 #include <linux/dma-mapping.h>
53 #include <linux/firmware.h>
54 #include <linux/ssb/ssb_driver_gige.h>
55 #include <linux/hwmon.h>
56 #include <linux/hwmon-sysfs.h>
57 #include <linux/crc32poly.h>
58
59 #include <net/checksum.h>
60 #include <net/ip.h>
61
62 #include <linux/io.h>
63 #include <asm/byteorder.h>
64 #include <linux/uaccess.h>
65
66 #include <uapi/linux/net_tstamp.h>
67 #include <linux/ptp_clock_kernel.h>
68
69 #define BAR_0   0
70 #define BAR_2   2
71
72 #include "tg3.h"
73
74 /* Functions & macros to verify TG3_FLAGS types */
75
76 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
77 {
78         return test_bit(flag, bits);
79 }
80
81 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
82 {
83         set_bit(flag, bits);
84 }
85
86 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
87 {
88         clear_bit(flag, bits);
89 }
90
91 #define tg3_flag(tp, flag)                              \
92         _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
93 #define tg3_flag_set(tp, flag)                          \
94         _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
95 #define tg3_flag_clear(tp, flag)                        \
96         _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
97
98 #define DRV_MODULE_NAME         "tg3"
99 /* DO NOT UPDATE TG3_*_NUM defines */
100 #define TG3_MAJ_NUM                     3
101 #define TG3_MIN_NUM                     137
102
103 #define RESET_KIND_SHUTDOWN     0
104 #define RESET_KIND_INIT         1
105 #define RESET_KIND_SUSPEND      2
106
107 #define TG3_DEF_RX_MODE         0
108 #define TG3_DEF_TX_MODE         0
109 #define TG3_DEF_MSG_ENABLE        \
110         (NETIF_MSG_DRV          | \
111          NETIF_MSG_PROBE        | \
112          NETIF_MSG_LINK         | \
113          NETIF_MSG_TIMER        | \
114          NETIF_MSG_IFDOWN       | \
115          NETIF_MSG_IFUP         | \
116          NETIF_MSG_RX_ERR       | \
117          NETIF_MSG_TX_ERR)
118
119 #define TG3_GRC_LCLCTL_PWRSW_DELAY      100
120
121 /* length of time before we decide the hardware is borked,
122  * and dev->tx_timeout() should be called to fix the problem
123  */
124
125 #define TG3_TX_TIMEOUT                  (5 * HZ)
126
127 /* hardware minimum and maximum for a single frame's data payload */
128 #define TG3_MIN_MTU                     ETH_ZLEN
129 #define TG3_MAX_MTU(tp) \
130         (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
131
132 /* These numbers seem to be hard coded in the NIC firmware somehow.
133  * You can't change the ring sizes, but you can change where you place
134  * them in the NIC onboard memory.
135  */
136 #define TG3_RX_STD_RING_SIZE(tp) \
137         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
138          TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
139 #define TG3_DEF_RX_RING_PENDING         200
140 #define TG3_RX_JMB_RING_SIZE(tp) \
141         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
142          TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
143 #define TG3_DEF_RX_JUMBO_RING_PENDING   100
144
145 /* Do not place this n-ring entries value into the tp struct itself,
146  * we really want to expose these constants to GCC so that modulo et
147  * al.  operations are done with shifts and masks instead of with
148  * hw multiply/modulo instructions.  Another solution would be to
149  * replace things like '% foo' with '& (foo - 1)'.
150  */
151
152 #define TG3_TX_RING_SIZE                512
153 #define TG3_DEF_TX_RING_PENDING         (TG3_TX_RING_SIZE - 1)
154
155 #define TG3_RX_STD_RING_BYTES(tp) \
156         (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
157 #define TG3_RX_JMB_RING_BYTES(tp) \
158         (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
159 #define TG3_RX_RCB_RING_BYTES(tp) \
160         (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
161 #define TG3_TX_RING_BYTES       (sizeof(struct tg3_tx_buffer_desc) * \
162                                  TG3_TX_RING_SIZE)
163 #define NEXT_TX(N)              (((N) + 1) & (TG3_TX_RING_SIZE - 1))
164
165 #define TG3_DMA_BYTE_ENAB               64
166
167 #define TG3_RX_STD_DMA_SZ               1536
168 #define TG3_RX_JMB_DMA_SZ               9046
169
170 #define TG3_RX_DMA_TO_MAP_SZ(x)         ((x) + TG3_DMA_BYTE_ENAB)
171
172 #define TG3_RX_STD_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
173 #define TG3_RX_JMB_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
174
175 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
176         (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
177
178 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
179         (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
180
181 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
182  * that are at least dword aligned when used in PCIX mode.  The driver
183  * works around this bug by double copying the packet.  This workaround
184  * is built into the normal double copy length check for efficiency.
185  *
186  * However, the double copy is only necessary on those architectures
187  * where unaligned memory accesses are inefficient.  For those architectures
188  * where unaligned memory accesses incur little penalty, we can reintegrate
189  * the 5701 in the normal rx path.  Doing so saves a device structure
190  * dereference by hardcoding the double copy threshold in place.
191  */
192 #define TG3_RX_COPY_THRESHOLD           256
193 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
194         #define TG3_RX_COPY_THRESH(tp)  TG3_RX_COPY_THRESHOLD
195 #else
196         #define TG3_RX_COPY_THRESH(tp)  ((tp)->rx_copy_thresh)
197 #endif
198
199 #if (NET_IP_ALIGN != 0)
200 #define TG3_RX_OFFSET(tp)       ((tp)->rx_offset)
201 #else
202 #define TG3_RX_OFFSET(tp)       (NET_SKB_PAD)
203 #endif
204
205 /* minimum number of free TX descriptors required to wake up TX process */
206 #define TG3_TX_WAKEUP_THRESH(tnapi)             ((tnapi)->tx_pending / 4)
207 #define TG3_TX_BD_DMA_MAX_2K            2048
208 #define TG3_TX_BD_DMA_MAX_4K            4096
209
210 #define TG3_RAW_IP_ALIGN 2
211
212 #define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3)
213 #define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1)
214
215 #define TG3_FW_UPDATE_TIMEOUT_SEC       5
216 #define TG3_FW_UPDATE_FREQ_SEC          (TG3_FW_UPDATE_TIMEOUT_SEC / 2)
217
218 #define FIRMWARE_TG3            "tigon/tg3.bin"
219 #define FIRMWARE_TG357766       "tigon/tg357766.bin"
220 #define FIRMWARE_TG3TSO         "tigon/tg3_tso.bin"
221 #define FIRMWARE_TG3TSO5        "tigon/tg3_tso5.bin"
222
223 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
224 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
225 MODULE_LICENSE("GPL");
226 MODULE_FIRMWARE(FIRMWARE_TG3);
227 MODULE_FIRMWARE(FIRMWARE_TG3TSO);
228 MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
229
230 static int tg3_debug = -1;      /* -1 == use TG3_DEF_MSG_ENABLE as value */
231 module_param(tg3_debug, int, 0);
232 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
233
234 #define TG3_DRV_DATA_FLAG_10_100_ONLY   0x0001
235 #define TG3_DRV_DATA_FLAG_5705_10_100   0x0002
236
237 static const struct pci_device_id tg3_pci_tbl[] = {
238         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
239         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
240         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
241         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
242         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
243         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
244         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
245         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
246         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
247         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
248         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
249         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
250         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
251         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
252         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
253         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
254         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
255         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
256         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
257          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
258                         TG3_DRV_DATA_FLAG_5705_10_100},
259         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2),
260          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
261                         TG3_DRV_DATA_FLAG_5705_10_100},
262         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
263         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
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_5721)},
267         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
268         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
269         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
270         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
271         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
272          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
273         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
274         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
275         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
276         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
277         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
278          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
279         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
280         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
281         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
282         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
283         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
284         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
285         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
286         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
287                         PCI_VENDOR_ID_LENOVO,
288                         TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
289          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
290         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
291         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
292          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
293         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
294         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
295         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
296         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
297         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
298         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
299         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
300         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
301         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
302         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
303         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
304         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
305         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
306         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
307         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
308         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
309         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
310         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
311         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
312                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
313          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
314         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
315                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
316          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
317         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
318         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
319         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
320          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
321         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
322         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
323         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
324         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
325         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
326         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
327         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
328         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
329         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
330          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
331         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
332          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
333         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
334         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
335         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
336         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
337         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)},
338         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)},
339         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)},
340         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)},
341         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)},
342         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)},
343         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
344         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},
345         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
346         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
347         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
348         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
349         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
350         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
351         {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
352         {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
353         {}
354 };
355
356 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
357
358 static const struct {
359         const char string[ETH_GSTRING_LEN];
360 } ethtool_stats_keys[] = {
361         { "rx_octets" },
362         { "rx_fragments" },
363         { "rx_ucast_packets" },
364         { "rx_mcast_packets" },
365         { "rx_bcast_packets" },
366         { "rx_fcs_errors" },
367         { "rx_align_errors" },
368         { "rx_xon_pause_rcvd" },
369         { "rx_xoff_pause_rcvd" },
370         { "rx_mac_ctrl_rcvd" },
371         { "rx_xoff_entered" },
372         { "rx_frame_too_long_errors" },
373         { "rx_jabbers" },
374         { "rx_undersize_packets" },
375         { "rx_in_length_errors" },
376         { "rx_out_length_errors" },
377         { "rx_64_or_less_octet_packets" },
378         { "rx_65_to_127_octet_packets" },
379         { "rx_128_to_255_octet_packets" },
380         { "rx_256_to_511_octet_packets" },
381         { "rx_512_to_1023_octet_packets" },
382         { "rx_1024_to_1522_octet_packets" },
383         { "rx_1523_to_2047_octet_packets" },
384         { "rx_2048_to_4095_octet_packets" },
385         { "rx_4096_to_8191_octet_packets" },
386         { "rx_8192_to_9022_octet_packets" },
387
388         { "tx_octets" },
389         { "tx_collisions" },
390
391         { "tx_xon_sent" },
392         { "tx_xoff_sent" },
393         { "tx_flow_control" },
394         { "tx_mac_errors" },
395         { "tx_single_collisions" },
396         { "tx_mult_collisions" },
397         { "tx_deferred" },
398         { "tx_excessive_collisions" },
399         { "tx_late_collisions" },
400         { "tx_collide_2times" },
401         { "tx_collide_3times" },
402         { "tx_collide_4times" },
403         { "tx_collide_5times" },
404         { "tx_collide_6times" },
405         { "tx_collide_7times" },
406         { "tx_collide_8times" },
407         { "tx_collide_9times" },
408         { "tx_collide_10times" },
409         { "tx_collide_11times" },
410         { "tx_collide_12times" },
411         { "tx_collide_13times" },
412         { "tx_collide_14times" },
413         { "tx_collide_15times" },
414         { "tx_ucast_packets" },
415         { "tx_mcast_packets" },
416         { "tx_bcast_packets" },
417         { "tx_carrier_sense_errors" },
418         { "tx_discards" },
419         { "tx_errors" },
420
421         { "dma_writeq_full" },
422         { "dma_write_prioq_full" },
423         { "rxbds_empty" },
424         { "rx_discards" },
425         { "rx_errors" },
426         { "rx_threshold_hit" },
427
428         { "dma_readq_full" },
429         { "dma_read_prioq_full" },
430         { "tx_comp_queue_full" },
431
432         { "ring_set_send_prod_index" },
433         { "ring_status_update" },
434         { "nic_irqs" },
435         { "nic_avoided_irqs" },
436         { "nic_tx_threshold_hit" },
437
438         { "mbuf_lwm_thresh_hit" },
439 };
440
441 #define TG3_NUM_STATS   ARRAY_SIZE(ethtool_stats_keys)
442 #define TG3_NVRAM_TEST          0
443 #define TG3_LINK_TEST           1
444 #define TG3_REGISTER_TEST       2
445 #define TG3_MEMORY_TEST         3
446 #define TG3_MAC_LOOPB_TEST      4
447 #define TG3_PHY_LOOPB_TEST      5
448 #define TG3_EXT_LOOPB_TEST      6
449 #define TG3_INTERRUPT_TEST      7
450
451
452 static const struct {
453         const char string[ETH_GSTRING_LEN];
454 } ethtool_test_keys[] = {
455         [TG3_NVRAM_TEST]        = { "nvram test        (online) " },
456         [TG3_LINK_TEST]         = { "link test         (online) " },
457         [TG3_REGISTER_TEST]     = { "register test     (offline)" },
458         [TG3_MEMORY_TEST]       = { "memory test       (offline)" },
459         [TG3_MAC_LOOPB_TEST]    = { "mac loopback test (offline)" },
460         [TG3_PHY_LOOPB_TEST]    = { "phy loopback test (offline)" },
461         [TG3_EXT_LOOPB_TEST]    = { "ext loopback test (offline)" },
462         [TG3_INTERRUPT_TEST]    = { "interrupt test    (offline)" },
463 };
464
465 #define TG3_NUM_TEST    ARRAY_SIZE(ethtool_test_keys)
466
467
468 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
469 {
470         writel(val, tp->regs + off);
471 }
472
473 static u32 tg3_read32(struct tg3 *tp, u32 off)
474 {
475         return readl(tp->regs + off);
476 }
477
478 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
479 {
480         writel(val, tp->aperegs + off);
481 }
482
483 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
484 {
485         return readl(tp->aperegs + off);
486 }
487
488 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
489 {
490         unsigned long flags;
491
492         spin_lock_irqsave(&tp->indirect_lock, flags);
493         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
494         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
495         spin_unlock_irqrestore(&tp->indirect_lock, flags);
496 }
497
498 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
499 {
500         writel(val, tp->regs + off);
501         readl(tp->regs + off);
502 }
503
504 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
505 {
506         unsigned long flags;
507         u32 val;
508
509         spin_lock_irqsave(&tp->indirect_lock, flags);
510         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
511         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
512         spin_unlock_irqrestore(&tp->indirect_lock, flags);
513         return val;
514 }
515
516 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
517 {
518         unsigned long flags;
519
520         if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
521                 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
522                                        TG3_64BIT_REG_LOW, val);
523                 return;
524         }
525         if (off == TG3_RX_STD_PROD_IDX_REG) {
526                 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
527                                        TG3_64BIT_REG_LOW, val);
528                 return;
529         }
530
531         spin_lock_irqsave(&tp->indirect_lock, flags);
532         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
533         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
534         spin_unlock_irqrestore(&tp->indirect_lock, flags);
535
536         /* In indirect mode when disabling interrupts, we also need
537          * to clear the interrupt bit in the GRC local ctrl register.
538          */
539         if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
540             (val == 0x1)) {
541                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
542                                        tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
543         }
544 }
545
546 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
547 {
548         unsigned long flags;
549         u32 val;
550
551         spin_lock_irqsave(&tp->indirect_lock, flags);
552         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
553         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
554         spin_unlock_irqrestore(&tp->indirect_lock, flags);
555         return val;
556 }
557
558 /* usec_wait specifies the wait time in usec when writing to certain registers
559  * where it is unsafe to read back the register without some delay.
560  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
561  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
562  */
563 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
564 {
565         if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
566                 /* Non-posted methods */
567                 tp->write32(tp, off, val);
568         else {
569                 /* Posted method */
570                 tg3_write32(tp, off, val);
571                 if (usec_wait)
572                         udelay(usec_wait);
573                 tp->read32(tp, off);
574         }
575         /* Wait again after the read for the posted method to guarantee that
576          * the wait time is met.
577          */
578         if (usec_wait)
579                 udelay(usec_wait);
580 }
581
582 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
583 {
584         tp->write32_mbox(tp, off, val);
585         if (tg3_flag(tp, FLUSH_POSTED_WRITES) ||
586             (!tg3_flag(tp, MBOX_WRITE_REORDER) &&
587              !tg3_flag(tp, ICH_WORKAROUND)))
588                 tp->read32_mbox(tp, off);
589 }
590
591 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
592 {
593         void __iomem *mbox = tp->regs + off;
594         writel(val, mbox);
595         if (tg3_flag(tp, TXD_MBOX_HWBUG))
596                 writel(val, mbox);
597         if (tg3_flag(tp, MBOX_WRITE_REORDER) ||
598             tg3_flag(tp, FLUSH_POSTED_WRITES))
599                 readl(mbox);
600 }
601
602 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
603 {
604         return readl(tp->regs + off + GRCMBOX_BASE);
605 }
606
607 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
608 {
609         writel(val, tp->regs + off + GRCMBOX_BASE);
610 }
611
612 #define tw32_mailbox(reg, val)          tp->write32_mbox(tp, reg, val)
613 #define tw32_mailbox_f(reg, val)        tw32_mailbox_flush(tp, (reg), (val))
614 #define tw32_rx_mbox(reg, val)          tp->write32_rx_mbox(tp, reg, val)
615 #define tw32_tx_mbox(reg, val)          tp->write32_tx_mbox(tp, reg, val)
616 #define tr32_mailbox(reg)               tp->read32_mbox(tp, reg)
617
618 #define tw32(reg, val)                  tp->write32(tp, reg, val)
619 #define tw32_f(reg, val)                _tw32_flush(tp, (reg), (val), 0)
620 #define tw32_wait_f(reg, val, us)       _tw32_flush(tp, (reg), (val), (us))
621 #define tr32(reg)                       tp->read32(tp, reg)
622
623 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
624 {
625         unsigned long flags;
626
627         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
628             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
629                 return;
630
631         spin_lock_irqsave(&tp->indirect_lock, flags);
632         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
633                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
634                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
635
636                 /* Always leave this as zero. */
637                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
638         } else {
639                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
640                 tw32_f(TG3PCI_MEM_WIN_DATA, val);
641
642                 /* Always leave this as zero. */
643                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
644         }
645         spin_unlock_irqrestore(&tp->indirect_lock, flags);
646 }
647
648 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
649 {
650         unsigned long flags;
651
652         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
653             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
654                 *val = 0;
655                 return;
656         }
657
658         spin_lock_irqsave(&tp->indirect_lock, flags);
659         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
660                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
661                 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
662
663                 /* Always leave this as zero. */
664                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
665         } else {
666                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
667                 *val = tr32(TG3PCI_MEM_WIN_DATA);
668
669                 /* Always leave this as zero. */
670                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
671         }
672         spin_unlock_irqrestore(&tp->indirect_lock, flags);
673 }
674
675 static void tg3_ape_lock_init(struct tg3 *tp)
676 {
677         int i;
678         u32 regbase, bit;
679
680         if (tg3_asic_rev(tp) == ASIC_REV_5761)
681                 regbase = TG3_APE_LOCK_GRANT;
682         else
683                 regbase = TG3_APE_PER_LOCK_GRANT;
684
685         /* Make sure the driver hasn't any stale locks. */
686         for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
687                 switch (i) {
688                 case TG3_APE_LOCK_PHY0:
689                 case TG3_APE_LOCK_PHY1:
690                 case TG3_APE_LOCK_PHY2:
691                 case TG3_APE_LOCK_PHY3:
692                         bit = APE_LOCK_GRANT_DRIVER;
693                         break;
694                 default:
695                         if (!tp->pci_fn)
696                                 bit = APE_LOCK_GRANT_DRIVER;
697                         else
698                                 bit = 1 << tp->pci_fn;
699                 }
700                 tg3_ape_write32(tp, regbase + 4 * i, bit);
701         }
702
703 }
704
705 static int tg3_ape_lock(struct tg3 *tp, int locknum)
706 {
707         int i, off;
708         int ret = 0;
709         u32 status, req, gnt, bit;
710
711         if (!tg3_flag(tp, ENABLE_APE))
712                 return 0;
713
714         switch (locknum) {
715         case TG3_APE_LOCK_GPIO:
716                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
717                         return 0;
718                 fallthrough;
719         case TG3_APE_LOCK_GRC:
720         case TG3_APE_LOCK_MEM:
721                 if (!tp->pci_fn)
722                         bit = APE_LOCK_REQ_DRIVER;
723                 else
724                         bit = 1 << tp->pci_fn;
725                 break;
726         case TG3_APE_LOCK_PHY0:
727         case TG3_APE_LOCK_PHY1:
728         case TG3_APE_LOCK_PHY2:
729         case TG3_APE_LOCK_PHY3:
730                 bit = APE_LOCK_REQ_DRIVER;
731                 break;
732         default:
733                 return -EINVAL;
734         }
735
736         if (tg3_asic_rev(tp) == ASIC_REV_5761) {
737                 req = TG3_APE_LOCK_REQ;
738                 gnt = TG3_APE_LOCK_GRANT;
739         } else {
740                 req = TG3_APE_PER_LOCK_REQ;
741                 gnt = TG3_APE_PER_LOCK_GRANT;
742         }
743
744         off = 4 * locknum;
745
746         tg3_ape_write32(tp, req + off, bit);
747
748         /* Wait for up to 1 millisecond to acquire lock. */
749         for (i = 0; i < 100; i++) {
750                 status = tg3_ape_read32(tp, gnt + off);
751                 if (status == bit)
752                         break;
753                 if (pci_channel_offline(tp->pdev))
754                         break;
755
756                 udelay(10);
757         }
758
759         if (status != bit) {
760                 /* Revoke the lock request. */
761                 tg3_ape_write32(tp, gnt + off, bit);
762                 ret = -EBUSY;
763         }
764
765         return ret;
766 }
767
768 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
769 {
770         u32 gnt, bit;
771
772         if (!tg3_flag(tp, ENABLE_APE))
773                 return;
774
775         switch (locknum) {
776         case TG3_APE_LOCK_GPIO:
777                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
778                         return;
779                 fallthrough;
780         case TG3_APE_LOCK_GRC:
781         case TG3_APE_LOCK_MEM:
782                 if (!tp->pci_fn)
783                         bit = APE_LOCK_GRANT_DRIVER;
784                 else
785                         bit = 1 << tp->pci_fn;
786                 break;
787         case TG3_APE_LOCK_PHY0:
788         case TG3_APE_LOCK_PHY1:
789         case TG3_APE_LOCK_PHY2:
790         case TG3_APE_LOCK_PHY3:
791                 bit = APE_LOCK_GRANT_DRIVER;
792                 break;
793         default:
794                 return;
795         }
796
797         if (tg3_asic_rev(tp) == ASIC_REV_5761)
798                 gnt = TG3_APE_LOCK_GRANT;
799         else
800                 gnt = TG3_APE_PER_LOCK_GRANT;
801
802         tg3_ape_write32(tp, gnt + 4 * locknum, bit);
803 }
804
805 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
806 {
807         u32 apedata;
808
809         while (timeout_us) {
810                 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
811                         return -EBUSY;
812
813                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
814                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
815                         break;
816
817                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
818
819                 udelay(10);
820                 timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
821         }
822
823         return timeout_us ? 0 : -EBUSY;
824 }
825
826 #ifdef CONFIG_TIGON3_HWMON
827 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
828 {
829         u32 i, apedata;
830
831         for (i = 0; i < timeout_us / 10; i++) {
832                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
833
834                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
835                         break;
836
837                 udelay(10);
838         }
839
840         return i == timeout_us / 10;
841 }
842
843 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
844                                    u32 len)
845 {
846         int err;
847         u32 i, bufoff, msgoff, maxlen, apedata;
848
849         if (!tg3_flag(tp, APE_HAS_NCSI))
850                 return 0;
851
852         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
853         if (apedata != APE_SEG_SIG_MAGIC)
854                 return -ENODEV;
855
856         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
857         if (!(apedata & APE_FW_STATUS_READY))
858                 return -EAGAIN;
859
860         bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
861                  TG3_APE_SHMEM_BASE;
862         msgoff = bufoff + 2 * sizeof(u32);
863         maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
864
865         while (len) {
866                 u32 length;
867
868                 /* Cap xfer sizes to scratchpad limits. */
869                 length = (len > maxlen) ? maxlen : len;
870                 len -= length;
871
872                 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
873                 if (!(apedata & APE_FW_STATUS_READY))
874                         return -EAGAIN;
875
876                 /* Wait for up to 1 msec for APE to service previous event. */
877                 err = tg3_ape_event_lock(tp, 1000);
878                 if (err)
879                         return err;
880
881                 apedata = APE_EVENT_STATUS_DRIVER_EVNT |
882                           APE_EVENT_STATUS_SCRTCHPD_READ |
883                           APE_EVENT_STATUS_EVENT_PENDING;
884                 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
885
886                 tg3_ape_write32(tp, bufoff, base_off);
887                 tg3_ape_write32(tp, bufoff + sizeof(u32), length);
888
889                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
890                 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
891
892                 base_off += length;
893
894                 if (tg3_ape_wait_for_event(tp, 30000))
895                         return -EAGAIN;
896
897                 for (i = 0; length; i += 4, length -= 4) {
898                         u32 val = tg3_ape_read32(tp, msgoff + i);
899                         memcpy(data, &val, sizeof(u32));
900                         data++;
901                 }
902         }
903
904         return 0;
905 }
906 #endif
907
908 static int tg3_ape_send_event(struct tg3 *tp, u32 event)
909 {
910         int err;
911         u32 apedata;
912
913         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
914         if (apedata != APE_SEG_SIG_MAGIC)
915                 return -EAGAIN;
916
917         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
918         if (!(apedata & APE_FW_STATUS_READY))
919                 return -EAGAIN;
920
921         /* Wait for up to 20 millisecond for APE to service previous event. */
922         err = tg3_ape_event_lock(tp, 20000);
923         if (err)
924                 return err;
925
926         tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
927                         event | APE_EVENT_STATUS_EVENT_PENDING);
928
929         tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
930         tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
931
932         return 0;
933 }
934
935 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
936 {
937         u32 event;
938         u32 apedata;
939
940         if (!tg3_flag(tp, ENABLE_APE))
941                 return;
942
943         switch (kind) {
944         case RESET_KIND_INIT:
945                 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
946                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
947                                 APE_HOST_SEG_SIG_MAGIC);
948                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
949                                 APE_HOST_SEG_LEN_MAGIC);
950                 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
951                 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
952                 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
953                         APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
954                 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
955                                 APE_HOST_BEHAV_NO_PHYLOCK);
956                 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
957                                     TG3_APE_HOST_DRVR_STATE_START);
958
959                 event = APE_EVENT_STATUS_STATE_START;
960                 break;
961         case RESET_KIND_SHUTDOWN:
962                 if (device_may_wakeup(&tp->pdev->dev) &&
963                     tg3_flag(tp, WOL_ENABLE)) {
964                         tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
965                                             TG3_APE_HOST_WOL_SPEED_AUTO);
966                         apedata = TG3_APE_HOST_DRVR_STATE_WOL;
967                 } else
968                         apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
969
970                 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
971
972                 event = APE_EVENT_STATUS_STATE_UNLOAD;
973                 break;
974         default:
975                 return;
976         }
977
978         event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
979
980         tg3_ape_send_event(tp, event);
981 }
982
983 static void tg3_send_ape_heartbeat(struct tg3 *tp,
984                                    unsigned long interval)
985 {
986         /* Check if hb interval has exceeded */
987         if (!tg3_flag(tp, ENABLE_APE) ||
988             time_before(jiffies, tp->ape_hb_jiffies + interval))
989                 return;
990
991         tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
992         tp->ape_hb_jiffies = jiffies;
993 }
994
995 static void tg3_disable_ints(struct tg3 *tp)
996 {
997         int i;
998
999         tw32(TG3PCI_MISC_HOST_CTRL,
1000              (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
1001         for (i = 0; i < tp->irq_max; i++)
1002                 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
1003 }
1004
1005 static void tg3_enable_ints(struct tg3 *tp)
1006 {
1007         int i;
1008
1009         tp->irq_sync = 0;
1010         wmb();
1011
1012         tw32(TG3PCI_MISC_HOST_CTRL,
1013              (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
1014
1015         tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
1016         for (i = 0; i < tp->irq_cnt; i++) {
1017                 struct tg3_napi *tnapi = &tp->napi[i];
1018
1019                 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1020                 if (tg3_flag(tp, 1SHOT_MSI))
1021                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1022
1023                 tp->coal_now |= tnapi->coal_now;
1024         }
1025
1026         /* Force an initial interrupt */
1027         if (!tg3_flag(tp, TAGGED_STATUS) &&
1028             (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
1029                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
1030         else
1031                 tw32(HOSTCC_MODE, tp->coal_now);
1032
1033         tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1034 }
1035
1036 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
1037 {
1038         struct tg3 *tp = tnapi->tp;
1039         struct tg3_hw_status *sblk = tnapi->hw_status;
1040         unsigned int work_exists = 0;
1041
1042         /* check for phy events */
1043         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
1044                 if (sblk->status & SD_STATUS_LINK_CHG)
1045                         work_exists = 1;
1046         }
1047
1048         /* check for TX work to do */
1049         if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
1050                 work_exists = 1;
1051
1052         /* check for RX work to do */
1053         if (tnapi->rx_rcb_prod_idx &&
1054             *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
1055                 work_exists = 1;
1056
1057         return work_exists;
1058 }
1059
1060 /* tg3_int_reenable
1061  *  similar to tg3_enable_ints, but it accurately determines whether there
1062  *  is new work pending and can return without flushing the PIO write
1063  *  which reenables interrupts
1064  */
1065 static void tg3_int_reenable(struct tg3_napi *tnapi)
1066 {
1067         struct tg3 *tp = tnapi->tp;
1068
1069         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1070
1071         /* When doing tagged status, this work check is unnecessary.
1072          * The last_tag we write above tells the chip which piece of
1073          * work we've completed.
1074          */
1075         if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1076                 tw32(HOSTCC_MODE, tp->coalesce_mode |
1077                      HOSTCC_MODE_ENABLE | tnapi->coal_now);
1078 }
1079
1080 static void tg3_switch_clocks(struct tg3 *tp)
1081 {
1082         u32 clock_ctrl;
1083         u32 orig_clock_ctrl;
1084
1085         if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1086                 return;
1087
1088         clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1089
1090         orig_clock_ctrl = clock_ctrl;
1091         clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1092                        CLOCK_CTRL_CLKRUN_OENABLE |
1093                        0x1f);
1094         tp->pci_clock_ctrl = clock_ctrl;
1095
1096         if (tg3_flag(tp, 5705_PLUS)) {
1097                 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1098                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
1099                                     clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1100                 }
1101         } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1102                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1103                             clock_ctrl |
1104                             (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1105                             40);
1106                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1107                             clock_ctrl | (CLOCK_CTRL_ALTCLK),
1108                             40);
1109         }
1110         tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1111 }
1112
1113 #define PHY_BUSY_LOOPS  5000
1114
1115 static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg,
1116                          u32 *val)
1117 {
1118         u32 frame_val;
1119         unsigned int loops;
1120         int ret;
1121
1122         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1123                 tw32_f(MAC_MI_MODE,
1124                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1125                 udelay(80);
1126         }
1127
1128         tg3_ape_lock(tp, tp->phy_ape_lock);
1129
1130         *val = 0x0;
1131
1132         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1133                       MI_COM_PHY_ADDR_MASK);
1134         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1135                       MI_COM_REG_ADDR_MASK);
1136         frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1137
1138         tw32_f(MAC_MI_COM, frame_val);
1139
1140         loops = PHY_BUSY_LOOPS;
1141         while (loops != 0) {
1142                 udelay(10);
1143                 frame_val = tr32(MAC_MI_COM);
1144
1145                 if ((frame_val & MI_COM_BUSY) == 0) {
1146                         udelay(5);
1147                         frame_val = tr32(MAC_MI_COM);
1148                         break;
1149                 }
1150                 loops -= 1;
1151         }
1152
1153         ret = -EBUSY;
1154         if (loops != 0) {
1155                 *val = frame_val & MI_COM_DATA_MASK;
1156                 ret = 0;
1157         }
1158
1159         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1160                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1161                 udelay(80);
1162         }
1163
1164         tg3_ape_unlock(tp, tp->phy_ape_lock);
1165
1166         return ret;
1167 }
1168
1169 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1170 {
1171         return __tg3_readphy(tp, tp->phy_addr, reg, val);
1172 }
1173
1174 static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg,
1175                           u32 val)
1176 {
1177         u32 frame_val;
1178         unsigned int loops;
1179         int ret;
1180
1181         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1182             (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1183                 return 0;
1184
1185         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1186                 tw32_f(MAC_MI_MODE,
1187                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1188                 udelay(80);
1189         }
1190
1191         tg3_ape_lock(tp, tp->phy_ape_lock);
1192
1193         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1194                       MI_COM_PHY_ADDR_MASK);
1195         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1196                       MI_COM_REG_ADDR_MASK);
1197         frame_val |= (val & MI_COM_DATA_MASK);
1198         frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1199
1200         tw32_f(MAC_MI_COM, frame_val);
1201
1202         loops = PHY_BUSY_LOOPS;
1203         while (loops != 0) {
1204                 udelay(10);
1205                 frame_val = tr32(MAC_MI_COM);
1206                 if ((frame_val & MI_COM_BUSY) == 0) {
1207                         udelay(5);
1208                         frame_val = tr32(MAC_MI_COM);
1209                         break;
1210                 }
1211                 loops -= 1;
1212         }
1213
1214         ret = -EBUSY;
1215         if (loops != 0)
1216                 ret = 0;
1217
1218         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1219                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1220                 udelay(80);
1221         }
1222
1223         tg3_ape_unlock(tp, tp->phy_ape_lock);
1224
1225         return ret;
1226 }
1227
1228 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1229 {
1230         return __tg3_writephy(tp, tp->phy_addr, reg, val);
1231 }
1232
1233 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1234 {
1235         int err;
1236
1237         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1238         if (err)
1239                 goto done;
1240
1241         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1242         if (err)
1243                 goto done;
1244
1245         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1246                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1247         if (err)
1248                 goto done;
1249
1250         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1251
1252 done:
1253         return err;
1254 }
1255
1256 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1257 {
1258         int err;
1259
1260         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1261         if (err)
1262                 goto done;
1263
1264         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1265         if (err)
1266                 goto done;
1267
1268         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1269                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1270         if (err)
1271                 goto done;
1272
1273         err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1274
1275 done:
1276         return err;
1277 }
1278
1279 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1280 {
1281         int err;
1282
1283         err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1284         if (!err)
1285                 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1286
1287         return err;
1288 }
1289
1290 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1291 {
1292         int err;
1293
1294         err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1295         if (!err)
1296                 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1297
1298         return err;
1299 }
1300
1301 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1302 {
1303         int err;
1304
1305         err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1306                            (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1307                            MII_TG3_AUXCTL_SHDWSEL_MISC);
1308         if (!err)
1309                 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1310
1311         return err;
1312 }
1313
1314 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1315 {
1316         if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1317                 set |= MII_TG3_AUXCTL_MISC_WREN;
1318
1319         return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1320 }
1321
1322 static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable)
1323 {
1324         u32 val;
1325         int err;
1326
1327         err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1328
1329         if (err)
1330                 return err;
1331
1332         if (enable)
1333                 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1334         else
1335                 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1336
1337         err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1338                                    val | MII_TG3_AUXCTL_ACTL_TX_6DB);
1339
1340         return err;
1341 }
1342
1343 static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val)
1344 {
1345         return tg3_writephy(tp, MII_TG3_MISC_SHDW,
1346                             reg | val | MII_TG3_MISC_SHDW_WREN);
1347 }
1348
1349 static int tg3_bmcr_reset(struct tg3 *tp)
1350 {
1351         u32 phy_control;
1352         int limit, err;
1353
1354         /* OK, reset it, and poll the BMCR_RESET bit until it
1355          * clears or we time out.
1356          */
1357         phy_control = BMCR_RESET;
1358         err = tg3_writephy(tp, MII_BMCR, phy_control);
1359         if (err != 0)
1360                 return -EBUSY;
1361
1362         limit = 5000;
1363         while (limit--) {
1364                 err = tg3_readphy(tp, MII_BMCR, &phy_control);
1365                 if (err != 0)
1366                         return -EBUSY;
1367
1368                 if ((phy_control & BMCR_RESET) == 0) {
1369                         udelay(40);
1370                         break;
1371                 }
1372                 udelay(10);
1373         }
1374         if (limit < 0)
1375                 return -EBUSY;
1376
1377         return 0;
1378 }
1379
1380 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1381 {
1382         struct tg3 *tp = bp->priv;
1383         u32 val;
1384
1385         spin_lock_bh(&tp->lock);
1386
1387         if (__tg3_readphy(tp, mii_id, reg, &val))
1388                 val = -EIO;
1389
1390         spin_unlock_bh(&tp->lock);
1391
1392         return val;
1393 }
1394
1395 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1396 {
1397         struct tg3 *tp = bp->priv;
1398         u32 ret = 0;
1399
1400         spin_lock_bh(&tp->lock);
1401
1402         if (__tg3_writephy(tp, mii_id, reg, val))
1403                 ret = -EIO;
1404
1405         spin_unlock_bh(&tp->lock);
1406
1407         return ret;
1408 }
1409
1410 static void tg3_mdio_config_5785(struct tg3 *tp)
1411 {
1412         u32 val;
1413         struct phy_device *phydev;
1414
1415         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1416         switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1417         case PHY_ID_BCM50610:
1418         case PHY_ID_BCM50610M:
1419                 val = MAC_PHYCFG2_50610_LED_MODES;
1420                 break;
1421         case PHY_ID_BCMAC131:
1422                 val = MAC_PHYCFG2_AC131_LED_MODES;
1423                 break;
1424         case PHY_ID_RTL8211C:
1425                 val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1426                 break;
1427         case PHY_ID_RTL8201E:
1428                 val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1429                 break;
1430         default:
1431                 return;
1432         }
1433
1434         if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1435                 tw32(MAC_PHYCFG2, val);
1436
1437                 val = tr32(MAC_PHYCFG1);
1438                 val &= ~(MAC_PHYCFG1_RGMII_INT |
1439                          MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1440                 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1441                 tw32(MAC_PHYCFG1, val);
1442
1443                 return;
1444         }
1445
1446         if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1447                 val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1448                        MAC_PHYCFG2_FMODE_MASK_MASK |
1449                        MAC_PHYCFG2_GMODE_MASK_MASK |
1450                        MAC_PHYCFG2_ACT_MASK_MASK   |
1451                        MAC_PHYCFG2_QUAL_MASK_MASK |
1452                        MAC_PHYCFG2_INBAND_ENABLE;
1453
1454         tw32(MAC_PHYCFG2, val);
1455
1456         val = tr32(MAC_PHYCFG1);
1457         val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1458                  MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1459         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1460                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1461                         val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1462                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1463                         val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1464         }
1465         val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1466                MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1467         tw32(MAC_PHYCFG1, val);
1468
1469         val = tr32(MAC_EXT_RGMII_MODE);
1470         val &= ~(MAC_RGMII_MODE_RX_INT_B |
1471                  MAC_RGMII_MODE_RX_QUALITY |
1472                  MAC_RGMII_MODE_RX_ACTIVITY |
1473                  MAC_RGMII_MODE_RX_ENG_DET |
1474                  MAC_RGMII_MODE_TX_ENABLE |
1475                  MAC_RGMII_MODE_TX_LOWPWR |
1476                  MAC_RGMII_MODE_TX_RESET);
1477         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1478                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1479                         val |= MAC_RGMII_MODE_RX_INT_B |
1480                                MAC_RGMII_MODE_RX_QUALITY |
1481                                MAC_RGMII_MODE_RX_ACTIVITY |
1482                                MAC_RGMII_MODE_RX_ENG_DET;
1483                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1484                         val |= MAC_RGMII_MODE_TX_ENABLE |
1485                                MAC_RGMII_MODE_TX_LOWPWR |
1486                                MAC_RGMII_MODE_TX_RESET;
1487         }
1488         tw32(MAC_EXT_RGMII_MODE, val);
1489 }
1490
1491 static void tg3_mdio_start(struct tg3 *tp)
1492 {
1493         tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1494         tw32_f(MAC_MI_MODE, tp->mi_mode);
1495         udelay(80);
1496
1497         if (tg3_flag(tp, MDIOBUS_INITED) &&
1498             tg3_asic_rev(tp) == ASIC_REV_5785)
1499                 tg3_mdio_config_5785(tp);
1500 }
1501
1502 static int tg3_mdio_init(struct tg3 *tp)
1503 {
1504         int i;
1505         u32 reg;
1506         struct phy_device *phydev;
1507
1508         if (tg3_flag(tp, 5717_PLUS)) {
1509                 u32 is_serdes;
1510
1511                 tp->phy_addr = tp->pci_fn + 1;
1512
1513                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0)
1514                         is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1515                 else
1516                         is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1517                                     TG3_CPMU_PHY_STRAP_IS_SERDES;
1518                 if (is_serdes)
1519                         tp->phy_addr += 7;
1520         } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) {
1521                 int addr;
1522
1523                 addr = ssb_gige_get_phyaddr(tp->pdev);
1524                 if (addr < 0)
1525                         return addr;
1526                 tp->phy_addr = addr;
1527         } else
1528                 tp->phy_addr = TG3_PHY_MII_ADDR;
1529
1530         tg3_mdio_start(tp);
1531
1532         if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1533                 return 0;
1534
1535         tp->mdio_bus = mdiobus_alloc();
1536         if (tp->mdio_bus == NULL)
1537                 return -ENOMEM;
1538
1539         tp->mdio_bus->name     = "tg3 mdio bus";
1540         snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1541                  (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1542         tp->mdio_bus->priv     = tp;
1543         tp->mdio_bus->parent   = &tp->pdev->dev;
1544         tp->mdio_bus->read     = &tg3_mdio_read;
1545         tp->mdio_bus->write    = &tg3_mdio_write;
1546         tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
1547
1548         /* The bus registration will look for all the PHYs on the mdio bus.
1549          * Unfortunately, it does not ensure the PHY is powered up before
1550          * accessing the PHY ID registers.  A chip reset is the
1551          * quickest way to bring the device back to an operational state..
1552          */
1553         if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1554                 tg3_bmcr_reset(tp);
1555
1556         i = mdiobus_register(tp->mdio_bus);
1557         if (i) {
1558                 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1559                 mdiobus_free(tp->mdio_bus);
1560                 return i;
1561         }
1562
1563         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1564
1565         if (!phydev || !phydev->drv) {
1566                 dev_warn(&tp->pdev->dev, "No PHY devices\n");
1567                 mdiobus_unregister(tp->mdio_bus);
1568                 mdiobus_free(tp->mdio_bus);
1569                 return -ENODEV;
1570         }
1571
1572         switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1573         case PHY_ID_BCM57780:
1574                 phydev->interface = PHY_INTERFACE_MODE_GMII;
1575                 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1576                 break;
1577         case PHY_ID_BCM50610:
1578         case PHY_ID_BCM50610M:
1579                 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1580                                      PHY_BRCM_RX_REFCLK_UNUSED |
1581                                      PHY_BRCM_DIS_TXCRXC_NOENRGY |
1582                                      PHY_BRCM_AUTO_PWRDWN_ENABLE;
1583                 fallthrough;
1584         case PHY_ID_RTL8211C:
1585                 phydev->interface = PHY_INTERFACE_MODE_RGMII;
1586                 break;
1587         case PHY_ID_RTL8201E:
1588         case PHY_ID_BCMAC131:
1589                 phydev->interface = PHY_INTERFACE_MODE_MII;
1590                 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1591                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
1592                 break;
1593         }
1594
1595         tg3_flag_set(tp, MDIOBUS_INITED);
1596
1597         if (tg3_asic_rev(tp) == ASIC_REV_5785)
1598                 tg3_mdio_config_5785(tp);
1599
1600         return 0;
1601 }
1602
1603 static void tg3_mdio_fini(struct tg3 *tp)
1604 {
1605         if (tg3_flag(tp, MDIOBUS_INITED)) {
1606                 tg3_flag_clear(tp, MDIOBUS_INITED);
1607                 mdiobus_unregister(tp->mdio_bus);
1608                 mdiobus_free(tp->mdio_bus);
1609         }
1610 }
1611
1612 /* tp->lock is held. */
1613 static inline void tg3_generate_fw_event(struct tg3 *tp)
1614 {
1615         u32 val;
1616
1617         val = tr32(GRC_RX_CPU_EVENT);
1618         val |= GRC_RX_CPU_DRIVER_EVENT;
1619         tw32_f(GRC_RX_CPU_EVENT, val);
1620
1621         tp->last_event_jiffies = jiffies;
1622 }
1623
1624 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1625
1626 /* tp->lock is held. */
1627 static void tg3_wait_for_event_ack(struct tg3 *tp)
1628 {
1629         int i;
1630         unsigned int delay_cnt;
1631         long time_remain;
1632
1633         /* If enough time has passed, no wait is necessary. */
1634         time_remain = (long)(tp->last_event_jiffies + 1 +
1635                       usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1636                       (long)jiffies;
1637         if (time_remain < 0)
1638                 return;
1639
1640         /* Check if we can shorten the wait time. */
1641         delay_cnt = jiffies_to_usecs(time_remain);
1642         if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1643                 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1644         delay_cnt = (delay_cnt >> 3) + 1;
1645
1646         for (i = 0; i < delay_cnt; i++) {
1647                 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1648                         break;
1649                 if (pci_channel_offline(tp->pdev))
1650                         break;
1651
1652                 udelay(8);
1653         }
1654 }
1655
1656 /* tp->lock is held. */
1657 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1658 {
1659         u32 reg, val;
1660
1661         val = 0;
1662         if (!tg3_readphy(tp, MII_BMCR, &reg))
1663                 val = reg << 16;
1664         if (!tg3_readphy(tp, MII_BMSR, &reg))
1665                 val |= (reg & 0xffff);
1666         *data++ = val;
1667
1668         val = 0;
1669         if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1670                 val = reg << 16;
1671         if (!tg3_readphy(tp, MII_LPA, &reg))
1672                 val |= (reg & 0xffff);
1673         *data++ = val;
1674
1675         val = 0;
1676         if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1677                 if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1678                         val = reg << 16;
1679                 if (!tg3_readphy(tp, MII_STAT1000, &reg))
1680                         val |= (reg & 0xffff);
1681         }
1682         *data++ = val;
1683
1684         if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1685                 val = reg << 16;
1686         else
1687                 val = 0;
1688         *data++ = val;
1689 }
1690
1691 /* tp->lock is held. */
1692 static void tg3_ump_link_report(struct tg3 *tp)
1693 {
1694         u32 data[4];
1695
1696         if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1697                 return;
1698
1699         tg3_phy_gather_ump_data(tp, data);
1700
1701         tg3_wait_for_event_ack(tp);
1702
1703         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1704         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1705         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1706         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1707         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1708         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1709
1710         tg3_generate_fw_event(tp);
1711 }
1712
1713 /* tp->lock is held. */
1714 static void tg3_stop_fw(struct tg3 *tp)
1715 {
1716         if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1717                 /* Wait for RX cpu to ACK the previous event. */
1718                 tg3_wait_for_event_ack(tp);
1719
1720                 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1721
1722                 tg3_generate_fw_event(tp);
1723
1724                 /* Wait for RX cpu to ACK this event. */
1725                 tg3_wait_for_event_ack(tp);
1726         }
1727 }
1728
1729 /* tp->lock is held. */
1730 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1731 {
1732         tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1733                       NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1734
1735         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1736                 switch (kind) {
1737                 case RESET_KIND_INIT:
1738                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1739                                       DRV_STATE_START);
1740                         break;
1741
1742                 case RESET_KIND_SHUTDOWN:
1743                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1744                                       DRV_STATE_UNLOAD);
1745                         break;
1746
1747                 case RESET_KIND_SUSPEND:
1748                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1749                                       DRV_STATE_SUSPEND);
1750                         break;
1751
1752                 default:
1753                         break;
1754                 }
1755         }
1756 }
1757
1758 /* tp->lock is held. */
1759 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1760 {
1761         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1762                 switch (kind) {
1763                 case RESET_KIND_INIT:
1764                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1765                                       DRV_STATE_START_DONE);
1766                         break;
1767
1768                 case RESET_KIND_SHUTDOWN:
1769                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1770                                       DRV_STATE_UNLOAD_DONE);
1771                         break;
1772
1773                 default:
1774                         break;
1775                 }
1776         }
1777 }
1778
1779 /* tp->lock is held. */
1780 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1781 {
1782         if (tg3_flag(tp, ENABLE_ASF)) {
1783                 switch (kind) {
1784                 case RESET_KIND_INIT:
1785                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1786                                       DRV_STATE_START);
1787                         break;
1788
1789                 case RESET_KIND_SHUTDOWN:
1790                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1791                                       DRV_STATE_UNLOAD);
1792                         break;
1793
1794                 case RESET_KIND_SUSPEND:
1795                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1796                                       DRV_STATE_SUSPEND);
1797                         break;
1798
1799                 default:
1800                         break;
1801                 }
1802         }
1803 }
1804
1805 static int tg3_poll_fw(struct tg3 *tp)
1806 {
1807         int i;
1808         u32 val;
1809
1810         if (tg3_flag(tp, NO_FWARE_REPORTED))
1811                 return 0;
1812
1813         if (tg3_flag(tp, IS_SSB_CORE)) {
1814                 /* We don't use firmware. */
1815                 return 0;
1816         }
1817
1818         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
1819                 /* Wait up to 20ms for init done. */
1820                 for (i = 0; i < 200; i++) {
1821                         if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1822                                 return 0;
1823                         if (pci_channel_offline(tp->pdev))
1824                                 return -ENODEV;
1825
1826                         udelay(100);
1827                 }
1828                 return -ENODEV;
1829         }
1830
1831         /* Wait for firmware initialization to complete. */
1832         for (i = 0; i < 100000; i++) {
1833                 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1834                 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1835                         break;
1836                 if (pci_channel_offline(tp->pdev)) {
1837                         if (!tg3_flag(tp, NO_FWARE_REPORTED)) {
1838                                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1839                                 netdev_info(tp->dev, "No firmware running\n");
1840                         }
1841
1842                         break;
1843                 }
1844
1845                 udelay(10);
1846         }
1847
1848         /* Chip might not be fitted with firmware.  Some Sun onboard
1849          * parts are configured like that.  So don't signal the timeout
1850          * of the above loop as an error, but do report the lack of
1851          * running firmware once.
1852          */
1853         if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1854                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1855
1856                 netdev_info(tp->dev, "No firmware running\n");
1857         }
1858
1859         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
1860                 /* The 57765 A0 needs a little more
1861                  * time to do some important work.
1862                  */
1863                 mdelay(10);
1864         }
1865
1866         return 0;
1867 }
1868
1869 static void tg3_link_report(struct tg3 *tp)
1870 {
1871         if (!netif_carrier_ok(tp->dev)) {
1872                 netif_info(tp, link, tp->dev, "Link is down\n");
1873                 tg3_ump_link_report(tp);
1874         } else if (netif_msg_link(tp)) {
1875                 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1876                             (tp->link_config.active_speed == SPEED_1000 ?
1877                              1000 :
1878                              (tp->link_config.active_speed == SPEED_100 ?
1879                               100 : 10)),
1880                             (tp->link_config.active_duplex == DUPLEX_FULL ?
1881                              "full" : "half"));
1882
1883                 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1884                             (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1885                             "on" : "off",
1886                             (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1887                             "on" : "off");
1888
1889                 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1890                         netdev_info(tp->dev, "EEE is %s\n",
1891                                     tp->setlpicnt ? "enabled" : "disabled");
1892
1893                 tg3_ump_link_report(tp);
1894         }
1895
1896         tp->link_up = netif_carrier_ok(tp->dev);
1897 }
1898
1899 static u32 tg3_decode_flowctrl_1000T(u32 adv)
1900 {
1901         u32 flowctrl = 0;
1902
1903         if (adv & ADVERTISE_PAUSE_CAP) {
1904                 flowctrl |= FLOW_CTRL_RX;
1905                 if (!(adv & ADVERTISE_PAUSE_ASYM))
1906                         flowctrl |= FLOW_CTRL_TX;
1907         } else if (adv & ADVERTISE_PAUSE_ASYM)
1908                 flowctrl |= FLOW_CTRL_TX;
1909
1910         return flowctrl;
1911 }
1912
1913 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1914 {
1915         u16 miireg;
1916
1917         if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1918                 miireg = ADVERTISE_1000XPAUSE;
1919         else if (flow_ctrl & FLOW_CTRL_TX)
1920                 miireg = ADVERTISE_1000XPSE_ASYM;
1921         else if (flow_ctrl & FLOW_CTRL_RX)
1922                 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1923         else
1924                 miireg = 0;
1925
1926         return miireg;
1927 }
1928
1929 static u32 tg3_decode_flowctrl_1000X(u32 adv)
1930 {
1931         u32 flowctrl = 0;
1932
1933         if (adv & ADVERTISE_1000XPAUSE) {
1934                 flowctrl |= FLOW_CTRL_RX;
1935                 if (!(adv & ADVERTISE_1000XPSE_ASYM))
1936                         flowctrl |= FLOW_CTRL_TX;
1937         } else if (adv & ADVERTISE_1000XPSE_ASYM)
1938                 flowctrl |= FLOW_CTRL_TX;
1939
1940         return flowctrl;
1941 }
1942
1943 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1944 {
1945         u8 cap = 0;
1946
1947         if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1948                 cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1949         } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1950                 if (lcladv & ADVERTISE_1000XPAUSE)
1951                         cap = FLOW_CTRL_RX;
1952                 if (rmtadv & ADVERTISE_1000XPAUSE)
1953                         cap = FLOW_CTRL_TX;
1954         }
1955
1956         return cap;
1957 }
1958
1959 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1960 {
1961         u8 autoneg;
1962         u8 flowctrl = 0;
1963         u32 old_rx_mode = tp->rx_mode;
1964         u32 old_tx_mode = tp->tx_mode;
1965
1966         if (tg3_flag(tp, USE_PHYLIB))
1967                 autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg;
1968         else
1969                 autoneg = tp->link_config.autoneg;
1970
1971         if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1972                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1973                         flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1974                 else
1975                         flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1976         } else
1977                 flowctrl = tp->link_config.flowctrl;
1978
1979         tp->link_config.active_flowctrl = flowctrl;
1980
1981         if (flowctrl & FLOW_CTRL_RX)
1982                 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1983         else
1984                 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1985
1986         if (old_rx_mode != tp->rx_mode)
1987                 tw32_f(MAC_RX_MODE, tp->rx_mode);
1988
1989         if (flowctrl & FLOW_CTRL_TX)
1990                 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1991         else
1992                 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1993
1994         if (old_tx_mode != tp->tx_mode)
1995                 tw32_f(MAC_TX_MODE, tp->tx_mode);
1996 }
1997
1998 static void tg3_adjust_link(struct net_device *dev)
1999 {
2000         u8 oldflowctrl, linkmesg = 0;
2001         u32 mac_mode, lcl_adv, rmt_adv;
2002         struct tg3 *tp = netdev_priv(dev);
2003         struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2004
2005         spin_lock_bh(&tp->lock);
2006
2007         mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
2008                                     MAC_MODE_HALF_DUPLEX);
2009
2010         oldflowctrl = tp->link_config.active_flowctrl;
2011
2012         if (phydev->link) {
2013                 lcl_adv = 0;
2014                 rmt_adv = 0;
2015
2016                 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
2017                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2018                 else if (phydev->speed == SPEED_1000 ||
2019                          tg3_asic_rev(tp) != ASIC_REV_5785)
2020                         mac_mode |= MAC_MODE_PORT_MODE_GMII;
2021                 else
2022                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2023
2024                 if (phydev->duplex == DUPLEX_HALF)
2025                         mac_mode |= MAC_MODE_HALF_DUPLEX;
2026                 else {
2027                         lcl_adv = mii_advertise_flowctrl(
2028                                   tp->link_config.flowctrl);
2029
2030                         if (phydev->pause)
2031                                 rmt_adv = LPA_PAUSE_CAP;
2032                         if (phydev->asym_pause)
2033                                 rmt_adv |= LPA_PAUSE_ASYM;
2034                 }
2035
2036                 tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2037         } else
2038                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
2039
2040         if (mac_mode != tp->mac_mode) {
2041                 tp->mac_mode = mac_mode;
2042                 tw32_f(MAC_MODE, tp->mac_mode);
2043                 udelay(40);
2044         }
2045
2046         if (tg3_asic_rev(tp) == ASIC_REV_5785) {
2047                 if (phydev->speed == SPEED_10)
2048                         tw32(MAC_MI_STAT,
2049                              MAC_MI_STAT_10MBPS_MODE |
2050                              MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2051                 else
2052                         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2053         }
2054
2055         if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
2056                 tw32(MAC_TX_LENGTHS,
2057                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2058                       (6 << TX_LENGTHS_IPG_SHIFT) |
2059                       (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
2060         else
2061                 tw32(MAC_TX_LENGTHS,
2062                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2063                       (6 << TX_LENGTHS_IPG_SHIFT) |
2064                       (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
2065
2066         if (phydev->link != tp->old_link ||
2067             phydev->speed != tp->link_config.active_speed ||
2068             phydev->duplex != tp->link_config.active_duplex ||
2069             oldflowctrl != tp->link_config.active_flowctrl)
2070                 linkmesg = 1;
2071
2072         tp->old_link = phydev->link;
2073         tp->link_config.active_speed = phydev->speed;
2074         tp->link_config.active_duplex = phydev->duplex;
2075
2076         spin_unlock_bh(&tp->lock);
2077
2078         if (linkmesg)
2079                 tg3_link_report(tp);
2080 }
2081
2082 static int tg3_phy_init(struct tg3 *tp)
2083 {
2084         struct phy_device *phydev;
2085
2086         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
2087                 return 0;
2088
2089         /* Bring the PHY back to a known state. */
2090         tg3_bmcr_reset(tp);
2091
2092         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2093
2094         /* Attach the MAC to the PHY. */
2095         phydev = phy_connect(tp->dev, phydev_name(phydev),
2096                              tg3_adjust_link, phydev->interface);
2097         if (IS_ERR(phydev)) {
2098                 dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
2099                 return PTR_ERR(phydev);
2100         }
2101
2102         /* Mask with MAC supported features. */
2103         switch (phydev->interface) {
2104         case PHY_INTERFACE_MODE_GMII:
2105         case PHY_INTERFACE_MODE_RGMII:
2106                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
2107                         phy_set_max_speed(phydev, SPEED_1000);
2108                         phy_support_asym_pause(phydev);
2109                         break;
2110                 }
2111                 fallthrough;
2112         case PHY_INTERFACE_MODE_MII:
2113                 phy_set_max_speed(phydev, SPEED_100);
2114                 phy_support_asym_pause(phydev);
2115                 break;
2116         default:
2117                 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2118                 return -EINVAL;
2119         }
2120
2121         tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
2122
2123         phy_attached_info(phydev);
2124
2125         return 0;
2126 }
2127
2128 static void tg3_phy_start(struct tg3 *tp)
2129 {
2130         struct phy_device *phydev;
2131
2132         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2133                 return;
2134
2135         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2136
2137         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2138                 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2139                 phydev->speed = tp->link_config.speed;
2140                 phydev->duplex = tp->link_config.duplex;
2141                 phydev->autoneg = tp->link_config.autoneg;
2142                 ethtool_convert_legacy_u32_to_link_mode(
2143                         phydev->advertising, tp->link_config.advertising);
2144         }
2145
2146         phy_start(phydev);
2147
2148         phy_start_aneg(phydev);
2149 }
2150
2151 static void tg3_phy_stop(struct tg3 *tp)
2152 {
2153         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2154                 return;
2155
2156         phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2157 }
2158
2159 static void tg3_phy_fini(struct tg3 *tp)
2160 {
2161         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2162                 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2163                 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2164         }
2165 }
2166
2167 static int tg3_phy_set_extloopbk(struct tg3 *tp)
2168 {
2169         int err;
2170         u32 val;
2171
2172         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2173                 return 0;
2174
2175         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2176                 /* Cannot do read-modify-write on 5401 */
2177                 err = tg3_phy_auxctl_write(tp,
2178                                            MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2179                                            MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2180                                            0x4c20);
2181                 goto done;
2182         }
2183
2184         err = tg3_phy_auxctl_read(tp,
2185                                   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2186         if (err)
2187                 return err;
2188
2189         val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2190         err = tg3_phy_auxctl_write(tp,
2191                                    MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2192
2193 done:
2194         return err;
2195 }
2196
2197 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2198 {
2199         u32 phytest;
2200
2201         if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2202                 u32 phy;
2203
2204                 tg3_writephy(tp, MII_TG3_FET_TEST,
2205                              phytest | MII_TG3_FET_SHADOW_EN);
2206                 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2207                         if (enable)
2208                                 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2209                         else
2210                                 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2211                         tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2212                 }
2213                 tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2214         }
2215 }
2216
2217 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2218 {
2219         u32 reg;
2220
2221         if (!tg3_flag(tp, 5705_PLUS) ||
2222             (tg3_flag(tp, 5717_PLUS) &&
2223              (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2224                 return;
2225
2226         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2227                 tg3_phy_fet_toggle_apd(tp, enable);
2228                 return;
2229         }
2230
2231         reg = MII_TG3_MISC_SHDW_SCR5_LPED |
2232               MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2233               MII_TG3_MISC_SHDW_SCR5_SDTL |
2234               MII_TG3_MISC_SHDW_SCR5_C125OE;
2235         if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable)
2236                 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2237
2238         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg);
2239
2240
2241         reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2242         if (enable)
2243                 reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2244
2245         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg);
2246 }
2247
2248 static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable)
2249 {
2250         u32 phy;
2251
2252         if (!tg3_flag(tp, 5705_PLUS) ||
2253             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2254                 return;
2255
2256         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2257                 u32 ephy;
2258
2259                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2260                         u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2261
2262                         tg3_writephy(tp, MII_TG3_FET_TEST,
2263                                      ephy | MII_TG3_FET_SHADOW_EN);
2264                         if (!tg3_readphy(tp, reg, &phy)) {
2265                                 if (enable)
2266                                         phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2267                                 else
2268                                         phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2269                                 tg3_writephy(tp, reg, phy);
2270                         }
2271                         tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2272                 }
2273         } else {
2274                 int ret;
2275
2276                 ret = tg3_phy_auxctl_read(tp,
2277                                           MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2278                 if (!ret) {
2279                         if (enable)
2280                                 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2281                         else
2282                                 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2283                         tg3_phy_auxctl_write(tp,
2284                                              MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2285                 }
2286         }
2287 }
2288
2289 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2290 {
2291         int ret;
2292         u32 val;
2293
2294         if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2295                 return;
2296
2297         ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2298         if (!ret)
2299                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2300                                      val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2301 }
2302
2303 static void tg3_phy_apply_otp(struct tg3 *tp)
2304 {
2305         u32 otp, phy;
2306
2307         if (!tp->phy_otp)
2308                 return;
2309
2310         otp = tp->phy_otp;
2311
2312         if (tg3_phy_toggle_auxctl_smdsp(tp, true))
2313                 return;
2314
2315         phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2316         phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2317         tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2318
2319         phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2320               ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2321         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2322
2323         phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2324         phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2325         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2326
2327         phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2328         tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2329
2330         phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2331         tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2332
2333         phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2334               ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2335         tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2336
2337         tg3_phy_toggle_auxctl_smdsp(tp, false);
2338 }
2339
2340 static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee)
2341 {
2342         u32 val;
2343         struct ethtool_eee *dest = &tp->eee;
2344
2345         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2346                 return;
2347
2348         if (eee)
2349                 dest = eee;
2350
2351         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val))
2352                 return;
2353
2354         /* Pull eee_active */
2355         if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2356             val == TG3_CL45_D7_EEERES_STAT_LP_100TX) {
2357                 dest->eee_active = 1;
2358         } else
2359                 dest->eee_active = 0;
2360
2361         /* Pull lp advertised settings */
2362         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val))
2363                 return;
2364         dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2365
2366         /* Pull advertised and eee_enabled settings */
2367         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val))
2368                 return;
2369         dest->eee_enabled = !!val;
2370         dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2371
2372         /* Pull tx_lpi_enabled */
2373         val = tr32(TG3_CPMU_EEE_MODE);
2374         dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX);
2375
2376         /* Pull lpi timer value */
2377         dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff;
2378 }
2379
2380 static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up)
2381 {
2382         u32 val;
2383
2384         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2385                 return;
2386
2387         tp->setlpicnt = 0;
2388
2389         if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2390             current_link_up &&
2391             tp->link_config.active_duplex == DUPLEX_FULL &&
2392             (tp->link_config.active_speed == SPEED_100 ||
2393              tp->link_config.active_speed == SPEED_1000)) {
2394                 u32 eeectl;
2395
2396                 if (tp->link_config.active_speed == SPEED_1000)
2397                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2398                 else
2399                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2400
2401                 tw32(TG3_CPMU_EEE_CTRL, eeectl);
2402
2403                 tg3_eee_pull_config(tp, NULL);
2404                 if (tp->eee.eee_active)
2405                         tp->setlpicnt = 2;
2406         }
2407
2408         if (!tp->setlpicnt) {
2409                 if (current_link_up &&
2410                    !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2411                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2412                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2413                 }
2414
2415                 val = tr32(TG3_CPMU_EEE_MODE);
2416                 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2417         }
2418 }
2419
2420 static void tg3_phy_eee_enable(struct tg3 *tp)
2421 {
2422         u32 val;
2423
2424         if (tp->link_config.active_speed == SPEED_1000 &&
2425             (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2426              tg3_asic_rev(tp) == ASIC_REV_5719 ||
2427              tg3_flag(tp, 57765_CLASS)) &&
2428             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2429                 val = MII_TG3_DSP_TAP26_ALNOKO |
2430                       MII_TG3_DSP_TAP26_RMRXSTO;
2431                 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2432                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2433         }
2434
2435         val = tr32(TG3_CPMU_EEE_MODE);
2436         tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2437 }
2438
2439 static int tg3_wait_macro_done(struct tg3 *tp)
2440 {
2441         int limit = 100;
2442
2443         while (limit--) {
2444                 u32 tmp32;
2445
2446                 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2447                         if ((tmp32 & 0x1000) == 0)
2448                                 break;
2449                 }
2450         }
2451         if (limit < 0)
2452                 return -EBUSY;
2453
2454         return 0;
2455 }
2456
2457 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2458 {
2459         static const u32 test_pat[4][6] = {
2460         { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2461         { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2462         { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2463         { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2464         };
2465         int chan;
2466
2467         for (chan = 0; chan < 4; chan++) {
2468                 int i;
2469
2470                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2471                              (chan * 0x2000) | 0x0200);
2472                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2473
2474                 for (i = 0; i < 6; i++)
2475                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2476                                      test_pat[chan][i]);
2477
2478                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2479                 if (tg3_wait_macro_done(tp)) {
2480                         *resetp = 1;
2481                         return -EBUSY;
2482                 }
2483
2484                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2485                              (chan * 0x2000) | 0x0200);
2486                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2487                 if (tg3_wait_macro_done(tp)) {
2488                         *resetp = 1;
2489                         return -EBUSY;
2490                 }
2491
2492                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2493                 if (tg3_wait_macro_done(tp)) {
2494                         *resetp = 1;
2495                         return -EBUSY;
2496                 }
2497
2498                 for (i = 0; i < 6; i += 2) {
2499                         u32 low, high;
2500
2501                         if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2502                             tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2503                             tg3_wait_macro_done(tp)) {
2504                                 *resetp = 1;
2505                                 return -EBUSY;
2506                         }
2507                         low &= 0x7fff;
2508                         high &= 0x000f;
2509                         if (low != test_pat[chan][i] ||
2510                             high != test_pat[chan][i+1]) {
2511                                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2512                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2513                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2514
2515                                 return -EBUSY;
2516                         }
2517                 }
2518         }
2519
2520         return 0;
2521 }
2522
2523 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2524 {
2525         int chan;
2526
2527         for (chan = 0; chan < 4; chan++) {
2528                 int i;
2529
2530                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2531                              (chan * 0x2000) | 0x0200);
2532                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2533                 for (i = 0; i < 6; i++)
2534                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2535                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2536                 if (tg3_wait_macro_done(tp))
2537                         return -EBUSY;
2538         }
2539
2540         return 0;
2541 }
2542
2543 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2544 {
2545         u32 reg32, phy9_orig;
2546         int retries, do_phy_reset, err;
2547
2548         retries = 10;
2549         do_phy_reset = 1;
2550         do {
2551                 if (do_phy_reset) {
2552                         err = tg3_bmcr_reset(tp);
2553                         if (err)
2554                                 return err;
2555                         do_phy_reset = 0;
2556                 }
2557
2558                 /* Disable transmitter and interrupt.  */
2559                 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2560                         continue;
2561
2562                 reg32 |= 0x3000;
2563                 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2564
2565                 /* Set full-duplex, 1000 mbps.  */
2566                 tg3_writephy(tp, MII_BMCR,
2567                              BMCR_FULLDPLX | BMCR_SPEED1000);
2568
2569                 /* Set to master mode.  */
2570                 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2571                         continue;
2572
2573                 tg3_writephy(tp, MII_CTRL1000,
2574                              CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2575
2576                 err = tg3_phy_toggle_auxctl_smdsp(tp, true);
2577                 if (err)
2578                         return err;
2579
2580                 /* Block the PHY control access.  */
2581                 tg3_phydsp_write(tp, 0x8005, 0x0800);
2582
2583                 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2584                 if (!err)
2585                         break;
2586         } while (--retries);
2587
2588         err = tg3_phy_reset_chanpat(tp);
2589         if (err)
2590                 return err;
2591
2592         tg3_phydsp_write(tp, 0x8005, 0x0000);
2593
2594         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2595         tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2596
2597         tg3_phy_toggle_auxctl_smdsp(tp, false);
2598
2599         tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2600
2601         err = tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
2602         if (err)
2603                 return err;
2604
2605         reg32 &= ~0x3000;
2606         tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2607
2608         return 0;
2609 }
2610
2611 static void tg3_carrier_off(struct tg3 *tp)
2612 {
2613         netif_carrier_off(tp->dev);
2614         tp->link_up = false;
2615 }
2616
2617 static void tg3_warn_mgmt_link_flap(struct tg3 *tp)
2618 {
2619         if (tg3_flag(tp, ENABLE_ASF))
2620                 netdev_warn(tp->dev,
2621                             "Management side-band traffic will be interrupted during phy settings change\n");
2622 }
2623
2624 /* This will reset the tigon3 PHY if there is no valid
2625  * link unless the FORCE argument is non-zero.
2626  */
2627 static int tg3_phy_reset(struct tg3 *tp)
2628 {
2629         u32 val, cpmuctrl;
2630         int err;
2631
2632         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2633                 val = tr32(GRC_MISC_CFG);
2634                 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2635                 udelay(40);
2636         }
2637         err  = tg3_readphy(tp, MII_BMSR, &val);
2638         err |= tg3_readphy(tp, MII_BMSR, &val);
2639         if (err != 0)
2640                 return -EBUSY;
2641
2642         if (netif_running(tp->dev) && tp->link_up) {
2643                 netif_carrier_off(tp->dev);
2644                 tg3_link_report(tp);
2645         }
2646
2647         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
2648             tg3_asic_rev(tp) == ASIC_REV_5704 ||
2649             tg3_asic_rev(tp) == ASIC_REV_5705) {
2650                 err = tg3_phy_reset_5703_4_5(tp);
2651                 if (err)
2652                         return err;
2653                 goto out;
2654         }
2655
2656         cpmuctrl = 0;
2657         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
2658             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
2659                 cpmuctrl = tr32(TG3_CPMU_CTRL);
2660                 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2661                         tw32(TG3_CPMU_CTRL,
2662                              cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2663         }
2664
2665         err = tg3_bmcr_reset(tp);
2666         if (err)
2667                 return err;
2668
2669         if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2670                 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2671                 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2672
2673                 tw32(TG3_CPMU_CTRL, cpmuctrl);
2674         }
2675
2676         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
2677             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
2678                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2679                 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2680                     CPMU_LSPD_1000MB_MACCLK_12_5) {
2681                         val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2682                         udelay(40);
2683                         tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2684                 }
2685         }
2686
2687         if (tg3_flag(tp, 5717_PLUS) &&
2688             (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2689                 return 0;
2690
2691         tg3_phy_apply_otp(tp);
2692
2693         if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2694                 tg3_phy_toggle_apd(tp, true);
2695         else
2696                 tg3_phy_toggle_apd(tp, false);
2697
2698 out:
2699         if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2700             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2701                 tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2702                 tg3_phydsp_write(tp, 0x000a, 0x0323);
2703                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2704         }
2705
2706         if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2707                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2708                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2709         }
2710
2711         if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2712                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2713                         tg3_phydsp_write(tp, 0x000a, 0x310b);
2714                         tg3_phydsp_write(tp, 0x201f, 0x9506);
2715                         tg3_phydsp_write(tp, 0x401f, 0x14e2);
2716                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2717                 }
2718         } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2719                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2720                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2721                         if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2722                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2723                                 tg3_writephy(tp, MII_TG3_TEST1,
2724                                              MII_TG3_TEST1_TRIM_EN | 0x4);
2725                         } else
2726                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2727
2728                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2729                 }
2730         }
2731
2732         /* Set Extended packet length bit (bit 14) on all chips that */
2733         /* support jumbo frames */
2734         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2735                 /* Cannot do read-modify-write on 5401 */
2736                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2737         } else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2738                 /* Set bit 14 with read-modify-write to preserve other bits */
2739                 err = tg3_phy_auxctl_read(tp,
2740                                           MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2741                 if (!err)
2742                         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2743                                            val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2744         }
2745
2746         /* Set phy register 0x10 bit 0 to high fifo elasticity to support
2747          * jumbo frames transmission.
2748          */
2749         if (tg3_flag(tp, JUMBO_CAPABLE)) {
2750                 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2751                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
2752                                      val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2753         }
2754
2755         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2756                 /* adjust output voltage */
2757                 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2758         }
2759
2760         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0)
2761                 tg3_phydsp_write(tp, 0xffb, 0x4000);
2762
2763         tg3_phy_toggle_automdix(tp, true);
2764         tg3_phy_set_wirespeed(tp);
2765         return 0;
2766 }
2767
2768 #define TG3_GPIO_MSG_DRVR_PRES           0x00000001
2769 #define TG3_GPIO_MSG_NEED_VAUX           0x00000002
2770 #define TG3_GPIO_MSG_MASK                (TG3_GPIO_MSG_DRVR_PRES | \
2771                                           TG3_GPIO_MSG_NEED_VAUX)
2772 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2773         ((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2774          (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2775          (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2776          (TG3_GPIO_MSG_DRVR_PRES << 12))
2777
2778 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2779         ((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2780          (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2781          (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2782          (TG3_GPIO_MSG_NEED_VAUX << 12))
2783
2784 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2785 {
2786         u32 status, shift;
2787
2788         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2789             tg3_asic_rev(tp) == ASIC_REV_5719)
2790                 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2791         else
2792                 status = tr32(TG3_CPMU_DRV_STATUS);
2793
2794         shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2795         status &= ~(TG3_GPIO_MSG_MASK << shift);
2796         status |= (newstat << shift);
2797
2798         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2799             tg3_asic_rev(tp) == ASIC_REV_5719)
2800                 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2801         else
2802                 tw32(TG3_CPMU_DRV_STATUS, status);
2803
2804         return status >> TG3_APE_GPIO_MSG_SHIFT;
2805 }
2806
2807 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2808 {
2809         if (!tg3_flag(tp, IS_NIC))
2810                 return 0;
2811
2812         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2813             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2814             tg3_asic_rev(tp) == ASIC_REV_5720) {
2815                 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2816                         return -EIO;
2817
2818                 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2819
2820                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2821                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2822
2823                 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2824         } else {
2825                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2826                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2827         }
2828
2829         return 0;
2830 }
2831
2832 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2833 {
2834         u32 grc_local_ctrl;
2835
2836         if (!tg3_flag(tp, IS_NIC) ||
2837             tg3_asic_rev(tp) == ASIC_REV_5700 ||
2838             tg3_asic_rev(tp) == ASIC_REV_5701)
2839                 return;
2840
2841         grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2842
2843         tw32_wait_f(GRC_LOCAL_CTRL,
2844                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2845                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2846
2847         tw32_wait_f(GRC_LOCAL_CTRL,
2848                     grc_local_ctrl,
2849                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2850
2851         tw32_wait_f(GRC_LOCAL_CTRL,
2852                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2853                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2854 }
2855
2856 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2857 {
2858         if (!tg3_flag(tp, IS_NIC))
2859                 return;
2860
2861         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
2862             tg3_asic_rev(tp) == ASIC_REV_5701) {
2863                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2864                             (GRC_LCLCTRL_GPIO_OE0 |
2865                              GRC_LCLCTRL_GPIO_OE1 |
2866                              GRC_LCLCTRL_GPIO_OE2 |
2867                              GRC_LCLCTRL_GPIO_OUTPUT0 |
2868                              GRC_LCLCTRL_GPIO_OUTPUT1),
2869                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2870         } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2871                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2872                 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2873                 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2874                                      GRC_LCLCTRL_GPIO_OE1 |
2875                                      GRC_LCLCTRL_GPIO_OE2 |
2876                                      GRC_LCLCTRL_GPIO_OUTPUT0 |
2877                                      GRC_LCLCTRL_GPIO_OUTPUT1 |
2878                                      tp->grc_local_ctrl;
2879                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2880                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2881
2882                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2883                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2884                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2885
2886                 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2887                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2888                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2889         } else {
2890                 u32 no_gpio2;
2891                 u32 grc_local_ctrl = 0;
2892
2893                 /* Workaround to prevent overdrawing Amps. */
2894                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
2895                         grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2896                         tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2897                                     grc_local_ctrl,
2898                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2899                 }
2900
2901                 /* On 5753 and variants, GPIO2 cannot be used. */
2902                 no_gpio2 = tp->nic_sram_data_cfg &
2903                            NIC_SRAM_DATA_CFG_NO_GPIO2;
2904
2905                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2906                                   GRC_LCLCTRL_GPIO_OE1 |
2907                                   GRC_LCLCTRL_GPIO_OE2 |
2908                                   GRC_LCLCTRL_GPIO_OUTPUT1 |
2909                                   GRC_LCLCTRL_GPIO_OUTPUT2;
2910                 if (no_gpio2) {
2911                         grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2912                                             GRC_LCLCTRL_GPIO_OUTPUT2);
2913                 }
2914                 tw32_wait_f(GRC_LOCAL_CTRL,
2915                             tp->grc_local_ctrl | grc_local_ctrl,
2916                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2917
2918                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2919
2920                 tw32_wait_f(GRC_LOCAL_CTRL,
2921                             tp->grc_local_ctrl | grc_local_ctrl,
2922                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2923
2924                 if (!no_gpio2) {
2925                         grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2926                         tw32_wait_f(GRC_LOCAL_CTRL,
2927                                     tp->grc_local_ctrl | grc_local_ctrl,
2928                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2929                 }
2930         }
2931 }
2932
2933 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2934 {
2935         u32 msg = 0;
2936
2937         /* Serialize power state transitions */
2938         if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2939                 return;
2940
2941         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2942                 msg = TG3_GPIO_MSG_NEED_VAUX;
2943
2944         msg = tg3_set_function_status(tp, msg);
2945
2946         if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2947                 goto done;
2948
2949         if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2950                 tg3_pwrsrc_switch_to_vaux(tp);
2951         else
2952                 tg3_pwrsrc_die_with_vmain(tp);
2953
2954 done:
2955         tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2956 }
2957
2958 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2959 {
2960         bool need_vaux = false;
2961
2962         /* The GPIOs do something completely different on 57765. */
2963         if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2964                 return;
2965
2966         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2967             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2968             tg3_asic_rev(tp) == ASIC_REV_5720) {
2969                 tg3_frob_aux_power_5717(tp, include_wol ?
2970                                         tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2971                 return;
2972         }
2973
2974         if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2975                 struct net_device *dev_peer;
2976
2977                 dev_peer = pci_get_drvdata(tp->pdev_peer);
2978
2979                 /* remove_one() may have been run on the peer. */
2980                 if (dev_peer) {
2981                         struct tg3 *tp_peer = netdev_priv(dev_peer);
2982
2983                         if (tg3_flag(tp_peer, INIT_COMPLETE))
2984                                 return;
2985
2986                         if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2987                             tg3_flag(tp_peer, ENABLE_ASF))
2988                                 need_vaux = true;
2989                 }
2990         }
2991
2992         if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2993             tg3_flag(tp, ENABLE_ASF))
2994                 need_vaux = true;
2995
2996         if (need_vaux)
2997                 tg3_pwrsrc_switch_to_vaux(tp);
2998         else
2999                 tg3_pwrsrc_die_with_vmain(tp);
3000 }
3001
3002 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
3003 {
3004         if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
3005                 return 1;
3006         else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
3007                 if (speed != SPEED_10)
3008                         return 1;
3009         } else if (speed == SPEED_10)
3010                 return 1;
3011
3012         return 0;
3013 }
3014
3015 static bool tg3_phy_power_bug(struct tg3 *tp)
3016 {
3017         switch (tg3_asic_rev(tp)) {
3018         case ASIC_REV_5700:
3019         case ASIC_REV_5704:
3020                 return true;
3021         case ASIC_REV_5780:
3022                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3023                         return true;
3024                 return false;
3025         case ASIC_REV_5717:
3026                 if (!tp->pci_fn)
3027                         return true;
3028                 return false;
3029         case ASIC_REV_5719:
3030         case ASIC_REV_5720:
3031                 if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
3032                     !tp->pci_fn)
3033                         return true;
3034                 return false;
3035         }
3036
3037         return false;
3038 }
3039
3040 static bool tg3_phy_led_bug(struct tg3 *tp)
3041 {
3042         switch (tg3_asic_rev(tp)) {
3043         case ASIC_REV_5719:
3044         case ASIC_REV_5720:
3045                 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
3046                     !tp->pci_fn)
3047                         return true;
3048                 return false;
3049         }
3050
3051         return false;
3052 }
3053
3054 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
3055 {
3056         u32 val;
3057
3058         if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)
3059                 return;
3060
3061         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
3062                 if (tg3_asic_rev(tp) == ASIC_REV_5704) {
3063                         u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
3064                         u32 serdes_cfg = tr32(MAC_SERDES_CFG);
3065
3066                         sg_dig_ctrl |=
3067                                 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
3068                         tw32(SG_DIG_CTRL, sg_dig_ctrl);
3069                         tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
3070                 }
3071                 return;
3072         }
3073
3074         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3075                 tg3_bmcr_reset(tp);
3076                 val = tr32(GRC_MISC_CFG);
3077                 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
3078                 udelay(40);
3079                 return;
3080         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3081                 u32 phytest;
3082                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
3083                         u32 phy;
3084
3085                         tg3_writephy(tp, MII_ADVERTISE, 0);
3086                         tg3_writephy(tp, MII_BMCR,
3087                                      BMCR_ANENABLE | BMCR_ANRESTART);
3088
3089                         tg3_writephy(tp, MII_TG3_FET_TEST,
3090                                      phytest | MII_TG3_FET_SHADOW_EN);
3091                         if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
3092                                 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
3093                                 tg3_writephy(tp,
3094                                              MII_TG3_FET_SHDW_AUXMODE4,
3095                                              phy);
3096                         }
3097                         tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
3098                 }
3099                 return;
3100         } else if (do_low_power) {
3101                 if (!tg3_phy_led_bug(tp))
3102                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
3103                                      MII_TG3_EXT_CTRL_FORCE_LED_OFF);
3104
3105                 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3106                       MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
3107                       MII_TG3_AUXCTL_PCTL_VREG_11V;
3108                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
3109         }
3110
3111         /* The PHY should not be powered down on some chips because
3112          * of bugs.
3113          */
3114         if (tg3_phy_power_bug(tp))
3115                 return;
3116
3117         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
3118             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
3119                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
3120                 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
3121                 val |= CPMU_LSPD_1000MB_MACCLK_12_5;
3122                 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
3123         }
3124
3125         tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
3126 }
3127
3128 /* tp->lock is held. */
3129 static int tg3_nvram_lock(struct tg3 *tp)
3130 {
3131         if (tg3_flag(tp, NVRAM)) {
3132                 int i;
3133
3134                 if (tp->nvram_lock_cnt == 0) {
3135                         tw32(NVRAM_SWARB, SWARB_REQ_SET1);
3136                         for (i = 0; i < 8000; i++) {
3137                                 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
3138                                         break;
3139                                 udelay(20);
3140                         }
3141                         if (i == 8000) {
3142                                 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
3143                                 return -ENODEV;
3144                         }
3145                 }
3146                 tp->nvram_lock_cnt++;
3147         }
3148         return 0;
3149 }
3150
3151 /* tp->lock is held. */
3152 static void tg3_nvram_unlock(struct tg3 *tp)
3153 {
3154         if (tg3_flag(tp, NVRAM)) {
3155                 if (tp->nvram_lock_cnt > 0)
3156                         tp->nvram_lock_cnt--;
3157                 if (tp->nvram_lock_cnt == 0)
3158                         tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
3159         }
3160 }
3161
3162 /* tp->lock is held. */
3163 static void tg3_enable_nvram_access(struct tg3 *tp)
3164 {
3165         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3166                 u32 nvaccess = tr32(NVRAM_ACCESS);
3167
3168                 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
3169         }
3170 }
3171
3172 /* tp->lock is held. */
3173 static void tg3_disable_nvram_access(struct tg3 *tp)
3174 {
3175         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3176                 u32 nvaccess = tr32(NVRAM_ACCESS);
3177
3178                 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
3179         }
3180 }
3181
3182 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
3183                                         u32 offset, u32 *val)
3184 {
3185         u32 tmp;
3186         int i;
3187
3188         if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
3189                 return -EINVAL;
3190
3191         tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
3192                                         EEPROM_ADDR_DEVID_MASK |
3193                                         EEPROM_ADDR_READ);
3194         tw32(GRC_EEPROM_ADDR,
3195              tmp |
3196              (0 << EEPROM_ADDR_DEVID_SHIFT) |
3197              ((offset << EEPROM_ADDR_ADDR_SHIFT) &
3198               EEPROM_ADDR_ADDR_MASK) |
3199              EEPROM_ADDR_READ | EEPROM_ADDR_START);
3200
3201         for (i = 0; i < 1000; i++) {
3202                 tmp = tr32(GRC_EEPROM_ADDR);
3203
3204                 if (tmp & EEPROM_ADDR_COMPLETE)
3205                         break;
3206                 msleep(1);
3207         }
3208         if (!(tmp & EEPROM_ADDR_COMPLETE))
3209                 return -EBUSY;
3210
3211         tmp = tr32(GRC_EEPROM_DATA);
3212
3213         /*
3214          * The data will always be opposite the native endian
3215          * format.  Perform a blind byteswap to compensate.
3216          */
3217         *val = swab32(tmp);
3218
3219         return 0;
3220 }
3221
3222 #define NVRAM_CMD_TIMEOUT 10000
3223
3224 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3225 {
3226         int i;
3227
3228         tw32(NVRAM_CMD, nvram_cmd);
3229         for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3230                 usleep_range(10, 40);
3231                 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3232                         udelay(10);
3233                         break;
3234                 }
3235         }
3236
3237         if (i == NVRAM_CMD_TIMEOUT)
3238                 return -EBUSY;
3239
3240         return 0;
3241 }
3242
3243 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3244 {
3245         if (tg3_flag(tp, NVRAM) &&
3246             tg3_flag(tp, NVRAM_BUFFERED) &&
3247             tg3_flag(tp, FLASH) &&
3248             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3249             (tp->nvram_jedecnum == JEDEC_ATMEL))
3250
3251                 addr = ((addr / tp->nvram_pagesize) <<
3252                         ATMEL_AT45DB0X1B_PAGE_POS) +
3253                        (addr % tp->nvram_pagesize);
3254
3255         return addr;
3256 }
3257
3258 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3259 {
3260         if (tg3_flag(tp, NVRAM) &&
3261             tg3_flag(tp, NVRAM_BUFFERED) &&
3262             tg3_flag(tp, FLASH) &&
3263             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3264             (tp->nvram_jedecnum == JEDEC_ATMEL))
3265
3266                 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3267                         tp->nvram_pagesize) +
3268                        (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3269
3270         return addr;
3271 }
3272
3273 /* NOTE: Data read in from NVRAM is byteswapped according to
3274  * the byteswapping settings for all other register accesses.
3275  * tg3 devices are BE devices, so on a BE machine, the data
3276  * returned will be exactly as it is seen in NVRAM.  On a LE
3277  * machine, the 32-bit value will be byteswapped.
3278  */
3279 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3280 {
3281         int ret;
3282
3283         if (!tg3_flag(tp, NVRAM))
3284                 return tg3_nvram_read_using_eeprom(tp, offset, val);
3285
3286         offset = tg3_nvram_phys_addr(tp, offset);
3287
3288         if (offset > NVRAM_ADDR_MSK)
3289                 return -EINVAL;
3290
3291         ret = tg3_nvram_lock(tp);
3292         if (ret)
3293                 return ret;
3294
3295         tg3_enable_nvram_access(tp);
3296
3297         tw32(NVRAM_ADDR, offset);
3298         ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3299                 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3300
3301         if (ret == 0)
3302                 *val = tr32(NVRAM_RDDATA);
3303
3304         tg3_disable_nvram_access(tp);
3305
3306         tg3_nvram_unlock(tp);
3307
3308         return ret;
3309 }
3310
3311 /* Ensures NVRAM data is in bytestream format. */
3312 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3313 {
3314         u32 v;
3315         int res = tg3_nvram_read(tp, offset, &v);
3316         if (!res)
3317                 *val = cpu_to_be32(v);
3318         return res;
3319 }
3320
3321 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3322                                     u32 offset, u32 len, u8 *buf)
3323 {
3324         int i, j, rc = 0;
3325         u32 val;
3326
3327         for (i = 0; i < len; i += 4) {
3328                 u32 addr;
3329                 __be32 data;
3330
3331                 addr = offset + i;
3332
3333                 memcpy(&data, buf + i, 4);
3334
3335                 /*
3336                  * The SEEPROM interface expects the data to always be opposite
3337                  * the native endian format.  We accomplish this by reversing
3338                  * all the operations that would have been performed on the
3339                  * data from a call to tg3_nvram_read_be32().
3340                  */
3341                 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3342
3343                 val = tr32(GRC_EEPROM_ADDR);
3344                 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3345
3346                 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3347                         EEPROM_ADDR_READ);
3348                 tw32(GRC_EEPROM_ADDR, val |
3349                         (0 << EEPROM_ADDR_DEVID_SHIFT) |
3350                         (addr & EEPROM_ADDR_ADDR_MASK) |
3351                         EEPROM_ADDR_START |
3352                         EEPROM_ADDR_WRITE);
3353
3354                 for (j = 0; j < 1000; j++) {
3355                         val = tr32(GRC_EEPROM_ADDR);
3356
3357                         if (val & EEPROM_ADDR_COMPLETE)
3358                                 break;
3359                         msleep(1);
3360                 }
3361                 if (!(val & EEPROM_ADDR_COMPLETE)) {
3362                         rc = -EBUSY;
3363                         break;
3364                 }
3365         }
3366
3367         return rc;
3368 }
3369
3370 /* offset and length are dword aligned */
3371 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3372                 u8 *buf)
3373 {
3374         int ret = 0;
3375         u32 pagesize = tp->nvram_pagesize;
3376         u32 pagemask = pagesize - 1;
3377         u32 nvram_cmd;
3378         u8 *tmp;
3379
3380         tmp = kmalloc(pagesize, GFP_KERNEL);
3381         if (tmp == NULL)
3382                 return -ENOMEM;
3383
3384         while (len) {
3385                 int j;
3386                 u32 phy_addr, page_off, size;
3387
3388                 phy_addr = offset & ~pagemask;
3389
3390                 for (j = 0; j < pagesize; j += 4) {
3391                         ret = tg3_nvram_read_be32(tp, phy_addr + j,
3392                                                   (__be32 *) (tmp + j));
3393                         if (ret)
3394                                 break;
3395                 }
3396                 if (ret)
3397                         break;
3398
3399                 page_off = offset & pagemask;
3400                 size = pagesize;
3401                 if (len < size)
3402                         size = len;
3403
3404                 len -= size;
3405
3406                 memcpy(tmp + page_off, buf, size);
3407
3408                 offset = offset + (pagesize - page_off);
3409
3410                 tg3_enable_nvram_access(tp);
3411
3412                 /*
3413                  * Before we can erase the flash page, we need
3414                  * to issue a special "write enable" command.
3415                  */
3416                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3417
3418                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3419                         break;
3420
3421                 /* Erase the target page */
3422                 tw32(NVRAM_ADDR, phy_addr);
3423
3424                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3425                         NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3426
3427                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3428                         break;
3429
3430                 /* Issue another write enable to start the write. */
3431                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3432
3433                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3434                         break;
3435
3436                 for (j = 0; j < pagesize; j += 4) {
3437                         __be32 data;
3438
3439                         data = *((__be32 *) (tmp + j));
3440
3441                         tw32(NVRAM_WRDATA, be32_to_cpu(data));
3442
3443                         tw32(NVRAM_ADDR, phy_addr + j);
3444
3445                         nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3446                                 NVRAM_CMD_WR;
3447
3448                         if (j == 0)
3449                                 nvram_cmd |= NVRAM_CMD_FIRST;
3450                         else if (j == (pagesize - 4))
3451                                 nvram_cmd |= NVRAM_CMD_LAST;
3452
3453                         ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3454                         if (ret)
3455                                 break;
3456                 }
3457                 if (ret)
3458                         break;
3459         }
3460
3461         nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3462         tg3_nvram_exec_cmd(tp, nvram_cmd);
3463
3464         kfree(tmp);
3465
3466         return ret;
3467 }
3468
3469 /* offset and length are dword aligned */
3470 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3471                 u8 *buf)
3472 {
3473         int i, ret = 0;
3474
3475         for (i = 0; i < len; i += 4, offset += 4) {
3476                 u32 page_off, phy_addr, nvram_cmd;
3477                 __be32 data;
3478
3479                 memcpy(&data, buf + i, 4);
3480                 tw32(NVRAM_WRDATA, be32_to_cpu(data));
3481
3482                 page_off = offset % tp->nvram_pagesize;
3483
3484                 phy_addr = tg3_nvram_phys_addr(tp, offset);
3485
3486                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3487
3488                 if (page_off == 0 || i == 0)
3489                         nvram_cmd |= NVRAM_CMD_FIRST;
3490                 if (page_off == (tp->nvram_pagesize - 4))
3491                         nvram_cmd |= NVRAM_CMD_LAST;
3492
3493                 if (i == (len - 4))
3494                         nvram_cmd |= NVRAM_CMD_LAST;
3495
3496                 if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3497                     !tg3_flag(tp, FLASH) ||
3498                     !tg3_flag(tp, 57765_PLUS))
3499                         tw32(NVRAM_ADDR, phy_addr);
3500
3501                 if (tg3_asic_rev(tp) != ASIC_REV_5752 &&
3502                     !tg3_flag(tp, 5755_PLUS) &&
3503                     (tp->nvram_jedecnum == JEDEC_ST) &&
3504                     (nvram_cmd & NVRAM_CMD_FIRST)) {
3505                         u32 cmd;
3506
3507                         cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3508                         ret = tg3_nvram_exec_cmd(tp, cmd);
3509                         if (ret)
3510                                 break;
3511                 }
3512                 if (!tg3_flag(tp, FLASH)) {
3513                         /* We always do complete word writes to eeprom. */
3514                         nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3515                 }
3516
3517                 ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3518                 if (ret)
3519                         break;
3520         }
3521         return ret;
3522 }
3523
3524 /* offset and length are dword aligned */
3525 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3526 {
3527         int ret;
3528
3529         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3530                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3531                        ~GRC_LCLCTRL_GPIO_OUTPUT1);
3532                 udelay(40);
3533         }
3534
3535         if (!tg3_flag(tp, NVRAM)) {
3536                 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3537         } else {
3538                 u32 grc_mode;
3539
3540                 ret = tg3_nvram_lock(tp);
3541                 if (ret)
3542                         return ret;
3543
3544                 tg3_enable_nvram_access(tp);
3545                 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3546                         tw32(NVRAM_WRITE1, 0x406);
3547
3548                 grc_mode = tr32(GRC_MODE);
3549                 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3550
3551                 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3552                         ret = tg3_nvram_write_block_buffered(tp, offset, len,
3553                                 buf);
3554                 } else {
3555                         ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3556                                 buf);
3557                 }
3558
3559                 grc_mode = tr32(GRC_MODE);
3560                 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3561
3562                 tg3_disable_nvram_access(tp);
3563                 tg3_nvram_unlock(tp);
3564         }
3565
3566         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3567                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3568                 udelay(40);
3569         }
3570
3571         return ret;
3572 }
3573
3574 #define RX_CPU_SCRATCH_BASE     0x30000
3575 #define RX_CPU_SCRATCH_SIZE     0x04000
3576 #define TX_CPU_SCRATCH_BASE     0x34000
3577 #define TX_CPU_SCRATCH_SIZE     0x04000
3578
3579 /* tp->lock is held. */
3580 static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base)
3581 {
3582         int i;
3583         const int iters = 10000;
3584
3585         for (i = 0; i < iters; i++) {
3586                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3587                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3588                 if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT)
3589                         break;
3590                 if (pci_channel_offline(tp->pdev))
3591                         return -EBUSY;
3592         }
3593
3594         return (i == iters) ? -EBUSY : 0;
3595 }
3596
3597 /* tp->lock is held. */
3598 static int tg3_rxcpu_pause(struct tg3 *tp)
3599 {
3600         int rc = tg3_pause_cpu(tp, RX_CPU_BASE);
3601
3602         tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3603         tw32_f(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3604         udelay(10);
3605
3606         return rc;
3607 }
3608
3609 /* tp->lock is held. */
3610 static int tg3_txcpu_pause(struct tg3 *tp)
3611 {
3612         return tg3_pause_cpu(tp, TX_CPU_BASE);
3613 }
3614
3615 /* tp->lock is held. */
3616 static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base)
3617 {
3618         tw32(cpu_base + CPU_STATE, 0xffffffff);
3619         tw32_f(cpu_base + CPU_MODE,  0x00000000);
3620 }
3621
3622 /* tp->lock is held. */
3623 static void tg3_rxcpu_resume(struct tg3 *tp)
3624 {
3625         tg3_resume_cpu(tp, RX_CPU_BASE);
3626 }
3627
3628 /* tp->lock is held. */
3629 static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base)
3630 {
3631         int rc;
3632
3633         BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3634
3635         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3636                 u32 val = tr32(GRC_VCPU_EXT_CTRL);
3637
3638                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3639                 return 0;
3640         }
3641         if (cpu_base == RX_CPU_BASE) {
3642                 rc = tg3_rxcpu_pause(tp);
3643         } else {
3644                 /*
3645                  * There is only an Rx CPU for the 5750 derivative in the
3646                  * BCM4785.
3647                  */
3648                 if (tg3_flag(tp, IS_SSB_CORE))
3649                         return 0;
3650
3651                 rc = tg3_txcpu_pause(tp);
3652         }
3653
3654         if (rc) {
3655                 netdev_err(tp->dev, "%s timed out, %s CPU\n",
3656                            __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX");
3657                 return -ENODEV;
3658         }
3659
3660         /* Clear firmware's nvram arbitration. */
3661         if (tg3_flag(tp, NVRAM))
3662                 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3663         return 0;
3664 }
3665
3666 static int tg3_fw_data_len(struct tg3 *tp,
3667                            const struct tg3_firmware_hdr *fw_hdr)
3668 {
3669         int fw_len;
3670
3671         /* Non fragmented firmware have one firmware header followed by a
3672          * contiguous chunk of data to be written. The length field in that
3673          * header is not the length of data to be written but the complete
3674          * length of the bss. The data length is determined based on
3675          * tp->fw->size minus headers.
3676          *
3677          * Fragmented firmware have a main header followed by multiple
3678          * fragments. Each fragment is identical to non fragmented firmware
3679          * with a firmware header followed by a contiguous chunk of data. In
3680          * the main header, the length field is unused and set to 0xffffffff.
3681          * In each fragment header the length is the entire size of that
3682          * fragment i.e. fragment data + header length. Data length is
3683          * therefore length field in the header minus TG3_FW_HDR_LEN.
3684          */
3685         if (tp->fw_len == 0xffffffff)
3686                 fw_len = be32_to_cpu(fw_hdr->len);
3687         else
3688                 fw_len = tp->fw->size;
3689
3690         return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32);
3691 }
3692
3693 /* tp->lock is held. */
3694 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3695                                  u32 cpu_scratch_base, int cpu_scratch_size,
3696                                  const struct tg3_firmware_hdr *fw_hdr)
3697 {
3698         int err, i;
3699         void (*write_op)(struct tg3 *, u32, u32);
3700         int total_len = tp->fw->size;
3701
3702         if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3703                 netdev_err(tp->dev,
3704                            "%s: Trying to load TX cpu firmware which is 5705\n",
3705                            __func__);
3706                 return -EINVAL;
3707         }
3708
3709         if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766)
3710                 write_op = tg3_write_mem;
3711         else
3712                 write_op = tg3_write_indirect_reg32;
3713
3714         if (tg3_asic_rev(tp) != ASIC_REV_57766) {
3715                 /* It is possible that bootcode is still loading at this point.
3716                  * Get the nvram lock first before halting the cpu.
3717                  */
3718                 int lock_err = tg3_nvram_lock(tp);
3719                 err = tg3_halt_cpu(tp, cpu_base);
3720                 if (!lock_err)
3721                         tg3_nvram_unlock(tp);
3722                 if (err)
3723                         goto out;
3724
3725                 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3726                         write_op(tp, cpu_scratch_base + i, 0);
3727                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3728                 tw32(cpu_base + CPU_MODE,
3729                      tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT);
3730         } else {
3731                 /* Subtract additional main header for fragmented firmware and
3732                  * advance to the first fragment
3733                  */
3734                 total_len -= TG3_FW_HDR_LEN;
3735                 fw_hdr++;
3736         }
3737
3738         do {
3739                 u32 *fw_data = (u32 *)(fw_hdr + 1);
3740                 for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++)
3741                         write_op(tp, cpu_scratch_base +
3742                                      (be32_to_cpu(fw_hdr->base_addr) & 0xffff) +
3743                                      (i * sizeof(u32)),
3744                                  be32_to_cpu(fw_data[i]));
3745
3746                 total_len -= be32_to_cpu(fw_hdr->len);
3747
3748                 /* Advance to next fragment */
3749                 fw_hdr = (struct tg3_firmware_hdr *)
3750                          ((void *)fw_hdr + be32_to_cpu(fw_hdr->len));
3751         } while (total_len > 0);
3752
3753         err = 0;
3754
3755 out:
3756         return err;
3757 }
3758
3759 /* tp->lock is held. */
3760 static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc)
3761 {
3762         int i;
3763         const int iters = 5;
3764
3765         tw32(cpu_base + CPU_STATE, 0xffffffff);
3766         tw32_f(cpu_base + CPU_PC, pc);
3767
3768         for (i = 0; i < iters; i++) {
3769                 if (tr32(cpu_base + CPU_PC) == pc)
3770                         break;
3771                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3772                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3773                 tw32_f(cpu_base + CPU_PC, pc);
3774                 udelay(1000);
3775         }
3776
3777         return (i == iters) ? -EBUSY : 0;
3778 }
3779
3780 /* tp->lock is held. */
3781 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3782 {
3783         const struct tg3_firmware_hdr *fw_hdr;
3784         int err;
3785
3786         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3787
3788         /* Firmware blob starts with version numbers, followed by
3789            start address and length. We are setting complete length.
3790            length = end_address_of_bss - start_address_of_text.
3791            Remainder is the blob to be loaded contiguously
3792            from start address. */
3793
3794         err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3795                                     RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3796                                     fw_hdr);
3797         if (err)
3798                 return err;
3799
3800         err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3801                                     TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3802                                     fw_hdr);
3803         if (err)
3804                 return err;
3805
3806         /* Now startup only the RX cpu. */
3807         err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE,
3808                                        be32_to_cpu(fw_hdr->base_addr));
3809         if (err) {
3810                 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3811                            "should be %08x\n", __func__,
3812                            tr32(RX_CPU_BASE + CPU_PC),
3813                                 be32_to_cpu(fw_hdr->base_addr));
3814                 return -ENODEV;
3815         }
3816
3817         tg3_rxcpu_resume(tp);
3818
3819         return 0;
3820 }
3821
3822 static int tg3_validate_rxcpu_state(struct tg3 *tp)
3823 {
3824         const int iters = 1000;
3825         int i;
3826         u32 val;
3827
3828         /* Wait for boot code to complete initialization and enter service
3829          * loop. It is then safe to download service patches
3830          */
3831         for (i = 0; i < iters; i++) {
3832                 if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP)
3833                         break;
3834
3835                 udelay(10);
3836         }
3837
3838         if (i == iters) {
3839                 netdev_err(tp->dev, "Boot code not ready for service patches\n");
3840                 return -EBUSY;
3841         }
3842
3843         val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE);
3844         if (val & 0xff) {
3845                 netdev_warn(tp->dev,
3846                             "Other patches exist. Not downloading EEE patch\n");
3847                 return -EEXIST;
3848         }
3849
3850         return 0;
3851 }
3852
3853 /* tp->lock is held. */
3854 static void tg3_load_57766_firmware(struct tg3 *tp)
3855 {
3856         struct tg3_firmware_hdr *fw_hdr;
3857
3858         if (!tg3_flag(tp, NO_NVRAM))
3859                 return;
3860
3861         if (tg3_validate_rxcpu_state(tp))
3862                 return;
3863
3864         if (!tp->fw)
3865                 return;
3866
3867         /* This firmware blob has a different format than older firmware
3868          * releases as given below. The main difference is we have fragmented
3869          * data to be written to non-contiguous locations.
3870          *
3871          * In the beginning we have a firmware header identical to other
3872          * firmware which consists of version, base addr and length. The length
3873          * here is unused and set to 0xffffffff.
3874          *
3875          * This is followed by a series of firmware fragments which are
3876          * individually identical to previous firmware. i.e. they have the
3877          * firmware header and followed by data for that fragment. The version
3878          * field of the individual fragment header is unused.
3879          */
3880
3881         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3882         if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR)
3883                 return;
3884
3885         if (tg3_rxcpu_pause(tp))
3886                 return;
3887
3888         /* tg3_load_firmware_cpu() will always succeed for the 57766 */
3889         tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr);
3890
3891         tg3_rxcpu_resume(tp);
3892 }
3893
3894 /* tp->lock is held. */
3895 static int tg3_load_tso_firmware(struct tg3 *tp)
3896 {
3897         const struct tg3_firmware_hdr *fw_hdr;
3898         unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3899         int err;
3900
3901         if (!tg3_flag(tp, FW_TSO))
3902                 return 0;
3903
3904         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3905
3906         /* Firmware blob starts with version numbers, followed by
3907            start address and length. We are setting complete length.
3908            length = end_address_of_bss - start_address_of_text.
3909            Remainder is the blob to be loaded contiguously
3910            from start address. */
3911
3912         cpu_scratch_size = tp->fw_len;
3913
3914         if (tg3_asic_rev(tp) == ASIC_REV_5705) {
3915                 cpu_base = RX_CPU_BASE;
3916                 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3917         } else {
3918                 cpu_base = TX_CPU_BASE;
3919                 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3920                 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3921         }
3922
3923         err = tg3_load_firmware_cpu(tp, cpu_base,
3924                                     cpu_scratch_base, cpu_scratch_size,
3925                                     fw_hdr);
3926         if (err)
3927                 return err;
3928
3929         /* Now startup the cpu. */
3930         err = tg3_pause_cpu_and_set_pc(tp, cpu_base,
3931                                        be32_to_cpu(fw_hdr->base_addr));
3932         if (err) {
3933                 netdev_err(tp->dev,
3934                            "%s fails to set CPU PC, is %08x should be %08x\n",
3935                            __func__, tr32(cpu_base + CPU_PC),
3936                            be32_to_cpu(fw_hdr->base_addr));
3937                 return -ENODEV;
3938         }
3939
3940         tg3_resume_cpu(tp, cpu_base);
3941         return 0;
3942 }
3943
3944 /* tp->lock is held. */
3945 static void __tg3_set_one_mac_addr(struct tg3 *tp, const u8 *mac_addr,
3946                                    int index)
3947 {
3948         u32 addr_high, addr_low;
3949
3950         addr_high = ((mac_addr[0] << 8) | mac_addr[1]);
3951         addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) |
3952                     (mac_addr[4] <<  8) | mac_addr[5]);
3953
3954         if (index < 4) {
3955                 tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high);
3956                 tw32(MAC_ADDR_0_LOW + (index * 8), addr_low);
3957         } else {
3958                 index -= 4;
3959                 tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high);
3960                 tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low);
3961         }
3962 }
3963
3964 /* tp->lock is held. */
3965 static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1)
3966 {
3967         u32 addr_high;
3968         int i;
3969
3970         for (i = 0; i < 4; i++) {
3971                 if (i == 1 && skip_mac_1)
3972                         continue;
3973                 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3974         }
3975
3976         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
3977             tg3_asic_rev(tp) == ASIC_REV_5704) {
3978                 for (i = 4; i < 16; i++)
3979                         __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3980         }
3981
3982         addr_high = (tp->dev->dev_addr[0] +
3983                      tp->dev->dev_addr[1] +
3984                      tp->dev->dev_addr[2] +
3985                      tp->dev->dev_addr[3] +
3986                      tp->dev->dev_addr[4] +
3987                      tp->dev->dev_addr[5]) &
3988                 TX_BACKOFF_SEED_MASK;
3989         tw32(MAC_TX_BACKOFF_SEED, addr_high);
3990 }
3991
3992 static void tg3_enable_register_access(struct tg3 *tp)
3993 {
3994         /*
3995          * Make sure register accesses (indirect or otherwise) will function
3996          * correctly.
3997          */
3998         pci_write_config_dword(tp->pdev,
3999                                TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
4000 }
4001
4002 static int tg3_power_up(struct tg3 *tp)
4003 {
4004         int err;
4005
4006         tg3_enable_register_access(tp);
4007
4008         err = pci_set_power_state(tp->pdev, PCI_D0);
4009         if (!err) {
4010                 /* Switch out of Vaux if it is a NIC */
4011                 tg3_pwrsrc_switch_to_vmain(tp);
4012         } else {
4013                 netdev_err(tp->dev, "Transition to D0 failed\n");
4014         }
4015
4016         return err;
4017 }
4018
4019 static int tg3_setup_phy(struct tg3 *, bool);
4020
4021 static int tg3_power_down_prepare(struct tg3 *tp)
4022 {
4023         u32 misc_host_ctrl;
4024         bool device_should_wake, do_low_power;
4025
4026         tg3_enable_register_access(tp);
4027
4028         /* Restore the CLKREQ setting. */
4029         if (tg3_flag(tp, CLKREQ_BUG))
4030                 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4031                                          PCI_EXP_LNKCTL_CLKREQ_EN);
4032
4033         misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
4034         tw32(TG3PCI_MISC_HOST_CTRL,
4035              misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
4036
4037         device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
4038                              tg3_flag(tp, WOL_ENABLE);
4039
4040         if (tg3_flag(tp, USE_PHYLIB)) {
4041                 do_low_power = false;
4042                 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
4043                     !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4044                         __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising) = { 0, };
4045                         struct phy_device *phydev;
4046                         u32 phyid;
4047
4048                         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
4049
4050                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4051
4052                         tp->link_config.speed = phydev->speed;
4053                         tp->link_config.duplex = phydev->duplex;
4054                         tp->link_config.autoneg = phydev->autoneg;
4055                         ethtool_convert_link_mode_to_legacy_u32(
4056                                 &tp->link_config.advertising,
4057                                 phydev->advertising);
4058
4059                         linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, advertising);
4060                         linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
4061                                          advertising);
4062                         linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
4063                                          advertising);
4064                         linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
4065                                          advertising);
4066
4067                         if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
4068                                 if (tg3_flag(tp, WOL_SPEED_100MB)) {
4069                                         linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
4070                                                          advertising);
4071                                         linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
4072                                                          advertising);
4073                                         linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4074                                                          advertising);
4075                                 } else {
4076                                         linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4077                                                          advertising);
4078                                 }
4079                         }
4080
4081                         linkmode_copy(phydev->advertising, advertising);
4082                         phy_start_aneg(phydev);
4083
4084                         phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
4085                         if (phyid != PHY_ID_BCMAC131) {
4086                                 phyid &= PHY_BCM_OUI_MASK;
4087                                 if (phyid == PHY_BCM_OUI_1 ||
4088                                     phyid == PHY_BCM_OUI_2 ||
4089                                     phyid == PHY_BCM_OUI_3)
4090                                         do_low_power = true;
4091                         }
4092                 }
4093         } else {
4094                 do_low_power = true;
4095
4096                 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
4097                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4098
4099                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
4100                         tg3_setup_phy(tp, false);
4101         }
4102
4103         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
4104                 u32 val;
4105
4106                 val = tr32(GRC_VCPU_EXT_CTRL);
4107                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
4108         } else if (!tg3_flag(tp, ENABLE_ASF)) {
4109                 int i;
4110                 u32 val;
4111
4112                 for (i = 0; i < 200; i++) {
4113                         tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
4114                         if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4115                                 break;
4116                         msleep(1);
4117                 }
4118         }
4119         if (tg3_flag(tp, WOL_CAP))
4120                 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
4121                                                      WOL_DRV_STATE_SHUTDOWN |
4122                                                      WOL_DRV_WOL |
4123                                                      WOL_SET_MAGIC_PKT);
4124
4125         if (device_should_wake) {
4126                 u32 mac_mode;
4127
4128                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
4129                         if (do_low_power &&
4130                             !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
4131                                 tg3_phy_auxctl_write(tp,
4132                                                MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
4133                                                MII_TG3_AUXCTL_PCTL_WOL_EN |
4134                                                MII_TG3_AUXCTL_PCTL_100TX_LPWR |
4135                                                MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
4136                                 udelay(40);
4137                         }
4138
4139                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4140                                 mac_mode = MAC_MODE_PORT_MODE_GMII;
4141                         else if (tp->phy_flags &
4142                                  TG3_PHYFLG_KEEP_LINK_ON_PWRDN) {
4143                                 if (tp->link_config.active_speed == SPEED_1000)
4144                                         mac_mode = MAC_MODE_PORT_MODE_GMII;
4145                                 else
4146                                         mac_mode = MAC_MODE_PORT_MODE_MII;
4147                         } else
4148                                 mac_mode = MAC_MODE_PORT_MODE_MII;
4149
4150                         mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
4151                         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
4152                                 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
4153                                              SPEED_100 : SPEED_10;
4154                                 if (tg3_5700_link_polarity(tp, speed))
4155                                         mac_mode |= MAC_MODE_LINK_POLARITY;
4156                                 else
4157                                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
4158                         }
4159                 } else {
4160                         mac_mode = MAC_MODE_PORT_MODE_TBI;
4161                 }
4162
4163                 if (!tg3_flag(tp, 5750_PLUS))
4164                         tw32(MAC_LED_CTRL, tp->led_ctrl);
4165
4166                 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
4167                 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
4168                     (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
4169                         mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
4170
4171                 if (tg3_flag(tp, ENABLE_APE))
4172                         mac_mode |= MAC_MODE_APE_TX_EN |
4173                                     MAC_MODE_APE_RX_EN |
4174                                     MAC_MODE_TDE_ENABLE;
4175
4176                 tw32_f(MAC_MODE, mac_mode);
4177                 udelay(100);
4178
4179                 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
4180                 udelay(10);
4181         }
4182
4183         if (!tg3_flag(tp, WOL_SPEED_100MB) &&
4184             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4185              tg3_asic_rev(tp) == ASIC_REV_5701)) {
4186                 u32 base_val;
4187
4188                 base_val = tp->pci_clock_ctrl;
4189                 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
4190                              CLOCK_CTRL_TXCLK_DISABLE);
4191
4192                 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
4193                             CLOCK_CTRL_PWRDOWN_PLL133, 40);
4194         } else if (tg3_flag(tp, 5780_CLASS) ||
4195                    tg3_flag(tp, CPMU_PRESENT) ||
4196                    tg3_asic_rev(tp) == ASIC_REV_5906) {
4197                 /* do nothing */
4198         } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
4199                 u32 newbits1, newbits2;
4200
4201                 if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4202                     tg3_asic_rev(tp) == ASIC_REV_5701) {
4203                         newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
4204                                     CLOCK_CTRL_TXCLK_DISABLE |
4205                                     CLOCK_CTRL_ALTCLK);
4206                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4207                 } else if (tg3_flag(tp, 5705_PLUS)) {
4208                         newbits1 = CLOCK_CTRL_625_CORE;
4209                         newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
4210                 } else {
4211                         newbits1 = CLOCK_CTRL_ALTCLK;
4212                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4213                 }
4214
4215                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
4216                             40);
4217
4218                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
4219                             40);
4220
4221                 if (!tg3_flag(tp, 5705_PLUS)) {
4222                         u32 newbits3;
4223
4224                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4225                             tg3_asic_rev(tp) == ASIC_REV_5701) {
4226                                 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
4227                                             CLOCK_CTRL_TXCLK_DISABLE |
4228                                             CLOCK_CTRL_44MHZ_CORE);
4229                         } else {
4230                                 newbits3 = CLOCK_CTRL_44MHZ_CORE;
4231                         }
4232
4233                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
4234                                     tp->pci_clock_ctrl | newbits3, 40);
4235                 }
4236         }
4237
4238         if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
4239                 tg3_power_down_phy(tp, do_low_power);
4240
4241         tg3_frob_aux_power(tp, true);
4242
4243         /* Workaround for unstable PLL clock */
4244         if ((!tg3_flag(tp, IS_SSB_CORE)) &&
4245             ((tg3_chip_rev(tp) == CHIPREV_5750_AX) ||
4246              (tg3_chip_rev(tp) == CHIPREV_5750_BX))) {
4247                 u32 val = tr32(0x7d00);
4248
4249                 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
4250                 tw32(0x7d00, val);
4251                 if (!tg3_flag(tp, ENABLE_ASF)) {
4252                         int err;
4253
4254                         err = tg3_nvram_lock(tp);
4255                         tg3_halt_cpu(tp, RX_CPU_BASE);
4256                         if (!err)
4257                                 tg3_nvram_unlock(tp);
4258                 }
4259         }
4260
4261         tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
4262
4263         tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
4264
4265         return 0;
4266 }
4267
4268 static void tg3_power_down(struct tg3 *tp)
4269 {
4270         pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
4271         pci_set_power_state(tp->pdev, PCI_D3hot);
4272 }
4273
4274 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex)
4275 {
4276         switch (val & MII_TG3_AUX_STAT_SPDMASK) {
4277         case MII_TG3_AUX_STAT_10HALF:
4278                 *speed = SPEED_10;
4279                 *duplex = DUPLEX_HALF;
4280                 break;
4281
4282         case MII_TG3_AUX_STAT_10FULL:
4283                 *speed = SPEED_10;
4284                 *duplex = DUPLEX_FULL;
4285                 break;
4286
4287         case MII_TG3_AUX_STAT_100HALF:
4288                 *speed = SPEED_100;
4289                 *duplex = DUPLEX_HALF;
4290                 break;
4291
4292         case MII_TG3_AUX_STAT_100FULL:
4293                 *speed = SPEED_100;
4294                 *duplex = DUPLEX_FULL;
4295                 break;
4296
4297         case MII_TG3_AUX_STAT_1000HALF:
4298                 *speed = SPEED_1000;
4299                 *duplex = DUPLEX_HALF;
4300                 break;
4301
4302         case MII_TG3_AUX_STAT_1000FULL:
4303                 *speed = SPEED_1000;
4304                 *duplex = DUPLEX_FULL;
4305                 break;
4306
4307         default:
4308                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4309                         *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
4310                                  SPEED_10;
4311                         *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
4312                                   DUPLEX_HALF;
4313                         break;
4314                 }
4315                 *speed = SPEED_UNKNOWN;
4316                 *duplex = DUPLEX_UNKNOWN;
4317                 break;
4318         }
4319 }
4320
4321 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
4322 {
4323         int err = 0;
4324         u32 val, new_adv;
4325
4326         new_adv = ADVERTISE_CSMA;
4327         new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
4328         new_adv |= mii_advertise_flowctrl(flowctrl);
4329
4330         err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
4331         if (err)
4332                 goto done;
4333
4334         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4335                 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
4336
4337                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4338                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)
4339                         new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4340
4341                 err = tg3_writephy(tp, MII_CTRL1000, new_adv);
4342                 if (err)
4343                         goto done;
4344         }
4345
4346         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4347                 goto done;
4348
4349         tw32(TG3_CPMU_EEE_MODE,
4350              tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
4351
4352         err = tg3_phy_toggle_auxctl_smdsp(tp, true);
4353         if (!err) {
4354                 u32 err2;
4355
4356                 val = 0;
4357                 /* Advertise 100-BaseTX EEE ability */
4358                 if (advertise & ADVERTISED_100baseT_Full)
4359                         val |= MDIO_AN_EEE_ADV_100TX;
4360                 /* Advertise 1000-BaseT EEE ability */
4361                 if (advertise & ADVERTISED_1000baseT_Full)
4362                         val |= MDIO_AN_EEE_ADV_1000T;
4363
4364                 if (!tp->eee.eee_enabled) {
4365                         val = 0;
4366                         tp->eee.advertised = 0;
4367                 } else {
4368                         tp->eee.advertised = advertise &
4369                                              (ADVERTISED_100baseT_Full |
4370                                               ADVERTISED_1000baseT_Full);
4371                 }
4372
4373                 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
4374                 if (err)
4375                         val = 0;
4376
4377                 switch (tg3_asic_rev(tp)) {
4378                 case ASIC_REV_5717:
4379                 case ASIC_REV_57765:
4380                 case ASIC_REV_57766:
4381                 case ASIC_REV_5719:
4382                         /* If we advertised any eee advertisements above... */
4383                         if (val)
4384                                 val = MII_TG3_DSP_TAP26_ALNOKO |
4385                                       MII_TG3_DSP_TAP26_RMRXSTO |
4386                                       MII_TG3_DSP_TAP26_OPCSINPT;
4387                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
4388                         fallthrough;
4389                 case ASIC_REV_5720:
4390                 case ASIC_REV_5762:
4391                         if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4392                                 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4393                                                  MII_TG3_DSP_CH34TP2_HIBW01);
4394                 }
4395
4396                 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false);
4397                 if (!err)
4398                         err = err2;
4399         }
4400
4401 done:
4402         return err;
4403 }
4404
4405 static void tg3_phy_copper_begin(struct tg3 *tp)
4406 {
4407         if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4408             (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4409                 u32 adv, fc;
4410
4411                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4412                     !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4413                         adv = ADVERTISED_10baseT_Half |
4414                               ADVERTISED_10baseT_Full;
4415                         if (tg3_flag(tp, WOL_SPEED_100MB))
4416                                 adv |= ADVERTISED_100baseT_Half |
4417                                        ADVERTISED_100baseT_Full;
4418                         if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) {
4419                                 if (!(tp->phy_flags &
4420                                       TG3_PHYFLG_DISABLE_1G_HD_ADV))
4421                                         adv |= ADVERTISED_1000baseT_Half;
4422                                 adv |= ADVERTISED_1000baseT_Full;
4423                         }
4424
4425                         fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4426                 } else {
4427                         adv = tp->link_config.advertising;
4428                         if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4429                                 adv &= ~(ADVERTISED_1000baseT_Half |
4430                                          ADVERTISED_1000baseT_Full);
4431
4432                         fc = tp->link_config.flowctrl;
4433                 }
4434
4435                 tg3_phy_autoneg_cfg(tp, adv, fc);
4436
4437                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4438                     (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4439                         /* Normally during power down we want to autonegotiate
4440                          * the lowest possible speed for WOL. However, to avoid
4441                          * link flap, we leave it untouched.
4442                          */
4443                         return;
4444                 }
4445
4446                 tg3_writephy(tp, MII_BMCR,
4447                              BMCR_ANENABLE | BMCR_ANRESTART);
4448         } else {
4449                 int i;
4450                 u32 bmcr, orig_bmcr;
4451
4452                 tp->link_config.active_speed = tp->link_config.speed;
4453                 tp->link_config.active_duplex = tp->link_config.duplex;
4454
4455                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
4456                         /* With autoneg disabled, 5715 only links up when the
4457                          * advertisement register has the configured speed
4458                          * enabled.
4459                          */
4460                         tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL);
4461                 }
4462
4463                 bmcr = 0;
4464                 switch (tp->link_config.speed) {
4465                 default:
4466                 case SPEED_10:
4467                         break;
4468
4469                 case SPEED_100:
4470                         bmcr |= BMCR_SPEED100;
4471                         break;
4472
4473                 case SPEED_1000:
4474                         bmcr |= BMCR_SPEED1000;
4475                         break;
4476                 }
4477
4478                 if (tp->link_config.duplex == DUPLEX_FULL)
4479                         bmcr |= BMCR_FULLDPLX;
4480
4481                 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4482                     (bmcr != orig_bmcr)) {
4483                         tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4484                         for (i = 0; i < 1500; i++) {
4485                                 u32 tmp;
4486
4487                                 udelay(10);
4488                                 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4489                                     tg3_readphy(tp, MII_BMSR, &tmp))
4490                                         continue;
4491                                 if (!(tmp & BMSR_LSTATUS)) {
4492                                         udelay(40);
4493                                         break;
4494                                 }
4495                         }
4496                         tg3_writephy(tp, MII_BMCR, bmcr);
4497                         udelay(40);
4498                 }
4499         }
4500 }
4501
4502 static int tg3_phy_pull_config(struct tg3 *tp)
4503 {
4504         int err;
4505         u32 val;
4506
4507         err = tg3_readphy(tp, MII_BMCR, &val);
4508         if (err)
4509                 goto done;
4510
4511         if (!(val & BMCR_ANENABLE)) {
4512                 tp->link_config.autoneg = AUTONEG_DISABLE;
4513                 tp->link_config.advertising = 0;
4514                 tg3_flag_clear(tp, PAUSE_AUTONEG);
4515
4516                 err = -EIO;
4517
4518                 switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) {
4519                 case 0:
4520                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4521                                 goto done;
4522
4523                         tp->link_config.speed = SPEED_10;
4524                         break;
4525                 case BMCR_SPEED100:
4526                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4527                                 goto done;
4528
4529                         tp->link_config.speed = SPEED_100;
4530                         break;
4531                 case BMCR_SPEED1000:
4532                         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4533                                 tp->link_config.speed = SPEED_1000;
4534                                 break;
4535                         }
4536                         fallthrough;
4537                 default:
4538                         goto done;
4539                 }
4540
4541                 if (val & BMCR_FULLDPLX)
4542                         tp->link_config.duplex = DUPLEX_FULL;
4543                 else
4544                         tp->link_config.duplex = DUPLEX_HALF;
4545
4546                 tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
4547
4548                 err = 0;
4549                 goto done;
4550         }
4551
4552         tp->link_config.autoneg = AUTONEG_ENABLE;
4553         tp->link_config.advertising = ADVERTISED_Autoneg;
4554         tg3_flag_set(tp, PAUSE_AUTONEG);
4555
4556         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4557                 u32 adv;
4558
4559                 err = tg3_readphy(tp, MII_ADVERTISE, &val);
4560                 if (err)
4561                         goto done;
4562
4563                 adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL);
4564                 tp->link_config.advertising |= adv | ADVERTISED_TP;
4565
4566                 tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val);
4567         } else {
4568                 tp->link_config.advertising |= ADVERTISED_FIBRE;
4569         }
4570
4571         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4572                 u32 adv;
4573
4574                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4575                         err = tg3_readphy(tp, MII_CTRL1000, &val);
4576                         if (err)
4577                                 goto done;
4578
4579                         adv = mii_ctrl1000_to_ethtool_adv_t(val);
4580                 } else {
4581                         err = tg3_readphy(tp, MII_ADVERTISE, &val);
4582                         if (err)
4583                                 goto done;
4584
4585                         adv = tg3_decode_flowctrl_1000X(val);
4586                         tp->link_config.flowctrl = adv;
4587
4588                         val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL);
4589                         adv = mii_adv_to_ethtool_adv_x(val);
4590                 }
4591
4592                 tp->link_config.advertising |= adv;
4593         }
4594
4595 done:
4596         return err;
4597 }
4598
4599 static int tg3_init_5401phy_dsp(struct tg3 *tp)
4600 {
4601         int err;
4602
4603         /* Turn off tap power management. */
4604         /* Set Extended packet length bit */
4605         err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4606
4607         err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4608         err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4609         err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4610         err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4611         err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4612
4613         udelay(40);
4614
4615         return err;
4616 }
4617
4618 static bool tg3_phy_eee_config_ok(struct tg3 *tp)
4619 {
4620         struct ethtool_eee eee;
4621
4622         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4623                 return true;
4624
4625         tg3_eee_pull_config(tp, &eee);
4626
4627         if (tp->eee.eee_enabled) {
4628                 if (tp->eee.advertised != eee.advertised ||
4629                     tp->eee.tx_lpi_timer != eee.tx_lpi_timer ||
4630                     tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled)
4631                         return false;
4632         } else {
4633                 /* EEE is disabled but we're advertising */
4634                 if (eee.advertised)
4635                         return false;
4636         }
4637
4638         return true;
4639 }
4640
4641 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4642 {
4643         u32 advmsk, tgtadv, advertising;
4644
4645         advertising = tp->link_config.advertising;
4646         tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4647
4648         advmsk = ADVERTISE_ALL;
4649         if (tp->link_config.active_duplex == DUPLEX_FULL) {
4650                 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4651                 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4652         }
4653
4654         if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4655                 return false;
4656
4657         if ((*lcladv & advmsk) != tgtadv)
4658                 return false;
4659
4660         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4661                 u32 tg3_ctrl;
4662
4663                 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4664
4665                 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4666                         return false;
4667
4668                 if (tgtadv &&
4669                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4670                      tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) {
4671                         tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4672                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4673                                      CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4674                 } else {
4675                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4676                 }
4677
4678                 if (tg3_ctrl != tgtadv)
4679                         return false;
4680         }
4681
4682         return true;
4683 }
4684
4685 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4686 {
4687         u32 lpeth = 0;
4688
4689         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4690                 u32 val;
4691
4692                 if (tg3_readphy(tp, MII_STAT1000, &val))
4693                         return false;
4694
4695                 lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4696         }
4697
4698         if (tg3_readphy(tp, MII_LPA, rmtadv))
4699                 return false;
4700
4701         lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4702         tp->link_config.rmt_adv = lpeth;
4703
4704         return true;
4705 }
4706
4707 static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up)
4708 {
4709         if (curr_link_up != tp->link_up) {
4710                 if (curr_link_up) {
4711                         netif_carrier_on(tp->dev);
4712                 } else {
4713                         netif_carrier_off(tp->dev);
4714                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4715                                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4716                 }
4717
4718                 tg3_link_report(tp);
4719                 return true;
4720         }
4721
4722         return false;
4723 }
4724
4725 static void tg3_clear_mac_status(struct tg3 *tp)
4726 {
4727         tw32(MAC_EVENT, 0);
4728
4729         tw32_f(MAC_STATUS,
4730                MAC_STATUS_SYNC_CHANGED |
4731                MAC_STATUS_CFG_CHANGED |
4732                MAC_STATUS_MI_COMPLETION |
4733                MAC_STATUS_LNKSTATE_CHANGED);
4734         udelay(40);
4735 }
4736
4737 static void tg3_setup_eee(struct tg3 *tp)
4738 {
4739         u32 val;
4740
4741         val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
4742               TG3_CPMU_EEE_LNKIDL_UART_IDL;
4743         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
4744                 val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT;
4745
4746         tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val);
4747
4748         tw32_f(TG3_CPMU_EEE_CTRL,
4749                TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
4750
4751         val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
4752               (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) |
4753               TG3_CPMU_EEEMD_LPI_IN_RX |
4754               TG3_CPMU_EEEMD_EEE_ENABLE;
4755
4756         if (tg3_asic_rev(tp) != ASIC_REV_5717)
4757                 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
4758
4759         if (tg3_flag(tp, ENABLE_APE))
4760                 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
4761
4762         tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0);
4763
4764         tw32_f(TG3_CPMU_EEE_DBTMR1,
4765                TG3_CPMU_DBTMR1_PCIEXIT_2047US |
4766                (tp->eee.tx_lpi_timer & 0xffff));
4767
4768         tw32_f(TG3_CPMU_EEE_DBTMR2,
4769                TG3_CPMU_DBTMR2_APE_TX_2047US |
4770                TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
4771 }
4772
4773 static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
4774 {
4775         bool current_link_up;
4776         u32 bmsr, val;
4777         u32 lcl_adv, rmt_adv;
4778         u32 current_speed;
4779         u8 current_duplex;
4780         int i, err;
4781
4782         tg3_clear_mac_status(tp);
4783
4784         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4785                 tw32_f(MAC_MI_MODE,
4786                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4787                 udelay(80);
4788         }
4789
4790         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4791
4792         /* Some third-party PHYs need to be reset on link going
4793          * down.
4794          */
4795         if ((tg3_asic_rev(tp) == ASIC_REV_5703 ||
4796              tg3_asic_rev(tp) == ASIC_REV_5704 ||
4797              tg3_asic_rev(tp) == ASIC_REV_5705) &&
4798             tp->link_up) {
4799                 tg3_readphy(tp, MII_BMSR, &bmsr);
4800                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4801                     !(bmsr & BMSR_LSTATUS))
4802                         force_reset = true;
4803         }
4804         if (force_reset)
4805                 tg3_phy_reset(tp);
4806
4807         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4808                 tg3_readphy(tp, MII_BMSR, &bmsr);
4809                 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4810                     !tg3_flag(tp, INIT_COMPLETE))
4811                         bmsr = 0;
4812
4813                 if (!(bmsr & BMSR_LSTATUS)) {
4814                         err = tg3_init_5401phy_dsp(tp);
4815                         if (err)
4816                                 return err;
4817
4818                         tg3_readphy(tp, MII_BMSR, &bmsr);
4819                         for (i = 0; i < 1000; i++) {
4820                                 udelay(10);
4821                                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4822                                     (bmsr & BMSR_LSTATUS)) {
4823                                         udelay(40);
4824                                         break;
4825                                 }
4826                         }
4827
4828                         if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4829                             TG3_PHY_REV_BCM5401_B0 &&
4830                             !(bmsr & BMSR_LSTATUS) &&
4831                             tp->link_config.active_speed == SPEED_1000) {
4832                                 err = tg3_phy_reset(tp);
4833                                 if (!err)
4834                                         err = tg3_init_5401phy_dsp(tp);
4835                                 if (err)
4836                                         return err;
4837                         }
4838                 }
4839         } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4840                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) {
4841                 /* 5701 {A0,B0} CRC bug workaround */
4842                 tg3_writephy(tp, 0x15, 0x0a75);
4843                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4844                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4845                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4846         }
4847
4848         /* Clear pending interrupts... */
4849         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4850         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4851
4852         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4853                 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4854         else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4855                 tg3_writephy(tp, MII_TG3_IMASK, ~0);
4856
4857         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4858             tg3_asic_rev(tp) == ASIC_REV_5701) {
4859                 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4860                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
4861                                      MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4862                 else
4863                         tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4864         }
4865
4866         current_link_up = false;
4867         current_speed = SPEED_UNKNOWN;
4868         current_duplex = DUPLEX_UNKNOWN;
4869         tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4870         tp->link_config.rmt_adv = 0;
4871
4872         if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4873                 err = tg3_phy_auxctl_read(tp,
4874                                           MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4875                                           &val);
4876                 if (!err && !(val & (1 << 10))) {
4877                         tg3_phy_auxctl_write(tp,
4878                                              MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4879                                              val | (1 << 10));
4880                         goto relink;
4881                 }
4882         }
4883
4884         bmsr = 0;
4885         for (i = 0; i < 100; i++) {
4886                 tg3_readphy(tp, MII_BMSR, &bmsr);
4887                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4888                     (bmsr & BMSR_LSTATUS))
4889                         break;
4890                 udelay(40);
4891         }
4892
4893         if (bmsr & BMSR_LSTATUS) {
4894                 u32 aux_stat, bmcr;
4895
4896                 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4897                 for (i = 0; i < 2000; i++) {
4898                         udelay(10);
4899                         if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4900                             aux_stat)
4901                                 break;
4902                 }
4903
4904                 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4905                                              &current_speed,
4906                                              &current_duplex);
4907
4908                 bmcr = 0;
4909                 for (i = 0; i < 200; i++) {
4910                         tg3_readphy(tp, MII_BMCR, &bmcr);
4911                         if (tg3_readphy(tp, MII_BMCR, &bmcr))
4912                                 continue;
4913                         if (bmcr && bmcr != 0x7fff)
4914                                 break;
4915                         udelay(10);
4916                 }
4917
4918                 lcl_adv = 0;
4919                 rmt_adv = 0;
4920
4921                 tp->link_config.active_speed = current_speed;
4922                 tp->link_config.active_duplex = current_duplex;
4923
4924                 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4925                         bool eee_config_ok = tg3_phy_eee_config_ok(tp);
4926
4927                         if ((bmcr & BMCR_ANENABLE) &&
4928                             eee_config_ok &&
4929                             tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4930                             tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4931                                 current_link_up = true;
4932
4933                         /* EEE settings changes take effect only after a phy
4934                          * reset.  If we have skipped a reset due to Link Flap
4935                          * Avoidance being enabled, do it now.
4936                          */
4937                         if (!eee_config_ok &&
4938                             (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
4939                             !force_reset) {
4940                                 tg3_setup_eee(tp);
4941                                 tg3_phy_reset(tp);
4942                         }
4943                 } else {
4944                         if (!(bmcr & BMCR_ANENABLE) &&
4945                             tp->link_config.speed == current_speed &&
4946                             tp->link_config.duplex == current_duplex) {
4947                                 current_link_up = true;
4948                         }
4949                 }
4950
4951                 if (current_link_up &&
4952                     tp->link_config.active_duplex == DUPLEX_FULL) {
4953                         u32 reg, bit;
4954
4955                         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4956                                 reg = MII_TG3_FET_GEN_STAT;
4957                                 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4958                         } else {
4959                                 reg = MII_TG3_EXT_STAT;
4960                                 bit = MII_TG3_EXT_STAT_MDIX;
4961                         }
4962
4963                         if (!tg3_readphy(tp, reg, &val) && (val & bit))
4964                                 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4965
4966                         tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4967                 }
4968         }
4969
4970 relink:
4971         if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4972                 tg3_phy_copper_begin(tp);
4973
4974                 if (tg3_flag(tp, ROBOSWITCH)) {
4975                         current_link_up = true;
4976                         /* FIXME: when BCM5325 switch is used use 100 MBit/s */
4977                         current_speed = SPEED_1000;
4978                         current_duplex = DUPLEX_FULL;
4979                         tp->link_config.active_speed = current_speed;
4980                         tp->link_config.active_duplex = current_duplex;
4981                 }
4982
4983                 tg3_readphy(tp, MII_BMSR, &bmsr);
4984                 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4985                     (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4986                         current_link_up = true;
4987         }
4988
4989         tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4990         if (current_link_up) {
4991                 if (tp->link_config.active_speed == SPEED_100 ||
4992                     tp->link_config.active_speed == SPEED_10)
4993                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4994                 else
4995                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4996         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4997                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4998         else
4999                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5000
5001         /* In order for the 5750 core in BCM4785 chip to work properly
5002          * in RGMII mode, the Led Control Register must be set up.
5003          */
5004         if (tg3_flag(tp, RGMII_MODE)) {
5005                 u32 led_ctrl = tr32(MAC_LED_CTRL);
5006                 led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON);
5007
5008                 if (tp->link_config.active_speed == SPEED_10)
5009                         led_ctrl |= LED_CTRL_LNKLED_OVERRIDE;
5010                 else if (tp->link_config.active_speed == SPEED_100)
5011                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5012                                      LED_CTRL_100MBPS_ON);
5013                 else if (tp->link_config.active_speed == SPEED_1000)
5014                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5015                                      LED_CTRL_1000MBPS_ON);
5016
5017                 tw32(MAC_LED_CTRL, led_ctrl);
5018                 udelay(40);
5019         }
5020
5021         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5022         if (tp->link_config.active_duplex == DUPLEX_HALF)
5023                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5024
5025         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
5026                 if (current_link_up &&
5027                     tg3_5700_link_polarity(tp, tp->link_config.active_speed))
5028                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
5029                 else
5030                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
5031         }
5032
5033         /* ??? Without this setting Netgear GA302T PHY does not
5034          * ??? send/receive packets...
5035          */
5036         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
5037             tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) {
5038                 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
5039                 tw32_f(MAC_MI_MODE, tp->mi_mode);
5040                 udelay(80);
5041         }
5042
5043         tw32_f(MAC_MODE, tp->mac_mode);
5044         udelay(40);
5045
5046         tg3_phy_eee_adjust(tp, current_link_up);
5047
5048         if (tg3_flag(tp, USE_LINKCHG_REG)) {
5049                 /* Polled via timer. */
5050                 tw32_f(MAC_EVENT, 0);
5051         } else {
5052                 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5053         }
5054         udelay(40);
5055
5056         if (tg3_asic_rev(tp) == ASIC_REV_5700 &&
5057             current_link_up &&
5058             tp->link_config.active_speed == SPEED_1000 &&
5059             (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
5060                 udelay(120);
5061                 tw32_f(MAC_STATUS,
5062                      (MAC_STATUS_SYNC_CHANGED |
5063                       MAC_STATUS_CFG_CHANGED));
5064                 udelay(40);
5065                 tg3_write_mem(tp,
5066                               NIC_SRAM_FIRMWARE_MBOX,
5067                               NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
5068         }
5069
5070         /* Prevent send BD corruption. */
5071         if (tg3_flag(tp, CLKREQ_BUG)) {
5072                 if (tp->link_config.active_speed == SPEED_100 ||
5073                     tp->link_config.active_speed == SPEED_10)
5074                         pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
5075                                                    PCI_EXP_LNKCTL_CLKREQ_EN);
5076                 else
5077                         pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
5078                                                  PCI_EXP_LNKCTL_CLKREQ_EN);
5079         }
5080
5081         tg3_test_and_report_link_chg(tp, current_link_up);
5082
5083         return 0;
5084 }
5085
5086 struct tg3_fiber_aneginfo {
5087         int state;
5088 #define ANEG_STATE_UNKNOWN              0
5089 #define ANEG_STATE_AN_ENABLE            1
5090 #define ANEG_STATE_RESTART_INIT         2
5091 #define ANEG_STATE_RESTART              3
5092 #define ANEG_STATE_DISABLE_LINK_OK      4
5093 #define ANEG_STATE_ABILITY_DETECT_INIT  5
5094 #define ANEG_STATE_ABILITY_DETECT       6
5095 #define ANEG_STATE_ACK_DETECT_INIT      7
5096 #define ANEG_STATE_ACK_DETECT           8
5097 #define ANEG_STATE_COMPLETE_ACK_INIT    9
5098 #define ANEG_STATE_COMPLETE_ACK         10
5099 #define ANEG_STATE_IDLE_DETECT_INIT     11
5100 #define ANEG_STATE_IDLE_DETECT          12
5101 #define ANEG_STATE_LINK_OK              13
5102 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT  14
5103 #define ANEG_STATE_NEXT_PAGE_WAIT       15
5104
5105         u32 flags;
5106 #define MR_AN_ENABLE            0x00000001
5107 #define MR_RESTART_AN           0x00000002
5108 #define MR_AN_COMPLETE          0x00000004
5109 #define MR_PAGE_RX              0x00000008
5110 #define MR_NP_LOADED            0x00000010
5111 #define MR_TOGGLE_TX            0x00000020
5112 #define MR_LP_ADV_FULL_DUPLEX   0x00000040
5113 #define MR_LP_ADV_HALF_DUPLEX   0x00000080
5114 #define MR_LP_ADV_SYM_PAUSE     0x00000100
5115 #define MR_LP_ADV_ASYM_PAUSE    0x00000200
5116 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400
5117 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800
5118 #define MR_LP_ADV_NEXT_PAGE     0x00001000
5119 #define MR_TOGGLE_RX            0x00002000
5120 #define MR_NP_RX                0x00004000
5121
5122 #define MR_LINK_OK              0x80000000
5123
5124         unsigned long link_time, cur_time;
5125
5126         u32 ability_match_cfg;
5127         int ability_match_count;
5128
5129         char ability_match, idle_match, ack_match;
5130
5131         u32 txconfig, rxconfig;
5132 #define ANEG_CFG_NP             0x00000080
5133 #define ANEG_CFG_ACK            0x00000040
5134 #define ANEG_CFG_RF2            0x00000020
5135 #define ANEG_CFG_RF1            0x00000010
5136 #define ANEG_CFG_PS2            0x00000001
5137 #define ANEG_CFG_PS1            0x00008000
5138 #define ANEG_CFG_HD             0x00004000
5139 #define ANEG_CFG_FD             0x00002000
5140 #define ANEG_CFG_INVAL          0x00001f06
5141
5142 };
5143 #define ANEG_OK         0
5144 #define ANEG_DONE       1
5145 #define ANEG_TIMER_ENAB 2
5146 #define ANEG_FAILED     -1
5147
5148 #define ANEG_STATE_SETTLE_TIME  10000
5149
5150 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
5151                                    struct tg3_fiber_aneginfo *ap)
5152 {
5153         u16 flowctrl;
5154         unsigned long delta;
5155         u32 rx_cfg_reg;
5156         int ret;
5157
5158         if (ap->state == ANEG_STATE_UNKNOWN) {
5159                 ap->rxconfig = 0;
5160                 ap->link_time = 0;
5161                 ap->cur_time = 0;
5162                 ap->ability_match_cfg = 0;
5163                 ap->ability_match_count = 0;
5164                 ap->ability_match = 0;
5165                 ap->idle_match = 0;
5166                 ap->ack_match = 0;
5167         }
5168         ap->cur_time++;
5169
5170         if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
5171                 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
5172
5173                 if (rx_cfg_reg != ap->ability_match_cfg) {
5174                         ap->ability_match_cfg = rx_cfg_reg;
5175                         ap->ability_match = 0;
5176                         ap->ability_match_count = 0;
5177                 } else {
5178                         if (++ap->ability_match_count > 1) {
5179                                 ap->ability_match = 1;
5180                                 ap->ability_match_cfg = rx_cfg_reg;
5181                         }
5182                 }
5183                 if (rx_cfg_reg & ANEG_CFG_ACK)
5184                         ap->ack_match = 1;
5185                 else
5186                         ap->ack_match = 0;
5187
5188                 ap->idle_match = 0;
5189         } else {
5190                 ap->idle_match = 1;
5191                 ap->ability_match_cfg = 0;
5192                 ap->ability_match_count = 0;
5193                 ap->ability_match = 0;
5194                 ap->ack_match = 0;
5195
5196                 rx_cfg_reg = 0;
5197         }
5198
5199         ap->rxconfig = rx_cfg_reg;
5200         ret = ANEG_OK;
5201
5202         switch (ap->state) {
5203         case ANEG_STATE_UNKNOWN:
5204                 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
5205                         ap->state = ANEG_STATE_AN_ENABLE;
5206
5207                 fallthrough;
5208         case ANEG_STATE_AN_ENABLE:
5209                 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
5210                 if (ap->flags & MR_AN_ENABLE) {
5211                         ap->link_time = 0;
5212                         ap->cur_time = 0;
5213                         ap->ability_match_cfg = 0;
5214                         ap->ability_match_count = 0;
5215                         ap->ability_match = 0;
5216                         ap->idle_match = 0;
5217                         ap->ack_match = 0;
5218
5219                         ap->state = ANEG_STATE_RESTART_INIT;
5220                 } else {
5221                         ap->state = ANEG_STATE_DISABLE_LINK_OK;
5222                 }
5223                 break;
5224
5225         case ANEG_STATE_RESTART_INIT:
5226                 ap->link_time = ap->cur_time;
5227                 ap->flags &= ~(MR_NP_LOADED);
5228                 ap->txconfig = 0;
5229                 tw32(MAC_TX_AUTO_NEG, 0);
5230                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5231                 tw32_f(MAC_MODE, tp->mac_mode);
5232                 udelay(40);
5233
5234                 ret = ANEG_TIMER_ENAB;
5235                 ap->state = ANEG_STATE_RESTART;
5236
5237                 fallthrough;
5238         case ANEG_STATE_RESTART:
5239                 delta = ap->cur_time - ap->link_time;
5240                 if (delta > ANEG_STATE_SETTLE_TIME)
5241                         ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
5242                 else
5243                         ret = ANEG_TIMER_ENAB;
5244                 break;
5245
5246         case ANEG_STATE_DISABLE_LINK_OK:
5247                 ret = ANEG_DONE;
5248                 break;
5249
5250         case ANEG_STATE_ABILITY_DETECT_INIT:
5251                 ap->flags &= ~(MR_TOGGLE_TX);
5252                 ap->txconfig = ANEG_CFG_FD;
5253                 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5254                 if (flowctrl & ADVERTISE_1000XPAUSE)
5255                         ap->txconfig |= ANEG_CFG_PS1;
5256                 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5257                         ap->txconfig |= ANEG_CFG_PS2;
5258                 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5259                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5260                 tw32_f(MAC_MODE, tp->mac_mode);
5261                 udelay(40);
5262
5263                 ap->state = ANEG_STATE_ABILITY_DETECT;
5264                 break;
5265
5266         case ANEG_STATE_ABILITY_DETECT:
5267                 if (ap->ability_match != 0 && ap->rxconfig != 0)
5268                         ap->state = ANEG_STATE_ACK_DETECT_INIT;
5269                 break;
5270
5271         case ANEG_STATE_ACK_DETECT_INIT:
5272                 ap->txconfig |= ANEG_CFG_ACK;
5273                 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5274                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5275                 tw32_f(MAC_MODE, tp->mac_mode);
5276                 udelay(40);
5277
5278                 ap->state = ANEG_STATE_ACK_DETECT;
5279
5280                 fallthrough;
5281         case ANEG_STATE_ACK_DETECT:
5282                 if (ap->ack_match != 0) {
5283                         if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
5284                             (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
5285                                 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
5286                         } else {
5287                                 ap->state = ANEG_STATE_AN_ENABLE;
5288                         }
5289                 } else if (ap->ability_match != 0 &&
5290                            ap->rxconfig == 0) {
5291                         ap->state = ANEG_STATE_AN_ENABLE;
5292                 }
5293                 break;
5294
5295         case ANEG_STATE_COMPLETE_ACK_INIT:
5296                 if (ap->rxconfig & ANEG_CFG_INVAL) {
5297                         ret = ANEG_FAILED;
5298                         break;
5299                 }
5300                 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
5301                                MR_LP_ADV_HALF_DUPLEX |
5302                                MR_LP_ADV_SYM_PAUSE |
5303                                MR_LP_ADV_ASYM_PAUSE |
5304                                MR_LP_ADV_REMOTE_FAULT1 |
5305                                MR_LP_ADV_REMOTE_FAULT2 |
5306                                MR_LP_ADV_NEXT_PAGE |
5307                                MR_TOGGLE_RX |
5308                                MR_NP_RX);
5309                 if (ap->rxconfig & ANEG_CFG_FD)
5310                         ap->flags |= MR_LP_ADV_FULL_DUPLEX;
5311                 if (ap->rxconfig & ANEG_CFG_HD)
5312                         ap->flags |= MR_LP_ADV_HALF_DUPLEX;
5313                 if (ap->rxconfig & ANEG_CFG_PS1)
5314                         ap->flags |= MR_LP_ADV_SYM_PAUSE;
5315                 if (ap->rxconfig & ANEG_CFG_PS2)
5316                         ap->flags |= MR_LP_ADV_ASYM_PAUSE;
5317                 if (ap->rxconfig & ANEG_CFG_RF1)
5318                         ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
5319                 if (ap->rxconfig & ANEG_CFG_RF2)
5320                         ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
5321                 if (ap->rxconfig & ANEG_CFG_NP)
5322                         ap->flags |= MR_LP_ADV_NEXT_PAGE;
5323
5324                 ap->link_time = ap->cur_time;
5325
5326                 ap->flags ^= (MR_TOGGLE_TX);
5327                 if (ap->rxconfig & 0x0008)
5328                         ap->flags |= MR_TOGGLE_RX;
5329                 if (ap->rxconfig & ANEG_CFG_NP)
5330                         ap->flags |= MR_NP_RX;
5331                 ap->flags |= MR_PAGE_RX;
5332
5333                 ap->state = ANEG_STATE_COMPLETE_ACK;
5334                 ret = ANEG_TIMER_ENAB;
5335                 break;
5336
5337         case ANEG_STATE_COMPLETE_ACK:
5338                 if (ap->ability_match != 0 &&
5339                     ap->rxconfig == 0) {
5340                         ap->state = ANEG_STATE_AN_ENABLE;
5341                         break;
5342                 }
5343                 delta = ap->cur_time - ap->link_time;
5344                 if (delta > ANEG_STATE_SETTLE_TIME) {
5345                         if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
5346                                 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5347                         } else {
5348                                 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
5349                                     !(ap->flags & MR_NP_RX)) {
5350                                         ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5351                                 } else {
5352                                         ret = ANEG_FAILED;
5353                                 }
5354                         }
5355                 }
5356                 break;
5357
5358         case ANEG_STATE_IDLE_DETECT_INIT:
5359                 ap->link_time = ap->cur_time;
5360                 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5361                 tw32_f(MAC_MODE, tp->mac_mode);
5362                 udelay(40);
5363
5364                 ap->state = ANEG_STATE_IDLE_DETECT;
5365                 ret = ANEG_TIMER_ENAB;
5366                 break;
5367
5368         case ANEG_STATE_IDLE_DETECT:
5369                 if (ap->ability_match != 0 &&
5370                     ap->rxconfig == 0) {
5371                         ap->state = ANEG_STATE_AN_ENABLE;
5372                         break;
5373                 }
5374                 delta = ap->cur_time - ap->link_time;
5375                 if (delta > ANEG_STATE_SETTLE_TIME) {
5376                         /* XXX another gem from the Broadcom driver :( */
5377                         ap->state = ANEG_STATE_LINK_OK;
5378                 }
5379                 break;
5380
5381         case ANEG_STATE_LINK_OK:
5382                 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
5383                 ret = ANEG_DONE;
5384                 break;
5385
5386         case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
5387                 /* ??? unimplemented */
5388                 break;
5389
5390         case ANEG_STATE_NEXT_PAGE_WAIT:
5391                 /* ??? unimplemented */
5392                 break;
5393
5394         default:
5395                 ret = ANEG_FAILED;
5396                 break;
5397         }
5398
5399         return ret;
5400 }
5401
5402 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
5403 {
5404         int res = 0;
5405         struct tg3_fiber_aneginfo aninfo;
5406         int status = ANEG_FAILED;
5407         unsigned int tick;
5408         u32 tmp;
5409
5410         tw32_f(MAC_TX_AUTO_NEG, 0);
5411
5412         tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
5413         tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
5414         udelay(40);
5415
5416         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
5417         udelay(40);
5418
5419         memset(&aninfo, 0, sizeof(aninfo));
5420         aninfo.flags |= MR_AN_ENABLE;
5421         aninfo.state = ANEG_STATE_UNKNOWN;
5422         aninfo.cur_time = 0;
5423         tick = 0;
5424         while (++tick < 195000) {
5425                 status = tg3_fiber_aneg_smachine(tp, &aninfo);
5426                 if (status == ANEG_DONE || status == ANEG_FAILED)
5427                         break;
5428
5429                 udelay(1);
5430         }
5431
5432         tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5433         tw32_f(MAC_MODE, tp->mac_mode);
5434         udelay(40);
5435
5436         *txflags = aninfo.txconfig;
5437         *rxflags = aninfo.flags;
5438
5439         if (status == ANEG_DONE &&
5440             (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
5441                              MR_LP_ADV_FULL_DUPLEX)))
5442                 res = 1;
5443
5444         return res;
5445 }
5446
5447 static void tg3_init_bcm8002(struct tg3 *tp)
5448 {
5449         u32 mac_status = tr32(MAC_STATUS);
5450         int i;
5451
5452         /* Reset when initting first time or we have a link. */
5453         if (tg3_flag(tp, INIT_COMPLETE) &&
5454             !(mac_status & MAC_STATUS_PCS_SYNCED))
5455                 return;
5456
5457         /* Set PLL lock range. */
5458         tg3_writephy(tp, 0x16, 0x8007);
5459
5460         /* SW reset */
5461         tg3_writephy(tp, MII_BMCR, BMCR_RESET);
5462
5463         /* Wait for reset to complete. */
5464         /* XXX schedule_timeout() ... */
5465         for (i = 0; i < 500; i++)
5466                 udelay(10);
5467
5468         /* Config mode; select PMA/Ch 1 regs. */
5469         tg3_writephy(tp, 0x10, 0x8411);
5470
5471         /* Enable auto-lock and comdet, select txclk for tx. */
5472         tg3_writephy(tp, 0x11, 0x0a10);
5473
5474         tg3_writephy(tp, 0x18, 0x00a0);
5475         tg3_writephy(tp, 0x16, 0x41ff);
5476
5477         /* Assert and deassert POR. */
5478         tg3_writephy(tp, 0x13, 0x0400);
5479         udelay(40);
5480         tg3_writephy(tp, 0x13, 0x0000);
5481
5482         tg3_writephy(tp, 0x11, 0x0a50);
5483         udelay(40);
5484         tg3_writephy(tp, 0x11, 0x0a10);
5485
5486         /* Wait for signal to stabilize */
5487         /* XXX schedule_timeout() ... */
5488         for (i = 0; i < 15000; i++)
5489                 udelay(10);
5490
5491         /* Deselect the channel register so we can read the PHYID
5492          * later.
5493          */
5494         tg3_writephy(tp, 0x10, 0x8011);
5495 }
5496
5497 static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
5498 {
5499         u16 flowctrl;
5500         bool current_link_up;
5501         u32 sg_dig_ctrl, sg_dig_status;
5502         u32 serdes_cfg, expected_sg_dig_ctrl;
5503         int workaround, port_a;
5504
5505         serdes_cfg = 0;
5506         workaround = 0;
5507         port_a = 1;
5508         current_link_up = false;
5509
5510         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 &&
5511             tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) {
5512                 workaround = 1;
5513                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
5514                         port_a = 0;
5515
5516                 /* preserve bits 0-11,13,14 for signal pre-emphasis */
5517                 /* preserve bits 20-23 for voltage regulator */
5518                 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
5519         }
5520
5521         sg_dig_ctrl = tr32(SG_DIG_CTRL);
5522
5523         if (tp->link_config.autoneg != AUTONEG_ENABLE) {
5524                 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
5525                         if (workaround) {
5526                                 u32 val = serdes_cfg;
5527
5528                                 if (port_a)
5529                                         val |= 0xc010000;
5530                                 else
5531                                         val |= 0x4010000;
5532                                 tw32_f(MAC_SERDES_CFG, val);
5533                         }
5534
5535                         tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5536                 }
5537                 if (mac_status & MAC_STATUS_PCS_SYNCED) {
5538                         tg3_setup_flow_control(tp, 0, 0);
5539                         current_link_up = true;
5540                 }
5541                 goto out;
5542         }
5543
5544         /* Want auto-negotiation.  */
5545         expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
5546
5547         flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5548         if (flowctrl & ADVERTISE_1000XPAUSE)
5549                 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
5550         if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5551                 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
5552
5553         if (sg_dig_ctrl != expected_sg_dig_ctrl) {
5554                 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
5555                     tp->serdes_counter &&
5556                     ((mac_status & (MAC_STATUS_PCS_SYNCED |
5557                                     MAC_STATUS_RCVD_CFG)) ==
5558                      MAC_STATUS_PCS_SYNCED)) {
5559                         tp->serdes_counter--;
5560                         current_link_up = true;
5561                         goto out;
5562                 }
5563 restart_autoneg:
5564                 if (workaround)
5565                         tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
5566                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
5567                 udelay(5);
5568                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
5569
5570                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5571                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5572         } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
5573                                  MAC_STATUS_SIGNAL_DET)) {
5574                 sg_dig_status = tr32(SG_DIG_STATUS);
5575                 mac_status = tr32(MAC_STATUS);
5576
5577                 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
5578                     (mac_status & MAC_STATUS_PCS_SYNCED)) {
5579                         u32 local_adv = 0, remote_adv = 0;
5580
5581                         if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
5582                                 local_adv |= ADVERTISE_1000XPAUSE;
5583                         if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
5584                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5585
5586                         if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
5587                                 remote_adv |= LPA_1000XPAUSE;
5588                         if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
5589                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5590
5591                         tp->link_config.rmt_adv =
5592                                            mii_adv_to_ethtool_adv_x(remote_adv);
5593
5594                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5595                         current_link_up = true;
5596                         tp->serdes_counter = 0;
5597                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5598                 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
5599                         if (tp->serdes_counter)
5600                                 tp->serdes_counter--;
5601                         else {
5602                                 if (workaround) {
5603                                         u32 val = serdes_cfg;
5604
5605                                         if (port_a)
5606                                                 val |= 0xc010000;
5607                                         else
5608                                                 val |= 0x4010000;
5609
5610                                         tw32_f(MAC_SERDES_CFG, val);
5611                                 }
5612
5613                                 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5614                                 udelay(40);
5615
5616                                 /* Link parallel detection - link is up */
5617                                 /* only if we have PCS_SYNC and not */
5618                                 /* receiving config code words */
5619                                 mac_status = tr32(MAC_STATUS);
5620                                 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5621                                     !(mac_status & MAC_STATUS_RCVD_CFG)) {
5622                                         tg3_setup_flow_control(tp, 0, 0);
5623                                         current_link_up = true;
5624                                         tp->phy_flags |=
5625                                                 TG3_PHYFLG_PARALLEL_DETECT;
5626                                         tp->serdes_counter =
5627                                                 SERDES_PARALLEL_DET_TIMEOUT;
5628                                 } else
5629                                         goto restart_autoneg;
5630                         }
5631                 }
5632         } else {
5633                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5634                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5635         }
5636
5637 out:
5638         return current_link_up;
5639 }
5640
5641 static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5642 {
5643         bool current_link_up = false;
5644
5645         if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5646                 goto out;
5647
5648         if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5649                 u32 txflags, rxflags;
5650                 int i;
5651
5652                 if (fiber_autoneg(tp, &txflags, &rxflags)) {
5653                         u32 local_adv = 0, remote_adv = 0;
5654
5655                         if (txflags & ANEG_CFG_PS1)
5656                                 local_adv |= ADVERTISE_1000XPAUSE;
5657                         if (txflags & ANEG_CFG_PS2)
5658                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5659
5660                         if (rxflags & MR_LP_ADV_SYM_PAUSE)
5661                                 remote_adv |= LPA_1000XPAUSE;
5662                         if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5663                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5664
5665                         tp->link_config.rmt_adv =
5666                                            mii_adv_to_ethtool_adv_x(remote_adv);
5667
5668                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5669
5670                         current_link_up = true;
5671                 }
5672                 for (i = 0; i < 30; i++) {
5673                         udelay(20);
5674                         tw32_f(MAC_STATUS,
5675                                (MAC_STATUS_SYNC_CHANGED |
5676                                 MAC_STATUS_CFG_CHANGED));
5677                         udelay(40);
5678                         if ((tr32(MAC_STATUS) &
5679                              (MAC_STATUS_SYNC_CHANGED |
5680                               MAC_STATUS_CFG_CHANGED)) == 0)
5681                                 break;
5682                 }
5683
5684                 mac_status = tr32(MAC_STATUS);
5685                 if (!current_link_up &&
5686                     (mac_status & MAC_STATUS_PCS_SYNCED) &&
5687                     !(mac_status & MAC_STATUS_RCVD_CFG))
5688                         current_link_up = true;
5689         } else {
5690                 tg3_setup_flow_control(tp, 0, 0);
5691
5692                 /* Forcing 1000FD link up. */
5693                 current_link_up = true;
5694
5695                 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5696                 udelay(40);
5697
5698                 tw32_f(MAC_MODE, tp->mac_mode);
5699                 udelay(40);
5700         }
5701
5702 out:
5703         return current_link_up;
5704 }
5705
5706 static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
5707 {
5708         u32 orig_pause_cfg;
5709         u32 orig_active_speed;
5710         u8 orig_active_duplex;
5711         u32 mac_status;
5712         bool current_link_up;
5713         int i;
5714
5715         orig_pause_cfg = tp->link_config.active_flowctrl;
5716         orig_active_speed = tp->link_config.active_speed;
5717         orig_active_duplex = tp->link_config.active_duplex;
5718
5719         if (!tg3_flag(tp, HW_AUTONEG) &&
5720             tp->link_up &&
5721             tg3_flag(tp, INIT_COMPLETE)) {
5722                 mac_status = tr32(MAC_STATUS);
5723                 mac_status &= (MAC_STATUS_PCS_SYNCED |
5724                                MAC_STATUS_SIGNAL_DET |
5725                                MAC_STATUS_CFG_CHANGED |
5726                                MAC_STATUS_RCVD_CFG);
5727                 if (mac_status == (MAC_STATUS_PCS_SYNCED |
5728                                    MAC_STATUS_SIGNAL_DET)) {
5729                         tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5730                                             MAC_STATUS_CFG_CHANGED));
5731                         return 0;
5732                 }
5733         }
5734
5735         tw32_f(MAC_TX_AUTO_NEG, 0);
5736
5737         tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5738         tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5739         tw32_f(MAC_MODE, tp->mac_mode);
5740         udelay(40);
5741
5742         if (tp->phy_id == TG3_PHY_ID_BCM8002)
5743                 tg3_init_bcm8002(tp);
5744
5745         /* Enable link change event even when serdes polling.  */
5746         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5747         udelay(40);
5748
5749         tp->link_config.rmt_adv = 0;
5750         mac_status = tr32(MAC_STATUS);
5751
5752         if (tg3_flag(tp, HW_AUTONEG))
5753                 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5754         else
5755                 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5756
5757         tp->napi[0].hw_status->status =
5758                 (SD_STATUS_UPDATED |
5759                  (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5760
5761         for (i = 0; i < 100; i++) {
5762                 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5763                                     MAC_STATUS_CFG_CHANGED));
5764                 udelay(5);
5765                 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5766                                          MAC_STATUS_CFG_CHANGED |
5767                                          MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5768                         break;
5769         }
5770
5771         mac_status = tr32(MAC_STATUS);
5772         if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5773                 current_link_up = false;
5774                 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5775                     tp->serdes_counter == 0) {
5776                         tw32_f(MAC_MODE, (tp->mac_mode |
5777                                           MAC_MODE_SEND_CONFIGS));
5778                         udelay(1);
5779                         tw32_f(MAC_MODE, tp->mac_mode);
5780                 }
5781         }
5782
5783         if (current_link_up) {
5784                 tp->link_config.active_speed = SPEED_1000;
5785                 tp->link_config.active_duplex = DUPLEX_FULL;
5786                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5787                                     LED_CTRL_LNKLED_OVERRIDE |
5788                                     LED_CTRL_1000MBPS_ON));
5789         } else {
5790                 tp->link_config.active_speed = SPEED_UNKNOWN;
5791                 tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5792                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5793                                     LED_CTRL_LNKLED_OVERRIDE |
5794                                     LED_CTRL_TRAFFIC_OVERRIDE));
5795         }
5796
5797         if (!tg3_test_and_report_link_chg(tp, current_link_up)) {
5798                 u32 now_pause_cfg = tp->link_config.active_flowctrl;
5799                 if (orig_pause_cfg != now_pause_cfg ||
5800                     orig_active_speed != tp->link_config.active_speed ||
5801                     orig_active_duplex != tp->link_config.active_duplex)
5802                         tg3_link_report(tp);
5803         }
5804
5805         return 0;
5806 }
5807
5808 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)
5809 {
5810         int err = 0;
5811         u32 bmsr, bmcr;
5812         u32 current_speed = SPEED_UNKNOWN;
5813         u8 current_duplex = DUPLEX_UNKNOWN;
5814         bool current_link_up = false;
5815         u32 local_adv, remote_adv, sgsr;
5816
5817         if ((tg3_asic_rev(tp) == ASIC_REV_5719 ||
5818              tg3_asic_rev(tp) == ASIC_REV_5720) &&
5819              !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) &&
5820              (sgsr & SERDES_TG3_SGMII_MODE)) {
5821
5822                 if (force_reset)
5823                         tg3_phy_reset(tp);
5824
5825                 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
5826
5827                 if (!(sgsr & SERDES_TG3_LINK_UP)) {
5828                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5829                 } else {
5830                         current_link_up = true;
5831                         if (sgsr & SERDES_TG3_SPEED_1000) {
5832                                 current_speed = SPEED_1000;
5833                                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5834                         } else if (sgsr & SERDES_TG3_SPEED_100) {
5835                                 current_speed = SPEED_100;
5836                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5837                         } else {
5838                                 current_speed = SPEED_10;
5839                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5840                         }
5841
5842                         if (sgsr & SERDES_TG3_FULL_DUPLEX)
5843                                 current_duplex = DUPLEX_FULL;
5844                         else
5845                                 current_duplex = DUPLEX_HALF;
5846                 }
5847
5848                 tw32_f(MAC_MODE, tp->mac_mode);
5849                 udelay(40);
5850
5851                 tg3_clear_mac_status(tp);
5852
5853                 goto fiber_setup_done;
5854         }
5855
5856         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5857         tw32_f(MAC_MODE, tp->mac_mode);
5858         udelay(40);
5859
5860         tg3_clear_mac_status(tp);
5861
5862         if (force_reset)
5863                 tg3_phy_reset(tp);
5864
5865         tp->link_config.rmt_adv = 0;
5866
5867         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5868         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5869         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5870                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5871                         bmsr |= BMSR_LSTATUS;
5872                 else
5873                         bmsr &= ~BMSR_LSTATUS;
5874         }
5875
5876         err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5877
5878         if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5879             (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5880                 /* do nothing, just check for link up at the end */
5881         } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5882                 u32 adv, newadv;
5883
5884                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5885                 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5886                                  ADVERTISE_1000XPAUSE |
5887                                  ADVERTISE_1000XPSE_ASYM |
5888                                  ADVERTISE_SLCT);
5889
5890                 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5891                 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5892
5893                 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5894                         tg3_writephy(tp, MII_ADVERTISE, newadv);
5895                         bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5896                         tg3_writephy(tp, MII_BMCR, bmcr);
5897
5898                         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5899                         tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5900                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5901
5902                         return err;
5903                 }
5904         } else {
5905                 u32 new_bmcr;
5906
5907                 bmcr &= ~BMCR_SPEED1000;
5908                 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5909
5910                 if (tp->link_config.duplex == DUPLEX_FULL)
5911                         new_bmcr |= BMCR_FULLDPLX;
5912
5913                 if (new_bmcr != bmcr) {
5914                         /* BMCR_SPEED1000 is a reserved bit that needs
5915                          * to be set on write.
5916                          */
5917                         new_bmcr |= BMCR_SPEED1000;
5918
5919                         /* Force a linkdown */
5920                         if (tp->link_up) {
5921                                 u32 adv;
5922
5923                                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5924                                 adv &= ~(ADVERTISE_1000XFULL |
5925                                          ADVERTISE_1000XHALF |
5926                                          ADVERTISE_SLCT);
5927                                 tg3_writephy(tp, MII_ADVERTISE, adv);
5928                                 tg3_writephy(tp, MII_BMCR, bmcr |
5929                                                            BMCR_ANRESTART |
5930                                                            BMCR_ANENABLE);
5931                                 udelay(10);
5932                                 tg3_carrier_off(tp);
5933                         }
5934                         tg3_writephy(tp, MII_BMCR, new_bmcr);
5935                         bmcr = new_bmcr;
5936                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5937                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5938                         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5939                                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5940                                         bmsr |= BMSR_LSTATUS;
5941                                 else
5942                                         bmsr &= ~BMSR_LSTATUS;
5943                         }
5944                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5945                 }
5946         }
5947
5948         if (bmsr & BMSR_LSTATUS) {
5949                 current_speed = SPEED_1000;
5950                 current_link_up = true;
5951                 if (bmcr & BMCR_FULLDPLX)
5952                         current_duplex = DUPLEX_FULL;
5953                 else
5954                         current_duplex = DUPLEX_HALF;
5955
5956                 local_adv = 0;
5957                 remote_adv = 0;
5958
5959                 if (bmcr & BMCR_ANENABLE) {
5960                         u32 common;
5961
5962                         err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5963                         err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5964                         common = local_adv & remote_adv;
5965                         if (common & (ADVERTISE_1000XHALF |
5966                                       ADVERTISE_1000XFULL)) {
5967                                 if (common & ADVERTISE_1000XFULL)
5968                                         current_duplex = DUPLEX_FULL;
5969                                 else
5970                                         current_duplex = DUPLEX_HALF;
5971
5972                                 tp->link_config.rmt_adv =
5973                                            mii_adv_to_ethtool_adv_x(remote_adv);
5974                         } else if (!tg3_flag(tp, 5780_CLASS)) {
5975                                 /* Link is up via parallel detect */
5976                         } else {
5977                                 current_link_up = false;
5978                         }
5979                 }
5980         }
5981
5982 fiber_setup_done:
5983         if (current_link_up && current_duplex == DUPLEX_FULL)
5984                 tg3_setup_flow_control(tp, local_adv, remote_adv);
5985
5986         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5987         if (tp->link_config.active_duplex == DUPLEX_HALF)
5988                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5989
5990         tw32_f(MAC_MODE, tp->mac_mode);
5991         udelay(40);
5992
5993         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5994
5995         tp->link_config.active_speed = current_speed;
5996         tp->link_config.active_duplex = current_duplex;
5997
5998         tg3_test_and_report_link_chg(tp, current_link_up);
5999         return err;
6000 }
6001
6002 static void tg3_serdes_parallel_detect(struct tg3 *tp)
6003 {
6004         if (tp->serdes_counter) {
6005                 /* Give autoneg time to complete. */
6006                 tp->serdes_counter--;
6007                 return;
6008         }
6009
6010         if (!tp->link_up &&
6011             (tp->link_config.autoneg == AUTONEG_ENABLE)) {
6012                 u32 bmcr;
6013
6014                 tg3_readphy(tp, MII_BMCR, &bmcr);
6015                 if (bmcr & BMCR_ANENABLE) {
6016                         u32 phy1, phy2;
6017
6018                         /* Select shadow register 0x1f */
6019                         tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
6020                         tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
6021
6022                         /* Select expansion interrupt status register */
6023                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6024                                          MII_TG3_DSP_EXP1_INT_STAT);
6025                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6026                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6027
6028                         if ((phy1 & 0x10) && !(phy2 & 0x20)) {
6029                                 /* We have signal detect and not receiving
6030                                  * config code words, link is up by parallel
6031                                  * detection.
6032                                  */
6033
6034                                 bmcr &= ~BMCR_ANENABLE;
6035                                 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
6036                                 tg3_writephy(tp, MII_BMCR, bmcr);
6037                                 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
6038                         }
6039                 }
6040         } else if (tp->link_up &&
6041                    (tp->link_config.autoneg == AUTONEG_ENABLE) &&
6042                    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
6043                 u32 phy2;
6044
6045                 /* Select expansion interrupt status register */
6046                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6047                                  MII_TG3_DSP_EXP1_INT_STAT);
6048                 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6049                 if (phy2 & 0x20) {
6050                         u32 bmcr;
6051
6052                         /* Config code words received, turn on autoneg. */
6053                         tg3_readphy(tp, MII_BMCR, &bmcr);
6054                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
6055
6056                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
6057
6058                 }
6059         }
6060 }
6061
6062 static int tg3_setup_phy(struct tg3 *tp, bool force_reset)
6063 {
6064         u32 val;
6065         int err;
6066
6067         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
6068                 err = tg3_setup_fiber_phy(tp, force_reset);
6069         else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
6070                 err = tg3_setup_fiber_mii_phy(tp, force_reset);
6071         else
6072                 err = tg3_setup_copper_phy(tp, force_reset);
6073
6074         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
6075                 u32 scale;
6076
6077                 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
6078                 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
6079                         scale = 65;
6080                 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
6081                         scale = 6;
6082                 else
6083                         scale = 12;
6084
6085                 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
6086                 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
6087                 tw32(GRC_MISC_CFG, val);
6088         }
6089
6090         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6091               (6 << TX_LENGTHS_IPG_SHIFT);
6092         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
6093             tg3_asic_rev(tp) == ASIC_REV_5762)
6094                 val |= tr32(MAC_TX_LENGTHS) &
6095                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
6096                         TX_LENGTHS_CNT_DWN_VAL_MSK);
6097
6098         if (tp->link_config.active_speed == SPEED_1000 &&
6099             tp->link_config.active_duplex == DUPLEX_HALF)
6100                 tw32(MAC_TX_LENGTHS, val |
6101                      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
6102         else
6103                 tw32(MAC_TX_LENGTHS, val |
6104                      (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6105
6106         if (!tg3_flag(tp, 5705_PLUS)) {
6107                 if (tp->link_up) {
6108                         tw32(HOSTCC_STAT_COAL_TICKS,
6109                              tp->coal.stats_block_coalesce_usecs);
6110                 } else {
6111                         tw32(HOSTCC_STAT_COAL_TICKS, 0);
6112                 }
6113         }
6114
6115         if (tg3_flag(tp, ASPM_WORKAROUND)) {
6116                 val = tr32(PCIE_PWR_MGMT_THRESH);
6117                 if (!tp->link_up)
6118                         val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
6119                               tp->pwrmgmt_thresh;
6120                 else
6121                         val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
6122                 tw32(PCIE_PWR_MGMT_THRESH, val);
6123         }
6124
6125         return err;
6126 }
6127
6128 /* tp->lock must be held */
6129 static u64 tg3_refclk_read(struct tg3 *tp, struct ptp_system_timestamp *sts)
6130 {
6131         u64 stamp;
6132
6133         ptp_read_system_prets(sts);
6134         stamp = tr32(TG3_EAV_REF_CLCK_LSB);
6135         ptp_read_system_postts(sts);
6136         stamp |= (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32;
6137
6138         return stamp;
6139 }
6140
6141 /* tp->lock must be held */
6142 static void tg3_refclk_write(struct tg3 *tp, u64 newval)
6143 {
6144         u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6145
6146         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP);
6147         tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff);
6148         tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32);
6149         tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME);
6150 }
6151
6152 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync);
6153 static inline void tg3_full_unlock(struct tg3 *tp);
6154 static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
6155 {
6156         struct tg3 *tp = netdev_priv(dev);
6157
6158         info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
6159                                 SOF_TIMESTAMPING_RX_SOFTWARE |
6160                                 SOF_TIMESTAMPING_SOFTWARE;
6161
6162         if (tg3_flag(tp, PTP_CAPABLE)) {
6163                 info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE |
6164                                         SOF_TIMESTAMPING_RX_HARDWARE |
6165                                         SOF_TIMESTAMPING_RAW_HARDWARE;
6166         }
6167
6168         if (tp->ptp_clock)
6169                 info->phc_index = ptp_clock_index(tp->ptp_clock);
6170         else
6171                 info->phc_index = -1;
6172
6173         info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
6174
6175         info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
6176                            (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
6177                            (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
6178                            (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
6179         return 0;
6180 }
6181
6182 static int tg3_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
6183 {
6184         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6185         u64 correction;
6186         bool neg_adj;
6187
6188         /* Frequency adjustment is performed using hardware with a 24 bit
6189          * accumulator and a programmable correction value. On each clk, the
6190          * correction value gets added to the accumulator and when it
6191          * overflows, the time counter is incremented/decremented.
6192          */
6193         neg_adj = diff_by_scaled_ppm(1 << 24, scaled_ppm, &correction);
6194
6195         tg3_full_lock(tp, 0);
6196
6197         if (correction)
6198                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
6199                      TG3_EAV_REF_CLK_CORRECT_EN |
6200                      (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) |
6201                      ((u32)correction & TG3_EAV_REF_CLK_CORRECT_MASK));
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_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts,
6222                             struct ptp_system_timestamp *sts)
6223 {
6224         u64 ns;
6225         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6226
6227         tg3_full_lock(tp, 0);
6228         ns = tg3_refclk_read(tp, sts);
6229         ns += tp->ptp_adjust;
6230         tg3_full_unlock(tp);
6231
6232         *ts = ns_to_timespec64(ns);
6233
6234         return 0;
6235 }
6236
6237 static int tg3_ptp_settime(struct ptp_clock_info *ptp,
6238                            const struct timespec64 *ts)
6239 {
6240         u64 ns;
6241         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6242
6243         ns = timespec64_to_ns(ts);
6244
6245         tg3_full_lock(tp, 0);
6246         tg3_refclk_write(tp, ns);
6247         tp->ptp_adjust = 0;
6248         tg3_full_unlock(tp);
6249
6250         return 0;
6251 }
6252
6253 static int tg3_ptp_enable(struct ptp_clock_info *ptp,
6254                           struct ptp_clock_request *rq, int on)
6255 {
6256         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6257         u32 clock_ctl;
6258         int rval = 0;
6259
6260         switch (rq->type) {
6261         case PTP_CLK_REQ_PEROUT:
6262                 /* Reject requests with unsupported flags */
6263                 if (rq->perout.flags)
6264                         return -EOPNOTSUPP;
6265
6266                 if (rq->perout.index != 0)
6267                         return -EINVAL;
6268
6269                 tg3_full_lock(tp, 0);
6270                 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6271                 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK;
6272
6273                 if (on) {
6274                         u64 nsec;
6275
6276                         nsec = rq->perout.start.sec * 1000000000ULL +
6277                                rq->perout.start.nsec;
6278
6279                         if (rq->perout.period.sec || rq->perout.period.nsec) {
6280                                 netdev_warn(tp->dev,
6281                                             "Device supports only a one-shot timesync output, period must be 0\n");
6282                                 rval = -EINVAL;
6283                                 goto err_out;
6284                         }
6285
6286                         if (nsec & (1ULL << 63)) {
6287                                 netdev_warn(tp->dev,
6288                                             "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n");
6289                                 rval = -EINVAL;
6290                                 goto err_out;
6291                         }
6292
6293                         tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff));
6294                         tw32(TG3_EAV_WATCHDOG0_MSB,
6295                              TG3_EAV_WATCHDOG0_EN |
6296                              ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK));
6297
6298                         tw32(TG3_EAV_REF_CLCK_CTL,
6299                              clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0);
6300                 } else {
6301                         tw32(TG3_EAV_WATCHDOG0_MSB, 0);
6302                         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl);
6303                 }
6304
6305 err_out:
6306                 tg3_full_unlock(tp);
6307                 return rval;
6308
6309         default:
6310                 break;
6311         }
6312
6313         return -EOPNOTSUPP;
6314 }
6315
6316 static const struct ptp_clock_info tg3_ptp_caps = {
6317         .owner          = THIS_MODULE,
6318         .name           = "tg3 clock",
6319         .max_adj        = 250000000,
6320         .n_alarm        = 0,
6321         .n_ext_ts       = 0,
6322         .n_per_out      = 1,
6323         .n_pins         = 0,
6324         .pps            = 0,
6325         .adjfine        = tg3_ptp_adjfine,
6326         .adjtime        = tg3_ptp_adjtime,
6327         .gettimex64     = tg3_ptp_gettimex,
6328         .settime64      = tg3_ptp_settime,
6329         .enable         = tg3_ptp_enable,
6330 };
6331
6332 static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
6333                                      struct skb_shared_hwtstamps *timestamp)
6334 {
6335         memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
6336         timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
6337                                            tp->ptp_adjust);
6338 }
6339
6340 /* tp->lock must be held */
6341 static void tg3_ptp_init(struct tg3 *tp)
6342 {
6343         if (!tg3_flag(tp, PTP_CAPABLE))
6344                 return;
6345
6346         /* Initialize the hardware clock to the system time. */
6347         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
6348         tp->ptp_adjust = 0;
6349         tp->ptp_info = tg3_ptp_caps;
6350 }
6351
6352 /* tp->lock must be held */
6353 static void tg3_ptp_resume(struct tg3 *tp)
6354 {
6355         if (!tg3_flag(tp, PTP_CAPABLE))
6356                 return;
6357
6358         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
6359         tp->ptp_adjust = 0;
6360 }
6361
6362 static void tg3_ptp_fini(struct tg3 *tp)
6363 {
6364         if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
6365                 return;
6366
6367         ptp_clock_unregister(tp->ptp_clock);
6368         tp->ptp_clock = NULL;
6369         tp->ptp_adjust = 0;
6370 }
6371
6372 static inline int tg3_irq_sync(struct tg3 *tp)
6373 {
6374         return tp->irq_sync;
6375 }
6376
6377 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
6378 {
6379         int i;
6380
6381         dst = (u32 *)((u8 *)dst + off);
6382         for (i = 0; i < len; i += sizeof(u32))
6383                 *dst++ = tr32(off + i);
6384 }
6385
6386 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
6387 {
6388         tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
6389         tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
6390         tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
6391         tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
6392         tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
6393         tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
6394         tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
6395         tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
6396         tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
6397         tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
6398         tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
6399         tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
6400         tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
6401         tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
6402         tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
6403         tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
6404         tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
6405         tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
6406         tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
6407
6408         if (tg3_flag(tp, SUPPORT_MSIX))
6409                 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
6410
6411         tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
6412         tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
6413         tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
6414         tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
6415         tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
6416         tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
6417         tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
6418         tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
6419
6420         if (!tg3_flag(tp, 5705_PLUS)) {
6421                 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
6422                 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
6423                 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
6424         }
6425
6426         tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
6427         tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
6428         tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
6429         tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
6430         tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
6431
6432         if (tg3_flag(tp, NVRAM))
6433                 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
6434 }
6435
6436 static void tg3_dump_state(struct tg3 *tp)
6437 {
6438         int i;
6439         u32 *regs;
6440
6441         regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
6442         if (!regs)
6443                 return;
6444
6445         if (tg3_flag(tp, PCI_EXPRESS)) {
6446                 /* Read up to but not including private PCI registers */
6447                 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
6448                         regs[i / sizeof(u32)] = tr32(i);
6449         } else
6450                 tg3_dump_legacy_regs(tp, regs);
6451
6452         for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
6453                 if (!regs[i + 0] && !regs[i + 1] &&
6454                     !regs[i + 2] && !regs[i + 3])
6455                         continue;
6456
6457                 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
6458                            i * 4,
6459                            regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
6460         }
6461
6462         kfree(regs);
6463
6464         for (i = 0; i < tp->irq_cnt; i++) {
6465                 struct tg3_napi *tnapi = &tp->napi[i];
6466
6467                 /* SW status block */
6468                 netdev_err(tp->dev,
6469                          "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6470                            i,
6471                            tnapi->hw_status->status,
6472                            tnapi->hw_status->status_tag,
6473                            tnapi->hw_status->rx_jumbo_consumer,
6474                            tnapi->hw_status->rx_consumer,
6475                            tnapi->hw_status->rx_mini_consumer,
6476                            tnapi->hw_status->idx[0].rx_producer,
6477                            tnapi->hw_status->idx[0].tx_consumer);
6478
6479                 netdev_err(tp->dev,
6480                 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
6481                            i,
6482                            tnapi->last_tag, tnapi->last_irq_tag,
6483                            tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
6484                            tnapi->rx_rcb_ptr,
6485                            tnapi->prodring.rx_std_prod_idx,
6486                            tnapi->prodring.rx_std_cons_idx,
6487                            tnapi->prodring.rx_jmb_prod_idx,
6488                            tnapi->prodring.rx_jmb_cons_idx);
6489         }
6490 }
6491
6492 /* This is called whenever we suspect that the system chipset is re-
6493  * ordering the sequence of MMIO to the tx send mailbox. The symptom
6494  * is bogus tx completions. We try to recover by setting the
6495  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
6496  * in the workqueue.
6497  */
6498 static void tg3_tx_recover(struct tg3 *tp)
6499 {
6500         BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
6501                tp->write32_tx_mbox == tg3_write_indirect_mbox);
6502
6503         netdev_warn(tp->dev,
6504                     "The system may be re-ordering memory-mapped I/O "
6505                     "cycles to the network device, attempting to recover. "
6506                     "Please report the problem to the driver maintainer "
6507                     "and include system chipset information.\n");
6508
6509         tg3_flag_set(tp, TX_RECOVERY_PENDING);
6510 }
6511
6512 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
6513 {
6514         /* Tell compiler to fetch tx indices from memory. */
6515         barrier();
6516         return tnapi->tx_pending -
6517                ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
6518 }
6519
6520 /* Tigon3 never reports partial packet sends.  So we do not
6521  * need special logic to handle SKBs that have not had all
6522  * of their frags sent yet, like SunGEM does.
6523  */
6524 static void tg3_tx(struct tg3_napi *tnapi)
6525 {
6526         struct tg3 *tp = tnapi->tp;
6527         u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
6528         u32 sw_idx = tnapi->tx_cons;
6529         struct netdev_queue *txq;
6530         int index = tnapi - tp->napi;
6531         unsigned int pkts_compl = 0, bytes_compl = 0;
6532
6533         if (tg3_flag(tp, ENABLE_TSS))
6534                 index--;
6535
6536         txq = netdev_get_tx_queue(tp->dev, index);
6537
6538         while (sw_idx != hw_idx) {
6539                 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
6540                 struct sk_buff *skb = ri->skb;
6541                 int i, tx_bug = 0;
6542
6543                 if (unlikely(skb == NULL)) {
6544                         tg3_tx_recover(tp);
6545                         return;
6546                 }
6547
6548                 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
6549                         struct skb_shared_hwtstamps timestamp;
6550                         u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
6551                         hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
6552
6553                         tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
6554
6555                         skb_tstamp_tx(skb, &timestamp);
6556                 }
6557
6558                 dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping),
6559                                  skb_headlen(skb), DMA_TO_DEVICE);
6560
6561                 ri->skb = NULL;
6562
6563                 while (ri->fragmented) {
6564                         ri->fragmented = false;
6565                         sw_idx = NEXT_TX(sw_idx);
6566                         ri = &tnapi->tx_buffers[sw_idx];
6567                 }
6568
6569                 sw_idx = NEXT_TX(sw_idx);
6570
6571                 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
6572                         ri = &tnapi->tx_buffers[sw_idx];
6573                         if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
6574                                 tx_bug = 1;
6575
6576                         dma_unmap_page(&tp->pdev->dev,
6577                                        dma_unmap_addr(ri, mapping),
6578                                        skb_frag_size(&skb_shinfo(skb)->frags[i]),
6579                                        DMA_TO_DEVICE);
6580
6581                         while (ri->fragmented) {
6582                                 ri->fragmented = false;
6583                                 sw_idx = NEXT_TX(sw_idx);
6584                                 ri = &tnapi->tx_buffers[sw_idx];
6585                         }
6586
6587                         sw_idx = NEXT_TX(sw_idx);
6588                 }
6589
6590                 pkts_compl++;
6591                 bytes_compl += skb->len;
6592
6593                 dev_consume_skb_any(skb);
6594
6595                 if (unlikely(tx_bug)) {
6596                         tg3_tx_recover(tp);
6597                         return;
6598                 }
6599         }
6600
6601         netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
6602
6603         tnapi->tx_cons = sw_idx;
6604
6605         /* Need to make the tx_cons update visible to tg3_start_xmit()
6606          * before checking for netif_queue_stopped().  Without the
6607          * memory barrier, there is a small possibility that tg3_start_xmit()
6608          * will miss it and cause the queue to be stopped forever.
6609          */
6610         smp_mb();
6611
6612         if (unlikely(netif_tx_queue_stopped(txq) &&
6613                      (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
6614                 __netif_tx_lock(txq, smp_processor_id());
6615                 if (netif_tx_queue_stopped(txq) &&
6616                     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
6617                         netif_tx_wake_queue(txq);
6618                 __netif_tx_unlock(txq);
6619         }
6620 }
6621
6622 static void tg3_frag_free(bool is_frag, void *data)
6623 {
6624         if (is_frag)
6625                 skb_free_frag(data);
6626         else
6627                 kfree(data);
6628 }
6629
6630 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
6631 {
6632         unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
6633                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6634
6635         if (!ri->data)
6636                 return;
6637
6638         dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), map_sz,
6639                          DMA_FROM_DEVICE);
6640         tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
6641         ri->data = NULL;
6642 }
6643
6644
6645 /* Returns size of skb allocated or < 0 on error.
6646  *
6647  * We only need to fill in the address because the other members
6648  * of the RX descriptor are invariant, see tg3_init_rings.
6649  *
6650  * Note the purposeful assymetry of cpu vs. chip accesses.  For
6651  * posting buffers we only dirty the first cache line of the RX
6652  * descriptor (containing the address).  Whereas for the RX status
6653  * buffers the cpu only reads the last cacheline of the RX descriptor
6654  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6655  */
6656 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6657                              u32 opaque_key, u32 dest_idx_unmasked,
6658                              unsigned int *frag_size)
6659 {
6660         struct tg3_rx_buffer_desc *desc;
6661         struct ring_info *map;
6662         u8 *data;
6663         dma_addr_t mapping;
6664         int skb_size, data_size, dest_idx;
6665
6666         switch (opaque_key) {
6667         case RXD_OPAQUE_RING_STD:
6668                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6669                 desc = &tpr->rx_std[dest_idx];
6670                 map = &tpr->rx_std_buffers[dest_idx];
6671                 data_size = tp->rx_pkt_map_sz;
6672                 break;
6673
6674         case RXD_OPAQUE_RING_JUMBO:
6675                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6676                 desc = &tpr->rx_jmb[dest_idx].std;
6677                 map = &tpr->rx_jmb_buffers[dest_idx];
6678                 data_size = TG3_RX_JMB_MAP_SZ;
6679                 break;
6680
6681         default:
6682                 return -EINVAL;
6683         }
6684
6685         /* Do not overwrite any of the map or rp information
6686          * until we are sure we can commit to a new buffer.
6687          *
6688          * Callers depend upon this behavior and assume that
6689          * we leave everything unchanged if we fail.
6690          */
6691         skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6692                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6693         if (skb_size <= PAGE_SIZE) {
6694                 data = napi_alloc_frag(skb_size);
6695                 *frag_size = skb_size;
6696         } else {
6697                 data = kmalloc(skb_size, GFP_ATOMIC);
6698                 *frag_size = 0;
6699         }
6700         if (!data)
6701                 return -ENOMEM;
6702
6703         mapping = dma_map_single(&tp->pdev->dev, data + TG3_RX_OFFSET(tp),
6704                                  data_size, DMA_FROM_DEVICE);
6705         if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) {
6706                 tg3_frag_free(skb_size <= PAGE_SIZE, data);
6707                 return -EIO;
6708         }
6709
6710         map->data = data;
6711         dma_unmap_addr_set(map, mapping, mapping);
6712
6713         desc->addr_hi = ((u64)mapping >> 32);
6714         desc->addr_lo = ((u64)mapping & 0xffffffff);
6715
6716         return data_size;
6717 }
6718
6719 /* We only need to move over in the address because the other
6720  * members of the RX descriptor are invariant.  See notes above
6721  * tg3_alloc_rx_data for full details.
6722  */
6723 static void tg3_recycle_rx(struct tg3_napi *tnapi,
6724                            struct tg3_rx_prodring_set *dpr,
6725                            u32 opaque_key, int src_idx,
6726                            u32 dest_idx_unmasked)
6727 {
6728         struct tg3 *tp = tnapi->tp;
6729         struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6730         struct ring_info *src_map, *dest_map;
6731         struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6732         int dest_idx;
6733
6734         switch (opaque_key) {
6735         case RXD_OPAQUE_RING_STD:
6736                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6737                 dest_desc = &dpr->rx_std[dest_idx];
6738                 dest_map = &dpr->rx_std_buffers[dest_idx];
6739                 src_desc = &spr->rx_std[src_idx];
6740                 src_map = &spr->rx_std_buffers[src_idx];
6741                 break;
6742
6743         case RXD_OPAQUE_RING_JUMBO:
6744                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6745                 dest_desc = &dpr->rx_jmb[dest_idx].std;
6746                 dest_map = &dpr->rx_jmb_buffers[dest_idx];
6747                 src_desc = &spr->rx_jmb[src_idx].std;
6748                 src_map = &spr->rx_jmb_buffers[src_idx];
6749                 break;
6750
6751         default:
6752                 return;
6753         }
6754
6755         dest_map->data = src_map->data;
6756         dma_unmap_addr_set(dest_map, mapping,
6757                            dma_unmap_addr(src_map, mapping));
6758         dest_desc->addr_hi = src_desc->addr_hi;
6759         dest_desc->addr_lo = src_desc->addr_lo;
6760
6761         /* Ensure that the update to the skb happens after the physical
6762          * addresses have been transferred to the new BD location.
6763          */
6764         smp_wmb();
6765
6766         src_map->data = NULL;
6767 }
6768
6769 /* The RX ring scheme is composed of multiple rings which post fresh
6770  * buffers to the chip, and one special ring the chip uses to report
6771  * status back to the host.
6772  *
6773  * The special ring reports the status of received packets to the
6774  * host.  The chip does not write into the original descriptor the
6775  * RX buffer was obtained from.  The chip simply takes the original
6776  * descriptor as provided by the host, updates the status and length
6777  * field, then writes this into the next status ring entry.
6778  *
6779  * Each ring the host uses to post buffers to the chip is described
6780  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6781  * it is first placed into the on-chip ram.  When the packet's length
6782  * is known, it walks down the TG3_BDINFO entries to select the ring.
6783  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6784  * which is within the range of the new packet's length is chosen.
6785  *
6786  * The "separate ring for rx status" scheme may sound queer, but it makes
6787  * sense from a cache coherency perspective.  If only the host writes
6788  * to the buffer post rings, and only the chip writes to the rx status
6789  * rings, then cache lines never move beyond shared-modified state.
6790  * If both the host and chip were to write into the same ring, cache line
6791  * eviction could occur since both entities want it in an exclusive state.
6792  */
6793 static int tg3_rx(struct tg3_napi *tnapi, int budget)
6794 {
6795         struct tg3 *tp = tnapi->tp;
6796         u32 work_mask, rx_std_posted = 0;
6797         u32 std_prod_idx, jmb_prod_idx;
6798         u32 sw_idx = tnapi->rx_rcb_ptr;
6799         u16 hw_idx;
6800         int received;
6801         struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6802
6803         hw_idx = *(tnapi->rx_rcb_prod_idx);
6804         /*
6805          * We need to order the read of hw_idx and the read of
6806          * the opaque cookie.
6807          */
6808         rmb();
6809         work_mask = 0;
6810         received = 0;
6811         std_prod_idx = tpr->rx_std_prod_idx;
6812         jmb_prod_idx = tpr->rx_jmb_prod_idx;
6813         while (sw_idx != hw_idx && budget > 0) {
6814                 struct ring_info *ri;
6815                 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6816                 unsigned int len;
6817                 struct sk_buff *skb;
6818                 dma_addr_t dma_addr;
6819                 u32 opaque_key, desc_idx, *post_ptr;
6820                 u8 *data;
6821                 u64 tstamp = 0;
6822
6823                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6824                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6825                 if (opaque_key == RXD_OPAQUE_RING_STD) {
6826                         ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6827                         dma_addr = dma_unmap_addr(ri, mapping);
6828                         data = ri->data;
6829                         post_ptr = &std_prod_idx;
6830                         rx_std_posted++;
6831                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6832                         ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6833                         dma_addr = dma_unmap_addr(ri, mapping);
6834                         data = ri->data;
6835                         post_ptr = &jmb_prod_idx;
6836                 } else
6837                         goto next_pkt_nopost;
6838
6839                 work_mask |= opaque_key;
6840
6841                 if (desc->err_vlan & RXD_ERR_MASK) {
6842                 drop_it:
6843                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6844                                        desc_idx, *post_ptr);
6845                 drop_it_no_recycle:
6846                         /* Other statistics kept track of by card. */
6847                         tp->rx_dropped++;
6848                         goto next_pkt;
6849                 }
6850
6851                 prefetch(data + TG3_RX_OFFSET(tp));
6852                 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6853                       ETH_FCS_LEN;
6854
6855                 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6856                      RXD_FLAG_PTPSTAT_PTPV1 ||
6857                     (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6858                      RXD_FLAG_PTPSTAT_PTPV2) {
6859                         tstamp = tr32(TG3_RX_TSTAMP_LSB);
6860                         tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6861                 }
6862
6863                 if (len > TG3_RX_COPY_THRESH(tp)) {
6864                         int skb_size;
6865                         unsigned int frag_size;
6866
6867                         skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6868                                                     *post_ptr, &frag_size);
6869                         if (skb_size < 0)
6870                                 goto drop_it;
6871
6872                         dma_unmap_single(&tp->pdev->dev, dma_addr, skb_size,
6873                                          DMA_FROM_DEVICE);
6874
6875                         /* Ensure that the update to the data happens
6876                          * after the usage of the old DMA mapping.
6877                          */
6878                         smp_wmb();
6879
6880                         ri->data = NULL;
6881
6882                         skb = build_skb(data, frag_size);
6883                         if (!skb) {
6884                                 tg3_frag_free(frag_size != 0, data);
6885                                 goto drop_it_no_recycle;
6886                         }
6887                         skb_reserve(skb, TG3_RX_OFFSET(tp));
6888                 } else {
6889                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6890                                        desc_idx, *post_ptr);
6891
6892                         skb = netdev_alloc_skb(tp->dev,
6893                                                len + TG3_RAW_IP_ALIGN);
6894                         if (skb == NULL)
6895                                 goto drop_it_no_recycle;
6896
6897                         skb_reserve(skb, TG3_RAW_IP_ALIGN);
6898                         dma_sync_single_for_cpu(&tp->pdev->dev, dma_addr, len,
6899                                                 DMA_FROM_DEVICE);
6900                         memcpy(skb->data,
6901                                data + TG3_RX_OFFSET(tp),
6902                                len);
6903                         dma_sync_single_for_device(&tp->pdev->dev, dma_addr,
6904                                                    len, DMA_FROM_DEVICE);
6905                 }
6906
6907                 skb_put(skb, len);
6908                 if (tstamp)
6909                         tg3_hwclock_to_timestamp(tp, tstamp,
6910                                                  skb_hwtstamps(skb));
6911
6912                 if ((tp->dev->features & NETIF_F_RXCSUM) &&
6913                     (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6914                     (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6915                       >> RXD_TCPCSUM_SHIFT) == 0xffff))
6916                         skb->ip_summed = CHECKSUM_UNNECESSARY;
6917                 else
6918                         skb_checksum_none_assert(skb);
6919
6920                 skb->protocol = eth_type_trans(skb, tp->dev);
6921
6922                 if (len > (tp->dev->mtu + ETH_HLEN) &&
6923                     skb->protocol != htons(ETH_P_8021Q) &&
6924                     skb->protocol != htons(ETH_P_8021AD)) {
6925                         dev_kfree_skb_any(skb);
6926                         goto drop_it_no_recycle;
6927                 }
6928
6929                 if (desc->type_flags & RXD_FLAG_VLAN &&
6930                     !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6931                         __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
6932                                                desc->err_vlan & RXD_VLAN_MASK);
6933
6934                 napi_gro_receive(&tnapi->napi, skb);
6935
6936                 received++;
6937                 budget--;
6938
6939 next_pkt:
6940                 (*post_ptr)++;
6941
6942                 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6943                         tpr->rx_std_prod_idx = std_prod_idx &
6944                                                tp->rx_std_ring_mask;
6945                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6946                                      tpr->rx_std_prod_idx);
6947                         work_mask &= ~RXD_OPAQUE_RING_STD;
6948                         rx_std_posted = 0;
6949                 }
6950 next_pkt_nopost:
6951                 sw_idx++;
6952                 sw_idx &= tp->rx_ret_ring_mask;
6953
6954                 /* Refresh hw_idx to see if there is new work */
6955                 if (sw_idx == hw_idx) {
6956                         hw_idx = *(tnapi->rx_rcb_prod_idx);
6957                         rmb();
6958                 }
6959         }
6960
6961         /* ACK the status ring. */
6962         tnapi->rx_rcb_ptr = sw_idx;
6963         tw32_rx_mbox(tnapi->consmbox, sw_idx);
6964
6965         /* Refill RX ring(s). */
6966         if (!tg3_flag(tp, ENABLE_RSS)) {
6967                 /* Sync BD data before updating mailbox */
6968                 wmb();
6969
6970                 if (work_mask & RXD_OPAQUE_RING_STD) {
6971                         tpr->rx_std_prod_idx = std_prod_idx &
6972                                                tp->rx_std_ring_mask;
6973                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6974                                      tpr->rx_std_prod_idx);
6975                 }
6976                 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6977                         tpr->rx_jmb_prod_idx = jmb_prod_idx &
6978                                                tp->rx_jmb_ring_mask;
6979                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6980                                      tpr->rx_jmb_prod_idx);
6981                 }
6982         } else if (work_mask) {
6983                 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6984                  * updated before the producer indices can be updated.
6985                  */
6986                 smp_wmb();
6987
6988                 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6989                 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6990
6991                 if (tnapi != &tp->napi[1]) {
6992                         tp->rx_refill = true;
6993                         napi_schedule(&tp->napi[1].napi);
6994                 }
6995         }
6996
6997         return received;
6998 }
6999
7000 static void tg3_poll_link(struct tg3 *tp)
7001 {
7002         /* handle link change and other phy events */
7003         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
7004                 struct tg3_hw_status *sblk = tp->napi[0].hw_status;
7005
7006                 if (sblk->status & SD_STATUS_LINK_CHG) {
7007                         sblk->status = SD_STATUS_UPDATED |
7008                                        (sblk->status & ~SD_STATUS_LINK_CHG);
7009                         spin_lock(&tp->lock);
7010                         if (tg3_flag(tp, USE_PHYLIB)) {
7011                                 tw32_f(MAC_STATUS,
7012                                      (MAC_STATUS_SYNC_CHANGED |
7013                                       MAC_STATUS_CFG_CHANGED |
7014                                       MAC_STATUS_MI_COMPLETION |
7015                                       MAC_STATUS_LNKSTATE_CHANGED));
7016                                 udelay(40);
7017                         } else
7018                                 tg3_setup_phy(tp, false);
7019                         spin_unlock(&tp->lock);
7020                 }
7021         }
7022 }
7023
7024 static int tg3_rx_prodring_xfer(struct tg3 *tp,
7025                                 struct tg3_rx_prodring_set *dpr,
7026                                 struct tg3_rx_prodring_set *spr)
7027 {
7028         u32 si, di, cpycnt, src_prod_idx;
7029         int i, err = 0;
7030
7031         while (1) {
7032                 src_prod_idx = spr->rx_std_prod_idx;
7033
7034                 /* Make sure updates to the rx_std_buffers[] entries and the
7035                  * standard producer index are seen in the correct order.
7036                  */
7037                 smp_rmb();
7038
7039                 if (spr->rx_std_cons_idx == src_prod_idx)
7040                         break;
7041
7042                 if (spr->rx_std_cons_idx < src_prod_idx)
7043                         cpycnt = src_prod_idx - spr->rx_std_cons_idx;
7044                 else
7045                         cpycnt = tp->rx_std_ring_mask + 1 -
7046                                  spr->rx_std_cons_idx;
7047
7048                 cpycnt = min(cpycnt,
7049                              tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
7050
7051                 si = spr->rx_std_cons_idx;
7052                 di = dpr->rx_std_prod_idx;
7053
7054                 for (i = di; i < di + cpycnt; i++) {
7055                         if (dpr->rx_std_buffers[i].data) {
7056                                 cpycnt = i - di;
7057                                 err = -ENOSPC;
7058                                 break;
7059                         }
7060                 }
7061
7062                 if (!cpycnt)
7063                         break;
7064
7065                 /* Ensure that updates to the rx_std_buffers ring and the
7066                  * shadowed hardware producer ring from tg3_recycle_skb() are
7067                  * ordered correctly WRT the skb check above.
7068                  */
7069                 smp_rmb();
7070
7071                 memcpy(&dpr->rx_std_buffers[di],
7072                        &spr->rx_std_buffers[si],
7073                        cpycnt * sizeof(struct ring_info));
7074
7075                 for (i = 0; i < cpycnt; i++, di++, si++) {
7076                         struct tg3_rx_buffer_desc *sbd, *dbd;
7077                         sbd = &spr->rx_std[si];
7078                         dbd = &dpr->rx_std[di];
7079                         dbd->addr_hi = sbd->addr_hi;
7080                         dbd->addr_lo = sbd->addr_lo;
7081                 }
7082
7083                 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
7084                                        tp->rx_std_ring_mask;
7085                 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
7086                                        tp->rx_std_ring_mask;
7087         }
7088
7089         while (1) {
7090                 src_prod_idx = spr->rx_jmb_prod_idx;
7091
7092                 /* Make sure updates to the rx_jmb_buffers[] entries and
7093                  * the jumbo producer index are seen in the correct order.
7094                  */
7095                 smp_rmb();
7096
7097                 if (spr->rx_jmb_cons_idx == src_prod_idx)
7098                         break;
7099
7100                 if (spr->rx_jmb_cons_idx < src_prod_idx)
7101                         cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
7102                 else
7103                         cpycnt = tp->rx_jmb_ring_mask + 1 -
7104                                  spr->rx_jmb_cons_idx;
7105
7106                 cpycnt = min(cpycnt,
7107                              tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
7108
7109                 si = spr->rx_jmb_cons_idx;
7110                 di = dpr->rx_jmb_prod_idx;
7111
7112                 for (i = di; i < di + cpycnt; i++) {
7113                         if (dpr->rx_jmb_buffers[i].data) {
7114                                 cpycnt = i - di;
7115                                 err = -ENOSPC;
7116                                 break;
7117                         }
7118                 }
7119
7120                 if (!cpycnt)
7121                         break;
7122
7123                 /* Ensure that updates to the rx_jmb_buffers ring and the
7124                  * shadowed hardware producer ring from tg3_recycle_skb() are
7125                  * ordered correctly WRT the skb check above.
7126                  */
7127                 smp_rmb();
7128
7129                 memcpy(&dpr->rx_jmb_buffers[di],
7130                        &spr->rx_jmb_buffers[si],
7131                        cpycnt * sizeof(struct ring_info));
7132
7133                 for (i = 0; i < cpycnt; i++, di++, si++) {
7134                         struct tg3_rx_buffer_desc *sbd, *dbd;
7135                         sbd = &spr->rx_jmb[si].std;
7136                         dbd = &dpr->rx_jmb[di].std;
7137                         dbd->addr_hi = sbd->addr_hi;
7138                         dbd->addr_lo = sbd->addr_lo;
7139                 }
7140
7141                 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
7142                                        tp->rx_jmb_ring_mask;
7143                 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
7144                                        tp->rx_jmb_ring_mask;
7145         }
7146
7147         return err;
7148 }
7149
7150 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
7151 {
7152         struct tg3 *tp = tnapi->tp;
7153
7154         /* run TX completion thread */
7155         if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
7156                 tg3_tx(tnapi);
7157                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7158                         return work_done;
7159         }
7160
7161         if (!tnapi->rx_rcb_prod_idx)
7162                 return work_done;
7163
7164         /* run RX thread, within the bounds set by NAPI.
7165          * All RX "locking" is done by ensuring outside
7166          * code synchronizes with tg3->napi.poll()
7167          */
7168         if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
7169                 work_done += tg3_rx(tnapi, budget - work_done);
7170
7171         if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
7172                 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
7173                 int i, err = 0;
7174                 u32 std_prod_idx = dpr->rx_std_prod_idx;
7175                 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
7176
7177                 tp->rx_refill = false;
7178                 for (i = 1; i <= tp->rxq_cnt; i++)
7179                         err |= tg3_rx_prodring_xfer(tp, dpr,
7180                                                     &tp->napi[i].prodring);
7181
7182                 wmb();
7183
7184                 if (std_prod_idx != dpr->rx_std_prod_idx)
7185                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7186                                      dpr->rx_std_prod_idx);
7187
7188                 if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
7189                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7190                                      dpr->rx_jmb_prod_idx);
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         if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7208                 cancel_work_sync(&tp->reset_task);
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                         break;
7259                 }
7260         }
7261
7262         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
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         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7346         return work_done;
7347
7348 tx_recovery:
7349         /* work_done is guaranteed to be less than budget. */
7350         napi_complete(napi);
7351         tg3_reset_task_schedule(tp);
7352         return work_done;
7353 }
7354
7355 static void tg3_napi_disable(struct tg3 *tp)
7356 {
7357         int i;
7358
7359         for (i = tp->irq_cnt - 1; i >= 0; i--)
7360                 napi_disable(&tp->napi[i].napi);
7361 }
7362
7363 static void tg3_napi_enable(struct tg3 *tp)
7364 {
7365         int i;
7366
7367         for (i = 0; i < tp->irq_cnt; i++)
7368                 napi_enable(&tp->napi[i].napi);
7369 }
7370
7371 static void tg3_napi_init(struct tg3 *tp)
7372 {
7373         int i;
7374
7375         netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll);
7376         for (i = 1; i < tp->irq_cnt; i++)
7377                 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix);
7378 }
7379
7380 static void tg3_napi_fini(struct tg3 *tp)
7381 {
7382         int i;
7383
7384         for (i = 0; i < tp->irq_cnt; i++)
7385                 netif_napi_del(&tp->napi[i].napi);
7386 }
7387
7388 static inline void tg3_netif_stop(struct tg3 *tp)
7389 {
7390         netif_trans_update(tp->dev);    /* prevent tx timeout */
7391         tg3_napi_disable(tp);
7392         netif_carrier_off(tp->dev);
7393         netif_tx_disable(tp->dev);
7394 }
7395
7396 /* tp->lock must be held */
7397 static inline void tg3_netif_start(struct tg3 *tp)
7398 {
7399         tg3_ptp_resume(tp);
7400
7401         /* NOTE: unconditional netif_tx_wake_all_queues is only
7402          * appropriate so long as all callers are assured to
7403          * have free tx slots (such as after tg3_init_hw)
7404          */
7405         netif_tx_wake_all_queues(tp->dev);
7406
7407         if (tp->link_up)
7408                 netif_carrier_on(tp->dev);
7409
7410         tg3_napi_enable(tp);
7411         tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
7412         tg3_enable_ints(tp);
7413 }
7414
7415 static void tg3_irq_quiesce(struct tg3 *tp)
7416         __releases(tp->lock)
7417         __acquires(tp->lock)
7418 {
7419         int i;
7420
7421         BUG_ON(tp->irq_sync);
7422
7423         tp->irq_sync = 1;
7424         smp_mb();
7425
7426         spin_unlock_bh(&tp->lock);
7427
7428         for (i = 0; i < tp->irq_cnt; i++)
7429                 synchronize_irq(tp->napi[i].irq_vec);
7430
7431         spin_lock_bh(&tp->lock);
7432 }
7433
7434 /* Fully shutdown all tg3 driver activity elsewhere in the system.
7435  * If irq_sync is non-zero, then the IRQ handler must be synchronized
7436  * with as well.  Most of the time, this is not necessary except when
7437  * shutting down the device.
7438  */
7439 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
7440 {
7441         spin_lock_bh(&tp->lock);
7442         if (irq_sync)
7443                 tg3_irq_quiesce(tp);
7444 }
7445
7446 static inline void tg3_full_unlock(struct tg3 *tp)
7447 {
7448         spin_unlock_bh(&tp->lock);
7449 }
7450
7451 /* One-shot MSI handler - Chip automatically disables interrupt
7452  * after sending MSI so driver doesn't have to do it.
7453  */
7454 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
7455 {
7456         struct tg3_napi *tnapi = dev_id;
7457         struct tg3 *tp = tnapi->tp;
7458
7459         prefetch(tnapi->hw_status);
7460         if (tnapi->rx_rcb)
7461                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7462
7463         if (likely(!tg3_irq_sync(tp)))
7464                 napi_schedule(&tnapi->napi);
7465
7466         return IRQ_HANDLED;
7467 }
7468
7469 /* MSI ISR - No need to check for interrupt sharing and no need to
7470  * flush status block and interrupt mailbox. PCI ordering rules
7471  * guarantee that MSI will arrive after the status block.
7472  */
7473 static irqreturn_t tg3_msi(int irq, void *dev_id)
7474 {
7475         struct tg3_napi *tnapi = dev_id;
7476         struct tg3 *tp = tnapi->tp;
7477
7478         prefetch(tnapi->hw_status);
7479         if (tnapi->rx_rcb)
7480                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7481         /*
7482          * Writing any value to intr-mbox-0 clears PCI INTA# and
7483          * chip-internal interrupt pending events.
7484          * Writing non-zero to intr-mbox-0 additional tells the
7485          * NIC to stop sending us irqs, engaging "in-intr-handler"
7486          * event coalescing.
7487          */
7488         tw32_mailbox(tnapi->int_mbox, 0x00000001);
7489         if (likely(!tg3_irq_sync(tp)))
7490                 napi_schedule(&tnapi->napi);
7491
7492         return IRQ_RETVAL(1);
7493 }
7494
7495 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
7496 {
7497         struct tg3_napi *tnapi = dev_id;
7498         struct tg3 *tp = tnapi->tp;
7499         struct tg3_hw_status *sblk = tnapi->hw_status;
7500         unsigned int handled = 1;
7501
7502         /* In INTx mode, it is possible for the interrupt to arrive at
7503          * the CPU before the status block posted prior to the interrupt.
7504          * Reading the PCI State register will confirm whether the
7505          * interrupt is ours and will flush the status block.
7506          */
7507         if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
7508                 if (tg3_flag(tp, CHIP_RESETTING) ||
7509                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7510                         handled = 0;
7511                         goto out;
7512                 }
7513         }
7514
7515         /*
7516          * Writing any value to intr-mbox-0 clears PCI INTA# and
7517          * chip-internal interrupt pending events.
7518          * Writing non-zero to intr-mbox-0 additional tells the
7519          * NIC to stop sending us irqs, engaging "in-intr-handler"
7520          * event coalescing.
7521          *
7522          * Flush the mailbox to de-assert the IRQ immediately to prevent
7523          * spurious interrupts.  The flush impacts performance but
7524          * excessive spurious interrupts can be worse in some cases.
7525          */
7526         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7527         if (tg3_irq_sync(tp))
7528                 goto out;
7529         sblk->status &= ~SD_STATUS_UPDATED;
7530         if (likely(tg3_has_work(tnapi))) {
7531                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7532                 napi_schedule(&tnapi->napi);
7533         } else {
7534                 /* No work, shared interrupt perhaps?  re-enable
7535                  * interrupts, and flush that PCI write
7536                  */
7537                 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
7538                                0x00000000);
7539         }
7540 out:
7541         return IRQ_RETVAL(handled);
7542 }
7543
7544 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
7545 {
7546         struct tg3_napi *tnapi = dev_id;
7547         struct tg3 *tp = tnapi->tp;
7548         struct tg3_hw_status *sblk = tnapi->hw_status;
7549         unsigned int handled = 1;
7550
7551         /* In INTx mode, it is possible for the interrupt to arrive at
7552          * the CPU before the status block posted prior to the interrupt.
7553          * Reading the PCI State register will confirm whether the
7554          * interrupt is ours and will flush the status block.
7555          */
7556         if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
7557                 if (tg3_flag(tp, CHIP_RESETTING) ||
7558                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7559                         handled = 0;
7560                         goto out;
7561                 }
7562         }
7563
7564         /*
7565          * writing any value to intr-mbox-0 clears PCI INTA# and
7566          * chip-internal interrupt pending events.
7567          * writing non-zero to intr-mbox-0 additional tells the
7568          * NIC to stop sending us irqs, engaging "in-intr-handler"
7569          * event coalescing.
7570          *
7571          * Flush the mailbox to de-assert the IRQ immediately to prevent
7572          * spurious interrupts.  The flush impacts performance but
7573          * excessive spurious interrupts can be worse in some cases.
7574          */
7575         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7576
7577         /*
7578          * In a shared interrupt configuration, sometimes other devices'
7579          * interrupts will scream.  We record the current status tag here
7580          * so that the above check can report that the screaming interrupts
7581          * are unhandled.  Eventually they will be silenced.
7582          */
7583         tnapi->last_irq_tag = sblk->status_tag;
7584
7585         if (tg3_irq_sync(tp))
7586                 goto out;
7587
7588         prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7589
7590         napi_schedule(&tnapi->napi);
7591
7592 out:
7593         return IRQ_RETVAL(handled);
7594 }
7595
7596 /* ISR for interrupt test */
7597 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7598 {
7599         struct tg3_napi *tnapi = dev_id;
7600         struct tg3 *tp = tnapi->tp;
7601         struct tg3_hw_status *sblk = tnapi->hw_status;
7602
7603         if ((sblk->status & SD_STATUS_UPDATED) ||
7604             !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7605                 tg3_disable_ints(tp);
7606                 return IRQ_RETVAL(1);
7607         }
7608         return IRQ_RETVAL(0);
7609 }
7610
7611 #ifdef CONFIG_NET_POLL_CONTROLLER
7612 static void tg3_poll_controller(struct net_device *dev)
7613 {
7614         int i;
7615         struct tg3 *tp = netdev_priv(dev);
7616
7617         if (tg3_irq_sync(tp))
7618                 return;
7619
7620         for (i = 0; i < tp->irq_cnt; i++)
7621                 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
7622 }
7623 #endif
7624
7625 static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue)
7626 {
7627         struct tg3 *tp = netdev_priv(dev);
7628
7629         if (netif_msg_tx_err(tp)) {
7630                 netdev_err(dev, "transmit timed out, resetting\n");
7631                 tg3_dump_state(tp);
7632         }
7633
7634         tg3_reset_task_schedule(tp);
7635 }
7636
7637 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
7638 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7639 {
7640         u32 base = (u32) mapping & 0xffffffff;
7641
7642         return base + len + 8 < base;
7643 }
7644
7645 /* Test for TSO DMA buffers that cross into regions which are within MSS bytes
7646  * of any 4GB boundaries: 4G, 8G, etc
7647  */
7648 static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7649                                            u32 len, u32 mss)
7650 {
7651         if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
7652                 u32 base = (u32) mapping & 0xffffffff;
7653
7654                 return ((base + len + (mss & 0x3fff)) < base);
7655         }
7656         return 0;
7657 }
7658
7659 /* Test for DMA addresses > 40-bit */
7660 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7661                                           int len)
7662 {
7663 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
7664         if (tg3_flag(tp, 40BIT_DMA_BUG))
7665                 return ((u64) mapping + len) > DMA_BIT_MASK(40);
7666         return 0;
7667 #else
7668         return 0;
7669 #endif
7670 }
7671
7672 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7673                                  dma_addr_t mapping, u32 len, u32 flags,
7674                                  u32 mss, u32 vlan)
7675 {
7676         txbd->addr_hi = ((u64) mapping >> 32);
7677         txbd->addr_lo = ((u64) mapping & 0xffffffff);
7678         txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7679         txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7680 }
7681
7682 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7683                             dma_addr_t map, u32 len, u32 flags,
7684                             u32 mss, u32 vlan)
7685 {
7686         struct tg3 *tp = tnapi->tp;
7687         bool hwbug = false;
7688
7689         if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7690                 hwbug = true;
7691
7692         if (tg3_4g_overflow_test(map, len))
7693                 hwbug = true;
7694
7695         if (tg3_4g_tso_overflow_test(tp, map, len, mss))
7696                 hwbug = true;
7697
7698         if (tg3_40bit_overflow_test(tp, map, len))
7699                 hwbug = true;
7700
7701         if (tp->dma_limit) {
7702                 u32 prvidx = *entry;
7703                 u32 tmp_flag = flags & ~TXD_FLAG_END;
7704                 while (len > tp->dma_limit && *budget) {
7705                         u32 frag_len = tp->dma_limit;
7706                         len -= tp->dma_limit;
7707
7708                         /* Avoid the 8byte DMA problem */
7709                         if (len <= 8) {
7710                                 len += tp->dma_limit / 2;
7711                                 frag_len = tp->dma_limit / 2;
7712                         }
7713
7714                         tnapi->tx_buffers[*entry].fragmented = true;
7715
7716                         tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7717                                       frag_len, tmp_flag, mss, vlan);
7718                         *budget -= 1;
7719                         prvidx = *entry;
7720                         *entry = NEXT_TX(*entry);
7721
7722                         map += frag_len;
7723                 }
7724
7725                 if (len) {
7726                         if (*budget) {
7727                                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7728                                               len, flags, mss, vlan);
7729                                 *budget -= 1;
7730                                 *entry = NEXT_TX(*entry);
7731                         } else {
7732                                 hwbug = true;
7733                                 tnapi->tx_buffers[prvidx].fragmented = false;
7734                         }
7735                 }
7736         } else {
7737                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7738                               len, flags, mss, vlan);
7739                 *entry = NEXT_TX(*entry);
7740         }
7741
7742         return hwbug;
7743 }
7744
7745 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7746 {
7747         int i;
7748         struct sk_buff *skb;
7749         struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7750
7751         skb = txb->skb;
7752         txb->skb = NULL;
7753
7754         dma_unmap_single(&tnapi->tp->pdev->dev, dma_unmap_addr(txb, mapping),
7755                          skb_headlen(skb), DMA_TO_DEVICE);
7756
7757         while (txb->fragmented) {
7758                 txb->fragmented = false;
7759                 entry = NEXT_TX(entry);
7760                 txb = &tnapi->tx_buffers[entry];
7761         }
7762
7763         for (i = 0; i <= last; i++) {
7764                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7765
7766                 entry = NEXT_TX(entry);
7767                 txb = &tnapi->tx_buffers[entry];
7768
7769                 dma_unmap_page(&tnapi->tp->pdev->dev,
7770                                dma_unmap_addr(txb, mapping),
7771                                skb_frag_size(frag), DMA_TO_DEVICE);
7772
7773                 while (txb->fragmented) {
7774                         txb->fragmented = false;
7775                         entry = NEXT_TX(entry);
7776                         txb = &tnapi->tx_buffers[entry];
7777                 }
7778         }
7779 }
7780
7781 /* Workaround 4GB and 40-bit hardware DMA bugs. */
7782 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7783                                        struct sk_buff **pskb,
7784                                        u32 *entry, u32 *budget,
7785                                        u32 base_flags, u32 mss, u32 vlan)
7786 {
7787         struct tg3 *tp = tnapi->tp;
7788         struct sk_buff *new_skb, *skb = *pskb;
7789         dma_addr_t new_addr = 0;
7790         int ret = 0;
7791
7792         if (tg3_asic_rev(tp) != ASIC_REV_5701)
7793                 new_skb = skb_copy(skb, GFP_ATOMIC);
7794         else {
7795                 int more_headroom = 4 - ((unsigned long)skb->data & 3);
7796
7797                 new_skb = skb_copy_expand(skb,
7798                                           skb_headroom(skb) + more_headroom,
7799                                           skb_tailroom(skb), GFP_ATOMIC);
7800         }
7801
7802         if (!new_skb) {
7803                 ret = -1;
7804         } else {
7805                 /* New SKB is guaranteed to be linear. */
7806                 new_addr = dma_map_single(&tp->pdev->dev, new_skb->data,
7807                                           new_skb->len, DMA_TO_DEVICE);
7808                 /* Make sure the mapping succeeded */
7809                 if (dma_mapping_error(&tp->pdev->dev, new_addr)) {
7810                         dev_kfree_skb_any(new_skb);
7811                         ret = -1;
7812                 } else {
7813                         u32 save_entry = *entry;
7814
7815                         base_flags |= TXD_FLAG_END;
7816
7817                         tnapi->tx_buffers[*entry].skb = new_skb;
7818                         dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7819                                            mapping, new_addr);
7820
7821                         if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7822                                             new_skb->len, base_flags,
7823                                             mss, vlan)) {
7824                                 tg3_tx_skb_unmap(tnapi, save_entry, -1);
7825                                 dev_kfree_skb_any(new_skb);
7826                                 ret = -1;
7827                         }
7828                 }
7829         }
7830
7831         dev_consume_skb_any(skb);
7832         *pskb = new_skb;
7833         return ret;
7834 }
7835
7836 static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb)
7837 {
7838         /* Check if we will never have enough descriptors,
7839          * as gso_segs can be more than current ring size
7840          */
7841         return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3;
7842 }
7843
7844 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7845
7846 /* Use GSO to workaround all TSO packets that meet HW bug conditions
7847  * indicated in tg3_tx_frag_set()
7848  */
7849 static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
7850                        struct netdev_queue *txq, struct sk_buff *skb)
7851 {
7852         u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7853         struct sk_buff *segs, *seg, *next;
7854
7855         /* Estimate the number of fragments in the worst case */
7856         if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
7857                 netif_tx_stop_queue(txq);
7858
7859                 /* netif_tx_stop_queue() must be done before checking
7860                  * checking tx index in tg3_tx_avail() below, because in
7861                  * tg3_tx(), we update tx index before checking for
7862                  * netif_tx_queue_stopped().
7863                  */
7864                 smp_mb();
7865                 if (tg3_tx_avail(tnapi) <= frag_cnt_est)
7866                         return NETDEV_TX_BUSY;
7867
7868                 netif_tx_wake_queue(txq);
7869         }
7870
7871         segs = skb_gso_segment(skb, tp->dev->features &
7872                                     ~(NETIF_F_TSO | NETIF_F_TSO6));
7873         if (IS_ERR(segs) || !segs)
7874                 goto tg3_tso_bug_end;
7875
7876         skb_list_walk_safe(segs, seg, next) {
7877                 skb_mark_not_on_list(seg);
7878                 tg3_start_xmit(seg, tp->dev);
7879         }
7880
7881 tg3_tso_bug_end:
7882         dev_consume_skb_any(skb);
7883
7884         return NETDEV_TX_OK;
7885 }
7886
7887 /* hard_start_xmit for all devices */
7888 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7889 {
7890         struct tg3 *tp = netdev_priv(dev);
7891         u32 len, entry, base_flags, mss, vlan = 0;
7892         u32 budget;
7893         int i = -1, would_hit_hwbug;
7894         dma_addr_t mapping;
7895         struct tg3_napi *tnapi;
7896         struct netdev_queue *txq;
7897         unsigned int last;
7898         struct iphdr *iph = NULL;
7899         struct tcphdr *tcph = NULL;
7900         __sum16 tcp_csum = 0, ip_csum = 0;
7901         __be16 ip_tot_len = 0;
7902
7903         txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7904         tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7905         if (tg3_flag(tp, ENABLE_TSS))
7906                 tnapi++;
7907
7908         budget = tg3_tx_avail(tnapi);
7909
7910         /* We are running in BH disabled context with netif_tx_lock
7911          * and TX reclaim runs via tp->napi.poll inside of a software
7912          * interrupt.  Furthermore, IRQ processing runs lockless so we have
7913          * no IRQ context deadlocks to worry about either.  Rejoice!
7914          */
7915         if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7916                 if (!netif_tx_queue_stopped(txq)) {
7917                         netif_tx_stop_queue(txq);
7918
7919                         /* This is a hard error, log it. */
7920                         netdev_err(dev,
7921                                    "BUG! Tx Ring full when queue awake!\n");
7922                 }
7923                 return NETDEV_TX_BUSY;
7924         }
7925
7926         entry = tnapi->tx_prod;
7927         base_flags = 0;
7928
7929         mss = skb_shinfo(skb)->gso_size;
7930         if (mss) {
7931                 u32 tcp_opt_len, hdr_len;
7932
7933                 if (skb_cow_head(skb, 0))
7934                         goto drop;
7935
7936                 iph = ip_hdr(skb);
7937                 tcp_opt_len = tcp_optlen(skb);
7938
7939                 hdr_len = skb_tcp_all_headers(skb) - ETH_HLEN;
7940
7941                 /* HW/FW can not correctly segment packets that have been
7942                  * vlan encapsulated.
7943                  */
7944                 if (skb->protocol == htons(ETH_P_8021Q) ||
7945                     skb->protocol == htons(ETH_P_8021AD)) {
7946                         if (tg3_tso_bug_gso_check(tnapi, skb))
7947                                 return tg3_tso_bug(tp, tnapi, txq, skb);
7948                         goto drop;
7949                 }
7950
7951                 if (!skb_is_gso_v6(skb)) {
7952                         if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7953                             tg3_flag(tp, TSO_BUG)) {
7954                                 if (tg3_tso_bug_gso_check(tnapi, skb))
7955                                         return tg3_tso_bug(tp, tnapi, txq, skb);
7956                                 goto drop;
7957                         }
7958                         ip_csum = iph->check;
7959                         ip_tot_len = iph->tot_len;
7960                         iph->check = 0;
7961                         iph->tot_len = htons(mss + hdr_len);
7962                 }
7963
7964                 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7965                                TXD_FLAG_CPU_POST_DMA);
7966
7967                 tcph = tcp_hdr(skb);
7968                 tcp_csum = tcph->check;
7969
7970                 if (tg3_flag(tp, HW_TSO_1) ||
7971                     tg3_flag(tp, HW_TSO_2) ||
7972                     tg3_flag(tp, HW_TSO_3)) {
7973                         tcph->check = 0;
7974                         base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7975                 } else {
7976                         tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
7977                                                          0, IPPROTO_TCP, 0);
7978                 }
7979
7980                 if (tg3_flag(tp, HW_TSO_3)) {
7981                         mss |= (hdr_len & 0xc) << 12;
7982                         if (hdr_len & 0x10)
7983                                 base_flags |= 0x00000010;
7984                         base_flags |= (hdr_len & 0x3e0) << 5;
7985                 } else if (tg3_flag(tp, HW_TSO_2))
7986                         mss |= hdr_len << 9;
7987                 else if (tg3_flag(tp, HW_TSO_1) ||
7988                          tg3_asic_rev(tp) == ASIC_REV_5705) {
7989                         if (tcp_opt_len || iph->ihl > 5) {
7990                                 int tsflags;
7991
7992                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7993                                 mss |= (tsflags << 11);
7994                         }
7995                 } else {
7996                         if (tcp_opt_len || iph->ihl > 5) {
7997                                 int tsflags;
7998
7999                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8000                                 base_flags |= tsflags << 12;
8001                         }
8002                 }
8003         } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
8004                 /* HW/FW can not correctly checksum packets that have been
8005                  * vlan encapsulated.
8006                  */
8007                 if (skb->protocol == htons(ETH_P_8021Q) ||
8008                     skb->protocol == htons(ETH_P_8021AD)) {
8009                         if (skb_checksum_help(skb))
8010                                 goto drop;
8011                 } else  {
8012                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
8013                 }
8014         }
8015
8016         if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
8017             !mss && skb->len > VLAN_ETH_FRAME_LEN)
8018                 base_flags |= TXD_FLAG_JMB_PKT;
8019
8020         if (skb_vlan_tag_present(skb)) {
8021                 base_flags |= TXD_FLAG_VLAN;
8022                 vlan = skb_vlan_tag_get(skb);
8023         }
8024
8025         if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
8026             tg3_flag(tp, TX_TSTAMP_EN)) {
8027                 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
8028                 base_flags |= TXD_FLAG_HWTSTAMP;
8029         }
8030
8031         len = skb_headlen(skb);
8032
8033         mapping = dma_map_single(&tp->pdev->dev, skb->data, len,
8034                                  DMA_TO_DEVICE);
8035         if (dma_mapping_error(&tp->pdev->dev, mapping))
8036                 goto drop;
8037
8038
8039         tnapi->tx_buffers[entry].skb = skb;
8040         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
8041
8042         would_hit_hwbug = 0;
8043
8044         if (tg3_flag(tp, 5701_DMA_BUG))
8045                 would_hit_hwbug = 1;
8046
8047         if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
8048                           ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
8049                             mss, vlan)) {
8050                 would_hit_hwbug = 1;
8051         } else if (skb_shinfo(skb)->nr_frags > 0) {
8052                 u32 tmp_mss = mss;
8053
8054                 if (!tg3_flag(tp, HW_TSO_1) &&
8055                     !tg3_flag(tp, HW_TSO_2) &&
8056                     !tg3_flag(tp, HW_TSO_3))
8057                         tmp_mss = 0;
8058
8059                 /* Now loop through additional data
8060                  * fragments, and queue them.
8061                  */
8062                 last = skb_shinfo(skb)->nr_frags - 1;
8063                 for (i = 0; i <= last; i++) {
8064                         skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
8065
8066                         len = skb_frag_size(frag);
8067                         mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
8068                                                    len, DMA_TO_DEVICE);
8069
8070                         tnapi->tx_buffers[entry].skb = NULL;
8071                         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
8072                                            mapping);
8073                         if (dma_mapping_error(&tp->pdev->dev, mapping))
8074                                 goto dma_error;
8075
8076                         if (!budget ||
8077                             tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
8078                                             len, base_flags |
8079                                             ((i == last) ? TXD_FLAG_END : 0),
8080                                             tmp_mss, vlan)) {
8081                                 would_hit_hwbug = 1;
8082                                 break;
8083                         }
8084                 }
8085         }
8086
8087         if (would_hit_hwbug) {
8088                 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
8089
8090                 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) {
8091                         /* If it's a TSO packet, do GSO instead of
8092                          * allocating and copying to a large linear SKB
8093                          */
8094                         if (ip_tot_len) {
8095                                 iph->check = ip_csum;
8096                                 iph->tot_len = ip_tot_len;
8097                         }
8098                         tcph->check = tcp_csum;
8099                         return tg3_tso_bug(tp, tnapi, txq, skb);
8100                 }
8101
8102                 /* If the workaround fails due to memory/mapping
8103                  * failure, silently drop this packet.
8104                  */
8105                 entry = tnapi->tx_prod;
8106                 budget = tg3_tx_avail(tnapi);
8107                 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
8108                                                 base_flags, mss, vlan))
8109                         goto drop_nofree;
8110         }
8111
8112         skb_tx_timestamp(skb);
8113         netdev_tx_sent_queue(txq, skb->len);
8114
8115         /* Sync BD data before updating mailbox */
8116         wmb();
8117
8118         tnapi->tx_prod = entry;
8119         if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
8120                 netif_tx_stop_queue(txq);
8121
8122                 /* netif_tx_stop_queue() must be done before checking
8123                  * checking tx index in tg3_tx_avail() below, because in
8124                  * tg3_tx(), we update tx index before checking for
8125                  * netif_tx_queue_stopped().
8126                  */
8127                 smp_mb();
8128                 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
8129                         netif_tx_wake_queue(txq);
8130         }
8131
8132         if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
8133                 /* Packets are ready, update Tx producer idx on card. */
8134                 tw32_tx_mbox(tnapi->prodmbox, entry);
8135         }
8136
8137         return NETDEV_TX_OK;
8138
8139 dma_error:
8140         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
8141         tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
8142 drop:
8143         dev_kfree_skb_any(skb);
8144 drop_nofree:
8145         tp->tx_dropped++;
8146         return NETDEV_TX_OK;
8147 }
8148
8149 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
8150 {
8151         if (enable) {
8152                 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
8153                                   MAC_MODE_PORT_MODE_MASK);
8154
8155                 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
8156
8157                 if (!tg3_flag(tp, 5705_PLUS))
8158                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
8159
8160                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
8161                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
8162                 else
8163                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
8164         } else {
8165                 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
8166
8167                 if (tg3_flag(tp, 5705_PLUS) ||
8168                     (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
8169                     tg3_asic_rev(tp) == ASIC_REV_5700)
8170                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
8171         }
8172
8173         tw32(MAC_MODE, tp->mac_mode);
8174         udelay(40);
8175 }
8176
8177 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
8178 {
8179         u32 val, bmcr, mac_mode, ptest = 0;
8180
8181         tg3_phy_toggle_apd(tp, false);
8182         tg3_phy_toggle_automdix(tp, false);
8183
8184         if (extlpbk && tg3_phy_set_extloopbk(tp))
8185                 return -EIO;
8186
8187         bmcr = BMCR_FULLDPLX;
8188         switch (speed) {
8189         case SPEED_10:
8190                 break;
8191         case SPEED_100:
8192                 bmcr |= BMCR_SPEED100;
8193                 break;
8194         case SPEED_1000:
8195         default:
8196                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
8197                         speed = SPEED_100;
8198                         bmcr |= BMCR_SPEED100;
8199                 } else {
8200                         speed = SPEED_1000;
8201                         bmcr |= BMCR_SPEED1000;
8202                 }
8203         }
8204
8205         if (extlpbk) {
8206                 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
8207                         tg3_readphy(tp, MII_CTRL1000, &val);
8208                         val |= CTL1000_AS_MASTER |
8209                                CTL1000_ENABLE_MASTER;
8210                         tg3_writephy(tp, MII_CTRL1000, val);
8211                 } else {
8212                         ptest = MII_TG3_FET_PTEST_TRIM_SEL |
8213                                 MII_TG3_FET_PTEST_TRIM_2;
8214                         tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
8215                 }
8216         } else
8217                 bmcr |= BMCR_LOOPBACK;
8218
8219         tg3_writephy(tp, MII_BMCR, bmcr);
8220
8221         /* The write needs to be flushed for the FETs */
8222         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
8223                 tg3_readphy(tp, MII_BMCR, &bmcr);
8224
8225         udelay(40);
8226
8227         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
8228             tg3_asic_rev(tp) == ASIC_REV_5785) {
8229                 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
8230                              MII_TG3_FET_PTEST_FRC_TX_LINK |
8231                              MII_TG3_FET_PTEST_FRC_TX_LOCK);
8232
8233                 /* The write needs to be flushed for the AC131 */
8234                 tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
8235         }
8236
8237         /* Reset to prevent losing 1st rx packet intermittently */
8238         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
8239             tg3_flag(tp, 5780_CLASS)) {
8240                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8241                 udelay(10);
8242                 tw32_f(MAC_RX_MODE, tp->rx_mode);
8243         }
8244
8245         mac_mode = tp->mac_mode &
8246                    ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
8247         if (speed == SPEED_1000)
8248                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
8249         else
8250                 mac_mode |= MAC_MODE_PORT_MODE_MII;
8251
8252         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
8253                 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
8254
8255                 if (masked_phy_id == TG3_PHY_ID_BCM5401)
8256                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
8257                 else if (masked_phy_id == TG3_PHY_ID_BCM5411)
8258                         mac_mode |= MAC_MODE_LINK_POLARITY;
8259
8260                 tg3_writephy(tp, MII_TG3_EXT_CTRL,
8261                              MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8262         }
8263
8264         tw32(MAC_MODE, mac_mode);
8265         udelay(40);
8266
8267         return 0;
8268 }
8269
8270 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
8271 {
8272         struct tg3 *tp = netdev_priv(dev);
8273
8274         if (features & NETIF_F_LOOPBACK) {
8275                 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
8276                         return;
8277
8278                 spin_lock_bh(&tp->lock);
8279                 tg3_mac_loopback(tp, true);
8280                 netif_carrier_on(tp->dev);
8281                 spin_unlock_bh(&tp->lock);
8282                 netdev_info(dev, "Internal MAC loopback mode enabled.\n");
8283         } else {
8284                 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
8285                         return;
8286
8287                 spin_lock_bh(&tp->lock);
8288                 tg3_mac_loopback(tp, false);
8289                 /* Force link status check */
8290                 tg3_setup_phy(tp, true);
8291                 spin_unlock_bh(&tp->lock);
8292                 netdev_info(dev, "Internal MAC loopback mode disabled.\n");
8293         }
8294 }
8295
8296 static netdev_features_t tg3_fix_features(struct net_device *dev,
8297         netdev_features_t features)
8298 {
8299         struct tg3 *tp = netdev_priv(dev);
8300
8301         if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
8302                 features &= ~NETIF_F_ALL_TSO;
8303
8304         return features;
8305 }
8306
8307 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
8308 {
8309         netdev_features_t changed = dev->features ^ features;
8310
8311         if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
8312                 tg3_set_loopback(dev, features);
8313
8314         return 0;
8315 }
8316
8317 static void tg3_rx_prodring_free(struct tg3 *tp,
8318                                  struct tg3_rx_prodring_set *tpr)
8319 {
8320         int i;
8321
8322         if (tpr != &tp->napi[0].prodring) {
8323                 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
8324                      i = (i + 1) & tp->rx_std_ring_mask)
8325                         tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8326                                         tp->rx_pkt_map_sz);
8327
8328                 if (tg3_flag(tp, JUMBO_CAPABLE)) {
8329                         for (i = tpr->rx_jmb_cons_idx;
8330                              i != tpr->rx_jmb_prod_idx;
8331                              i = (i + 1) & tp->rx_jmb_ring_mask) {
8332                                 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8333                                                 TG3_RX_JMB_MAP_SZ);
8334                         }
8335                 }
8336
8337                 return;
8338         }
8339
8340         for (i = 0; i <= tp->rx_std_ring_mask; i++)
8341                 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8342                                 tp->rx_pkt_map_sz);
8343
8344         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8345                 for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
8346                         tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8347                                         TG3_RX_JMB_MAP_SZ);
8348         }
8349 }
8350
8351 /* Initialize rx rings for packet processing.
8352  *
8353  * The chip has been shut down and the driver detached from
8354  * the networking, so no interrupts or new tx packets will
8355  * end up in the driver.  tp->{tx,}lock are held and thus
8356  * we may not sleep.
8357  */
8358 static int tg3_rx_prodring_alloc(struct tg3 *tp,
8359                                  struct tg3_rx_prodring_set *tpr)
8360 {
8361         u32 i, rx_pkt_dma_sz;
8362
8363         tpr->rx_std_cons_idx = 0;
8364         tpr->rx_std_prod_idx = 0;
8365         tpr->rx_jmb_cons_idx = 0;
8366         tpr->rx_jmb_prod_idx = 0;
8367
8368         if (tpr != &tp->napi[0].prodring) {
8369                 memset(&tpr->rx_std_buffers[0], 0,
8370                        TG3_RX_STD_BUFF_RING_SIZE(tp));
8371                 if (tpr->rx_jmb_buffers)
8372                         memset(&tpr->rx_jmb_buffers[0], 0,
8373                                TG3_RX_JMB_BUFF_RING_SIZE(tp));
8374                 goto done;
8375         }
8376
8377         /* Zero out all descriptors. */
8378         memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
8379
8380         rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
8381         if (tg3_flag(tp, 5780_CLASS) &&
8382             tp->dev->mtu > ETH_DATA_LEN)
8383                 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
8384         tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
8385
8386         /* Initialize invariants of the rings, we only set this
8387          * stuff once.  This works because the card does not
8388          * write into the rx buffer posting rings.
8389          */
8390         for (i = 0; i <= tp->rx_std_ring_mask; i++) {
8391                 struct tg3_rx_buffer_desc *rxd;
8392
8393                 rxd = &tpr->rx_std[i];
8394                 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
8395                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
8396                 rxd->opaque = (RXD_OPAQUE_RING_STD |
8397                                (i << RXD_OPAQUE_INDEX_SHIFT));
8398         }
8399
8400         /* Now allocate fresh SKBs for each rx ring. */
8401         for (i = 0; i < tp->rx_pending; i++) {
8402                 unsigned int frag_size;
8403
8404                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
8405                                       &frag_size) < 0) {
8406                         netdev_warn(tp->dev,
8407                                     "Using a smaller RX standard ring. Only "
8408                                     "%d out of %d buffers were allocated "
8409                                     "successfully\n", i, tp->rx_pending);
8410                         if (i == 0)
8411                                 goto initfail;
8412                         tp->rx_pending = i;
8413                         break;
8414                 }
8415         }
8416
8417         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8418                 goto done;
8419
8420         memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
8421
8422         if (!tg3_flag(tp, JUMBO_RING_ENABLE))
8423                 goto done;
8424
8425         for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
8426                 struct tg3_rx_buffer_desc *rxd;
8427
8428                 rxd = &tpr->rx_jmb[i].std;
8429                 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
8430                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
8431                                   RXD_FLAG_JUMBO;
8432                 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
8433                        (i << RXD_OPAQUE_INDEX_SHIFT));
8434         }
8435
8436         for (i = 0; i < tp->rx_jumbo_pending; i++) {
8437                 unsigned int frag_size;
8438
8439                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
8440                                       &frag_size) < 0) {
8441                         netdev_warn(tp->dev,
8442                                     "Using a smaller RX jumbo ring. Only %d "
8443                                     "out of %d buffers were allocated "
8444                                     "successfully\n", i, tp->rx_jumbo_pending);
8445                         if (i == 0)
8446                                 goto initfail;
8447                         tp->rx_jumbo_pending = i;
8448                         break;
8449                 }
8450         }
8451
8452 done:
8453         return 0;
8454
8455 initfail:
8456         tg3_rx_prodring_free(tp, tpr);
8457         return -ENOMEM;
8458 }
8459
8460 static void tg3_rx_prodring_fini(struct tg3 *tp,
8461                                  struct tg3_rx_prodring_set *tpr)
8462 {
8463         kfree(tpr->rx_std_buffers);
8464         tpr->rx_std_buffers = NULL;
8465         kfree(tpr->rx_jmb_buffers);
8466         tpr->rx_jmb_buffers = NULL;
8467         if (tpr->rx_std) {
8468                 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
8469                                   tpr->rx_std, tpr->rx_std_mapping);
8470                 tpr->rx_std = NULL;
8471         }
8472         if (tpr->rx_jmb) {
8473                 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
8474                                   tpr->rx_jmb, tpr->rx_jmb_mapping);
8475                 tpr->rx_jmb = NULL;
8476         }
8477 }
8478
8479 static int tg3_rx_prodring_init(struct tg3 *tp,
8480                                 struct tg3_rx_prodring_set *tpr)
8481 {
8482         tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
8483                                       GFP_KERNEL);
8484         if (!tpr->rx_std_buffers)
8485                 return -ENOMEM;
8486
8487         tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
8488                                          TG3_RX_STD_RING_BYTES(tp),
8489                                          &tpr->rx_std_mapping,
8490                                          GFP_KERNEL);
8491         if (!tpr->rx_std)
8492                 goto err_out;
8493
8494         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8495                 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
8496                                               GFP_KERNEL);
8497                 if (!tpr->rx_jmb_buffers)
8498                         goto err_out;
8499
8500                 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
8501                                                  TG3_RX_JMB_RING_BYTES(tp),
8502                                                  &tpr->rx_jmb_mapping,
8503                                                  GFP_KERNEL);
8504                 if (!tpr->rx_jmb)
8505                         goto err_out;
8506         }
8507
8508         return 0;
8509
8510 err_out:
8511         tg3_rx_prodring_fini(tp, tpr);
8512         return -ENOMEM;
8513 }
8514
8515 /* Free up pending packets in all rx/tx rings.
8516  *
8517  * The chip has been shut down and the driver detached from
8518  * the networking, so no interrupts or new tx packets will
8519  * end up in the driver.  tp->{tx,}lock is not held and we are not
8520  * in an interrupt context and thus may sleep.
8521  */
8522 static void tg3_free_rings(struct tg3 *tp)
8523 {
8524         int i, j;
8525
8526         for (j = 0; j < tp->irq_cnt; j++) {
8527                 struct tg3_napi *tnapi = &tp->napi[j];
8528
8529                 tg3_rx_prodring_free(tp, &tnapi->prodring);
8530
8531                 if (!tnapi->tx_buffers)
8532                         continue;
8533
8534                 for (i = 0; i < TG3_TX_RING_SIZE; i++) {
8535                         struct sk_buff *skb = tnapi->tx_buffers[i].skb;
8536
8537                         if (!skb)
8538                                 continue;
8539
8540                         tg3_tx_skb_unmap(tnapi, i,
8541                                          skb_shinfo(skb)->nr_frags - 1);
8542
8543                         dev_consume_skb_any(skb);
8544                 }
8545                 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
8546         }
8547 }
8548
8549 /* Initialize tx/rx rings for packet processing.
8550  *
8551  * The chip has been shut down and the driver detached from
8552  * the networking, so no interrupts or new tx packets will
8553  * end up in the driver.  tp->{tx,}lock are held and thus
8554  * we may not sleep.
8555  */
8556 static int tg3_init_rings(struct tg3 *tp)
8557 {
8558         int i;
8559
8560         /* Free up all the SKBs. */
8561         tg3_free_rings(tp);
8562
8563         for (i = 0; i < tp->irq_cnt; i++) {
8564                 struct tg3_napi *tnapi = &tp->napi[i];
8565
8566                 tnapi->last_tag = 0;
8567                 tnapi->last_irq_tag = 0;
8568                 tnapi->hw_status->status = 0;
8569                 tnapi->hw_status->status_tag = 0;
8570                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8571
8572                 tnapi->tx_prod = 0;
8573                 tnapi->tx_cons = 0;
8574                 if (tnapi->tx_ring)
8575                         memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
8576
8577                 tnapi->rx_rcb_ptr = 0;
8578                 if (tnapi->rx_rcb)
8579                         memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
8580
8581                 if (tnapi->prodring.rx_std &&
8582                     tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
8583                         tg3_free_rings(tp);
8584                         return -ENOMEM;
8585                 }
8586         }
8587
8588         return 0;
8589 }
8590
8591 static void tg3_mem_tx_release(struct tg3 *tp)
8592 {
8593         int i;
8594
8595         for (i = 0; i < tp->irq_max; i++) {
8596                 struct tg3_napi *tnapi = &tp->napi[i];
8597
8598                 if (tnapi->tx_ring) {
8599                         dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
8600                                 tnapi->tx_ring, tnapi->tx_desc_mapping);
8601                         tnapi->tx_ring = NULL;
8602                 }
8603
8604                 kfree(tnapi->tx_buffers);
8605                 tnapi->tx_buffers = NULL;
8606         }
8607 }
8608
8609 static int tg3_mem_tx_acquire(struct tg3 *tp)
8610 {
8611         int i;
8612         struct tg3_napi *tnapi = &tp->napi[0];
8613
8614         /* If multivector TSS is enabled, vector 0 does not handle
8615          * tx interrupts.  Don't allocate any resources for it.
8616          */
8617         if (tg3_flag(tp, ENABLE_TSS))
8618                 tnapi++;
8619
8620         for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
8621                 tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE,
8622                                             sizeof(struct tg3_tx_ring_info),
8623                                             GFP_KERNEL);
8624                 if (!tnapi->tx_buffers)
8625                         goto err_out;
8626
8627                 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
8628                                                     TG3_TX_RING_BYTES,
8629                                                     &tnapi->tx_desc_mapping,
8630                                                     GFP_KERNEL);
8631                 if (!tnapi->tx_ring)
8632                         goto err_out;
8633         }
8634
8635         return 0;
8636
8637 err_out:
8638         tg3_mem_tx_release(tp);
8639         return -ENOMEM;
8640 }
8641
8642 static void tg3_mem_rx_release(struct tg3 *tp)
8643 {
8644         int i;
8645
8646         for (i = 0; i < tp->irq_max; i++) {
8647                 struct tg3_napi *tnapi = &tp->napi[i];
8648
8649                 tg3_rx_prodring_fini(tp, &tnapi->prodring);
8650
8651                 if (!tnapi->rx_rcb)
8652                         continue;
8653
8654                 dma_free_coherent(&tp->pdev->dev,
8655                                   TG3_RX_RCB_RING_BYTES(tp),
8656                                   tnapi->rx_rcb,
8657                                   tnapi->rx_rcb_mapping);
8658                 tnapi->rx_rcb = NULL;
8659         }
8660 }
8661
8662 static int tg3_mem_rx_acquire(struct tg3 *tp)
8663 {
8664         unsigned int i, limit;
8665
8666         limit = tp->rxq_cnt;
8667
8668         /* If RSS is enabled, we need a (dummy) producer ring
8669          * set on vector zero.  This is the true hw prodring.
8670          */
8671         if (tg3_flag(tp, ENABLE_RSS))
8672                 limit++;
8673
8674         for (i = 0; i < limit; i++) {
8675                 struct tg3_napi *tnapi = &tp->napi[i];
8676
8677                 if (tg3_rx_prodring_init(tp, &tnapi->prodring))
8678                         goto err_out;
8679
8680                 /* If multivector RSS is enabled, vector 0
8681                  * does not handle rx or tx interrupts.
8682                  * Don't allocate any resources for it.
8683                  */
8684                 if (!i && tg3_flag(tp, ENABLE_RSS))
8685                         continue;
8686
8687                 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
8688                                                    TG3_RX_RCB_RING_BYTES(tp),
8689                                                    &tnapi->rx_rcb_mapping,
8690                                                    GFP_KERNEL);
8691                 if (!tnapi->rx_rcb)
8692                         goto err_out;
8693         }
8694
8695         return 0;
8696
8697 err_out:
8698         tg3_mem_rx_release(tp);
8699         return -ENOMEM;
8700 }
8701
8702 /*
8703  * Must not be invoked with interrupt sources disabled and
8704  * the hardware shutdown down.
8705  */
8706 static void tg3_free_consistent(struct tg3 *tp)
8707 {
8708         int i;
8709
8710         for (i = 0; i < tp->irq_cnt; i++) {
8711                 struct tg3_napi *tnapi = &tp->napi[i];
8712
8713                 if (tnapi->hw_status) {
8714                         dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8715                                           tnapi->hw_status,
8716                                           tnapi->status_mapping);
8717                         tnapi->hw_status = NULL;
8718                 }
8719         }
8720
8721         tg3_mem_rx_release(tp);
8722         tg3_mem_tx_release(tp);
8723
8724         /* tp->hw_stats can be referenced safely:
8725          *     1. under rtnl_lock
8726          *     2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set.
8727          */
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 }
8734
8735 /*
8736  * Must not be invoked with interrupt sources disabled and
8737  * the hardware shutdown down.  Can sleep.
8738  */
8739 static int tg3_alloc_consistent(struct tg3 *tp)
8740 {
8741         int i;
8742
8743         tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
8744                                           sizeof(struct tg3_hw_stats),
8745                                           &tp->stats_mapping, GFP_KERNEL);
8746         if (!tp->hw_stats)
8747                 goto err_out;
8748
8749         for (i = 0; i < tp->irq_cnt; i++) {
8750                 struct tg3_napi *tnapi = &tp->napi[i];
8751                 struct tg3_hw_status *sblk;
8752
8753                 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
8754                                                       TG3_HW_STATUS_SIZE,
8755                                                       &tnapi->status_mapping,
8756                                                       GFP_KERNEL);
8757                 if (!tnapi->hw_status)
8758                         goto err_out;
8759
8760                 sblk = tnapi->hw_status;
8761
8762                 if (tg3_flag(tp, ENABLE_RSS)) {
8763                         u16 *prodptr = NULL;
8764
8765                         /*
8766                          * When RSS is enabled, the status block format changes
8767                          * slightly.  The "rx_jumbo_consumer", "reserved",
8768                          * and "rx_mini_consumer" members get mapped to the
8769                          * other three rx return ring producer indexes.
8770                          */
8771                         switch (i) {
8772                         case 1:
8773                                 prodptr = &sblk->idx[0].rx_producer;
8774                                 break;
8775                         case 2:
8776                                 prodptr = &sblk->rx_jumbo_consumer;
8777                                 break;
8778                         case 3:
8779                                 prodptr = &sblk->reserved;
8780                                 break;
8781                         case 4:
8782                                 prodptr = &sblk->rx_mini_consumer;
8783                                 break;
8784                         }
8785                         tnapi->rx_rcb_prod_idx = prodptr;
8786                 } else {
8787                         tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8788                 }
8789         }
8790
8791         if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8792                 goto err_out;
8793
8794         return 0;
8795
8796 err_out:
8797         tg3_free_consistent(tp);
8798         return -ENOMEM;
8799 }
8800
8801 #define MAX_WAIT_CNT 1000
8802
8803 /* To stop a block, clear the enable bit and poll till it
8804  * clears.  tp->lock is held.
8805  */
8806 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent)
8807 {
8808         unsigned int i;
8809         u32 val;
8810
8811         if (tg3_flag(tp, 5705_PLUS)) {
8812                 switch (ofs) {
8813                 case RCVLSC_MODE:
8814                 case DMAC_MODE:
8815                 case MBFREE_MODE:
8816                 case BUFMGR_MODE:
8817                 case MEMARB_MODE:
8818                         /* We can't enable/disable these bits of the
8819                          * 5705/5750, just say success.
8820                          */
8821                         return 0;
8822
8823                 default:
8824                         break;
8825                 }
8826         }
8827
8828         val = tr32(ofs);
8829         val &= ~enable_bit;
8830         tw32_f(ofs, val);
8831
8832         for (i = 0; i < MAX_WAIT_CNT; i++) {
8833                 if (pci_channel_offline(tp->pdev)) {
8834                         dev_err(&tp->pdev->dev,
8835                                 "tg3_stop_block device offline, "
8836                                 "ofs=%lx enable_bit=%x\n",
8837                                 ofs, enable_bit);
8838                         return -ENODEV;
8839                 }
8840
8841                 udelay(100);
8842                 val = tr32(ofs);
8843                 if ((val & enable_bit) == 0)
8844                         break;
8845         }
8846
8847         if (i == MAX_WAIT_CNT && !silent) {
8848                 dev_err(&tp->pdev->dev,
8849                         "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8850                         ofs, enable_bit);
8851                 return -ENODEV;
8852         }
8853
8854         return 0;
8855 }
8856
8857 /* tp->lock is held. */
8858 static int tg3_abort_hw(struct tg3 *tp, bool silent)
8859 {
8860         int i, err;
8861
8862         tg3_disable_ints(tp);
8863
8864         if (pci_channel_offline(tp->pdev)) {
8865                 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE);
8866                 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8867                 err = -ENODEV;
8868                 goto err_no_dev;
8869         }
8870
8871         tp->rx_mode &= ~RX_MODE_ENABLE;
8872         tw32_f(MAC_RX_MODE, tp->rx_mode);
8873         udelay(10);
8874
8875         err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8876         err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8877         err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8878         err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8879         err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8880         err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8881
8882         err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8883         err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8884         err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8885         err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8886         err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8887         err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8888         err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8889
8890         tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8891         tw32_f(MAC_MODE, tp->mac_mode);
8892         udelay(40);
8893
8894         tp->tx_mode &= ~TX_MODE_ENABLE;
8895         tw32_f(MAC_TX_MODE, tp->tx_mode);
8896
8897         for (i = 0; i < MAX_WAIT_CNT; i++) {
8898                 udelay(100);
8899                 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8900                         break;
8901         }
8902         if (i >= MAX_WAIT_CNT) {
8903                 dev_err(&tp->pdev->dev,
8904                         "%s timed out, TX_MODE_ENABLE will not clear "
8905                         "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8906                 err |= -ENODEV;
8907         }
8908
8909         err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8910         err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8911         err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8912
8913         tw32(FTQ_RESET, 0xffffffff);
8914         tw32(FTQ_RESET, 0x00000000);
8915
8916         err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8917         err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8918
8919 err_no_dev:
8920         for (i = 0; i < tp->irq_cnt; i++) {
8921                 struct tg3_napi *tnapi = &tp->napi[i];
8922                 if (tnapi->hw_status)
8923                         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8924         }
8925
8926         return err;
8927 }
8928
8929 /* Save PCI command register before chip reset */
8930 static void tg3_save_pci_state(struct tg3 *tp)
8931 {
8932         pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8933 }
8934
8935 /* Restore PCI state after chip reset */
8936 static void tg3_restore_pci_state(struct tg3 *tp)
8937 {
8938         u32 val;
8939
8940         /* Re-enable indirect register accesses. */
8941         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8942                                tp->misc_host_ctrl);
8943
8944         /* Set MAX PCI retry to zero. */
8945         val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8946         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
8947             tg3_flag(tp, PCIX_MODE))
8948                 val |= PCISTATE_RETRY_SAME_DMA;
8949         /* Allow reads and writes to the APE register and memory space. */
8950         if (tg3_flag(tp, ENABLE_APE))
8951                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8952                        PCISTATE_ALLOW_APE_SHMEM_WR |
8953                        PCISTATE_ALLOW_APE_PSPACE_WR;
8954         pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8955
8956         pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8957
8958         if (!tg3_flag(tp, PCI_EXPRESS)) {
8959                 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8960                                       tp->pci_cacheline_sz);
8961                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8962                                       tp->pci_lat_timer);
8963         }
8964
8965         /* Make sure PCI-X relaxed ordering bit is clear. */
8966         if (tg3_flag(tp, PCIX_MODE)) {
8967                 u16 pcix_cmd;
8968
8969                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8970                                      &pcix_cmd);
8971                 pcix_cmd &= ~PCI_X_CMD_ERO;
8972                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8973                                       pcix_cmd);
8974         }
8975
8976         if (tg3_flag(tp, 5780_CLASS)) {
8977
8978                 /* Chip reset on 5780 will reset MSI enable bit,
8979                  * so need to restore it.
8980                  */
8981                 if (tg3_flag(tp, USING_MSI)) {
8982                         u16 ctrl;
8983
8984                         pci_read_config_word(tp->pdev,
8985                                              tp->msi_cap + PCI_MSI_FLAGS,
8986                                              &ctrl);
8987                         pci_write_config_word(tp->pdev,
8988                                               tp->msi_cap + PCI_MSI_FLAGS,
8989                                               ctrl | PCI_MSI_FLAGS_ENABLE);
8990                         val = tr32(MSGINT_MODE);
8991                         tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
8992                 }
8993         }
8994 }
8995
8996 static void tg3_override_clk(struct tg3 *tp)
8997 {
8998         u32 val;
8999
9000         switch (tg3_asic_rev(tp)) {
9001         case ASIC_REV_5717:
9002                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9003                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9004                      TG3_CPMU_MAC_ORIDE_ENABLE);
9005                 break;
9006
9007         case ASIC_REV_5719:
9008         case ASIC_REV_5720:
9009                 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9010                 break;
9011
9012         default:
9013                 return;
9014         }
9015 }
9016
9017 static void tg3_restore_clk(struct tg3 *tp)
9018 {
9019         u32 val;
9020
9021         switch (tg3_asic_rev(tp)) {
9022         case ASIC_REV_5717:
9023                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9024                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE,
9025                      val & ~TG3_CPMU_MAC_ORIDE_ENABLE);
9026                 break;
9027
9028         case ASIC_REV_5719:
9029         case ASIC_REV_5720:
9030                 val = tr32(TG3_CPMU_CLCK_ORIDE);
9031                 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9032                 break;
9033
9034         default:
9035                 return;
9036         }
9037 }
9038
9039 /* tp->lock is held. */
9040 static int tg3_chip_reset(struct tg3 *tp)
9041         __releases(tp->lock)
9042         __acquires(tp->lock)
9043 {
9044         u32 val;
9045         void (*write_op)(struct tg3 *, u32, u32);
9046         int i, err;
9047
9048         if (!pci_device_is_present(tp->pdev))
9049                 return -ENODEV;
9050
9051         tg3_nvram_lock(tp);
9052
9053         tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
9054
9055         /* No matching tg3_nvram_unlock() after this because
9056          * chip reset below will undo the nvram lock.
9057          */
9058         tp->nvram_lock_cnt = 0;
9059
9060         /* GRC_MISC_CFG core clock reset will clear the memory
9061          * enable bit in PCI register 4 and the MSI enable bit
9062          * on some chips, so we save relevant registers here.
9063          */
9064         tg3_save_pci_state(tp);
9065
9066         if (tg3_asic_rev(tp) == ASIC_REV_5752 ||
9067             tg3_flag(tp, 5755_PLUS))
9068                 tw32(GRC_FASTBOOT_PC, 0);
9069
9070         /*
9071          * We must avoid the readl() that normally takes place.
9072          * It locks machines, causes machine checks, and other
9073          * fun things.  So, temporarily disable the 5701
9074          * hardware workaround, while we do the reset.
9075          */
9076         write_op = tp->write32;
9077         if (write_op == tg3_write_flush_reg32)
9078                 tp->write32 = tg3_write32;
9079
9080         /* Prevent the irq handler from reading or writing PCI registers
9081          * during chip reset when the memory enable bit in the PCI command
9082          * register may be cleared.  The chip does not generate interrupt
9083          * at this time, but the irq handler may still be called due to irq
9084          * sharing or irqpoll.
9085          */
9086         tg3_flag_set(tp, CHIP_RESETTING);
9087         for (i = 0; i < tp->irq_cnt; i++) {
9088                 struct tg3_napi *tnapi = &tp->napi[i];
9089                 if (tnapi->hw_status) {
9090                         tnapi->hw_status->status = 0;
9091                         tnapi->hw_status->status_tag = 0;
9092                 }
9093                 tnapi->last_tag = 0;
9094                 tnapi->last_irq_tag = 0;
9095         }
9096         smp_mb();
9097
9098         tg3_full_unlock(tp);
9099
9100         for (i = 0; i < tp->irq_cnt; i++)
9101                 synchronize_irq(tp->napi[i].irq_vec);
9102
9103         tg3_full_lock(tp, 0);
9104
9105         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9106                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9107                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9108         }
9109
9110         /* do the reset */
9111         val = GRC_MISC_CFG_CORECLK_RESET;
9112
9113         if (tg3_flag(tp, PCI_EXPRESS)) {
9114                 /* Force PCIe 1.0a mode */
9115                 if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
9116                     !tg3_flag(tp, 57765_PLUS) &&
9117                     tr32(TG3_PCIE_PHY_TSTCTL) ==
9118                     (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
9119                         tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
9120
9121                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) {
9122                         tw32(GRC_MISC_CFG, (1 << 29));
9123                         val |= (1 << 29);
9124                 }
9125         }
9126
9127         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
9128                 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
9129                 tw32(GRC_VCPU_EXT_CTRL,
9130                      tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
9131         }
9132
9133         /* Set the clock to the highest frequency to avoid timeouts. With link
9134          * aware mode, the clock speed could be slow and bootcode does not
9135          * complete within the expected time. Override the clock to allow the
9136          * bootcode to finish sooner and then restore it.
9137          */
9138         tg3_override_clk(tp);
9139
9140         /* Manage gphy power for all CPMU absent PCIe devices. */
9141         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
9142                 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
9143
9144         tw32(GRC_MISC_CFG, val);
9145
9146         /* restore 5701 hardware bug workaround write method */
9147         tp->write32 = write_op;
9148
9149         /* Unfortunately, we have to delay before the PCI read back.
9150          * Some 575X chips even will not respond to a PCI cfg access
9151          * when the reset command is given to the chip.
9152          *
9153          * How do these hardware designers expect things to work
9154          * properly if the PCI write is posted for a long period
9155          * of time?  It is always necessary to have some method by
9156          * which a register read back can occur to push the write
9157          * out which does the reset.
9158          *
9159          * For most tg3 variants the trick below was working.
9160          * Ho hum...
9161          */
9162         udelay(120);
9163
9164         /* Flush PCI posted writes.  The normal MMIO registers
9165          * are inaccessible at this time so this is the only
9166          * way to make this reliably (actually, this is no longer
9167          * the case, see above).  I tried to use indirect
9168          * register read/write but this upset some 5701 variants.
9169          */
9170         pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
9171
9172         udelay(120);
9173
9174         if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
9175                 u16 val16;
9176
9177                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) {
9178                         int j;
9179                         u32 cfg_val;
9180
9181                         /* Wait for link training to complete.  */
9182                         for (j = 0; j < 5000; j++)
9183                                 udelay(100);
9184
9185                         pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
9186                         pci_write_config_dword(tp->pdev, 0xc4,
9187                                                cfg_val | (1 << 15));
9188                 }
9189
9190                 /* Clear the "no snoop" and "relaxed ordering" bits. */
9191                 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
9192                 /*
9193                  * Older PCIe devices only support the 128 byte
9194                  * MPS setting.  Enforce the restriction.
9195                  */
9196                 if (!tg3_flag(tp, CPMU_PRESENT))
9197                         val16 |= PCI_EXP_DEVCTL_PAYLOAD;
9198                 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
9199
9200                 /* Clear error status */
9201                 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
9202                                       PCI_EXP_DEVSTA_CED |
9203                                       PCI_EXP_DEVSTA_NFED |
9204                                       PCI_EXP_DEVSTA_FED |
9205                                       PCI_EXP_DEVSTA_URD);
9206         }
9207
9208         tg3_restore_pci_state(tp);
9209
9210         tg3_flag_clear(tp, CHIP_RESETTING);
9211         tg3_flag_clear(tp, ERROR_PROCESSED);
9212
9213         val = 0;
9214         if (tg3_flag(tp, 5780_CLASS))
9215                 val = tr32(MEMARB_MODE);
9216         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9217
9218         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) {
9219                 tg3_stop_fw(tp);
9220                 tw32(0x5000, 0x400);
9221         }
9222
9223         if (tg3_flag(tp, IS_SSB_CORE)) {
9224                 /*
9225                  * BCM4785: In order to avoid repercussions from using
9226                  * potentially defective internal ROM, stop the Rx RISC CPU,
9227                  * which is not required.
9228                  */
9229                 tg3_stop_fw(tp);
9230                 tg3_halt_cpu(tp, RX_CPU_BASE);
9231         }
9232
9233         err = tg3_poll_fw(tp);
9234         if (err)
9235                 return err;
9236
9237         tw32(GRC_MODE, tp->grc_mode);
9238
9239         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
9240                 val = tr32(0xc4);
9241
9242                 tw32(0xc4, val | (1 << 15));
9243         }
9244
9245         if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
9246             tg3_asic_rev(tp) == ASIC_REV_5705) {
9247                 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
9248                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0)
9249                         tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
9250                 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9251         }
9252
9253         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9254                 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
9255                 val = tp->mac_mode;
9256         } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9257                 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
9258                 val = tp->mac_mode;
9259         } else
9260                 val = 0;
9261
9262         tw32_f(MAC_MODE, val);
9263         udelay(40);
9264
9265         tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
9266
9267         tg3_mdio_start(tp);
9268
9269         if (tg3_flag(tp, PCI_EXPRESS) &&
9270             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
9271             tg3_asic_rev(tp) != ASIC_REV_5785 &&
9272             !tg3_flag(tp, 57765_PLUS)) {
9273                 val = tr32(0x7c00);
9274
9275                 tw32(0x7c00, val | (1 << 25));
9276         }
9277
9278         tg3_restore_clk(tp);
9279
9280         /* Increase the core clock speed to fix tx timeout issue for 5762
9281          * with 100Mbps link speed.
9282          */
9283         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
9284                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9285                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9286                      TG3_CPMU_MAC_ORIDE_ENABLE);
9287         }
9288
9289         /* Reprobe ASF enable state.  */
9290         tg3_flag_clear(tp, ENABLE_ASF);
9291         tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
9292                            TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
9293
9294         tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
9295         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9296         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9297                 u32 nic_cfg;
9298
9299                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9300                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9301                         tg3_flag_set(tp, ENABLE_ASF);
9302                         tp->last_event_jiffies = jiffies;
9303                         if (tg3_flag(tp, 5750_PLUS))
9304                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
9305
9306                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg);
9307                         if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK)
9308                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
9309                         if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID)
9310                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
9311                 }
9312         }
9313
9314         return 0;
9315 }
9316
9317 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
9318 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
9319 static void __tg3_set_rx_mode(struct net_device *);
9320
9321 /* tp->lock is held. */
9322 static int tg3_halt(struct tg3 *tp, int kind, bool silent)
9323 {
9324         int err;
9325
9326         tg3_stop_fw(tp);
9327
9328         tg3_write_sig_pre_reset(tp, kind);
9329
9330         tg3_abort_hw(tp, silent);
9331         err = tg3_chip_reset(tp);
9332
9333         __tg3_set_mac_addr(tp, false);
9334
9335         tg3_write_sig_legacy(tp, kind);
9336         tg3_write_sig_post_reset(tp, kind);
9337
9338         if (tp->hw_stats) {
9339                 /* Save the stats across chip resets... */
9340                 tg3_get_nstats(tp, &tp->net_stats_prev);
9341                 tg3_get_estats(tp, &tp->estats_prev);
9342
9343                 /* And make sure the next sample is new data */
9344                 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
9345         }
9346
9347         return err;
9348 }
9349
9350 static int tg3_set_mac_addr(struct net_device *dev, void *p)
9351 {
9352         struct tg3 *tp = netdev_priv(dev);
9353         struct sockaddr *addr = p;
9354         int err = 0;
9355         bool skip_mac_1 = false;
9356
9357         if (!is_valid_ether_addr(addr->sa_data))
9358                 return -EADDRNOTAVAIL;
9359
9360         eth_hw_addr_set(dev, addr->sa_data);
9361
9362         if (!netif_running(dev))
9363                 return 0;
9364
9365         if (tg3_flag(tp, ENABLE_ASF)) {
9366                 u32 addr0_high, addr0_low, addr1_high, addr1_low;
9367
9368                 addr0_high = tr32(MAC_ADDR_0_HIGH);
9369                 addr0_low = tr32(MAC_ADDR_0_LOW);
9370                 addr1_high = tr32(MAC_ADDR_1_HIGH);
9371                 addr1_low = tr32(MAC_ADDR_1_LOW);
9372
9373                 /* Skip MAC addr 1 if ASF is using it. */
9374                 if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
9375                     !(addr1_high == 0 && addr1_low == 0))
9376                         skip_mac_1 = true;
9377         }
9378         spin_lock_bh(&tp->lock);
9379         __tg3_set_mac_addr(tp, skip_mac_1);
9380         __tg3_set_rx_mode(dev);
9381         spin_unlock_bh(&tp->lock);
9382
9383         return err;
9384 }
9385
9386 /* tp->lock is held. */
9387 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
9388                            dma_addr_t mapping, u32 maxlen_flags,
9389                            u32 nic_addr)
9390 {
9391         tg3_write_mem(tp,
9392                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
9393                       ((u64) mapping >> 32));
9394         tg3_write_mem(tp,
9395                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
9396                       ((u64) mapping & 0xffffffff));
9397         tg3_write_mem(tp,
9398                       (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
9399                        maxlen_flags);
9400
9401         if (!tg3_flag(tp, 5705_PLUS))
9402                 tg3_write_mem(tp,
9403                               (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
9404                               nic_addr);
9405 }
9406
9407
9408 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9409 {
9410         int i = 0;
9411
9412         if (!tg3_flag(tp, ENABLE_TSS)) {
9413                 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
9414                 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
9415                 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
9416         } else {
9417                 tw32(HOSTCC_TXCOL_TICKS, 0);
9418                 tw32(HOSTCC_TXMAX_FRAMES, 0);
9419                 tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
9420
9421                 for (; i < tp->txq_cnt; i++) {
9422                         u32 reg;
9423
9424                         reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
9425                         tw32(reg, ec->tx_coalesce_usecs);
9426                         reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
9427                         tw32(reg, ec->tx_max_coalesced_frames);
9428                         reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
9429                         tw32(reg, ec->tx_max_coalesced_frames_irq);
9430                 }
9431         }
9432
9433         for (; i < tp->irq_max - 1; i++) {
9434                 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
9435                 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
9436                 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9437         }
9438 }
9439
9440 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9441 {
9442         int i = 0;
9443         u32 limit = tp->rxq_cnt;
9444
9445         if (!tg3_flag(tp, ENABLE_RSS)) {
9446                 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
9447                 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
9448                 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
9449                 limit--;
9450         } else {
9451                 tw32(HOSTCC_RXCOL_TICKS, 0);
9452                 tw32(HOSTCC_RXMAX_FRAMES, 0);
9453                 tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
9454         }
9455
9456         for (; i < limit; i++) {
9457                 u32 reg;
9458
9459                 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
9460                 tw32(reg, ec->rx_coalesce_usecs);
9461                 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
9462                 tw32(reg, ec->rx_max_coalesced_frames);
9463                 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
9464                 tw32(reg, ec->rx_max_coalesced_frames_irq);
9465         }
9466
9467         for (; i < tp->irq_max - 1; i++) {
9468                 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
9469                 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
9470                 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9471         }
9472 }
9473
9474 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
9475 {
9476         tg3_coal_tx_init(tp, ec);
9477         tg3_coal_rx_init(tp, ec);
9478
9479         if (!tg3_flag(tp, 5705_PLUS)) {
9480                 u32 val = ec->stats_block_coalesce_usecs;
9481
9482                 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
9483                 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
9484
9485                 if (!tp->link_up)
9486                         val = 0;
9487
9488                 tw32(HOSTCC_STAT_COAL_TICKS, val);
9489         }
9490 }
9491
9492 /* tp->lock is held. */
9493 static void tg3_tx_rcbs_disable(struct tg3 *tp)
9494 {
9495         u32 txrcb, limit;
9496
9497         /* Disable all transmit rings but the first. */
9498         if (!tg3_flag(tp, 5705_PLUS))
9499                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
9500         else if (tg3_flag(tp, 5717_PLUS))
9501                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
9502         else if (tg3_flag(tp, 57765_CLASS) ||
9503                  tg3_asic_rev(tp) == ASIC_REV_5762)
9504                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
9505         else
9506                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9507
9508         for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9509              txrcb < limit; txrcb += TG3_BDINFO_SIZE)
9510                 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
9511                               BDINFO_FLAGS_DISABLED);
9512 }
9513
9514 /* tp->lock is held. */
9515 static void tg3_tx_rcbs_init(struct tg3 *tp)
9516 {
9517         int i = 0;
9518         u32 txrcb = NIC_SRAM_SEND_RCB;
9519
9520         if (tg3_flag(tp, ENABLE_TSS))
9521                 i++;
9522
9523         for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) {
9524                 struct tg3_napi *tnapi = &tp->napi[i];
9525
9526                 if (!tnapi->tx_ring)
9527                         continue;
9528
9529                 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
9530                                (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
9531                                NIC_SRAM_TX_BUFFER_DESC);
9532         }
9533 }
9534
9535 /* tp->lock is held. */
9536 static void tg3_rx_ret_rcbs_disable(struct tg3 *tp)
9537 {
9538         u32 rxrcb, limit;
9539
9540         /* Disable all receive return rings but the first. */
9541         if (tg3_flag(tp, 5717_PLUS))
9542                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
9543         else if (!tg3_flag(tp, 5705_PLUS))
9544                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
9545         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9546                  tg3_asic_rev(tp) == ASIC_REV_5762 ||
9547                  tg3_flag(tp, 57765_CLASS))
9548                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
9549         else
9550                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9551
9552         for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9553              rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
9554                 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
9555                               BDINFO_FLAGS_DISABLED);
9556 }
9557
9558 /* tp->lock is held. */
9559 static void tg3_rx_ret_rcbs_init(struct tg3 *tp)
9560 {
9561         int i = 0;
9562         u32 rxrcb = NIC_SRAM_RCV_RET_RCB;
9563
9564         if (tg3_flag(tp, ENABLE_RSS))
9565                 i++;
9566
9567         for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) {
9568                 struct tg3_napi *tnapi = &tp->napi[i];
9569
9570                 if (!tnapi->rx_rcb)
9571                         continue;
9572
9573                 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
9574                                (tp->rx_ret_ring_mask + 1) <<
9575                                 BDINFO_FLAGS_MAXLEN_SHIFT, 0);
9576         }
9577 }
9578
9579 /* tp->lock is held. */
9580 static void tg3_rings_reset(struct tg3 *tp)
9581 {
9582         int i;
9583         u32 stblk;
9584         struct tg3_napi *tnapi = &tp->napi[0];
9585
9586         tg3_tx_rcbs_disable(tp);
9587
9588         tg3_rx_ret_rcbs_disable(tp);
9589
9590         /* Disable interrupts */
9591         tw32_mailbox_f(tp->napi[0].int_mbox, 1);
9592         tp->napi[0].chk_msi_cnt = 0;
9593         tp->napi[0].last_rx_cons = 0;
9594         tp->napi[0].last_tx_cons = 0;
9595
9596         /* Zero mailbox registers. */
9597         if (tg3_flag(tp, SUPPORT_MSIX)) {
9598                 for (i = 1; i < tp->irq_max; i++) {
9599                         tp->napi[i].tx_prod = 0;
9600                         tp->napi[i].tx_cons = 0;
9601                         if (tg3_flag(tp, ENABLE_TSS))
9602                                 tw32_mailbox(tp->napi[i].prodmbox, 0);
9603                         tw32_rx_mbox(tp->napi[i].consmbox, 0);
9604                         tw32_mailbox_f(tp->napi[i].int_mbox, 1);
9605                         tp->napi[i].chk_msi_cnt = 0;
9606                         tp->napi[i].last_rx_cons = 0;
9607                         tp->napi[i].last_tx_cons = 0;
9608                 }
9609                 if (!tg3_flag(tp, ENABLE_TSS))
9610                         tw32_mailbox(tp->napi[0].prodmbox, 0);
9611         } else {
9612                 tp->napi[0].tx_prod = 0;
9613                 tp->napi[0].tx_cons = 0;
9614                 tw32_mailbox(tp->napi[0].prodmbox, 0);
9615                 tw32_rx_mbox(tp->napi[0].consmbox, 0);
9616         }
9617
9618         /* Make sure the NIC-based send BD rings are disabled. */
9619         if (!tg3_flag(tp, 5705_PLUS)) {
9620                 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
9621                 for (i = 0; i < 16; i++)
9622                         tw32_tx_mbox(mbox + i * 8, 0);
9623         }
9624
9625         /* Clear status block in ram. */
9626         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9627
9628         /* Set status block DMA address */
9629         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9630              ((u64) tnapi->status_mapping >> 32));
9631         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9632              ((u64) tnapi->status_mapping & 0xffffffff));
9633
9634         stblk = HOSTCC_STATBLCK_RING1;
9635
9636         for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
9637                 u64 mapping = (u64)tnapi->status_mapping;
9638                 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
9639                 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
9640                 stblk += 8;
9641
9642                 /* Clear status block in ram. */
9643                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9644         }
9645
9646         tg3_tx_rcbs_init(tp);
9647         tg3_rx_ret_rcbs_init(tp);
9648 }
9649
9650 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
9651 {
9652         u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
9653
9654         if (!tg3_flag(tp, 5750_PLUS) ||
9655             tg3_flag(tp, 5780_CLASS) ||
9656             tg3_asic_rev(tp) == ASIC_REV_5750 ||
9657             tg3_asic_rev(tp) == ASIC_REV_5752 ||
9658             tg3_flag(tp, 57765_PLUS))
9659                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
9660         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9661                  tg3_asic_rev(tp) == ASIC_REV_5787)
9662                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
9663         else
9664                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
9665
9666         nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
9667         host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
9668
9669         val = min(nic_rep_thresh, host_rep_thresh);
9670         tw32(RCVBDI_STD_THRESH, val);
9671
9672         if (tg3_flag(tp, 57765_PLUS))
9673                 tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
9674
9675         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
9676                 return;
9677
9678         bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
9679
9680         host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
9681
9682         val = min(bdcache_maxcnt / 2, host_rep_thresh);
9683         tw32(RCVBDI_JUMBO_THRESH, val);
9684
9685         if (tg3_flag(tp, 57765_PLUS))
9686                 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
9687 }
9688
9689 static inline u32 calc_crc(unsigned char *buf, int len)
9690 {
9691         u32 reg;
9692         u32 tmp;
9693         int j, k;
9694
9695         reg = 0xffffffff;
9696
9697         for (j = 0; j < len; j++) {
9698                 reg ^= buf[j];
9699
9700                 for (k = 0; k < 8; k++) {
9701                         tmp = reg & 0x01;
9702
9703                         reg >>= 1;
9704
9705                         if (tmp)
9706                                 reg ^= CRC32_POLY_LE;
9707                 }
9708         }
9709
9710         return ~reg;
9711 }
9712
9713 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
9714 {
9715         /* accept or reject all multicast frames */
9716         tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
9717         tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
9718         tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
9719         tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
9720 }
9721
9722 static void __tg3_set_rx_mode(struct net_device *dev)
9723 {
9724         struct tg3 *tp = netdev_priv(dev);
9725         u32 rx_mode;
9726
9727         rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
9728                                   RX_MODE_KEEP_VLAN_TAG);
9729
9730 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
9731         /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
9732          * flag clear.
9733          */
9734         if (!tg3_flag(tp, ENABLE_ASF))
9735                 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
9736 #endif
9737
9738         if (dev->flags & IFF_PROMISC) {
9739                 /* Promiscuous mode. */
9740                 rx_mode |= RX_MODE_PROMISC;
9741         } else if (dev->flags & IFF_ALLMULTI) {
9742                 /* Accept all multicast. */
9743                 tg3_set_multi(tp, 1);
9744         } else if (netdev_mc_empty(dev)) {
9745                 /* Reject all multicast. */
9746                 tg3_set_multi(tp, 0);
9747         } else {
9748                 /* Accept one or more multicast(s). */
9749                 struct netdev_hw_addr *ha;
9750                 u32 mc_filter[4] = { 0, };
9751                 u32 regidx;
9752                 u32 bit;
9753                 u32 crc;
9754
9755                 netdev_for_each_mc_addr(ha, dev) {
9756                         crc = calc_crc(ha->addr, ETH_ALEN);
9757                         bit = ~crc & 0x7f;
9758                         regidx = (bit & 0x60) >> 5;
9759                         bit &= 0x1f;
9760                         mc_filter[regidx] |= (1 << bit);
9761                 }
9762
9763                 tw32(MAC_HASH_REG_0, mc_filter[0]);
9764                 tw32(MAC_HASH_REG_1, mc_filter[1]);
9765                 tw32(MAC_HASH_REG_2, mc_filter[2]);
9766                 tw32(MAC_HASH_REG_3, mc_filter[3]);
9767         }
9768
9769         if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) {
9770                 rx_mode |= RX_MODE_PROMISC;
9771         } else if (!(dev->flags & IFF_PROMISC)) {
9772                 /* Add all entries into to the mac addr filter list */
9773                 int i = 0;
9774                 struct netdev_hw_addr *ha;
9775
9776                 netdev_for_each_uc_addr(ha, dev) {
9777                         __tg3_set_one_mac_addr(tp, ha->addr,
9778                                                i + TG3_UCAST_ADDR_IDX(tp));
9779                         i++;
9780                 }
9781         }
9782
9783         if (rx_mode != tp->rx_mode) {
9784                 tp->rx_mode = rx_mode;
9785                 tw32_f(MAC_RX_MODE, rx_mode);
9786                 udelay(10);
9787         }
9788 }
9789
9790 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
9791 {
9792         int i;
9793
9794         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
9795                 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
9796 }
9797
9798 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
9799 {
9800         int i;
9801
9802         if (!tg3_flag(tp, SUPPORT_MSIX))
9803                 return;
9804
9805         if (tp->rxq_cnt == 1) {
9806                 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
9807                 return;
9808         }
9809
9810         /* Validate table against current IRQ count */
9811         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
9812                 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
9813                         break;
9814         }
9815
9816         if (i != TG3_RSS_INDIR_TBL_SIZE)
9817                 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
9818 }
9819
9820 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
9821 {
9822         int i = 0;
9823         u32 reg = MAC_RSS_INDIR_TBL_0;
9824
9825         while (i < TG3_RSS_INDIR_TBL_SIZE) {
9826                 u32 val = tp->rss_ind_tbl[i];
9827                 i++;
9828                 for (; i % 8; i++) {
9829                         val <<= 4;
9830                         val |= tp->rss_ind_tbl[i];
9831                 }
9832                 tw32(reg, val);
9833                 reg += 4;
9834         }
9835 }
9836
9837 static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp)
9838 {
9839         if (tg3_asic_rev(tp) == ASIC_REV_5719)
9840                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719;
9841         else
9842                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720;
9843 }
9844
9845 /* tp->lock is held. */
9846 static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
9847 {
9848         u32 val, rdmac_mode;
9849         int i, err, limit;
9850         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
9851
9852         tg3_disable_ints(tp);
9853
9854         tg3_stop_fw(tp);
9855
9856         tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
9857
9858         if (tg3_flag(tp, INIT_COMPLETE))
9859                 tg3_abort_hw(tp, 1);
9860
9861         if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
9862             !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) {
9863                 tg3_phy_pull_config(tp);
9864                 tg3_eee_pull_config(tp, NULL);
9865                 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
9866         }
9867
9868         /* Enable MAC control of LPI */
9869         if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
9870                 tg3_setup_eee(tp);
9871
9872         if (reset_phy)
9873                 tg3_phy_reset(tp);
9874
9875         err = tg3_chip_reset(tp);
9876         if (err)
9877                 return err;
9878
9879         tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9880
9881         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
9882                 val = tr32(TG3_CPMU_CTRL);
9883                 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9884                 tw32(TG3_CPMU_CTRL, val);
9885
9886                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9887                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9888                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9889                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9890
9891                 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9892                 val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9893                 val |= CPMU_LNK_AWARE_MACCLK_6_25;
9894                 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9895
9896                 val = tr32(TG3_CPMU_HST_ACC);
9897                 val &= ~CPMU_HST_ACC_MACCLK_MASK;
9898                 val |= CPMU_HST_ACC_MACCLK_6_25;
9899                 tw32(TG3_CPMU_HST_ACC, val);
9900         }
9901
9902         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9903                 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9904                 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9905                        PCIE_PWR_MGMT_L1_THRESH_4MS;
9906                 tw32(PCIE_PWR_MGMT_THRESH, val);
9907
9908                 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9909                 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9910
9911                 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9912
9913                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9914                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9915         }
9916
9917         if (tg3_flag(tp, L1PLLPD_EN)) {
9918                 u32 grc_mode = tr32(GRC_MODE);
9919
9920                 /* Access the lower 1K of PL PCIE block registers. */
9921                 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9922                 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9923
9924                 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9925                 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9926                      val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9927
9928                 tw32(GRC_MODE, grc_mode);
9929         }
9930
9931         if (tg3_flag(tp, 57765_CLASS)) {
9932                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
9933                         u32 grc_mode = tr32(GRC_MODE);
9934
9935                         /* Access the lower 1K of PL PCIE block registers. */
9936                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9937                         tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9938
9939                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9940                                    TG3_PCIE_PL_LO_PHYCTL5);
9941                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9942                              val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9943
9944                         tw32(GRC_MODE, grc_mode);
9945                 }
9946
9947                 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) {
9948                         u32 grc_mode;
9949
9950                         /* Fix transmit hangs */
9951                         val = tr32(TG3_CPMU_PADRNG_CTL);
9952                         val |= TG3_CPMU_PADRNG_CTL_RDIV2;
9953                         tw32(TG3_CPMU_PADRNG_CTL, val);
9954
9955                         grc_mode = tr32(GRC_MODE);
9956
9957                         /* Access the lower 1K of DL PCIE block registers. */
9958                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9959                         tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9960
9961                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9962                                    TG3_PCIE_DL_LO_FTSMAX);
9963                         val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
9964                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
9965                              val | TG3_PCIE_DL_LO_FTSMAX_VAL);
9966
9967                         tw32(GRC_MODE, grc_mode);
9968                 }
9969
9970                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9971                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9972                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9973                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9974         }
9975
9976         /* This works around an issue with Athlon chipsets on
9977          * B3 tigon3 silicon.  This bit has no effect on any
9978          * other revision.  But do not set this on PCI Express
9979          * chips and don't even touch the clocks if the CPMU is present.
9980          */
9981         if (!tg3_flag(tp, CPMU_PRESENT)) {
9982                 if (!tg3_flag(tp, PCI_EXPRESS))
9983                         tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
9984                 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9985         }
9986
9987         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
9988             tg3_flag(tp, PCIX_MODE)) {
9989                 val = tr32(TG3PCI_PCISTATE);
9990                 val |= PCISTATE_RETRY_SAME_DMA;
9991                 tw32(TG3PCI_PCISTATE, val);
9992         }
9993
9994         if (tg3_flag(tp, ENABLE_APE)) {
9995                 /* Allow reads and writes to the
9996                  * APE register and memory space.
9997                  */
9998                 val = tr32(TG3PCI_PCISTATE);
9999                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
10000                        PCISTATE_ALLOW_APE_SHMEM_WR |
10001                        PCISTATE_ALLOW_APE_PSPACE_WR;
10002                 tw32(TG3PCI_PCISTATE, val);
10003         }
10004
10005         if (tg3_chip_rev(tp) == CHIPREV_5704_BX) {
10006                 /* Enable some hw fixes.  */
10007                 val = tr32(TG3PCI_MSI_DATA);
10008                 val |= (1 << 26) | (1 << 28) | (1 << 29);
10009                 tw32(TG3PCI_MSI_DATA, val);
10010         }
10011
10012         /* Descriptor ring init may make accesses to the
10013          * NIC SRAM area to setup the TX descriptors, so we
10014          * can only do this after the hardware has been
10015          * successfully reset.
10016          */
10017         err = tg3_init_rings(tp);
10018         if (err)
10019                 return err;
10020
10021         if (tg3_flag(tp, 57765_PLUS)) {
10022                 val = tr32(TG3PCI_DMA_RW_CTRL) &
10023                       ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
10024                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
10025                         val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
10026                 if (!tg3_flag(tp, 57765_CLASS) &&
10027                     tg3_asic_rev(tp) != ASIC_REV_5717 &&
10028                     tg3_asic_rev(tp) != ASIC_REV_5762)
10029                         val |= DMA_RWCTRL_TAGGED_STAT_WA;
10030                 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
10031         } else if (tg3_asic_rev(tp) != ASIC_REV_5784 &&
10032                    tg3_asic_rev(tp) != ASIC_REV_5761) {
10033                 /* This value is determined during the probe time DMA
10034                  * engine test, tg3_test_dma.
10035                  */
10036                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10037         }
10038
10039         tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
10040                           GRC_MODE_4X_NIC_SEND_RINGS |
10041                           GRC_MODE_NO_TX_PHDR_CSUM |
10042                           GRC_MODE_NO_RX_PHDR_CSUM);
10043         tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
10044
10045         /* Pseudo-header checksum is done by hardware logic and not
10046          * the offload processers, so make the chip do the pseudo-
10047          * header checksums on receive.  For transmit it is more
10048          * convenient to do the pseudo-header checksum in software
10049          * as Linux does that on transmit for us in all cases.
10050          */
10051         tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
10052
10053         val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
10054         if (tp->rxptpctl)
10055                 tw32(TG3_RX_PTP_CTL,
10056                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
10057
10058         if (tg3_flag(tp, PTP_CAPABLE))
10059                 val |= GRC_MODE_TIME_SYNC_ENABLE;
10060
10061         tw32(GRC_MODE, tp->grc_mode | val);
10062
10063         /* On one of the AMD platform, MRRS is restricted to 4000 because of
10064          * south bridge limitation. As a workaround, Driver is setting MRRS
10065          * to 2048 instead of default 4096.
10066          */
10067         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
10068             tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) {
10069                 val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK;
10070                 tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048);
10071         }
10072
10073         /* Setup the timer prescalar register.  Clock is always 66Mhz. */
10074         val = tr32(GRC_MISC_CFG);
10075         val &= ~0xff;
10076         val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
10077         tw32(GRC_MISC_CFG, val);
10078
10079         /* Initialize MBUF/DESC pool. */
10080         if (tg3_flag(tp, 5750_PLUS)) {
10081                 /* Do nothing.  */
10082         } else if (tg3_asic_rev(tp) != ASIC_REV_5705) {
10083                 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
10084                 if (tg3_asic_rev(tp) == ASIC_REV_5704)
10085                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
10086                 else
10087                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
10088                 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
10089                 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
10090         } else if (tg3_flag(tp, TSO_CAPABLE)) {
10091                 int fw_len;
10092
10093                 fw_len = tp->fw_len;
10094                 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
10095                 tw32(BUFMGR_MB_POOL_ADDR,
10096                      NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
10097                 tw32(BUFMGR_MB_POOL_SIZE,
10098                      NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
10099         }
10100
10101         if (tp->dev->mtu <= ETH_DATA_LEN) {
10102                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10103                      tp->bufmgr_config.mbuf_read_dma_low_water);
10104                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10105                      tp->bufmgr_config.mbuf_mac_rx_low_water);
10106                 tw32(BUFMGR_MB_HIGH_WATER,
10107                      tp->bufmgr_config.mbuf_high_water);
10108         } else {
10109                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10110                      tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
10111                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10112                      tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
10113                 tw32(BUFMGR_MB_HIGH_WATER,
10114                      tp->bufmgr_config.mbuf_high_water_jumbo);
10115         }
10116         tw32(BUFMGR_DMA_LOW_WATER,
10117              tp->bufmgr_config.dma_low_water);
10118         tw32(BUFMGR_DMA_HIGH_WATER,
10119              tp->bufmgr_config.dma_high_water);
10120
10121         val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
10122         if (tg3_asic_rev(tp) == ASIC_REV_5719)
10123                 val |= BUFMGR_MODE_NO_TX_UNDERRUN;
10124         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10125             tg3_asic_rev(tp) == ASIC_REV_5762 ||
10126             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10127             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0)
10128                 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
10129         tw32(BUFMGR_MODE, val);
10130         for (i = 0; i < 2000; i++) {
10131                 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
10132                         break;
10133                 udelay(10);
10134         }
10135         if (i >= 2000) {
10136                 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
10137                 return -ENODEV;
10138         }
10139
10140         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1)
10141                 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
10142
10143         tg3_setup_rxbd_thresholds(tp);
10144
10145         /* Initialize TG3_BDINFO's at:
10146          *  RCVDBDI_STD_BD:     standard eth size rx ring
10147          *  RCVDBDI_JUMBO_BD:   jumbo frame rx ring
10148          *  RCVDBDI_MINI_BD:    small frame rx ring (??? does not work)
10149          *
10150          * like so:
10151          *  TG3_BDINFO_HOST_ADDR:       high/low parts of DMA address of ring
10152          *  TG3_BDINFO_MAXLEN_FLAGS:    (rx max buffer size << 16) |
10153          *                              ring attribute flags
10154          *  TG3_BDINFO_NIC_ADDR:        location of descriptors in nic SRAM
10155          *
10156          * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
10157          * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
10158          *
10159          * The size of each ring is fixed in the firmware, but the location is
10160          * configurable.
10161          */
10162         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10163              ((u64) tpr->rx_std_mapping >> 32));
10164         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10165              ((u64) tpr->rx_std_mapping & 0xffffffff));
10166         if (!tg3_flag(tp, 5717_PLUS))
10167                 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
10168                      NIC_SRAM_RX_BUFFER_DESC);
10169
10170         /* Disable the mini ring */
10171         if (!tg3_flag(tp, 5705_PLUS))
10172                 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
10173                      BDINFO_FLAGS_DISABLED);
10174
10175         /* Program the jumbo buffer descriptor ring control
10176          * blocks on those devices that have them.
10177          */
10178         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10179             (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
10180
10181                 if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
10182                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10183                              ((u64) tpr->rx_jmb_mapping >> 32));
10184                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10185                              ((u64) tpr->rx_jmb_mapping & 0xffffffff));
10186                         val = TG3_RX_JMB_RING_SIZE(tp) <<
10187                               BDINFO_FLAGS_MAXLEN_SHIFT;
10188                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10189                              val | BDINFO_FLAGS_USE_EXT_RECV);
10190                         if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
10191                             tg3_flag(tp, 57765_CLASS) ||
10192                             tg3_asic_rev(tp) == ASIC_REV_5762)
10193                                 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
10194                                      NIC_SRAM_RX_JUMBO_BUFFER_DESC);
10195                 } else {
10196                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10197                              BDINFO_FLAGS_DISABLED);
10198                 }
10199
10200                 if (tg3_flag(tp, 57765_PLUS)) {
10201                         val = TG3_RX_STD_RING_SIZE(tp);
10202                         val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
10203                         val |= (TG3_RX_STD_DMA_SZ << 2);
10204                 } else
10205                         val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
10206         } else
10207                 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
10208
10209         tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
10210
10211         tpr->rx_std_prod_idx = tp->rx_pending;
10212         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
10213
10214         tpr->rx_jmb_prod_idx =
10215                 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
10216         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
10217
10218         tg3_rings_reset(tp);
10219
10220         /* Initialize MAC address and backoff seed. */
10221         __tg3_set_mac_addr(tp, false);
10222
10223         /* MTU + ethernet header + FCS + optional VLAN tag */
10224         tw32(MAC_RX_MTU_SIZE,
10225              tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
10226
10227         /* The slot time is changed by tg3_setup_phy if we
10228          * run at gigabit with half duplex.
10229          */
10230         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
10231               (6 << TX_LENGTHS_IPG_SHIFT) |
10232               (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
10233
10234         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10235             tg3_asic_rev(tp) == ASIC_REV_5762)
10236                 val |= tr32(MAC_TX_LENGTHS) &
10237                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
10238                         TX_LENGTHS_CNT_DWN_VAL_MSK);
10239
10240         tw32(MAC_TX_LENGTHS, val);
10241
10242         /* Receive rules. */
10243         tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
10244         tw32(RCVLPC_CONFIG, 0x0181);
10245
10246         /* Calculate RDMAC_MODE setting early, we need it to determine
10247          * the RCVLPC_STATE_ENABLE mask.
10248          */
10249         rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
10250                       RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
10251                       RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
10252                       RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
10253                       RDMAC_MODE_LNGREAD_ENAB);
10254
10255         if (tg3_asic_rev(tp) == ASIC_REV_5717)
10256                 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
10257
10258         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
10259             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10260             tg3_asic_rev(tp) == ASIC_REV_57780)
10261                 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
10262                               RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
10263                               RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
10264
10265         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10266             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10267                 if (tg3_flag(tp, TSO_CAPABLE)) {
10268                         rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
10269                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10270                            !tg3_flag(tp, IS_5788)) {
10271                         rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10272                 }
10273         }
10274
10275         if (tg3_flag(tp, PCI_EXPRESS))
10276                 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10277
10278         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10279                 tp->dma_limit = 0;
10280                 if (tp->dev->mtu <= ETH_DATA_LEN) {
10281                         rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR;
10282                         tp->dma_limit = TG3_TX_BD_DMA_MAX_2K;
10283                 }
10284         }
10285
10286         if (tg3_flag(tp, HW_TSO_1) ||
10287             tg3_flag(tp, HW_TSO_2) ||
10288             tg3_flag(tp, HW_TSO_3))
10289                 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
10290
10291         if (tg3_flag(tp, 57765_PLUS) ||
10292             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10293             tg3_asic_rev(tp) == ASIC_REV_57780)
10294                 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
10295
10296         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10297             tg3_asic_rev(tp) == ASIC_REV_5762)
10298                 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
10299
10300         if (tg3_asic_rev(tp) == ASIC_REV_5761 ||
10301             tg3_asic_rev(tp) == ASIC_REV_5784 ||
10302             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10303             tg3_asic_rev(tp) == ASIC_REV_57780 ||
10304             tg3_flag(tp, 57765_PLUS)) {
10305                 u32 tgtreg;
10306
10307                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10308                         tgtreg = TG3_RDMA_RSRVCTRL_REG2;
10309                 else
10310                         tgtreg = TG3_RDMA_RSRVCTRL_REG;
10311
10312                 val = tr32(tgtreg);
10313                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10314                     tg3_asic_rev(tp) == ASIC_REV_5762) {
10315                         val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
10316                                  TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
10317                                  TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
10318                         val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
10319                                TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
10320                                TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
10321                 }
10322                 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
10323         }
10324
10325         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10326             tg3_asic_rev(tp) == ASIC_REV_5720 ||
10327             tg3_asic_rev(tp) == ASIC_REV_5762) {
10328                 u32 tgtreg;
10329
10330                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10331                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2;
10332                 else
10333                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL;
10334
10335                 val = tr32(tgtreg);
10336                 tw32(tgtreg, val |
10337                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
10338                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
10339         }
10340
10341         /* Receive/send statistics. */
10342         if (tg3_flag(tp, 5750_PLUS)) {
10343                 val = tr32(RCVLPC_STATS_ENABLE);
10344                 val &= ~RCVLPC_STATSENAB_DACK_FIX;
10345                 tw32(RCVLPC_STATS_ENABLE, val);
10346         } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
10347                    tg3_flag(tp, TSO_CAPABLE)) {
10348                 val = tr32(RCVLPC_STATS_ENABLE);
10349                 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
10350                 tw32(RCVLPC_STATS_ENABLE, val);
10351         } else {
10352                 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
10353         }
10354         tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
10355         tw32(SNDDATAI_STATSENAB, 0xffffff);
10356         tw32(SNDDATAI_STATSCTRL,
10357              (SNDDATAI_SCTRL_ENABLE |
10358               SNDDATAI_SCTRL_FASTUPD));
10359
10360         /* Setup host coalescing engine. */
10361         tw32(HOSTCC_MODE, 0);
10362         for (i = 0; i < 2000; i++) {
10363                 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
10364                         break;
10365                 udelay(10);
10366         }
10367
10368         __tg3_set_coalesce(tp, &tp->coal);
10369
10370         if (!tg3_flag(tp, 5705_PLUS)) {
10371                 /* Status/statistics block address.  See tg3_timer,
10372                  * the tg3_periodic_fetch_stats call there, and
10373                  * tg3_get_stats to see how this works for 5705/5750 chips.
10374                  */
10375                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
10376                      ((u64) tp->stats_mapping >> 32));
10377                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
10378                      ((u64) tp->stats_mapping & 0xffffffff));
10379                 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
10380
10381                 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
10382
10383                 /* Clear statistics and status block memory areas */
10384                 for (i = NIC_SRAM_STATS_BLK;
10385                      i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
10386                      i += sizeof(u32)) {
10387                         tg3_write_mem(tp, i, 0);
10388                         udelay(40);
10389                 }
10390         }
10391
10392         tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
10393
10394         tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
10395         tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
10396         if (!tg3_flag(tp, 5705_PLUS))
10397                 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
10398
10399         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
10400                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
10401                 /* reset to prevent losing 1st rx packet intermittently */
10402                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10403                 udelay(10);
10404         }
10405
10406         tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
10407                         MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
10408                         MAC_MODE_FHDE_ENABLE;
10409         if (tg3_flag(tp, ENABLE_APE))
10410                 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
10411         if (!tg3_flag(tp, 5705_PLUS) &&
10412             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10413             tg3_asic_rev(tp) != ASIC_REV_5700)
10414                 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
10415         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
10416         udelay(40);
10417
10418         /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
10419          * If TG3_FLAG_IS_NIC is zero, we should read the
10420          * register to preserve the GPIO settings for LOMs. The GPIOs,
10421          * whether used as inputs or outputs, are set by boot code after
10422          * reset.
10423          */
10424         if (!tg3_flag(tp, IS_NIC)) {
10425                 u32 gpio_mask;
10426
10427                 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
10428                             GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
10429                             GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
10430
10431                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
10432                         gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
10433                                      GRC_LCLCTRL_GPIO_OUTPUT3;
10434
10435                 if (tg3_asic_rev(tp) == ASIC_REV_5755)
10436                         gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
10437
10438                 tp->grc_local_ctrl &= ~gpio_mask;
10439                 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
10440
10441                 /* GPIO1 must be driven high for eeprom write protect */
10442                 if (tg3_flag(tp, EEPROM_WRITE_PROT))
10443                         tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10444                                                GRC_LCLCTRL_GPIO_OUTPUT1);
10445         }
10446         tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10447         udelay(100);
10448
10449         if (tg3_flag(tp, USING_MSIX)) {
10450                 val = tr32(MSGINT_MODE);
10451                 val |= MSGINT_MODE_ENABLE;
10452                 if (tp->irq_cnt > 1)
10453                         val |= MSGINT_MODE_MULTIVEC_EN;
10454                 if (!tg3_flag(tp, 1SHOT_MSI))
10455                         val |= MSGINT_MODE_ONE_SHOT_DISABLE;
10456                 tw32(MSGINT_MODE, val);
10457         }
10458
10459         if (!tg3_flag(tp, 5705_PLUS)) {
10460                 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
10461                 udelay(40);
10462         }
10463
10464         val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
10465                WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
10466                WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
10467                WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
10468                WDMAC_MODE_LNGREAD_ENAB);
10469
10470         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10471             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10472                 if (tg3_flag(tp, TSO_CAPABLE) &&
10473                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 ||
10474                      tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) {
10475                         /* nothing */
10476                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10477                            !tg3_flag(tp, IS_5788)) {
10478                         val |= WDMAC_MODE_RX_ACCEL;
10479                 }
10480         }
10481
10482         /* Enable host coalescing bug fix */
10483         if (tg3_flag(tp, 5755_PLUS))
10484                 val |= WDMAC_MODE_STATUS_TAG_FIX;
10485
10486         if (tg3_asic_rev(tp) == ASIC_REV_5785)
10487                 val |= WDMAC_MODE_BURST_ALL_DATA;
10488
10489         tw32_f(WDMAC_MODE, val);
10490         udelay(40);
10491
10492         if (tg3_flag(tp, PCIX_MODE)) {
10493                 u16 pcix_cmd;
10494
10495                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10496                                      &pcix_cmd);
10497                 if (tg3_asic_rev(tp) == ASIC_REV_5703) {
10498                         pcix_cmd &= ~PCI_X_CMD_MAX_READ;
10499                         pcix_cmd |= PCI_X_CMD_READ_2K;
10500                 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) {
10501                         pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
10502                         pcix_cmd |= PCI_X_CMD_READ_2K;
10503                 }
10504                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10505                                       pcix_cmd);
10506         }
10507
10508         tw32_f(RDMAC_MODE, rdmac_mode);
10509         udelay(40);
10510
10511         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10512             tg3_asic_rev(tp) == ASIC_REV_5720) {
10513                 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
10514                         if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
10515                                 break;
10516                 }
10517                 if (i < TG3_NUM_RDMA_CHANNELS) {
10518                         val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10519                         val |= tg3_lso_rd_dma_workaround_bit(tp);
10520                         tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10521                         tg3_flag_set(tp, 5719_5720_RDMA_BUG);
10522                 }
10523         }
10524
10525         tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
10526         if (!tg3_flag(tp, 5705_PLUS))
10527                 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
10528
10529         if (tg3_asic_rev(tp) == ASIC_REV_5761)
10530                 tw32(SNDDATAC_MODE,
10531                      SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
10532         else
10533                 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
10534
10535         tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
10536         tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
10537         val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
10538         if (tg3_flag(tp, LRG_PROD_RING_CAP))
10539                 val |= RCVDBDI_MODE_LRG_RING_SZ;
10540         tw32(RCVDBDI_MODE, val);
10541         tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
10542         if (tg3_flag(tp, HW_TSO_1) ||
10543             tg3_flag(tp, HW_TSO_2) ||
10544             tg3_flag(tp, HW_TSO_3))
10545                 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
10546         val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
10547         if (tg3_flag(tp, ENABLE_TSS))
10548                 val |= SNDBDI_MODE_MULTI_TXQ_EN;
10549         tw32(SNDBDI_MODE, val);
10550         tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
10551
10552         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
10553                 err = tg3_load_5701_a0_firmware_fix(tp);
10554                 if (err)
10555                         return err;
10556         }
10557
10558         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10559                 /* Ignore any errors for the firmware download. If download
10560                  * fails, the device will operate with EEE disabled
10561                  */
10562                 tg3_load_57766_firmware(tp);
10563         }
10564
10565         if (tg3_flag(tp, TSO_CAPABLE)) {
10566                 err = tg3_load_tso_firmware(tp);
10567                 if (err)
10568                         return err;
10569         }
10570
10571         tp->tx_mode = TX_MODE_ENABLE;
10572
10573         if (tg3_flag(tp, 5755_PLUS) ||
10574             tg3_asic_rev(tp) == ASIC_REV_5906)
10575                 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
10576
10577         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10578             tg3_asic_rev(tp) == ASIC_REV_5762) {
10579                 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
10580                 tp->tx_mode &= ~val;
10581                 tp->tx_mode |= tr32(MAC_TX_MODE) & val;
10582         }
10583
10584         tw32_f(MAC_TX_MODE, tp->tx_mode);
10585         udelay(100);
10586
10587         if (tg3_flag(tp, ENABLE_RSS)) {
10588                 u32 rss_key[10];
10589
10590                 tg3_rss_write_indir_tbl(tp);
10591
10592                 netdev_rss_key_fill(rss_key, 10 * sizeof(u32));
10593
10594                 for (i = 0; i < 10 ; i++)
10595                         tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]);
10596         }
10597
10598         tp->rx_mode = RX_MODE_ENABLE;
10599         if (tg3_flag(tp, 5755_PLUS))
10600                 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
10601
10602         if (tg3_asic_rev(tp) == ASIC_REV_5762)
10603                 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX;
10604
10605         if (tg3_flag(tp, ENABLE_RSS))
10606                 tp->rx_mode |= RX_MODE_RSS_ENABLE |
10607                                RX_MODE_RSS_ITBL_HASH_BITS_7 |
10608                                RX_MODE_RSS_IPV6_HASH_EN |
10609                                RX_MODE_RSS_TCP_IPV6_HASH_EN |
10610                                RX_MODE_RSS_IPV4_HASH_EN |
10611                                RX_MODE_RSS_TCP_IPV4_HASH_EN;
10612
10613         tw32_f(MAC_RX_MODE, tp->rx_mode);
10614         udelay(10);
10615
10616         tw32(MAC_LED_CTRL, tp->led_ctrl);
10617
10618         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
10619         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10620                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10621                 udelay(10);
10622         }
10623         tw32_f(MAC_RX_MODE, tp->rx_mode);
10624         udelay(10);
10625
10626         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10627                 if ((tg3_asic_rev(tp) == ASIC_REV_5704) &&
10628                     !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
10629                         /* Set drive transmission level to 1.2V  */
10630                         /* only if the signal pre-emphasis bit is not set  */
10631                         val = tr32(MAC_SERDES_CFG);
10632                         val &= 0xfffff000;
10633                         val |= 0x880;
10634                         tw32(MAC_SERDES_CFG, val);
10635                 }
10636                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1)
10637                         tw32(MAC_SERDES_CFG, 0x616000);
10638         }
10639
10640         /* Prevent chip from dropping frames when flow control
10641          * is enabled.
10642          */
10643         if (tg3_flag(tp, 57765_CLASS))
10644                 val = 1;
10645         else
10646                 val = 2;
10647         tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
10648
10649         if (tg3_asic_rev(tp) == ASIC_REV_5704 &&
10650             (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
10651                 /* Use hardware link auto-negotiation */
10652                 tg3_flag_set(tp, HW_AUTONEG);
10653         }
10654
10655         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10656             tg3_asic_rev(tp) == ASIC_REV_5714) {
10657                 u32 tmp;
10658
10659                 tmp = tr32(SERDES_RX_CTRL);
10660                 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
10661                 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
10662                 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
10663                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10664         }
10665
10666         if (!tg3_flag(tp, USE_PHYLIB)) {
10667                 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10668                         tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
10669
10670                 err = tg3_setup_phy(tp, false);
10671                 if (err)
10672                         return err;
10673
10674                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10675                     !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
10676                         u32 tmp;
10677
10678                         /* Clear CRC stats. */
10679                         if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
10680                                 tg3_writephy(tp, MII_TG3_TEST1,
10681                                              tmp | MII_TG3_TEST1_CRC_EN);
10682                                 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
10683                         }
10684                 }
10685         }
10686
10687         __tg3_set_rx_mode(tp->dev);
10688
10689         /* Initialize receive rules. */
10690         tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
10691         tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
10692         tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
10693         tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
10694
10695         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
10696                 limit = 8;
10697         else
10698                 limit = 16;
10699         if (tg3_flag(tp, ENABLE_ASF))
10700                 limit -= 4;
10701         switch (limit) {
10702         case 16:
10703                 tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
10704                 fallthrough;
10705         case 15:
10706                 tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
10707                 fallthrough;
10708         case 14:
10709                 tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
10710                 fallthrough;
10711         case 13:
10712                 tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
10713                 fallthrough;
10714         case 12:
10715                 tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
10716                 fallthrough;
10717         case 11:
10718                 tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
10719                 fallthrough;
10720         case 10:
10721                 tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
10722                 fallthrough;
10723         case 9:
10724                 tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
10725                 fallthrough;
10726         case 8:
10727                 tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
10728                 fallthrough;
10729         case 7:
10730                 tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
10731                 fallthrough;
10732         case 6:
10733                 tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
10734                 fallthrough;
10735         case 5:
10736                 tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
10737                 fallthrough;
10738         case 4:
10739                 /* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
10740         case 3:
10741                 /* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
10742         case 2:
10743         case 1:
10744
10745         default:
10746                 break;
10747         }
10748
10749         if (tg3_flag(tp, ENABLE_APE))
10750                 /* Write our heartbeat update interval to APE. */
10751                 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
10752                                 APE_HOST_HEARTBEAT_INT_5SEC);
10753
10754         tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
10755
10756         return 0;
10757 }
10758
10759 /* Called at device open time to get the chip ready for
10760  * packet processing.  Invoked with tp->lock held.
10761  */
10762 static int tg3_init_hw(struct tg3 *tp, bool reset_phy)
10763 {
10764         /* Chip may have been just powered on. If so, the boot code may still
10765          * be running initialization. Wait for it to finish to avoid races in
10766          * accessing the hardware.
10767          */
10768         tg3_enable_register_access(tp);
10769         tg3_poll_fw(tp);
10770
10771         tg3_switch_clocks(tp);
10772
10773         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10774
10775         return tg3_reset_hw(tp, reset_phy);
10776 }
10777
10778 #ifdef CONFIG_TIGON3_HWMON
10779 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
10780 {
10781         u32 off, len = TG3_OCIR_LEN;
10782         int i;
10783
10784         for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) {
10785                 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
10786
10787                 if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
10788                     !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
10789                         memset(ocir, 0, len);
10790         }
10791 }
10792
10793 /* sysfs attributes for hwmon */
10794 static ssize_t tg3_show_temp(struct device *dev,
10795                              struct device_attribute *devattr, char *buf)
10796 {
10797         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
10798         struct tg3 *tp = dev_get_drvdata(dev);
10799         u32 temperature;
10800
10801         spin_lock_bh(&tp->lock);
10802         tg3_ape_scratchpad_read(tp, &temperature, attr->index,
10803                                 sizeof(temperature));
10804         spin_unlock_bh(&tp->lock);
10805         return sprintf(buf, "%u\n", temperature * 1000);
10806 }
10807
10808
10809 static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL,
10810                           TG3_TEMP_SENSOR_OFFSET);
10811 static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL,
10812                           TG3_TEMP_CAUTION_OFFSET);
10813 static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL,
10814                           TG3_TEMP_MAX_OFFSET);
10815
10816 static struct attribute *tg3_attrs[] = {
10817         &sensor_dev_attr_temp1_input.dev_attr.attr,
10818         &sensor_dev_attr_temp1_crit.dev_attr.attr,
10819         &sensor_dev_attr_temp1_max.dev_attr.attr,
10820         NULL
10821 };
10822 ATTRIBUTE_GROUPS(tg3);
10823
10824 static void tg3_hwmon_close(struct tg3 *tp)
10825 {
10826         if (tp->hwmon_dev) {
10827                 hwmon_device_unregister(tp->hwmon_dev);
10828                 tp->hwmon_dev = NULL;
10829         }
10830 }
10831
10832 static void tg3_hwmon_open(struct tg3 *tp)
10833 {
10834         int i;
10835         u32 size = 0;
10836         struct pci_dev *pdev = tp->pdev;
10837         struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
10838
10839         tg3_sd_scan_scratchpad(tp, ocirs);
10840
10841         for (i = 0; i < TG3_SD_NUM_RECS; i++) {
10842                 if (!ocirs[i].src_data_length)
10843                         continue;
10844
10845                 size += ocirs[i].src_hdr_length;
10846                 size += ocirs[i].src_data_length;
10847         }
10848
10849         if (!size)
10850                 return;
10851
10852         tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3",
10853                                                           tp, tg3_groups);
10854         if (IS_ERR(tp->hwmon_dev)) {
10855                 tp->hwmon_dev = NULL;
10856                 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
10857         }
10858 }
10859 #else
10860 static inline void tg3_hwmon_close(struct tg3 *tp) { }
10861 static inline void tg3_hwmon_open(struct tg3 *tp) { }
10862 #endif /* CONFIG_TIGON3_HWMON */
10863
10864
10865 #define TG3_STAT_ADD32(PSTAT, REG) \
10866 do {    u32 __val = tr32(REG); \
10867         (PSTAT)->low += __val; \
10868         if ((PSTAT)->low < __val) \
10869                 (PSTAT)->high += 1; \
10870 } while (0)
10871
10872 static void tg3_periodic_fetch_stats(struct tg3 *tp)
10873 {
10874         struct tg3_hw_stats *sp = tp->hw_stats;
10875
10876         if (!tp->link_up)
10877                 return;
10878
10879         TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
10880         TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
10881         TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
10882         TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
10883         TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
10884         TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
10885         TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
10886         TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
10887         TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
10888         TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
10889         TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
10890         TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
10891         TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
10892         if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) &&
10893                      (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
10894                       sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
10895                 u32 val;
10896
10897                 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10898                 val &= ~tg3_lso_rd_dma_workaround_bit(tp);
10899                 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10900                 tg3_flag_clear(tp, 5719_5720_RDMA_BUG);
10901         }
10902
10903         TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
10904         TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
10905         TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10906         TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10907         TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10908         TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10909         TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10910         TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10911         TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10912         TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10913         TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10914         TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10915         TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10916         TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10917
10918         TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10919         if (tg3_asic_rev(tp) != ASIC_REV_5717 &&
10920             tg3_asic_rev(tp) != ASIC_REV_5762 &&
10921             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 &&
10922             tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) {
10923                 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10924         } else {
10925                 u32 val = tr32(HOSTCC_FLOW_ATTN);
10926                 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10927                 if (val) {
10928                         tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10929                         sp->rx_discards.low += val;
10930                         if (sp->rx_discards.low < val)
10931                                 sp->rx_discards.high += 1;
10932                 }
10933                 sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10934         }
10935         TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10936 }
10937
10938 static void tg3_chk_missed_msi(struct tg3 *tp)
10939 {
10940         u32 i;
10941
10942         for (i = 0; i < tp->irq_cnt; i++) {
10943                 struct tg3_napi *tnapi = &tp->napi[i];
10944
10945                 if (tg3_has_work(tnapi)) {
10946                         if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10947                             tnapi->last_tx_cons == tnapi->tx_cons) {
10948                                 if (tnapi->chk_msi_cnt < 1) {
10949                                         tnapi->chk_msi_cnt++;
10950                                         return;
10951                                 }
10952                                 tg3_msi(0, tnapi);
10953                         }
10954                 }
10955                 tnapi->chk_msi_cnt = 0;
10956                 tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10957                 tnapi->last_tx_cons = tnapi->tx_cons;
10958         }
10959 }
10960
10961 static void tg3_timer(struct timer_list *t)
10962 {
10963         struct tg3 *tp = from_timer(tp, t, timer);
10964
10965         spin_lock(&tp->lock);
10966
10967         if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) {
10968                 spin_unlock(&tp->lock);
10969                 goto restart_timer;
10970         }
10971
10972         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10973             tg3_flag(tp, 57765_CLASS))
10974                 tg3_chk_missed_msi(tp);
10975
10976         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
10977                 /* BCM4785: Flush posted writes from GbE to host memory. */
10978                 tr32(HOSTCC_MODE);
10979         }
10980
10981         if (!tg3_flag(tp, TAGGED_STATUS)) {
10982                 /* All of this garbage is because when using non-tagged
10983                  * IRQ status the mailbox/status_block protocol the chip
10984                  * uses with the cpu is race prone.
10985                  */
10986                 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
10987                         tw32(GRC_LOCAL_CTRL,
10988                              tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
10989                 } else {
10990                         tw32(HOSTCC_MODE, tp->coalesce_mode |
10991                              HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
10992                 }
10993
10994                 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
10995                         spin_unlock(&tp->lock);
10996                         tg3_reset_task_schedule(tp);
10997                         goto restart_timer;
10998                 }
10999         }
11000
11001         /* This part only runs once per second. */
11002         if (!--tp->timer_counter) {
11003                 if (tg3_flag(tp, 5705_PLUS))
11004                         tg3_periodic_fetch_stats(tp);
11005
11006                 if (tp->setlpicnt && !--tp->setlpicnt)
11007                         tg3_phy_eee_enable(tp);
11008
11009                 if (tg3_flag(tp, USE_LINKCHG_REG)) {
11010                         u32 mac_stat;
11011                         int phy_event;
11012
11013                         mac_stat = tr32(MAC_STATUS);
11014
11015                         phy_event = 0;
11016                         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
11017                                 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
11018                                         phy_event = 1;
11019                         } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
11020                                 phy_event = 1;
11021
11022                         if (phy_event)
11023                                 tg3_setup_phy(tp, false);
11024                 } else if (tg3_flag(tp, POLL_SERDES)) {
11025                         u32 mac_stat = tr32(MAC_STATUS);
11026                         int need_setup = 0;
11027
11028                         if (tp->link_up &&
11029                             (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
11030                                 need_setup = 1;
11031                         }
11032                         if (!tp->link_up &&
11033                             (mac_stat & (MAC_STATUS_PCS_SYNCED |
11034                                          MAC_STATUS_SIGNAL_DET))) {
11035                                 need_setup = 1;
11036                         }
11037                         if (need_setup) {
11038                                 if (!tp->serdes_counter) {
11039                                         tw32_f(MAC_MODE,
11040                                              (tp->mac_mode &
11041                                               ~MAC_MODE_PORT_MODE_MASK));
11042                                         udelay(40);
11043                                         tw32_f(MAC_MODE, tp->mac_mode);
11044                                         udelay(40);
11045                                 }
11046                                 tg3_setup_phy(tp, false);
11047                         }
11048                 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
11049                            tg3_flag(tp, 5780_CLASS)) {
11050                         tg3_serdes_parallel_detect(tp);
11051                 } else if (tg3_flag(tp, POLL_CPMU_LINK)) {
11052                         u32 cpmu = tr32(TG3_CPMU_STATUS);
11053                         bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) ==
11054                                          TG3_CPMU_STATUS_LINK_MASK);
11055
11056                         if (link_up != tp->link_up)
11057                                 tg3_setup_phy(tp, false);
11058                 }
11059
11060                 tp->timer_counter = tp->timer_multiplier;
11061         }
11062
11063         /* Heartbeat is only sent once every 2 seconds.
11064          *
11065          * The heartbeat is to tell the ASF firmware that the host
11066          * driver is still alive.  In the event that the OS crashes,
11067          * ASF needs to reset the hardware to free up the FIFO space
11068          * that may be filled with rx packets destined for the host.
11069          * If the FIFO is full, ASF will no longer function properly.
11070          *
11071          * Unintended resets have been reported on real time kernels
11072          * where the timer doesn't run on time.  Netpoll will also have
11073          * same problem.
11074          *
11075          * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
11076          * to check the ring condition when the heartbeat is expiring
11077          * before doing the reset.  This will prevent most unintended
11078          * resets.
11079          */
11080         if (!--tp->asf_counter) {
11081                 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
11082                         tg3_wait_for_event_ack(tp);
11083
11084                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
11085                                       FWCMD_NICDRV_ALIVE3);
11086                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
11087                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
11088                                       TG3_FW_UPDATE_TIMEOUT_SEC);
11089
11090                         tg3_generate_fw_event(tp);
11091                 }
11092                 tp->asf_counter = tp->asf_multiplier;
11093         }
11094
11095         /* Update the APE heartbeat every 5 seconds.*/
11096         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL);
11097
11098         spin_unlock(&tp->lock);
11099
11100 restart_timer:
11101         tp->timer.expires = jiffies + tp->timer_offset;
11102         add_timer(&tp->timer);
11103 }
11104
11105 static void tg3_timer_init(struct tg3 *tp)
11106 {
11107         if (tg3_flag(tp, TAGGED_STATUS) &&
11108             tg3_asic_rev(tp) != ASIC_REV_5717 &&
11109             !tg3_flag(tp, 57765_CLASS))
11110                 tp->timer_offset = HZ;
11111         else
11112                 tp->timer_offset = HZ / 10;
11113
11114         BUG_ON(tp->timer_offset > HZ);
11115
11116         tp->timer_multiplier = (HZ / tp->timer_offset);
11117         tp->asf_multiplier = (HZ / tp->timer_offset) *
11118                              TG3_FW_UPDATE_FREQ_SEC;
11119
11120         timer_setup(&tp->timer, tg3_timer, 0);
11121 }
11122
11123 static void tg3_timer_start(struct tg3 *tp)
11124 {
11125         tp->asf_counter   = tp->asf_multiplier;
11126         tp->timer_counter = tp->timer_multiplier;
11127
11128         tp->timer.expires = jiffies + tp->timer_offset;
11129         add_timer(&tp->timer);
11130 }
11131
11132 static void tg3_timer_stop(struct tg3 *tp)
11133 {
11134         del_timer_sync(&tp->timer);
11135 }
11136
11137 /* Restart hardware after configuration changes, self-test, etc.
11138  * Invoked with tp->lock held.
11139  */
11140 static int tg3_restart_hw(struct tg3 *tp, bool reset_phy)
11141         __releases(tp->lock)
11142         __acquires(tp->lock)
11143 {
11144         int err;
11145
11146         err = tg3_init_hw(tp, reset_phy);
11147         if (err) {
11148                 netdev_err(tp->dev,
11149                            "Failed to re-initialize device, aborting\n");
11150                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11151                 tg3_full_unlock(tp);
11152                 tg3_timer_stop(tp);
11153                 tp->irq_sync = 0;
11154                 tg3_napi_enable(tp);
11155                 dev_close(tp->dev);
11156                 tg3_full_lock(tp, 0);
11157         }
11158         return err;
11159 }
11160
11161 static void tg3_reset_task(struct work_struct *work)
11162 {
11163         struct tg3 *tp = container_of(work, struct tg3, reset_task);
11164         int err;
11165
11166         rtnl_lock();
11167         tg3_full_lock(tp, 0);
11168
11169         if (tp->pcierr_recovery || !netif_running(tp->dev)) {
11170                 tg3_flag_clear(tp, RESET_TASK_PENDING);
11171                 tg3_full_unlock(tp);
11172                 rtnl_unlock();
11173                 return;
11174         }
11175
11176         tg3_full_unlock(tp);
11177
11178         tg3_phy_stop(tp);
11179
11180         tg3_netif_stop(tp);
11181
11182         tg3_full_lock(tp, 1);
11183
11184         if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
11185                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
11186                 tp->write32_rx_mbox = tg3_write_flush_reg32;
11187                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
11188                 tg3_flag_clear(tp, TX_RECOVERY_PENDING);
11189         }
11190
11191         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
11192         err = tg3_init_hw(tp, true);
11193         if (err) {
11194                 tg3_full_unlock(tp);
11195                 tp->irq_sync = 0;
11196                 tg3_napi_enable(tp);
11197                 /* Clear this flag so that tg3_reset_task_cancel() will not
11198                  * call cancel_work_sync() and wait forever.
11199                  */
11200                 tg3_flag_clear(tp, RESET_TASK_PENDING);
11201                 dev_close(tp->dev);
11202                 goto out;
11203         }
11204
11205         tg3_netif_start(tp);
11206         tg3_full_unlock(tp);
11207         tg3_phy_start(tp);
11208         tg3_flag_clear(tp, RESET_TASK_PENDING);
11209 out:
11210         rtnl_unlock();
11211 }
11212
11213 static int tg3_request_irq(struct tg3 *tp, int irq_num)
11214 {
11215         irq_handler_t fn;
11216         unsigned long flags;
11217         char *name;
11218         struct tg3_napi *tnapi = &tp->napi[irq_num];
11219
11220         if (tp->irq_cnt == 1)
11221                 name = tp->dev->name;
11222         else {
11223                 name = &tnapi->irq_lbl[0];
11224                 if (tnapi->tx_buffers && tnapi->rx_rcb)
11225                         snprintf(name, IFNAMSIZ,
11226                                  "%s-txrx-%d", tp->dev->name, irq_num);
11227                 else if (tnapi->tx_buffers)
11228                         snprintf(name, IFNAMSIZ,
11229                                  "%s-tx-%d", tp->dev->name, irq_num);
11230                 else if (tnapi->rx_rcb)
11231                         snprintf(name, IFNAMSIZ,
11232                                  "%s-rx-%d", tp->dev->name, irq_num);
11233                 else
11234                         snprintf(name, IFNAMSIZ,
11235                                  "%s-%d", tp->dev->name, irq_num);
11236                 name[IFNAMSIZ-1] = 0;
11237         }
11238
11239         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11240                 fn = tg3_msi;
11241                 if (tg3_flag(tp, 1SHOT_MSI))
11242                         fn = tg3_msi_1shot;
11243                 flags = 0;
11244         } else {
11245                 fn = tg3_interrupt;
11246                 if (tg3_flag(tp, TAGGED_STATUS))
11247                         fn = tg3_interrupt_tagged;
11248                 flags = IRQF_SHARED;
11249         }
11250
11251         return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
11252 }
11253
11254 static int tg3_test_interrupt(struct tg3 *tp)
11255 {
11256         struct tg3_napi *tnapi = &tp->napi[0];
11257         struct net_device *dev = tp->dev;
11258         int err, i, intr_ok = 0;
11259         u32 val;
11260
11261         if (!netif_running(dev))
11262                 return -ENODEV;
11263
11264         tg3_disable_ints(tp);
11265
11266         free_irq(tnapi->irq_vec, tnapi);
11267
11268         /*
11269          * Turn off MSI one shot mode.  Otherwise this test has no
11270          * observable way to know whether the interrupt was delivered.
11271          */
11272         if (tg3_flag(tp, 57765_PLUS)) {
11273                 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
11274                 tw32(MSGINT_MODE, val);
11275         }
11276
11277         err = request_irq(tnapi->irq_vec, tg3_test_isr,
11278                           IRQF_SHARED, dev->name, tnapi);
11279         if (err)
11280                 return err;
11281
11282         tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
11283         tg3_enable_ints(tp);
11284
11285         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11286                tnapi->coal_now);
11287
11288         for (i = 0; i < 5; i++) {
11289                 u32 int_mbox, misc_host_ctrl;
11290
11291                 int_mbox = tr32_mailbox(tnapi->int_mbox);
11292                 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
11293
11294                 if ((int_mbox != 0) ||
11295                     (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
11296                         intr_ok = 1;
11297                         break;
11298                 }
11299
11300                 if (tg3_flag(tp, 57765_PLUS) &&
11301                     tnapi->hw_status->status_tag != tnapi->last_tag)
11302                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
11303
11304                 msleep(10);
11305         }
11306
11307         tg3_disable_ints(tp);
11308
11309         free_irq(tnapi->irq_vec, tnapi);
11310
11311         err = tg3_request_irq(tp, 0);
11312
11313         if (err)
11314                 return err;
11315
11316         if (intr_ok) {
11317                 /* Reenable MSI one shot mode. */
11318                 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
11319                         val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
11320                         tw32(MSGINT_MODE, val);
11321                 }
11322                 return 0;
11323         }
11324
11325         return -EIO;
11326 }
11327
11328 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
11329  * successfully restored
11330  */
11331 static int tg3_test_msi(struct tg3 *tp)
11332 {
11333         int err;
11334         u16 pci_cmd;
11335
11336         if (!tg3_flag(tp, USING_MSI))
11337                 return 0;
11338
11339         /* Turn off SERR reporting in case MSI terminates with Master
11340          * Abort.
11341          */
11342         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11343         pci_write_config_word(tp->pdev, PCI_COMMAND,
11344                               pci_cmd & ~PCI_COMMAND_SERR);
11345
11346         err = tg3_test_interrupt(tp);
11347
11348         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11349
11350         if (!err)
11351                 return 0;
11352
11353         /* other failures */
11354         if (err != -EIO)
11355                 return err;
11356
11357         /* MSI test failed, go back to INTx mode */
11358         netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
11359                     "to INTx mode. Please report this failure to the PCI "
11360                     "maintainer and include system chipset information\n");
11361
11362         free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11363
11364         pci_disable_msi(tp->pdev);
11365
11366         tg3_flag_clear(tp, USING_MSI);
11367         tp->napi[0].irq_vec = tp->pdev->irq;
11368
11369         err = tg3_request_irq(tp, 0);
11370         if (err)
11371                 return err;
11372
11373         /* Need to reset the chip because the MSI cycle may have terminated
11374          * with Master Abort.
11375          */
11376         tg3_full_lock(tp, 1);
11377
11378         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11379         err = tg3_init_hw(tp, true);
11380
11381         tg3_full_unlock(tp);
11382
11383         if (err)
11384                 free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11385
11386         return err;
11387 }
11388
11389 static int tg3_request_firmware(struct tg3 *tp)
11390 {
11391         const struct tg3_firmware_hdr *fw_hdr;
11392
11393         if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
11394                 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
11395                            tp->fw_needed);
11396                 return -ENOENT;
11397         }
11398
11399         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
11400
11401         /* Firmware blob starts with version numbers, followed by
11402          * start address and _full_ length including BSS sections
11403          * (which must be longer than the actual data, of course
11404          */
11405
11406         tp->fw_len = be32_to_cpu(fw_hdr->len);  /* includes bss */
11407         if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) {
11408                 netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
11409                            tp->fw_len, tp->fw_needed);
11410                 release_firmware(tp->fw);
11411                 tp->fw = NULL;
11412                 return -EINVAL;
11413         }
11414
11415         /* We no longer need firmware; we have it. */
11416         tp->fw_needed = NULL;
11417         return 0;
11418 }
11419
11420 static u32 tg3_irq_count(struct tg3 *tp)
11421 {
11422         u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
11423
11424         if (irq_cnt > 1) {
11425                 /* We want as many rx rings enabled as there are cpus.
11426                  * In multiqueue MSI-X mode, the first MSI-X vector
11427                  * only deals with link interrupts, etc, so we add
11428                  * one to the number of vectors we are requesting.
11429                  */
11430                 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
11431         }
11432
11433         return irq_cnt;
11434 }
11435
11436 static bool tg3_enable_msix(struct tg3 *tp)
11437 {
11438         int i, rc;
11439         struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
11440
11441         tp->txq_cnt = tp->txq_req;
11442         tp->rxq_cnt = tp->rxq_req;
11443         if (!tp->rxq_cnt)
11444                 tp->rxq_cnt = netif_get_num_default_rss_queues();
11445         if (tp->rxq_cnt > tp->rxq_max)
11446                 tp->rxq_cnt = tp->rxq_max;
11447
11448         /* Disable multiple TX rings by default.  Simple round-robin hardware
11449          * scheduling of the TX rings can cause starvation of rings with
11450          * small packets when other rings have TSO or jumbo packets.
11451          */
11452         if (!tp->txq_req)
11453                 tp->txq_cnt = 1;
11454
11455         tp->irq_cnt = tg3_irq_count(tp);
11456
11457         for (i = 0; i < tp->irq_max; i++) {
11458                 msix_ent[i].entry  = i;
11459                 msix_ent[i].vector = 0;
11460         }
11461
11462         rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt);
11463         if (rc < 0) {
11464                 return false;
11465         } else if (rc < tp->irq_cnt) {
11466                 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
11467                               tp->irq_cnt, rc);
11468                 tp->irq_cnt = rc;
11469                 tp->rxq_cnt = max(rc - 1, 1);
11470                 if (tp->txq_cnt)
11471                         tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
11472         }
11473
11474         for (i = 0; i < tp->irq_max; i++)
11475                 tp->napi[i].irq_vec = msix_ent[i].vector;
11476
11477         if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
11478                 pci_disable_msix(tp->pdev);
11479                 return false;
11480         }
11481
11482         if (tp->irq_cnt == 1)
11483                 return true;
11484
11485         tg3_flag_set(tp, ENABLE_RSS);
11486
11487         if (tp->txq_cnt > 1)
11488                 tg3_flag_set(tp, ENABLE_TSS);
11489
11490         netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
11491
11492         return true;
11493 }
11494
11495 static void tg3_ints_init(struct tg3 *tp)
11496 {
11497         if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
11498             !tg3_flag(tp, TAGGED_STATUS)) {
11499                 /* All MSI supporting chips should support tagged
11500                  * status.  Assert that this is the case.
11501                  */
11502                 netdev_warn(tp->dev,
11503                             "MSI without TAGGED_STATUS? Not using MSI\n");
11504                 goto defcfg;
11505         }
11506
11507         if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
11508                 tg3_flag_set(tp, USING_MSIX);
11509         else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
11510                 tg3_flag_set(tp, USING_MSI);
11511
11512         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11513                 u32 msi_mode = tr32(MSGINT_MODE);
11514                 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
11515                         msi_mode |= MSGINT_MODE_MULTIVEC_EN;
11516                 if (!tg3_flag(tp, 1SHOT_MSI))
11517                         msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
11518                 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
11519         }
11520 defcfg:
11521         if (!tg3_flag(tp, USING_MSIX)) {
11522                 tp->irq_cnt = 1;
11523                 tp->napi[0].irq_vec = tp->pdev->irq;
11524         }
11525
11526         if (tp->irq_cnt == 1) {
11527                 tp->txq_cnt = 1;
11528                 tp->rxq_cnt = 1;
11529                 netif_set_real_num_tx_queues(tp->dev, 1);
11530                 netif_set_real_num_rx_queues(tp->dev, 1);
11531         }
11532 }
11533
11534 static void tg3_ints_fini(struct tg3 *tp)
11535 {
11536         if (tg3_flag(tp, USING_MSIX))
11537                 pci_disable_msix(tp->pdev);
11538         else if (tg3_flag(tp, USING_MSI))
11539                 pci_disable_msi(tp->pdev);
11540         tg3_flag_clear(tp, USING_MSI);
11541         tg3_flag_clear(tp, USING_MSIX);
11542         tg3_flag_clear(tp, ENABLE_RSS);
11543         tg3_flag_clear(tp, ENABLE_TSS);
11544 }
11545
11546 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
11547                      bool init)
11548 {
11549         struct net_device *dev = tp->dev;
11550         int i, err;
11551
11552         /*
11553          * Setup interrupts first so we know how
11554          * many NAPI resources to allocate
11555          */
11556         tg3_ints_init(tp);
11557
11558         tg3_rss_check_indir_tbl(tp);
11559
11560         /* The placement of this call is tied
11561          * to the setup and use of Host TX descriptors.
11562          */
11563         err = tg3_alloc_consistent(tp);
11564         if (err)
11565                 goto out_ints_fini;
11566
11567         tg3_napi_init(tp);
11568
11569         tg3_napi_enable(tp);
11570
11571         for (i = 0; i < tp->irq_cnt; i++) {
11572                 err = tg3_request_irq(tp, i);
11573                 if (err) {
11574                         for (i--; i >= 0; i--) {
11575                                 struct tg3_napi *tnapi = &tp->napi[i];
11576
11577                                 free_irq(tnapi->irq_vec, tnapi);
11578                         }
11579                         goto out_napi_fini;
11580                 }
11581         }
11582
11583         tg3_full_lock(tp, 0);
11584
11585         if (init)
11586                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
11587
11588         err = tg3_init_hw(tp, reset_phy);
11589         if (err) {
11590                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11591                 tg3_free_rings(tp);
11592         }
11593
11594         tg3_full_unlock(tp);
11595
11596         if (err)
11597                 goto out_free_irq;
11598
11599         if (test_irq && tg3_flag(tp, USING_MSI)) {
11600                 err = tg3_test_msi(tp);
11601
11602                 if (err) {
11603                         tg3_full_lock(tp, 0);
11604                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11605                         tg3_free_rings(tp);
11606                         tg3_full_unlock(tp);
11607
11608                         goto out_napi_fini;
11609                 }
11610
11611                 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
11612                         u32 val = tr32(PCIE_TRANSACTION_CFG);
11613
11614                         tw32(PCIE_TRANSACTION_CFG,
11615                              val | PCIE_TRANS_CFG_1SHOT_MSI);
11616                 }
11617         }
11618
11619         tg3_phy_start(tp);
11620
11621         tg3_hwmon_open(tp);
11622
11623         tg3_full_lock(tp, 0);
11624
11625         tg3_timer_start(tp);
11626         tg3_flag_set(tp, INIT_COMPLETE);
11627         tg3_enable_ints(tp);
11628
11629         tg3_ptp_resume(tp);
11630
11631         tg3_full_unlock(tp);
11632
11633         netif_tx_start_all_queues(dev);
11634
11635         /*
11636          * Reset loopback feature if it was turned on while the device was down
11637          * make sure that it's installed properly now.
11638          */
11639         if (dev->features & NETIF_F_LOOPBACK)
11640                 tg3_set_loopback(dev, dev->features);
11641
11642         return 0;
11643
11644 out_free_irq:
11645         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11646                 struct tg3_napi *tnapi = &tp->napi[i];
11647                 free_irq(tnapi->irq_vec, tnapi);
11648         }
11649
11650 out_napi_fini:
11651         tg3_napi_disable(tp);
11652         tg3_napi_fini(tp);
11653         tg3_free_consistent(tp);
11654
11655 out_ints_fini:
11656         tg3_ints_fini(tp);
11657
11658         return err;
11659 }
11660
11661 static void tg3_stop(struct tg3 *tp)
11662 {
11663         int i;
11664
11665         tg3_reset_task_cancel(tp);
11666         tg3_netif_stop(tp);
11667
11668         tg3_timer_stop(tp);
11669
11670         tg3_hwmon_close(tp);
11671
11672         tg3_phy_stop(tp);
11673
11674         tg3_full_lock(tp, 1);
11675
11676         tg3_disable_ints(tp);
11677
11678         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11679         tg3_free_rings(tp);
11680         tg3_flag_clear(tp, INIT_COMPLETE);
11681
11682         tg3_full_unlock(tp);
11683
11684         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11685                 struct tg3_napi *tnapi = &tp->napi[i];
11686                 free_irq(tnapi->irq_vec, tnapi);
11687         }
11688
11689         tg3_ints_fini(tp);
11690
11691         tg3_napi_fini(tp);
11692
11693         tg3_free_consistent(tp);
11694 }
11695
11696 static int tg3_open(struct net_device *dev)
11697 {
11698         struct tg3 *tp = netdev_priv(dev);
11699         int err;
11700
11701         if (tp->pcierr_recovery) {
11702                 netdev_err(dev, "Failed to open device. PCI error recovery "
11703                            "in progress\n");
11704                 return -EAGAIN;
11705         }
11706
11707         if (tp->fw_needed) {
11708                 err = tg3_request_firmware(tp);
11709                 if (tg3_asic_rev(tp) == ASIC_REV_57766) {
11710                         if (err) {
11711                                 netdev_warn(tp->dev, "EEE capability disabled\n");
11712                                 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11713                         } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
11714                                 netdev_warn(tp->dev, "EEE capability restored\n");
11715                                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
11716                         }
11717                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
11718                         if (err)
11719                                 return err;
11720                 } else if (err) {
11721                         netdev_warn(tp->dev, "TSO capability disabled\n");
11722                         tg3_flag_clear(tp, TSO_CAPABLE);
11723                 } else if (!tg3_flag(tp, TSO_CAPABLE)) {
11724                         netdev_notice(tp->dev, "TSO capability restored\n");
11725                         tg3_flag_set(tp, TSO_CAPABLE);
11726                 }
11727         }
11728
11729         tg3_carrier_off(tp);
11730
11731         err = tg3_power_up(tp);
11732         if (err)
11733                 return err;
11734
11735         tg3_full_lock(tp, 0);
11736
11737         tg3_disable_ints(tp);
11738         tg3_flag_clear(tp, INIT_COMPLETE);
11739
11740         tg3_full_unlock(tp);
11741
11742         err = tg3_start(tp,
11743                         !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN),
11744                         true, true);
11745         if (err) {
11746                 tg3_frob_aux_power(tp, false);
11747                 pci_set_power_state(tp->pdev, PCI_D3hot);
11748         }
11749
11750         return err;
11751 }
11752
11753 static int tg3_close(struct net_device *dev)
11754 {
11755         struct tg3 *tp = netdev_priv(dev);
11756
11757         if (tp->pcierr_recovery) {
11758                 netdev_err(dev, "Failed to close device. PCI error recovery "
11759                            "in progress\n");
11760                 return -EAGAIN;
11761         }
11762
11763         tg3_stop(tp);
11764
11765         if (pci_device_is_present(tp->pdev)) {
11766                 tg3_power_down_prepare(tp);
11767
11768                 tg3_carrier_off(tp);
11769         }
11770         return 0;
11771 }
11772
11773 static inline u64 get_stat64(tg3_stat64_t *val)
11774 {
11775        return ((u64)val->high << 32) | ((u64)val->low);
11776 }
11777
11778 static u64 tg3_calc_crc_errors(struct tg3 *tp)
11779 {
11780         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11781
11782         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11783             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
11784              tg3_asic_rev(tp) == ASIC_REV_5701)) {
11785                 u32 val;
11786
11787                 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
11788                         tg3_writephy(tp, MII_TG3_TEST1,
11789                                      val | MII_TG3_TEST1_CRC_EN);
11790                         tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
11791                 } else
11792                         val = 0;
11793
11794                 tp->phy_crc_errors += val;
11795
11796                 return tp->phy_crc_errors;
11797         }
11798
11799         return get_stat64(&hw_stats->rx_fcs_errors);
11800 }
11801
11802 #define ESTAT_ADD(member) \
11803         estats->member =        old_estats->member + \
11804                                 get_stat64(&hw_stats->member)
11805
11806 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
11807 {
11808         struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
11809         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11810
11811         ESTAT_ADD(rx_octets);
11812         ESTAT_ADD(rx_fragments);
11813         ESTAT_ADD(rx_ucast_packets);
11814         ESTAT_ADD(rx_mcast_packets);
11815         ESTAT_ADD(rx_bcast_packets);
11816         ESTAT_ADD(rx_fcs_errors);
11817         ESTAT_ADD(rx_align_errors);
11818         ESTAT_ADD(rx_xon_pause_rcvd);
11819         ESTAT_ADD(rx_xoff_pause_rcvd);
11820         ESTAT_ADD(rx_mac_ctrl_rcvd);
11821         ESTAT_ADD(rx_xoff_entered);
11822         ESTAT_ADD(rx_frame_too_long_errors);
11823         ESTAT_ADD(rx_jabbers);
11824         ESTAT_ADD(rx_undersize_packets);
11825         ESTAT_ADD(rx_in_length_errors);
11826         ESTAT_ADD(rx_out_length_errors);
11827         ESTAT_ADD(rx_64_or_less_octet_packets);
11828         ESTAT_ADD(rx_65_to_127_octet_packets);
11829         ESTAT_ADD(rx_128_to_255_octet_packets);
11830         ESTAT_ADD(rx_256_to_511_octet_packets);
11831         ESTAT_ADD(rx_512_to_1023_octet_packets);
11832         ESTAT_ADD(rx_1024_to_1522_octet_packets);
11833         ESTAT_ADD(rx_1523_to_2047_octet_packets);
11834         ESTAT_ADD(rx_2048_to_4095_octet_packets);
11835         ESTAT_ADD(rx_4096_to_8191_octet_packets);
11836         ESTAT_ADD(rx_8192_to_9022_octet_packets);
11837
11838         ESTAT_ADD(tx_octets);
11839         ESTAT_ADD(tx_collisions);
11840         ESTAT_ADD(tx_xon_sent);
11841         ESTAT_ADD(tx_xoff_sent);
11842         ESTAT_ADD(tx_flow_control);
11843         ESTAT_ADD(tx_mac_errors);
11844         ESTAT_ADD(tx_single_collisions);
11845         ESTAT_ADD(tx_mult_collisions);
11846         ESTAT_ADD(tx_deferred);
11847         ESTAT_ADD(tx_excessive_collisions);
11848         ESTAT_ADD(tx_late_collisions);
11849         ESTAT_ADD(tx_collide_2times);
11850         ESTAT_ADD(tx_collide_3times);
11851         ESTAT_ADD(tx_collide_4times);
11852         ESTAT_ADD(tx_collide_5times);
11853         ESTAT_ADD(tx_collide_6times);
11854         ESTAT_ADD(tx_collide_7times);
11855         ESTAT_ADD(tx_collide_8times);
11856         ESTAT_ADD(tx_collide_9times);
11857         ESTAT_ADD(tx_collide_10times);
11858         ESTAT_ADD(tx_collide_11times);
11859         ESTAT_ADD(tx_collide_12times);
11860         ESTAT_ADD(tx_collide_13times);
11861         ESTAT_ADD(tx_collide_14times);
11862         ESTAT_ADD(tx_collide_15times);
11863         ESTAT_ADD(tx_ucast_packets);
11864         ESTAT_ADD(tx_mcast_packets);
11865         ESTAT_ADD(tx_bcast_packets);
11866         ESTAT_ADD(tx_carrier_sense_errors);
11867         ESTAT_ADD(tx_discards);
11868         ESTAT_ADD(tx_errors);
11869
11870         ESTAT_ADD(dma_writeq_full);
11871         ESTAT_ADD(dma_write_prioq_full);
11872         ESTAT_ADD(rxbds_empty);
11873         ESTAT_ADD(rx_discards);
11874         ESTAT_ADD(rx_errors);
11875         ESTAT_ADD(rx_threshold_hit);
11876
11877         ESTAT_ADD(dma_readq_full);
11878         ESTAT_ADD(dma_read_prioq_full);
11879         ESTAT_ADD(tx_comp_queue_full);
11880
11881         ESTAT_ADD(ring_set_send_prod_index);
11882         ESTAT_ADD(ring_status_update);
11883         ESTAT_ADD(nic_irqs);
11884         ESTAT_ADD(nic_avoided_irqs);
11885         ESTAT_ADD(nic_tx_threshold_hit);
11886
11887         ESTAT_ADD(mbuf_lwm_thresh_hit);
11888 }
11889
11890 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
11891 {
11892         struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
11893         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11894
11895         stats->rx_packets = old_stats->rx_packets +
11896                 get_stat64(&hw_stats->rx_ucast_packets) +
11897                 get_stat64(&hw_stats->rx_mcast_packets) +
11898                 get_stat64(&hw_stats->rx_bcast_packets);
11899
11900         stats->tx_packets = old_stats->tx_packets +
11901                 get_stat64(&hw_stats->tx_ucast_packets) +
11902                 get_stat64(&hw_stats->tx_mcast_packets) +
11903                 get_stat64(&hw_stats->tx_bcast_packets);
11904
11905         stats->rx_bytes = old_stats->rx_bytes +
11906                 get_stat64(&hw_stats->rx_octets);
11907         stats->tx_bytes = old_stats->tx_bytes +
11908                 get_stat64(&hw_stats->tx_octets);
11909
11910         stats->rx_errors = old_stats->rx_errors +
11911                 get_stat64(&hw_stats->rx_errors);
11912         stats->tx_errors = old_stats->tx_errors +
11913                 get_stat64(&hw_stats->tx_errors) +
11914                 get_stat64(&hw_stats->tx_mac_errors) +
11915                 get_stat64(&hw_stats->tx_carrier_sense_errors) +
11916                 get_stat64(&hw_stats->tx_discards);
11917
11918         stats->multicast = old_stats->multicast +
11919                 get_stat64(&hw_stats->rx_mcast_packets);
11920         stats->collisions = old_stats->collisions +
11921                 get_stat64(&hw_stats->tx_collisions);
11922
11923         stats->rx_length_errors = old_stats->rx_length_errors +
11924                 get_stat64(&hw_stats->rx_frame_too_long_errors) +
11925                 get_stat64(&hw_stats->rx_undersize_packets);
11926
11927         stats->rx_frame_errors = old_stats->rx_frame_errors +
11928                 get_stat64(&hw_stats->rx_align_errors);
11929         stats->tx_aborted_errors = old_stats->tx_aborted_errors +
11930                 get_stat64(&hw_stats->tx_discards);
11931         stats->tx_carrier_errors = old_stats->tx_carrier_errors +
11932                 get_stat64(&hw_stats->tx_carrier_sense_errors);
11933
11934         stats->rx_crc_errors = old_stats->rx_crc_errors +
11935                 tg3_calc_crc_errors(tp);
11936
11937         stats->rx_missed_errors = old_stats->rx_missed_errors +
11938                 get_stat64(&hw_stats->rx_discards);
11939
11940         stats->rx_dropped = tp->rx_dropped;
11941         stats->tx_dropped = tp->tx_dropped;
11942 }
11943
11944 static int tg3_get_regs_len(struct net_device *dev)
11945 {
11946         return TG3_REG_BLK_SIZE;
11947 }
11948
11949 static void tg3_get_regs(struct net_device *dev,
11950                 struct ethtool_regs *regs, void *_p)
11951 {
11952         struct tg3 *tp = netdev_priv(dev);
11953
11954         regs->version = 0;
11955
11956         memset(_p, 0, TG3_REG_BLK_SIZE);
11957
11958         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11959                 return;
11960
11961         tg3_full_lock(tp, 0);
11962
11963         tg3_dump_legacy_regs(tp, (u32 *)_p);
11964
11965         tg3_full_unlock(tp);
11966 }
11967
11968 static int tg3_get_eeprom_len(struct net_device *dev)
11969 {
11970         struct tg3 *tp = netdev_priv(dev);
11971
11972         return tp->nvram_size;
11973 }
11974
11975 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11976 {
11977         struct tg3 *tp = netdev_priv(dev);
11978         int ret, cpmu_restore = 0;
11979         u8  *pd;
11980         u32 i, offset, len, b_offset, b_count, cpmu_val = 0;
11981         __be32 val;
11982
11983         if (tg3_flag(tp, NO_NVRAM))
11984                 return -EINVAL;
11985
11986         offset = eeprom->offset;
11987         len = eeprom->len;
11988         eeprom->len = 0;
11989
11990         eeprom->magic = TG3_EEPROM_MAGIC;
11991
11992         /* Override clock, link aware and link idle modes */
11993         if (tg3_flag(tp, CPMU_PRESENT)) {
11994                 cpmu_val = tr32(TG3_CPMU_CTRL);
11995                 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE |
11996                                 CPMU_CTRL_LINK_IDLE_MODE)) {
11997                         tw32(TG3_CPMU_CTRL, cpmu_val &
11998                                             ~(CPMU_CTRL_LINK_AWARE_MODE |
11999                                              CPMU_CTRL_LINK_IDLE_MODE));
12000                         cpmu_restore = 1;
12001                 }
12002         }
12003         tg3_override_clk(tp);
12004
12005         if (offset & 3) {
12006                 /* adjustments to start on required 4 byte boundary */
12007                 b_offset = offset & 3;
12008                 b_count = 4 - b_offset;
12009                 if (b_count > len) {
12010                         /* i.e. offset=1 len=2 */
12011                         b_count = len;
12012                 }
12013                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
12014                 if (ret)
12015                         goto eeprom_done;
12016                 memcpy(data, ((char *)&val) + b_offset, b_count);
12017                 len -= b_count;
12018                 offset += b_count;
12019                 eeprom->len += b_count;
12020         }
12021
12022         /* read bytes up to the last 4 byte boundary */
12023         pd = &data[eeprom->len];
12024         for (i = 0; i < (len - (len & 3)); i += 4) {
12025                 ret = tg3_nvram_read_be32(tp, offset + i, &val);
12026                 if (ret) {
12027                         if (i)
12028                                 i -= 4;
12029                         eeprom->len += i;
12030                         goto eeprom_done;
12031                 }
12032                 memcpy(pd + i, &val, 4);
12033                 if (need_resched()) {
12034                         if (signal_pending(current)) {
12035                                 eeprom->len += i;
12036                                 ret = -EINTR;
12037                                 goto eeprom_done;
12038                         }
12039                         cond_resched();
12040                 }
12041         }
12042         eeprom->len += i;
12043
12044         if (len & 3) {
12045                 /* read last bytes not ending on 4 byte boundary */
12046                 pd = &data[eeprom->len];
12047                 b_count = len & 3;
12048                 b_offset = offset + len - b_count;
12049                 ret = tg3_nvram_read_be32(tp, b_offset, &val);
12050                 if (ret)
12051                         goto eeprom_done;
12052                 memcpy(pd, &val, b_count);
12053                 eeprom->len += b_count;
12054         }
12055         ret = 0;
12056
12057 eeprom_done:
12058         /* Restore clock, link aware and link idle modes */
12059         tg3_restore_clk(tp);
12060         if (cpmu_restore)
12061                 tw32(TG3_CPMU_CTRL, cpmu_val);
12062
12063         return ret;
12064 }
12065
12066 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
12067 {
12068         struct tg3 *tp = netdev_priv(dev);
12069         int ret;
12070         u32 offset, len, b_offset, odd_len;
12071         u8 *buf;
12072         __be32 start = 0, end;
12073
12074         if (tg3_flag(tp, NO_NVRAM) ||
12075             eeprom->magic != TG3_EEPROM_MAGIC)
12076                 return -EINVAL;
12077
12078         offset = eeprom->offset;
12079         len = eeprom->len;
12080
12081         if ((b_offset = (offset & 3))) {
12082                 /* adjustments to start on required 4 byte boundary */
12083                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
12084                 if (ret)
12085                         return ret;
12086                 len += b_offset;
12087                 offset &= ~3;
12088                 if (len < 4)
12089                         len = 4;
12090         }
12091
12092         odd_len = 0;
12093         if (len & 3) {
12094                 /* adjustments to end on required 4 byte boundary */
12095                 odd_len = 1;
12096                 len = (len + 3) & ~3;
12097                 ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
12098                 if (ret)
12099                         return ret;
12100         }
12101
12102         buf = data;
12103         if (b_offset || odd_len) {
12104                 buf = kmalloc(len, GFP_KERNEL);
12105                 if (!buf)
12106                         return -ENOMEM;
12107                 if (b_offset)
12108                         memcpy(buf, &start, 4);
12109                 if (odd_len)
12110                         memcpy(buf+len-4, &end, 4);
12111                 memcpy(buf + b_offset, data, eeprom->len);
12112         }
12113
12114         ret = tg3_nvram_write_block(tp, offset, len, buf);
12115
12116         if (buf != data)
12117                 kfree(buf);
12118
12119         return ret;
12120 }
12121
12122 static int tg3_get_link_ksettings(struct net_device *dev,
12123                                   struct ethtool_link_ksettings *cmd)
12124 {
12125         struct tg3 *tp = netdev_priv(dev);
12126         u32 supported, advertising;
12127
12128         if (tg3_flag(tp, USE_PHYLIB)) {
12129                 struct phy_device *phydev;
12130                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12131                         return -EAGAIN;
12132                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12133                 phy_ethtool_ksettings_get(phydev, cmd);
12134
12135                 return 0;
12136         }
12137
12138         supported = (SUPPORTED_Autoneg);
12139
12140         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12141                 supported |= (SUPPORTED_1000baseT_Half |
12142                               SUPPORTED_1000baseT_Full);
12143
12144         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12145                 supported |= (SUPPORTED_100baseT_Half |
12146                               SUPPORTED_100baseT_Full |
12147                               SUPPORTED_10baseT_Half |
12148                               SUPPORTED_10baseT_Full |
12149                               SUPPORTED_TP);
12150                 cmd->base.port = PORT_TP;
12151         } else {
12152                 supported |= SUPPORTED_FIBRE;
12153                 cmd->base.port = PORT_FIBRE;
12154         }
12155         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
12156                                                 supported);
12157
12158         advertising = tp->link_config.advertising;
12159         if (tg3_flag(tp, PAUSE_AUTONEG)) {
12160                 if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
12161                         if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12162                                 advertising |= ADVERTISED_Pause;
12163                         } else {
12164                                 advertising |= ADVERTISED_Pause |
12165                                         ADVERTISED_Asym_Pause;
12166                         }
12167                 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12168                         advertising |= ADVERTISED_Asym_Pause;
12169                 }
12170         }
12171         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
12172                                                 advertising);
12173
12174         if (netif_running(dev) && tp->link_up) {
12175                 cmd->base.speed = tp->link_config.active_speed;
12176                 cmd->base.duplex = tp->link_config.active_duplex;
12177                 ethtool_convert_legacy_u32_to_link_mode(
12178                         cmd->link_modes.lp_advertising,
12179                         tp->link_config.rmt_adv);
12180
12181                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12182                         if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
12183                                 cmd->base.eth_tp_mdix = ETH_TP_MDI_X;
12184                         else
12185                                 cmd->base.eth_tp_mdix = ETH_TP_MDI;
12186                 }
12187         } else {
12188                 cmd->base.speed = SPEED_UNKNOWN;
12189                 cmd->base.duplex = DUPLEX_UNKNOWN;
12190                 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
12191         }
12192         cmd->base.phy_address = tp->phy_addr;
12193         cmd->base.autoneg = tp->link_config.autoneg;
12194         return 0;
12195 }
12196
12197 static int tg3_set_link_ksettings(struct net_device *dev,
12198                                   const struct ethtool_link_ksettings *cmd)
12199 {
12200         struct tg3 *tp = netdev_priv(dev);
12201         u32 speed = cmd->base.speed;
12202         u32 advertising;
12203
12204         if (tg3_flag(tp, USE_PHYLIB)) {
12205                 struct phy_device *phydev;
12206                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12207                         return -EAGAIN;
12208                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12209                 return phy_ethtool_ksettings_set(phydev, cmd);
12210         }
12211
12212         if (cmd->base.autoneg != AUTONEG_ENABLE &&
12213             cmd->base.autoneg != AUTONEG_DISABLE)
12214                 return -EINVAL;
12215
12216         if (cmd->base.autoneg == AUTONEG_DISABLE &&
12217             cmd->base.duplex != DUPLEX_FULL &&
12218             cmd->base.duplex != DUPLEX_HALF)
12219                 return -EINVAL;
12220
12221         ethtool_convert_link_mode_to_legacy_u32(&advertising,
12222                                                 cmd->link_modes.advertising);
12223
12224         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12225                 u32 mask = ADVERTISED_Autoneg |
12226                            ADVERTISED_Pause |
12227                            ADVERTISED_Asym_Pause;
12228
12229                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12230                         mask |= ADVERTISED_1000baseT_Half |
12231                                 ADVERTISED_1000baseT_Full;
12232
12233                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
12234                         mask |= ADVERTISED_100baseT_Half |
12235                                 ADVERTISED_100baseT_Full |
12236                                 ADVERTISED_10baseT_Half |
12237                                 ADVERTISED_10baseT_Full |
12238                                 ADVERTISED_TP;
12239                 else
12240                         mask |= ADVERTISED_FIBRE;
12241
12242                 if (advertising & ~mask)
12243                         return -EINVAL;
12244
12245                 mask &= (ADVERTISED_1000baseT_Half |
12246                          ADVERTISED_1000baseT_Full |
12247                          ADVERTISED_100baseT_Half |
12248                          ADVERTISED_100baseT_Full |
12249                          ADVERTISED_10baseT_Half |
12250                          ADVERTISED_10baseT_Full);
12251
12252                 advertising &= mask;
12253         } else {
12254                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
12255                         if (speed != SPEED_1000)
12256                                 return -EINVAL;
12257
12258                         if (cmd->base.duplex != DUPLEX_FULL)
12259                                 return -EINVAL;
12260                 } else {
12261                         if (speed != SPEED_100 &&
12262                             speed != SPEED_10)
12263                                 return -EINVAL;
12264                 }
12265         }
12266
12267         tg3_full_lock(tp, 0);
12268
12269         tp->link_config.autoneg = cmd->base.autoneg;
12270         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12271                 tp->link_config.advertising = (advertising |
12272                                               ADVERTISED_Autoneg);
12273                 tp->link_config.speed = SPEED_UNKNOWN;
12274                 tp->link_config.duplex = DUPLEX_UNKNOWN;
12275         } else {
12276                 tp->link_config.advertising = 0;
12277                 tp->link_config.speed = speed;
12278                 tp->link_config.duplex = cmd->base.duplex;
12279         }
12280
12281         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12282
12283         tg3_warn_mgmt_link_flap(tp);
12284
12285         if (netif_running(dev))
12286                 tg3_setup_phy(tp, true);
12287
12288         tg3_full_unlock(tp);
12289
12290         return 0;
12291 }
12292
12293 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
12294 {
12295         struct tg3 *tp = netdev_priv(dev);
12296
12297         strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
12298         strscpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
12299         strscpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
12300 }
12301
12302 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12303 {
12304         struct tg3 *tp = netdev_priv(dev);
12305
12306         if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
12307                 wol->supported = WAKE_MAGIC;
12308         else
12309                 wol->supported = 0;
12310         wol->wolopts = 0;
12311         if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
12312                 wol->wolopts = WAKE_MAGIC;
12313         memset(&wol->sopass, 0, sizeof(wol->sopass));
12314 }
12315
12316 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12317 {
12318         struct tg3 *tp = netdev_priv(dev);
12319         struct device *dp = &tp->pdev->dev;
12320
12321         if (wol->wolopts & ~WAKE_MAGIC)
12322                 return -EINVAL;
12323         if ((wol->wolopts & WAKE_MAGIC) &&
12324             !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
12325                 return -EINVAL;
12326
12327         device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
12328
12329         if (device_may_wakeup(dp))
12330                 tg3_flag_set(tp, WOL_ENABLE);
12331         else
12332                 tg3_flag_clear(tp, WOL_ENABLE);
12333
12334         return 0;
12335 }
12336
12337 static u32 tg3_get_msglevel(struct net_device *dev)
12338 {
12339         struct tg3 *tp = netdev_priv(dev);
12340         return tp->msg_enable;
12341 }
12342
12343 static void tg3_set_msglevel(struct net_device *dev, u32 value)
12344 {
12345         struct tg3 *tp = netdev_priv(dev);
12346         tp->msg_enable = value;
12347 }
12348
12349 static int tg3_nway_reset(struct net_device *dev)
12350 {
12351         struct tg3 *tp = netdev_priv(dev);
12352         int r;
12353
12354         if (!netif_running(dev))
12355                 return -EAGAIN;
12356
12357         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12358                 return -EINVAL;
12359
12360         tg3_warn_mgmt_link_flap(tp);
12361
12362         if (tg3_flag(tp, USE_PHYLIB)) {
12363                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12364                         return -EAGAIN;
12365                 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
12366         } else {
12367                 u32 bmcr;
12368
12369                 spin_lock_bh(&tp->lock);
12370                 r = -EINVAL;
12371                 tg3_readphy(tp, MII_BMCR, &bmcr);
12372                 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
12373                     ((bmcr & BMCR_ANENABLE) ||
12374                      (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
12375                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
12376                                                    BMCR_ANENABLE);
12377                         r = 0;
12378                 }
12379                 spin_unlock_bh(&tp->lock);
12380         }
12381
12382         return r;
12383 }
12384
12385 static void tg3_get_ringparam(struct net_device *dev,
12386                               struct ethtool_ringparam *ering,
12387                               struct kernel_ethtool_ringparam *kernel_ering,
12388                               struct netlink_ext_ack *extack)
12389 {
12390         struct tg3 *tp = netdev_priv(dev);
12391
12392         ering->rx_max_pending = tp->rx_std_ring_mask;
12393         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12394                 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
12395         else
12396                 ering->rx_jumbo_max_pending = 0;
12397
12398         ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
12399
12400         ering->rx_pending = tp->rx_pending;
12401         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12402                 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
12403         else
12404                 ering->rx_jumbo_pending = 0;
12405
12406         ering->tx_pending = tp->napi[0].tx_pending;
12407 }
12408
12409 static int tg3_set_ringparam(struct net_device *dev,
12410                              struct ethtool_ringparam *ering,
12411                              struct kernel_ethtool_ringparam *kernel_ering,
12412                              struct netlink_ext_ack *extack)
12413 {
12414         struct tg3 *tp = netdev_priv(dev);
12415         int i, irq_sync = 0, err = 0;
12416         bool reset_phy = false;
12417
12418         if ((ering->rx_pending > tp->rx_std_ring_mask) ||
12419             (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
12420             (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
12421             (ering->tx_pending <= MAX_SKB_FRAGS) ||
12422             (tg3_flag(tp, TSO_BUG) &&
12423              (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
12424                 return -EINVAL;
12425
12426         if (netif_running(dev)) {
12427                 tg3_phy_stop(tp);
12428                 tg3_netif_stop(tp);
12429                 irq_sync = 1;
12430         }
12431
12432         tg3_full_lock(tp, irq_sync);
12433
12434         tp->rx_pending = ering->rx_pending;
12435
12436         if (tg3_flag(tp, MAX_RXPEND_64) &&
12437             tp->rx_pending > 63)
12438                 tp->rx_pending = 63;
12439
12440         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12441                 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
12442
12443         for (i = 0; i < tp->irq_max; i++)
12444                 tp->napi[i].tx_pending = ering->tx_pending;
12445
12446         if (netif_running(dev)) {
12447                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12448                 /* Reset PHY to avoid PHY lock up */
12449                 if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12450                     tg3_asic_rev(tp) == ASIC_REV_5719 ||
12451                     tg3_asic_rev(tp) == ASIC_REV_5720)
12452                         reset_phy = true;
12453
12454                 err = tg3_restart_hw(tp, reset_phy);
12455                 if (!err)
12456                         tg3_netif_start(tp);
12457         }
12458
12459         tg3_full_unlock(tp);
12460
12461         if (irq_sync && !err)
12462                 tg3_phy_start(tp);
12463
12464         return err;
12465 }
12466
12467 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12468 {
12469         struct tg3 *tp = netdev_priv(dev);
12470
12471         epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
12472
12473         if (tp->link_config.flowctrl & FLOW_CTRL_RX)
12474                 epause->rx_pause = 1;
12475         else
12476                 epause->rx_pause = 0;
12477
12478         if (tp->link_config.flowctrl & FLOW_CTRL_TX)
12479                 epause->tx_pause = 1;
12480         else
12481                 epause->tx_pause = 0;
12482 }
12483
12484 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12485 {
12486         struct tg3 *tp = netdev_priv(dev);
12487         int err = 0;
12488         bool reset_phy = false;
12489
12490         if (tp->link_config.autoneg == AUTONEG_ENABLE)
12491                 tg3_warn_mgmt_link_flap(tp);
12492
12493         if (tg3_flag(tp, USE_PHYLIB)) {
12494                 struct phy_device *phydev;
12495
12496                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12497
12498                 if (!phy_validate_pause(phydev, epause))
12499                         return -EINVAL;
12500
12501                 tp->link_config.flowctrl = 0;
12502                 phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause);
12503                 if (epause->rx_pause) {
12504                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12505
12506                         if (epause->tx_pause) {
12507                                 tp->link_config.flowctrl |= FLOW_CTRL_TX;
12508                         }
12509                 } else if (epause->tx_pause) {
12510                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12511                 }
12512
12513                 if (epause->autoneg)
12514                         tg3_flag_set(tp, PAUSE_AUTONEG);
12515                 else
12516                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12517
12518                 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
12519                         if (phydev->autoneg) {
12520                                 /* phy_set_asym_pause() will
12521                                  * renegotiate the link to inform our
12522                                  * link partner of our flow control
12523                                  * settings, even if the flow control
12524                                  * is forced.  Let tg3_adjust_link()
12525                                  * do the final flow control setup.
12526                                  */
12527                                 return 0;
12528                         }
12529
12530                         if (!epause->autoneg)
12531                                 tg3_setup_flow_control(tp, 0, 0);
12532                 }
12533         } else {
12534                 int irq_sync = 0;
12535
12536                 if (netif_running(dev)) {
12537                         tg3_netif_stop(tp);
12538                         irq_sync = 1;
12539                 }
12540
12541                 tg3_full_lock(tp, irq_sync);
12542
12543                 if (epause->autoneg)
12544                         tg3_flag_set(tp, PAUSE_AUTONEG);
12545                 else
12546                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12547                 if (epause->rx_pause)
12548                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12549                 else
12550                         tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
12551                 if (epause->tx_pause)
12552                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12553                 else
12554                         tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
12555
12556                 if (netif_running(dev)) {
12557                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12558                         /* Reset PHY to avoid PHY lock up */
12559                         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12560                             tg3_asic_rev(tp) == ASIC_REV_5719 ||
12561                             tg3_asic_rev(tp) == ASIC_REV_5720)
12562                                 reset_phy = true;
12563
12564                         err = tg3_restart_hw(tp, reset_phy);
12565                         if (!err)
12566                                 tg3_netif_start(tp);
12567                 }
12568
12569                 tg3_full_unlock(tp);
12570         }
12571
12572         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12573
12574         return err;
12575 }
12576
12577 static int tg3_get_sset_count(struct net_device *dev, int sset)
12578 {
12579         switch (sset) {
12580         case ETH_SS_TEST:
12581                 return TG3_NUM_TEST;
12582         case ETH_SS_STATS:
12583                 return TG3_NUM_STATS;
12584         default:
12585                 return -EOPNOTSUPP;
12586         }
12587 }
12588
12589 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
12590                          u32 *rules __always_unused)
12591 {
12592         struct tg3 *tp = netdev_priv(dev);
12593
12594         if (!tg3_flag(tp, SUPPORT_MSIX))
12595                 return -EOPNOTSUPP;
12596
12597         switch (info->cmd) {
12598         case ETHTOOL_GRXRINGS:
12599                 if (netif_running(tp->dev))
12600                         info->data = tp->rxq_cnt;
12601                 else {
12602                         info->data = num_online_cpus();
12603                         if (info->data > TG3_RSS_MAX_NUM_QS)
12604                                 info->data = TG3_RSS_MAX_NUM_QS;
12605                 }
12606
12607                 return 0;
12608
12609         default:
12610                 return -EOPNOTSUPP;
12611         }
12612 }
12613
12614 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
12615 {
12616         u32 size = 0;
12617         struct tg3 *tp = netdev_priv(dev);
12618
12619         if (tg3_flag(tp, SUPPORT_MSIX))
12620                 size = TG3_RSS_INDIR_TBL_SIZE;
12621
12622         return size;
12623 }
12624
12625 static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc)
12626 {
12627         struct tg3 *tp = netdev_priv(dev);
12628         int i;
12629
12630         if (hfunc)
12631                 *hfunc = ETH_RSS_HASH_TOP;
12632         if (!indir)
12633                 return 0;
12634
12635         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12636                 indir[i] = tp->rss_ind_tbl[i];
12637
12638         return 0;
12639 }
12640
12641 static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key,
12642                         const u8 hfunc)
12643 {
12644         struct tg3 *tp = netdev_priv(dev);
12645         size_t i;
12646
12647         /* We require at least one supported parameter to be changed and no
12648          * change in any of the unsupported parameters
12649          */
12650         if (key ||
12651             (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
12652                 return -EOPNOTSUPP;
12653
12654         if (!indir)
12655                 return 0;
12656
12657         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12658                 tp->rss_ind_tbl[i] = indir[i];
12659
12660         if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
12661                 return 0;
12662
12663         /* It is legal to write the indirection
12664          * table while the device is running.
12665          */
12666         tg3_full_lock(tp, 0);
12667         tg3_rss_write_indir_tbl(tp);
12668         tg3_full_unlock(tp);
12669
12670         return 0;
12671 }
12672
12673 static void tg3_get_channels(struct net_device *dev,
12674                              struct ethtool_channels *channel)
12675 {
12676         struct tg3 *tp = netdev_priv(dev);
12677         u32 deflt_qs = netif_get_num_default_rss_queues();
12678
12679         channel->max_rx = tp->rxq_max;
12680         channel->max_tx = tp->txq_max;
12681
12682         if (netif_running(dev)) {
12683                 channel->rx_count = tp->rxq_cnt;
12684                 channel->tx_count = tp->txq_cnt;
12685         } else {
12686                 if (tp->rxq_req)
12687                         channel->rx_count = tp->rxq_req;
12688                 else
12689                         channel->rx_count = min(deflt_qs, tp->rxq_max);
12690
12691                 if (tp->txq_req)
12692                         channel->tx_count = tp->txq_req;
12693                 else
12694                         channel->tx_count = min(deflt_qs, tp->txq_max);
12695         }
12696 }
12697
12698 static int tg3_set_channels(struct net_device *dev,
12699                             struct ethtool_channels *channel)
12700 {
12701         struct tg3 *tp = netdev_priv(dev);
12702
12703         if (!tg3_flag(tp, SUPPORT_MSIX))
12704                 return -EOPNOTSUPP;
12705
12706         if (channel->rx_count > tp->rxq_max ||
12707             channel->tx_count > tp->txq_max)
12708                 return -EINVAL;
12709
12710         tp->rxq_req = channel->rx_count;
12711         tp->txq_req = channel->tx_count;
12712
12713         if (!netif_running(dev))
12714                 return 0;
12715
12716         tg3_stop(tp);
12717
12718         tg3_carrier_off(tp);
12719
12720         tg3_start(tp, true, false, false);
12721
12722         return 0;
12723 }
12724
12725 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
12726 {
12727         switch (stringset) {
12728         case ETH_SS_STATS:
12729                 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
12730                 break;
12731         case ETH_SS_TEST:
12732                 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
12733                 break;
12734         default:
12735                 WARN_ON(1);     /* we need a WARN() */
12736                 break;
12737         }
12738 }
12739
12740 static int tg3_set_phys_id(struct net_device *dev,
12741                             enum ethtool_phys_id_state state)
12742 {
12743         struct tg3 *tp = netdev_priv(dev);
12744
12745         switch (state) {
12746         case ETHTOOL_ID_ACTIVE:
12747                 return 1;       /* cycle on/off once per second */
12748
12749         case ETHTOOL_ID_ON:
12750                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12751                      LED_CTRL_1000MBPS_ON |
12752                      LED_CTRL_100MBPS_ON |
12753                      LED_CTRL_10MBPS_ON |
12754                      LED_CTRL_TRAFFIC_OVERRIDE |
12755                      LED_CTRL_TRAFFIC_BLINK |
12756                      LED_CTRL_TRAFFIC_LED);
12757                 break;
12758
12759         case ETHTOOL_ID_OFF:
12760                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12761                      LED_CTRL_TRAFFIC_OVERRIDE);
12762                 break;
12763
12764         case ETHTOOL_ID_INACTIVE:
12765                 tw32(MAC_LED_CTRL, tp->led_ctrl);
12766                 break;
12767         }
12768
12769         return 0;
12770 }
12771
12772 static void tg3_get_ethtool_stats(struct net_device *dev,
12773                                    struct ethtool_stats *estats, u64 *tmp_stats)
12774 {
12775         struct tg3 *tp = netdev_priv(dev);
12776
12777         if (tp->hw_stats)
12778                 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
12779         else
12780                 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
12781 }
12782
12783 static __be32 *tg3_vpd_readblock(struct tg3 *tp, unsigned int *vpdlen)
12784 {
12785         int i;
12786         __be32 *buf;
12787         u32 offset = 0, len = 0;
12788         u32 magic, val;
12789
12790         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
12791                 return NULL;
12792
12793         if (magic == TG3_EEPROM_MAGIC) {
12794                 for (offset = TG3_NVM_DIR_START;
12795                      offset < TG3_NVM_DIR_END;
12796                      offset += TG3_NVM_DIRENT_SIZE) {
12797                         if (tg3_nvram_read(tp, offset, &val))
12798                                 return NULL;
12799
12800                         if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
12801                             TG3_NVM_DIRTYPE_EXTVPD)
12802                                 break;
12803                 }
12804
12805                 if (offset != TG3_NVM_DIR_END) {
12806                         len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
12807                         if (tg3_nvram_read(tp, offset + 4, &offset))
12808                                 return NULL;
12809
12810                         offset = tg3_nvram_logical_addr(tp, offset);
12811                 }
12812
12813                 if (!offset || !len) {
12814                         offset = TG3_NVM_VPD_OFF;
12815                         len = TG3_NVM_VPD_LEN;
12816                 }
12817
12818                 buf = kmalloc(len, GFP_KERNEL);
12819                 if (!buf)
12820                         return NULL;
12821
12822                 for (i = 0; i < len; i += 4) {
12823                         /* The data is in little-endian format in NVRAM.
12824                          * Use the big-endian read routines to preserve
12825                          * the byte order as it exists in NVRAM.
12826                          */
12827                         if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
12828                                 goto error;
12829                 }
12830                 *vpdlen = len;
12831         } else {
12832                 buf = pci_vpd_alloc(tp->pdev, vpdlen);
12833                 if (IS_ERR(buf))
12834                         return NULL;
12835         }
12836
12837         return buf;
12838
12839 error:
12840         kfree(buf);
12841         return NULL;
12842 }
12843
12844 #define NVRAM_TEST_SIZE 0x100
12845 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE   0x14
12846 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE   0x18
12847 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE   0x1c
12848 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE   0x20
12849 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE   0x24
12850 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE   0x50
12851 #define NVRAM_SELFBOOT_HW_SIZE 0x20
12852 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
12853
12854 static int tg3_test_nvram(struct tg3 *tp)
12855 {
12856         u32 csum, magic;
12857         __be32 *buf;
12858         int i, j, k, err = 0, size;
12859         unsigned int len;
12860
12861         if (tg3_flag(tp, NO_NVRAM))
12862                 return 0;
12863
12864         if (tg3_nvram_read(tp, 0, &magic) != 0)
12865                 return -EIO;
12866
12867         if (magic == TG3_EEPROM_MAGIC)
12868                 size = NVRAM_TEST_SIZE;
12869         else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
12870                 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
12871                     TG3_EEPROM_SB_FORMAT_1) {
12872                         switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
12873                         case TG3_EEPROM_SB_REVISION_0:
12874                                 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
12875                                 break;
12876                         case TG3_EEPROM_SB_REVISION_2:
12877                                 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
12878                                 break;
12879                         case TG3_EEPROM_SB_REVISION_3:
12880                                 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
12881                                 break;
12882                         case TG3_EEPROM_SB_REVISION_4:
12883                                 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
12884                                 break;
12885                         case TG3_EEPROM_SB_REVISION_5:
12886                                 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
12887                                 break;
12888                         case TG3_EEPROM_SB_REVISION_6:
12889                                 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
12890                                 break;
12891                         default:
12892                                 return -EIO;
12893                         }
12894                 } else
12895                         return 0;
12896         } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
12897                 size = NVRAM_SELFBOOT_HW_SIZE;
12898         else
12899                 return -EIO;
12900
12901         buf = kmalloc(size, GFP_KERNEL);
12902         if (buf == NULL)
12903                 return -ENOMEM;
12904
12905         err = -EIO;
12906         for (i = 0, j = 0; i < size; i += 4, j++) {
12907                 err = tg3_nvram_read_be32(tp, i, &buf[j]);
12908                 if (err)
12909                         break;
12910         }
12911         if (i < size)
12912                 goto out;
12913
12914         /* Selfboot format */
12915         magic = be32_to_cpu(buf[0]);
12916         if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
12917             TG3_EEPROM_MAGIC_FW) {
12918                 u8 *buf8 = (u8 *) buf, csum8 = 0;
12919
12920                 if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
12921                     TG3_EEPROM_SB_REVISION_2) {
12922                         /* For rev 2, the csum doesn't include the MBA. */
12923                         for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
12924                                 csum8 += buf8[i];
12925                         for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
12926                                 csum8 += buf8[i];
12927                 } else {
12928                         for (i = 0; i < size; i++)
12929                                 csum8 += buf8[i];
12930                 }
12931
12932                 if (csum8 == 0) {
12933                         err = 0;
12934                         goto out;
12935                 }
12936
12937                 err = -EIO;
12938                 goto out;
12939         }
12940
12941         if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
12942             TG3_EEPROM_MAGIC_HW) {
12943                 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
12944                 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
12945                 u8 *buf8 = (u8 *) buf;
12946
12947                 /* Separate the parity bits and the data bytes.  */
12948                 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
12949                         if ((i == 0) || (i == 8)) {
12950                                 int l;
12951                                 u8 msk;
12952
12953                                 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
12954                                         parity[k++] = buf8[i] & msk;
12955                                 i++;
12956                         } else if (i == 16) {
12957                                 int l;
12958                                 u8 msk;
12959
12960                                 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
12961                                         parity[k++] = buf8[i] & msk;
12962                                 i++;
12963
12964                                 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
12965                                         parity[k++] = buf8[i] & msk;
12966                                 i++;
12967                         }
12968                         data[j++] = buf8[i];
12969                 }
12970
12971                 err = -EIO;
12972                 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
12973                         u8 hw8 = hweight8(data[i]);
12974
12975                         if ((hw8 & 0x1) && parity[i])
12976                                 goto out;
12977                         else if (!(hw8 & 0x1) && !parity[i])
12978                                 goto out;
12979                 }
12980                 err = 0;
12981                 goto out;
12982         }
12983
12984         err = -EIO;
12985
12986         /* Bootstrap checksum at offset 0x10 */
12987         csum = calc_crc((unsigned char *) buf, 0x10);
12988         if (csum != le32_to_cpu(buf[0x10/4]))
12989                 goto out;
12990
12991         /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
12992         csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
12993         if (csum != le32_to_cpu(buf[0xfc/4]))
12994                 goto out;
12995
12996         kfree(buf);
12997
12998         buf = tg3_vpd_readblock(tp, &len);
12999         if (!buf)
13000                 return -ENOMEM;
13001
13002         err = pci_vpd_check_csum(buf, len);
13003         /* go on if no checksum found */
13004         if (err == 1)
13005                 err = 0;
13006 out:
13007         kfree(buf);
13008         return err;
13009 }
13010
13011 #define TG3_SERDES_TIMEOUT_SEC  2
13012 #define TG3_COPPER_TIMEOUT_SEC  6
13013
13014 static int tg3_test_link(struct tg3 *tp)
13015 {
13016         int i, max;
13017
13018         if (!netif_running(tp->dev))
13019                 return -ENODEV;
13020
13021         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
13022                 max = TG3_SERDES_TIMEOUT_SEC;
13023         else
13024                 max = TG3_COPPER_TIMEOUT_SEC;
13025
13026         for (i = 0; i < max; i++) {
13027                 if (tp->link_up)
13028                         return 0;
13029
13030                 if (msleep_interruptible(1000))
13031                         break;
13032         }
13033
13034         return -EIO;
13035 }
13036
13037 /* Only test the commonly used registers */
13038 static int tg3_test_registers(struct tg3 *tp)
13039 {
13040         int i, is_5705, is_5750;
13041         u32 offset, read_mask, write_mask, val, save_val, read_val;
13042         static struct {
13043                 u16 offset;
13044                 u16 flags;
13045 #define TG3_FL_5705     0x1
13046 #define TG3_FL_NOT_5705 0x2
13047 #define TG3_FL_NOT_5788 0x4
13048 #define TG3_FL_NOT_5750 0x8
13049                 u32 read_mask;
13050                 u32 write_mask;
13051         } reg_tbl[] = {
13052                 /* MAC Control Registers */
13053                 { MAC_MODE, TG3_FL_NOT_5705,
13054                         0x00000000, 0x00ef6f8c },
13055                 { MAC_MODE, TG3_FL_5705,
13056                         0x00000000, 0x01ef6b8c },
13057                 { MAC_STATUS, TG3_FL_NOT_5705,
13058                         0x03800107, 0x00000000 },
13059                 { MAC_STATUS, TG3_FL_5705,
13060                         0x03800100, 0x00000000 },
13061                 { MAC_ADDR_0_HIGH, 0x0000,
13062                         0x00000000, 0x0000ffff },
13063                 { MAC_ADDR_0_LOW, 0x0000,
13064                         0x00000000, 0xffffffff },
13065                 { MAC_RX_MTU_SIZE, 0x0000,
13066                         0x00000000, 0x0000ffff },
13067                 { MAC_TX_MODE, 0x0000,
13068                         0x00000000, 0x00000070 },
13069                 { MAC_TX_LENGTHS, 0x0000,
13070                         0x00000000, 0x00003fff },
13071                 { MAC_RX_MODE, TG3_FL_NOT_5705,
13072                         0x00000000, 0x000007fc },
13073                 { MAC_RX_MODE, TG3_FL_5705,
13074                         0x00000000, 0x000007dc },
13075                 { MAC_HASH_REG_0, 0x0000,
13076                         0x00000000, 0xffffffff },
13077                 { MAC_HASH_REG_1, 0x0000,
13078                         0x00000000, 0xffffffff },
13079                 { MAC_HASH_REG_2, 0x0000,
13080                         0x00000000, 0xffffffff },
13081                 { MAC_HASH_REG_3, 0x0000,
13082                         0x00000000, 0xffffffff },
13083
13084                 /* Receive Data and Receive BD Initiator Control Registers. */
13085                 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
13086                         0x00000000, 0xffffffff },
13087                 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
13088                         0x00000000, 0xffffffff },
13089                 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
13090                         0x00000000, 0x00000003 },
13091                 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
13092                         0x00000000, 0xffffffff },
13093                 { RCVDBDI_STD_BD+0, 0x0000,
13094                         0x00000000, 0xffffffff },
13095                 { RCVDBDI_STD_BD+4, 0x0000,
13096                         0x00000000, 0xffffffff },
13097                 { RCVDBDI_STD_BD+8, 0x0000,
13098                         0x00000000, 0xffff0002 },
13099                 { RCVDBDI_STD_BD+0xc, 0x0000,
13100                         0x00000000, 0xffffffff },
13101
13102                 /* Receive BD Initiator Control Registers. */
13103                 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
13104                         0x00000000, 0xffffffff },
13105                 { RCVBDI_STD_THRESH, TG3_FL_5705,
13106                         0x00000000, 0x000003ff },
13107                 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
13108                         0x00000000, 0xffffffff },
13109
13110                 /* Host Coalescing Control Registers. */
13111                 { HOSTCC_MODE, TG3_FL_NOT_5705,
13112                         0x00000000, 0x00000004 },
13113                 { HOSTCC_MODE, TG3_FL_5705,
13114                         0x00000000, 0x000000f6 },
13115                 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
13116                         0x00000000, 0xffffffff },
13117                 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
13118                         0x00000000, 0x000003ff },
13119                 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
13120                         0x00000000, 0xffffffff },
13121                 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
13122                         0x00000000, 0x000003ff },
13123                 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
13124                         0x00000000, 0xffffffff },
13125                 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13126                         0x00000000, 0x000000ff },
13127                 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
13128                         0x00000000, 0xffffffff },
13129                 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13130                         0x00000000, 0x000000ff },
13131                 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
13132                         0x00000000, 0xffffffff },
13133                 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
13134                         0x00000000, 0xffffffff },
13135                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13136                         0x00000000, 0xffffffff },
13137                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13138                         0x00000000, 0x000000ff },
13139                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13140                         0x00000000, 0xffffffff },
13141                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13142                         0x00000000, 0x000000ff },
13143                 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
13144                         0x00000000, 0xffffffff },
13145                 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
13146                         0x00000000, 0xffffffff },
13147                 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
13148                         0x00000000, 0xffffffff },
13149                 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
13150                         0x00000000, 0xffffffff },
13151                 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
13152                         0x00000000, 0xffffffff },
13153                 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
13154                         0xffffffff, 0x00000000 },
13155                 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
13156                         0xffffffff, 0x00000000 },
13157
13158                 /* Buffer Manager Control Registers. */
13159                 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
13160                         0x00000000, 0x007fff80 },
13161                 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
13162                         0x00000000, 0x007fffff },
13163                 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
13164                         0x00000000, 0x0000003f },
13165                 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
13166                         0x00000000, 0x000001ff },
13167                 { BUFMGR_MB_HIGH_WATER, 0x0000,
13168                         0x00000000, 0x000001ff },
13169                 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
13170                         0xffffffff, 0x00000000 },
13171                 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
13172                         0xffffffff, 0x00000000 },
13173
13174                 /* Mailbox Registers */
13175                 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
13176                         0x00000000, 0x000001ff },
13177                 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
13178                         0x00000000, 0x000001ff },
13179                 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
13180                         0x00000000, 0x000007ff },
13181                 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
13182                         0x00000000, 0x000001ff },
13183
13184                 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
13185         };
13186
13187         is_5705 = is_5750 = 0;
13188         if (tg3_flag(tp, 5705_PLUS)) {
13189                 is_5705 = 1;
13190                 if (tg3_flag(tp, 5750_PLUS))
13191                         is_5750 = 1;
13192         }
13193
13194         for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
13195                 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
13196                         continue;
13197
13198                 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
13199                         continue;
13200
13201                 if (tg3_flag(tp, IS_5788) &&
13202                     (reg_tbl[i].flags & TG3_FL_NOT_5788))
13203                         continue;
13204
13205                 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
13206                         continue;
13207
13208                 offset = (u32) reg_tbl[i].offset;
13209                 read_mask = reg_tbl[i].read_mask;
13210                 write_mask = reg_tbl[i].write_mask;
13211
13212                 /* Save the original register content */
13213                 save_val = tr32(offset);
13214
13215                 /* Determine the read-only value. */
13216                 read_val = save_val & read_mask;
13217
13218                 /* Write zero to the register, then make sure the read-only bits
13219                  * are not changed and the read/write bits are all zeros.
13220                  */
13221                 tw32(offset, 0);
13222
13223                 val = tr32(offset);
13224
13225                 /* Test the read-only and read/write bits. */
13226                 if (((val & read_mask) != read_val) || (val & write_mask))
13227                         goto out;
13228
13229                 /* Write ones to all the bits defined by RdMask and WrMask, then
13230                  * make sure the read-only bits are not changed and the
13231                  * read/write bits are all ones.
13232                  */
13233                 tw32(offset, read_mask | write_mask);
13234
13235                 val = tr32(offset);
13236
13237                 /* Test the read-only bits. */
13238                 if ((val & read_mask) != read_val)
13239                         goto out;
13240
13241                 /* Test the read/write bits. */
13242                 if ((val & write_mask) != write_mask)
13243                         goto out;
13244
13245                 tw32(offset, save_val);
13246         }
13247
13248         return 0;
13249
13250 out:
13251         if (netif_msg_hw(tp))
13252                 netdev_err(tp->dev,
13253                            "Register test failed at offset %x\n", offset);
13254         tw32(offset, save_val);
13255         return -EIO;
13256 }
13257
13258 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
13259 {
13260         static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
13261         int i;
13262         u32 j;
13263
13264         for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
13265                 for (j = 0; j < len; j += 4) {
13266                         u32 val;
13267
13268                         tg3_write_mem(tp, offset + j, test_pattern[i]);
13269                         tg3_read_mem(tp, offset + j, &val);
13270                         if (val != test_pattern[i])
13271                                 return -EIO;
13272                 }
13273         }
13274         return 0;
13275 }
13276
13277 static int tg3_test_memory(struct tg3 *tp)
13278 {
13279         static struct mem_entry {
13280                 u32 offset;
13281                 u32 len;
13282         } mem_tbl_570x[] = {
13283                 { 0x00000000, 0x00b50},
13284                 { 0x00002000, 0x1c000},
13285                 { 0xffffffff, 0x00000}
13286         }, mem_tbl_5705[] = {
13287                 { 0x00000100, 0x0000c},
13288                 { 0x00000200, 0x00008},
13289                 { 0x00004000, 0x00800},
13290                 { 0x00006000, 0x01000},
13291                 { 0x00008000, 0x02000},
13292                 { 0x00010000, 0x0e000},
13293                 { 0xffffffff, 0x00000}
13294         }, mem_tbl_5755[] = {
13295                 { 0x00000200, 0x00008},
13296                 { 0x00004000, 0x00800},
13297                 { 0x00006000, 0x00800},
13298                 { 0x00008000, 0x02000},
13299                 { 0x00010000, 0x0c000},
13300                 { 0xffffffff, 0x00000}
13301         }, mem_tbl_5906[] = {
13302                 { 0x00000200, 0x00008},
13303                 { 0x00004000, 0x00400},
13304                 { 0x00006000, 0x00400},
13305                 { 0x00008000, 0x01000},
13306                 { 0x00010000, 0x01000},
13307                 { 0xffffffff, 0x00000}
13308         }, mem_tbl_5717[] = {
13309                 { 0x00000200, 0x00008},
13310                 { 0x00010000, 0x0a000},
13311                 { 0x00020000, 0x13c00},
13312                 { 0xffffffff, 0x00000}
13313         }, mem_tbl_57765[] = {
13314                 { 0x00000200, 0x00008},
13315                 { 0x00004000, 0x00800},
13316                 { 0x00006000, 0x09800},
13317                 { 0x00010000, 0x0a000},
13318                 { 0xffffffff, 0x00000}
13319         };
13320         struct mem_entry *mem_tbl;
13321         int err = 0;
13322         int i;
13323
13324         if (tg3_flag(tp, 5717_PLUS))
13325                 mem_tbl = mem_tbl_5717;
13326         else if (tg3_flag(tp, 57765_CLASS) ||
13327                  tg3_asic_rev(tp) == ASIC_REV_5762)
13328                 mem_tbl = mem_tbl_57765;
13329         else if (tg3_flag(tp, 5755_PLUS))
13330                 mem_tbl = mem_tbl_5755;
13331         else if (tg3_asic_rev(tp) == ASIC_REV_5906)
13332                 mem_tbl = mem_tbl_5906;
13333         else if (tg3_flag(tp, 5705_PLUS))
13334                 mem_tbl = mem_tbl_5705;
13335         else
13336                 mem_tbl = mem_tbl_570x;
13337
13338         for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
13339                 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
13340                 if (err)
13341                         break;
13342         }
13343
13344         return err;
13345 }
13346
13347 #define TG3_TSO_MSS             500
13348
13349 #define TG3_TSO_IP_HDR_LEN      20
13350 #define TG3_TSO_TCP_HDR_LEN     20
13351 #define TG3_TSO_TCP_OPT_LEN     12
13352
13353 static const u8 tg3_tso_header[] = {
13354 0x08, 0x00,
13355 0x45, 0x00, 0x00, 0x00,
13356 0x00, 0x00, 0x40, 0x00,
13357 0x40, 0x06, 0x00, 0x00,
13358 0x0a, 0x00, 0x00, 0x01,
13359 0x0a, 0x00, 0x00, 0x02,
13360 0x0d, 0x00, 0xe0, 0x00,
13361 0x00, 0x00, 0x01, 0x00,
13362 0x00, 0x00, 0x02, 0x00,
13363 0x80, 0x10, 0x10, 0x00,
13364 0x14, 0x09, 0x00, 0x00,
13365 0x01, 0x01, 0x08, 0x0a,
13366 0x11, 0x11, 0x11, 0x11,
13367 0x11, 0x11, 0x11, 0x11,
13368 };
13369
13370 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
13371 {
13372         u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
13373         u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
13374         u32 budget;
13375         struct sk_buff *skb;
13376         u8 *tx_data, *rx_data;
13377         dma_addr_t map;
13378         int num_pkts, tx_len, rx_len, i, err;
13379         struct tg3_rx_buffer_desc *desc;
13380         struct tg3_napi *tnapi, *rnapi;
13381         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
13382
13383         tnapi = &tp->napi[0];
13384         rnapi = &tp->napi[0];
13385         if (tp->irq_cnt > 1) {
13386                 if (tg3_flag(tp, ENABLE_RSS))
13387                         rnapi = &tp->napi[1];
13388                 if (tg3_flag(tp, ENABLE_TSS))
13389                         tnapi = &tp->napi[1];
13390         }
13391         coal_now = tnapi->coal_now | rnapi->coal_now;
13392
13393         err = -EIO;
13394
13395         tx_len = pktsz;
13396         skb = netdev_alloc_skb(tp->dev, tx_len);
13397         if (!skb)
13398                 return -ENOMEM;
13399
13400         tx_data = skb_put(skb, tx_len);
13401         memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN);
13402         memset(tx_data + ETH_ALEN, 0x0, 8);
13403
13404         tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
13405
13406         if (tso_loopback) {
13407                 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
13408
13409                 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
13410                               TG3_TSO_TCP_OPT_LEN;
13411
13412                 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
13413                        sizeof(tg3_tso_header));
13414                 mss = TG3_TSO_MSS;
13415
13416                 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
13417                 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
13418
13419                 /* Set the total length field in the IP header */
13420                 iph->tot_len = htons((u16)(mss + hdr_len));
13421
13422                 base_flags = (TXD_FLAG_CPU_PRE_DMA |
13423                               TXD_FLAG_CPU_POST_DMA);
13424
13425                 if (tg3_flag(tp, HW_TSO_1) ||
13426                     tg3_flag(tp, HW_TSO_2) ||
13427                     tg3_flag(tp, HW_TSO_3)) {
13428                         struct tcphdr *th;
13429                         val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
13430                         th = (struct tcphdr *)&tx_data[val];
13431                         th->check = 0;
13432                 } else
13433                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
13434
13435                 if (tg3_flag(tp, HW_TSO_3)) {
13436                         mss |= (hdr_len & 0xc) << 12;
13437                         if (hdr_len & 0x10)
13438                                 base_flags |= 0x00000010;
13439                         base_flags |= (hdr_len & 0x3e0) << 5;
13440                 } else if (tg3_flag(tp, HW_TSO_2))
13441                         mss |= hdr_len << 9;
13442                 else if (tg3_flag(tp, HW_TSO_1) ||
13443                          tg3_asic_rev(tp) == ASIC_REV_5705) {
13444                         mss |= (TG3_TSO_TCP_OPT_LEN << 9);
13445                 } else {
13446                         base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
13447                 }
13448
13449                 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
13450         } else {
13451                 num_pkts = 1;
13452                 data_off = ETH_HLEN;
13453
13454                 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
13455                     tx_len > VLAN_ETH_FRAME_LEN)
13456                         base_flags |= TXD_FLAG_JMB_PKT;
13457         }
13458
13459         for (i = data_off; i < tx_len; i++)
13460                 tx_data[i] = (u8) (i & 0xff);
13461
13462         map = dma_map_single(&tp->pdev->dev, skb->data, tx_len, DMA_TO_DEVICE);
13463         if (dma_mapping_error(&tp->pdev->dev, map)) {
13464                 dev_kfree_skb(skb);
13465                 return -EIO;
13466         }
13467
13468         val = tnapi->tx_prod;
13469         tnapi->tx_buffers[val].skb = skb;
13470         dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
13471
13472         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13473                rnapi->coal_now);
13474
13475         udelay(10);
13476
13477         rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
13478
13479         budget = tg3_tx_avail(tnapi);
13480         if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
13481                             base_flags | TXD_FLAG_END, mss, 0)) {
13482                 tnapi->tx_buffers[val].skb = NULL;
13483                 dev_kfree_skb(skb);
13484                 return -EIO;
13485         }
13486
13487         tnapi->tx_prod++;
13488
13489         /* Sync BD data before updating mailbox */
13490         wmb();
13491
13492         tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
13493         tr32_mailbox(tnapi->prodmbox);
13494
13495         udelay(10);
13496
13497         /* 350 usec to allow enough time on some 10/100 Mbps devices.  */
13498         for (i = 0; i < 35; i++) {
13499                 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13500                        coal_now);
13501
13502                 udelay(10);
13503
13504                 tx_idx = tnapi->hw_status->idx[0].tx_consumer;
13505                 rx_idx = rnapi->hw_status->idx[0].rx_producer;
13506                 if ((tx_idx == tnapi->tx_prod) &&
13507                     (rx_idx == (rx_start_idx + num_pkts)))
13508                         break;
13509         }
13510
13511         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
13512         dev_kfree_skb(skb);
13513
13514         if (tx_idx != tnapi->tx_prod)
13515                 goto out;
13516
13517         if (rx_idx != rx_start_idx + num_pkts)
13518                 goto out;
13519
13520         val = data_off;
13521         while (rx_idx != rx_start_idx) {
13522                 desc = &rnapi->rx_rcb[rx_start_idx++];
13523                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
13524                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
13525
13526                 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
13527                     (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
13528                         goto out;
13529
13530                 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
13531                          - ETH_FCS_LEN;
13532
13533                 if (!tso_loopback) {
13534                         if (rx_len != tx_len)
13535                                 goto out;
13536
13537                         if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
13538                                 if (opaque_key != RXD_OPAQUE_RING_STD)
13539                                         goto out;
13540                         } else {
13541                                 if (opaque_key != RXD_OPAQUE_RING_JUMBO)
13542                                         goto out;
13543                         }
13544                 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
13545                            (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
13546                             >> RXD_TCPCSUM_SHIFT != 0xffff) {
13547                         goto out;
13548                 }
13549
13550                 if (opaque_key == RXD_OPAQUE_RING_STD) {
13551                         rx_data = tpr->rx_std_buffers[desc_idx].data;
13552                         map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
13553                                              mapping);
13554                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
13555                         rx_data = tpr->rx_jmb_buffers[desc_idx].data;
13556                         map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
13557                                              mapping);
13558                 } else
13559                         goto out;
13560
13561                 dma_sync_single_for_cpu(&tp->pdev->dev, map, rx_len,
13562                                         DMA_FROM_DEVICE);
13563
13564                 rx_data += TG3_RX_OFFSET(tp);
13565                 for (i = data_off; i < rx_len; i++, val++) {
13566                         if (*(rx_data + i) != (u8) (val & 0xff))
13567                                 goto out;
13568                 }
13569         }
13570
13571         err = 0;
13572
13573         /* tg3_free_rings will unmap and free the rx_data */
13574 out:
13575         return err;
13576 }
13577
13578 #define TG3_STD_LOOPBACK_FAILED         1
13579 #define TG3_JMB_LOOPBACK_FAILED         2
13580 #define TG3_TSO_LOOPBACK_FAILED         4
13581 #define TG3_LOOPBACK_FAILED \
13582         (TG3_STD_LOOPBACK_FAILED | \
13583          TG3_JMB_LOOPBACK_FAILED | \
13584          TG3_TSO_LOOPBACK_FAILED)
13585
13586 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
13587 {
13588         int err = -EIO;
13589         u32 eee_cap;
13590         u32 jmb_pkt_sz = 9000;
13591
13592         if (tp->dma_limit)
13593                 jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
13594
13595         eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
13596         tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
13597
13598         if (!netif_running(tp->dev)) {
13599                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13600                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13601                 if (do_extlpbk)
13602                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13603                 goto done;
13604         }
13605
13606         err = tg3_reset_hw(tp, true);
13607         if (err) {
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         if (tg3_flag(tp, ENABLE_RSS)) {
13616                 int i;
13617
13618                 /* Reroute all rx packets to the 1st queue */
13619                 for (i = MAC_RSS_INDIR_TBL_0;
13620                      i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
13621                         tw32(i, 0x0);
13622         }
13623
13624         /* HW errata - mac loopback fails in some cases on 5780.
13625          * Normal traffic and PHY loopback are not affected by
13626          * errata.  Also, the MAC loopback test is deprecated for
13627          * all newer ASIC revisions.
13628          */
13629         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
13630             !tg3_flag(tp, CPMU_PRESENT)) {
13631                 tg3_mac_loopback(tp, true);
13632
13633                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13634                         data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13635
13636                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13637                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13638                         data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13639
13640                 tg3_mac_loopback(tp, false);
13641         }
13642
13643         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
13644             !tg3_flag(tp, USE_PHYLIB)) {
13645                 int i;
13646
13647                 tg3_phy_lpbk_set(tp, 0, false);
13648
13649                 /* Wait for link */
13650                 for (i = 0; i < 100; i++) {
13651                         if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
13652                                 break;
13653                         mdelay(1);
13654                 }
13655
13656                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13657                         data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13658                 if (tg3_flag(tp, TSO_CAPABLE) &&
13659                     tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13660                         data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
13661                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13662                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13663                         data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13664
13665                 if (do_extlpbk) {
13666                         tg3_phy_lpbk_set(tp, 0, true);
13667
13668                         /* All link indications report up, but the hardware
13669                          * isn't really ready for about 20 msec.  Double it
13670                          * to be sure.
13671                          */
13672                         mdelay(40);
13673
13674                         if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13675                                 data[TG3_EXT_LOOPB_TEST] |=
13676                                                         TG3_STD_LOOPBACK_FAILED;
13677                         if (tg3_flag(tp, TSO_CAPABLE) &&
13678                             tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13679                                 data[TG3_EXT_LOOPB_TEST] |=
13680                                                         TG3_TSO_LOOPBACK_FAILED;
13681                         if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13682                             tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13683                                 data[TG3_EXT_LOOPB_TEST] |=
13684                                                         TG3_JMB_LOOPBACK_FAILED;
13685                 }
13686
13687                 /* Re-enable gphy autopowerdown. */
13688                 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
13689                         tg3_phy_toggle_apd(tp, true);
13690         }
13691
13692         err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
13693                data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
13694
13695 done:
13696         tp->phy_flags |= eee_cap;
13697
13698         return err;
13699 }
13700
13701 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
13702                           u64 *data)
13703 {
13704         struct tg3 *tp = netdev_priv(dev);
13705         bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
13706
13707         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
13708                 if (tg3_power_up(tp)) {
13709                         etest->flags |= ETH_TEST_FL_FAILED;
13710                         memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
13711                         return;
13712                 }
13713                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
13714         }
13715
13716         memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
13717
13718         if (tg3_test_nvram(tp) != 0) {
13719                 etest->flags |= ETH_TEST_FL_FAILED;
13720                 data[TG3_NVRAM_TEST] = 1;
13721         }
13722         if (!doextlpbk && tg3_test_link(tp)) {
13723                 etest->flags |= ETH_TEST_FL_FAILED;
13724                 data[TG3_LINK_TEST] = 1;
13725         }
13726         if (etest->flags & ETH_TEST_FL_OFFLINE) {
13727                 int err, err2 = 0, irq_sync = 0;
13728
13729                 if (netif_running(dev)) {
13730                         tg3_phy_stop(tp);
13731                         tg3_netif_stop(tp);
13732                         irq_sync = 1;
13733                 }
13734
13735                 tg3_full_lock(tp, irq_sync);
13736                 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
13737                 err = tg3_nvram_lock(tp);
13738                 tg3_halt_cpu(tp, RX_CPU_BASE);
13739                 if (!tg3_flag(tp, 5705_PLUS))
13740                         tg3_halt_cpu(tp, TX_CPU_BASE);
13741                 if (!err)
13742                         tg3_nvram_unlock(tp);
13743
13744                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
13745                         tg3_phy_reset(tp);
13746
13747                 if (tg3_test_registers(tp) != 0) {
13748                         etest->flags |= ETH_TEST_FL_FAILED;
13749                         data[TG3_REGISTER_TEST] = 1;
13750                 }
13751
13752                 if (tg3_test_memory(tp) != 0) {
13753                         etest->flags |= ETH_TEST_FL_FAILED;
13754                         data[TG3_MEMORY_TEST] = 1;
13755                 }
13756
13757                 if (doextlpbk)
13758                         etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
13759
13760                 if (tg3_test_loopback(tp, data, doextlpbk))
13761                         etest->flags |= ETH_TEST_FL_FAILED;
13762
13763                 tg3_full_unlock(tp);
13764
13765                 if (tg3_test_interrupt(tp) != 0) {
13766                         etest->flags |= ETH_TEST_FL_FAILED;
13767                         data[TG3_INTERRUPT_TEST] = 1;
13768                 }
13769
13770                 tg3_full_lock(tp, 0);
13771
13772                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13773                 if (netif_running(dev)) {
13774                         tg3_flag_set(tp, INIT_COMPLETE);
13775                         err2 = tg3_restart_hw(tp, true);
13776                         if (!err2)
13777                                 tg3_netif_start(tp);
13778                 }
13779
13780                 tg3_full_unlock(tp);
13781
13782                 if (irq_sync && !err2)
13783                         tg3_phy_start(tp);
13784         }
13785         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
13786                 tg3_power_down_prepare(tp);
13787
13788 }
13789
13790 static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
13791 {
13792         struct tg3 *tp = netdev_priv(dev);
13793         struct hwtstamp_config stmpconf;
13794
13795         if (!tg3_flag(tp, PTP_CAPABLE))
13796                 return -EOPNOTSUPP;
13797
13798         if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
13799                 return -EFAULT;
13800
13801         if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
13802             stmpconf.tx_type != HWTSTAMP_TX_OFF)
13803                 return -ERANGE;
13804
13805         switch (stmpconf.rx_filter) {
13806         case HWTSTAMP_FILTER_NONE:
13807                 tp->rxptpctl = 0;
13808                 break;
13809         case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
13810                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13811                                TG3_RX_PTP_CTL_ALL_V1_EVENTS;
13812                 break;
13813         case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
13814                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13815                                TG3_RX_PTP_CTL_SYNC_EVNT;
13816                 break;
13817         case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
13818                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13819                                TG3_RX_PTP_CTL_DELAY_REQ;
13820                 break;
13821         case HWTSTAMP_FILTER_PTP_V2_EVENT:
13822                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13823                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13824                 break;
13825         case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
13826                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13827                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13828                 break;
13829         case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
13830                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13831                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13832                 break;
13833         case HWTSTAMP_FILTER_PTP_V2_SYNC:
13834                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13835                                TG3_RX_PTP_CTL_SYNC_EVNT;
13836                 break;
13837         case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
13838                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13839                                TG3_RX_PTP_CTL_SYNC_EVNT;
13840                 break;
13841         case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
13842                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13843                                TG3_RX_PTP_CTL_SYNC_EVNT;
13844                 break;
13845         case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
13846                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13847                                TG3_RX_PTP_CTL_DELAY_REQ;
13848                 break;
13849         case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
13850                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13851                                TG3_RX_PTP_CTL_DELAY_REQ;
13852                 break;
13853         case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
13854                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13855                                TG3_RX_PTP_CTL_DELAY_REQ;
13856                 break;
13857         default:
13858                 return -ERANGE;
13859         }
13860
13861         if (netif_running(dev) && tp->rxptpctl)
13862                 tw32(TG3_RX_PTP_CTL,
13863                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
13864
13865         if (stmpconf.tx_type == HWTSTAMP_TX_ON)
13866                 tg3_flag_set(tp, TX_TSTAMP_EN);
13867         else
13868                 tg3_flag_clear(tp, TX_TSTAMP_EN);
13869
13870         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13871                 -EFAULT : 0;
13872 }
13873
13874 static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
13875 {
13876         struct tg3 *tp = netdev_priv(dev);
13877         struct hwtstamp_config stmpconf;
13878
13879         if (!tg3_flag(tp, PTP_CAPABLE))
13880                 return -EOPNOTSUPP;
13881
13882         stmpconf.flags = 0;
13883         stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ?
13884                             HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF);
13885
13886         switch (tp->rxptpctl) {
13887         case 0:
13888                 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE;
13889                 break;
13890         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS:
13891                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
13892                 break;
13893         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13894                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
13895                 break;
13896         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13897                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
13898                 break;
13899         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13900                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
13901                 break;
13902         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13903                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
13904                 break;
13905         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13906                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
13907                 break;
13908         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13909                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
13910                 break;
13911         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13912                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC;
13913                 break;
13914         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13915                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
13916                 break;
13917         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13918                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
13919                 break;
13920         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13921                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ;
13922                 break;
13923         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13924                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
13925                 break;
13926         default:
13927                 WARN_ON_ONCE(1);
13928                 return -ERANGE;
13929         }
13930
13931         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13932                 -EFAULT : 0;
13933 }
13934
13935 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
13936 {
13937         struct mii_ioctl_data *data = if_mii(ifr);
13938         struct tg3 *tp = netdev_priv(dev);
13939         int err;
13940
13941         if (tg3_flag(tp, USE_PHYLIB)) {
13942                 struct phy_device *phydev;
13943                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
13944                         return -EAGAIN;
13945                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
13946                 return phy_mii_ioctl(phydev, ifr, cmd);
13947         }
13948
13949         switch (cmd) {
13950         case SIOCGMIIPHY:
13951                 data->phy_id = tp->phy_addr;
13952
13953                 fallthrough;
13954         case SIOCGMIIREG: {
13955                 u32 mii_regval;
13956
13957                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13958                         break;                  /* We have no PHY */
13959
13960                 if (!netif_running(dev))
13961                         return -EAGAIN;
13962
13963                 spin_lock_bh(&tp->lock);
13964                 err = __tg3_readphy(tp, data->phy_id & 0x1f,
13965                                     data->reg_num & 0x1f, &mii_regval);
13966                 spin_unlock_bh(&tp->lock);
13967
13968                 data->val_out = mii_regval;
13969
13970                 return err;
13971         }
13972
13973         case SIOCSMIIREG:
13974                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13975                         break;                  /* We have no PHY */
13976
13977                 if (!netif_running(dev))
13978                         return -EAGAIN;
13979
13980                 spin_lock_bh(&tp->lock);
13981                 err = __tg3_writephy(tp, data->phy_id & 0x1f,
13982                                      data->reg_num & 0x1f, data->val_in);
13983                 spin_unlock_bh(&tp->lock);
13984
13985                 return err;
13986
13987         case SIOCSHWTSTAMP:
13988                 return tg3_hwtstamp_set(dev, ifr);
13989
13990         case SIOCGHWTSTAMP:
13991                 return tg3_hwtstamp_get(dev, ifr);
13992
13993         default:
13994                 /* do nothing */
13995                 break;
13996         }
13997         return -EOPNOTSUPP;
13998 }
13999
14000 static int tg3_get_coalesce(struct net_device *dev,
14001                             struct ethtool_coalesce *ec,
14002                             struct kernel_ethtool_coalesce *kernel_coal,
14003                             struct netlink_ext_ack *extack)
14004 {
14005         struct tg3 *tp = netdev_priv(dev);
14006
14007         memcpy(ec, &tp->coal, sizeof(*ec));
14008         return 0;
14009 }
14010
14011 static int tg3_set_coalesce(struct net_device *dev,
14012                             struct ethtool_coalesce *ec,
14013                             struct kernel_ethtool_coalesce *kernel_coal,
14014                             struct netlink_ext_ack *extack)
14015 {
14016         struct tg3 *tp = netdev_priv(dev);
14017         u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
14018         u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
14019
14020         if (!tg3_flag(tp, 5705_PLUS)) {
14021                 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
14022                 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
14023                 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
14024                 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
14025         }
14026
14027         if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
14028             (!ec->rx_coalesce_usecs) ||
14029             (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
14030             (!ec->tx_coalesce_usecs) ||
14031             (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
14032             (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
14033             (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
14034             (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
14035             (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
14036             (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
14037             (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
14038             (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
14039                 return -EINVAL;
14040
14041         /* Only copy relevant parameters, ignore all others. */
14042         tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
14043         tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
14044         tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
14045         tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
14046         tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
14047         tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
14048         tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
14049         tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
14050         tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
14051
14052         if (netif_running(dev)) {
14053                 tg3_full_lock(tp, 0);
14054                 __tg3_set_coalesce(tp, &tp->coal);
14055                 tg3_full_unlock(tp);
14056         }
14057         return 0;
14058 }
14059
14060 static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata)
14061 {
14062         struct tg3 *tp = netdev_priv(dev);
14063
14064         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14065                 netdev_warn(tp->dev, "Board does not support EEE!\n");
14066                 return -EOPNOTSUPP;
14067         }
14068
14069         if (edata->advertised != tp->eee.advertised) {
14070                 netdev_warn(tp->dev,
14071                             "Direct manipulation of EEE advertisement is not supported\n");
14072                 return -EINVAL;
14073         }
14074
14075         if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) {
14076                 netdev_warn(tp->dev,
14077                             "Maximal Tx Lpi timer supported is %#x(u)\n",
14078                             TG3_CPMU_DBTMR1_LNKIDLE_MAX);
14079                 return -EINVAL;
14080         }
14081
14082         tp->eee = *edata;
14083
14084         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
14085         tg3_warn_mgmt_link_flap(tp);
14086
14087         if (netif_running(tp->dev)) {
14088                 tg3_full_lock(tp, 0);
14089                 tg3_setup_eee(tp);
14090                 tg3_phy_reset(tp);
14091                 tg3_full_unlock(tp);
14092         }
14093
14094         return 0;
14095 }
14096
14097 static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata)
14098 {
14099         struct tg3 *tp = netdev_priv(dev);
14100
14101         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14102                 netdev_warn(tp->dev,
14103                             "Board does not support EEE!\n");
14104                 return -EOPNOTSUPP;
14105         }
14106
14107         *edata = tp->eee;
14108         return 0;
14109 }
14110
14111 static const struct ethtool_ops tg3_ethtool_ops = {
14112         .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
14113                                      ETHTOOL_COALESCE_MAX_FRAMES |
14114                                      ETHTOOL_COALESCE_USECS_IRQ |
14115                                      ETHTOOL_COALESCE_MAX_FRAMES_IRQ |
14116                                      ETHTOOL_COALESCE_STATS_BLOCK_USECS,
14117         .get_drvinfo            = tg3_get_drvinfo,
14118         .get_regs_len           = tg3_get_regs_len,
14119         .get_regs               = tg3_get_regs,
14120         .get_wol                = tg3_get_wol,
14121         .set_wol                = tg3_set_wol,
14122         .get_msglevel           = tg3_get_msglevel,
14123         .set_msglevel           = tg3_set_msglevel,
14124         .nway_reset             = tg3_nway_reset,
14125         .get_link               = ethtool_op_get_link,
14126         .get_eeprom_len         = tg3_get_eeprom_len,
14127         .get_eeprom             = tg3_get_eeprom,
14128         .set_eeprom             = tg3_set_eeprom,
14129         .get_ringparam          = tg3_get_ringparam,
14130         .set_ringparam          = tg3_set_ringparam,
14131         .get_pauseparam         = tg3_get_pauseparam,
14132         .set_pauseparam         = tg3_set_pauseparam,
14133         .self_test              = tg3_self_test,
14134         .get_strings            = tg3_get_strings,
14135         .set_phys_id            = tg3_set_phys_id,
14136         .get_ethtool_stats      = tg3_get_ethtool_stats,
14137         .get_coalesce           = tg3_get_coalesce,
14138         .set_coalesce           = tg3_set_coalesce,
14139         .get_sset_count         = tg3_get_sset_count,
14140         .get_rxnfc              = tg3_get_rxnfc,
14141         .get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
14142         .get_rxfh               = tg3_get_rxfh,
14143         .set_rxfh               = tg3_set_rxfh,
14144         .get_channels           = tg3_get_channels,
14145         .set_channels           = tg3_set_channels,
14146         .get_ts_info            = tg3_get_ts_info,
14147         .get_eee                = tg3_get_eee,
14148         .set_eee                = tg3_set_eee,
14149         .get_link_ksettings     = tg3_get_link_ksettings,
14150         .set_link_ksettings     = tg3_set_link_ksettings,
14151 };
14152
14153 static void tg3_get_stats64(struct net_device *dev,
14154                             struct rtnl_link_stats64 *stats)
14155 {
14156         struct tg3 *tp = netdev_priv(dev);
14157
14158         spin_lock_bh(&tp->lock);
14159         if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) {
14160                 *stats = tp->net_stats_prev;
14161                 spin_unlock_bh(&tp->lock);
14162                 return;
14163         }
14164
14165         tg3_get_nstats(tp, stats);
14166         spin_unlock_bh(&tp->lock);
14167 }
14168
14169 static void tg3_set_rx_mode(struct net_device *dev)
14170 {
14171         struct tg3 *tp = netdev_priv(dev);
14172
14173         if (!netif_running(dev))
14174                 return;
14175
14176         tg3_full_lock(tp, 0);
14177         __tg3_set_rx_mode(dev);
14178         tg3_full_unlock(tp);
14179 }
14180
14181 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
14182                                int new_mtu)
14183 {
14184         dev->mtu = new_mtu;
14185
14186         if (new_mtu > ETH_DATA_LEN) {
14187                 if (tg3_flag(tp, 5780_CLASS)) {
14188                         netdev_update_features(dev);
14189                         tg3_flag_clear(tp, TSO_CAPABLE);
14190                 } else {
14191                         tg3_flag_set(tp, JUMBO_RING_ENABLE);
14192                 }
14193         } else {
14194                 if (tg3_flag(tp, 5780_CLASS)) {
14195                         tg3_flag_set(tp, TSO_CAPABLE);
14196                         netdev_update_features(dev);
14197                 }
14198                 tg3_flag_clear(tp, JUMBO_RING_ENABLE);
14199         }
14200 }
14201
14202 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
14203 {
14204         struct tg3 *tp = netdev_priv(dev);
14205         int err;
14206         bool reset_phy = false;
14207
14208         if (!netif_running(dev)) {
14209                 /* We'll just catch it later when the
14210                  * device is up'd.
14211                  */
14212                 tg3_set_mtu(dev, tp, new_mtu);
14213                 return 0;
14214         }
14215
14216         tg3_phy_stop(tp);
14217
14218         tg3_netif_stop(tp);
14219
14220         tg3_set_mtu(dev, tp, new_mtu);
14221
14222         tg3_full_lock(tp, 1);
14223
14224         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
14225
14226         /* Reset PHY, otherwise the read DMA engine will be in a mode that
14227          * breaks all requests to 256 bytes.
14228          */
14229         if (tg3_asic_rev(tp) == ASIC_REV_57766 ||
14230             tg3_asic_rev(tp) == ASIC_REV_5717 ||
14231             tg3_asic_rev(tp) == ASIC_REV_5719 ||
14232             tg3_asic_rev(tp) == ASIC_REV_5720)
14233                 reset_phy = true;
14234
14235         err = tg3_restart_hw(tp, reset_phy);
14236
14237         if (!err)
14238                 tg3_netif_start(tp);
14239
14240         tg3_full_unlock(tp);
14241
14242         if (!err)
14243                 tg3_phy_start(tp);
14244
14245         return err;
14246 }
14247
14248 static const struct net_device_ops tg3_netdev_ops = {
14249         .ndo_open               = tg3_open,
14250         .ndo_stop               = tg3_close,
14251         .ndo_start_xmit         = tg3_start_xmit,
14252         .ndo_get_stats64        = tg3_get_stats64,
14253         .ndo_validate_addr      = eth_validate_addr,
14254         .ndo_set_rx_mode        = tg3_set_rx_mode,
14255         .ndo_set_mac_address    = tg3_set_mac_addr,
14256         .ndo_eth_ioctl          = tg3_ioctl,
14257         .ndo_tx_timeout         = tg3_tx_timeout,
14258         .ndo_change_mtu         = tg3_change_mtu,
14259         .ndo_fix_features       = tg3_fix_features,
14260         .ndo_set_features       = tg3_set_features,
14261 #ifdef CONFIG_NET_POLL_CONTROLLER
14262         .ndo_poll_controller    = tg3_poll_controller,
14263 #endif
14264 };
14265
14266 static void tg3_get_eeprom_size(struct tg3 *tp)
14267 {
14268         u32 cursize, val, magic;
14269
14270         tp->nvram_size = EEPROM_CHIP_SIZE;
14271
14272         if (tg3_nvram_read(tp, 0, &magic) != 0)
14273                 return;
14274
14275         if ((magic != TG3_EEPROM_MAGIC) &&
14276             ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
14277             ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
14278                 return;
14279
14280         /*
14281          * Size the chip by reading offsets at increasing powers of two.
14282          * When we encounter our validation signature, we know the addressing
14283          * has wrapped around, and thus have our chip size.
14284          */
14285         cursize = 0x10;
14286
14287         while (cursize < tp->nvram_size) {
14288                 if (tg3_nvram_read(tp, cursize, &val) != 0)
14289                         return;
14290
14291                 if (val == magic)
14292                         break;
14293
14294                 cursize <<= 1;
14295         }
14296
14297         tp->nvram_size = cursize;
14298 }
14299
14300 static void tg3_get_nvram_size(struct tg3 *tp)
14301 {
14302         u32 val;
14303
14304         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
14305                 return;
14306
14307         /* Selfboot format */
14308         if (val != TG3_EEPROM_MAGIC) {
14309                 tg3_get_eeprom_size(tp);
14310                 return;
14311         }
14312
14313         if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
14314                 if (val != 0) {
14315                         /* This is confusing.  We want to operate on the
14316                          * 16-bit value at offset 0xf2.  The tg3_nvram_read()
14317                          * call will read from NVRAM and byteswap the data
14318                          * according to the byteswapping settings for all
14319                          * other register accesses.  This ensures the data we
14320                          * want will always reside in the lower 16-bits.
14321                          * However, the data in NVRAM is in LE format, which
14322                          * means the data from the NVRAM read will always be
14323                          * opposite the endianness of the CPU.  The 16-bit
14324                          * byteswap then brings the data to CPU endianness.
14325                          */
14326                         tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
14327                         return;
14328                 }
14329         }
14330         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14331 }
14332
14333 static void tg3_get_nvram_info(struct tg3 *tp)
14334 {
14335         u32 nvcfg1;
14336
14337         nvcfg1 = tr32(NVRAM_CFG1);
14338         if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
14339                 tg3_flag_set(tp, FLASH);
14340         } else {
14341                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14342                 tw32(NVRAM_CFG1, nvcfg1);
14343         }
14344
14345         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
14346             tg3_flag(tp, 5780_CLASS)) {
14347                 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
14348                 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
14349                         tp->nvram_jedecnum = JEDEC_ATMEL;
14350                         tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14351                         tg3_flag_set(tp, NVRAM_BUFFERED);
14352                         break;
14353                 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
14354                         tp->nvram_jedecnum = JEDEC_ATMEL;
14355                         tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
14356                         break;
14357                 case FLASH_VENDOR_ATMEL_EEPROM:
14358                         tp->nvram_jedecnum = JEDEC_ATMEL;
14359                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14360                         tg3_flag_set(tp, NVRAM_BUFFERED);
14361                         break;
14362                 case FLASH_VENDOR_ST:
14363                         tp->nvram_jedecnum = JEDEC_ST;
14364                         tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
14365                         tg3_flag_set(tp, NVRAM_BUFFERED);
14366                         break;
14367                 case FLASH_VENDOR_SAIFUN:
14368                         tp->nvram_jedecnum = JEDEC_SAIFUN;
14369                         tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
14370                         break;
14371                 case FLASH_VENDOR_SST_SMALL:
14372                 case FLASH_VENDOR_SST_LARGE:
14373                         tp->nvram_jedecnum = JEDEC_SST;
14374                         tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
14375                         break;
14376                 }
14377         } else {
14378                 tp->nvram_jedecnum = JEDEC_ATMEL;
14379                 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14380                 tg3_flag_set(tp, NVRAM_BUFFERED);
14381         }
14382 }
14383
14384 static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
14385 {
14386         switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
14387         case FLASH_5752PAGE_SIZE_256:
14388                 tp->nvram_pagesize = 256;
14389                 break;
14390         case FLASH_5752PAGE_SIZE_512:
14391                 tp->nvram_pagesize = 512;
14392                 break;
14393         case FLASH_5752PAGE_SIZE_1K:
14394                 tp->nvram_pagesize = 1024;
14395                 break;
14396         case FLASH_5752PAGE_SIZE_2K:
14397                 tp->nvram_pagesize = 2048;
14398                 break;
14399         case FLASH_5752PAGE_SIZE_4K:
14400                 tp->nvram_pagesize = 4096;
14401                 break;
14402         case FLASH_5752PAGE_SIZE_264:
14403                 tp->nvram_pagesize = 264;
14404                 break;
14405         case FLASH_5752PAGE_SIZE_528:
14406                 tp->nvram_pagesize = 528;
14407                 break;
14408         }
14409 }
14410
14411 static void tg3_get_5752_nvram_info(struct tg3 *tp)
14412 {
14413         u32 nvcfg1;
14414
14415         nvcfg1 = tr32(NVRAM_CFG1);
14416
14417         /* NVRAM protection for TPM */
14418         if (nvcfg1 & (1 << 27))
14419                 tg3_flag_set(tp, PROTECTED_NVRAM);
14420
14421         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14422         case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
14423         case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
14424                 tp->nvram_jedecnum = JEDEC_ATMEL;
14425                 tg3_flag_set(tp, NVRAM_BUFFERED);
14426                 break;
14427         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14428                 tp->nvram_jedecnum = JEDEC_ATMEL;
14429                 tg3_flag_set(tp, NVRAM_BUFFERED);
14430                 tg3_flag_set(tp, FLASH);
14431                 break;
14432         case FLASH_5752VENDOR_ST_M45PE10:
14433         case FLASH_5752VENDOR_ST_M45PE20:
14434         case FLASH_5752VENDOR_ST_M45PE40:
14435                 tp->nvram_jedecnum = JEDEC_ST;
14436                 tg3_flag_set(tp, NVRAM_BUFFERED);
14437                 tg3_flag_set(tp, FLASH);
14438                 break;
14439         }
14440
14441         if (tg3_flag(tp, FLASH)) {
14442                 tg3_nvram_get_pagesize(tp, nvcfg1);
14443         } else {
14444                 /* For eeprom, set pagesize to maximum eeprom size */
14445                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14446
14447                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14448                 tw32(NVRAM_CFG1, nvcfg1);
14449         }
14450 }
14451
14452 static void tg3_get_5755_nvram_info(struct tg3 *tp)
14453 {
14454         u32 nvcfg1, protect = 0;
14455
14456         nvcfg1 = tr32(NVRAM_CFG1);
14457
14458         /* NVRAM protection for TPM */
14459         if (nvcfg1 & (1 << 27)) {
14460                 tg3_flag_set(tp, PROTECTED_NVRAM);
14461                 protect = 1;
14462         }
14463
14464         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14465         switch (nvcfg1) {
14466         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14467         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14468         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14469         case FLASH_5755VENDOR_ATMEL_FLASH_5:
14470                 tp->nvram_jedecnum = JEDEC_ATMEL;
14471                 tg3_flag_set(tp, NVRAM_BUFFERED);
14472                 tg3_flag_set(tp, FLASH);
14473                 tp->nvram_pagesize = 264;
14474                 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
14475                     nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
14476                         tp->nvram_size = (protect ? 0x3e200 :
14477                                           TG3_NVRAM_SIZE_512KB);
14478                 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
14479                         tp->nvram_size = (protect ? 0x1f200 :
14480                                           TG3_NVRAM_SIZE_256KB);
14481                 else
14482                         tp->nvram_size = (protect ? 0x1f200 :
14483                                           TG3_NVRAM_SIZE_128KB);
14484                 break;
14485         case FLASH_5752VENDOR_ST_M45PE10:
14486         case FLASH_5752VENDOR_ST_M45PE20:
14487         case FLASH_5752VENDOR_ST_M45PE40:
14488                 tp->nvram_jedecnum = JEDEC_ST;
14489                 tg3_flag_set(tp, NVRAM_BUFFERED);
14490                 tg3_flag_set(tp, FLASH);
14491                 tp->nvram_pagesize = 256;
14492                 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
14493                         tp->nvram_size = (protect ?
14494                                           TG3_NVRAM_SIZE_64KB :
14495                                           TG3_NVRAM_SIZE_128KB);
14496                 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
14497                         tp->nvram_size = (protect ?
14498                                           TG3_NVRAM_SIZE_64KB :
14499                                           TG3_NVRAM_SIZE_256KB);
14500                 else
14501                         tp->nvram_size = (protect ?
14502                                           TG3_NVRAM_SIZE_128KB :
14503                                           TG3_NVRAM_SIZE_512KB);
14504                 break;
14505         }
14506 }
14507
14508 static void tg3_get_5787_nvram_info(struct tg3 *tp)
14509 {
14510         u32 nvcfg1;
14511
14512         nvcfg1 = tr32(NVRAM_CFG1);
14513
14514         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14515         case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
14516         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14517         case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
14518         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14519                 tp->nvram_jedecnum = JEDEC_ATMEL;
14520                 tg3_flag_set(tp, NVRAM_BUFFERED);
14521                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14522
14523                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14524                 tw32(NVRAM_CFG1, nvcfg1);
14525                 break;
14526         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14527         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14528         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14529         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14530                 tp->nvram_jedecnum = JEDEC_ATMEL;
14531                 tg3_flag_set(tp, NVRAM_BUFFERED);
14532                 tg3_flag_set(tp, FLASH);
14533                 tp->nvram_pagesize = 264;
14534                 break;
14535         case FLASH_5752VENDOR_ST_M45PE10:
14536         case FLASH_5752VENDOR_ST_M45PE20:
14537         case FLASH_5752VENDOR_ST_M45PE40:
14538                 tp->nvram_jedecnum = JEDEC_ST;
14539                 tg3_flag_set(tp, NVRAM_BUFFERED);
14540                 tg3_flag_set(tp, FLASH);
14541                 tp->nvram_pagesize = 256;
14542                 break;
14543         }
14544 }
14545
14546 static void tg3_get_5761_nvram_info(struct tg3 *tp)
14547 {
14548         u32 nvcfg1, protect = 0;
14549
14550         nvcfg1 = tr32(NVRAM_CFG1);
14551
14552         /* NVRAM protection for TPM */
14553         if (nvcfg1 & (1 << 27)) {
14554                 tg3_flag_set(tp, PROTECTED_NVRAM);
14555                 protect = 1;
14556         }
14557
14558         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14559         switch (nvcfg1) {
14560         case FLASH_5761VENDOR_ATMEL_ADB021D:
14561         case FLASH_5761VENDOR_ATMEL_ADB041D:
14562         case FLASH_5761VENDOR_ATMEL_ADB081D:
14563         case FLASH_5761VENDOR_ATMEL_ADB161D:
14564         case FLASH_5761VENDOR_ATMEL_MDB021D:
14565         case FLASH_5761VENDOR_ATMEL_MDB041D:
14566         case FLASH_5761VENDOR_ATMEL_MDB081D:
14567         case FLASH_5761VENDOR_ATMEL_MDB161D:
14568                 tp->nvram_jedecnum = JEDEC_ATMEL;
14569                 tg3_flag_set(tp, NVRAM_BUFFERED);
14570                 tg3_flag_set(tp, FLASH);
14571                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14572                 tp->nvram_pagesize = 256;
14573                 break;
14574         case FLASH_5761VENDOR_ST_A_M45PE20:
14575         case FLASH_5761VENDOR_ST_A_M45PE40:
14576         case FLASH_5761VENDOR_ST_A_M45PE80:
14577         case FLASH_5761VENDOR_ST_A_M45PE16:
14578         case FLASH_5761VENDOR_ST_M_M45PE20:
14579         case FLASH_5761VENDOR_ST_M_M45PE40:
14580         case FLASH_5761VENDOR_ST_M_M45PE80:
14581         case FLASH_5761VENDOR_ST_M_M45PE16:
14582                 tp->nvram_jedecnum = JEDEC_ST;
14583                 tg3_flag_set(tp, NVRAM_BUFFERED);
14584                 tg3_flag_set(tp, FLASH);
14585                 tp->nvram_pagesize = 256;
14586                 break;
14587         }
14588
14589         if (protect) {
14590                 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
14591         } else {
14592                 switch (nvcfg1) {
14593                 case FLASH_5761VENDOR_ATMEL_ADB161D:
14594                 case FLASH_5761VENDOR_ATMEL_MDB161D:
14595                 case FLASH_5761VENDOR_ST_A_M45PE16:
14596                 case FLASH_5761VENDOR_ST_M_M45PE16:
14597                         tp->nvram_size = TG3_NVRAM_SIZE_2MB;
14598                         break;
14599                 case FLASH_5761VENDOR_ATMEL_ADB081D:
14600                 case FLASH_5761VENDOR_ATMEL_MDB081D:
14601                 case FLASH_5761VENDOR_ST_A_M45PE80:
14602                 case FLASH_5761VENDOR_ST_M_M45PE80:
14603                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14604                         break;
14605                 case FLASH_5761VENDOR_ATMEL_ADB041D:
14606                 case FLASH_5761VENDOR_ATMEL_MDB041D:
14607                 case FLASH_5761VENDOR_ST_A_M45PE40:
14608                 case FLASH_5761VENDOR_ST_M_M45PE40:
14609                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14610                         break;
14611                 case FLASH_5761VENDOR_ATMEL_ADB021D:
14612                 case FLASH_5761VENDOR_ATMEL_MDB021D:
14613                 case FLASH_5761VENDOR_ST_A_M45PE20:
14614                 case FLASH_5761VENDOR_ST_M_M45PE20:
14615                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14616                         break;
14617                 }
14618         }
14619 }
14620
14621 static void tg3_get_5906_nvram_info(struct tg3 *tp)
14622 {
14623         tp->nvram_jedecnum = JEDEC_ATMEL;
14624         tg3_flag_set(tp, NVRAM_BUFFERED);
14625         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14626 }
14627
14628 static void tg3_get_57780_nvram_info(struct tg3 *tp)
14629 {
14630         u32 nvcfg1;
14631
14632         nvcfg1 = tr32(NVRAM_CFG1);
14633
14634         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14635         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14636         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14637                 tp->nvram_jedecnum = JEDEC_ATMEL;
14638                 tg3_flag_set(tp, NVRAM_BUFFERED);
14639                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14640
14641                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14642                 tw32(NVRAM_CFG1, nvcfg1);
14643                 return;
14644         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14645         case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14646         case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14647         case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14648         case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14649         case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14650         case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14651                 tp->nvram_jedecnum = JEDEC_ATMEL;
14652                 tg3_flag_set(tp, NVRAM_BUFFERED);
14653                 tg3_flag_set(tp, FLASH);
14654
14655                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14656                 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14657                 case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14658                 case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14659                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14660                         break;
14661                 case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14662                 case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14663                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14664                         break;
14665                 case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14666                 case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14667                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14668                         break;
14669                 }
14670                 break;
14671         case FLASH_5752VENDOR_ST_M45PE10:
14672         case FLASH_5752VENDOR_ST_M45PE20:
14673         case FLASH_5752VENDOR_ST_M45PE40:
14674                 tp->nvram_jedecnum = JEDEC_ST;
14675                 tg3_flag_set(tp, NVRAM_BUFFERED);
14676                 tg3_flag_set(tp, FLASH);
14677
14678                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14679                 case FLASH_5752VENDOR_ST_M45PE10:
14680                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14681                         break;
14682                 case FLASH_5752VENDOR_ST_M45PE20:
14683                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14684                         break;
14685                 case FLASH_5752VENDOR_ST_M45PE40:
14686                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14687                         break;
14688                 }
14689                 break;
14690         default:
14691                 tg3_flag_set(tp, NO_NVRAM);
14692                 return;
14693         }
14694
14695         tg3_nvram_get_pagesize(tp, nvcfg1);
14696         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14697                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14698 }
14699
14700
14701 static void tg3_get_5717_nvram_info(struct tg3 *tp)
14702 {
14703         u32 nvcfg1;
14704
14705         nvcfg1 = tr32(NVRAM_CFG1);
14706
14707         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14708         case FLASH_5717VENDOR_ATMEL_EEPROM:
14709         case FLASH_5717VENDOR_MICRO_EEPROM:
14710                 tp->nvram_jedecnum = JEDEC_ATMEL;
14711                 tg3_flag_set(tp, NVRAM_BUFFERED);
14712                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14713
14714                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14715                 tw32(NVRAM_CFG1, nvcfg1);
14716                 return;
14717         case FLASH_5717VENDOR_ATMEL_MDB011D:
14718         case FLASH_5717VENDOR_ATMEL_ADB011B:
14719         case FLASH_5717VENDOR_ATMEL_ADB011D:
14720         case FLASH_5717VENDOR_ATMEL_MDB021D:
14721         case FLASH_5717VENDOR_ATMEL_ADB021B:
14722         case FLASH_5717VENDOR_ATMEL_ADB021D:
14723         case FLASH_5717VENDOR_ATMEL_45USPT:
14724                 tp->nvram_jedecnum = JEDEC_ATMEL;
14725                 tg3_flag_set(tp, NVRAM_BUFFERED);
14726                 tg3_flag_set(tp, FLASH);
14727
14728                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14729                 case FLASH_5717VENDOR_ATMEL_MDB021D:
14730                         /* Detect size with tg3_nvram_get_size() */
14731                         break;
14732                 case FLASH_5717VENDOR_ATMEL_ADB021B:
14733                 case FLASH_5717VENDOR_ATMEL_ADB021D:
14734                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14735                         break;
14736                 default:
14737                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14738                         break;
14739                 }
14740                 break;
14741         case FLASH_5717VENDOR_ST_M_M25PE10:
14742         case FLASH_5717VENDOR_ST_A_M25PE10:
14743         case FLASH_5717VENDOR_ST_M_M45PE10:
14744         case FLASH_5717VENDOR_ST_A_M45PE10:
14745         case FLASH_5717VENDOR_ST_M_M25PE20:
14746         case FLASH_5717VENDOR_ST_A_M25PE20:
14747         case FLASH_5717VENDOR_ST_M_M45PE20:
14748         case FLASH_5717VENDOR_ST_A_M45PE20:
14749         case FLASH_5717VENDOR_ST_25USPT:
14750         case FLASH_5717VENDOR_ST_45USPT:
14751                 tp->nvram_jedecnum = JEDEC_ST;
14752                 tg3_flag_set(tp, NVRAM_BUFFERED);
14753                 tg3_flag_set(tp, FLASH);
14754
14755                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14756                 case FLASH_5717VENDOR_ST_M_M25PE20:
14757                 case FLASH_5717VENDOR_ST_M_M45PE20:
14758                         /* Detect size with tg3_nvram_get_size() */
14759                         break;
14760                 case FLASH_5717VENDOR_ST_A_M25PE20:
14761                 case FLASH_5717VENDOR_ST_A_M45PE20:
14762                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14763                         break;
14764                 default:
14765                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14766                         break;
14767                 }
14768                 break;
14769         default:
14770                 tg3_flag_set(tp, NO_NVRAM);
14771                 return;
14772         }
14773
14774         tg3_nvram_get_pagesize(tp, nvcfg1);
14775         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14776                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14777 }
14778
14779 static void tg3_get_5720_nvram_info(struct tg3 *tp)
14780 {
14781         u32 nvcfg1, nvmpinstrp, nv_status;
14782
14783         nvcfg1 = tr32(NVRAM_CFG1);
14784         nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
14785
14786         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14787                 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) {
14788                         tg3_flag_set(tp, NO_NVRAM);
14789                         return;
14790                 }
14791
14792                 switch (nvmpinstrp) {
14793                 case FLASH_5762_MX25L_100:
14794                 case FLASH_5762_MX25L_200:
14795                 case FLASH_5762_MX25L_400:
14796                 case FLASH_5762_MX25L_800:
14797                 case FLASH_5762_MX25L_160_320:
14798                         tp->nvram_pagesize = 4096;
14799                         tp->nvram_jedecnum = JEDEC_MACRONIX;
14800                         tg3_flag_set(tp, NVRAM_BUFFERED);
14801                         tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14802                         tg3_flag_set(tp, FLASH);
14803                         nv_status = tr32(NVRAM_AUTOSENSE_STATUS);
14804                         tp->nvram_size =
14805                                 (1 << (nv_status >> AUTOSENSE_DEVID &
14806                                                 AUTOSENSE_DEVID_MASK)
14807                                         << AUTOSENSE_SIZE_IN_MB);
14808                         return;
14809
14810                 case FLASH_5762_EEPROM_HD:
14811                         nvmpinstrp = FLASH_5720_EEPROM_HD;
14812                         break;
14813                 case FLASH_5762_EEPROM_LD:
14814                         nvmpinstrp = FLASH_5720_EEPROM_LD;
14815                         break;
14816                 case FLASH_5720VENDOR_M_ST_M45PE20:
14817                         /* This pinstrap supports multiple sizes, so force it
14818                          * to read the actual size from location 0xf0.
14819                          */
14820                         nvmpinstrp = FLASH_5720VENDOR_ST_45USPT;
14821                         break;
14822                 }
14823         }
14824
14825         switch (nvmpinstrp) {
14826         case FLASH_5720_EEPROM_HD:
14827         case FLASH_5720_EEPROM_LD:
14828                 tp->nvram_jedecnum = JEDEC_ATMEL;
14829                 tg3_flag_set(tp, NVRAM_BUFFERED);
14830
14831                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14832                 tw32(NVRAM_CFG1, nvcfg1);
14833                 if (nvmpinstrp == FLASH_5720_EEPROM_HD)
14834                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14835                 else
14836                         tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
14837                 return;
14838         case FLASH_5720VENDOR_M_ATMEL_DB011D:
14839         case FLASH_5720VENDOR_A_ATMEL_DB011B:
14840         case FLASH_5720VENDOR_A_ATMEL_DB011D:
14841         case FLASH_5720VENDOR_M_ATMEL_DB021D:
14842         case FLASH_5720VENDOR_A_ATMEL_DB021B:
14843         case FLASH_5720VENDOR_A_ATMEL_DB021D:
14844         case FLASH_5720VENDOR_M_ATMEL_DB041D:
14845         case FLASH_5720VENDOR_A_ATMEL_DB041B:
14846         case FLASH_5720VENDOR_A_ATMEL_DB041D:
14847         case FLASH_5720VENDOR_M_ATMEL_DB081D:
14848         case FLASH_5720VENDOR_A_ATMEL_DB081D:
14849         case FLASH_5720VENDOR_ATMEL_45USPT:
14850                 tp->nvram_jedecnum = JEDEC_ATMEL;
14851                 tg3_flag_set(tp, NVRAM_BUFFERED);
14852                 tg3_flag_set(tp, FLASH);
14853
14854                 switch (nvmpinstrp) {
14855                 case FLASH_5720VENDOR_M_ATMEL_DB021D:
14856                 case FLASH_5720VENDOR_A_ATMEL_DB021B:
14857                 case FLASH_5720VENDOR_A_ATMEL_DB021D:
14858                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14859                         break;
14860                 case FLASH_5720VENDOR_M_ATMEL_DB041D:
14861                 case FLASH_5720VENDOR_A_ATMEL_DB041B:
14862                 case FLASH_5720VENDOR_A_ATMEL_DB041D:
14863                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14864                         break;
14865                 case FLASH_5720VENDOR_M_ATMEL_DB081D:
14866                 case FLASH_5720VENDOR_A_ATMEL_DB081D:
14867                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14868                         break;
14869                 default:
14870                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14871                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14872                         break;
14873                 }
14874                 break;
14875         case FLASH_5720VENDOR_M_ST_M25PE10:
14876         case FLASH_5720VENDOR_M_ST_M45PE10:
14877         case FLASH_5720VENDOR_A_ST_M25PE10:
14878         case FLASH_5720VENDOR_A_ST_M45PE10:
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         case FLASH_5720VENDOR_M_ST_M25PE40:
14884         case FLASH_5720VENDOR_M_ST_M45PE40:
14885         case FLASH_5720VENDOR_A_ST_M25PE40:
14886         case FLASH_5720VENDOR_A_ST_M45PE40:
14887         case FLASH_5720VENDOR_M_ST_M25PE80:
14888         case FLASH_5720VENDOR_M_ST_M45PE80:
14889         case FLASH_5720VENDOR_A_ST_M25PE80:
14890         case FLASH_5720VENDOR_A_ST_M45PE80:
14891         case FLASH_5720VENDOR_ST_25USPT:
14892         case FLASH_5720VENDOR_ST_45USPT:
14893                 tp->nvram_jedecnum = JEDEC_ST;
14894                 tg3_flag_set(tp, NVRAM_BUFFERED);
14895                 tg3_flag_set(tp, FLASH);
14896
14897                 switch (nvmpinstrp) {
14898                 case FLASH_5720VENDOR_M_ST_M25PE20:
14899                 case FLASH_5720VENDOR_M_ST_M45PE20:
14900                 case FLASH_5720VENDOR_A_ST_M25PE20:
14901                 case FLASH_5720VENDOR_A_ST_M45PE20:
14902                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14903                         break;
14904                 case FLASH_5720VENDOR_M_ST_M25PE40:
14905                 case FLASH_5720VENDOR_M_ST_M45PE40:
14906                 case FLASH_5720VENDOR_A_ST_M25PE40:
14907                 case FLASH_5720VENDOR_A_ST_M45PE40:
14908                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14909                         break;
14910                 case FLASH_5720VENDOR_M_ST_M25PE80:
14911                 case FLASH_5720VENDOR_M_ST_M45PE80:
14912                 case FLASH_5720VENDOR_A_ST_M25PE80:
14913                 case FLASH_5720VENDOR_A_ST_M45PE80:
14914                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14915                         break;
14916                 default:
14917                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14918                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14919                         break;
14920                 }
14921                 break;
14922         default:
14923                 tg3_flag_set(tp, NO_NVRAM);
14924                 return;
14925         }
14926
14927         tg3_nvram_get_pagesize(tp, nvcfg1);
14928         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14929                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14930
14931         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14932                 u32 val;
14933
14934                 if (tg3_nvram_read(tp, 0, &val))
14935                         return;
14936
14937                 if (val != TG3_EEPROM_MAGIC &&
14938                     (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW)
14939                         tg3_flag_set(tp, NO_NVRAM);
14940         }
14941 }
14942
14943 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
14944 static void tg3_nvram_init(struct tg3 *tp)
14945 {
14946         if (tg3_flag(tp, IS_SSB_CORE)) {
14947                 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
14948                 tg3_flag_clear(tp, NVRAM);
14949                 tg3_flag_clear(tp, NVRAM_BUFFERED);
14950                 tg3_flag_set(tp, NO_NVRAM);
14951                 return;
14952         }
14953
14954         tw32_f(GRC_EEPROM_ADDR,
14955              (EEPROM_ADDR_FSM_RESET |
14956               (EEPROM_DEFAULT_CLOCK_PERIOD <<
14957                EEPROM_ADDR_CLKPERD_SHIFT)));
14958
14959         msleep(1);
14960
14961         /* Enable seeprom accesses. */
14962         tw32_f(GRC_LOCAL_CTRL,
14963              tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
14964         udelay(100);
14965
14966         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
14967             tg3_asic_rev(tp) != ASIC_REV_5701) {
14968                 tg3_flag_set(tp, NVRAM);
14969
14970                 if (tg3_nvram_lock(tp)) {
14971                         netdev_warn(tp->dev,
14972                                     "Cannot get nvram lock, %s failed\n",
14973                                     __func__);
14974                         return;
14975                 }
14976                 tg3_enable_nvram_access(tp);
14977
14978                 tp->nvram_size = 0;
14979
14980                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
14981                         tg3_get_5752_nvram_info(tp);
14982                 else if (tg3_asic_rev(tp) == ASIC_REV_5755)
14983                         tg3_get_5755_nvram_info(tp);
14984                 else if (tg3_asic_rev(tp) == ASIC_REV_5787 ||
14985                          tg3_asic_rev(tp) == ASIC_REV_5784 ||
14986                          tg3_asic_rev(tp) == ASIC_REV_5785)
14987                         tg3_get_5787_nvram_info(tp);
14988                 else if (tg3_asic_rev(tp) == ASIC_REV_5761)
14989                         tg3_get_5761_nvram_info(tp);
14990                 else if (tg3_asic_rev(tp) == ASIC_REV_5906)
14991                         tg3_get_5906_nvram_info(tp);
14992                 else if (tg3_asic_rev(tp) == ASIC_REV_57780 ||
14993                          tg3_flag(tp, 57765_CLASS))
14994                         tg3_get_57780_nvram_info(tp);
14995                 else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
14996                          tg3_asic_rev(tp) == ASIC_REV_5719)
14997                         tg3_get_5717_nvram_info(tp);
14998                 else if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
14999                          tg3_asic_rev(tp) == ASIC_REV_5762)
15000                         tg3_get_5720_nvram_info(tp);
15001                 else
15002                         tg3_get_nvram_info(tp);
15003
15004                 if (tp->nvram_size == 0)
15005                         tg3_get_nvram_size(tp);
15006
15007                 tg3_disable_nvram_access(tp);
15008                 tg3_nvram_unlock(tp);
15009
15010         } else {
15011                 tg3_flag_clear(tp, NVRAM);
15012                 tg3_flag_clear(tp, NVRAM_BUFFERED);
15013
15014                 tg3_get_eeprom_size(tp);
15015         }
15016 }
15017
15018 struct subsys_tbl_ent {
15019         u16 subsys_vendor, subsys_devid;
15020         u32 phy_id;
15021 };
15022
15023 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
15024         /* Broadcom boards. */
15025         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15026           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
15027         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15028           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
15029         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15030           TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
15031         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15032           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
15033         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15034           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
15035         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15036           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
15037         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15038           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
15039         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15040           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
15041         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15042           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
15043         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15044           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
15045         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15046           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
15047
15048         /* 3com boards. */
15049         { TG3PCI_SUBVENDOR_ID_3COM,
15050           TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
15051         { TG3PCI_SUBVENDOR_ID_3COM,
15052           TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
15053         { TG3PCI_SUBVENDOR_ID_3COM,
15054           TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
15055         { TG3PCI_SUBVENDOR_ID_3COM,
15056           TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
15057         { TG3PCI_SUBVENDOR_ID_3COM,
15058           TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
15059
15060         /* DELL boards. */
15061         { TG3PCI_SUBVENDOR_ID_DELL,
15062           TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
15063         { TG3PCI_SUBVENDOR_ID_DELL,
15064           TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
15065         { TG3PCI_SUBVENDOR_ID_DELL,
15066           TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
15067         { TG3PCI_SUBVENDOR_ID_DELL,
15068           TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
15069
15070         /* Compaq boards. */
15071         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15072           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
15073         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15074           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
15075         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15076           TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
15077         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15078           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
15079         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15080           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
15081
15082         /* IBM boards. */
15083         { TG3PCI_SUBVENDOR_ID_IBM,
15084           TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
15085 };
15086
15087 static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
15088 {
15089         int i;
15090
15091         for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
15092                 if ((subsys_id_to_phy_id[i].subsys_vendor ==
15093                      tp->pdev->subsystem_vendor) &&
15094                     (subsys_id_to_phy_id[i].subsys_devid ==
15095                      tp->pdev->subsystem_device))
15096                         return &subsys_id_to_phy_id[i];
15097         }
15098         return NULL;
15099 }
15100
15101 static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
15102 {
15103         u32 val;
15104
15105         tp->phy_id = TG3_PHY_ID_INVALID;
15106         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15107
15108         /* Assume an onboard device and WOL capable by default.  */
15109         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15110         tg3_flag_set(tp, WOL_CAP);
15111
15112         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15113                 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
15114                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15115                         tg3_flag_set(tp, IS_NIC);
15116                 }
15117                 val = tr32(VCPU_CFGSHDW);
15118                 if (val & VCPU_CFGSHDW_ASPM_DBNC)
15119                         tg3_flag_set(tp, ASPM_WORKAROUND);
15120                 if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
15121                     (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
15122                         tg3_flag_set(tp, WOL_ENABLE);
15123                         device_set_wakeup_enable(&tp->pdev->dev, true);
15124                 }
15125                 goto done;
15126         }
15127
15128         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
15129         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
15130                 u32 nic_cfg, led_cfg;
15131                 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0;
15132                 u32 nic_phy_id, ver, eeprom_phy_id;
15133                 int eeprom_phy_serdes = 0;
15134
15135                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
15136                 tp->nic_sram_data_cfg = nic_cfg;
15137
15138                 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
15139                 ver >>= NIC_SRAM_DATA_VER_SHIFT;
15140                 if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15141                     tg3_asic_rev(tp) != ASIC_REV_5701 &&
15142                     tg3_asic_rev(tp) != ASIC_REV_5703 &&
15143                     (ver > 0) && (ver < 0x100))
15144                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
15145
15146                 if (tg3_asic_rev(tp) == ASIC_REV_5785)
15147                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
15148
15149                 if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15150                     tg3_asic_rev(tp) == ASIC_REV_5719 ||
15151                     tg3_asic_rev(tp) == ASIC_REV_5720)
15152                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5);
15153
15154                 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
15155                     NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
15156                         eeprom_phy_serdes = 1;
15157
15158                 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
15159                 if (nic_phy_id != 0) {
15160                         u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
15161                         u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
15162
15163                         eeprom_phy_id  = (id1 >> 16) << 10;
15164                         eeprom_phy_id |= (id2 & 0xfc00) << 16;
15165                         eeprom_phy_id |= (id2 & 0x03ff) <<  0;
15166                 } else
15167                         eeprom_phy_id = 0;
15168
15169                 tp->phy_id = eeprom_phy_id;
15170                 if (eeprom_phy_serdes) {
15171                         if (!tg3_flag(tp, 5705_PLUS))
15172                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15173                         else
15174                                 tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
15175                 }
15176
15177                 if (tg3_flag(tp, 5750_PLUS))
15178                         led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
15179                                     SHASTA_EXT_LED_MODE_MASK);
15180                 else
15181                         led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
15182
15183                 switch (led_cfg) {
15184                 default:
15185                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
15186                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15187                         break;
15188
15189                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
15190                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15191                         break;
15192
15193                 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
15194                         tp->led_ctrl = LED_CTRL_MODE_MAC;
15195
15196                         /* Default to PHY_1_MODE if 0 (MAC_MODE) is
15197                          * read on some older 5700/5701 bootcode.
15198                          */
15199                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
15200                             tg3_asic_rev(tp) == ASIC_REV_5701)
15201                                 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15202
15203                         break;
15204
15205                 case SHASTA_EXT_LED_SHARED:
15206                         tp->led_ctrl = LED_CTRL_MODE_SHARED;
15207                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
15208                             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1)
15209                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15210                                                  LED_CTRL_MODE_PHY_2);
15211
15212                         if (tg3_flag(tp, 5717_PLUS) ||
15213                             tg3_asic_rev(tp) == ASIC_REV_5762)
15214                                 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE |
15215                                                 LED_CTRL_BLINK_RATE_MASK;
15216
15217                         break;
15218
15219                 case SHASTA_EXT_LED_MAC:
15220                         tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
15221                         break;
15222
15223                 case SHASTA_EXT_LED_COMBO:
15224                         tp->led_ctrl = LED_CTRL_MODE_COMBO;
15225                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0)
15226                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15227                                                  LED_CTRL_MODE_PHY_2);
15228                         break;
15229
15230                 }
15231
15232                 if ((tg3_asic_rev(tp) == ASIC_REV_5700 ||
15233                      tg3_asic_rev(tp) == ASIC_REV_5701) &&
15234                     tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
15235                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15236
15237                 if (tg3_chip_rev(tp) == CHIPREV_5784_AX)
15238                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15239
15240                 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
15241                         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15242                         if ((tp->pdev->subsystem_vendor ==
15243                              PCI_VENDOR_ID_ARIMA) &&
15244                             (tp->pdev->subsystem_device == 0x205a ||
15245                              tp->pdev->subsystem_device == 0x2063))
15246                                 tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15247                 } else {
15248                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15249                         tg3_flag_set(tp, IS_NIC);
15250                 }
15251
15252                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
15253                         tg3_flag_set(tp, ENABLE_ASF);
15254                         if (tg3_flag(tp, 5750_PLUS))
15255                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
15256                 }
15257
15258                 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
15259                     tg3_flag(tp, 5750_PLUS))
15260                         tg3_flag_set(tp, ENABLE_APE);
15261
15262                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
15263                     !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
15264                         tg3_flag_clear(tp, WOL_CAP);
15265
15266                 if (tg3_flag(tp, WOL_CAP) &&
15267                     (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
15268                         tg3_flag_set(tp, WOL_ENABLE);
15269                         device_set_wakeup_enable(&tp->pdev->dev, true);
15270                 }
15271
15272                 if (cfg2 & (1 << 17))
15273                         tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
15274
15275                 /* serdes signal pre-emphasis in register 0x590 set by */
15276                 /* bootcode if bit 18 is set */
15277                 if (cfg2 & (1 << 18))
15278                         tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
15279
15280                 if ((tg3_flag(tp, 57765_PLUS) ||
15281                      (tg3_asic_rev(tp) == ASIC_REV_5784 &&
15282                       tg3_chip_rev(tp) != CHIPREV_5784_AX)) &&
15283                     (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
15284                         tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
15285
15286                 if (tg3_flag(tp, PCI_EXPRESS)) {
15287                         u32 cfg3;
15288
15289                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
15290                         if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
15291                             !tg3_flag(tp, 57765_PLUS) &&
15292                             (cfg3 & NIC_SRAM_ASPM_DEBOUNCE))
15293                                 tg3_flag_set(tp, ASPM_WORKAROUND);
15294                         if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID)
15295                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
15296                         if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK)
15297                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
15298                 }
15299
15300                 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
15301                         tg3_flag_set(tp, RGMII_INBAND_DISABLE);
15302                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
15303                         tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
15304                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
15305                         tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
15306
15307                 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV)
15308                         tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV;
15309         }
15310 done:
15311         if (tg3_flag(tp, WOL_CAP))
15312                 device_set_wakeup_enable(&tp->pdev->dev,
15313                                          tg3_flag(tp, WOL_ENABLE));
15314         else
15315                 device_set_wakeup_capable(&tp->pdev->dev, false);
15316 }
15317
15318 static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val)
15319 {
15320         int i, err;
15321         u32 val2, off = offset * 8;
15322
15323         err = tg3_nvram_lock(tp);
15324         if (err)
15325                 return err;
15326
15327         tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE);
15328         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN |
15329                         APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START);
15330         tg3_ape_read32(tp, TG3_APE_OTP_CTRL);
15331         udelay(10);
15332
15333         for (i = 0; i < 100; i++) {
15334                 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS);
15335                 if (val2 & APE_OTP_STATUS_CMD_DONE) {
15336                         *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA);
15337                         break;
15338                 }
15339                 udelay(10);
15340         }
15341
15342         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0);
15343
15344         tg3_nvram_unlock(tp);
15345         if (val2 & APE_OTP_STATUS_CMD_DONE)
15346                 return 0;
15347
15348         return -EBUSY;
15349 }
15350
15351 static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
15352 {
15353         int i;
15354         u32 val;
15355
15356         tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
15357         tw32(OTP_CTRL, cmd);
15358
15359         /* Wait for up to 1 ms for command to execute. */
15360         for (i = 0; i < 100; i++) {
15361                 val = tr32(OTP_STATUS);
15362                 if (val & OTP_STATUS_CMD_DONE)
15363                         break;
15364                 udelay(10);
15365         }
15366
15367         return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
15368 }
15369
15370 /* Read the gphy configuration from the OTP region of the chip.  The gphy
15371  * configuration is a 32-bit value that straddles the alignment boundary.
15372  * We do two 32-bit reads and then shift and merge the results.
15373  */
15374 static u32 tg3_read_otp_phycfg(struct tg3 *tp)
15375 {
15376         u32 bhalf_otp, thalf_otp;
15377
15378         tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
15379
15380         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
15381                 return 0;
15382
15383         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
15384
15385         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15386                 return 0;
15387
15388         thalf_otp = tr32(OTP_READ_DATA);
15389
15390         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
15391
15392         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15393                 return 0;
15394
15395         bhalf_otp = tr32(OTP_READ_DATA);
15396
15397         return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
15398 }
15399
15400 static void tg3_phy_init_link_config(struct tg3 *tp)
15401 {
15402         u32 adv = ADVERTISED_Autoneg;
15403
15404         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
15405                 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV))
15406                         adv |= ADVERTISED_1000baseT_Half;
15407                 adv |= ADVERTISED_1000baseT_Full;
15408         }
15409
15410         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15411                 adv |= ADVERTISED_100baseT_Half |
15412                        ADVERTISED_100baseT_Full |
15413                        ADVERTISED_10baseT_Half |
15414                        ADVERTISED_10baseT_Full |
15415                        ADVERTISED_TP;
15416         else
15417                 adv |= ADVERTISED_FIBRE;
15418
15419         tp->link_config.advertising = adv;
15420         tp->link_config.speed = SPEED_UNKNOWN;
15421         tp->link_config.duplex = DUPLEX_UNKNOWN;
15422         tp->link_config.autoneg = AUTONEG_ENABLE;
15423         tp->link_config.active_speed = SPEED_UNKNOWN;
15424         tp->link_config.active_duplex = DUPLEX_UNKNOWN;
15425
15426         tp->old_link = -1;
15427 }
15428
15429 static int tg3_phy_probe(struct tg3 *tp)
15430 {
15431         u32 hw_phy_id_1, hw_phy_id_2;
15432         u32 hw_phy_id, hw_phy_id_masked;
15433         int err;
15434
15435         /* flow control autonegotiation is default behavior */
15436         tg3_flag_set(tp, PAUSE_AUTONEG);
15437         tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
15438
15439         if (tg3_flag(tp, ENABLE_APE)) {
15440                 switch (tp->pci_fn) {
15441                 case 0:
15442                         tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
15443                         break;
15444                 case 1:
15445                         tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
15446                         break;
15447                 case 2:
15448                         tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
15449                         break;
15450                 case 3:
15451                         tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
15452                         break;
15453                 }
15454         }
15455
15456         if (!tg3_flag(tp, ENABLE_ASF) &&
15457             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15458             !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15459                 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
15460                                    TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
15461
15462         if (tg3_flag(tp, USE_PHYLIB))
15463                 return tg3_phy_init(tp);
15464
15465         /* Reading the PHY ID register can conflict with ASF
15466          * firmware access to the PHY hardware.
15467          */
15468         err = 0;
15469         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
15470                 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
15471         } else {
15472                 /* Now read the physical PHY_ID from the chip and verify
15473                  * that it is sane.  If it doesn't look good, we fall back
15474                  * to either the hard-coded table based PHY_ID and failing
15475                  * that the value found in the eeprom area.
15476                  */
15477                 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
15478                 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
15479
15480                 hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
15481                 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
15482                 hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
15483
15484                 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
15485         }
15486
15487         if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
15488                 tp->phy_id = hw_phy_id;
15489                 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
15490                         tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15491                 else
15492                         tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
15493         } else {
15494                 if (tp->phy_id != TG3_PHY_ID_INVALID) {
15495                         /* Do nothing, phy ID already set up in
15496                          * tg3_get_eeprom_hw_cfg().
15497                          */
15498                 } else {
15499                         struct subsys_tbl_ent *p;
15500
15501                         /* No eeprom signature?  Try the hardcoded
15502                          * subsys device table.
15503                          */
15504                         p = tg3_lookup_by_subsys(tp);
15505                         if (p) {
15506                                 tp->phy_id = p->phy_id;
15507                         } else if (!tg3_flag(tp, IS_SSB_CORE)) {
15508                                 /* For now we saw the IDs 0xbc050cd0,
15509                                  * 0xbc050f80 and 0xbc050c30 on devices
15510                                  * connected to an BCM4785 and there are
15511                                  * probably more. Just assume that the phy is
15512                                  * supported when it is connected to a SSB core
15513                                  * for now.
15514                                  */
15515                                 return -ENODEV;
15516                         }
15517
15518                         if (!tp->phy_id ||
15519                             tp->phy_id == TG3_PHY_ID_BCM8002)
15520                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15521                 }
15522         }
15523
15524         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15525             (tg3_asic_rev(tp) == ASIC_REV_5719 ||
15526              tg3_asic_rev(tp) == ASIC_REV_5720 ||
15527              tg3_asic_rev(tp) == ASIC_REV_57766 ||
15528              tg3_asic_rev(tp) == ASIC_REV_5762 ||
15529              (tg3_asic_rev(tp) == ASIC_REV_5717 &&
15530               tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) ||
15531              (tg3_asic_rev(tp) == ASIC_REV_57765 &&
15532               tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) {
15533                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
15534
15535                 tp->eee.supported = SUPPORTED_100baseT_Full |
15536                                     SUPPORTED_1000baseT_Full;
15537                 tp->eee.advertised = ADVERTISED_100baseT_Full |
15538                                      ADVERTISED_1000baseT_Full;
15539                 tp->eee.eee_enabled = 1;
15540                 tp->eee.tx_lpi_enabled = 1;
15541                 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US;
15542         }
15543
15544         tg3_phy_init_link_config(tp);
15545
15546         if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
15547             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15548             !tg3_flag(tp, ENABLE_APE) &&
15549             !tg3_flag(tp, ENABLE_ASF)) {
15550                 u32 bmsr, dummy;
15551
15552                 tg3_readphy(tp, MII_BMSR, &bmsr);
15553                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
15554                     (bmsr & BMSR_LSTATUS))
15555                         goto skip_phy_reset;
15556
15557                 err = tg3_phy_reset(tp);
15558                 if (err)
15559                         return err;
15560
15561                 tg3_phy_set_wirespeed(tp);
15562
15563                 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
15564                         tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
15565                                             tp->link_config.flowctrl);
15566
15567                         tg3_writephy(tp, MII_BMCR,
15568                                      BMCR_ANENABLE | BMCR_ANRESTART);
15569                 }
15570         }
15571
15572 skip_phy_reset:
15573         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
15574                 err = tg3_init_5401phy_dsp(tp);
15575                 if (err)
15576                         return err;
15577
15578                 err = tg3_init_5401phy_dsp(tp);
15579         }
15580
15581         return err;
15582 }
15583
15584 static void tg3_read_vpd(struct tg3 *tp)
15585 {
15586         u8 *vpd_data;
15587         unsigned int len, vpdlen;
15588         int i;
15589
15590         vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
15591         if (!vpd_data)
15592                 goto out_no_vpd;
15593
15594         i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15595                                          PCI_VPD_RO_KEYWORD_MFR_ID, &len);
15596         if (i < 0)
15597                 goto partno;
15598
15599         if (len != 4 || memcmp(vpd_data + i, "1028", 4))
15600                 goto partno;
15601
15602         i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15603                                          PCI_VPD_RO_KEYWORD_VENDOR0, &len);
15604         if (i < 0)
15605                 goto partno;
15606
15607         memset(tp->fw_ver, 0, sizeof(tp->fw_ver));
15608         snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, vpd_data + i);
15609
15610 partno:
15611         i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15612                                          PCI_VPD_RO_KEYWORD_PARTNO, &len);
15613         if (i < 0)
15614                 goto out_not_found;
15615
15616         if (len > TG3_BPN_SIZE)
15617                 goto out_not_found;
15618
15619         memcpy(tp->board_part_number, &vpd_data[i], len);
15620
15621 out_not_found:
15622         kfree(vpd_data);
15623         if (tp->board_part_number[0])
15624                 return;
15625
15626 out_no_vpd:
15627         if (tg3_asic_rev(tp) == ASIC_REV_5717) {
15628                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15629                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
15630                         strcpy(tp->board_part_number, "BCM5717");
15631                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
15632                         strcpy(tp->board_part_number, "BCM5718");
15633                 else
15634                         goto nomatch;
15635         } else if (tg3_asic_rev(tp) == ASIC_REV_57780) {
15636                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
15637                         strcpy(tp->board_part_number, "BCM57780");
15638                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
15639                         strcpy(tp->board_part_number, "BCM57760");
15640                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
15641                         strcpy(tp->board_part_number, "BCM57790");
15642                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
15643                         strcpy(tp->board_part_number, "BCM57788");
15644                 else
15645                         goto nomatch;
15646         } else if (tg3_asic_rev(tp) == ASIC_REV_57765) {
15647                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
15648                         strcpy(tp->board_part_number, "BCM57761");
15649                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
15650                         strcpy(tp->board_part_number, "BCM57765");
15651                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
15652                         strcpy(tp->board_part_number, "BCM57781");
15653                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
15654                         strcpy(tp->board_part_number, "BCM57785");
15655                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
15656                         strcpy(tp->board_part_number, "BCM57791");
15657                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
15658                         strcpy(tp->board_part_number, "BCM57795");
15659                 else
15660                         goto nomatch;
15661         } else if (tg3_asic_rev(tp) == ASIC_REV_57766) {
15662                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
15663                         strcpy(tp->board_part_number, "BCM57762");
15664                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
15665                         strcpy(tp->board_part_number, "BCM57766");
15666                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
15667                         strcpy(tp->board_part_number, "BCM57782");
15668                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15669                         strcpy(tp->board_part_number, "BCM57786");
15670                 else
15671                         goto nomatch;
15672         } else if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15673                 strcpy(tp->board_part_number, "BCM95906");
15674         } else {
15675 nomatch:
15676                 strcpy(tp->board_part_number, "none");
15677         }
15678 }
15679
15680 static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
15681 {
15682         u32 val;
15683
15684         if (tg3_nvram_read(tp, offset, &val) ||
15685             (val & 0xfc000000) != 0x0c000000 ||
15686             tg3_nvram_read(tp, offset + 4, &val) ||
15687             val != 0)
15688                 return 0;
15689
15690         return 1;
15691 }
15692
15693 static void tg3_read_bc_ver(struct tg3 *tp)
15694 {
15695         u32 val, offset, start, ver_offset;
15696         int i, dst_off;
15697         bool newver = false;
15698
15699         if (tg3_nvram_read(tp, 0xc, &offset) ||
15700             tg3_nvram_read(tp, 0x4, &start))
15701                 return;
15702
15703         offset = tg3_nvram_logical_addr(tp, offset);
15704
15705         if (tg3_nvram_read(tp, offset, &val))
15706                 return;
15707
15708         if ((val & 0xfc000000) == 0x0c000000) {
15709                 if (tg3_nvram_read(tp, offset + 4, &val))
15710                         return;
15711
15712                 if (val == 0)
15713                         newver = true;
15714         }
15715
15716         dst_off = strlen(tp->fw_ver);
15717
15718         if (newver) {
15719                 if (TG3_VER_SIZE - dst_off < 16 ||
15720                     tg3_nvram_read(tp, offset + 8, &ver_offset))
15721                         return;
15722
15723                 offset = offset + ver_offset - start;
15724                 for (i = 0; i < 16; i += 4) {
15725                         __be32 v;
15726                         if (tg3_nvram_read_be32(tp, offset + i, &v))
15727                                 return;
15728
15729                         memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
15730                 }
15731         } else {
15732                 u32 major, minor;
15733
15734                 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
15735                         return;
15736
15737                 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
15738                         TG3_NVM_BCVER_MAJSFT;
15739                 minor = ver_offset & TG3_NVM_BCVER_MINMSK;
15740                 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
15741                          "v%d.%02d", major, minor);
15742         }
15743 }
15744
15745 static void tg3_read_hwsb_ver(struct tg3 *tp)
15746 {
15747         u32 val, major, minor;
15748
15749         /* Use native endian representation */
15750         if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
15751                 return;
15752
15753         major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
15754                 TG3_NVM_HWSB_CFG1_MAJSFT;
15755         minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
15756                 TG3_NVM_HWSB_CFG1_MINSFT;
15757
15758         snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
15759 }
15760
15761 static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
15762 {
15763         u32 offset, major, minor, build;
15764
15765         strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
15766
15767         if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
15768                 return;
15769
15770         switch (val & TG3_EEPROM_SB_REVISION_MASK) {
15771         case TG3_EEPROM_SB_REVISION_0:
15772                 offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
15773                 break;
15774         case TG3_EEPROM_SB_REVISION_2:
15775                 offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
15776                 break;
15777         case TG3_EEPROM_SB_REVISION_3:
15778                 offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
15779                 break;
15780         case TG3_EEPROM_SB_REVISION_4:
15781                 offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
15782                 break;
15783         case TG3_EEPROM_SB_REVISION_5:
15784                 offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
15785                 break;
15786         case TG3_EEPROM_SB_REVISION_6:
15787                 offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
15788                 break;
15789         default:
15790                 return;
15791         }
15792
15793         if (tg3_nvram_read(tp, offset, &val))
15794                 return;
15795
15796         build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
15797                 TG3_EEPROM_SB_EDH_BLD_SHFT;
15798         major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
15799                 TG3_EEPROM_SB_EDH_MAJ_SHFT;
15800         minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
15801
15802         if (minor > 99 || build > 26)
15803                 return;
15804
15805         offset = strlen(tp->fw_ver);
15806         snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
15807                  " v%d.%02d", major, minor);
15808
15809         if (build > 0) {
15810                 offset = strlen(tp->fw_ver);
15811                 if (offset < TG3_VER_SIZE - 1)
15812                         tp->fw_ver[offset] = 'a' + build - 1;
15813         }
15814 }
15815
15816 static void tg3_read_mgmtfw_ver(struct tg3 *tp)
15817 {
15818         u32 val, offset, start;
15819         int i, vlen;
15820
15821         for (offset = TG3_NVM_DIR_START;
15822              offset < TG3_NVM_DIR_END;
15823              offset += TG3_NVM_DIRENT_SIZE) {
15824                 if (tg3_nvram_read(tp, offset, &val))
15825                         return;
15826
15827                 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
15828                         break;
15829         }
15830
15831         if (offset == TG3_NVM_DIR_END)
15832                 return;
15833
15834         if (!tg3_flag(tp, 5705_PLUS))
15835                 start = 0x08000000;
15836         else if (tg3_nvram_read(tp, offset - 4, &start))
15837                 return;
15838
15839         if (tg3_nvram_read(tp, offset + 4, &offset) ||
15840             !tg3_fw_img_is_valid(tp, offset) ||
15841             tg3_nvram_read(tp, offset + 8, &val))
15842                 return;
15843
15844         offset += val - start;
15845
15846         vlen = strlen(tp->fw_ver);
15847
15848         tp->fw_ver[vlen++] = ',';
15849         tp->fw_ver[vlen++] = ' ';
15850
15851         for (i = 0; i < 4; i++) {
15852                 __be32 v;
15853                 if (tg3_nvram_read_be32(tp, offset, &v))
15854                         return;
15855
15856                 offset += sizeof(v);
15857
15858                 if (vlen > TG3_VER_SIZE - sizeof(v)) {
15859                         memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
15860                         break;
15861                 }
15862
15863                 memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
15864                 vlen += sizeof(v);
15865         }
15866 }
15867
15868 static void tg3_probe_ncsi(struct tg3 *tp)
15869 {
15870         u32 apedata;
15871
15872         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
15873         if (apedata != APE_SEG_SIG_MAGIC)
15874                 return;
15875
15876         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
15877         if (!(apedata & APE_FW_STATUS_READY))
15878                 return;
15879
15880         if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
15881                 tg3_flag_set(tp, APE_HAS_NCSI);
15882 }
15883
15884 static void tg3_read_dash_ver(struct tg3 *tp)
15885 {
15886         int vlen;
15887         u32 apedata;
15888         char *fwtype;
15889
15890         apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
15891
15892         if (tg3_flag(tp, APE_HAS_NCSI))
15893                 fwtype = "NCSI";
15894         else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725)
15895                 fwtype = "SMASH";
15896         else
15897                 fwtype = "DASH";
15898
15899         vlen = strlen(tp->fw_ver);
15900
15901         snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
15902                  fwtype,
15903                  (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
15904                  (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
15905                  (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
15906                  (apedata & APE_FW_VERSION_BLDMSK));
15907 }
15908
15909 static void tg3_read_otp_ver(struct tg3 *tp)
15910 {
15911         u32 val, val2;
15912
15913         if (tg3_asic_rev(tp) != ASIC_REV_5762)
15914                 return;
15915
15916         if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) &&
15917             !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) &&
15918             TG3_OTP_MAGIC0_VALID(val)) {
15919                 u64 val64 = (u64) val << 32 | val2;
15920                 u32 ver = 0;
15921                 int i, vlen;
15922
15923                 for (i = 0; i < 7; i++) {
15924                         if ((val64 & 0xff) == 0)
15925                                 break;
15926                         ver = val64 & 0xff;
15927                         val64 >>= 8;
15928                 }
15929                 vlen = strlen(tp->fw_ver);
15930                 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver);
15931         }
15932 }
15933
15934 static void tg3_read_fw_ver(struct tg3 *tp)
15935 {
15936         u32 val;
15937         bool vpd_vers = false;
15938
15939         if (tp->fw_ver[0] != 0)
15940                 vpd_vers = true;
15941
15942         if (tg3_flag(tp, NO_NVRAM)) {
15943                 strcat(tp->fw_ver, "sb");
15944                 tg3_read_otp_ver(tp);
15945                 return;
15946         }
15947
15948         if (tg3_nvram_read(tp, 0, &val))
15949                 return;
15950
15951         if (val == TG3_EEPROM_MAGIC)
15952                 tg3_read_bc_ver(tp);
15953         else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
15954                 tg3_read_sb_ver(tp, val);
15955         else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
15956                 tg3_read_hwsb_ver(tp);
15957
15958         if (tg3_flag(tp, ENABLE_ASF)) {
15959                 if (tg3_flag(tp, ENABLE_APE)) {
15960                         tg3_probe_ncsi(tp);
15961                         if (!vpd_vers)
15962                                 tg3_read_dash_ver(tp);
15963                 } else if (!vpd_vers) {
15964                         tg3_read_mgmtfw_ver(tp);
15965                 }
15966         }
15967
15968         tp->fw_ver[TG3_VER_SIZE - 1] = 0;
15969 }
15970
15971 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
15972 {
15973         if (tg3_flag(tp, LRG_PROD_RING_CAP))
15974                 return TG3_RX_RET_MAX_SIZE_5717;
15975         else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
15976                 return TG3_RX_RET_MAX_SIZE_5700;
15977         else
15978                 return TG3_RX_RET_MAX_SIZE_5705;
15979 }
15980
15981 static const struct pci_device_id tg3_write_reorder_chipsets[] = {
15982         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
15983         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
15984         { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
15985         { },
15986 };
15987
15988 static struct pci_dev *tg3_find_peer(struct tg3 *tp)
15989 {
15990         struct pci_dev *peer;
15991         unsigned int func, devnr = tp->pdev->devfn & ~7;
15992
15993         for (func = 0; func < 8; func++) {
15994                 peer = pci_get_slot(tp->pdev->bus, devnr | func);
15995                 if (peer && peer != tp->pdev)
15996                         break;
15997                 pci_dev_put(peer);
15998         }
15999         /* 5704 can be configured in single-port mode, set peer to
16000          * tp->pdev in that case.
16001          */
16002         if (!peer) {
16003                 peer = tp->pdev;
16004                 return peer;
16005         }
16006
16007         /*
16008          * We don't need to keep the refcount elevated; there's no way
16009          * to remove one half of this device without removing the other
16010          */
16011         pci_dev_put(peer);
16012
16013         return peer;
16014 }
16015
16016 static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
16017 {
16018         tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
16019         if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) {
16020                 u32 reg;
16021
16022                 /* All devices that use the alternate
16023                  * ASIC REV location have a CPMU.
16024                  */
16025                 tg3_flag_set(tp, CPMU_PRESENT);
16026
16027                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16028                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
16029                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16030                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16031                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
16032                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
16033                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
16034                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
16035                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
16036                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
16037                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787)
16038                         reg = TG3PCI_GEN2_PRODID_ASICREV;
16039                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
16040                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
16041                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
16042                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
16043                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
16044                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
16045                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
16046                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
16047                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
16048                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
16049                         reg = TG3PCI_GEN15_PRODID_ASICREV;
16050                 else
16051                         reg = TG3PCI_PRODID_ASICREV;
16052
16053                 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
16054         }
16055
16056         /* Wrong chip ID in 5752 A0. This code can be removed later
16057          * as A0 is not in production.
16058          */
16059         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW)
16060                 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
16061
16062         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0)
16063                 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
16064
16065         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16066             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16067             tg3_asic_rev(tp) == ASIC_REV_5720)
16068                 tg3_flag_set(tp, 5717_PLUS);
16069
16070         if (tg3_asic_rev(tp) == ASIC_REV_57765 ||
16071             tg3_asic_rev(tp) == ASIC_REV_57766)
16072                 tg3_flag_set(tp, 57765_CLASS);
16073
16074         if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) ||
16075              tg3_asic_rev(tp) == ASIC_REV_5762)
16076                 tg3_flag_set(tp, 57765_PLUS);
16077
16078         /* Intentionally exclude ASIC_REV_5906 */
16079         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16080             tg3_asic_rev(tp) == ASIC_REV_5787 ||
16081             tg3_asic_rev(tp) == ASIC_REV_5784 ||
16082             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16083             tg3_asic_rev(tp) == ASIC_REV_5785 ||
16084             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16085             tg3_flag(tp, 57765_PLUS))
16086                 tg3_flag_set(tp, 5755_PLUS);
16087
16088         if (tg3_asic_rev(tp) == ASIC_REV_5780 ||
16089             tg3_asic_rev(tp) == ASIC_REV_5714)
16090                 tg3_flag_set(tp, 5780_CLASS);
16091
16092         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16093             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16094             tg3_asic_rev(tp) == ASIC_REV_5906 ||
16095             tg3_flag(tp, 5755_PLUS) ||
16096             tg3_flag(tp, 5780_CLASS))
16097                 tg3_flag_set(tp, 5750_PLUS);
16098
16099         if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
16100             tg3_flag(tp, 5750_PLUS))
16101                 tg3_flag_set(tp, 5705_PLUS);
16102 }
16103
16104 static bool tg3_10_100_only_device(struct tg3 *tp,
16105                                    const struct pci_device_id *ent)
16106 {
16107         u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
16108
16109         if ((tg3_asic_rev(tp) == ASIC_REV_5703 &&
16110              (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
16111             (tp->phy_flags & TG3_PHYFLG_IS_FET))
16112                 return true;
16113
16114         if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
16115                 if (tg3_asic_rev(tp) == ASIC_REV_5705) {
16116                         if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
16117                                 return true;
16118                 } else {
16119                         return true;
16120                 }
16121         }
16122
16123         return false;
16124 }
16125
16126 static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
16127 {
16128         u32 misc_ctrl_reg;
16129         u32 pci_state_reg, grc_misc_cfg;
16130         u32 val;
16131         u16 pci_cmd;
16132         int err;
16133
16134         /* Force memory write invalidate off.  If we leave it on,
16135          * then on 5700_BX chips we have to enable a workaround.
16136          * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
16137          * to match the cacheline size.  The Broadcom driver have this
16138          * workaround but turns MWI off all the times so never uses
16139          * it.  This seems to suggest that the workaround is insufficient.
16140          */
16141         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16142         pci_cmd &= ~PCI_COMMAND_INVALIDATE;
16143         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16144
16145         /* Important! -- Make sure register accesses are byteswapped
16146          * correctly.  Also, for those chips that require it, make
16147          * sure that indirect register accesses are enabled before
16148          * the first operation.
16149          */
16150         pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16151                               &misc_ctrl_reg);
16152         tp->misc_host_ctrl |= (misc_ctrl_reg &
16153                                MISC_HOST_CTRL_CHIPREV);
16154         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16155                                tp->misc_host_ctrl);
16156
16157         tg3_detect_asic_rev(tp, misc_ctrl_reg);
16158
16159         /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
16160          * we need to disable memory and use config. cycles
16161          * only to access all registers. The 5702/03 chips
16162          * can mistakenly decode the special cycles from the
16163          * ICH chipsets as memory write cycles, causing corruption
16164          * of register and memory space. Only certain ICH bridges
16165          * will drive special cycles with non-zero data during the
16166          * address phase which can fall within the 5703's address
16167          * range. This is not an ICH bug as the PCI spec allows
16168          * non-zero address during special cycles. However, only
16169          * these ICH bridges are known to drive non-zero addresses
16170          * during special cycles.
16171          *
16172          * Since special cycles do not cross PCI bridges, we only
16173          * enable this workaround if the 5703 is on the secondary
16174          * bus of these ICH bridges.
16175          */
16176         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) ||
16177             (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) {
16178                 static struct tg3_dev_id {
16179                         u32     vendor;
16180                         u32     device;
16181                         u32     rev;
16182                 } ich_chipsets[] = {
16183                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
16184                           PCI_ANY_ID },
16185                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
16186                           PCI_ANY_ID },
16187                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
16188                           0xa },
16189                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
16190                           PCI_ANY_ID },
16191                         { },
16192                 };
16193                 struct tg3_dev_id *pci_id = &ich_chipsets[0];
16194                 struct pci_dev *bridge = NULL;
16195
16196                 while (pci_id->vendor != 0) {
16197                         bridge = pci_get_device(pci_id->vendor, pci_id->device,
16198                                                 bridge);
16199                         if (!bridge) {
16200                                 pci_id++;
16201                                 continue;
16202                         }
16203                         if (pci_id->rev != PCI_ANY_ID) {
16204                                 if (bridge->revision > pci_id->rev)
16205                                         continue;
16206                         }
16207                         if (bridge->subordinate &&
16208                             (bridge->subordinate->number ==
16209                              tp->pdev->bus->number)) {
16210                                 tg3_flag_set(tp, ICH_WORKAROUND);
16211                                 pci_dev_put(bridge);
16212                                 break;
16213                         }
16214                 }
16215         }
16216
16217         if (tg3_asic_rev(tp) == ASIC_REV_5701) {
16218                 static struct tg3_dev_id {
16219                         u32     vendor;
16220                         u32     device;
16221                 } bridge_chipsets[] = {
16222                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
16223                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
16224                         { },
16225                 };
16226                 struct tg3_dev_id *pci_id = &bridge_chipsets[0];
16227                 struct pci_dev *bridge = NULL;
16228
16229                 while (pci_id->vendor != 0) {
16230                         bridge = pci_get_device(pci_id->vendor,
16231                                                 pci_id->device,
16232                                                 bridge);
16233                         if (!bridge) {
16234                                 pci_id++;
16235                                 continue;
16236                         }
16237                         if (bridge->subordinate &&
16238                             (bridge->subordinate->number <=
16239                              tp->pdev->bus->number) &&
16240                             (bridge->subordinate->busn_res.end >=
16241                              tp->pdev->bus->number)) {
16242                                 tg3_flag_set(tp, 5701_DMA_BUG);
16243                                 pci_dev_put(bridge);
16244                                 break;
16245                         }
16246                 }
16247         }
16248
16249         /* The EPB bridge inside 5714, 5715, and 5780 cannot support
16250          * DMA addresses > 40-bit. This bridge may have other additional
16251          * 57xx devices behind it in some 4-port NIC designs for example.
16252          * Any tg3 device found behind the bridge will also need the 40-bit
16253          * DMA workaround.
16254          */
16255         if (tg3_flag(tp, 5780_CLASS)) {
16256                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16257                 tp->msi_cap = tp->pdev->msi_cap;
16258         } else {
16259                 struct pci_dev *bridge = NULL;
16260
16261                 do {
16262                         bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
16263                                                 PCI_DEVICE_ID_SERVERWORKS_EPB,
16264                                                 bridge);
16265                         if (bridge && bridge->subordinate &&
16266                             (bridge->subordinate->number <=
16267                              tp->pdev->bus->number) &&
16268                             (bridge->subordinate->busn_res.end >=
16269                              tp->pdev->bus->number)) {
16270                                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16271                                 pci_dev_put(bridge);
16272                                 break;
16273                         }
16274                 } while (bridge);
16275         }
16276
16277         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16278             tg3_asic_rev(tp) == ASIC_REV_5714)
16279                 tp->pdev_peer = tg3_find_peer(tp);
16280
16281         /* Determine TSO capabilities */
16282         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0)
16283                 ; /* Do nothing. HW bug. */
16284         else if (tg3_flag(tp, 57765_PLUS))
16285                 tg3_flag_set(tp, HW_TSO_3);
16286         else if (tg3_flag(tp, 5755_PLUS) ||
16287                  tg3_asic_rev(tp) == ASIC_REV_5906)
16288                 tg3_flag_set(tp, HW_TSO_2);
16289         else if (tg3_flag(tp, 5750_PLUS)) {
16290                 tg3_flag_set(tp, HW_TSO_1);
16291                 tg3_flag_set(tp, TSO_BUG);
16292                 if (tg3_asic_rev(tp) == ASIC_REV_5750 &&
16293                     tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2)
16294                         tg3_flag_clear(tp, TSO_BUG);
16295         } else if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16296                    tg3_asic_rev(tp) != ASIC_REV_5701 &&
16297                    tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
16298                 tg3_flag_set(tp, FW_TSO);
16299                 tg3_flag_set(tp, TSO_BUG);
16300                 if (tg3_asic_rev(tp) == ASIC_REV_5705)
16301                         tp->fw_needed = FIRMWARE_TG3TSO5;
16302                 else
16303                         tp->fw_needed = FIRMWARE_TG3TSO;
16304         }
16305
16306         /* Selectively allow TSO based on operating conditions */
16307         if (tg3_flag(tp, HW_TSO_1) ||
16308             tg3_flag(tp, HW_TSO_2) ||
16309             tg3_flag(tp, HW_TSO_3) ||
16310             tg3_flag(tp, FW_TSO)) {
16311                 /* For firmware TSO, assume ASF is disabled.
16312                  * We'll disable TSO later if we discover ASF
16313                  * is enabled in tg3_get_eeprom_hw_cfg().
16314                  */
16315                 tg3_flag_set(tp, TSO_CAPABLE);
16316         } else {
16317                 tg3_flag_clear(tp, TSO_CAPABLE);
16318                 tg3_flag_clear(tp, TSO_BUG);
16319                 tp->fw_needed = NULL;
16320         }
16321
16322         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0)
16323                 tp->fw_needed = FIRMWARE_TG3;
16324
16325         if (tg3_asic_rev(tp) == ASIC_REV_57766)
16326                 tp->fw_needed = FIRMWARE_TG357766;
16327
16328         tp->irq_max = 1;
16329
16330         if (tg3_flag(tp, 5750_PLUS)) {
16331                 tg3_flag_set(tp, SUPPORT_MSI);
16332                 if (tg3_chip_rev(tp) == CHIPREV_5750_AX ||
16333                     tg3_chip_rev(tp) == CHIPREV_5750_BX ||
16334                     (tg3_asic_rev(tp) == ASIC_REV_5714 &&
16335                      tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 &&
16336                      tp->pdev_peer == tp->pdev))
16337                         tg3_flag_clear(tp, SUPPORT_MSI);
16338
16339                 if (tg3_flag(tp, 5755_PLUS) ||
16340                     tg3_asic_rev(tp) == ASIC_REV_5906) {
16341                         tg3_flag_set(tp, 1SHOT_MSI);
16342                 }
16343
16344                 if (tg3_flag(tp, 57765_PLUS)) {
16345                         tg3_flag_set(tp, SUPPORT_MSIX);
16346                         tp->irq_max = TG3_IRQ_MAX_VECS;
16347                 }
16348         }
16349
16350         tp->txq_max = 1;
16351         tp->rxq_max = 1;
16352         if (tp->irq_max > 1) {
16353                 tp->rxq_max = TG3_RSS_MAX_NUM_QS;
16354                 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
16355
16356                 if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
16357                     tg3_asic_rev(tp) == ASIC_REV_5720)
16358                         tp->txq_max = tp->irq_max - 1;
16359         }
16360
16361         if (tg3_flag(tp, 5755_PLUS) ||
16362             tg3_asic_rev(tp) == ASIC_REV_5906)
16363                 tg3_flag_set(tp, SHORT_DMA_BUG);
16364
16365         if (tg3_asic_rev(tp) == ASIC_REV_5719)
16366                 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
16367
16368         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16369             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16370             tg3_asic_rev(tp) == ASIC_REV_5720 ||
16371             tg3_asic_rev(tp) == ASIC_REV_5762)
16372                 tg3_flag_set(tp, LRG_PROD_RING_CAP);
16373
16374         if (tg3_flag(tp, 57765_PLUS) &&
16375             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0)
16376                 tg3_flag_set(tp, USE_JUMBO_BDFLAG);
16377
16378         if (!tg3_flag(tp, 5705_PLUS) ||
16379             tg3_flag(tp, 5780_CLASS) ||
16380             tg3_flag(tp, USE_JUMBO_BDFLAG))
16381                 tg3_flag_set(tp, JUMBO_CAPABLE);
16382
16383         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16384                               &pci_state_reg);
16385
16386         if (pci_is_pcie(tp->pdev)) {
16387                 u16 lnkctl;
16388
16389                 tg3_flag_set(tp, PCI_EXPRESS);
16390
16391                 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
16392                 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
16393                         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16394                                 tg3_flag_clear(tp, HW_TSO_2);
16395                                 tg3_flag_clear(tp, TSO_CAPABLE);
16396                         }
16397                         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
16398                             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16399                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 ||
16400                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1)
16401                                 tg3_flag_set(tp, CLKREQ_BUG);
16402                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) {
16403                         tg3_flag_set(tp, L1PLLPD_EN);
16404                 }
16405         } else if (tg3_asic_rev(tp) == ASIC_REV_5785) {
16406                 /* BCM5785 devices are effectively PCIe devices, and should
16407                  * follow PCIe codepaths, but do not have a PCIe capabilities
16408                  * section.
16409                  */
16410                 tg3_flag_set(tp, PCI_EXPRESS);
16411         } else if (!tg3_flag(tp, 5705_PLUS) ||
16412                    tg3_flag(tp, 5780_CLASS)) {
16413                 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
16414                 if (!tp->pcix_cap) {
16415                         dev_err(&tp->pdev->dev,
16416                                 "Cannot find PCI-X capability, aborting\n");
16417                         return -EIO;
16418                 }
16419
16420                 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
16421                         tg3_flag_set(tp, PCIX_MODE);
16422         }
16423
16424         /* If we have an AMD 762 or VIA K8T800 chipset, write
16425          * reordering to the mailbox registers done by the host
16426          * controller can cause major troubles.  We read back from
16427          * every mailbox register write to force the writes to be
16428          * posted to the chip in order.
16429          */
16430         if (pci_dev_present(tg3_write_reorder_chipsets) &&
16431             !tg3_flag(tp, PCI_EXPRESS))
16432                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
16433
16434         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
16435                              &tp->pci_cacheline_sz);
16436         pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16437                              &tp->pci_lat_timer);
16438         if (tg3_asic_rev(tp) == ASIC_REV_5703 &&
16439             tp->pci_lat_timer < 64) {
16440                 tp->pci_lat_timer = 64;
16441                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16442                                       tp->pci_lat_timer);
16443         }
16444
16445         /* Important! -- It is critical that the PCI-X hw workaround
16446          * situation is decided before the first MMIO register access.
16447          */
16448         if (tg3_chip_rev(tp) == CHIPREV_5700_BX) {
16449                 /* 5700 BX chips need to have their TX producer index
16450                  * mailboxes written twice to workaround a bug.
16451                  */
16452                 tg3_flag_set(tp, TXD_MBOX_HWBUG);
16453
16454                 /* If we are in PCI-X mode, enable register write workaround.
16455                  *
16456                  * The workaround is to use indirect register accesses
16457                  * for all chip writes not to mailbox registers.
16458                  */
16459                 if (tg3_flag(tp, PCIX_MODE)) {
16460                         u32 pm_reg;
16461
16462                         tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16463
16464                         /* The chip can have it's power management PCI config
16465                          * space registers clobbered due to this bug.
16466                          * So explicitly force the chip into D0 here.
16467                          */
16468                         pci_read_config_dword(tp->pdev,
16469                                               tp->pdev->pm_cap + PCI_PM_CTRL,
16470                                               &pm_reg);
16471                         pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
16472                         pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
16473                         pci_write_config_dword(tp->pdev,
16474                                                tp->pdev->pm_cap + PCI_PM_CTRL,
16475                                                pm_reg);
16476
16477                         /* Also, force SERR#/PERR# in PCI command. */
16478                         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16479                         pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
16480                         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16481                 }
16482         }
16483
16484         if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
16485                 tg3_flag_set(tp, PCI_HIGH_SPEED);
16486         if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
16487                 tg3_flag_set(tp, PCI_32BIT);
16488
16489         /* Chip-specific fixup from Broadcom driver */
16490         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) &&
16491             (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
16492                 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
16493                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
16494         }
16495
16496         /* Default fast path register access methods */
16497         tp->read32 = tg3_read32;
16498         tp->write32 = tg3_write32;
16499         tp->read32_mbox = tg3_read32;
16500         tp->write32_mbox = tg3_write32;
16501         tp->write32_tx_mbox = tg3_write32;
16502         tp->write32_rx_mbox = tg3_write32;
16503
16504         /* Various workaround register access methods */
16505         if (tg3_flag(tp, PCIX_TARGET_HWBUG))
16506                 tp->write32 = tg3_write_indirect_reg32;
16507         else if (tg3_asic_rev(tp) == ASIC_REV_5701 ||
16508                  (tg3_flag(tp, PCI_EXPRESS) &&
16509                   tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) {
16510                 /*
16511                  * Back to back register writes can cause problems on these
16512                  * chips, the workaround is to read back all reg writes
16513                  * except those to mailbox regs.
16514                  *
16515                  * See tg3_write_indirect_reg32().
16516                  */
16517                 tp->write32 = tg3_write_flush_reg32;
16518         }
16519
16520         if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
16521                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
16522                 if (tg3_flag(tp, MBOX_WRITE_REORDER))
16523                         tp->write32_rx_mbox = tg3_write_flush_reg32;
16524         }
16525
16526         if (tg3_flag(tp, ICH_WORKAROUND)) {
16527                 tp->read32 = tg3_read_indirect_reg32;
16528                 tp->write32 = tg3_write_indirect_reg32;
16529                 tp->read32_mbox = tg3_read_indirect_mbox;
16530                 tp->write32_mbox = tg3_write_indirect_mbox;
16531                 tp->write32_tx_mbox = tg3_write_indirect_mbox;
16532                 tp->write32_rx_mbox = tg3_write_indirect_mbox;
16533
16534                 iounmap(tp->regs);
16535                 tp->regs = NULL;
16536
16537                 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16538                 pci_cmd &= ~PCI_COMMAND_MEMORY;
16539                 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16540         }
16541         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16542                 tp->read32_mbox = tg3_read32_mbox_5906;
16543                 tp->write32_mbox = tg3_write32_mbox_5906;
16544                 tp->write32_tx_mbox = tg3_write32_mbox_5906;
16545                 tp->write32_rx_mbox = tg3_write32_mbox_5906;
16546         }
16547
16548         if (tp->write32 == tg3_write_indirect_reg32 ||
16549             (tg3_flag(tp, PCIX_MODE) &&
16550              (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16551               tg3_asic_rev(tp) == ASIC_REV_5701)))
16552                 tg3_flag_set(tp, SRAM_USE_CONFIG);
16553
16554         /* The memory arbiter has to be enabled in order for SRAM accesses
16555          * to succeed.  Normally on powerup the tg3 chip firmware will make
16556          * sure it is enabled, but other entities such as system netboot
16557          * code might disable it.
16558          */
16559         val = tr32(MEMARB_MODE);
16560         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
16561
16562         tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
16563         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16564             tg3_flag(tp, 5780_CLASS)) {
16565                 if (tg3_flag(tp, PCIX_MODE)) {
16566                         pci_read_config_dword(tp->pdev,
16567                                               tp->pcix_cap + PCI_X_STATUS,
16568                                               &val);
16569                         tp->pci_fn = val & 0x7;
16570                 }
16571         } else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16572                    tg3_asic_rev(tp) == ASIC_REV_5719 ||
16573                    tg3_asic_rev(tp) == ASIC_REV_5720) {
16574                 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
16575                 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG)
16576                         val = tr32(TG3_CPMU_STATUS);
16577
16578                 if (tg3_asic_rev(tp) == ASIC_REV_5717)
16579                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0;
16580                 else
16581                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
16582                                      TG3_CPMU_STATUS_FSHFT_5719;
16583         }
16584
16585         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
16586                 tp->write32_tx_mbox = tg3_write_flush_reg32;
16587                 tp->write32_rx_mbox = tg3_write_flush_reg32;
16588         }
16589
16590         /* Get eeprom hw config before calling tg3_set_power_state().
16591          * In particular, the TG3_FLAG_IS_NIC flag must be
16592          * determined before calling tg3_set_power_state() so that
16593          * we know whether or not to switch out of Vaux power.
16594          * When the flag is set, it means that GPIO1 is used for eeprom
16595          * write protect and also implies that it is a LOM where GPIOs
16596          * are not used to switch power.
16597          */
16598         tg3_get_eeprom_hw_cfg(tp);
16599
16600         if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) {
16601                 tg3_flag_clear(tp, TSO_CAPABLE);
16602                 tg3_flag_clear(tp, TSO_BUG);
16603                 tp->fw_needed = NULL;
16604         }
16605
16606         if (tg3_flag(tp, ENABLE_APE)) {
16607                 /* Allow reads and writes to the
16608                  * APE register and memory space.
16609                  */
16610                 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
16611                                  PCISTATE_ALLOW_APE_SHMEM_WR |
16612                                  PCISTATE_ALLOW_APE_PSPACE_WR;
16613                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
16614                                        pci_state_reg);
16615
16616                 tg3_ape_lock_init(tp);
16617                 tp->ape_hb_interval =
16618                         msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC);
16619         }
16620
16621         /* Set up tp->grc_local_ctrl before calling
16622          * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
16623          * will bring 5700's external PHY out of reset.
16624          * It is also used as eeprom write protect on LOMs.
16625          */
16626         tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
16627         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16628             tg3_flag(tp, EEPROM_WRITE_PROT))
16629                 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
16630                                        GRC_LCLCTRL_GPIO_OUTPUT1);
16631         /* Unused GPIO3 must be driven as output on 5752 because there
16632          * are no pull-up resistors on unused GPIO pins.
16633          */
16634         else if (tg3_asic_rev(tp) == ASIC_REV_5752)
16635                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
16636
16637         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16638             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16639             tg3_flag(tp, 57765_CLASS))
16640                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16641
16642         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16643             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
16644                 /* Turn off the debug UART. */
16645                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16646                 if (tg3_flag(tp, IS_NIC))
16647                         /* Keep VMain power. */
16648                         tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
16649                                               GRC_LCLCTRL_GPIO_OUTPUT0;
16650         }
16651
16652         if (tg3_asic_rev(tp) == ASIC_REV_5762)
16653                 tp->grc_local_ctrl |=
16654                         tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL;
16655
16656         /* Switch out of Vaux if it is a NIC */
16657         tg3_pwrsrc_switch_to_vmain(tp);
16658
16659         /* Derive initial jumbo mode from MTU assigned in
16660          * ether_setup() via the alloc_etherdev() call
16661          */
16662         if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
16663                 tg3_flag_set(tp, JUMBO_RING_ENABLE);
16664
16665         /* Determine WakeOnLan speed to use. */
16666         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16667             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16668             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16669             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) {
16670                 tg3_flag_clear(tp, WOL_SPEED_100MB);
16671         } else {
16672                 tg3_flag_set(tp, WOL_SPEED_100MB);
16673         }
16674
16675         if (tg3_asic_rev(tp) == ASIC_REV_5906)
16676                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
16677
16678         /* A few boards don't want Ethernet@WireSpeed phy feature */
16679         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16680             (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16681              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) &&
16682              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) ||
16683             (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
16684             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
16685                 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
16686
16687         if (tg3_chip_rev(tp) == CHIPREV_5703_AX ||
16688             tg3_chip_rev(tp) == CHIPREV_5704_AX)
16689                 tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
16690         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0)
16691                 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
16692
16693         if (tg3_flag(tp, 5705_PLUS) &&
16694             !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
16695             tg3_asic_rev(tp) != ASIC_REV_5785 &&
16696             tg3_asic_rev(tp) != ASIC_REV_57780 &&
16697             !tg3_flag(tp, 57765_PLUS)) {
16698                 if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16699                     tg3_asic_rev(tp) == ASIC_REV_5787 ||
16700                     tg3_asic_rev(tp) == ASIC_REV_5784 ||
16701                     tg3_asic_rev(tp) == ASIC_REV_5761) {
16702                         if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
16703                             tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
16704                                 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
16705                         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
16706                                 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
16707                 } else
16708                         tp->phy_flags |= TG3_PHYFLG_BER_BUG;
16709         }
16710
16711         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
16712             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
16713                 tp->phy_otp = tg3_read_otp_phycfg(tp);
16714                 if (tp->phy_otp == 0)
16715                         tp->phy_otp = TG3_OTP_DEFAULT;
16716         }
16717
16718         if (tg3_flag(tp, CPMU_PRESENT))
16719                 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
16720         else
16721                 tp->mi_mode = MAC_MI_MODE_BASE;
16722
16723         tp->coalesce_mode = 0;
16724         if (tg3_chip_rev(tp) != CHIPREV_5700_AX &&
16725             tg3_chip_rev(tp) != CHIPREV_5700_BX)
16726                 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
16727
16728         /* Set these bits to enable statistics workaround. */
16729         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16730             tg3_asic_rev(tp) == ASIC_REV_5762 ||
16731             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
16732             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) {
16733                 tp->coalesce_mode |= HOSTCC_MODE_ATTN;
16734                 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
16735         }
16736
16737         if (tg3_asic_rev(tp) == ASIC_REV_5785 ||
16738             tg3_asic_rev(tp) == ASIC_REV_57780)
16739                 tg3_flag_set(tp, USE_PHYLIB);
16740
16741         err = tg3_mdio_init(tp);
16742         if (err)
16743                 return err;
16744
16745         /* Initialize data/descriptor byte/word swapping. */
16746         val = tr32(GRC_MODE);
16747         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
16748             tg3_asic_rev(tp) == ASIC_REV_5762)
16749                 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
16750                         GRC_MODE_WORD_SWAP_B2HRX_DATA |
16751                         GRC_MODE_B2HRX_ENABLE |
16752                         GRC_MODE_HTX2B_ENABLE |
16753                         GRC_MODE_HOST_STACKUP);
16754         else
16755                 val &= GRC_MODE_HOST_STACKUP;
16756
16757         tw32(GRC_MODE, val | tp->grc_mode);
16758
16759         tg3_switch_clocks(tp);
16760
16761         /* Clear this out for sanity. */
16762         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
16763
16764         /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */
16765         tw32(TG3PCI_REG_BASE_ADDR, 0);
16766
16767         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16768                               &pci_state_reg);
16769         if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
16770             !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
16771                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16772                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16773                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 ||
16774                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) {
16775                         void __iomem *sram_base;
16776
16777                         /* Write some dummy words into the SRAM status block
16778                          * area, see if it reads back correctly.  If the return
16779                          * value is bad, force enable the PCIX workaround.
16780                          */
16781                         sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
16782
16783                         writel(0x00000000, sram_base);
16784                         writel(0x00000000, sram_base + 4);
16785                         writel(0xffffffff, sram_base + 4);
16786                         if (readl(sram_base) != 0x00000000)
16787                                 tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16788                 }
16789         }
16790
16791         udelay(50);
16792         tg3_nvram_init(tp);
16793
16794         /* If the device has an NVRAM, no need to load patch firmware */
16795         if (tg3_asic_rev(tp) == ASIC_REV_57766 &&
16796             !tg3_flag(tp, NO_NVRAM))
16797                 tp->fw_needed = NULL;
16798
16799         grc_misc_cfg = tr32(GRC_MISC_CFG);
16800         grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
16801
16802         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16803             (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
16804              grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
16805                 tg3_flag_set(tp, IS_5788);
16806
16807         if (!tg3_flag(tp, IS_5788) &&
16808             tg3_asic_rev(tp) != ASIC_REV_5700)
16809                 tg3_flag_set(tp, TAGGED_STATUS);
16810         if (tg3_flag(tp, TAGGED_STATUS)) {
16811                 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
16812                                       HOSTCC_MODE_CLRTICK_TXBD);
16813
16814                 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
16815                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16816                                        tp->misc_host_ctrl);
16817         }
16818
16819         /* Preserve the APE MAC_MODE bits */
16820         if (tg3_flag(tp, ENABLE_APE))
16821                 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
16822         else
16823                 tp->mac_mode = 0;
16824
16825         if (tg3_10_100_only_device(tp, ent))
16826                 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
16827
16828         err = tg3_phy_probe(tp);
16829         if (err) {
16830                 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
16831                 /* ... but do not return immediately ... */
16832                 tg3_mdio_fini(tp);
16833         }
16834
16835         tg3_read_vpd(tp);
16836         tg3_read_fw_ver(tp);
16837
16838         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
16839                 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16840         } else {
16841                 if (tg3_asic_rev(tp) == ASIC_REV_5700)
16842                         tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16843                 else
16844                         tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16845         }
16846
16847         /* 5700 {AX,BX} chips have a broken status block link
16848          * change bit implementation, so we must use the
16849          * status register in those cases.
16850          */
16851         if (tg3_asic_rev(tp) == ASIC_REV_5700)
16852                 tg3_flag_set(tp, USE_LINKCHG_REG);
16853         else
16854                 tg3_flag_clear(tp, USE_LINKCHG_REG);
16855
16856         /* The led_ctrl is set during tg3_phy_probe, here we might
16857          * have to force the link status polling mechanism based
16858          * upon subsystem IDs.
16859          */
16860         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
16861             tg3_asic_rev(tp) == ASIC_REV_5701 &&
16862             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
16863                 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16864                 tg3_flag_set(tp, USE_LINKCHG_REG);
16865         }
16866
16867         /* For all SERDES we poll the MAC status register. */
16868         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
16869                 tg3_flag_set(tp, POLL_SERDES);
16870         else
16871                 tg3_flag_clear(tp, POLL_SERDES);
16872
16873         if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF))
16874                 tg3_flag_set(tp, POLL_CPMU_LINK);
16875
16876         tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
16877         tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
16878         if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
16879             tg3_flag(tp, PCIX_MODE)) {
16880                 tp->rx_offset = NET_SKB_PAD;
16881 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
16882                 tp->rx_copy_thresh = ~(u16)0;
16883 #endif
16884         }
16885
16886         tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
16887         tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
16888         tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
16889
16890         tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
16891
16892         /* Increment the rx prod index on the rx std ring by at most
16893          * 8 for these chips to workaround hw errata.
16894          */
16895         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16896             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16897             tg3_asic_rev(tp) == ASIC_REV_5755)
16898                 tp->rx_std_max_post = 8;
16899
16900         if (tg3_flag(tp, ASPM_WORKAROUND))
16901                 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
16902                                      PCIE_PWR_MGMT_L1_THRESH_MSK;
16903
16904         return err;
16905 }
16906
16907 static int tg3_get_device_address(struct tg3 *tp, u8 *addr)
16908 {
16909         u32 hi, lo, mac_offset;
16910         int addr_ok = 0;
16911         int err;
16912
16913         if (!eth_platform_get_mac_address(&tp->pdev->dev, addr))
16914                 return 0;
16915
16916         if (tg3_flag(tp, IS_SSB_CORE)) {
16917                 err = ssb_gige_get_macaddr(tp->pdev, addr);
16918                 if (!err && is_valid_ether_addr(addr))
16919                         return 0;
16920         }
16921
16922         mac_offset = 0x7c;
16923         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16924             tg3_flag(tp, 5780_CLASS)) {
16925                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
16926                         mac_offset = 0xcc;
16927                 if (tg3_nvram_lock(tp))
16928                         tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
16929                 else
16930                         tg3_nvram_unlock(tp);
16931         } else if (tg3_flag(tp, 5717_PLUS)) {
16932                 if (tp->pci_fn & 1)
16933                         mac_offset = 0xcc;
16934                 if (tp->pci_fn > 1)
16935                         mac_offset += 0x18c;
16936         } else if (tg3_asic_rev(tp) == ASIC_REV_5906)
16937                 mac_offset = 0x10;
16938
16939         /* First try to get it from MAC address mailbox. */
16940         tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
16941         if ((hi >> 16) == 0x484b) {
16942                 addr[0] = (hi >>  8) & 0xff;
16943                 addr[1] = (hi >>  0) & 0xff;
16944
16945                 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
16946                 addr[2] = (lo >> 24) & 0xff;
16947                 addr[3] = (lo >> 16) & 0xff;
16948                 addr[4] = (lo >>  8) & 0xff;
16949                 addr[5] = (lo >>  0) & 0xff;
16950
16951                 /* Some old bootcode may report a 0 MAC address in SRAM */
16952                 addr_ok = is_valid_ether_addr(addr);
16953         }
16954         if (!addr_ok) {
16955                 /* Next, try NVRAM. */
16956                 if (!tg3_flag(tp, NO_NVRAM) &&
16957                     !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
16958                     !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
16959                         memcpy(&addr[0], ((char *)&hi) + 2, 2);
16960                         memcpy(&addr[2], (char *)&lo, sizeof(lo));
16961                 }
16962                 /* Finally just fetch it out of the MAC control regs. */
16963                 else {
16964                         hi = tr32(MAC_ADDR_0_HIGH);
16965                         lo = tr32(MAC_ADDR_0_LOW);
16966
16967                         addr[5] = lo & 0xff;
16968                         addr[4] = (lo >> 8) & 0xff;
16969                         addr[3] = (lo >> 16) & 0xff;
16970                         addr[2] = (lo >> 24) & 0xff;
16971                         addr[1] = hi & 0xff;
16972                         addr[0] = (hi >> 8) & 0xff;
16973                 }
16974         }
16975
16976         if (!is_valid_ether_addr(addr))
16977                 return -EINVAL;
16978         return 0;
16979 }
16980
16981 #define BOUNDARY_SINGLE_CACHELINE       1
16982 #define BOUNDARY_MULTI_CACHELINE        2
16983
16984 static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
16985 {
16986         int cacheline_size;
16987         u8 byte;
16988         int goal;
16989
16990         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
16991         if (byte == 0)
16992                 cacheline_size = 1024;
16993         else
16994                 cacheline_size = (int) byte * 4;
16995
16996         /* On 5703 and later chips, the boundary bits have no
16997          * effect.
16998          */
16999         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17000             tg3_asic_rev(tp) != ASIC_REV_5701 &&
17001             !tg3_flag(tp, PCI_EXPRESS))
17002                 goto out;
17003
17004 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
17005         goal = BOUNDARY_MULTI_CACHELINE;
17006 #else
17007 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
17008         goal = BOUNDARY_SINGLE_CACHELINE;
17009 #else
17010         goal = 0;
17011 #endif
17012 #endif
17013
17014         if (tg3_flag(tp, 57765_PLUS)) {
17015                 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
17016                 goto out;
17017         }
17018
17019         if (!goal)
17020                 goto out;
17021
17022         /* PCI controllers on most RISC systems tend to disconnect
17023          * when a device tries to burst across a cache-line boundary.
17024          * Therefore, letting tg3 do so just wastes PCI bandwidth.
17025          *
17026          * Unfortunately, for PCI-E there are only limited
17027          * write-side controls for this, and thus for reads
17028          * we will still get the disconnects.  We'll also waste
17029          * these PCI cycles for both read and write for chips
17030          * other than 5700 and 5701 which do not implement the
17031          * boundary bits.
17032          */
17033         if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
17034                 switch (cacheline_size) {
17035                 case 16:
17036                 case 32:
17037                 case 64:
17038                 case 128:
17039                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17040                                 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
17041                                         DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
17042                         } else {
17043                                 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17044                                         DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17045                         }
17046                         break;
17047
17048                 case 256:
17049                         val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
17050                                 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
17051                         break;
17052
17053                 default:
17054                         val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17055                                 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17056                         break;
17057                 }
17058         } else if (tg3_flag(tp, PCI_EXPRESS)) {
17059                 switch (cacheline_size) {
17060                 case 16:
17061                 case 32:
17062                 case 64:
17063                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17064                                 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17065                                 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
17066                                 break;
17067                         }
17068                         fallthrough;
17069                 case 128:
17070                 default:
17071                         val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17072                         val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
17073                         break;
17074                 }
17075         } else {
17076                 switch (cacheline_size) {
17077                 case 16:
17078                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17079                                 val |= (DMA_RWCTRL_READ_BNDRY_16 |
17080                                         DMA_RWCTRL_WRITE_BNDRY_16);
17081                                 break;
17082                         }
17083                         fallthrough;
17084                 case 32:
17085                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17086                                 val |= (DMA_RWCTRL_READ_BNDRY_32 |
17087                                         DMA_RWCTRL_WRITE_BNDRY_32);
17088                                 break;
17089                         }
17090                         fallthrough;
17091                 case 64:
17092                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17093                                 val |= (DMA_RWCTRL_READ_BNDRY_64 |
17094                                         DMA_RWCTRL_WRITE_BNDRY_64);
17095                                 break;
17096                         }
17097                         fallthrough;
17098                 case 128:
17099                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17100                                 val |= (DMA_RWCTRL_READ_BNDRY_128 |
17101                                         DMA_RWCTRL_WRITE_BNDRY_128);
17102                                 break;
17103                         }
17104                         fallthrough;
17105                 case 256:
17106                         val |= (DMA_RWCTRL_READ_BNDRY_256 |
17107                                 DMA_RWCTRL_WRITE_BNDRY_256);
17108                         break;
17109                 case 512:
17110                         val |= (DMA_RWCTRL_READ_BNDRY_512 |
17111                                 DMA_RWCTRL_WRITE_BNDRY_512);
17112                         break;
17113                 case 1024:
17114                 default:
17115                         val |= (DMA_RWCTRL_READ_BNDRY_1024 |
17116                                 DMA_RWCTRL_WRITE_BNDRY_1024);
17117                         break;
17118                 }
17119         }
17120
17121 out:
17122         return val;
17123 }
17124
17125 static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
17126                            int size, bool to_device)
17127 {
17128         struct tg3_internal_buffer_desc test_desc;
17129         u32 sram_dma_descs;
17130         int i, ret;
17131
17132         sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
17133
17134         tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
17135         tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
17136         tw32(RDMAC_STATUS, 0);
17137         tw32(WDMAC_STATUS, 0);
17138
17139         tw32(BUFMGR_MODE, 0);
17140         tw32(FTQ_RESET, 0);
17141
17142         test_desc.addr_hi = ((u64) buf_dma) >> 32;
17143         test_desc.addr_lo = buf_dma & 0xffffffff;
17144         test_desc.nic_mbuf = 0x00002100;
17145         test_desc.len = size;
17146
17147         /*
17148          * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
17149          * the *second* time the tg3 driver was getting loaded after an
17150          * initial scan.
17151          *
17152          * Broadcom tells me:
17153          *   ...the DMA engine is connected to the GRC block and a DMA
17154          *   reset may affect the GRC block in some unpredictable way...
17155          *   The behavior of resets to individual blocks has not been tested.
17156          *
17157          * Broadcom noted the GRC reset will also reset all sub-components.
17158          */
17159         if (to_device) {
17160                 test_desc.cqid_sqid = (13 << 8) | 2;
17161
17162                 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
17163                 udelay(40);
17164         } else {
17165                 test_desc.cqid_sqid = (16 << 8) | 7;
17166
17167                 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
17168                 udelay(40);
17169         }
17170         test_desc.flags = 0x00000005;
17171
17172         for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
17173                 u32 val;
17174
17175                 val = *(((u32 *)&test_desc) + i);
17176                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
17177                                        sram_dma_descs + (i * sizeof(u32)));
17178                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
17179         }
17180         pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
17181
17182         if (to_device)
17183                 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
17184         else
17185                 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
17186
17187         ret = -ENODEV;
17188         for (i = 0; i < 40; i++) {
17189                 u32 val;
17190
17191                 if (to_device)
17192                         val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
17193                 else
17194                         val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
17195                 if ((val & 0xffff) == sram_dma_descs) {
17196                         ret = 0;
17197                         break;
17198                 }
17199
17200                 udelay(100);
17201         }
17202
17203         return ret;
17204 }
17205
17206 #define TEST_BUFFER_SIZE        0x2000
17207
17208 static const struct pci_device_id tg3_dma_wait_state_chipsets[] = {
17209         { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
17210         { },
17211 };
17212
17213 static int tg3_test_dma(struct tg3 *tp)
17214 {
17215         dma_addr_t buf_dma;
17216         u32 *buf, saved_dma_rwctrl;
17217         int ret = 0;
17218
17219         buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
17220                                  &buf_dma, GFP_KERNEL);
17221         if (!buf) {
17222                 ret = -ENOMEM;
17223                 goto out_nofree;
17224         }
17225
17226         tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
17227                           (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
17228
17229         tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
17230
17231         if (tg3_flag(tp, 57765_PLUS))
17232                 goto out;
17233
17234         if (tg3_flag(tp, PCI_EXPRESS)) {
17235                 /* DMA read watermark not used on PCIE */
17236                 tp->dma_rwctrl |= 0x00180000;
17237         } else if (!tg3_flag(tp, PCIX_MODE)) {
17238                 if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
17239                     tg3_asic_rev(tp) == ASIC_REV_5750)
17240                         tp->dma_rwctrl |= 0x003f0000;
17241                 else
17242                         tp->dma_rwctrl |= 0x003f000f;
17243         } else {
17244                 if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17245                     tg3_asic_rev(tp) == ASIC_REV_5704) {
17246                         u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
17247                         u32 read_water = 0x7;
17248
17249                         /* If the 5704 is behind the EPB bridge, we can
17250                          * do the less restrictive ONE_DMA workaround for
17251                          * better performance.
17252                          */
17253                         if (tg3_flag(tp, 40BIT_DMA_BUG) &&
17254                             tg3_asic_rev(tp) == ASIC_REV_5704)
17255                                 tp->dma_rwctrl |= 0x8000;
17256                         else if (ccval == 0x6 || ccval == 0x7)
17257                                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17258
17259                         if (tg3_asic_rev(tp) == ASIC_REV_5703)
17260                                 read_water = 4;
17261                         /* Set bit 23 to enable PCIX hw bug fix */
17262                         tp->dma_rwctrl |=
17263                                 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
17264                                 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
17265                                 (1 << 23);
17266                 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) {
17267                         /* 5780 always in PCIX mode */
17268                         tp->dma_rwctrl |= 0x00144000;
17269                 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) {
17270                         /* 5714 always in PCIX mode */
17271                         tp->dma_rwctrl |= 0x00148000;
17272                 } else {
17273                         tp->dma_rwctrl |= 0x001b000f;
17274                 }
17275         }
17276         if (tg3_flag(tp, ONE_DMA_AT_ONCE))
17277                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17278
17279         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17280             tg3_asic_rev(tp) == ASIC_REV_5704)
17281                 tp->dma_rwctrl &= 0xfffffff0;
17282
17283         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
17284             tg3_asic_rev(tp) == ASIC_REV_5701) {
17285                 /* Remove this if it causes problems for some boards. */
17286                 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
17287
17288                 /* On 5700/5701 chips, we need to set this bit.
17289                  * Otherwise the chip will issue cacheline transactions
17290                  * to streamable DMA memory with not all the byte
17291                  * enables turned on.  This is an error on several
17292                  * RISC PCI controllers, in particular sparc64.
17293                  *
17294                  * On 5703/5704 chips, this bit has been reassigned
17295                  * a different meaning.  In particular, it is used
17296                  * on those chips to enable a PCI-X workaround.
17297                  */
17298                 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
17299         }
17300
17301         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17302
17303
17304         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17305             tg3_asic_rev(tp) != ASIC_REV_5701)
17306                 goto out;
17307
17308         /* It is best to perform DMA test with maximum write burst size
17309          * to expose the 5700/5701 write DMA bug.
17310          */
17311         saved_dma_rwctrl = tp->dma_rwctrl;
17312         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17313         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17314
17315         while (1) {
17316                 u32 *p = buf, i;
17317
17318                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
17319                         p[i] = i;
17320
17321                 /* Send the buffer to the chip. */
17322                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true);
17323                 if (ret) {
17324                         dev_err(&tp->pdev->dev,
17325                                 "%s: Buffer write failed. err = %d\n",
17326                                 __func__, ret);
17327                         break;
17328                 }
17329
17330                 /* Now read it back. */
17331                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false);
17332                 if (ret) {
17333                         dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
17334                                 "err = %d\n", __func__, ret);
17335                         break;
17336                 }
17337
17338                 /* Verify it. */
17339                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
17340                         if (p[i] == i)
17341                                 continue;
17342
17343                         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17344                             DMA_RWCTRL_WRITE_BNDRY_16) {
17345                                 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17346                                 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17347                                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17348                                 break;
17349                         } else {
17350                                 dev_err(&tp->pdev->dev,
17351                                         "%s: Buffer corrupted on read back! "
17352                                         "(%d != %d)\n", __func__, p[i], i);
17353                                 ret = -ENODEV;
17354                                 goto out;
17355                         }
17356                 }
17357
17358                 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
17359                         /* Success. */
17360                         ret = 0;
17361                         break;
17362                 }
17363         }
17364         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17365             DMA_RWCTRL_WRITE_BNDRY_16) {
17366                 /* DMA test passed without adjusting DMA boundary,
17367                  * now look for chipsets that are known to expose the
17368                  * DMA bug without failing the test.
17369                  */
17370                 if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
17371                         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17372                         tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17373                 } else {
17374                         /* Safe to use the calculated DMA boundary. */
17375                         tp->dma_rwctrl = saved_dma_rwctrl;
17376                 }
17377
17378                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17379         }
17380
17381 out:
17382         dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
17383 out_nofree:
17384         return ret;
17385 }
17386
17387 static void tg3_init_bufmgr_config(struct tg3 *tp)
17388 {
17389         if (tg3_flag(tp, 57765_PLUS)) {
17390                 tp->bufmgr_config.mbuf_read_dma_low_water =
17391                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17392                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17393                         DEFAULT_MB_MACRX_LOW_WATER_57765;
17394                 tp->bufmgr_config.mbuf_high_water =
17395                         DEFAULT_MB_HIGH_WATER_57765;
17396
17397                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17398                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17399                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17400                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
17401                 tp->bufmgr_config.mbuf_high_water_jumbo =
17402                         DEFAULT_MB_HIGH_WATER_JUMBO_57765;
17403         } else if (tg3_flag(tp, 5705_PLUS)) {
17404                 tp->bufmgr_config.mbuf_read_dma_low_water =
17405                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17406                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17407                         DEFAULT_MB_MACRX_LOW_WATER_5705;
17408                 tp->bufmgr_config.mbuf_high_water =
17409                         DEFAULT_MB_HIGH_WATER_5705;
17410                 if (tg3_asic_rev(tp) == ASIC_REV_5906) {
17411                         tp->bufmgr_config.mbuf_mac_rx_low_water =
17412                                 DEFAULT_MB_MACRX_LOW_WATER_5906;
17413                         tp->bufmgr_config.mbuf_high_water =
17414                                 DEFAULT_MB_HIGH_WATER_5906;
17415                 }
17416
17417                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17418                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
17419                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17420                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
17421                 tp->bufmgr_config.mbuf_high_water_jumbo =
17422                         DEFAULT_MB_HIGH_WATER_JUMBO_5780;
17423         } else {
17424                 tp->bufmgr_config.mbuf_read_dma_low_water =
17425                         DEFAULT_MB_RDMA_LOW_WATER;
17426                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17427                         DEFAULT_MB_MACRX_LOW_WATER;
17428                 tp->bufmgr_config.mbuf_high_water =
17429                         DEFAULT_MB_HIGH_WATER;
17430
17431                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17432                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
17433                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17434                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
17435                 tp->bufmgr_config.mbuf_high_water_jumbo =
17436                         DEFAULT_MB_HIGH_WATER_JUMBO;
17437         }
17438
17439         tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
17440         tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
17441 }
17442
17443 static char *tg3_phy_string(struct tg3 *tp)
17444 {
17445         switch (tp->phy_id & TG3_PHY_ID_MASK) {
17446         case TG3_PHY_ID_BCM5400:        return "5400";
17447         case TG3_PHY_ID_BCM5401:        return "5401";
17448         case TG3_PHY_ID_BCM5411:        return "5411";
17449         case TG3_PHY_ID_BCM5701:        return "5701";
17450         case TG3_PHY_ID_BCM5703:        return "5703";
17451         case TG3_PHY_ID_BCM5704:        return "5704";
17452         case TG3_PHY_ID_BCM5705:        return "5705";
17453         case TG3_PHY_ID_BCM5750:        return "5750";
17454         case TG3_PHY_ID_BCM5752:        return "5752";
17455         case TG3_PHY_ID_BCM5714:        return "5714";
17456         case TG3_PHY_ID_BCM5780:        return "5780";
17457         case TG3_PHY_ID_BCM5755:        return "5755";
17458         case TG3_PHY_ID_BCM5787:        return "5787";
17459         case TG3_PHY_ID_BCM5784:        return "5784";
17460         case TG3_PHY_ID_BCM5756:        return "5722/5756";
17461         case TG3_PHY_ID_BCM5906:        return "5906";
17462         case TG3_PHY_ID_BCM5761:        return "5761";
17463         case TG3_PHY_ID_BCM5718C:       return "5718C";
17464         case TG3_PHY_ID_BCM5718S:       return "5718S";
17465         case TG3_PHY_ID_BCM57765:       return "57765";
17466         case TG3_PHY_ID_BCM5719C:       return "5719C";
17467         case TG3_PHY_ID_BCM5720C:       return "5720C";
17468         case TG3_PHY_ID_BCM5762:        return "5762C";
17469         case TG3_PHY_ID_BCM8002:        return "8002/serdes";
17470         case 0:                 return "serdes";
17471         default:                return "unknown";
17472         }
17473 }
17474
17475 static char *tg3_bus_string(struct tg3 *tp, char *str)
17476 {
17477         if (tg3_flag(tp, PCI_EXPRESS)) {
17478                 strcpy(str, "PCI Express");
17479                 return str;
17480         } else if (tg3_flag(tp, PCIX_MODE)) {
17481                 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
17482
17483                 strcpy(str, "PCIX:");
17484
17485                 if ((clock_ctrl == 7) ||
17486                     ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
17487                      GRC_MISC_CFG_BOARD_ID_5704CIOBE))
17488                         strcat(str, "133MHz");
17489                 else if (clock_ctrl == 0)
17490                         strcat(str, "33MHz");
17491                 else if (clock_ctrl == 2)
17492                         strcat(str, "50MHz");
17493                 else if (clock_ctrl == 4)
17494                         strcat(str, "66MHz");
17495                 else if (clock_ctrl == 6)
17496                         strcat(str, "100MHz");
17497         } else {
17498                 strcpy(str, "PCI:");
17499                 if (tg3_flag(tp, PCI_HIGH_SPEED))
17500                         strcat(str, "66MHz");
17501                 else
17502                         strcat(str, "33MHz");
17503         }
17504         if (tg3_flag(tp, PCI_32BIT))
17505                 strcat(str, ":32-bit");
17506         else
17507                 strcat(str, ":64-bit");
17508         return str;
17509 }
17510
17511 static void tg3_init_coal(struct tg3 *tp)
17512 {
17513         struct ethtool_coalesce *ec = &tp->coal;
17514
17515         memset(ec, 0, sizeof(*ec));
17516         ec->cmd = ETHTOOL_GCOALESCE;
17517         ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
17518         ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
17519         ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
17520         ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
17521         ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
17522         ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
17523         ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
17524         ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
17525         ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
17526
17527         if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
17528                                  HOSTCC_MODE_CLRTICK_TXBD)) {
17529                 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
17530                 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
17531                 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
17532                 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
17533         }
17534
17535         if (tg3_flag(tp, 5705_PLUS)) {
17536                 ec->rx_coalesce_usecs_irq = 0;
17537                 ec->tx_coalesce_usecs_irq = 0;
17538                 ec->stats_block_coalesce_usecs = 0;
17539         }
17540 }
17541
17542 static int tg3_init_one(struct pci_dev *pdev,
17543                                   const struct pci_device_id *ent)
17544 {
17545         struct net_device *dev;
17546         struct tg3 *tp;
17547         int i, err;
17548         u32 sndmbx, rcvmbx, intmbx;
17549         char str[40];
17550         u64 dma_mask, persist_dma_mask;
17551         netdev_features_t features = 0;
17552         u8 addr[ETH_ALEN] __aligned(2);
17553
17554         err = pci_enable_device(pdev);
17555         if (err) {
17556                 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
17557                 return err;
17558         }
17559
17560         err = pci_request_regions(pdev, DRV_MODULE_NAME);
17561         if (err) {
17562                 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
17563                 goto err_out_disable_pdev;
17564         }
17565
17566         pci_set_master(pdev);
17567
17568         dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
17569         if (!dev) {
17570                 err = -ENOMEM;
17571                 goto err_out_free_res;
17572         }
17573
17574         SET_NETDEV_DEV(dev, &pdev->dev);
17575
17576         tp = netdev_priv(dev);
17577         tp->pdev = pdev;
17578         tp->dev = dev;
17579         tp->rx_mode = TG3_DEF_RX_MODE;
17580         tp->tx_mode = TG3_DEF_TX_MODE;
17581         tp->irq_sync = 1;
17582         tp->pcierr_recovery = false;
17583
17584         if (tg3_debug > 0)
17585                 tp->msg_enable = tg3_debug;
17586         else
17587                 tp->msg_enable = TG3_DEF_MSG_ENABLE;
17588
17589         if (pdev_is_ssb_gige_core(pdev)) {
17590                 tg3_flag_set(tp, IS_SSB_CORE);
17591                 if (ssb_gige_must_flush_posted_writes(pdev))
17592                         tg3_flag_set(tp, FLUSH_POSTED_WRITES);
17593                 if (ssb_gige_one_dma_at_once(pdev))
17594                         tg3_flag_set(tp, ONE_DMA_AT_ONCE);
17595                 if (ssb_gige_have_roboswitch(pdev)) {
17596                         tg3_flag_set(tp, USE_PHYLIB);
17597                         tg3_flag_set(tp, ROBOSWITCH);
17598                 }
17599                 if (ssb_gige_is_rgmii(pdev))
17600                         tg3_flag_set(tp, RGMII_MODE);
17601         }
17602
17603         /* The word/byte swap controls here control register access byte
17604          * swapping.  DMA data byte swapping is controlled in the GRC_MODE
17605          * setting below.
17606          */
17607         tp->misc_host_ctrl =
17608                 MISC_HOST_CTRL_MASK_PCI_INT |
17609                 MISC_HOST_CTRL_WORD_SWAP |
17610                 MISC_HOST_CTRL_INDIR_ACCESS |
17611                 MISC_HOST_CTRL_PCISTATE_RW;
17612
17613         /* The NONFRM (non-frame) byte/word swap controls take effect
17614          * on descriptor entries, anything which isn't packet data.
17615          *
17616          * The StrongARM chips on the board (one for tx, one for rx)
17617          * are running in big-endian mode.
17618          */
17619         tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
17620                         GRC_MODE_WSWAP_NONFRM_DATA);
17621 #ifdef __BIG_ENDIAN
17622         tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
17623 #endif
17624         spin_lock_init(&tp->lock);
17625         spin_lock_init(&tp->indirect_lock);
17626         INIT_WORK(&tp->reset_task, tg3_reset_task);
17627
17628         tp->regs = pci_ioremap_bar(pdev, BAR_0);
17629         if (!tp->regs) {
17630                 dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
17631                 err = -ENOMEM;
17632                 goto err_out_free_dev;
17633         }
17634
17635         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
17636             tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
17637             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
17638             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
17639             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
17640             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
17641             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
17642             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
17643             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
17644             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
17645             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
17646             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
17647             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
17648             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
17649             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) {
17650                 tg3_flag_set(tp, ENABLE_APE);
17651                 tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
17652                 if (!tp->aperegs) {
17653                         dev_err(&pdev->dev,
17654                                 "Cannot map APE registers, aborting\n");
17655                         err = -ENOMEM;
17656                         goto err_out_iounmap;
17657                 }
17658         }
17659
17660         tp->rx_pending = TG3_DEF_RX_RING_PENDING;
17661         tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
17662
17663         dev->ethtool_ops = &tg3_ethtool_ops;
17664         dev->watchdog_timeo = TG3_TX_TIMEOUT;
17665         dev->netdev_ops = &tg3_netdev_ops;
17666         dev->irq = pdev->irq;
17667
17668         err = tg3_get_invariants(tp, ent);
17669         if (err) {
17670                 dev_err(&pdev->dev,
17671                         "Problem fetching invariants of chip, aborting\n");
17672                 goto err_out_apeunmap;
17673         }
17674
17675         /* The EPB bridge inside 5714, 5715, and 5780 and any
17676          * device behind the EPB cannot support DMA addresses > 40-bit.
17677          * On 64-bit systems with IOMMU, use 40-bit dma_mask.
17678          * On 64-bit systems without IOMMU, use 64-bit dma_mask and
17679          * do DMA address check in tg3_start_xmit().
17680          */
17681         if (tg3_flag(tp, IS_5788))
17682                 persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
17683         else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
17684                 persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
17685 #ifdef CONFIG_HIGHMEM
17686                 dma_mask = DMA_BIT_MASK(64);
17687 #endif
17688         } else
17689                 persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
17690
17691         /* Configure DMA attributes. */
17692         if (dma_mask > DMA_BIT_MASK(32)) {
17693                 err = dma_set_mask(&pdev->dev, dma_mask);
17694                 if (!err) {
17695                         features |= NETIF_F_HIGHDMA;
17696                         err = dma_set_coherent_mask(&pdev->dev,
17697                                                     persist_dma_mask);
17698                         if (err < 0) {
17699                                 dev_err(&pdev->dev, "Unable to obtain 64 bit "
17700                                         "DMA for consistent allocations\n");
17701                                 goto err_out_apeunmap;
17702                         }
17703                 }
17704         }
17705         if (err || dma_mask == DMA_BIT_MASK(32)) {
17706                 err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
17707                 if (err) {
17708                         dev_err(&pdev->dev,
17709                                 "No usable DMA configuration, aborting\n");
17710                         goto err_out_apeunmap;
17711                 }
17712         }
17713
17714         tg3_init_bufmgr_config(tp);
17715
17716         /* 5700 B0 chips do not support checksumming correctly due
17717          * to hardware bugs.
17718          */
17719         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) {
17720                 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
17721
17722                 if (tg3_flag(tp, 5755_PLUS))
17723                         features |= NETIF_F_IPV6_CSUM;
17724         }
17725
17726         /* TSO is on by default on chips that support hardware TSO.
17727          * Firmware TSO on older chips gives lower performance, so it
17728          * is off by default, but can be enabled using ethtool.
17729          */
17730         if ((tg3_flag(tp, HW_TSO_1) ||
17731              tg3_flag(tp, HW_TSO_2) ||
17732              tg3_flag(tp, HW_TSO_3)) &&
17733             (features & NETIF_F_IP_CSUM))
17734                 features |= NETIF_F_TSO;
17735         if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
17736                 if (features & NETIF_F_IPV6_CSUM)
17737                         features |= NETIF_F_TSO6;
17738                 if (tg3_flag(tp, HW_TSO_3) ||
17739                     tg3_asic_rev(tp) == ASIC_REV_5761 ||
17740                     (tg3_asic_rev(tp) == ASIC_REV_5784 &&
17741                      tg3_chip_rev(tp) != CHIPREV_5784_AX) ||
17742                     tg3_asic_rev(tp) == ASIC_REV_5785 ||
17743                     tg3_asic_rev(tp) == ASIC_REV_57780)
17744                         features |= NETIF_F_TSO_ECN;
17745         }
17746
17747         dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX |
17748                          NETIF_F_HW_VLAN_CTAG_RX;
17749         dev->vlan_features |= features;
17750
17751         /*
17752          * Add loopback capability only for a subset of devices that support
17753          * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
17754          * loopback for the remaining devices.
17755          */
17756         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
17757             !tg3_flag(tp, CPMU_PRESENT))
17758                 /* Add the loopback capability */
17759                 features |= NETIF_F_LOOPBACK;
17760
17761         dev->hw_features |= features;
17762         dev->priv_flags |= IFF_UNICAST_FLT;
17763
17764         /* MTU range: 60 - 9000 or 1500, depending on hardware */
17765         dev->min_mtu = TG3_MIN_MTU;
17766         dev->max_mtu = TG3_MAX_MTU(tp);
17767
17768         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 &&
17769             !tg3_flag(tp, TSO_CAPABLE) &&
17770             !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
17771                 tg3_flag_set(tp, MAX_RXPEND_64);
17772                 tp->rx_pending = 63;
17773         }
17774
17775         err = tg3_get_device_address(tp, addr);
17776         if (err) {
17777                 dev_err(&pdev->dev,
17778                         "Could not obtain valid ethernet address, aborting\n");
17779                 goto err_out_apeunmap;
17780         }
17781         eth_hw_addr_set(dev, addr);
17782
17783         intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
17784         rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
17785         sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
17786         for (i = 0; i < tp->irq_max; i++) {
17787                 struct tg3_napi *tnapi = &tp->napi[i];
17788
17789                 tnapi->tp = tp;
17790                 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
17791
17792                 tnapi->int_mbox = intmbx;
17793                 if (i <= 4)
17794                         intmbx += 0x8;
17795                 else
17796                         intmbx += 0x4;
17797
17798                 tnapi->consmbox = rcvmbx;
17799                 tnapi->prodmbox = sndmbx;
17800
17801                 if (i)
17802                         tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
17803                 else
17804                         tnapi->coal_now = HOSTCC_MODE_NOW;
17805
17806                 if (!tg3_flag(tp, SUPPORT_MSIX))
17807                         break;
17808
17809                 /*
17810                  * If we support MSIX, we'll be using RSS.  If we're using
17811                  * RSS, the first vector only handles link interrupts and the
17812                  * remaining vectors handle rx and tx interrupts.  Reuse the
17813                  * mailbox values for the next iteration.  The values we setup
17814                  * above are still useful for the single vectored mode.
17815                  */
17816                 if (!i)
17817                         continue;
17818
17819                 rcvmbx += 0x8;
17820
17821                 if (sndmbx & 0x4)
17822                         sndmbx -= 0x4;
17823                 else
17824                         sndmbx += 0xc;
17825         }
17826
17827         /*
17828          * Reset chip in case UNDI or EFI driver did not shutdown
17829          * DMA self test will enable WDMAC and we'll see (spurious)
17830          * pending DMA on the PCI bus at that point.
17831          */
17832         if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
17833             (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
17834                 tg3_full_lock(tp, 0);
17835                 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
17836                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17837                 tg3_full_unlock(tp);
17838         }
17839
17840         err = tg3_test_dma(tp);
17841         if (err) {
17842                 dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
17843                 goto err_out_apeunmap;
17844         }
17845
17846         tg3_init_coal(tp);
17847
17848         pci_set_drvdata(pdev, dev);
17849
17850         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
17851             tg3_asic_rev(tp) == ASIC_REV_5720 ||
17852             tg3_asic_rev(tp) == ASIC_REV_5762)
17853                 tg3_flag_set(tp, PTP_CAPABLE);
17854
17855         tg3_timer_init(tp);
17856
17857         tg3_carrier_off(tp);
17858
17859         err = register_netdev(dev);
17860         if (err) {
17861                 dev_err(&pdev->dev, "Cannot register net device, aborting\n");
17862                 goto err_out_apeunmap;
17863         }
17864
17865         if (tg3_flag(tp, PTP_CAPABLE)) {
17866                 tg3_ptp_init(tp);
17867                 tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
17868                                                    &tp->pdev->dev);
17869                 if (IS_ERR(tp->ptp_clock))
17870                         tp->ptp_clock = NULL;
17871         }
17872
17873         netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
17874                     tp->board_part_number,
17875                     tg3_chip_rev_id(tp),
17876                     tg3_bus_string(tp, str),
17877                     dev->dev_addr);
17878
17879         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) {
17880                 char *ethtype;
17881
17882                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
17883                         ethtype = "10/100Base-TX";
17884                 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
17885                         ethtype = "1000Base-SX";
17886                 else
17887                         ethtype = "10/100/1000Base-T";
17888
17889                 netdev_info(dev, "attached PHY is %s (%s Ethernet) "
17890                             "(WireSpeed[%d], EEE[%d])\n",
17891                             tg3_phy_string(tp), ethtype,
17892                             (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
17893                             (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
17894         }
17895
17896         netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
17897                     (dev->features & NETIF_F_RXCSUM) != 0,
17898                     tg3_flag(tp, USE_LINKCHG_REG) != 0,
17899                     (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
17900                     tg3_flag(tp, ENABLE_ASF) != 0,
17901                     tg3_flag(tp, TSO_CAPABLE) != 0);
17902         netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
17903                     tp->dma_rwctrl,
17904                     pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
17905                     ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
17906
17907         pci_save_state(pdev);
17908
17909         return 0;
17910
17911 err_out_apeunmap:
17912         if (tp->aperegs) {
17913                 iounmap(tp->aperegs);
17914                 tp->aperegs = NULL;
17915         }
17916
17917 err_out_iounmap:
17918         if (tp->regs) {
17919                 iounmap(tp->regs);
17920                 tp->regs = NULL;
17921         }
17922
17923 err_out_free_dev:
17924         free_netdev(dev);
17925
17926 err_out_free_res:
17927         pci_release_regions(pdev);
17928
17929 err_out_disable_pdev:
17930         if (pci_is_enabled(pdev))
17931                 pci_disable_device(pdev);
17932         return err;
17933 }
17934
17935 static void tg3_remove_one(struct pci_dev *pdev)
17936 {
17937         struct net_device *dev = pci_get_drvdata(pdev);
17938
17939         if (dev) {
17940                 struct tg3 *tp = netdev_priv(dev);
17941
17942                 tg3_ptp_fini(tp);
17943
17944                 release_firmware(tp->fw);
17945
17946                 tg3_reset_task_cancel(tp);
17947
17948                 if (tg3_flag(tp, USE_PHYLIB)) {
17949                         tg3_phy_fini(tp);
17950                         tg3_mdio_fini(tp);
17951                 }
17952
17953                 unregister_netdev(dev);
17954                 if (tp->aperegs) {
17955                         iounmap(tp->aperegs);
17956                         tp->aperegs = NULL;
17957                 }
17958                 if (tp->regs) {
17959                         iounmap(tp->regs);
17960                         tp->regs = NULL;
17961                 }
17962                 free_netdev(dev);
17963                 pci_release_regions(pdev);
17964                 pci_disable_device(pdev);
17965         }
17966 }
17967
17968 #ifdef CONFIG_PM_SLEEP
17969 static int tg3_suspend(struct device *device)
17970 {
17971         struct net_device *dev = dev_get_drvdata(device);
17972         struct tg3 *tp = netdev_priv(dev);
17973         int err = 0;
17974
17975         rtnl_lock();
17976
17977         if (!netif_running(dev))
17978                 goto unlock;
17979
17980         tg3_reset_task_cancel(tp);
17981         tg3_phy_stop(tp);
17982         tg3_netif_stop(tp);
17983
17984         tg3_timer_stop(tp);
17985
17986         tg3_full_lock(tp, 1);
17987         tg3_disable_ints(tp);
17988         tg3_full_unlock(tp);
17989
17990         netif_device_detach(dev);
17991
17992         tg3_full_lock(tp, 0);
17993         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17994         tg3_flag_clear(tp, INIT_COMPLETE);
17995         tg3_full_unlock(tp);
17996
17997         err = tg3_power_down_prepare(tp);
17998         if (err) {
17999                 int err2;
18000
18001                 tg3_full_lock(tp, 0);
18002
18003                 tg3_flag_set(tp, INIT_COMPLETE);
18004                 err2 = tg3_restart_hw(tp, true);
18005                 if (err2)
18006                         goto out;
18007
18008                 tg3_timer_start(tp);
18009
18010                 netif_device_attach(dev);
18011                 tg3_netif_start(tp);
18012
18013 out:
18014                 tg3_full_unlock(tp);
18015
18016                 if (!err2)
18017                         tg3_phy_start(tp);
18018         }
18019
18020 unlock:
18021         rtnl_unlock();
18022         return err;
18023 }
18024
18025 static int tg3_resume(struct device *device)
18026 {
18027         struct net_device *dev = dev_get_drvdata(device);
18028         struct tg3 *tp = netdev_priv(dev);
18029         int err = 0;
18030
18031         rtnl_lock();
18032
18033         if (!netif_running(dev))
18034                 goto unlock;
18035
18036         netif_device_attach(dev);
18037
18038         tg3_full_lock(tp, 0);
18039
18040         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18041
18042         tg3_flag_set(tp, INIT_COMPLETE);
18043         err = tg3_restart_hw(tp,
18044                              !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
18045         if (err)
18046                 goto out;
18047
18048         tg3_timer_start(tp);
18049
18050         tg3_netif_start(tp);
18051
18052 out:
18053         tg3_full_unlock(tp);
18054
18055         if (!err)
18056                 tg3_phy_start(tp);
18057
18058 unlock:
18059         rtnl_unlock();
18060         return err;
18061 }
18062 #endif /* CONFIG_PM_SLEEP */
18063
18064 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
18065
18066 static void tg3_shutdown(struct pci_dev *pdev)
18067 {
18068         struct net_device *dev = pci_get_drvdata(pdev);
18069         struct tg3 *tp = netdev_priv(dev);
18070
18071         tg3_reset_task_cancel(tp);
18072
18073         rtnl_lock();
18074
18075         netif_device_detach(dev);
18076
18077         if (netif_running(dev))
18078                 dev_close(dev);
18079
18080         tg3_power_down(tp);
18081
18082         rtnl_unlock();
18083
18084         pci_disable_device(pdev);
18085 }
18086
18087 /**
18088  * tg3_io_error_detected - called when PCI error is detected
18089  * @pdev: Pointer to PCI device
18090  * @state: The current pci connection state
18091  *
18092  * This function is called after a PCI bus error affecting
18093  * this device has been detected.
18094  */
18095 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
18096                                               pci_channel_state_t state)
18097 {
18098         struct net_device *netdev = pci_get_drvdata(pdev);
18099         struct tg3 *tp = netdev_priv(netdev);
18100         pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
18101
18102         netdev_info(netdev, "PCI I/O error detected\n");
18103
18104         /* Want to make sure that the reset task doesn't run */
18105         tg3_reset_task_cancel(tp);
18106
18107         rtnl_lock();
18108
18109         /* Could be second call or maybe we don't have netdev yet */
18110         if (!netdev || tp->pcierr_recovery || !netif_running(netdev))
18111                 goto done;
18112
18113         /* We needn't recover from permanent error */
18114         if (state == pci_channel_io_frozen)
18115                 tp->pcierr_recovery = true;
18116
18117         tg3_phy_stop(tp);
18118
18119         tg3_netif_stop(tp);
18120
18121         tg3_timer_stop(tp);
18122
18123         netif_device_detach(netdev);
18124
18125         /* Clean up software state, even if MMIO is blocked */
18126         tg3_full_lock(tp, 0);
18127         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
18128         tg3_full_unlock(tp);
18129
18130 done:
18131         if (state == pci_channel_io_perm_failure) {
18132                 if (netdev) {
18133                         tg3_napi_enable(tp);
18134                         dev_close(netdev);
18135                 }
18136                 err = PCI_ERS_RESULT_DISCONNECT;
18137         } else {
18138                 pci_disable_device(pdev);
18139         }
18140
18141         rtnl_unlock();
18142
18143         return err;
18144 }
18145
18146 /**
18147  * tg3_io_slot_reset - called after the pci bus has been reset.
18148  * @pdev: Pointer to PCI device
18149  *
18150  * Restart the card from scratch, as if from a cold-boot.
18151  * At this point, the card has exprienced a hard reset,
18152  * followed by fixups by BIOS, and has its config space
18153  * set up identically to what it was at cold boot.
18154  */
18155 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
18156 {
18157         struct net_device *netdev = pci_get_drvdata(pdev);
18158         struct tg3 *tp = netdev_priv(netdev);
18159         pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
18160         int err;
18161
18162         rtnl_lock();
18163
18164         if (pci_enable_device(pdev)) {
18165                 dev_err(&pdev->dev,
18166                         "Cannot re-enable PCI device after reset.\n");
18167                 goto done;
18168         }
18169
18170         pci_set_master(pdev);
18171         pci_restore_state(pdev);
18172         pci_save_state(pdev);
18173
18174         if (!netdev || !netif_running(netdev)) {
18175                 rc = PCI_ERS_RESULT_RECOVERED;
18176                 goto done;
18177         }
18178
18179         err = tg3_power_up(tp);
18180         if (err)
18181                 goto done;
18182
18183         rc = PCI_ERS_RESULT_RECOVERED;
18184
18185 done:
18186         if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) {
18187                 tg3_napi_enable(tp);
18188                 dev_close(netdev);
18189         }
18190         rtnl_unlock();
18191
18192         return rc;
18193 }
18194
18195 /**
18196  * tg3_io_resume - called when traffic can start flowing again.
18197  * @pdev: Pointer to PCI device
18198  *
18199  * This callback is called when the error recovery driver tells
18200  * us that its OK to resume normal operation.
18201  */
18202 static void tg3_io_resume(struct pci_dev *pdev)
18203 {
18204         struct net_device *netdev = pci_get_drvdata(pdev);
18205         struct tg3 *tp = netdev_priv(netdev);
18206         int err;
18207
18208         rtnl_lock();
18209
18210         if (!netdev || !netif_running(netdev))
18211                 goto done;
18212
18213         tg3_full_lock(tp, 0);
18214         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18215         tg3_flag_set(tp, INIT_COMPLETE);
18216         err = tg3_restart_hw(tp, true);
18217         if (err) {
18218                 tg3_full_unlock(tp);
18219                 netdev_err(netdev, "Cannot restart hardware after reset.\n");
18220                 goto done;
18221         }
18222
18223         netif_device_attach(netdev);
18224
18225         tg3_timer_start(tp);
18226
18227         tg3_netif_start(tp);
18228
18229         tg3_full_unlock(tp);
18230
18231         tg3_phy_start(tp);
18232
18233 done:
18234         tp->pcierr_recovery = false;
18235         rtnl_unlock();
18236 }
18237
18238 static const struct pci_error_handlers tg3_err_handler = {
18239         .error_detected = tg3_io_error_detected,
18240         .slot_reset     = tg3_io_slot_reset,
18241         .resume         = tg3_io_resume
18242 };
18243
18244 static struct pci_driver tg3_driver = {
18245         .name           = DRV_MODULE_NAME,
18246         .id_table       = tg3_pci_tbl,
18247         .probe          = tg3_init_one,
18248         .remove         = tg3_remove_one,
18249         .err_handler    = &tg3_err_handler,
18250         .driver.pm      = &tg3_pm_ops,
18251         .shutdown       = tg3_shutdown,
18252 };
18253
18254 module_pci_driver(tg3_driver);