net: add skb_[inner_]tcp_all_headers helpers
[platform/kernel/linux-starfive.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_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
6183 {
6184         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6185         bool neg_adj = false;
6186         u32 correction = 0;
6187
6188         if (ppb < 0) {
6189                 neg_adj = true;
6190                 ppb = -ppb;
6191         }
6192
6193         /* Frequency adjustment is performed using hardware with a 24 bit
6194          * accumulator and a programmable correction value. On each clk, the
6195          * correction value gets added to the accumulator and when it
6196          * overflows, the time counter is incremented/decremented.
6197          *
6198          * So conversion from ppb to correction value is
6199          *              ppb * (1 << 24) / 1000000000
6200          */
6201         correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) &
6202                      TG3_EAV_REF_CLK_CORRECT_MASK;
6203
6204         tg3_full_lock(tp, 0);
6205
6206         if (correction)
6207                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
6208                      TG3_EAV_REF_CLK_CORRECT_EN |
6209                      (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction);
6210         else
6211                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0);
6212
6213         tg3_full_unlock(tp);
6214
6215         return 0;
6216 }
6217
6218 static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
6219 {
6220         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6221
6222         tg3_full_lock(tp, 0);
6223         tp->ptp_adjust += delta;
6224         tg3_full_unlock(tp);
6225
6226         return 0;
6227 }
6228
6229 static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts,
6230                             struct ptp_system_timestamp *sts)
6231 {
6232         u64 ns;
6233         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6234
6235         tg3_full_lock(tp, 0);
6236         ns = tg3_refclk_read(tp, sts);
6237         ns += tp->ptp_adjust;
6238         tg3_full_unlock(tp);
6239
6240         *ts = ns_to_timespec64(ns);
6241
6242         return 0;
6243 }
6244
6245 static int tg3_ptp_settime(struct ptp_clock_info *ptp,
6246                            const struct timespec64 *ts)
6247 {
6248         u64 ns;
6249         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6250
6251         ns = timespec64_to_ns(ts);
6252
6253         tg3_full_lock(tp, 0);
6254         tg3_refclk_write(tp, ns);
6255         tp->ptp_adjust = 0;
6256         tg3_full_unlock(tp);
6257
6258         return 0;
6259 }
6260
6261 static int tg3_ptp_enable(struct ptp_clock_info *ptp,
6262                           struct ptp_clock_request *rq, int on)
6263 {
6264         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6265         u32 clock_ctl;
6266         int rval = 0;
6267
6268         switch (rq->type) {
6269         case PTP_CLK_REQ_PEROUT:
6270                 /* Reject requests with unsupported flags */
6271                 if (rq->perout.flags)
6272                         return -EOPNOTSUPP;
6273
6274                 if (rq->perout.index != 0)
6275                         return -EINVAL;
6276
6277                 tg3_full_lock(tp, 0);
6278                 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6279                 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK;
6280
6281                 if (on) {
6282                         u64 nsec;
6283
6284                         nsec = rq->perout.start.sec * 1000000000ULL +
6285                                rq->perout.start.nsec;
6286
6287                         if (rq->perout.period.sec || rq->perout.period.nsec) {
6288                                 netdev_warn(tp->dev,
6289                                             "Device supports only a one-shot timesync output, period must be 0\n");
6290                                 rval = -EINVAL;
6291                                 goto err_out;
6292                         }
6293
6294                         if (nsec & (1ULL << 63)) {
6295                                 netdev_warn(tp->dev,
6296                                             "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n");
6297                                 rval = -EINVAL;
6298                                 goto err_out;
6299                         }
6300
6301                         tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff));
6302                         tw32(TG3_EAV_WATCHDOG0_MSB,
6303                              TG3_EAV_WATCHDOG0_EN |
6304                              ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK));
6305
6306                         tw32(TG3_EAV_REF_CLCK_CTL,
6307                              clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0);
6308                 } else {
6309                         tw32(TG3_EAV_WATCHDOG0_MSB, 0);
6310                         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl);
6311                 }
6312
6313 err_out:
6314                 tg3_full_unlock(tp);
6315                 return rval;
6316
6317         default:
6318                 break;
6319         }
6320
6321         return -EOPNOTSUPP;
6322 }
6323
6324 static const struct ptp_clock_info tg3_ptp_caps = {
6325         .owner          = THIS_MODULE,
6326         .name           = "tg3 clock",
6327         .max_adj        = 250000000,
6328         .n_alarm        = 0,
6329         .n_ext_ts       = 0,
6330         .n_per_out      = 1,
6331         .n_pins         = 0,
6332         .pps            = 0,
6333         .adjfreq        = tg3_ptp_adjfreq,
6334         .adjtime        = tg3_ptp_adjtime,
6335         .gettimex64     = tg3_ptp_gettimex,
6336         .settime64      = tg3_ptp_settime,
6337         .enable         = tg3_ptp_enable,
6338 };
6339
6340 static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
6341                                      struct skb_shared_hwtstamps *timestamp)
6342 {
6343         memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
6344         timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
6345                                            tp->ptp_adjust);
6346 }
6347
6348 /* tp->lock must be held */
6349 static void tg3_ptp_init(struct tg3 *tp)
6350 {
6351         if (!tg3_flag(tp, PTP_CAPABLE))
6352                 return;
6353
6354         /* Initialize the hardware clock to the system time. */
6355         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
6356         tp->ptp_adjust = 0;
6357         tp->ptp_info = tg3_ptp_caps;
6358 }
6359
6360 /* tp->lock must be held */
6361 static void tg3_ptp_resume(struct tg3 *tp)
6362 {
6363         if (!tg3_flag(tp, PTP_CAPABLE))
6364                 return;
6365
6366         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
6367         tp->ptp_adjust = 0;
6368 }
6369
6370 static void tg3_ptp_fini(struct tg3 *tp)
6371 {
6372         if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
6373                 return;
6374
6375         ptp_clock_unregister(tp->ptp_clock);
6376         tp->ptp_clock = NULL;
6377         tp->ptp_adjust = 0;
6378 }
6379
6380 static inline int tg3_irq_sync(struct tg3 *tp)
6381 {
6382         return tp->irq_sync;
6383 }
6384
6385 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
6386 {
6387         int i;
6388
6389         dst = (u32 *)((u8 *)dst + off);
6390         for (i = 0; i < len; i += sizeof(u32))
6391                 *dst++ = tr32(off + i);
6392 }
6393
6394 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
6395 {
6396         tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
6397         tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
6398         tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
6399         tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
6400         tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
6401         tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
6402         tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
6403         tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
6404         tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
6405         tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
6406         tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
6407         tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
6408         tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
6409         tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
6410         tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
6411         tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
6412         tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
6413         tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
6414         tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
6415
6416         if (tg3_flag(tp, SUPPORT_MSIX))
6417                 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
6418
6419         tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
6420         tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
6421         tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
6422         tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
6423         tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
6424         tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
6425         tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
6426         tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
6427
6428         if (!tg3_flag(tp, 5705_PLUS)) {
6429                 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
6430                 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
6431                 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
6432         }
6433
6434         tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
6435         tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
6436         tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
6437         tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
6438         tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
6439
6440         if (tg3_flag(tp, NVRAM))
6441                 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
6442 }
6443
6444 static void tg3_dump_state(struct tg3 *tp)
6445 {
6446         int i;
6447         u32 *regs;
6448
6449         regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
6450         if (!regs)
6451                 return;
6452
6453         if (tg3_flag(tp, PCI_EXPRESS)) {
6454                 /* Read up to but not including private PCI registers */
6455                 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
6456                         regs[i / sizeof(u32)] = tr32(i);
6457         } else
6458                 tg3_dump_legacy_regs(tp, regs);
6459
6460         for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
6461                 if (!regs[i + 0] && !regs[i + 1] &&
6462                     !regs[i + 2] && !regs[i + 3])
6463                         continue;
6464
6465                 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
6466                            i * 4,
6467                            regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
6468         }
6469
6470         kfree(regs);
6471
6472         for (i = 0; i < tp->irq_cnt; i++) {
6473                 struct tg3_napi *tnapi = &tp->napi[i];
6474
6475                 /* SW status block */
6476                 netdev_err(tp->dev,
6477                          "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6478                            i,
6479                            tnapi->hw_status->status,
6480                            tnapi->hw_status->status_tag,
6481                            tnapi->hw_status->rx_jumbo_consumer,
6482                            tnapi->hw_status->rx_consumer,
6483                            tnapi->hw_status->rx_mini_consumer,
6484                            tnapi->hw_status->idx[0].rx_producer,
6485                            tnapi->hw_status->idx[0].tx_consumer);
6486
6487                 netdev_err(tp->dev,
6488                 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
6489                            i,
6490                            tnapi->last_tag, tnapi->last_irq_tag,
6491                            tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
6492                            tnapi->rx_rcb_ptr,
6493                            tnapi->prodring.rx_std_prod_idx,
6494                            tnapi->prodring.rx_std_cons_idx,
6495                            tnapi->prodring.rx_jmb_prod_idx,
6496                            tnapi->prodring.rx_jmb_cons_idx);
6497         }
6498 }
6499
6500 /* This is called whenever we suspect that the system chipset is re-
6501  * ordering the sequence of MMIO to the tx send mailbox. The symptom
6502  * is bogus tx completions. We try to recover by setting the
6503  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
6504  * in the workqueue.
6505  */
6506 static void tg3_tx_recover(struct tg3 *tp)
6507 {
6508         BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
6509                tp->write32_tx_mbox == tg3_write_indirect_mbox);
6510
6511         netdev_warn(tp->dev,
6512                     "The system may be re-ordering memory-mapped I/O "
6513                     "cycles to the network device, attempting to recover. "
6514                     "Please report the problem to the driver maintainer "
6515                     "and include system chipset information.\n");
6516
6517         tg3_flag_set(tp, TX_RECOVERY_PENDING);
6518 }
6519
6520 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
6521 {
6522         /* Tell compiler to fetch tx indices from memory. */
6523         barrier();
6524         return tnapi->tx_pending -
6525                ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
6526 }
6527
6528 /* Tigon3 never reports partial packet sends.  So we do not
6529  * need special logic to handle SKBs that have not had all
6530  * of their frags sent yet, like SunGEM does.
6531  */
6532 static void tg3_tx(struct tg3_napi *tnapi)
6533 {
6534         struct tg3 *tp = tnapi->tp;
6535         u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
6536         u32 sw_idx = tnapi->tx_cons;
6537         struct netdev_queue *txq;
6538         int index = tnapi - tp->napi;
6539         unsigned int pkts_compl = 0, bytes_compl = 0;
6540
6541         if (tg3_flag(tp, ENABLE_TSS))
6542                 index--;
6543
6544         txq = netdev_get_tx_queue(tp->dev, index);
6545
6546         while (sw_idx != hw_idx) {
6547                 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
6548                 struct sk_buff *skb = ri->skb;
6549                 int i, tx_bug = 0;
6550
6551                 if (unlikely(skb == NULL)) {
6552                         tg3_tx_recover(tp);
6553                         return;
6554                 }
6555
6556                 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
6557                         struct skb_shared_hwtstamps timestamp;
6558                         u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
6559                         hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
6560
6561                         tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
6562
6563                         skb_tstamp_tx(skb, &timestamp);
6564                 }
6565
6566                 dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping),
6567                                  skb_headlen(skb), DMA_TO_DEVICE);
6568
6569                 ri->skb = NULL;
6570
6571                 while (ri->fragmented) {
6572                         ri->fragmented = false;
6573                         sw_idx = NEXT_TX(sw_idx);
6574                         ri = &tnapi->tx_buffers[sw_idx];
6575                 }
6576
6577                 sw_idx = NEXT_TX(sw_idx);
6578
6579                 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
6580                         ri = &tnapi->tx_buffers[sw_idx];
6581                         if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
6582                                 tx_bug = 1;
6583
6584                         dma_unmap_page(&tp->pdev->dev,
6585                                        dma_unmap_addr(ri, mapping),
6586                                        skb_frag_size(&skb_shinfo(skb)->frags[i]),
6587                                        DMA_TO_DEVICE);
6588
6589                         while (ri->fragmented) {
6590                                 ri->fragmented = false;
6591                                 sw_idx = NEXT_TX(sw_idx);
6592                                 ri = &tnapi->tx_buffers[sw_idx];
6593                         }
6594
6595                         sw_idx = NEXT_TX(sw_idx);
6596                 }
6597
6598                 pkts_compl++;
6599                 bytes_compl += skb->len;
6600
6601                 dev_consume_skb_any(skb);
6602
6603                 if (unlikely(tx_bug)) {
6604                         tg3_tx_recover(tp);
6605                         return;
6606                 }
6607         }
6608
6609         netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
6610
6611         tnapi->tx_cons = sw_idx;
6612
6613         /* Need to make the tx_cons update visible to tg3_start_xmit()
6614          * before checking for netif_queue_stopped().  Without the
6615          * memory barrier, there is a small possibility that tg3_start_xmit()
6616          * will miss it and cause the queue to be stopped forever.
6617          */
6618         smp_mb();
6619
6620         if (unlikely(netif_tx_queue_stopped(txq) &&
6621                      (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
6622                 __netif_tx_lock(txq, smp_processor_id());
6623                 if (netif_tx_queue_stopped(txq) &&
6624                     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
6625                         netif_tx_wake_queue(txq);
6626                 __netif_tx_unlock(txq);
6627         }
6628 }
6629
6630 static void tg3_frag_free(bool is_frag, void *data)
6631 {
6632         if (is_frag)
6633                 skb_free_frag(data);
6634         else
6635                 kfree(data);
6636 }
6637
6638 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
6639 {
6640         unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
6641                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6642
6643         if (!ri->data)
6644                 return;
6645
6646         dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), map_sz,
6647                          DMA_FROM_DEVICE);
6648         tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
6649         ri->data = NULL;
6650 }
6651
6652
6653 /* Returns size of skb allocated or < 0 on error.
6654  *
6655  * We only need to fill in the address because the other members
6656  * of the RX descriptor are invariant, see tg3_init_rings.
6657  *
6658  * Note the purposeful assymetry of cpu vs. chip accesses.  For
6659  * posting buffers we only dirty the first cache line of the RX
6660  * descriptor (containing the address).  Whereas for the RX status
6661  * buffers the cpu only reads the last cacheline of the RX descriptor
6662  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6663  */
6664 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6665                              u32 opaque_key, u32 dest_idx_unmasked,
6666                              unsigned int *frag_size)
6667 {
6668         struct tg3_rx_buffer_desc *desc;
6669         struct ring_info *map;
6670         u8 *data;
6671         dma_addr_t mapping;
6672         int skb_size, data_size, dest_idx;
6673
6674         switch (opaque_key) {
6675         case RXD_OPAQUE_RING_STD:
6676                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6677                 desc = &tpr->rx_std[dest_idx];
6678                 map = &tpr->rx_std_buffers[dest_idx];
6679                 data_size = tp->rx_pkt_map_sz;
6680                 break;
6681
6682         case RXD_OPAQUE_RING_JUMBO:
6683                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6684                 desc = &tpr->rx_jmb[dest_idx].std;
6685                 map = &tpr->rx_jmb_buffers[dest_idx];
6686                 data_size = TG3_RX_JMB_MAP_SZ;
6687                 break;
6688
6689         default:
6690                 return -EINVAL;
6691         }
6692
6693         /* Do not overwrite any of the map or rp information
6694          * until we are sure we can commit to a new buffer.
6695          *
6696          * Callers depend upon this behavior and assume that
6697          * we leave everything unchanged if we fail.
6698          */
6699         skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6700                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6701         if (skb_size <= PAGE_SIZE) {
6702                 data = napi_alloc_frag(skb_size);
6703                 *frag_size = skb_size;
6704         } else {
6705                 data = kmalloc(skb_size, GFP_ATOMIC);
6706                 *frag_size = 0;
6707         }
6708         if (!data)
6709                 return -ENOMEM;
6710
6711         mapping = dma_map_single(&tp->pdev->dev, data + TG3_RX_OFFSET(tp),
6712                                  data_size, DMA_FROM_DEVICE);
6713         if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) {
6714                 tg3_frag_free(skb_size <= PAGE_SIZE, data);
6715                 return -EIO;
6716         }
6717
6718         map->data = data;
6719         dma_unmap_addr_set(map, mapping, mapping);
6720
6721         desc->addr_hi = ((u64)mapping >> 32);
6722         desc->addr_lo = ((u64)mapping & 0xffffffff);
6723
6724         return data_size;
6725 }
6726
6727 /* We only need to move over in the address because the other
6728  * members of the RX descriptor are invariant.  See notes above
6729  * tg3_alloc_rx_data for full details.
6730  */
6731 static void tg3_recycle_rx(struct tg3_napi *tnapi,
6732                            struct tg3_rx_prodring_set *dpr,
6733                            u32 opaque_key, int src_idx,
6734                            u32 dest_idx_unmasked)
6735 {
6736         struct tg3 *tp = tnapi->tp;
6737         struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6738         struct ring_info *src_map, *dest_map;
6739         struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6740         int dest_idx;
6741
6742         switch (opaque_key) {
6743         case RXD_OPAQUE_RING_STD:
6744                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6745                 dest_desc = &dpr->rx_std[dest_idx];
6746                 dest_map = &dpr->rx_std_buffers[dest_idx];
6747                 src_desc = &spr->rx_std[src_idx];
6748                 src_map = &spr->rx_std_buffers[src_idx];
6749                 break;
6750
6751         case RXD_OPAQUE_RING_JUMBO:
6752                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6753                 dest_desc = &dpr->rx_jmb[dest_idx].std;
6754                 dest_map = &dpr->rx_jmb_buffers[dest_idx];
6755                 src_desc = &spr->rx_jmb[src_idx].std;
6756                 src_map = &spr->rx_jmb_buffers[src_idx];
6757                 break;
6758
6759         default:
6760                 return;
6761         }
6762
6763         dest_map->data = src_map->data;
6764         dma_unmap_addr_set(dest_map, mapping,
6765                            dma_unmap_addr(src_map, mapping));
6766         dest_desc->addr_hi = src_desc->addr_hi;
6767         dest_desc->addr_lo = src_desc->addr_lo;
6768
6769         /* Ensure that the update to the skb happens after the physical
6770          * addresses have been transferred to the new BD location.
6771          */
6772         smp_wmb();
6773
6774         src_map->data = NULL;
6775 }
6776
6777 /* The RX ring scheme is composed of multiple rings which post fresh
6778  * buffers to the chip, and one special ring the chip uses to report
6779  * status back to the host.
6780  *
6781  * The special ring reports the status of received packets to the
6782  * host.  The chip does not write into the original descriptor the
6783  * RX buffer was obtained from.  The chip simply takes the original
6784  * descriptor as provided by the host, updates the status and length
6785  * field, then writes this into the next status ring entry.
6786  *
6787  * Each ring the host uses to post buffers to the chip is described
6788  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6789  * it is first placed into the on-chip ram.  When the packet's length
6790  * is known, it walks down the TG3_BDINFO entries to select the ring.
6791  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6792  * which is within the range of the new packet's length is chosen.
6793  *
6794  * The "separate ring for rx status" scheme may sound queer, but it makes
6795  * sense from a cache coherency perspective.  If only the host writes
6796  * to the buffer post rings, and only the chip writes to the rx status
6797  * rings, then cache lines never move beyond shared-modified state.
6798  * If both the host and chip were to write into the same ring, cache line
6799  * eviction could occur since both entities want it in an exclusive state.
6800  */
6801 static int tg3_rx(struct tg3_napi *tnapi, int budget)
6802 {
6803         struct tg3 *tp = tnapi->tp;
6804         u32 work_mask, rx_std_posted = 0;
6805         u32 std_prod_idx, jmb_prod_idx;
6806         u32 sw_idx = tnapi->rx_rcb_ptr;
6807         u16 hw_idx;
6808         int received;
6809         struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6810
6811         hw_idx = *(tnapi->rx_rcb_prod_idx);
6812         /*
6813          * We need to order the read of hw_idx and the read of
6814          * the opaque cookie.
6815          */
6816         rmb();
6817         work_mask = 0;
6818         received = 0;
6819         std_prod_idx = tpr->rx_std_prod_idx;
6820         jmb_prod_idx = tpr->rx_jmb_prod_idx;
6821         while (sw_idx != hw_idx && budget > 0) {
6822                 struct ring_info *ri;
6823                 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6824                 unsigned int len;
6825                 struct sk_buff *skb;
6826                 dma_addr_t dma_addr;
6827                 u32 opaque_key, desc_idx, *post_ptr;
6828                 u8 *data;
6829                 u64 tstamp = 0;
6830
6831                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6832                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6833                 if (opaque_key == RXD_OPAQUE_RING_STD) {
6834                         ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6835                         dma_addr = dma_unmap_addr(ri, mapping);
6836                         data = ri->data;
6837                         post_ptr = &std_prod_idx;
6838                         rx_std_posted++;
6839                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6840                         ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6841                         dma_addr = dma_unmap_addr(ri, mapping);
6842                         data = ri->data;
6843                         post_ptr = &jmb_prod_idx;
6844                 } else
6845                         goto next_pkt_nopost;
6846
6847                 work_mask |= opaque_key;
6848
6849                 if (desc->err_vlan & RXD_ERR_MASK) {
6850                 drop_it:
6851                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6852                                        desc_idx, *post_ptr);
6853                 drop_it_no_recycle:
6854                         /* Other statistics kept track of by card. */
6855                         tp->rx_dropped++;
6856                         goto next_pkt;
6857                 }
6858
6859                 prefetch(data + TG3_RX_OFFSET(tp));
6860                 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6861                       ETH_FCS_LEN;
6862
6863                 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6864                      RXD_FLAG_PTPSTAT_PTPV1 ||
6865                     (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6866                      RXD_FLAG_PTPSTAT_PTPV2) {
6867                         tstamp = tr32(TG3_RX_TSTAMP_LSB);
6868                         tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6869                 }
6870
6871                 if (len > TG3_RX_COPY_THRESH(tp)) {
6872                         int skb_size;
6873                         unsigned int frag_size;
6874
6875                         skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6876                                                     *post_ptr, &frag_size);
6877                         if (skb_size < 0)
6878                                 goto drop_it;
6879
6880                         dma_unmap_single(&tp->pdev->dev, dma_addr, skb_size,
6881                                          DMA_FROM_DEVICE);
6882
6883                         /* Ensure that the update to the data happens
6884                          * after the usage of the old DMA mapping.
6885                          */
6886                         smp_wmb();
6887
6888                         ri->data = NULL;
6889
6890                         skb = build_skb(data, frag_size);
6891                         if (!skb) {
6892                                 tg3_frag_free(frag_size != 0, data);
6893                                 goto drop_it_no_recycle;
6894                         }
6895                         skb_reserve(skb, TG3_RX_OFFSET(tp));
6896                 } else {
6897                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6898                                        desc_idx, *post_ptr);
6899
6900                         skb = netdev_alloc_skb(tp->dev,
6901                                                len + TG3_RAW_IP_ALIGN);
6902                         if (skb == NULL)
6903                                 goto drop_it_no_recycle;
6904
6905                         skb_reserve(skb, TG3_RAW_IP_ALIGN);
6906                         dma_sync_single_for_cpu(&tp->pdev->dev, dma_addr, len,
6907                                                 DMA_FROM_DEVICE);
6908                         memcpy(skb->data,
6909                                data + TG3_RX_OFFSET(tp),
6910                                len);
6911                         dma_sync_single_for_device(&tp->pdev->dev, dma_addr,
6912                                                    len, DMA_FROM_DEVICE);
6913                 }
6914
6915                 skb_put(skb, len);
6916                 if (tstamp)
6917                         tg3_hwclock_to_timestamp(tp, tstamp,
6918                                                  skb_hwtstamps(skb));
6919
6920                 if ((tp->dev->features & NETIF_F_RXCSUM) &&
6921                     (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6922                     (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6923                       >> RXD_TCPCSUM_SHIFT) == 0xffff))
6924                         skb->ip_summed = CHECKSUM_UNNECESSARY;
6925                 else
6926                         skb_checksum_none_assert(skb);
6927
6928                 skb->protocol = eth_type_trans(skb, tp->dev);
6929
6930                 if (len > (tp->dev->mtu + ETH_HLEN) &&
6931                     skb->protocol != htons(ETH_P_8021Q) &&
6932                     skb->protocol != htons(ETH_P_8021AD)) {
6933                         dev_kfree_skb_any(skb);
6934                         goto drop_it_no_recycle;
6935                 }
6936
6937                 if (desc->type_flags & RXD_FLAG_VLAN &&
6938                     !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6939                         __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
6940                                                desc->err_vlan & RXD_VLAN_MASK);
6941
6942                 napi_gro_receive(&tnapi->napi, skb);
6943
6944                 received++;
6945                 budget--;
6946
6947 next_pkt:
6948                 (*post_ptr)++;
6949
6950                 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6951                         tpr->rx_std_prod_idx = std_prod_idx &
6952                                                tp->rx_std_ring_mask;
6953                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6954                                      tpr->rx_std_prod_idx);
6955                         work_mask &= ~RXD_OPAQUE_RING_STD;
6956                         rx_std_posted = 0;
6957                 }
6958 next_pkt_nopost:
6959                 sw_idx++;
6960                 sw_idx &= tp->rx_ret_ring_mask;
6961
6962                 /* Refresh hw_idx to see if there is new work */
6963                 if (sw_idx == hw_idx) {
6964                         hw_idx = *(tnapi->rx_rcb_prod_idx);
6965                         rmb();
6966                 }
6967         }
6968
6969         /* ACK the status ring. */
6970         tnapi->rx_rcb_ptr = sw_idx;
6971         tw32_rx_mbox(tnapi->consmbox, sw_idx);
6972
6973         /* Refill RX ring(s). */
6974         if (!tg3_flag(tp, ENABLE_RSS)) {
6975                 /* Sync BD data before updating mailbox */
6976                 wmb();
6977
6978                 if (work_mask & RXD_OPAQUE_RING_STD) {
6979                         tpr->rx_std_prod_idx = std_prod_idx &
6980                                                tp->rx_std_ring_mask;
6981                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6982                                      tpr->rx_std_prod_idx);
6983                 }
6984                 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6985                         tpr->rx_jmb_prod_idx = jmb_prod_idx &
6986                                                tp->rx_jmb_ring_mask;
6987                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6988                                      tpr->rx_jmb_prod_idx);
6989                 }
6990         } else if (work_mask) {
6991                 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6992                  * updated before the producer indices can be updated.
6993                  */
6994                 smp_wmb();
6995
6996                 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6997                 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6998
6999                 if (tnapi != &tp->napi[1]) {
7000                         tp->rx_refill = true;
7001                         napi_schedule(&tp->napi[1].napi);
7002                 }
7003         }
7004
7005         return received;
7006 }
7007
7008 static void tg3_poll_link(struct tg3 *tp)
7009 {
7010         /* handle link change and other phy events */
7011         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
7012                 struct tg3_hw_status *sblk = tp->napi[0].hw_status;
7013
7014                 if (sblk->status & SD_STATUS_LINK_CHG) {
7015                         sblk->status = SD_STATUS_UPDATED |
7016                                        (sblk->status & ~SD_STATUS_LINK_CHG);
7017                         spin_lock(&tp->lock);
7018                         if (tg3_flag(tp, USE_PHYLIB)) {
7019                                 tw32_f(MAC_STATUS,
7020                                      (MAC_STATUS_SYNC_CHANGED |
7021                                       MAC_STATUS_CFG_CHANGED |
7022                                       MAC_STATUS_MI_COMPLETION |
7023                                       MAC_STATUS_LNKSTATE_CHANGED));
7024                                 udelay(40);
7025                         } else
7026                                 tg3_setup_phy(tp, false);
7027                         spin_unlock(&tp->lock);
7028                 }
7029         }
7030 }
7031
7032 static int tg3_rx_prodring_xfer(struct tg3 *tp,
7033                                 struct tg3_rx_prodring_set *dpr,
7034                                 struct tg3_rx_prodring_set *spr)
7035 {
7036         u32 si, di, cpycnt, src_prod_idx;
7037         int i, err = 0;
7038
7039         while (1) {
7040                 src_prod_idx = spr->rx_std_prod_idx;
7041
7042                 /* Make sure updates to the rx_std_buffers[] entries and the
7043                  * standard producer index are seen in the correct order.
7044                  */
7045                 smp_rmb();
7046
7047                 if (spr->rx_std_cons_idx == src_prod_idx)
7048                         break;
7049
7050                 if (spr->rx_std_cons_idx < src_prod_idx)
7051                         cpycnt = src_prod_idx - spr->rx_std_cons_idx;
7052                 else
7053                         cpycnt = tp->rx_std_ring_mask + 1 -
7054                                  spr->rx_std_cons_idx;
7055
7056                 cpycnt = min(cpycnt,
7057                              tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
7058
7059                 si = spr->rx_std_cons_idx;
7060                 di = dpr->rx_std_prod_idx;
7061
7062                 for (i = di; i < di + cpycnt; i++) {
7063                         if (dpr->rx_std_buffers[i].data) {
7064                                 cpycnt = i - di;
7065                                 err = -ENOSPC;
7066                                 break;
7067                         }
7068                 }
7069
7070                 if (!cpycnt)
7071                         break;
7072
7073                 /* Ensure that updates to the rx_std_buffers ring and the
7074                  * shadowed hardware producer ring from tg3_recycle_skb() are
7075                  * ordered correctly WRT the skb check above.
7076                  */
7077                 smp_rmb();
7078
7079                 memcpy(&dpr->rx_std_buffers[di],
7080                        &spr->rx_std_buffers[si],
7081                        cpycnt * sizeof(struct ring_info));
7082
7083                 for (i = 0; i < cpycnt; i++, di++, si++) {
7084                         struct tg3_rx_buffer_desc *sbd, *dbd;
7085                         sbd = &spr->rx_std[si];
7086                         dbd = &dpr->rx_std[di];
7087                         dbd->addr_hi = sbd->addr_hi;
7088                         dbd->addr_lo = sbd->addr_lo;
7089                 }
7090
7091                 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
7092                                        tp->rx_std_ring_mask;
7093                 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
7094                                        tp->rx_std_ring_mask;
7095         }
7096
7097         while (1) {
7098                 src_prod_idx = spr->rx_jmb_prod_idx;
7099
7100                 /* Make sure updates to the rx_jmb_buffers[] entries and
7101                  * the jumbo producer index are seen in the correct order.
7102                  */
7103                 smp_rmb();
7104
7105                 if (spr->rx_jmb_cons_idx == src_prod_idx)
7106                         break;
7107
7108                 if (spr->rx_jmb_cons_idx < src_prod_idx)
7109                         cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
7110                 else
7111                         cpycnt = tp->rx_jmb_ring_mask + 1 -
7112                                  spr->rx_jmb_cons_idx;
7113
7114                 cpycnt = min(cpycnt,
7115                              tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
7116
7117                 si = spr->rx_jmb_cons_idx;
7118                 di = dpr->rx_jmb_prod_idx;
7119
7120                 for (i = di; i < di + cpycnt; i++) {
7121                         if (dpr->rx_jmb_buffers[i].data) {
7122                                 cpycnt = i - di;
7123                                 err = -ENOSPC;
7124                                 break;
7125                         }
7126                 }
7127
7128                 if (!cpycnt)
7129                         break;
7130
7131                 /* Ensure that updates to the rx_jmb_buffers ring and the
7132                  * shadowed hardware producer ring from tg3_recycle_skb() are
7133                  * ordered correctly WRT the skb check above.
7134                  */
7135                 smp_rmb();
7136
7137                 memcpy(&dpr->rx_jmb_buffers[di],
7138                        &spr->rx_jmb_buffers[si],
7139                        cpycnt * sizeof(struct ring_info));
7140
7141                 for (i = 0; i < cpycnt; i++, di++, si++) {
7142                         struct tg3_rx_buffer_desc *sbd, *dbd;
7143                         sbd = &spr->rx_jmb[si].std;
7144                         dbd = &dpr->rx_jmb[di].std;
7145                         dbd->addr_hi = sbd->addr_hi;
7146                         dbd->addr_lo = sbd->addr_lo;
7147                 }
7148
7149                 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
7150                                        tp->rx_jmb_ring_mask;
7151                 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
7152                                        tp->rx_jmb_ring_mask;
7153         }
7154
7155         return err;
7156 }
7157
7158 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
7159 {
7160         struct tg3 *tp = tnapi->tp;
7161
7162         /* run TX completion thread */
7163         if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
7164                 tg3_tx(tnapi);
7165                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7166                         return work_done;
7167         }
7168
7169         if (!tnapi->rx_rcb_prod_idx)
7170                 return work_done;
7171
7172         /* run RX thread, within the bounds set by NAPI.
7173          * All RX "locking" is done by ensuring outside
7174          * code synchronizes with tg3->napi.poll()
7175          */
7176         if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
7177                 work_done += tg3_rx(tnapi, budget - work_done);
7178
7179         if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
7180                 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
7181                 int i, err = 0;
7182                 u32 std_prod_idx = dpr->rx_std_prod_idx;
7183                 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
7184
7185                 tp->rx_refill = false;
7186                 for (i = 1; i <= tp->rxq_cnt; i++)
7187                         err |= tg3_rx_prodring_xfer(tp, dpr,
7188                                                     &tp->napi[i].prodring);
7189
7190                 wmb();
7191
7192                 if (std_prod_idx != dpr->rx_std_prod_idx)
7193                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7194                                      dpr->rx_std_prod_idx);
7195
7196                 if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
7197                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7198                                      dpr->rx_jmb_prod_idx);
7199
7200                 if (err)
7201                         tw32_f(HOSTCC_MODE, tp->coal_now);
7202         }
7203
7204         return work_done;
7205 }
7206
7207 static inline void tg3_reset_task_schedule(struct tg3 *tp)
7208 {
7209         if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7210                 schedule_work(&tp->reset_task);
7211 }
7212
7213 static inline void tg3_reset_task_cancel(struct tg3 *tp)
7214 {
7215         if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7216                 cancel_work_sync(&tp->reset_task);
7217         tg3_flag_clear(tp, TX_RECOVERY_PENDING);
7218 }
7219
7220 static int tg3_poll_msix(struct napi_struct *napi, int budget)
7221 {
7222         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7223         struct tg3 *tp = tnapi->tp;
7224         int work_done = 0;
7225         struct tg3_hw_status *sblk = tnapi->hw_status;
7226
7227         while (1) {
7228                 work_done = tg3_poll_work(tnapi, work_done, budget);
7229
7230                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7231                         goto tx_recovery;
7232
7233                 if (unlikely(work_done >= budget))
7234                         break;
7235
7236                 /* tp->last_tag is used in tg3_int_reenable() below
7237                  * to tell the hw how much work has been processed,
7238                  * so we must read it before checking for more work.
7239                  */
7240                 tnapi->last_tag = sblk->status_tag;
7241                 tnapi->last_irq_tag = tnapi->last_tag;
7242                 rmb();
7243
7244                 /* check for RX/TX work to do */
7245                 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
7246                            *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
7247
7248                         /* This test here is not race free, but will reduce
7249                          * the number of interrupts by looping again.
7250                          */
7251                         if (tnapi == &tp->napi[1] && tp->rx_refill)
7252                                 continue;
7253
7254                         napi_complete_done(napi, work_done);
7255                         /* Reenable interrupts. */
7256                         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
7257
7258                         /* This test here is synchronized by napi_schedule()
7259                          * and napi_complete() to close the race condition.
7260                          */
7261                         if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
7262                                 tw32(HOSTCC_MODE, tp->coalesce_mode |
7263                                                   HOSTCC_MODE_ENABLE |
7264                                                   tnapi->coal_now);
7265                         }
7266                         break;
7267                 }
7268         }
7269
7270         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7271         return work_done;
7272
7273 tx_recovery:
7274         /* work_done is guaranteed to be less than budget. */
7275         napi_complete(napi);
7276         tg3_reset_task_schedule(tp);
7277         return work_done;
7278 }
7279
7280 static void tg3_process_error(struct tg3 *tp)
7281 {
7282         u32 val;
7283         bool real_error = false;
7284
7285         if (tg3_flag(tp, ERROR_PROCESSED))
7286                 return;
7287
7288         /* Check Flow Attention register */
7289         val = tr32(HOSTCC_FLOW_ATTN);
7290         if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
7291                 netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
7292                 real_error = true;
7293         }
7294
7295         if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
7296                 netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
7297                 real_error = true;
7298         }
7299
7300         if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
7301                 netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
7302                 real_error = true;
7303         }
7304
7305         if (!real_error)
7306                 return;
7307
7308         tg3_dump_state(tp);
7309
7310         tg3_flag_set(tp, ERROR_PROCESSED);
7311         tg3_reset_task_schedule(tp);
7312 }
7313
7314 static int tg3_poll(struct napi_struct *napi, int budget)
7315 {
7316         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7317         struct tg3 *tp = tnapi->tp;
7318         int work_done = 0;
7319         struct tg3_hw_status *sblk = tnapi->hw_status;
7320
7321         while (1) {
7322                 if (sblk->status & SD_STATUS_ERROR)
7323                         tg3_process_error(tp);
7324
7325                 tg3_poll_link(tp);
7326
7327                 work_done = tg3_poll_work(tnapi, work_done, budget);
7328
7329                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7330                         goto tx_recovery;
7331
7332                 if (unlikely(work_done >= budget))
7333                         break;
7334
7335                 if (tg3_flag(tp, TAGGED_STATUS)) {
7336                         /* tp->last_tag is used in tg3_int_reenable() below
7337                          * to tell the hw how much work has been processed,
7338                          * so we must read it before checking for more work.
7339                          */
7340                         tnapi->last_tag = sblk->status_tag;
7341                         tnapi->last_irq_tag = tnapi->last_tag;
7342                         rmb();
7343                 } else
7344                         sblk->status &= ~SD_STATUS_UPDATED;
7345
7346                 if (likely(!tg3_has_work(tnapi))) {
7347                         napi_complete_done(napi, work_done);
7348                         tg3_int_reenable(tnapi);
7349                         break;
7350                 }
7351         }
7352
7353         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7354         return work_done;
7355
7356 tx_recovery:
7357         /* work_done is guaranteed to be less than budget. */
7358         napi_complete(napi);
7359         tg3_reset_task_schedule(tp);
7360         return work_done;
7361 }
7362
7363 static void tg3_napi_disable(struct tg3 *tp)
7364 {
7365         int i;
7366
7367         for (i = tp->irq_cnt - 1; i >= 0; i--)
7368                 napi_disable(&tp->napi[i].napi);
7369 }
7370
7371 static void tg3_napi_enable(struct tg3 *tp)
7372 {
7373         int i;
7374
7375         for (i = 0; i < tp->irq_cnt; i++)
7376                 napi_enable(&tp->napi[i].napi);
7377 }
7378
7379 static void tg3_napi_init(struct tg3 *tp)
7380 {
7381         int i;
7382
7383         netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
7384         for (i = 1; i < tp->irq_cnt; i++)
7385                 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
7386 }
7387
7388 static void tg3_napi_fini(struct tg3 *tp)
7389 {
7390         int i;
7391
7392         for (i = 0; i < tp->irq_cnt; i++)
7393                 netif_napi_del(&tp->napi[i].napi);
7394 }
7395
7396 static inline void tg3_netif_stop(struct tg3 *tp)
7397 {
7398         netif_trans_update(tp->dev);    /* prevent tx timeout */
7399         tg3_napi_disable(tp);
7400         netif_carrier_off(tp->dev);
7401         netif_tx_disable(tp->dev);
7402 }
7403
7404 /* tp->lock must be held */
7405 static inline void tg3_netif_start(struct tg3 *tp)
7406 {
7407         tg3_ptp_resume(tp);
7408
7409         /* NOTE: unconditional netif_tx_wake_all_queues is only
7410          * appropriate so long as all callers are assured to
7411          * have free tx slots (such as after tg3_init_hw)
7412          */
7413         netif_tx_wake_all_queues(tp->dev);
7414
7415         if (tp->link_up)
7416                 netif_carrier_on(tp->dev);
7417
7418         tg3_napi_enable(tp);
7419         tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
7420         tg3_enable_ints(tp);
7421 }
7422
7423 static void tg3_irq_quiesce(struct tg3 *tp)
7424         __releases(tp->lock)
7425         __acquires(tp->lock)
7426 {
7427         int i;
7428
7429         BUG_ON(tp->irq_sync);
7430
7431         tp->irq_sync = 1;
7432         smp_mb();
7433
7434         spin_unlock_bh(&tp->lock);
7435
7436         for (i = 0; i < tp->irq_cnt; i++)
7437                 synchronize_irq(tp->napi[i].irq_vec);
7438
7439         spin_lock_bh(&tp->lock);
7440 }
7441
7442 /* Fully shutdown all tg3 driver activity elsewhere in the system.
7443  * If irq_sync is non-zero, then the IRQ handler must be synchronized
7444  * with as well.  Most of the time, this is not necessary except when
7445  * shutting down the device.
7446  */
7447 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
7448 {
7449         spin_lock_bh(&tp->lock);
7450         if (irq_sync)
7451                 tg3_irq_quiesce(tp);
7452 }
7453
7454 static inline void tg3_full_unlock(struct tg3 *tp)
7455 {
7456         spin_unlock_bh(&tp->lock);
7457 }
7458
7459 /* One-shot MSI handler - Chip automatically disables interrupt
7460  * after sending MSI so driver doesn't have to do it.
7461  */
7462 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
7463 {
7464         struct tg3_napi *tnapi = dev_id;
7465         struct tg3 *tp = tnapi->tp;
7466
7467         prefetch(tnapi->hw_status);
7468         if (tnapi->rx_rcb)
7469                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7470
7471         if (likely(!tg3_irq_sync(tp)))
7472                 napi_schedule(&tnapi->napi);
7473
7474         return IRQ_HANDLED;
7475 }
7476
7477 /* MSI ISR - No need to check for interrupt sharing and no need to
7478  * flush status block and interrupt mailbox. PCI ordering rules
7479  * guarantee that MSI will arrive after the status block.
7480  */
7481 static irqreturn_t tg3_msi(int irq, void *dev_id)
7482 {
7483         struct tg3_napi *tnapi = dev_id;
7484         struct tg3 *tp = tnapi->tp;
7485
7486         prefetch(tnapi->hw_status);
7487         if (tnapi->rx_rcb)
7488                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7489         /*
7490          * Writing any value to intr-mbox-0 clears PCI INTA# and
7491          * chip-internal interrupt pending events.
7492          * Writing non-zero to intr-mbox-0 additional tells the
7493          * NIC to stop sending us irqs, engaging "in-intr-handler"
7494          * event coalescing.
7495          */
7496         tw32_mailbox(tnapi->int_mbox, 0x00000001);
7497         if (likely(!tg3_irq_sync(tp)))
7498                 napi_schedule(&tnapi->napi);
7499
7500         return IRQ_RETVAL(1);
7501 }
7502
7503 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
7504 {
7505         struct tg3_napi *tnapi = dev_id;
7506         struct tg3 *tp = tnapi->tp;
7507         struct tg3_hw_status *sblk = tnapi->hw_status;
7508         unsigned int handled = 1;
7509
7510         /* In INTx mode, it is possible for the interrupt to arrive at
7511          * the CPU before the status block posted prior to the interrupt.
7512          * Reading the PCI State register will confirm whether the
7513          * interrupt is ours and will flush the status block.
7514          */
7515         if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
7516                 if (tg3_flag(tp, CHIP_RESETTING) ||
7517                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7518                         handled = 0;
7519                         goto out;
7520                 }
7521         }
7522
7523         /*
7524          * Writing any value to intr-mbox-0 clears PCI INTA# and
7525          * chip-internal interrupt pending events.
7526          * Writing non-zero to intr-mbox-0 additional tells the
7527          * NIC to stop sending us irqs, engaging "in-intr-handler"
7528          * event coalescing.
7529          *
7530          * Flush the mailbox to de-assert the IRQ immediately to prevent
7531          * spurious interrupts.  The flush impacts performance but
7532          * excessive spurious interrupts can be worse in some cases.
7533          */
7534         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7535         if (tg3_irq_sync(tp))
7536                 goto out;
7537         sblk->status &= ~SD_STATUS_UPDATED;
7538         if (likely(tg3_has_work(tnapi))) {
7539                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7540                 napi_schedule(&tnapi->napi);
7541         } else {
7542                 /* No work, shared interrupt perhaps?  re-enable
7543                  * interrupts, and flush that PCI write
7544                  */
7545                 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
7546                                0x00000000);
7547         }
7548 out:
7549         return IRQ_RETVAL(handled);
7550 }
7551
7552 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
7553 {
7554         struct tg3_napi *tnapi = dev_id;
7555         struct tg3 *tp = tnapi->tp;
7556         struct tg3_hw_status *sblk = tnapi->hw_status;
7557         unsigned int handled = 1;
7558
7559         /* In INTx mode, it is possible for the interrupt to arrive at
7560          * the CPU before the status block posted prior to the interrupt.
7561          * Reading the PCI State register will confirm whether the
7562          * interrupt is ours and will flush the status block.
7563          */
7564         if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
7565                 if (tg3_flag(tp, CHIP_RESETTING) ||
7566                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7567                         handled = 0;
7568                         goto out;
7569                 }
7570         }
7571
7572         /*
7573          * writing any value to intr-mbox-0 clears PCI INTA# and
7574          * chip-internal interrupt pending events.
7575          * writing non-zero to intr-mbox-0 additional tells the
7576          * NIC to stop sending us irqs, engaging "in-intr-handler"
7577          * event coalescing.
7578          *
7579          * Flush the mailbox to de-assert the IRQ immediately to prevent
7580          * spurious interrupts.  The flush impacts performance but
7581          * excessive spurious interrupts can be worse in some cases.
7582          */
7583         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7584
7585         /*
7586          * In a shared interrupt configuration, sometimes other devices'
7587          * interrupts will scream.  We record the current status tag here
7588          * so that the above check can report that the screaming interrupts
7589          * are unhandled.  Eventually they will be silenced.
7590          */
7591         tnapi->last_irq_tag = sblk->status_tag;
7592
7593         if (tg3_irq_sync(tp))
7594                 goto out;
7595
7596         prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7597
7598         napi_schedule(&tnapi->napi);
7599
7600 out:
7601         return IRQ_RETVAL(handled);
7602 }
7603
7604 /* ISR for interrupt test */
7605 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7606 {
7607         struct tg3_napi *tnapi = dev_id;
7608         struct tg3 *tp = tnapi->tp;
7609         struct tg3_hw_status *sblk = tnapi->hw_status;
7610
7611         if ((sblk->status & SD_STATUS_UPDATED) ||
7612             !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7613                 tg3_disable_ints(tp);
7614                 return IRQ_RETVAL(1);
7615         }
7616         return IRQ_RETVAL(0);
7617 }
7618
7619 #ifdef CONFIG_NET_POLL_CONTROLLER
7620 static void tg3_poll_controller(struct net_device *dev)
7621 {
7622         int i;
7623         struct tg3 *tp = netdev_priv(dev);
7624
7625         if (tg3_irq_sync(tp))
7626                 return;
7627
7628         for (i = 0; i < tp->irq_cnt; i++)
7629                 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
7630 }
7631 #endif
7632
7633 static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue)
7634 {
7635         struct tg3 *tp = netdev_priv(dev);
7636
7637         if (netif_msg_tx_err(tp)) {
7638                 netdev_err(dev, "transmit timed out, resetting\n");
7639                 tg3_dump_state(tp);
7640         }
7641
7642         tg3_reset_task_schedule(tp);
7643 }
7644
7645 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
7646 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7647 {
7648         u32 base = (u32) mapping & 0xffffffff;
7649
7650         return base + len + 8 < base;
7651 }
7652
7653 /* Test for TSO DMA buffers that cross into regions which are within MSS bytes
7654  * of any 4GB boundaries: 4G, 8G, etc
7655  */
7656 static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7657                                            u32 len, u32 mss)
7658 {
7659         if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
7660                 u32 base = (u32) mapping & 0xffffffff;
7661
7662                 return ((base + len + (mss & 0x3fff)) < base);
7663         }
7664         return 0;
7665 }
7666
7667 /* Test for DMA addresses > 40-bit */
7668 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7669                                           int len)
7670 {
7671 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
7672         if (tg3_flag(tp, 40BIT_DMA_BUG))
7673                 return ((u64) mapping + len) > DMA_BIT_MASK(40);
7674         return 0;
7675 #else
7676         return 0;
7677 #endif
7678 }
7679
7680 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7681                                  dma_addr_t mapping, u32 len, u32 flags,
7682                                  u32 mss, u32 vlan)
7683 {
7684         txbd->addr_hi = ((u64) mapping >> 32);
7685         txbd->addr_lo = ((u64) mapping & 0xffffffff);
7686         txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7687         txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7688 }
7689
7690 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7691                             dma_addr_t map, u32 len, u32 flags,
7692                             u32 mss, u32 vlan)
7693 {
7694         struct tg3 *tp = tnapi->tp;
7695         bool hwbug = false;
7696
7697         if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7698                 hwbug = true;
7699
7700         if (tg3_4g_overflow_test(map, len))
7701                 hwbug = true;
7702
7703         if (tg3_4g_tso_overflow_test(tp, map, len, mss))
7704                 hwbug = true;
7705
7706         if (tg3_40bit_overflow_test(tp, map, len))
7707                 hwbug = true;
7708
7709         if (tp->dma_limit) {
7710                 u32 prvidx = *entry;
7711                 u32 tmp_flag = flags & ~TXD_FLAG_END;
7712                 while (len > tp->dma_limit && *budget) {
7713                         u32 frag_len = tp->dma_limit;
7714                         len -= tp->dma_limit;
7715
7716                         /* Avoid the 8byte DMA problem */
7717                         if (len <= 8) {
7718                                 len += tp->dma_limit / 2;
7719                                 frag_len = tp->dma_limit / 2;
7720                         }
7721
7722                         tnapi->tx_buffers[*entry].fragmented = true;
7723
7724                         tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7725                                       frag_len, tmp_flag, mss, vlan);
7726                         *budget -= 1;
7727                         prvidx = *entry;
7728                         *entry = NEXT_TX(*entry);
7729
7730                         map += frag_len;
7731                 }
7732
7733                 if (len) {
7734                         if (*budget) {
7735                                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7736                                               len, flags, mss, vlan);
7737                                 *budget -= 1;
7738                                 *entry = NEXT_TX(*entry);
7739                         } else {
7740                                 hwbug = true;
7741                                 tnapi->tx_buffers[prvidx].fragmented = false;
7742                         }
7743                 }
7744         } else {
7745                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7746                               len, flags, mss, vlan);
7747                 *entry = NEXT_TX(*entry);
7748         }
7749
7750         return hwbug;
7751 }
7752
7753 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7754 {
7755         int i;
7756         struct sk_buff *skb;
7757         struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7758
7759         skb = txb->skb;
7760         txb->skb = NULL;
7761
7762         dma_unmap_single(&tnapi->tp->pdev->dev, dma_unmap_addr(txb, mapping),
7763                          skb_headlen(skb), DMA_TO_DEVICE);
7764
7765         while (txb->fragmented) {
7766                 txb->fragmented = false;
7767                 entry = NEXT_TX(entry);
7768                 txb = &tnapi->tx_buffers[entry];
7769         }
7770
7771         for (i = 0; i <= last; i++) {
7772                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7773
7774                 entry = NEXT_TX(entry);
7775                 txb = &tnapi->tx_buffers[entry];
7776
7777                 dma_unmap_page(&tnapi->tp->pdev->dev,
7778                                dma_unmap_addr(txb, mapping),
7779                                skb_frag_size(frag), DMA_TO_DEVICE);
7780
7781                 while (txb->fragmented) {
7782                         txb->fragmented = false;
7783                         entry = NEXT_TX(entry);
7784                         txb = &tnapi->tx_buffers[entry];
7785                 }
7786         }
7787 }
7788
7789 /* Workaround 4GB and 40-bit hardware DMA bugs. */
7790 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7791                                        struct sk_buff **pskb,
7792                                        u32 *entry, u32 *budget,
7793                                        u32 base_flags, u32 mss, u32 vlan)
7794 {
7795         struct tg3 *tp = tnapi->tp;
7796         struct sk_buff *new_skb, *skb = *pskb;
7797         dma_addr_t new_addr = 0;
7798         int ret = 0;
7799
7800         if (tg3_asic_rev(tp) != ASIC_REV_5701)
7801                 new_skb = skb_copy(skb, GFP_ATOMIC);
7802         else {
7803                 int more_headroom = 4 - ((unsigned long)skb->data & 3);
7804
7805                 new_skb = skb_copy_expand(skb,
7806                                           skb_headroom(skb) + more_headroom,
7807                                           skb_tailroom(skb), GFP_ATOMIC);
7808         }
7809
7810         if (!new_skb) {
7811                 ret = -1;
7812         } else {
7813                 /* New SKB is guaranteed to be linear. */
7814                 new_addr = dma_map_single(&tp->pdev->dev, new_skb->data,
7815                                           new_skb->len, DMA_TO_DEVICE);
7816                 /* Make sure the mapping succeeded */
7817                 if (dma_mapping_error(&tp->pdev->dev, new_addr)) {
7818                         dev_kfree_skb_any(new_skb);
7819                         ret = -1;
7820                 } else {
7821                         u32 save_entry = *entry;
7822
7823                         base_flags |= TXD_FLAG_END;
7824
7825                         tnapi->tx_buffers[*entry].skb = new_skb;
7826                         dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7827                                            mapping, new_addr);
7828
7829                         if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7830                                             new_skb->len, base_flags,
7831                                             mss, vlan)) {
7832                                 tg3_tx_skb_unmap(tnapi, save_entry, -1);
7833                                 dev_kfree_skb_any(new_skb);
7834                                 ret = -1;
7835                         }
7836                 }
7837         }
7838
7839         dev_consume_skb_any(skb);
7840         *pskb = new_skb;
7841         return ret;
7842 }
7843
7844 static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb)
7845 {
7846         /* Check if we will never have enough descriptors,
7847          * as gso_segs can be more than current ring size
7848          */
7849         return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3;
7850 }
7851
7852 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7853
7854 /* Use GSO to workaround all TSO packets that meet HW bug conditions
7855  * indicated in tg3_tx_frag_set()
7856  */
7857 static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
7858                        struct netdev_queue *txq, struct sk_buff *skb)
7859 {
7860         u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7861         struct sk_buff *segs, *seg, *next;
7862
7863         /* Estimate the number of fragments in the worst case */
7864         if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
7865                 netif_tx_stop_queue(txq);
7866
7867                 /* netif_tx_stop_queue() must be done before checking
7868                  * checking tx index in tg3_tx_avail() below, because in
7869                  * tg3_tx(), we update tx index before checking for
7870                  * netif_tx_queue_stopped().
7871                  */
7872                 smp_mb();
7873                 if (tg3_tx_avail(tnapi) <= frag_cnt_est)
7874                         return NETDEV_TX_BUSY;
7875
7876                 netif_tx_wake_queue(txq);
7877         }
7878
7879         segs = skb_gso_segment(skb, tp->dev->features &
7880                                     ~(NETIF_F_TSO | NETIF_F_TSO6));
7881         if (IS_ERR(segs) || !segs)
7882                 goto tg3_tso_bug_end;
7883
7884         skb_list_walk_safe(segs, seg, next) {
7885                 skb_mark_not_on_list(seg);
7886                 tg3_start_xmit(seg, tp->dev);
7887         }
7888
7889 tg3_tso_bug_end:
7890         dev_consume_skb_any(skb);
7891
7892         return NETDEV_TX_OK;
7893 }
7894
7895 /* hard_start_xmit for all devices */
7896 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7897 {
7898         struct tg3 *tp = netdev_priv(dev);
7899         u32 len, entry, base_flags, mss, vlan = 0;
7900         u32 budget;
7901         int i = -1, would_hit_hwbug;
7902         dma_addr_t mapping;
7903         struct tg3_napi *tnapi;
7904         struct netdev_queue *txq;
7905         unsigned int last;
7906         struct iphdr *iph = NULL;
7907         struct tcphdr *tcph = NULL;
7908         __sum16 tcp_csum = 0, ip_csum = 0;
7909         __be16 ip_tot_len = 0;
7910
7911         txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7912         tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7913         if (tg3_flag(tp, ENABLE_TSS))
7914                 tnapi++;
7915
7916         budget = tg3_tx_avail(tnapi);
7917
7918         /* We are running in BH disabled context with netif_tx_lock
7919          * and TX reclaim runs via tp->napi.poll inside of a software
7920          * interrupt.  Furthermore, IRQ processing runs lockless so we have
7921          * no IRQ context deadlocks to worry about either.  Rejoice!
7922          */
7923         if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7924                 if (!netif_tx_queue_stopped(txq)) {
7925                         netif_tx_stop_queue(txq);
7926
7927                         /* This is a hard error, log it. */
7928                         netdev_err(dev,
7929                                    "BUG! Tx Ring full when queue awake!\n");
7930                 }
7931                 return NETDEV_TX_BUSY;
7932         }
7933
7934         entry = tnapi->tx_prod;
7935         base_flags = 0;
7936
7937         mss = skb_shinfo(skb)->gso_size;
7938         if (mss) {
7939                 u32 tcp_opt_len, hdr_len;
7940
7941                 if (skb_cow_head(skb, 0))
7942                         goto drop;
7943
7944                 iph = ip_hdr(skb);
7945                 tcp_opt_len = tcp_optlen(skb);
7946
7947                 hdr_len = skb_tcp_all_headers(skb) - ETH_HLEN;
7948
7949                 /* HW/FW can not correctly segment packets that have been
7950                  * vlan encapsulated.
7951                  */
7952                 if (skb->protocol == htons(ETH_P_8021Q) ||
7953                     skb->protocol == htons(ETH_P_8021AD)) {
7954                         if (tg3_tso_bug_gso_check(tnapi, skb))
7955                                 return tg3_tso_bug(tp, tnapi, txq, skb);
7956                         goto drop;
7957                 }
7958
7959                 if (!skb_is_gso_v6(skb)) {
7960                         if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7961                             tg3_flag(tp, TSO_BUG)) {
7962                                 if (tg3_tso_bug_gso_check(tnapi, skb))
7963                                         return tg3_tso_bug(tp, tnapi, txq, skb);
7964                                 goto drop;
7965                         }
7966                         ip_csum = iph->check;
7967                         ip_tot_len = iph->tot_len;
7968                         iph->check = 0;
7969                         iph->tot_len = htons(mss + hdr_len);
7970                 }
7971
7972                 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7973                                TXD_FLAG_CPU_POST_DMA);
7974
7975                 tcph = tcp_hdr(skb);
7976                 tcp_csum = tcph->check;
7977
7978                 if (tg3_flag(tp, HW_TSO_1) ||
7979                     tg3_flag(tp, HW_TSO_2) ||
7980                     tg3_flag(tp, HW_TSO_3)) {
7981                         tcph->check = 0;
7982                         base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7983                 } else {
7984                         tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
7985                                                          0, IPPROTO_TCP, 0);
7986                 }
7987
7988                 if (tg3_flag(tp, HW_TSO_3)) {
7989                         mss |= (hdr_len & 0xc) << 12;
7990                         if (hdr_len & 0x10)
7991                                 base_flags |= 0x00000010;
7992                         base_flags |= (hdr_len & 0x3e0) << 5;
7993                 } else if (tg3_flag(tp, HW_TSO_2))
7994                         mss |= hdr_len << 9;
7995                 else if (tg3_flag(tp, HW_TSO_1) ||
7996                          tg3_asic_rev(tp) == ASIC_REV_5705) {
7997                         if (tcp_opt_len || iph->ihl > 5) {
7998                                 int tsflags;
7999
8000                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8001                                 mss |= (tsflags << 11);
8002                         }
8003                 } else {
8004                         if (tcp_opt_len || iph->ihl > 5) {
8005                                 int tsflags;
8006
8007                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8008                                 base_flags |= tsflags << 12;
8009                         }
8010                 }
8011         } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
8012                 /* HW/FW can not correctly checksum packets that have been
8013                  * vlan encapsulated.
8014                  */
8015                 if (skb->protocol == htons(ETH_P_8021Q) ||
8016                     skb->protocol == htons(ETH_P_8021AD)) {
8017                         if (skb_checksum_help(skb))
8018                                 goto drop;
8019                 } else  {
8020                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
8021                 }
8022         }
8023
8024         if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
8025             !mss && skb->len > VLAN_ETH_FRAME_LEN)
8026                 base_flags |= TXD_FLAG_JMB_PKT;
8027
8028         if (skb_vlan_tag_present(skb)) {
8029                 base_flags |= TXD_FLAG_VLAN;
8030                 vlan = skb_vlan_tag_get(skb);
8031         }
8032
8033         if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
8034             tg3_flag(tp, TX_TSTAMP_EN)) {
8035                 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
8036                 base_flags |= TXD_FLAG_HWTSTAMP;
8037         }
8038
8039         len = skb_headlen(skb);
8040
8041         mapping = dma_map_single(&tp->pdev->dev, skb->data, len,
8042                                  DMA_TO_DEVICE);
8043         if (dma_mapping_error(&tp->pdev->dev, mapping))
8044                 goto drop;
8045
8046
8047         tnapi->tx_buffers[entry].skb = skb;
8048         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
8049
8050         would_hit_hwbug = 0;
8051
8052         if (tg3_flag(tp, 5701_DMA_BUG))
8053                 would_hit_hwbug = 1;
8054
8055         if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
8056                           ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
8057                             mss, vlan)) {
8058                 would_hit_hwbug = 1;
8059         } else if (skb_shinfo(skb)->nr_frags > 0) {
8060                 u32 tmp_mss = mss;
8061
8062                 if (!tg3_flag(tp, HW_TSO_1) &&
8063                     !tg3_flag(tp, HW_TSO_2) &&
8064                     !tg3_flag(tp, HW_TSO_3))
8065                         tmp_mss = 0;
8066
8067                 /* Now loop through additional data
8068                  * fragments, and queue them.
8069                  */
8070                 last = skb_shinfo(skb)->nr_frags - 1;
8071                 for (i = 0; i <= last; i++) {
8072                         skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
8073
8074                         len = skb_frag_size(frag);
8075                         mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
8076                                                    len, DMA_TO_DEVICE);
8077
8078                         tnapi->tx_buffers[entry].skb = NULL;
8079                         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
8080                                            mapping);
8081                         if (dma_mapping_error(&tp->pdev->dev, mapping))
8082                                 goto dma_error;
8083
8084                         if (!budget ||
8085                             tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
8086                                             len, base_flags |
8087                                             ((i == last) ? TXD_FLAG_END : 0),
8088                                             tmp_mss, vlan)) {
8089                                 would_hit_hwbug = 1;
8090                                 break;
8091                         }
8092                 }
8093         }
8094
8095         if (would_hit_hwbug) {
8096                 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
8097
8098                 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) {
8099                         /* If it's a TSO packet, do GSO instead of
8100                          * allocating and copying to a large linear SKB
8101                          */
8102                         if (ip_tot_len) {
8103                                 iph->check = ip_csum;
8104                                 iph->tot_len = ip_tot_len;
8105                         }
8106                         tcph->check = tcp_csum;
8107                         return tg3_tso_bug(tp, tnapi, txq, skb);
8108                 }
8109
8110                 /* If the workaround fails due to memory/mapping
8111                  * failure, silently drop this packet.
8112                  */
8113                 entry = tnapi->tx_prod;
8114                 budget = tg3_tx_avail(tnapi);
8115                 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
8116                                                 base_flags, mss, vlan))
8117                         goto drop_nofree;
8118         }
8119
8120         skb_tx_timestamp(skb);
8121         netdev_tx_sent_queue(txq, skb->len);
8122
8123         /* Sync BD data before updating mailbox */
8124         wmb();
8125
8126         tnapi->tx_prod = entry;
8127         if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
8128                 netif_tx_stop_queue(txq);
8129
8130                 /* netif_tx_stop_queue() must be done before checking
8131                  * checking tx index in tg3_tx_avail() below, because in
8132                  * tg3_tx(), we update tx index before checking for
8133                  * netif_tx_queue_stopped().
8134                  */
8135                 smp_mb();
8136                 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
8137                         netif_tx_wake_queue(txq);
8138         }
8139
8140         if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
8141                 /* Packets are ready, update Tx producer idx on card. */
8142                 tw32_tx_mbox(tnapi->prodmbox, entry);
8143         }
8144
8145         return NETDEV_TX_OK;
8146
8147 dma_error:
8148         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
8149         tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
8150 drop:
8151         dev_kfree_skb_any(skb);
8152 drop_nofree:
8153         tp->tx_dropped++;
8154         return NETDEV_TX_OK;
8155 }
8156
8157 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
8158 {
8159         if (enable) {
8160                 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
8161                                   MAC_MODE_PORT_MODE_MASK);
8162
8163                 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
8164
8165                 if (!tg3_flag(tp, 5705_PLUS))
8166                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
8167
8168                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
8169                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
8170                 else
8171                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
8172         } else {
8173                 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
8174
8175                 if (tg3_flag(tp, 5705_PLUS) ||
8176                     (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
8177                     tg3_asic_rev(tp) == ASIC_REV_5700)
8178                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
8179         }
8180
8181         tw32(MAC_MODE, tp->mac_mode);
8182         udelay(40);
8183 }
8184
8185 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
8186 {
8187         u32 val, bmcr, mac_mode, ptest = 0;
8188
8189         tg3_phy_toggle_apd(tp, false);
8190         tg3_phy_toggle_automdix(tp, false);
8191
8192         if (extlpbk && tg3_phy_set_extloopbk(tp))
8193                 return -EIO;
8194
8195         bmcr = BMCR_FULLDPLX;
8196         switch (speed) {
8197         case SPEED_10:
8198                 break;
8199         case SPEED_100:
8200                 bmcr |= BMCR_SPEED100;
8201                 break;
8202         case SPEED_1000:
8203         default:
8204                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
8205                         speed = SPEED_100;
8206                         bmcr |= BMCR_SPEED100;
8207                 } else {
8208                         speed = SPEED_1000;
8209                         bmcr |= BMCR_SPEED1000;
8210                 }
8211         }
8212
8213         if (extlpbk) {
8214                 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
8215                         tg3_readphy(tp, MII_CTRL1000, &val);
8216                         val |= CTL1000_AS_MASTER |
8217                                CTL1000_ENABLE_MASTER;
8218                         tg3_writephy(tp, MII_CTRL1000, val);
8219                 } else {
8220                         ptest = MII_TG3_FET_PTEST_TRIM_SEL |
8221                                 MII_TG3_FET_PTEST_TRIM_2;
8222                         tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
8223                 }
8224         } else
8225                 bmcr |= BMCR_LOOPBACK;
8226
8227         tg3_writephy(tp, MII_BMCR, bmcr);
8228
8229         /* The write needs to be flushed for the FETs */
8230         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
8231                 tg3_readphy(tp, MII_BMCR, &bmcr);
8232
8233         udelay(40);
8234
8235         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
8236             tg3_asic_rev(tp) == ASIC_REV_5785) {
8237                 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
8238                              MII_TG3_FET_PTEST_FRC_TX_LINK |
8239                              MII_TG3_FET_PTEST_FRC_TX_LOCK);
8240
8241                 /* The write needs to be flushed for the AC131 */
8242                 tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
8243         }
8244
8245         /* Reset to prevent losing 1st rx packet intermittently */
8246         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
8247             tg3_flag(tp, 5780_CLASS)) {
8248                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8249                 udelay(10);
8250                 tw32_f(MAC_RX_MODE, tp->rx_mode);
8251         }
8252
8253         mac_mode = tp->mac_mode &
8254                    ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
8255         if (speed == SPEED_1000)
8256                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
8257         else
8258                 mac_mode |= MAC_MODE_PORT_MODE_MII;
8259
8260         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
8261                 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
8262
8263                 if (masked_phy_id == TG3_PHY_ID_BCM5401)
8264                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
8265                 else if (masked_phy_id == TG3_PHY_ID_BCM5411)
8266                         mac_mode |= MAC_MODE_LINK_POLARITY;
8267
8268                 tg3_writephy(tp, MII_TG3_EXT_CTRL,
8269                              MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8270         }
8271
8272         tw32(MAC_MODE, mac_mode);
8273         udelay(40);
8274
8275         return 0;
8276 }
8277
8278 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
8279 {
8280         struct tg3 *tp = netdev_priv(dev);
8281
8282         if (features & NETIF_F_LOOPBACK) {
8283                 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
8284                         return;
8285
8286                 spin_lock_bh(&tp->lock);
8287                 tg3_mac_loopback(tp, true);
8288                 netif_carrier_on(tp->dev);
8289                 spin_unlock_bh(&tp->lock);
8290                 netdev_info(dev, "Internal MAC loopback mode enabled.\n");
8291         } else {
8292                 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
8293                         return;
8294
8295                 spin_lock_bh(&tp->lock);
8296                 tg3_mac_loopback(tp, false);
8297                 /* Force link status check */
8298                 tg3_setup_phy(tp, true);
8299                 spin_unlock_bh(&tp->lock);
8300                 netdev_info(dev, "Internal MAC loopback mode disabled.\n");
8301         }
8302 }
8303
8304 static netdev_features_t tg3_fix_features(struct net_device *dev,
8305         netdev_features_t features)
8306 {
8307         struct tg3 *tp = netdev_priv(dev);
8308
8309         if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
8310                 features &= ~NETIF_F_ALL_TSO;
8311
8312         return features;
8313 }
8314
8315 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
8316 {
8317         netdev_features_t changed = dev->features ^ features;
8318
8319         if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
8320                 tg3_set_loopback(dev, features);
8321
8322         return 0;
8323 }
8324
8325 static void tg3_rx_prodring_free(struct tg3 *tp,
8326                                  struct tg3_rx_prodring_set *tpr)
8327 {
8328         int i;
8329
8330         if (tpr != &tp->napi[0].prodring) {
8331                 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
8332                      i = (i + 1) & tp->rx_std_ring_mask)
8333                         tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8334                                         tp->rx_pkt_map_sz);
8335
8336                 if (tg3_flag(tp, JUMBO_CAPABLE)) {
8337                         for (i = tpr->rx_jmb_cons_idx;
8338                              i != tpr->rx_jmb_prod_idx;
8339                              i = (i + 1) & tp->rx_jmb_ring_mask) {
8340                                 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8341                                                 TG3_RX_JMB_MAP_SZ);
8342                         }
8343                 }
8344
8345                 return;
8346         }
8347
8348         for (i = 0; i <= tp->rx_std_ring_mask; i++)
8349                 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8350                                 tp->rx_pkt_map_sz);
8351
8352         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8353                 for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
8354                         tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8355                                         TG3_RX_JMB_MAP_SZ);
8356         }
8357 }
8358
8359 /* Initialize rx rings for packet processing.
8360  *
8361  * The chip has been shut down and the driver detached from
8362  * the networking, so no interrupts or new tx packets will
8363  * end up in the driver.  tp->{tx,}lock are held and thus
8364  * we may not sleep.
8365  */
8366 static int tg3_rx_prodring_alloc(struct tg3 *tp,
8367                                  struct tg3_rx_prodring_set *tpr)
8368 {
8369         u32 i, rx_pkt_dma_sz;
8370
8371         tpr->rx_std_cons_idx = 0;
8372         tpr->rx_std_prod_idx = 0;
8373         tpr->rx_jmb_cons_idx = 0;
8374         tpr->rx_jmb_prod_idx = 0;
8375
8376         if (tpr != &tp->napi[0].prodring) {
8377                 memset(&tpr->rx_std_buffers[0], 0,
8378                        TG3_RX_STD_BUFF_RING_SIZE(tp));
8379                 if (tpr->rx_jmb_buffers)
8380                         memset(&tpr->rx_jmb_buffers[0], 0,
8381                                TG3_RX_JMB_BUFF_RING_SIZE(tp));
8382                 goto done;
8383         }
8384
8385         /* Zero out all descriptors. */
8386         memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
8387
8388         rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
8389         if (tg3_flag(tp, 5780_CLASS) &&
8390             tp->dev->mtu > ETH_DATA_LEN)
8391                 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
8392         tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
8393
8394         /* Initialize invariants of the rings, we only set this
8395          * stuff once.  This works because the card does not
8396          * write into the rx buffer posting rings.
8397          */
8398         for (i = 0; i <= tp->rx_std_ring_mask; i++) {
8399                 struct tg3_rx_buffer_desc *rxd;
8400
8401                 rxd = &tpr->rx_std[i];
8402                 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
8403                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
8404                 rxd->opaque = (RXD_OPAQUE_RING_STD |
8405                                (i << RXD_OPAQUE_INDEX_SHIFT));
8406         }
8407
8408         /* Now allocate fresh SKBs for each rx ring. */
8409         for (i = 0; i < tp->rx_pending; i++) {
8410                 unsigned int frag_size;
8411
8412                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
8413                                       &frag_size) < 0) {
8414                         netdev_warn(tp->dev,
8415                                     "Using a smaller RX standard ring. Only "
8416                                     "%d out of %d buffers were allocated "
8417                                     "successfully\n", i, tp->rx_pending);
8418                         if (i == 0)
8419                                 goto initfail;
8420                         tp->rx_pending = i;
8421                         break;
8422                 }
8423         }
8424
8425         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8426                 goto done;
8427
8428         memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
8429
8430         if (!tg3_flag(tp, JUMBO_RING_ENABLE))
8431                 goto done;
8432
8433         for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
8434                 struct tg3_rx_buffer_desc *rxd;
8435
8436                 rxd = &tpr->rx_jmb[i].std;
8437                 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
8438                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
8439                                   RXD_FLAG_JUMBO;
8440                 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
8441                        (i << RXD_OPAQUE_INDEX_SHIFT));
8442         }
8443
8444         for (i = 0; i < tp->rx_jumbo_pending; i++) {
8445                 unsigned int frag_size;
8446
8447                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
8448                                       &frag_size) < 0) {
8449                         netdev_warn(tp->dev,
8450                                     "Using a smaller RX jumbo ring. Only %d "
8451                                     "out of %d buffers were allocated "
8452                                     "successfully\n", i, tp->rx_jumbo_pending);
8453                         if (i == 0)
8454                                 goto initfail;
8455                         tp->rx_jumbo_pending = i;
8456                         break;
8457                 }
8458         }
8459
8460 done:
8461         return 0;
8462
8463 initfail:
8464         tg3_rx_prodring_free(tp, tpr);
8465         return -ENOMEM;
8466 }
8467
8468 static void tg3_rx_prodring_fini(struct tg3 *tp,
8469                                  struct tg3_rx_prodring_set *tpr)
8470 {
8471         kfree(tpr->rx_std_buffers);
8472         tpr->rx_std_buffers = NULL;
8473         kfree(tpr->rx_jmb_buffers);
8474         tpr->rx_jmb_buffers = NULL;
8475         if (tpr->rx_std) {
8476                 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
8477                                   tpr->rx_std, tpr->rx_std_mapping);
8478                 tpr->rx_std = NULL;
8479         }
8480         if (tpr->rx_jmb) {
8481                 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
8482                                   tpr->rx_jmb, tpr->rx_jmb_mapping);
8483                 tpr->rx_jmb = NULL;
8484         }
8485 }
8486
8487 static int tg3_rx_prodring_init(struct tg3 *tp,
8488                                 struct tg3_rx_prodring_set *tpr)
8489 {
8490         tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
8491                                       GFP_KERNEL);
8492         if (!tpr->rx_std_buffers)
8493                 return -ENOMEM;
8494
8495         tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
8496                                          TG3_RX_STD_RING_BYTES(tp),
8497                                          &tpr->rx_std_mapping,
8498                                          GFP_KERNEL);
8499         if (!tpr->rx_std)
8500                 goto err_out;
8501
8502         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8503                 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
8504                                               GFP_KERNEL);
8505                 if (!tpr->rx_jmb_buffers)
8506                         goto err_out;
8507
8508                 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
8509                                                  TG3_RX_JMB_RING_BYTES(tp),
8510                                                  &tpr->rx_jmb_mapping,
8511                                                  GFP_KERNEL);
8512                 if (!tpr->rx_jmb)
8513                         goto err_out;
8514         }
8515
8516         return 0;
8517
8518 err_out:
8519         tg3_rx_prodring_fini(tp, tpr);
8520         return -ENOMEM;
8521 }
8522
8523 /* Free up pending packets in all rx/tx rings.
8524  *
8525  * The chip has been shut down and the driver detached from
8526  * the networking, so no interrupts or new tx packets will
8527  * end up in the driver.  tp->{tx,}lock is not held and we are not
8528  * in an interrupt context and thus may sleep.
8529  */
8530 static void tg3_free_rings(struct tg3 *tp)
8531 {
8532         int i, j;
8533
8534         for (j = 0; j < tp->irq_cnt; j++) {
8535                 struct tg3_napi *tnapi = &tp->napi[j];
8536
8537                 tg3_rx_prodring_free(tp, &tnapi->prodring);
8538
8539                 if (!tnapi->tx_buffers)
8540                         continue;
8541
8542                 for (i = 0; i < TG3_TX_RING_SIZE; i++) {
8543                         struct sk_buff *skb = tnapi->tx_buffers[i].skb;
8544
8545                         if (!skb)
8546                                 continue;
8547
8548                         tg3_tx_skb_unmap(tnapi, i,
8549                                          skb_shinfo(skb)->nr_frags - 1);
8550
8551                         dev_consume_skb_any(skb);
8552                 }
8553                 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
8554         }
8555 }
8556
8557 /* Initialize tx/rx rings for packet processing.
8558  *
8559  * The chip has been shut down and the driver detached from
8560  * the networking, so no interrupts or new tx packets will
8561  * end up in the driver.  tp->{tx,}lock are held and thus
8562  * we may not sleep.
8563  */
8564 static int tg3_init_rings(struct tg3 *tp)
8565 {
8566         int i;
8567
8568         /* Free up all the SKBs. */
8569         tg3_free_rings(tp);
8570
8571         for (i = 0; i < tp->irq_cnt; i++) {
8572                 struct tg3_napi *tnapi = &tp->napi[i];
8573
8574                 tnapi->last_tag = 0;
8575                 tnapi->last_irq_tag = 0;
8576                 tnapi->hw_status->status = 0;
8577                 tnapi->hw_status->status_tag = 0;
8578                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8579
8580                 tnapi->tx_prod = 0;
8581                 tnapi->tx_cons = 0;
8582                 if (tnapi->tx_ring)
8583                         memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
8584
8585                 tnapi->rx_rcb_ptr = 0;
8586                 if (tnapi->rx_rcb)
8587                         memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
8588
8589                 if (tnapi->prodring.rx_std &&
8590                     tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
8591                         tg3_free_rings(tp);
8592                         return -ENOMEM;
8593                 }
8594         }
8595
8596         return 0;
8597 }
8598
8599 static void tg3_mem_tx_release(struct tg3 *tp)
8600 {
8601         int i;
8602
8603         for (i = 0; i < tp->irq_max; i++) {
8604                 struct tg3_napi *tnapi = &tp->napi[i];
8605
8606                 if (tnapi->tx_ring) {
8607                         dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
8608                                 tnapi->tx_ring, tnapi->tx_desc_mapping);
8609                         tnapi->tx_ring = NULL;
8610                 }
8611
8612                 kfree(tnapi->tx_buffers);
8613                 tnapi->tx_buffers = NULL;
8614         }
8615 }
8616
8617 static int tg3_mem_tx_acquire(struct tg3 *tp)
8618 {
8619         int i;
8620         struct tg3_napi *tnapi = &tp->napi[0];
8621
8622         /* If multivector TSS is enabled, vector 0 does not handle
8623          * tx interrupts.  Don't allocate any resources for it.
8624          */
8625         if (tg3_flag(tp, ENABLE_TSS))
8626                 tnapi++;
8627
8628         for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
8629                 tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE,
8630                                             sizeof(struct tg3_tx_ring_info),
8631                                             GFP_KERNEL);
8632                 if (!tnapi->tx_buffers)
8633                         goto err_out;
8634
8635                 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
8636                                                     TG3_TX_RING_BYTES,
8637                                                     &tnapi->tx_desc_mapping,
8638                                                     GFP_KERNEL);
8639                 if (!tnapi->tx_ring)
8640                         goto err_out;
8641         }
8642
8643         return 0;
8644
8645 err_out:
8646         tg3_mem_tx_release(tp);
8647         return -ENOMEM;
8648 }
8649
8650 static void tg3_mem_rx_release(struct tg3 *tp)
8651 {
8652         int i;
8653
8654         for (i = 0; i < tp->irq_max; i++) {
8655                 struct tg3_napi *tnapi = &tp->napi[i];
8656
8657                 tg3_rx_prodring_fini(tp, &tnapi->prodring);
8658
8659                 if (!tnapi->rx_rcb)
8660                         continue;
8661
8662                 dma_free_coherent(&tp->pdev->dev,
8663                                   TG3_RX_RCB_RING_BYTES(tp),
8664                                   tnapi->rx_rcb,
8665                                   tnapi->rx_rcb_mapping);
8666                 tnapi->rx_rcb = NULL;
8667         }
8668 }
8669
8670 static int tg3_mem_rx_acquire(struct tg3 *tp)
8671 {
8672         unsigned int i, limit;
8673
8674         limit = tp->rxq_cnt;
8675
8676         /* If RSS is enabled, we need a (dummy) producer ring
8677          * set on vector zero.  This is the true hw prodring.
8678          */
8679         if (tg3_flag(tp, ENABLE_RSS))
8680                 limit++;
8681
8682         for (i = 0; i < limit; i++) {
8683                 struct tg3_napi *tnapi = &tp->napi[i];
8684
8685                 if (tg3_rx_prodring_init(tp, &tnapi->prodring))
8686                         goto err_out;
8687
8688                 /* If multivector RSS is enabled, vector 0
8689                  * does not handle rx or tx interrupts.
8690                  * Don't allocate any resources for it.
8691                  */
8692                 if (!i && tg3_flag(tp, ENABLE_RSS))
8693                         continue;
8694
8695                 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
8696                                                    TG3_RX_RCB_RING_BYTES(tp),
8697                                                    &tnapi->rx_rcb_mapping,
8698                                                    GFP_KERNEL);
8699                 if (!tnapi->rx_rcb)
8700                         goto err_out;
8701         }
8702
8703         return 0;
8704
8705 err_out:
8706         tg3_mem_rx_release(tp);
8707         return -ENOMEM;
8708 }
8709
8710 /*
8711  * Must not be invoked with interrupt sources disabled and
8712  * the hardware shutdown down.
8713  */
8714 static void tg3_free_consistent(struct tg3 *tp)
8715 {
8716         int i;
8717
8718         for (i = 0; i < tp->irq_cnt; i++) {
8719                 struct tg3_napi *tnapi = &tp->napi[i];
8720
8721                 if (tnapi->hw_status) {
8722                         dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8723                                           tnapi->hw_status,
8724                                           tnapi->status_mapping);
8725                         tnapi->hw_status = NULL;
8726                 }
8727         }
8728
8729         tg3_mem_rx_release(tp);
8730         tg3_mem_tx_release(tp);
8731
8732         /* tp->hw_stats can be referenced safely:
8733          *     1. under rtnl_lock
8734          *     2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set.
8735          */
8736         if (tp->hw_stats) {
8737                 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8738                                   tp->hw_stats, tp->stats_mapping);
8739                 tp->hw_stats = NULL;
8740         }
8741 }
8742
8743 /*
8744  * Must not be invoked with interrupt sources disabled and
8745  * the hardware shutdown down.  Can sleep.
8746  */
8747 static int tg3_alloc_consistent(struct tg3 *tp)
8748 {
8749         int i;
8750
8751         tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
8752                                           sizeof(struct tg3_hw_stats),
8753                                           &tp->stats_mapping, GFP_KERNEL);
8754         if (!tp->hw_stats)
8755                 goto err_out;
8756
8757         for (i = 0; i < tp->irq_cnt; i++) {
8758                 struct tg3_napi *tnapi = &tp->napi[i];
8759                 struct tg3_hw_status *sblk;
8760
8761                 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
8762                                                       TG3_HW_STATUS_SIZE,
8763                                                       &tnapi->status_mapping,
8764                                                       GFP_KERNEL);
8765                 if (!tnapi->hw_status)
8766                         goto err_out;
8767
8768                 sblk = tnapi->hw_status;
8769
8770                 if (tg3_flag(tp, ENABLE_RSS)) {
8771                         u16 *prodptr = NULL;
8772
8773                         /*
8774                          * When RSS is enabled, the status block format changes
8775                          * slightly.  The "rx_jumbo_consumer", "reserved",
8776                          * and "rx_mini_consumer" members get mapped to the
8777                          * other three rx return ring producer indexes.
8778                          */
8779                         switch (i) {
8780                         case 1:
8781                                 prodptr = &sblk->idx[0].rx_producer;
8782                                 break;
8783                         case 2:
8784                                 prodptr = &sblk->rx_jumbo_consumer;
8785                                 break;
8786                         case 3:
8787                                 prodptr = &sblk->reserved;
8788                                 break;
8789                         case 4:
8790                                 prodptr = &sblk->rx_mini_consumer;
8791                                 break;
8792                         }
8793                         tnapi->rx_rcb_prod_idx = prodptr;
8794                 } else {
8795                         tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8796                 }
8797         }
8798
8799         if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8800                 goto err_out;
8801
8802         return 0;
8803
8804 err_out:
8805         tg3_free_consistent(tp);
8806         return -ENOMEM;
8807 }
8808
8809 #define MAX_WAIT_CNT 1000
8810
8811 /* To stop a block, clear the enable bit and poll till it
8812  * clears.  tp->lock is held.
8813  */
8814 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent)
8815 {
8816         unsigned int i;
8817         u32 val;
8818
8819         if (tg3_flag(tp, 5705_PLUS)) {
8820                 switch (ofs) {
8821                 case RCVLSC_MODE:
8822                 case DMAC_MODE:
8823                 case MBFREE_MODE:
8824                 case BUFMGR_MODE:
8825                 case MEMARB_MODE:
8826                         /* We can't enable/disable these bits of the
8827                          * 5705/5750, just say success.
8828                          */
8829                         return 0;
8830
8831                 default:
8832                         break;
8833                 }
8834         }
8835
8836         val = tr32(ofs);
8837         val &= ~enable_bit;
8838         tw32_f(ofs, val);
8839
8840         for (i = 0; i < MAX_WAIT_CNT; i++) {
8841                 if (pci_channel_offline(tp->pdev)) {
8842                         dev_err(&tp->pdev->dev,
8843                                 "tg3_stop_block device offline, "
8844                                 "ofs=%lx enable_bit=%x\n",
8845                                 ofs, enable_bit);
8846                         return -ENODEV;
8847                 }
8848
8849                 udelay(100);
8850                 val = tr32(ofs);
8851                 if ((val & enable_bit) == 0)
8852                         break;
8853         }
8854
8855         if (i == MAX_WAIT_CNT && !silent) {
8856                 dev_err(&tp->pdev->dev,
8857                         "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8858                         ofs, enable_bit);
8859                 return -ENODEV;
8860         }
8861
8862         return 0;
8863 }
8864
8865 /* tp->lock is held. */
8866 static int tg3_abort_hw(struct tg3 *tp, bool silent)
8867 {
8868         int i, err;
8869
8870         tg3_disable_ints(tp);
8871
8872         if (pci_channel_offline(tp->pdev)) {
8873                 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE);
8874                 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8875                 err = -ENODEV;
8876                 goto err_no_dev;
8877         }
8878
8879         tp->rx_mode &= ~RX_MODE_ENABLE;
8880         tw32_f(MAC_RX_MODE, tp->rx_mode);
8881         udelay(10);
8882
8883         err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8884         err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8885         err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8886         err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8887         err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8888         err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8889
8890         err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8891         err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8892         err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8893         err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8894         err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8895         err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8896         err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8897
8898         tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8899         tw32_f(MAC_MODE, tp->mac_mode);
8900         udelay(40);
8901
8902         tp->tx_mode &= ~TX_MODE_ENABLE;
8903         tw32_f(MAC_TX_MODE, tp->tx_mode);
8904
8905         for (i = 0; i < MAX_WAIT_CNT; i++) {
8906                 udelay(100);
8907                 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8908                         break;
8909         }
8910         if (i >= MAX_WAIT_CNT) {
8911                 dev_err(&tp->pdev->dev,
8912                         "%s timed out, TX_MODE_ENABLE will not clear "
8913                         "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8914                 err |= -ENODEV;
8915         }
8916
8917         err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8918         err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8919         err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8920
8921         tw32(FTQ_RESET, 0xffffffff);
8922         tw32(FTQ_RESET, 0x00000000);
8923
8924         err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8925         err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8926
8927 err_no_dev:
8928         for (i = 0; i < tp->irq_cnt; i++) {
8929                 struct tg3_napi *tnapi = &tp->napi[i];
8930                 if (tnapi->hw_status)
8931                         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8932         }
8933
8934         return err;
8935 }
8936
8937 /* Save PCI command register before chip reset */
8938 static void tg3_save_pci_state(struct tg3 *tp)
8939 {
8940         pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8941 }
8942
8943 /* Restore PCI state after chip reset */
8944 static void tg3_restore_pci_state(struct tg3 *tp)
8945 {
8946         u32 val;
8947
8948         /* Re-enable indirect register accesses. */
8949         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8950                                tp->misc_host_ctrl);
8951
8952         /* Set MAX PCI retry to zero. */
8953         val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8954         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
8955             tg3_flag(tp, PCIX_MODE))
8956                 val |= PCISTATE_RETRY_SAME_DMA;
8957         /* Allow reads and writes to the APE register and memory space. */
8958         if (tg3_flag(tp, ENABLE_APE))
8959                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8960                        PCISTATE_ALLOW_APE_SHMEM_WR |
8961                        PCISTATE_ALLOW_APE_PSPACE_WR;
8962         pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8963
8964         pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8965
8966         if (!tg3_flag(tp, PCI_EXPRESS)) {
8967                 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8968                                       tp->pci_cacheline_sz);
8969                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8970                                       tp->pci_lat_timer);
8971         }
8972
8973         /* Make sure PCI-X relaxed ordering bit is clear. */
8974         if (tg3_flag(tp, PCIX_MODE)) {
8975                 u16 pcix_cmd;
8976
8977                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8978                                      &pcix_cmd);
8979                 pcix_cmd &= ~PCI_X_CMD_ERO;
8980                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8981                                       pcix_cmd);
8982         }
8983
8984         if (tg3_flag(tp, 5780_CLASS)) {
8985
8986                 /* Chip reset on 5780 will reset MSI enable bit,
8987                  * so need to restore it.
8988                  */
8989                 if (tg3_flag(tp, USING_MSI)) {
8990                         u16 ctrl;
8991
8992                         pci_read_config_word(tp->pdev,
8993                                              tp->msi_cap + PCI_MSI_FLAGS,
8994                                              &ctrl);
8995                         pci_write_config_word(tp->pdev,
8996                                               tp->msi_cap + PCI_MSI_FLAGS,
8997                                               ctrl | PCI_MSI_FLAGS_ENABLE);
8998                         val = tr32(MSGINT_MODE);
8999                         tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
9000                 }
9001         }
9002 }
9003
9004 static void tg3_override_clk(struct tg3 *tp)
9005 {
9006         u32 val;
9007
9008         switch (tg3_asic_rev(tp)) {
9009         case ASIC_REV_5717:
9010                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9011                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9012                      TG3_CPMU_MAC_ORIDE_ENABLE);
9013                 break;
9014
9015         case ASIC_REV_5719:
9016         case ASIC_REV_5720:
9017                 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9018                 break;
9019
9020         default:
9021                 return;
9022         }
9023 }
9024
9025 static void tg3_restore_clk(struct tg3 *tp)
9026 {
9027         u32 val;
9028
9029         switch (tg3_asic_rev(tp)) {
9030         case ASIC_REV_5717:
9031                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9032                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE,
9033                      val & ~TG3_CPMU_MAC_ORIDE_ENABLE);
9034                 break;
9035
9036         case ASIC_REV_5719:
9037         case ASIC_REV_5720:
9038                 val = tr32(TG3_CPMU_CLCK_ORIDE);
9039                 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9040                 break;
9041
9042         default:
9043                 return;
9044         }
9045 }
9046
9047 /* tp->lock is held. */
9048 static int tg3_chip_reset(struct tg3 *tp)
9049         __releases(tp->lock)
9050         __acquires(tp->lock)
9051 {
9052         u32 val;
9053         void (*write_op)(struct tg3 *, u32, u32);
9054         int i, err;
9055
9056         if (!pci_device_is_present(tp->pdev))
9057                 return -ENODEV;
9058
9059         tg3_nvram_lock(tp);
9060
9061         tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
9062
9063         /* No matching tg3_nvram_unlock() after this because
9064          * chip reset below will undo the nvram lock.
9065          */
9066         tp->nvram_lock_cnt = 0;
9067
9068         /* GRC_MISC_CFG core clock reset will clear the memory
9069          * enable bit in PCI register 4 and the MSI enable bit
9070          * on some chips, so we save relevant registers here.
9071          */
9072         tg3_save_pci_state(tp);
9073
9074         if (tg3_asic_rev(tp) == ASIC_REV_5752 ||
9075             tg3_flag(tp, 5755_PLUS))
9076                 tw32(GRC_FASTBOOT_PC, 0);
9077
9078         /*
9079          * We must avoid the readl() that normally takes place.
9080          * It locks machines, causes machine checks, and other
9081          * fun things.  So, temporarily disable the 5701
9082          * hardware workaround, while we do the reset.
9083          */
9084         write_op = tp->write32;
9085         if (write_op == tg3_write_flush_reg32)
9086                 tp->write32 = tg3_write32;
9087
9088         /* Prevent the irq handler from reading or writing PCI registers
9089          * during chip reset when the memory enable bit in the PCI command
9090          * register may be cleared.  The chip does not generate interrupt
9091          * at this time, but the irq handler may still be called due to irq
9092          * sharing or irqpoll.
9093          */
9094         tg3_flag_set(tp, CHIP_RESETTING);
9095         for (i = 0; i < tp->irq_cnt; i++) {
9096                 struct tg3_napi *tnapi = &tp->napi[i];
9097                 if (tnapi->hw_status) {
9098                         tnapi->hw_status->status = 0;
9099                         tnapi->hw_status->status_tag = 0;
9100                 }
9101                 tnapi->last_tag = 0;
9102                 tnapi->last_irq_tag = 0;
9103         }
9104         smp_mb();
9105
9106         tg3_full_unlock(tp);
9107
9108         for (i = 0; i < tp->irq_cnt; i++)
9109                 synchronize_irq(tp->napi[i].irq_vec);
9110
9111         tg3_full_lock(tp, 0);
9112
9113         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9114                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9115                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9116         }
9117
9118         /* do the reset */
9119         val = GRC_MISC_CFG_CORECLK_RESET;
9120
9121         if (tg3_flag(tp, PCI_EXPRESS)) {
9122                 /* Force PCIe 1.0a mode */
9123                 if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
9124                     !tg3_flag(tp, 57765_PLUS) &&
9125                     tr32(TG3_PCIE_PHY_TSTCTL) ==
9126                     (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
9127                         tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
9128
9129                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) {
9130                         tw32(GRC_MISC_CFG, (1 << 29));
9131                         val |= (1 << 29);
9132                 }
9133         }
9134
9135         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
9136                 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
9137                 tw32(GRC_VCPU_EXT_CTRL,
9138                      tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
9139         }
9140
9141         /* Set the clock to the highest frequency to avoid timeouts. With link
9142          * aware mode, the clock speed could be slow and bootcode does not
9143          * complete within the expected time. Override the clock to allow the
9144          * bootcode to finish sooner and then restore it.
9145          */
9146         tg3_override_clk(tp);
9147
9148         /* Manage gphy power for all CPMU absent PCIe devices. */
9149         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
9150                 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
9151
9152         tw32(GRC_MISC_CFG, val);
9153
9154         /* restore 5701 hardware bug workaround write method */
9155         tp->write32 = write_op;
9156
9157         /* Unfortunately, we have to delay before the PCI read back.
9158          * Some 575X chips even will not respond to a PCI cfg access
9159          * when the reset command is given to the chip.
9160          *
9161          * How do these hardware designers expect things to work
9162          * properly if the PCI write is posted for a long period
9163          * of time?  It is always necessary to have some method by
9164          * which a register read back can occur to push the write
9165          * out which does the reset.
9166          *
9167          * For most tg3 variants the trick below was working.
9168          * Ho hum...
9169          */
9170         udelay(120);
9171
9172         /* Flush PCI posted writes.  The normal MMIO registers
9173          * are inaccessible at this time so this is the only
9174          * way to make this reliably (actually, this is no longer
9175          * the case, see above).  I tried to use indirect
9176          * register read/write but this upset some 5701 variants.
9177          */
9178         pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
9179
9180         udelay(120);
9181
9182         if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
9183                 u16 val16;
9184
9185                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) {
9186                         int j;
9187                         u32 cfg_val;
9188
9189                         /* Wait for link training to complete.  */
9190                         for (j = 0; j < 5000; j++)
9191                                 udelay(100);
9192
9193                         pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
9194                         pci_write_config_dword(tp->pdev, 0xc4,
9195                                                cfg_val | (1 << 15));
9196                 }
9197
9198                 /* Clear the "no snoop" and "relaxed ordering" bits. */
9199                 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
9200                 /*
9201                  * Older PCIe devices only support the 128 byte
9202                  * MPS setting.  Enforce the restriction.
9203                  */
9204                 if (!tg3_flag(tp, CPMU_PRESENT))
9205                         val16 |= PCI_EXP_DEVCTL_PAYLOAD;
9206                 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
9207
9208                 /* Clear error status */
9209                 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
9210                                       PCI_EXP_DEVSTA_CED |
9211                                       PCI_EXP_DEVSTA_NFED |
9212                                       PCI_EXP_DEVSTA_FED |
9213                                       PCI_EXP_DEVSTA_URD);
9214         }
9215
9216         tg3_restore_pci_state(tp);
9217
9218         tg3_flag_clear(tp, CHIP_RESETTING);
9219         tg3_flag_clear(tp, ERROR_PROCESSED);
9220
9221         val = 0;
9222         if (tg3_flag(tp, 5780_CLASS))
9223                 val = tr32(MEMARB_MODE);
9224         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9225
9226         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) {
9227                 tg3_stop_fw(tp);
9228                 tw32(0x5000, 0x400);
9229         }
9230
9231         if (tg3_flag(tp, IS_SSB_CORE)) {
9232                 /*
9233                  * BCM4785: In order to avoid repercussions from using
9234                  * potentially defective internal ROM, stop the Rx RISC CPU,
9235                  * which is not required.
9236                  */
9237                 tg3_stop_fw(tp);
9238                 tg3_halt_cpu(tp, RX_CPU_BASE);
9239         }
9240
9241         err = tg3_poll_fw(tp);
9242         if (err)
9243                 return err;
9244
9245         tw32(GRC_MODE, tp->grc_mode);
9246
9247         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
9248                 val = tr32(0xc4);
9249
9250                 tw32(0xc4, val | (1 << 15));
9251         }
9252
9253         if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
9254             tg3_asic_rev(tp) == ASIC_REV_5705) {
9255                 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
9256                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0)
9257                         tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
9258                 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9259         }
9260
9261         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9262                 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
9263                 val = tp->mac_mode;
9264         } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9265                 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
9266                 val = tp->mac_mode;
9267         } else
9268                 val = 0;
9269
9270         tw32_f(MAC_MODE, val);
9271         udelay(40);
9272
9273         tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
9274
9275         tg3_mdio_start(tp);
9276
9277         if (tg3_flag(tp, PCI_EXPRESS) &&
9278             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
9279             tg3_asic_rev(tp) != ASIC_REV_5785 &&
9280             !tg3_flag(tp, 57765_PLUS)) {
9281                 val = tr32(0x7c00);
9282
9283                 tw32(0x7c00, val | (1 << 25));
9284         }
9285
9286         tg3_restore_clk(tp);
9287
9288         /* Increase the core clock speed to fix tx timeout issue for 5762
9289          * with 100Mbps link speed.
9290          */
9291         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
9292                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9293                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9294                      TG3_CPMU_MAC_ORIDE_ENABLE);
9295         }
9296
9297         /* Reprobe ASF enable state.  */
9298         tg3_flag_clear(tp, ENABLE_ASF);
9299         tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
9300                            TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
9301
9302         tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
9303         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9304         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9305                 u32 nic_cfg;
9306
9307                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9308                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9309                         tg3_flag_set(tp, ENABLE_ASF);
9310                         tp->last_event_jiffies = jiffies;
9311                         if (tg3_flag(tp, 5750_PLUS))
9312                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
9313
9314                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg);
9315                         if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK)
9316                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
9317                         if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID)
9318                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
9319                 }
9320         }
9321
9322         return 0;
9323 }
9324
9325 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
9326 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
9327 static void __tg3_set_rx_mode(struct net_device *);
9328
9329 /* tp->lock is held. */
9330 static int tg3_halt(struct tg3 *tp, int kind, bool silent)
9331 {
9332         int err;
9333
9334         tg3_stop_fw(tp);
9335
9336         tg3_write_sig_pre_reset(tp, kind);
9337
9338         tg3_abort_hw(tp, silent);
9339         err = tg3_chip_reset(tp);
9340
9341         __tg3_set_mac_addr(tp, false);
9342
9343         tg3_write_sig_legacy(tp, kind);
9344         tg3_write_sig_post_reset(tp, kind);
9345
9346         if (tp->hw_stats) {
9347                 /* Save the stats across chip resets... */
9348                 tg3_get_nstats(tp, &tp->net_stats_prev);
9349                 tg3_get_estats(tp, &tp->estats_prev);
9350
9351                 /* And make sure the next sample is new data */
9352                 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
9353         }
9354
9355         return err;
9356 }
9357
9358 static int tg3_set_mac_addr(struct net_device *dev, void *p)
9359 {
9360         struct tg3 *tp = netdev_priv(dev);
9361         struct sockaddr *addr = p;
9362         int err = 0;
9363         bool skip_mac_1 = false;
9364
9365         if (!is_valid_ether_addr(addr->sa_data))
9366                 return -EADDRNOTAVAIL;
9367
9368         eth_hw_addr_set(dev, addr->sa_data);
9369
9370         if (!netif_running(dev))
9371                 return 0;
9372
9373         if (tg3_flag(tp, ENABLE_ASF)) {
9374                 u32 addr0_high, addr0_low, addr1_high, addr1_low;
9375
9376                 addr0_high = tr32(MAC_ADDR_0_HIGH);
9377                 addr0_low = tr32(MAC_ADDR_0_LOW);
9378                 addr1_high = tr32(MAC_ADDR_1_HIGH);
9379                 addr1_low = tr32(MAC_ADDR_1_LOW);
9380
9381                 /* Skip MAC addr 1 if ASF is using it. */
9382                 if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
9383                     !(addr1_high == 0 && addr1_low == 0))
9384                         skip_mac_1 = true;
9385         }
9386         spin_lock_bh(&tp->lock);
9387         __tg3_set_mac_addr(tp, skip_mac_1);
9388         __tg3_set_rx_mode(dev);
9389         spin_unlock_bh(&tp->lock);
9390
9391         return err;
9392 }
9393
9394 /* tp->lock is held. */
9395 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
9396                            dma_addr_t mapping, u32 maxlen_flags,
9397                            u32 nic_addr)
9398 {
9399         tg3_write_mem(tp,
9400                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
9401                       ((u64) mapping >> 32));
9402         tg3_write_mem(tp,
9403                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
9404                       ((u64) mapping & 0xffffffff));
9405         tg3_write_mem(tp,
9406                       (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
9407                        maxlen_flags);
9408
9409         if (!tg3_flag(tp, 5705_PLUS))
9410                 tg3_write_mem(tp,
9411                               (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
9412                               nic_addr);
9413 }
9414
9415
9416 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9417 {
9418         int i = 0;
9419
9420         if (!tg3_flag(tp, ENABLE_TSS)) {
9421                 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
9422                 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
9423                 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
9424         } else {
9425                 tw32(HOSTCC_TXCOL_TICKS, 0);
9426                 tw32(HOSTCC_TXMAX_FRAMES, 0);
9427                 tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
9428
9429                 for (; i < tp->txq_cnt; i++) {
9430                         u32 reg;
9431
9432                         reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
9433                         tw32(reg, ec->tx_coalesce_usecs);
9434                         reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
9435                         tw32(reg, ec->tx_max_coalesced_frames);
9436                         reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
9437                         tw32(reg, ec->tx_max_coalesced_frames_irq);
9438                 }
9439         }
9440
9441         for (; i < tp->irq_max - 1; i++) {
9442                 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
9443                 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
9444                 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9445         }
9446 }
9447
9448 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9449 {
9450         int i = 0;
9451         u32 limit = tp->rxq_cnt;
9452
9453         if (!tg3_flag(tp, ENABLE_RSS)) {
9454                 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
9455                 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
9456                 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
9457                 limit--;
9458         } else {
9459                 tw32(HOSTCC_RXCOL_TICKS, 0);
9460                 tw32(HOSTCC_RXMAX_FRAMES, 0);
9461                 tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
9462         }
9463
9464         for (; i < limit; i++) {
9465                 u32 reg;
9466
9467                 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
9468                 tw32(reg, ec->rx_coalesce_usecs);
9469                 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
9470                 tw32(reg, ec->rx_max_coalesced_frames);
9471                 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
9472                 tw32(reg, ec->rx_max_coalesced_frames_irq);
9473         }
9474
9475         for (; i < tp->irq_max - 1; i++) {
9476                 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
9477                 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
9478                 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9479         }
9480 }
9481
9482 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
9483 {
9484         tg3_coal_tx_init(tp, ec);
9485         tg3_coal_rx_init(tp, ec);
9486
9487         if (!tg3_flag(tp, 5705_PLUS)) {
9488                 u32 val = ec->stats_block_coalesce_usecs;
9489
9490                 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
9491                 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
9492
9493                 if (!tp->link_up)
9494                         val = 0;
9495
9496                 tw32(HOSTCC_STAT_COAL_TICKS, val);
9497         }
9498 }
9499
9500 /* tp->lock is held. */
9501 static void tg3_tx_rcbs_disable(struct tg3 *tp)
9502 {
9503         u32 txrcb, limit;
9504
9505         /* Disable all transmit rings but the first. */
9506         if (!tg3_flag(tp, 5705_PLUS))
9507                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
9508         else if (tg3_flag(tp, 5717_PLUS))
9509                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
9510         else if (tg3_flag(tp, 57765_CLASS) ||
9511                  tg3_asic_rev(tp) == ASIC_REV_5762)
9512                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
9513         else
9514                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9515
9516         for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9517              txrcb < limit; txrcb += TG3_BDINFO_SIZE)
9518                 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
9519                               BDINFO_FLAGS_DISABLED);
9520 }
9521
9522 /* tp->lock is held. */
9523 static void tg3_tx_rcbs_init(struct tg3 *tp)
9524 {
9525         int i = 0;
9526         u32 txrcb = NIC_SRAM_SEND_RCB;
9527
9528         if (tg3_flag(tp, ENABLE_TSS))
9529                 i++;
9530
9531         for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) {
9532                 struct tg3_napi *tnapi = &tp->napi[i];
9533
9534                 if (!tnapi->tx_ring)
9535                         continue;
9536
9537                 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
9538                                (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
9539                                NIC_SRAM_TX_BUFFER_DESC);
9540         }
9541 }
9542
9543 /* tp->lock is held. */
9544 static void tg3_rx_ret_rcbs_disable(struct tg3 *tp)
9545 {
9546         u32 rxrcb, limit;
9547
9548         /* Disable all receive return rings but the first. */
9549         if (tg3_flag(tp, 5717_PLUS))
9550                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
9551         else if (!tg3_flag(tp, 5705_PLUS))
9552                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
9553         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9554                  tg3_asic_rev(tp) == ASIC_REV_5762 ||
9555                  tg3_flag(tp, 57765_CLASS))
9556                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
9557         else
9558                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9559
9560         for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9561              rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
9562                 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
9563                               BDINFO_FLAGS_DISABLED);
9564 }
9565
9566 /* tp->lock is held. */
9567 static void tg3_rx_ret_rcbs_init(struct tg3 *tp)
9568 {
9569         int i = 0;
9570         u32 rxrcb = NIC_SRAM_RCV_RET_RCB;
9571
9572         if (tg3_flag(tp, ENABLE_RSS))
9573                 i++;
9574
9575         for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) {
9576                 struct tg3_napi *tnapi = &tp->napi[i];
9577
9578                 if (!tnapi->rx_rcb)
9579                         continue;
9580
9581                 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
9582                                (tp->rx_ret_ring_mask + 1) <<
9583                                 BDINFO_FLAGS_MAXLEN_SHIFT, 0);
9584         }
9585 }
9586
9587 /* tp->lock is held. */
9588 static void tg3_rings_reset(struct tg3 *tp)
9589 {
9590         int i;
9591         u32 stblk;
9592         struct tg3_napi *tnapi = &tp->napi[0];
9593
9594         tg3_tx_rcbs_disable(tp);
9595
9596         tg3_rx_ret_rcbs_disable(tp);
9597
9598         /* Disable interrupts */
9599         tw32_mailbox_f(tp->napi[0].int_mbox, 1);
9600         tp->napi[0].chk_msi_cnt = 0;
9601         tp->napi[0].last_rx_cons = 0;
9602         tp->napi[0].last_tx_cons = 0;
9603
9604         /* Zero mailbox registers. */
9605         if (tg3_flag(tp, SUPPORT_MSIX)) {
9606                 for (i = 1; i < tp->irq_max; i++) {
9607                         tp->napi[i].tx_prod = 0;
9608                         tp->napi[i].tx_cons = 0;
9609                         if (tg3_flag(tp, ENABLE_TSS))
9610                                 tw32_mailbox(tp->napi[i].prodmbox, 0);
9611                         tw32_rx_mbox(tp->napi[i].consmbox, 0);
9612                         tw32_mailbox_f(tp->napi[i].int_mbox, 1);
9613                         tp->napi[i].chk_msi_cnt = 0;
9614                         tp->napi[i].last_rx_cons = 0;
9615                         tp->napi[i].last_tx_cons = 0;
9616                 }
9617                 if (!tg3_flag(tp, ENABLE_TSS))
9618                         tw32_mailbox(tp->napi[0].prodmbox, 0);
9619         } else {
9620                 tp->napi[0].tx_prod = 0;
9621                 tp->napi[0].tx_cons = 0;
9622                 tw32_mailbox(tp->napi[0].prodmbox, 0);
9623                 tw32_rx_mbox(tp->napi[0].consmbox, 0);
9624         }
9625
9626         /* Make sure the NIC-based send BD rings are disabled. */
9627         if (!tg3_flag(tp, 5705_PLUS)) {
9628                 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
9629                 for (i = 0; i < 16; i++)
9630                         tw32_tx_mbox(mbox + i * 8, 0);
9631         }
9632
9633         /* Clear status block in ram. */
9634         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9635
9636         /* Set status block DMA address */
9637         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9638              ((u64) tnapi->status_mapping >> 32));
9639         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9640              ((u64) tnapi->status_mapping & 0xffffffff));
9641
9642         stblk = HOSTCC_STATBLCK_RING1;
9643
9644         for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
9645                 u64 mapping = (u64)tnapi->status_mapping;
9646                 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
9647                 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
9648                 stblk += 8;
9649
9650                 /* Clear status block in ram. */
9651                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9652         }
9653
9654         tg3_tx_rcbs_init(tp);
9655         tg3_rx_ret_rcbs_init(tp);
9656 }
9657
9658 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
9659 {
9660         u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
9661
9662         if (!tg3_flag(tp, 5750_PLUS) ||
9663             tg3_flag(tp, 5780_CLASS) ||
9664             tg3_asic_rev(tp) == ASIC_REV_5750 ||
9665             tg3_asic_rev(tp) == ASIC_REV_5752 ||
9666             tg3_flag(tp, 57765_PLUS))
9667                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
9668         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9669                  tg3_asic_rev(tp) == ASIC_REV_5787)
9670                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
9671         else
9672                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
9673
9674         nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
9675         host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
9676
9677         val = min(nic_rep_thresh, host_rep_thresh);
9678         tw32(RCVBDI_STD_THRESH, val);
9679
9680         if (tg3_flag(tp, 57765_PLUS))
9681                 tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
9682
9683         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
9684                 return;
9685
9686         bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
9687
9688         host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
9689
9690         val = min(bdcache_maxcnt / 2, host_rep_thresh);
9691         tw32(RCVBDI_JUMBO_THRESH, val);
9692
9693         if (tg3_flag(tp, 57765_PLUS))
9694                 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
9695 }
9696
9697 static inline u32 calc_crc(unsigned char *buf, int len)
9698 {
9699         u32 reg;
9700         u32 tmp;
9701         int j, k;
9702
9703         reg = 0xffffffff;
9704
9705         for (j = 0; j < len; j++) {
9706                 reg ^= buf[j];
9707
9708                 for (k = 0; k < 8; k++) {
9709                         tmp = reg & 0x01;
9710
9711                         reg >>= 1;
9712
9713                         if (tmp)
9714                                 reg ^= CRC32_POLY_LE;
9715                 }
9716         }
9717
9718         return ~reg;
9719 }
9720
9721 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
9722 {
9723         /* accept or reject all multicast frames */
9724         tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
9725         tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
9726         tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
9727         tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
9728 }
9729
9730 static void __tg3_set_rx_mode(struct net_device *dev)
9731 {
9732         struct tg3 *tp = netdev_priv(dev);
9733         u32 rx_mode;
9734
9735         rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
9736                                   RX_MODE_KEEP_VLAN_TAG);
9737
9738 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
9739         /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
9740          * flag clear.
9741          */
9742         if (!tg3_flag(tp, ENABLE_ASF))
9743                 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
9744 #endif
9745
9746         if (dev->flags & IFF_PROMISC) {
9747                 /* Promiscuous mode. */
9748                 rx_mode |= RX_MODE_PROMISC;
9749         } else if (dev->flags & IFF_ALLMULTI) {
9750                 /* Accept all multicast. */
9751                 tg3_set_multi(tp, 1);
9752         } else if (netdev_mc_empty(dev)) {
9753                 /* Reject all multicast. */
9754                 tg3_set_multi(tp, 0);
9755         } else {
9756                 /* Accept one or more multicast(s). */
9757                 struct netdev_hw_addr *ha;
9758                 u32 mc_filter[4] = { 0, };
9759                 u32 regidx;
9760                 u32 bit;
9761                 u32 crc;
9762
9763                 netdev_for_each_mc_addr(ha, dev) {
9764                         crc = calc_crc(ha->addr, ETH_ALEN);
9765                         bit = ~crc & 0x7f;
9766                         regidx = (bit & 0x60) >> 5;
9767                         bit &= 0x1f;
9768                         mc_filter[regidx] |= (1 << bit);
9769                 }
9770
9771                 tw32(MAC_HASH_REG_0, mc_filter[0]);
9772                 tw32(MAC_HASH_REG_1, mc_filter[1]);
9773                 tw32(MAC_HASH_REG_2, mc_filter[2]);
9774                 tw32(MAC_HASH_REG_3, mc_filter[3]);
9775         }
9776
9777         if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) {
9778                 rx_mode |= RX_MODE_PROMISC;
9779         } else if (!(dev->flags & IFF_PROMISC)) {
9780                 /* Add all entries into to the mac addr filter list */
9781                 int i = 0;
9782                 struct netdev_hw_addr *ha;
9783
9784                 netdev_for_each_uc_addr(ha, dev) {
9785                         __tg3_set_one_mac_addr(tp, ha->addr,
9786                                                i + TG3_UCAST_ADDR_IDX(tp));
9787                         i++;
9788                 }
9789         }
9790
9791         if (rx_mode != tp->rx_mode) {
9792                 tp->rx_mode = rx_mode;
9793                 tw32_f(MAC_RX_MODE, rx_mode);
9794                 udelay(10);
9795         }
9796 }
9797
9798 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
9799 {
9800         int i;
9801
9802         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
9803                 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
9804 }
9805
9806 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
9807 {
9808         int i;
9809
9810         if (!tg3_flag(tp, SUPPORT_MSIX))
9811                 return;
9812
9813         if (tp->rxq_cnt == 1) {
9814                 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
9815                 return;
9816         }
9817
9818         /* Validate table against current IRQ count */
9819         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
9820                 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
9821                         break;
9822         }
9823
9824         if (i != TG3_RSS_INDIR_TBL_SIZE)
9825                 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
9826 }
9827
9828 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
9829 {
9830         int i = 0;
9831         u32 reg = MAC_RSS_INDIR_TBL_0;
9832
9833         while (i < TG3_RSS_INDIR_TBL_SIZE) {
9834                 u32 val = tp->rss_ind_tbl[i];
9835                 i++;
9836                 for (; i % 8; i++) {
9837                         val <<= 4;
9838                         val |= tp->rss_ind_tbl[i];
9839                 }
9840                 tw32(reg, val);
9841                 reg += 4;
9842         }
9843 }
9844
9845 static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp)
9846 {
9847         if (tg3_asic_rev(tp) == ASIC_REV_5719)
9848                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719;
9849         else
9850                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720;
9851 }
9852
9853 /* tp->lock is held. */
9854 static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
9855 {
9856         u32 val, rdmac_mode;
9857         int i, err, limit;
9858         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
9859
9860         tg3_disable_ints(tp);
9861
9862         tg3_stop_fw(tp);
9863
9864         tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
9865
9866         if (tg3_flag(tp, INIT_COMPLETE))
9867                 tg3_abort_hw(tp, 1);
9868
9869         if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
9870             !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) {
9871                 tg3_phy_pull_config(tp);
9872                 tg3_eee_pull_config(tp, NULL);
9873                 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
9874         }
9875
9876         /* Enable MAC control of LPI */
9877         if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
9878                 tg3_setup_eee(tp);
9879
9880         if (reset_phy)
9881                 tg3_phy_reset(tp);
9882
9883         err = tg3_chip_reset(tp);
9884         if (err)
9885                 return err;
9886
9887         tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9888
9889         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
9890                 val = tr32(TG3_CPMU_CTRL);
9891                 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9892                 tw32(TG3_CPMU_CTRL, val);
9893
9894                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9895                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9896                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9897                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9898
9899                 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9900                 val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9901                 val |= CPMU_LNK_AWARE_MACCLK_6_25;
9902                 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9903
9904                 val = tr32(TG3_CPMU_HST_ACC);
9905                 val &= ~CPMU_HST_ACC_MACCLK_MASK;
9906                 val |= CPMU_HST_ACC_MACCLK_6_25;
9907                 tw32(TG3_CPMU_HST_ACC, val);
9908         }
9909
9910         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9911                 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9912                 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9913                        PCIE_PWR_MGMT_L1_THRESH_4MS;
9914                 tw32(PCIE_PWR_MGMT_THRESH, val);
9915
9916                 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9917                 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9918
9919                 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9920
9921                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9922                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9923         }
9924
9925         if (tg3_flag(tp, L1PLLPD_EN)) {
9926                 u32 grc_mode = tr32(GRC_MODE);
9927
9928                 /* Access the lower 1K of PL PCIE block registers. */
9929                 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9930                 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9931
9932                 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9933                 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9934                      val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9935
9936                 tw32(GRC_MODE, grc_mode);
9937         }
9938
9939         if (tg3_flag(tp, 57765_CLASS)) {
9940                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
9941                         u32 grc_mode = tr32(GRC_MODE);
9942
9943                         /* Access the lower 1K of PL PCIE block registers. */
9944                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9945                         tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9946
9947                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9948                                    TG3_PCIE_PL_LO_PHYCTL5);
9949                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9950                              val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9951
9952                         tw32(GRC_MODE, grc_mode);
9953                 }
9954
9955                 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) {
9956                         u32 grc_mode;
9957
9958                         /* Fix transmit hangs */
9959                         val = tr32(TG3_CPMU_PADRNG_CTL);
9960                         val |= TG3_CPMU_PADRNG_CTL_RDIV2;
9961                         tw32(TG3_CPMU_PADRNG_CTL, val);
9962
9963                         grc_mode = tr32(GRC_MODE);
9964
9965                         /* Access the lower 1K of DL PCIE block registers. */
9966                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9967                         tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9968
9969                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9970                                    TG3_PCIE_DL_LO_FTSMAX);
9971                         val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
9972                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
9973                              val | TG3_PCIE_DL_LO_FTSMAX_VAL);
9974
9975                         tw32(GRC_MODE, grc_mode);
9976                 }
9977
9978                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9979                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9980                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9981                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9982         }
9983
9984         /* This works around an issue with Athlon chipsets on
9985          * B3 tigon3 silicon.  This bit has no effect on any
9986          * other revision.  But do not set this on PCI Express
9987          * chips and don't even touch the clocks if the CPMU is present.
9988          */
9989         if (!tg3_flag(tp, CPMU_PRESENT)) {
9990                 if (!tg3_flag(tp, PCI_EXPRESS))
9991                         tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
9992                 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9993         }
9994
9995         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
9996             tg3_flag(tp, PCIX_MODE)) {
9997                 val = tr32(TG3PCI_PCISTATE);
9998                 val |= PCISTATE_RETRY_SAME_DMA;
9999                 tw32(TG3PCI_PCISTATE, val);
10000         }
10001
10002         if (tg3_flag(tp, ENABLE_APE)) {
10003                 /* Allow reads and writes to the
10004                  * APE register and memory space.
10005                  */
10006                 val = tr32(TG3PCI_PCISTATE);
10007                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
10008                        PCISTATE_ALLOW_APE_SHMEM_WR |
10009                        PCISTATE_ALLOW_APE_PSPACE_WR;
10010                 tw32(TG3PCI_PCISTATE, val);
10011         }
10012
10013         if (tg3_chip_rev(tp) == CHIPREV_5704_BX) {
10014                 /* Enable some hw fixes.  */
10015                 val = tr32(TG3PCI_MSI_DATA);
10016                 val |= (1 << 26) | (1 << 28) | (1 << 29);
10017                 tw32(TG3PCI_MSI_DATA, val);
10018         }
10019
10020         /* Descriptor ring init may make accesses to the
10021          * NIC SRAM area to setup the TX descriptors, so we
10022          * can only do this after the hardware has been
10023          * successfully reset.
10024          */
10025         err = tg3_init_rings(tp);
10026         if (err)
10027                 return err;
10028
10029         if (tg3_flag(tp, 57765_PLUS)) {
10030                 val = tr32(TG3PCI_DMA_RW_CTRL) &
10031                       ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
10032                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
10033                         val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
10034                 if (!tg3_flag(tp, 57765_CLASS) &&
10035                     tg3_asic_rev(tp) != ASIC_REV_5717 &&
10036                     tg3_asic_rev(tp) != ASIC_REV_5762)
10037                         val |= DMA_RWCTRL_TAGGED_STAT_WA;
10038                 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
10039         } else if (tg3_asic_rev(tp) != ASIC_REV_5784 &&
10040                    tg3_asic_rev(tp) != ASIC_REV_5761) {
10041                 /* This value is determined during the probe time DMA
10042                  * engine test, tg3_test_dma.
10043                  */
10044                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10045         }
10046
10047         tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
10048                           GRC_MODE_4X_NIC_SEND_RINGS |
10049                           GRC_MODE_NO_TX_PHDR_CSUM |
10050                           GRC_MODE_NO_RX_PHDR_CSUM);
10051         tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
10052
10053         /* Pseudo-header checksum is done by hardware logic and not
10054          * the offload processers, so make the chip do the pseudo-
10055          * header checksums on receive.  For transmit it is more
10056          * convenient to do the pseudo-header checksum in software
10057          * as Linux does that on transmit for us in all cases.
10058          */
10059         tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
10060
10061         val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
10062         if (tp->rxptpctl)
10063                 tw32(TG3_RX_PTP_CTL,
10064                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
10065
10066         if (tg3_flag(tp, PTP_CAPABLE))
10067                 val |= GRC_MODE_TIME_SYNC_ENABLE;
10068
10069         tw32(GRC_MODE, tp->grc_mode | val);
10070
10071         /* On one of the AMD platform, MRRS is restricted to 4000 because of
10072          * south bridge limitation. As a workaround, Driver is setting MRRS
10073          * to 2048 instead of default 4096.
10074          */
10075         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
10076             tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) {
10077                 val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK;
10078                 tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048);
10079         }
10080
10081         /* Setup the timer prescalar register.  Clock is always 66Mhz. */
10082         val = tr32(GRC_MISC_CFG);
10083         val &= ~0xff;
10084         val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
10085         tw32(GRC_MISC_CFG, val);
10086
10087         /* Initialize MBUF/DESC pool. */
10088         if (tg3_flag(tp, 5750_PLUS)) {
10089                 /* Do nothing.  */
10090         } else if (tg3_asic_rev(tp) != ASIC_REV_5705) {
10091                 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
10092                 if (tg3_asic_rev(tp) == ASIC_REV_5704)
10093                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
10094                 else
10095                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
10096                 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
10097                 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
10098         } else if (tg3_flag(tp, TSO_CAPABLE)) {
10099                 int fw_len;
10100
10101                 fw_len = tp->fw_len;
10102                 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
10103                 tw32(BUFMGR_MB_POOL_ADDR,
10104                      NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
10105                 tw32(BUFMGR_MB_POOL_SIZE,
10106                      NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
10107         }
10108
10109         if (tp->dev->mtu <= ETH_DATA_LEN) {
10110                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10111                      tp->bufmgr_config.mbuf_read_dma_low_water);
10112                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10113                      tp->bufmgr_config.mbuf_mac_rx_low_water);
10114                 tw32(BUFMGR_MB_HIGH_WATER,
10115                      tp->bufmgr_config.mbuf_high_water);
10116         } else {
10117                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10118                      tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
10119                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10120                      tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
10121                 tw32(BUFMGR_MB_HIGH_WATER,
10122                      tp->bufmgr_config.mbuf_high_water_jumbo);
10123         }
10124         tw32(BUFMGR_DMA_LOW_WATER,
10125              tp->bufmgr_config.dma_low_water);
10126         tw32(BUFMGR_DMA_HIGH_WATER,
10127              tp->bufmgr_config.dma_high_water);
10128
10129         val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
10130         if (tg3_asic_rev(tp) == ASIC_REV_5719)
10131                 val |= BUFMGR_MODE_NO_TX_UNDERRUN;
10132         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10133             tg3_asic_rev(tp) == ASIC_REV_5762 ||
10134             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10135             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0)
10136                 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
10137         tw32(BUFMGR_MODE, val);
10138         for (i = 0; i < 2000; i++) {
10139                 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
10140                         break;
10141                 udelay(10);
10142         }
10143         if (i >= 2000) {
10144                 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
10145                 return -ENODEV;
10146         }
10147
10148         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1)
10149                 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
10150
10151         tg3_setup_rxbd_thresholds(tp);
10152
10153         /* Initialize TG3_BDINFO's at:
10154          *  RCVDBDI_STD_BD:     standard eth size rx ring
10155          *  RCVDBDI_JUMBO_BD:   jumbo frame rx ring
10156          *  RCVDBDI_MINI_BD:    small frame rx ring (??? does not work)
10157          *
10158          * like so:
10159          *  TG3_BDINFO_HOST_ADDR:       high/low parts of DMA address of ring
10160          *  TG3_BDINFO_MAXLEN_FLAGS:    (rx max buffer size << 16) |
10161          *                              ring attribute flags
10162          *  TG3_BDINFO_NIC_ADDR:        location of descriptors in nic SRAM
10163          *
10164          * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
10165          * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
10166          *
10167          * The size of each ring is fixed in the firmware, but the location is
10168          * configurable.
10169          */
10170         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10171              ((u64) tpr->rx_std_mapping >> 32));
10172         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10173              ((u64) tpr->rx_std_mapping & 0xffffffff));
10174         if (!tg3_flag(tp, 5717_PLUS))
10175                 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
10176                      NIC_SRAM_RX_BUFFER_DESC);
10177
10178         /* Disable the mini ring */
10179         if (!tg3_flag(tp, 5705_PLUS))
10180                 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
10181                      BDINFO_FLAGS_DISABLED);
10182
10183         /* Program the jumbo buffer descriptor ring control
10184          * blocks on those devices that have them.
10185          */
10186         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10187             (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
10188
10189                 if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
10190                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10191                              ((u64) tpr->rx_jmb_mapping >> 32));
10192                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10193                              ((u64) tpr->rx_jmb_mapping & 0xffffffff));
10194                         val = TG3_RX_JMB_RING_SIZE(tp) <<
10195                               BDINFO_FLAGS_MAXLEN_SHIFT;
10196                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10197                              val | BDINFO_FLAGS_USE_EXT_RECV);
10198                         if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
10199                             tg3_flag(tp, 57765_CLASS) ||
10200                             tg3_asic_rev(tp) == ASIC_REV_5762)
10201                                 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
10202                                      NIC_SRAM_RX_JUMBO_BUFFER_DESC);
10203                 } else {
10204                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10205                              BDINFO_FLAGS_DISABLED);
10206                 }
10207
10208                 if (tg3_flag(tp, 57765_PLUS)) {
10209                         val = TG3_RX_STD_RING_SIZE(tp);
10210                         val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
10211                         val |= (TG3_RX_STD_DMA_SZ << 2);
10212                 } else
10213                         val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
10214         } else
10215                 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
10216
10217         tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
10218
10219         tpr->rx_std_prod_idx = tp->rx_pending;
10220         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
10221
10222         tpr->rx_jmb_prod_idx =
10223                 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
10224         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
10225
10226         tg3_rings_reset(tp);
10227
10228         /* Initialize MAC address and backoff seed. */
10229         __tg3_set_mac_addr(tp, false);
10230
10231         /* MTU + ethernet header + FCS + optional VLAN tag */
10232         tw32(MAC_RX_MTU_SIZE,
10233              tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
10234
10235         /* The slot time is changed by tg3_setup_phy if we
10236          * run at gigabit with half duplex.
10237          */
10238         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
10239               (6 << TX_LENGTHS_IPG_SHIFT) |
10240               (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
10241
10242         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10243             tg3_asic_rev(tp) == ASIC_REV_5762)
10244                 val |= tr32(MAC_TX_LENGTHS) &
10245                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
10246                         TX_LENGTHS_CNT_DWN_VAL_MSK);
10247
10248         tw32(MAC_TX_LENGTHS, val);
10249
10250         /* Receive rules. */
10251         tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
10252         tw32(RCVLPC_CONFIG, 0x0181);
10253
10254         /* Calculate RDMAC_MODE setting early, we need it to determine
10255          * the RCVLPC_STATE_ENABLE mask.
10256          */
10257         rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
10258                       RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
10259                       RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
10260                       RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
10261                       RDMAC_MODE_LNGREAD_ENAB);
10262
10263         if (tg3_asic_rev(tp) == ASIC_REV_5717)
10264                 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
10265
10266         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
10267             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10268             tg3_asic_rev(tp) == ASIC_REV_57780)
10269                 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
10270                               RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
10271                               RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
10272
10273         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10274             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10275                 if (tg3_flag(tp, TSO_CAPABLE)) {
10276                         rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
10277                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10278                            !tg3_flag(tp, IS_5788)) {
10279                         rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10280                 }
10281         }
10282
10283         if (tg3_flag(tp, PCI_EXPRESS))
10284                 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10285
10286         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10287                 tp->dma_limit = 0;
10288                 if (tp->dev->mtu <= ETH_DATA_LEN) {
10289                         rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR;
10290                         tp->dma_limit = TG3_TX_BD_DMA_MAX_2K;
10291                 }
10292         }
10293
10294         if (tg3_flag(tp, HW_TSO_1) ||
10295             tg3_flag(tp, HW_TSO_2) ||
10296             tg3_flag(tp, HW_TSO_3))
10297                 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
10298
10299         if (tg3_flag(tp, 57765_PLUS) ||
10300             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10301             tg3_asic_rev(tp) == ASIC_REV_57780)
10302                 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
10303
10304         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10305             tg3_asic_rev(tp) == ASIC_REV_5762)
10306                 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
10307
10308         if (tg3_asic_rev(tp) == ASIC_REV_5761 ||
10309             tg3_asic_rev(tp) == ASIC_REV_5784 ||
10310             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10311             tg3_asic_rev(tp) == ASIC_REV_57780 ||
10312             tg3_flag(tp, 57765_PLUS)) {
10313                 u32 tgtreg;
10314
10315                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10316                         tgtreg = TG3_RDMA_RSRVCTRL_REG2;
10317                 else
10318                         tgtreg = TG3_RDMA_RSRVCTRL_REG;
10319
10320                 val = tr32(tgtreg);
10321                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10322                     tg3_asic_rev(tp) == ASIC_REV_5762) {
10323                         val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
10324                                  TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
10325                                  TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
10326                         val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
10327                                TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
10328                                TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
10329                 }
10330                 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
10331         }
10332
10333         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10334             tg3_asic_rev(tp) == ASIC_REV_5720 ||
10335             tg3_asic_rev(tp) == ASIC_REV_5762) {
10336                 u32 tgtreg;
10337
10338                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10339                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2;
10340                 else
10341                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL;
10342
10343                 val = tr32(tgtreg);
10344                 tw32(tgtreg, val |
10345                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
10346                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
10347         }
10348
10349         /* Receive/send statistics. */
10350         if (tg3_flag(tp, 5750_PLUS)) {
10351                 val = tr32(RCVLPC_STATS_ENABLE);
10352                 val &= ~RCVLPC_STATSENAB_DACK_FIX;
10353                 tw32(RCVLPC_STATS_ENABLE, val);
10354         } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
10355                    tg3_flag(tp, TSO_CAPABLE)) {
10356                 val = tr32(RCVLPC_STATS_ENABLE);
10357                 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
10358                 tw32(RCVLPC_STATS_ENABLE, val);
10359         } else {
10360                 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
10361         }
10362         tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
10363         tw32(SNDDATAI_STATSENAB, 0xffffff);
10364         tw32(SNDDATAI_STATSCTRL,
10365              (SNDDATAI_SCTRL_ENABLE |
10366               SNDDATAI_SCTRL_FASTUPD));
10367
10368         /* Setup host coalescing engine. */
10369         tw32(HOSTCC_MODE, 0);
10370         for (i = 0; i < 2000; i++) {
10371                 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
10372                         break;
10373                 udelay(10);
10374         }
10375
10376         __tg3_set_coalesce(tp, &tp->coal);
10377
10378         if (!tg3_flag(tp, 5705_PLUS)) {
10379                 /* Status/statistics block address.  See tg3_timer,
10380                  * the tg3_periodic_fetch_stats call there, and
10381                  * tg3_get_stats to see how this works for 5705/5750 chips.
10382                  */
10383                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
10384                      ((u64) tp->stats_mapping >> 32));
10385                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
10386                      ((u64) tp->stats_mapping & 0xffffffff));
10387                 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
10388
10389                 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
10390
10391                 /* Clear statistics and status block memory areas */
10392                 for (i = NIC_SRAM_STATS_BLK;
10393                      i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
10394                      i += sizeof(u32)) {
10395                         tg3_write_mem(tp, i, 0);
10396                         udelay(40);
10397                 }
10398         }
10399
10400         tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
10401
10402         tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
10403         tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
10404         if (!tg3_flag(tp, 5705_PLUS))
10405                 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
10406
10407         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
10408                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
10409                 /* reset to prevent losing 1st rx packet intermittently */
10410                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10411                 udelay(10);
10412         }
10413
10414         tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
10415                         MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
10416                         MAC_MODE_FHDE_ENABLE;
10417         if (tg3_flag(tp, ENABLE_APE))
10418                 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
10419         if (!tg3_flag(tp, 5705_PLUS) &&
10420             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10421             tg3_asic_rev(tp) != ASIC_REV_5700)
10422                 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
10423         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
10424         udelay(40);
10425
10426         /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
10427          * If TG3_FLAG_IS_NIC is zero, we should read the
10428          * register to preserve the GPIO settings for LOMs. The GPIOs,
10429          * whether used as inputs or outputs, are set by boot code after
10430          * reset.
10431          */
10432         if (!tg3_flag(tp, IS_NIC)) {
10433                 u32 gpio_mask;
10434
10435                 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
10436                             GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
10437                             GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
10438
10439                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
10440                         gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
10441                                      GRC_LCLCTRL_GPIO_OUTPUT3;
10442
10443                 if (tg3_asic_rev(tp) == ASIC_REV_5755)
10444                         gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
10445
10446                 tp->grc_local_ctrl &= ~gpio_mask;
10447                 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
10448
10449                 /* GPIO1 must be driven high for eeprom write protect */
10450                 if (tg3_flag(tp, EEPROM_WRITE_PROT))
10451                         tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10452                                                GRC_LCLCTRL_GPIO_OUTPUT1);
10453         }
10454         tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10455         udelay(100);
10456
10457         if (tg3_flag(tp, USING_MSIX)) {
10458                 val = tr32(MSGINT_MODE);
10459                 val |= MSGINT_MODE_ENABLE;
10460                 if (tp->irq_cnt > 1)
10461                         val |= MSGINT_MODE_MULTIVEC_EN;
10462                 if (!tg3_flag(tp, 1SHOT_MSI))
10463                         val |= MSGINT_MODE_ONE_SHOT_DISABLE;
10464                 tw32(MSGINT_MODE, val);
10465         }
10466
10467         if (!tg3_flag(tp, 5705_PLUS)) {
10468                 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
10469                 udelay(40);
10470         }
10471
10472         val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
10473                WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
10474                WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
10475                WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
10476                WDMAC_MODE_LNGREAD_ENAB);
10477
10478         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10479             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10480                 if (tg3_flag(tp, TSO_CAPABLE) &&
10481                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 ||
10482                      tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) {
10483                         /* nothing */
10484                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10485                            !tg3_flag(tp, IS_5788)) {
10486                         val |= WDMAC_MODE_RX_ACCEL;
10487                 }
10488         }
10489
10490         /* Enable host coalescing bug fix */
10491         if (tg3_flag(tp, 5755_PLUS))
10492                 val |= WDMAC_MODE_STATUS_TAG_FIX;
10493
10494         if (tg3_asic_rev(tp) == ASIC_REV_5785)
10495                 val |= WDMAC_MODE_BURST_ALL_DATA;
10496
10497         tw32_f(WDMAC_MODE, val);
10498         udelay(40);
10499
10500         if (tg3_flag(tp, PCIX_MODE)) {
10501                 u16 pcix_cmd;
10502
10503                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10504                                      &pcix_cmd);
10505                 if (tg3_asic_rev(tp) == ASIC_REV_5703) {
10506                         pcix_cmd &= ~PCI_X_CMD_MAX_READ;
10507                         pcix_cmd |= PCI_X_CMD_READ_2K;
10508                 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) {
10509                         pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
10510                         pcix_cmd |= PCI_X_CMD_READ_2K;
10511                 }
10512                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10513                                       pcix_cmd);
10514         }
10515
10516         tw32_f(RDMAC_MODE, rdmac_mode);
10517         udelay(40);
10518
10519         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10520             tg3_asic_rev(tp) == ASIC_REV_5720) {
10521                 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
10522                         if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
10523                                 break;
10524                 }
10525                 if (i < TG3_NUM_RDMA_CHANNELS) {
10526                         val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10527                         val |= tg3_lso_rd_dma_workaround_bit(tp);
10528                         tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10529                         tg3_flag_set(tp, 5719_5720_RDMA_BUG);
10530                 }
10531         }
10532
10533         tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
10534         if (!tg3_flag(tp, 5705_PLUS))
10535                 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
10536
10537         if (tg3_asic_rev(tp) == ASIC_REV_5761)
10538                 tw32(SNDDATAC_MODE,
10539                      SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
10540         else
10541                 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
10542
10543         tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
10544         tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
10545         val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
10546         if (tg3_flag(tp, LRG_PROD_RING_CAP))
10547                 val |= RCVDBDI_MODE_LRG_RING_SZ;
10548         tw32(RCVDBDI_MODE, val);
10549         tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
10550         if (tg3_flag(tp, HW_TSO_1) ||
10551             tg3_flag(tp, HW_TSO_2) ||
10552             tg3_flag(tp, HW_TSO_3))
10553                 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
10554         val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
10555         if (tg3_flag(tp, ENABLE_TSS))
10556                 val |= SNDBDI_MODE_MULTI_TXQ_EN;
10557         tw32(SNDBDI_MODE, val);
10558         tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
10559
10560         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
10561                 err = tg3_load_5701_a0_firmware_fix(tp);
10562                 if (err)
10563                         return err;
10564         }
10565
10566         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10567                 /* Ignore any errors for the firmware download. If download
10568                  * fails, the device will operate with EEE disabled
10569                  */
10570                 tg3_load_57766_firmware(tp);
10571         }
10572
10573         if (tg3_flag(tp, TSO_CAPABLE)) {
10574                 err = tg3_load_tso_firmware(tp);
10575                 if (err)
10576                         return err;
10577         }
10578
10579         tp->tx_mode = TX_MODE_ENABLE;
10580
10581         if (tg3_flag(tp, 5755_PLUS) ||
10582             tg3_asic_rev(tp) == ASIC_REV_5906)
10583                 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
10584
10585         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10586             tg3_asic_rev(tp) == ASIC_REV_5762) {
10587                 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
10588                 tp->tx_mode &= ~val;
10589                 tp->tx_mode |= tr32(MAC_TX_MODE) & val;
10590         }
10591
10592         tw32_f(MAC_TX_MODE, tp->tx_mode);
10593         udelay(100);
10594
10595         if (tg3_flag(tp, ENABLE_RSS)) {
10596                 u32 rss_key[10];
10597
10598                 tg3_rss_write_indir_tbl(tp);
10599
10600                 netdev_rss_key_fill(rss_key, 10 * sizeof(u32));
10601
10602                 for (i = 0; i < 10 ; i++)
10603                         tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]);
10604         }
10605
10606         tp->rx_mode = RX_MODE_ENABLE;
10607         if (tg3_flag(tp, 5755_PLUS))
10608                 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
10609
10610         if (tg3_asic_rev(tp) == ASIC_REV_5762)
10611                 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX;
10612
10613         if (tg3_flag(tp, ENABLE_RSS))
10614                 tp->rx_mode |= RX_MODE_RSS_ENABLE |
10615                                RX_MODE_RSS_ITBL_HASH_BITS_7 |
10616                                RX_MODE_RSS_IPV6_HASH_EN |
10617                                RX_MODE_RSS_TCP_IPV6_HASH_EN |
10618                                RX_MODE_RSS_IPV4_HASH_EN |
10619                                RX_MODE_RSS_TCP_IPV4_HASH_EN;
10620
10621         tw32_f(MAC_RX_MODE, tp->rx_mode);
10622         udelay(10);
10623
10624         tw32(MAC_LED_CTRL, tp->led_ctrl);
10625
10626         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
10627         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10628                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10629                 udelay(10);
10630         }
10631         tw32_f(MAC_RX_MODE, tp->rx_mode);
10632         udelay(10);
10633
10634         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10635                 if ((tg3_asic_rev(tp) == ASIC_REV_5704) &&
10636                     !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
10637                         /* Set drive transmission level to 1.2V  */
10638                         /* only if the signal pre-emphasis bit is not set  */
10639                         val = tr32(MAC_SERDES_CFG);
10640                         val &= 0xfffff000;
10641                         val |= 0x880;
10642                         tw32(MAC_SERDES_CFG, val);
10643                 }
10644                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1)
10645                         tw32(MAC_SERDES_CFG, 0x616000);
10646         }
10647
10648         /* Prevent chip from dropping frames when flow control
10649          * is enabled.
10650          */
10651         if (tg3_flag(tp, 57765_CLASS))
10652                 val = 1;
10653         else
10654                 val = 2;
10655         tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
10656
10657         if (tg3_asic_rev(tp) == ASIC_REV_5704 &&
10658             (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
10659                 /* Use hardware link auto-negotiation */
10660                 tg3_flag_set(tp, HW_AUTONEG);
10661         }
10662
10663         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10664             tg3_asic_rev(tp) == ASIC_REV_5714) {
10665                 u32 tmp;
10666
10667                 tmp = tr32(SERDES_RX_CTRL);
10668                 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
10669                 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
10670                 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
10671                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10672         }
10673
10674         if (!tg3_flag(tp, USE_PHYLIB)) {
10675                 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10676                         tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
10677
10678                 err = tg3_setup_phy(tp, false);
10679                 if (err)
10680                         return err;
10681
10682                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10683                     !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
10684                         u32 tmp;
10685
10686                         /* Clear CRC stats. */
10687                         if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
10688                                 tg3_writephy(tp, MII_TG3_TEST1,
10689                                              tmp | MII_TG3_TEST1_CRC_EN);
10690                                 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
10691                         }
10692                 }
10693         }
10694
10695         __tg3_set_rx_mode(tp->dev);
10696
10697         /* Initialize receive rules. */
10698         tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
10699         tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
10700         tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
10701         tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
10702
10703         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
10704                 limit = 8;
10705         else
10706                 limit = 16;
10707         if (tg3_flag(tp, ENABLE_ASF))
10708                 limit -= 4;
10709         switch (limit) {
10710         case 16:
10711                 tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
10712                 fallthrough;
10713         case 15:
10714                 tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
10715                 fallthrough;
10716         case 14:
10717                 tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
10718                 fallthrough;
10719         case 13:
10720                 tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
10721                 fallthrough;
10722         case 12:
10723                 tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
10724                 fallthrough;
10725         case 11:
10726                 tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
10727                 fallthrough;
10728         case 10:
10729                 tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
10730                 fallthrough;
10731         case 9:
10732                 tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
10733                 fallthrough;
10734         case 8:
10735                 tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
10736                 fallthrough;
10737         case 7:
10738                 tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
10739                 fallthrough;
10740         case 6:
10741                 tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
10742                 fallthrough;
10743         case 5:
10744                 tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
10745                 fallthrough;
10746         case 4:
10747                 /* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
10748         case 3:
10749                 /* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
10750         case 2:
10751         case 1:
10752
10753         default:
10754                 break;
10755         }
10756
10757         if (tg3_flag(tp, ENABLE_APE))
10758                 /* Write our heartbeat update interval to APE. */
10759                 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
10760                                 APE_HOST_HEARTBEAT_INT_5SEC);
10761
10762         tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
10763
10764         return 0;
10765 }
10766
10767 /* Called at device open time to get the chip ready for
10768  * packet processing.  Invoked with tp->lock held.
10769  */
10770 static int tg3_init_hw(struct tg3 *tp, bool reset_phy)
10771 {
10772         /* Chip may have been just powered on. If so, the boot code may still
10773          * be running initialization. Wait for it to finish to avoid races in
10774          * accessing the hardware.
10775          */
10776         tg3_enable_register_access(tp);
10777         tg3_poll_fw(tp);
10778
10779         tg3_switch_clocks(tp);
10780
10781         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10782
10783         return tg3_reset_hw(tp, reset_phy);
10784 }
10785
10786 #ifdef CONFIG_TIGON3_HWMON
10787 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
10788 {
10789         u32 off, len = TG3_OCIR_LEN;
10790         int i;
10791
10792         for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) {
10793                 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
10794
10795                 if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
10796                     !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
10797                         memset(ocir, 0, len);
10798         }
10799 }
10800
10801 /* sysfs attributes for hwmon */
10802 static ssize_t tg3_show_temp(struct device *dev,
10803                              struct device_attribute *devattr, char *buf)
10804 {
10805         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
10806         struct tg3 *tp = dev_get_drvdata(dev);
10807         u32 temperature;
10808
10809         spin_lock_bh(&tp->lock);
10810         tg3_ape_scratchpad_read(tp, &temperature, attr->index,
10811                                 sizeof(temperature));
10812         spin_unlock_bh(&tp->lock);
10813         return sprintf(buf, "%u\n", temperature * 1000);
10814 }
10815
10816
10817 static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL,
10818                           TG3_TEMP_SENSOR_OFFSET);
10819 static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL,
10820                           TG3_TEMP_CAUTION_OFFSET);
10821 static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL,
10822                           TG3_TEMP_MAX_OFFSET);
10823
10824 static struct attribute *tg3_attrs[] = {
10825         &sensor_dev_attr_temp1_input.dev_attr.attr,
10826         &sensor_dev_attr_temp1_crit.dev_attr.attr,
10827         &sensor_dev_attr_temp1_max.dev_attr.attr,
10828         NULL
10829 };
10830 ATTRIBUTE_GROUPS(tg3);
10831
10832 static void tg3_hwmon_close(struct tg3 *tp)
10833 {
10834         if (tp->hwmon_dev) {
10835                 hwmon_device_unregister(tp->hwmon_dev);
10836                 tp->hwmon_dev = NULL;
10837         }
10838 }
10839
10840 static void tg3_hwmon_open(struct tg3 *tp)
10841 {
10842         int i;
10843         u32 size = 0;
10844         struct pci_dev *pdev = tp->pdev;
10845         struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
10846
10847         tg3_sd_scan_scratchpad(tp, ocirs);
10848
10849         for (i = 0; i < TG3_SD_NUM_RECS; i++) {
10850                 if (!ocirs[i].src_data_length)
10851                         continue;
10852
10853                 size += ocirs[i].src_hdr_length;
10854                 size += ocirs[i].src_data_length;
10855         }
10856
10857         if (!size)
10858                 return;
10859
10860         tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3",
10861                                                           tp, tg3_groups);
10862         if (IS_ERR(tp->hwmon_dev)) {
10863                 tp->hwmon_dev = NULL;
10864                 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
10865         }
10866 }
10867 #else
10868 static inline void tg3_hwmon_close(struct tg3 *tp) { }
10869 static inline void tg3_hwmon_open(struct tg3 *tp) { }
10870 #endif /* CONFIG_TIGON3_HWMON */
10871
10872
10873 #define TG3_STAT_ADD32(PSTAT, REG) \
10874 do {    u32 __val = tr32(REG); \
10875         (PSTAT)->low += __val; \
10876         if ((PSTAT)->low < __val) \
10877                 (PSTAT)->high += 1; \
10878 } while (0)
10879
10880 static void tg3_periodic_fetch_stats(struct tg3 *tp)
10881 {
10882         struct tg3_hw_stats *sp = tp->hw_stats;
10883
10884         if (!tp->link_up)
10885                 return;
10886
10887         TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
10888         TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
10889         TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
10890         TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
10891         TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
10892         TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
10893         TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
10894         TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
10895         TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
10896         TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
10897         TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
10898         TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
10899         TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
10900         if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) &&
10901                      (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
10902                       sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
10903                 u32 val;
10904
10905                 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10906                 val &= ~tg3_lso_rd_dma_workaround_bit(tp);
10907                 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10908                 tg3_flag_clear(tp, 5719_5720_RDMA_BUG);
10909         }
10910
10911         TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
10912         TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
10913         TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10914         TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10915         TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10916         TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10917         TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10918         TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10919         TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10920         TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10921         TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10922         TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10923         TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10924         TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10925
10926         TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10927         if (tg3_asic_rev(tp) != ASIC_REV_5717 &&
10928             tg3_asic_rev(tp) != ASIC_REV_5762 &&
10929             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 &&
10930             tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) {
10931                 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10932         } else {
10933                 u32 val = tr32(HOSTCC_FLOW_ATTN);
10934                 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10935                 if (val) {
10936                         tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10937                         sp->rx_discards.low += val;
10938                         if (sp->rx_discards.low < val)
10939                                 sp->rx_discards.high += 1;
10940                 }
10941                 sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10942         }
10943         TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10944 }
10945
10946 static void tg3_chk_missed_msi(struct tg3 *tp)
10947 {
10948         u32 i;
10949
10950         for (i = 0; i < tp->irq_cnt; i++) {
10951                 struct tg3_napi *tnapi = &tp->napi[i];
10952
10953                 if (tg3_has_work(tnapi)) {
10954                         if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10955                             tnapi->last_tx_cons == tnapi->tx_cons) {
10956                                 if (tnapi->chk_msi_cnt < 1) {
10957                                         tnapi->chk_msi_cnt++;
10958                                         return;
10959                                 }
10960                                 tg3_msi(0, tnapi);
10961                         }
10962                 }
10963                 tnapi->chk_msi_cnt = 0;
10964                 tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10965                 tnapi->last_tx_cons = tnapi->tx_cons;
10966         }
10967 }
10968
10969 static void tg3_timer(struct timer_list *t)
10970 {
10971         struct tg3 *tp = from_timer(tp, t, timer);
10972
10973         spin_lock(&tp->lock);
10974
10975         if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) {
10976                 spin_unlock(&tp->lock);
10977                 goto restart_timer;
10978         }
10979
10980         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10981             tg3_flag(tp, 57765_CLASS))
10982                 tg3_chk_missed_msi(tp);
10983
10984         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
10985                 /* BCM4785: Flush posted writes from GbE to host memory. */
10986                 tr32(HOSTCC_MODE);
10987         }
10988
10989         if (!tg3_flag(tp, TAGGED_STATUS)) {
10990                 /* All of this garbage is because when using non-tagged
10991                  * IRQ status the mailbox/status_block protocol the chip
10992                  * uses with the cpu is race prone.
10993                  */
10994                 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
10995                         tw32(GRC_LOCAL_CTRL,
10996                              tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
10997                 } else {
10998                         tw32(HOSTCC_MODE, tp->coalesce_mode |
10999                              HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
11000                 }
11001
11002                 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
11003                         spin_unlock(&tp->lock);
11004                         tg3_reset_task_schedule(tp);
11005                         goto restart_timer;
11006                 }
11007         }
11008
11009         /* This part only runs once per second. */
11010         if (!--tp->timer_counter) {
11011                 if (tg3_flag(tp, 5705_PLUS))
11012                         tg3_periodic_fetch_stats(tp);
11013
11014                 if (tp->setlpicnt && !--tp->setlpicnt)
11015                         tg3_phy_eee_enable(tp);
11016
11017                 if (tg3_flag(tp, USE_LINKCHG_REG)) {
11018                         u32 mac_stat;
11019                         int phy_event;
11020
11021                         mac_stat = tr32(MAC_STATUS);
11022
11023                         phy_event = 0;
11024                         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
11025                                 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
11026                                         phy_event = 1;
11027                         } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
11028                                 phy_event = 1;
11029
11030                         if (phy_event)
11031                                 tg3_setup_phy(tp, false);
11032                 } else if (tg3_flag(tp, POLL_SERDES)) {
11033                         u32 mac_stat = tr32(MAC_STATUS);
11034                         int need_setup = 0;
11035
11036                         if (tp->link_up &&
11037                             (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
11038                                 need_setup = 1;
11039                         }
11040                         if (!tp->link_up &&
11041                             (mac_stat & (MAC_STATUS_PCS_SYNCED |
11042                                          MAC_STATUS_SIGNAL_DET))) {
11043                                 need_setup = 1;
11044                         }
11045                         if (need_setup) {
11046                                 if (!tp->serdes_counter) {
11047                                         tw32_f(MAC_MODE,
11048                                              (tp->mac_mode &
11049                                               ~MAC_MODE_PORT_MODE_MASK));
11050                                         udelay(40);
11051                                         tw32_f(MAC_MODE, tp->mac_mode);
11052                                         udelay(40);
11053                                 }
11054                                 tg3_setup_phy(tp, false);
11055                         }
11056                 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
11057                            tg3_flag(tp, 5780_CLASS)) {
11058                         tg3_serdes_parallel_detect(tp);
11059                 } else if (tg3_flag(tp, POLL_CPMU_LINK)) {
11060                         u32 cpmu = tr32(TG3_CPMU_STATUS);
11061                         bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) ==
11062                                          TG3_CPMU_STATUS_LINK_MASK);
11063
11064                         if (link_up != tp->link_up)
11065                                 tg3_setup_phy(tp, false);
11066                 }
11067
11068                 tp->timer_counter = tp->timer_multiplier;
11069         }
11070
11071         /* Heartbeat is only sent once every 2 seconds.
11072          *
11073          * The heartbeat is to tell the ASF firmware that the host
11074          * driver is still alive.  In the event that the OS crashes,
11075          * ASF needs to reset the hardware to free up the FIFO space
11076          * that may be filled with rx packets destined for the host.
11077          * If the FIFO is full, ASF will no longer function properly.
11078          *
11079          * Unintended resets have been reported on real time kernels
11080          * where the timer doesn't run on time.  Netpoll will also have
11081          * same problem.
11082          *
11083          * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
11084          * to check the ring condition when the heartbeat is expiring
11085          * before doing the reset.  This will prevent most unintended
11086          * resets.
11087          */
11088         if (!--tp->asf_counter) {
11089                 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
11090                         tg3_wait_for_event_ack(tp);
11091
11092                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
11093                                       FWCMD_NICDRV_ALIVE3);
11094                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
11095                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
11096                                       TG3_FW_UPDATE_TIMEOUT_SEC);
11097
11098                         tg3_generate_fw_event(tp);
11099                 }
11100                 tp->asf_counter = tp->asf_multiplier;
11101         }
11102
11103         /* Update the APE heartbeat every 5 seconds.*/
11104         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL);
11105
11106         spin_unlock(&tp->lock);
11107
11108 restart_timer:
11109         tp->timer.expires = jiffies + tp->timer_offset;
11110         add_timer(&tp->timer);
11111 }
11112
11113 static void tg3_timer_init(struct tg3 *tp)
11114 {
11115         if (tg3_flag(tp, TAGGED_STATUS) &&
11116             tg3_asic_rev(tp) != ASIC_REV_5717 &&
11117             !tg3_flag(tp, 57765_CLASS))
11118                 tp->timer_offset = HZ;
11119         else
11120                 tp->timer_offset = HZ / 10;
11121
11122         BUG_ON(tp->timer_offset > HZ);
11123
11124         tp->timer_multiplier = (HZ / tp->timer_offset);
11125         tp->asf_multiplier = (HZ / tp->timer_offset) *
11126                              TG3_FW_UPDATE_FREQ_SEC;
11127
11128         timer_setup(&tp->timer, tg3_timer, 0);
11129 }
11130
11131 static void tg3_timer_start(struct tg3 *tp)
11132 {
11133         tp->asf_counter   = tp->asf_multiplier;
11134         tp->timer_counter = tp->timer_multiplier;
11135
11136         tp->timer.expires = jiffies + tp->timer_offset;
11137         add_timer(&tp->timer);
11138 }
11139
11140 static void tg3_timer_stop(struct tg3 *tp)
11141 {
11142         del_timer_sync(&tp->timer);
11143 }
11144
11145 /* Restart hardware after configuration changes, self-test, etc.
11146  * Invoked with tp->lock held.
11147  */
11148 static int tg3_restart_hw(struct tg3 *tp, bool reset_phy)
11149         __releases(tp->lock)
11150         __acquires(tp->lock)
11151 {
11152         int err;
11153
11154         err = tg3_init_hw(tp, reset_phy);
11155         if (err) {
11156                 netdev_err(tp->dev,
11157                            "Failed to re-initialize device, aborting\n");
11158                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11159                 tg3_full_unlock(tp);
11160                 tg3_timer_stop(tp);
11161                 tp->irq_sync = 0;
11162                 tg3_napi_enable(tp);
11163                 dev_close(tp->dev);
11164                 tg3_full_lock(tp, 0);
11165         }
11166         return err;
11167 }
11168
11169 static void tg3_reset_task(struct work_struct *work)
11170 {
11171         struct tg3 *tp = container_of(work, struct tg3, reset_task);
11172         int err;
11173
11174         rtnl_lock();
11175         tg3_full_lock(tp, 0);
11176
11177         if (!netif_running(tp->dev)) {
11178                 tg3_flag_clear(tp, RESET_TASK_PENDING);
11179                 tg3_full_unlock(tp);
11180                 rtnl_unlock();
11181                 return;
11182         }
11183
11184         tg3_full_unlock(tp);
11185
11186         tg3_phy_stop(tp);
11187
11188         tg3_netif_stop(tp);
11189
11190         tg3_full_lock(tp, 1);
11191
11192         if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
11193                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
11194                 tp->write32_rx_mbox = tg3_write_flush_reg32;
11195                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
11196                 tg3_flag_clear(tp, TX_RECOVERY_PENDING);
11197         }
11198
11199         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
11200         err = tg3_init_hw(tp, true);
11201         if (err) {
11202                 tg3_full_unlock(tp);
11203                 tp->irq_sync = 0;
11204                 tg3_napi_enable(tp);
11205                 /* Clear this flag so that tg3_reset_task_cancel() will not
11206                  * call cancel_work_sync() and wait forever.
11207                  */
11208                 tg3_flag_clear(tp, RESET_TASK_PENDING);
11209                 dev_close(tp->dev);
11210                 goto out;
11211         }
11212
11213         tg3_netif_start(tp);
11214         tg3_full_unlock(tp);
11215         tg3_phy_start(tp);
11216         tg3_flag_clear(tp, RESET_TASK_PENDING);
11217 out:
11218         rtnl_unlock();
11219 }
11220
11221 static int tg3_request_irq(struct tg3 *tp, int irq_num)
11222 {
11223         irq_handler_t fn;
11224         unsigned long flags;
11225         char *name;
11226         struct tg3_napi *tnapi = &tp->napi[irq_num];
11227
11228         if (tp->irq_cnt == 1)
11229                 name = tp->dev->name;
11230         else {
11231                 name = &tnapi->irq_lbl[0];
11232                 if (tnapi->tx_buffers && tnapi->rx_rcb)
11233                         snprintf(name, IFNAMSIZ,
11234                                  "%s-txrx-%d", tp->dev->name, irq_num);
11235                 else if (tnapi->tx_buffers)
11236                         snprintf(name, IFNAMSIZ,
11237                                  "%s-tx-%d", tp->dev->name, irq_num);
11238                 else if (tnapi->rx_rcb)
11239                         snprintf(name, IFNAMSIZ,
11240                                  "%s-rx-%d", tp->dev->name, irq_num);
11241                 else
11242                         snprintf(name, IFNAMSIZ,
11243                                  "%s-%d", tp->dev->name, irq_num);
11244                 name[IFNAMSIZ-1] = 0;
11245         }
11246
11247         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11248                 fn = tg3_msi;
11249                 if (tg3_flag(tp, 1SHOT_MSI))
11250                         fn = tg3_msi_1shot;
11251                 flags = 0;
11252         } else {
11253                 fn = tg3_interrupt;
11254                 if (tg3_flag(tp, TAGGED_STATUS))
11255                         fn = tg3_interrupt_tagged;
11256                 flags = IRQF_SHARED;
11257         }
11258
11259         return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
11260 }
11261
11262 static int tg3_test_interrupt(struct tg3 *tp)
11263 {
11264         struct tg3_napi *tnapi = &tp->napi[0];
11265         struct net_device *dev = tp->dev;
11266         int err, i, intr_ok = 0;
11267         u32 val;
11268
11269         if (!netif_running(dev))
11270                 return -ENODEV;
11271
11272         tg3_disable_ints(tp);
11273
11274         free_irq(tnapi->irq_vec, tnapi);
11275
11276         /*
11277          * Turn off MSI one shot mode.  Otherwise this test has no
11278          * observable way to know whether the interrupt was delivered.
11279          */
11280         if (tg3_flag(tp, 57765_PLUS)) {
11281                 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
11282                 tw32(MSGINT_MODE, val);
11283         }
11284
11285         err = request_irq(tnapi->irq_vec, tg3_test_isr,
11286                           IRQF_SHARED, dev->name, tnapi);
11287         if (err)
11288                 return err;
11289
11290         tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
11291         tg3_enable_ints(tp);
11292
11293         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11294                tnapi->coal_now);
11295
11296         for (i = 0; i < 5; i++) {
11297                 u32 int_mbox, misc_host_ctrl;
11298
11299                 int_mbox = tr32_mailbox(tnapi->int_mbox);
11300                 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
11301
11302                 if ((int_mbox != 0) ||
11303                     (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
11304                         intr_ok = 1;
11305                         break;
11306                 }
11307
11308                 if (tg3_flag(tp, 57765_PLUS) &&
11309                     tnapi->hw_status->status_tag != tnapi->last_tag)
11310                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
11311
11312                 msleep(10);
11313         }
11314
11315         tg3_disable_ints(tp);
11316
11317         free_irq(tnapi->irq_vec, tnapi);
11318
11319         err = tg3_request_irq(tp, 0);
11320
11321         if (err)
11322                 return err;
11323
11324         if (intr_ok) {
11325                 /* Reenable MSI one shot mode. */
11326                 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
11327                         val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
11328                         tw32(MSGINT_MODE, val);
11329                 }
11330                 return 0;
11331         }
11332
11333         return -EIO;
11334 }
11335
11336 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
11337  * successfully restored
11338  */
11339 static int tg3_test_msi(struct tg3 *tp)
11340 {
11341         int err;
11342         u16 pci_cmd;
11343
11344         if (!tg3_flag(tp, USING_MSI))
11345                 return 0;
11346
11347         /* Turn off SERR reporting in case MSI terminates with Master
11348          * Abort.
11349          */
11350         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11351         pci_write_config_word(tp->pdev, PCI_COMMAND,
11352                               pci_cmd & ~PCI_COMMAND_SERR);
11353
11354         err = tg3_test_interrupt(tp);
11355
11356         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11357
11358         if (!err)
11359                 return 0;
11360
11361         /* other failures */
11362         if (err != -EIO)
11363                 return err;
11364
11365         /* MSI test failed, go back to INTx mode */
11366         netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
11367                     "to INTx mode. Please report this failure to the PCI "
11368                     "maintainer and include system chipset information\n");
11369
11370         free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11371
11372         pci_disable_msi(tp->pdev);
11373
11374         tg3_flag_clear(tp, USING_MSI);
11375         tp->napi[0].irq_vec = tp->pdev->irq;
11376
11377         err = tg3_request_irq(tp, 0);
11378         if (err)
11379                 return err;
11380
11381         /* Need to reset the chip because the MSI cycle may have terminated
11382          * with Master Abort.
11383          */
11384         tg3_full_lock(tp, 1);
11385
11386         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11387         err = tg3_init_hw(tp, true);
11388
11389         tg3_full_unlock(tp);
11390
11391         if (err)
11392                 free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11393
11394         return err;
11395 }
11396
11397 static int tg3_request_firmware(struct tg3 *tp)
11398 {
11399         const struct tg3_firmware_hdr *fw_hdr;
11400
11401         if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
11402                 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
11403                            tp->fw_needed);
11404                 return -ENOENT;
11405         }
11406
11407         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
11408
11409         /* Firmware blob starts with version numbers, followed by
11410          * start address and _full_ length including BSS sections
11411          * (which must be longer than the actual data, of course
11412          */
11413
11414         tp->fw_len = be32_to_cpu(fw_hdr->len);  /* includes bss */
11415         if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) {
11416                 netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
11417                            tp->fw_len, tp->fw_needed);
11418                 release_firmware(tp->fw);
11419                 tp->fw = NULL;
11420                 return -EINVAL;
11421         }
11422
11423         /* We no longer need firmware; we have it. */
11424         tp->fw_needed = NULL;
11425         return 0;
11426 }
11427
11428 static u32 tg3_irq_count(struct tg3 *tp)
11429 {
11430         u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
11431
11432         if (irq_cnt > 1) {
11433                 /* We want as many rx rings enabled as there are cpus.
11434                  * In multiqueue MSI-X mode, the first MSI-X vector
11435                  * only deals with link interrupts, etc, so we add
11436                  * one to the number of vectors we are requesting.
11437                  */
11438                 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
11439         }
11440
11441         return irq_cnt;
11442 }
11443
11444 static bool tg3_enable_msix(struct tg3 *tp)
11445 {
11446         int i, rc;
11447         struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
11448
11449         tp->txq_cnt = tp->txq_req;
11450         tp->rxq_cnt = tp->rxq_req;
11451         if (!tp->rxq_cnt)
11452                 tp->rxq_cnt = netif_get_num_default_rss_queues();
11453         if (tp->rxq_cnt > tp->rxq_max)
11454                 tp->rxq_cnt = tp->rxq_max;
11455
11456         /* Disable multiple TX rings by default.  Simple round-robin hardware
11457          * scheduling of the TX rings can cause starvation of rings with
11458          * small packets when other rings have TSO or jumbo packets.
11459          */
11460         if (!tp->txq_req)
11461                 tp->txq_cnt = 1;
11462
11463         tp->irq_cnt = tg3_irq_count(tp);
11464
11465         for (i = 0; i < tp->irq_max; i++) {
11466                 msix_ent[i].entry  = i;
11467                 msix_ent[i].vector = 0;
11468         }
11469
11470         rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt);
11471         if (rc < 0) {
11472                 return false;
11473         } else if (rc < tp->irq_cnt) {
11474                 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
11475                               tp->irq_cnt, rc);
11476                 tp->irq_cnt = rc;
11477                 tp->rxq_cnt = max(rc - 1, 1);
11478                 if (tp->txq_cnt)
11479                         tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
11480         }
11481
11482         for (i = 0; i < tp->irq_max; i++)
11483                 tp->napi[i].irq_vec = msix_ent[i].vector;
11484
11485         if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
11486                 pci_disable_msix(tp->pdev);
11487                 return false;
11488         }
11489
11490         if (tp->irq_cnt == 1)
11491                 return true;
11492
11493         tg3_flag_set(tp, ENABLE_RSS);
11494
11495         if (tp->txq_cnt > 1)
11496                 tg3_flag_set(tp, ENABLE_TSS);
11497
11498         netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
11499
11500         return true;
11501 }
11502
11503 static void tg3_ints_init(struct tg3 *tp)
11504 {
11505         if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
11506             !tg3_flag(tp, TAGGED_STATUS)) {
11507                 /* All MSI supporting chips should support tagged
11508                  * status.  Assert that this is the case.
11509                  */
11510                 netdev_warn(tp->dev,
11511                             "MSI without TAGGED_STATUS? Not using MSI\n");
11512                 goto defcfg;
11513         }
11514
11515         if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
11516                 tg3_flag_set(tp, USING_MSIX);
11517         else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
11518                 tg3_flag_set(tp, USING_MSI);
11519
11520         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11521                 u32 msi_mode = tr32(MSGINT_MODE);
11522                 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
11523                         msi_mode |= MSGINT_MODE_MULTIVEC_EN;
11524                 if (!tg3_flag(tp, 1SHOT_MSI))
11525                         msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
11526                 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
11527         }
11528 defcfg:
11529         if (!tg3_flag(tp, USING_MSIX)) {
11530                 tp->irq_cnt = 1;
11531                 tp->napi[0].irq_vec = tp->pdev->irq;
11532         }
11533
11534         if (tp->irq_cnt == 1) {
11535                 tp->txq_cnt = 1;
11536                 tp->rxq_cnt = 1;
11537                 netif_set_real_num_tx_queues(tp->dev, 1);
11538                 netif_set_real_num_rx_queues(tp->dev, 1);
11539         }
11540 }
11541
11542 static void tg3_ints_fini(struct tg3 *tp)
11543 {
11544         if (tg3_flag(tp, USING_MSIX))
11545                 pci_disable_msix(tp->pdev);
11546         else if (tg3_flag(tp, USING_MSI))
11547                 pci_disable_msi(tp->pdev);
11548         tg3_flag_clear(tp, USING_MSI);
11549         tg3_flag_clear(tp, USING_MSIX);
11550         tg3_flag_clear(tp, ENABLE_RSS);
11551         tg3_flag_clear(tp, ENABLE_TSS);
11552 }
11553
11554 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
11555                      bool init)
11556 {
11557         struct net_device *dev = tp->dev;
11558         int i, err;
11559
11560         /*
11561          * Setup interrupts first so we know how
11562          * many NAPI resources to allocate
11563          */
11564         tg3_ints_init(tp);
11565
11566         tg3_rss_check_indir_tbl(tp);
11567
11568         /* The placement of this call is tied
11569          * to the setup and use of Host TX descriptors.
11570          */
11571         err = tg3_alloc_consistent(tp);
11572         if (err)
11573                 goto out_ints_fini;
11574
11575         tg3_napi_init(tp);
11576
11577         tg3_napi_enable(tp);
11578
11579         for (i = 0; i < tp->irq_cnt; i++) {
11580                 err = tg3_request_irq(tp, i);
11581                 if (err) {
11582                         for (i--; i >= 0; i--) {
11583                                 struct tg3_napi *tnapi = &tp->napi[i];
11584
11585                                 free_irq(tnapi->irq_vec, tnapi);
11586                         }
11587                         goto out_napi_fini;
11588                 }
11589         }
11590
11591         tg3_full_lock(tp, 0);
11592
11593         if (init)
11594                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
11595
11596         err = tg3_init_hw(tp, reset_phy);
11597         if (err) {
11598                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11599                 tg3_free_rings(tp);
11600         }
11601
11602         tg3_full_unlock(tp);
11603
11604         if (err)
11605                 goto out_free_irq;
11606
11607         if (test_irq && tg3_flag(tp, USING_MSI)) {
11608                 err = tg3_test_msi(tp);
11609
11610                 if (err) {
11611                         tg3_full_lock(tp, 0);
11612                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11613                         tg3_free_rings(tp);
11614                         tg3_full_unlock(tp);
11615
11616                         goto out_napi_fini;
11617                 }
11618
11619                 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
11620                         u32 val = tr32(PCIE_TRANSACTION_CFG);
11621
11622                         tw32(PCIE_TRANSACTION_CFG,
11623                              val | PCIE_TRANS_CFG_1SHOT_MSI);
11624                 }
11625         }
11626
11627         tg3_phy_start(tp);
11628
11629         tg3_hwmon_open(tp);
11630
11631         tg3_full_lock(tp, 0);
11632
11633         tg3_timer_start(tp);
11634         tg3_flag_set(tp, INIT_COMPLETE);
11635         tg3_enable_ints(tp);
11636
11637         tg3_ptp_resume(tp);
11638
11639         tg3_full_unlock(tp);
11640
11641         netif_tx_start_all_queues(dev);
11642
11643         /*
11644          * Reset loopback feature if it was turned on while the device was down
11645          * make sure that it's installed properly now.
11646          */
11647         if (dev->features & NETIF_F_LOOPBACK)
11648                 tg3_set_loopback(dev, dev->features);
11649
11650         return 0;
11651
11652 out_free_irq:
11653         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11654                 struct tg3_napi *tnapi = &tp->napi[i];
11655                 free_irq(tnapi->irq_vec, tnapi);
11656         }
11657
11658 out_napi_fini:
11659         tg3_napi_disable(tp);
11660         tg3_napi_fini(tp);
11661         tg3_free_consistent(tp);
11662
11663 out_ints_fini:
11664         tg3_ints_fini(tp);
11665
11666         return err;
11667 }
11668
11669 static void tg3_stop(struct tg3 *tp)
11670 {
11671         int i;
11672
11673         tg3_reset_task_cancel(tp);
11674         tg3_netif_stop(tp);
11675
11676         tg3_timer_stop(tp);
11677
11678         tg3_hwmon_close(tp);
11679
11680         tg3_phy_stop(tp);
11681
11682         tg3_full_lock(tp, 1);
11683
11684         tg3_disable_ints(tp);
11685
11686         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11687         tg3_free_rings(tp);
11688         tg3_flag_clear(tp, INIT_COMPLETE);
11689
11690         tg3_full_unlock(tp);
11691
11692         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11693                 struct tg3_napi *tnapi = &tp->napi[i];
11694                 free_irq(tnapi->irq_vec, tnapi);
11695         }
11696
11697         tg3_ints_fini(tp);
11698
11699         tg3_napi_fini(tp);
11700
11701         tg3_free_consistent(tp);
11702 }
11703
11704 static int tg3_open(struct net_device *dev)
11705 {
11706         struct tg3 *tp = netdev_priv(dev);
11707         int err;
11708
11709         if (tp->pcierr_recovery) {
11710                 netdev_err(dev, "Failed to open device. PCI error recovery "
11711                            "in progress\n");
11712                 return -EAGAIN;
11713         }
11714
11715         if (tp->fw_needed) {
11716                 err = tg3_request_firmware(tp);
11717                 if (tg3_asic_rev(tp) == ASIC_REV_57766) {
11718                         if (err) {
11719                                 netdev_warn(tp->dev, "EEE capability disabled\n");
11720                                 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11721                         } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
11722                                 netdev_warn(tp->dev, "EEE capability restored\n");
11723                                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
11724                         }
11725                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
11726                         if (err)
11727                                 return err;
11728                 } else if (err) {
11729                         netdev_warn(tp->dev, "TSO capability disabled\n");
11730                         tg3_flag_clear(tp, TSO_CAPABLE);
11731                 } else if (!tg3_flag(tp, TSO_CAPABLE)) {
11732                         netdev_notice(tp->dev, "TSO capability restored\n");
11733                         tg3_flag_set(tp, TSO_CAPABLE);
11734                 }
11735         }
11736
11737         tg3_carrier_off(tp);
11738
11739         err = tg3_power_up(tp);
11740         if (err)
11741                 return err;
11742
11743         tg3_full_lock(tp, 0);
11744
11745         tg3_disable_ints(tp);
11746         tg3_flag_clear(tp, INIT_COMPLETE);
11747
11748         tg3_full_unlock(tp);
11749
11750         err = tg3_start(tp,
11751                         !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN),
11752                         true, true);
11753         if (err) {
11754                 tg3_frob_aux_power(tp, false);
11755                 pci_set_power_state(tp->pdev, PCI_D3hot);
11756         }
11757
11758         return err;
11759 }
11760
11761 static int tg3_close(struct net_device *dev)
11762 {
11763         struct tg3 *tp = netdev_priv(dev);
11764
11765         if (tp->pcierr_recovery) {
11766                 netdev_err(dev, "Failed to close device. PCI error recovery "
11767                            "in progress\n");
11768                 return -EAGAIN;
11769         }
11770
11771         tg3_stop(tp);
11772
11773         if (pci_device_is_present(tp->pdev)) {
11774                 tg3_power_down_prepare(tp);
11775
11776                 tg3_carrier_off(tp);
11777         }
11778         return 0;
11779 }
11780
11781 static inline u64 get_stat64(tg3_stat64_t *val)
11782 {
11783        return ((u64)val->high << 32) | ((u64)val->low);
11784 }
11785
11786 static u64 tg3_calc_crc_errors(struct tg3 *tp)
11787 {
11788         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11789
11790         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11791             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
11792              tg3_asic_rev(tp) == ASIC_REV_5701)) {
11793                 u32 val;
11794
11795                 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
11796                         tg3_writephy(tp, MII_TG3_TEST1,
11797                                      val | MII_TG3_TEST1_CRC_EN);
11798                         tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
11799                 } else
11800                         val = 0;
11801
11802                 tp->phy_crc_errors += val;
11803
11804                 return tp->phy_crc_errors;
11805         }
11806
11807         return get_stat64(&hw_stats->rx_fcs_errors);
11808 }
11809
11810 #define ESTAT_ADD(member) \
11811         estats->member =        old_estats->member + \
11812                                 get_stat64(&hw_stats->member)
11813
11814 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
11815 {
11816         struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
11817         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11818
11819         ESTAT_ADD(rx_octets);
11820         ESTAT_ADD(rx_fragments);
11821         ESTAT_ADD(rx_ucast_packets);
11822         ESTAT_ADD(rx_mcast_packets);
11823         ESTAT_ADD(rx_bcast_packets);
11824         ESTAT_ADD(rx_fcs_errors);
11825         ESTAT_ADD(rx_align_errors);
11826         ESTAT_ADD(rx_xon_pause_rcvd);
11827         ESTAT_ADD(rx_xoff_pause_rcvd);
11828         ESTAT_ADD(rx_mac_ctrl_rcvd);
11829         ESTAT_ADD(rx_xoff_entered);
11830         ESTAT_ADD(rx_frame_too_long_errors);
11831         ESTAT_ADD(rx_jabbers);
11832         ESTAT_ADD(rx_undersize_packets);
11833         ESTAT_ADD(rx_in_length_errors);
11834         ESTAT_ADD(rx_out_length_errors);
11835         ESTAT_ADD(rx_64_or_less_octet_packets);
11836         ESTAT_ADD(rx_65_to_127_octet_packets);
11837         ESTAT_ADD(rx_128_to_255_octet_packets);
11838         ESTAT_ADD(rx_256_to_511_octet_packets);
11839         ESTAT_ADD(rx_512_to_1023_octet_packets);
11840         ESTAT_ADD(rx_1024_to_1522_octet_packets);
11841         ESTAT_ADD(rx_1523_to_2047_octet_packets);
11842         ESTAT_ADD(rx_2048_to_4095_octet_packets);
11843         ESTAT_ADD(rx_4096_to_8191_octet_packets);
11844         ESTAT_ADD(rx_8192_to_9022_octet_packets);
11845
11846         ESTAT_ADD(tx_octets);
11847         ESTAT_ADD(tx_collisions);
11848         ESTAT_ADD(tx_xon_sent);
11849         ESTAT_ADD(tx_xoff_sent);
11850         ESTAT_ADD(tx_flow_control);
11851         ESTAT_ADD(tx_mac_errors);
11852         ESTAT_ADD(tx_single_collisions);
11853         ESTAT_ADD(tx_mult_collisions);
11854         ESTAT_ADD(tx_deferred);
11855         ESTAT_ADD(tx_excessive_collisions);
11856         ESTAT_ADD(tx_late_collisions);
11857         ESTAT_ADD(tx_collide_2times);
11858         ESTAT_ADD(tx_collide_3times);
11859         ESTAT_ADD(tx_collide_4times);
11860         ESTAT_ADD(tx_collide_5times);
11861         ESTAT_ADD(tx_collide_6times);
11862         ESTAT_ADD(tx_collide_7times);
11863         ESTAT_ADD(tx_collide_8times);
11864         ESTAT_ADD(tx_collide_9times);
11865         ESTAT_ADD(tx_collide_10times);
11866         ESTAT_ADD(tx_collide_11times);
11867         ESTAT_ADD(tx_collide_12times);
11868         ESTAT_ADD(tx_collide_13times);
11869         ESTAT_ADD(tx_collide_14times);
11870         ESTAT_ADD(tx_collide_15times);
11871         ESTAT_ADD(tx_ucast_packets);
11872         ESTAT_ADD(tx_mcast_packets);
11873         ESTAT_ADD(tx_bcast_packets);
11874         ESTAT_ADD(tx_carrier_sense_errors);
11875         ESTAT_ADD(tx_discards);
11876         ESTAT_ADD(tx_errors);
11877
11878         ESTAT_ADD(dma_writeq_full);
11879         ESTAT_ADD(dma_write_prioq_full);
11880         ESTAT_ADD(rxbds_empty);
11881         ESTAT_ADD(rx_discards);
11882         ESTAT_ADD(rx_errors);
11883         ESTAT_ADD(rx_threshold_hit);
11884
11885         ESTAT_ADD(dma_readq_full);
11886         ESTAT_ADD(dma_read_prioq_full);
11887         ESTAT_ADD(tx_comp_queue_full);
11888
11889         ESTAT_ADD(ring_set_send_prod_index);
11890         ESTAT_ADD(ring_status_update);
11891         ESTAT_ADD(nic_irqs);
11892         ESTAT_ADD(nic_avoided_irqs);
11893         ESTAT_ADD(nic_tx_threshold_hit);
11894
11895         ESTAT_ADD(mbuf_lwm_thresh_hit);
11896 }
11897
11898 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
11899 {
11900         struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
11901         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11902
11903         stats->rx_packets = old_stats->rx_packets +
11904                 get_stat64(&hw_stats->rx_ucast_packets) +
11905                 get_stat64(&hw_stats->rx_mcast_packets) +
11906                 get_stat64(&hw_stats->rx_bcast_packets);
11907
11908         stats->tx_packets = old_stats->tx_packets +
11909                 get_stat64(&hw_stats->tx_ucast_packets) +
11910                 get_stat64(&hw_stats->tx_mcast_packets) +
11911                 get_stat64(&hw_stats->tx_bcast_packets);
11912
11913         stats->rx_bytes = old_stats->rx_bytes +
11914                 get_stat64(&hw_stats->rx_octets);
11915         stats->tx_bytes = old_stats->tx_bytes +
11916                 get_stat64(&hw_stats->tx_octets);
11917
11918         stats->rx_errors = old_stats->rx_errors +
11919                 get_stat64(&hw_stats->rx_errors);
11920         stats->tx_errors = old_stats->tx_errors +
11921                 get_stat64(&hw_stats->tx_errors) +
11922                 get_stat64(&hw_stats->tx_mac_errors) +
11923                 get_stat64(&hw_stats->tx_carrier_sense_errors) +
11924                 get_stat64(&hw_stats->tx_discards);
11925
11926         stats->multicast = old_stats->multicast +
11927                 get_stat64(&hw_stats->rx_mcast_packets);
11928         stats->collisions = old_stats->collisions +
11929                 get_stat64(&hw_stats->tx_collisions);
11930
11931         stats->rx_length_errors = old_stats->rx_length_errors +
11932                 get_stat64(&hw_stats->rx_frame_too_long_errors) +
11933                 get_stat64(&hw_stats->rx_undersize_packets);
11934
11935         stats->rx_frame_errors = old_stats->rx_frame_errors +
11936                 get_stat64(&hw_stats->rx_align_errors);
11937         stats->tx_aborted_errors = old_stats->tx_aborted_errors +
11938                 get_stat64(&hw_stats->tx_discards);
11939         stats->tx_carrier_errors = old_stats->tx_carrier_errors +
11940                 get_stat64(&hw_stats->tx_carrier_sense_errors);
11941
11942         stats->rx_crc_errors = old_stats->rx_crc_errors +
11943                 tg3_calc_crc_errors(tp);
11944
11945         stats->rx_missed_errors = old_stats->rx_missed_errors +
11946                 get_stat64(&hw_stats->rx_discards);
11947
11948         stats->rx_dropped = tp->rx_dropped;
11949         stats->tx_dropped = tp->tx_dropped;
11950 }
11951
11952 static int tg3_get_regs_len(struct net_device *dev)
11953 {
11954         return TG3_REG_BLK_SIZE;
11955 }
11956
11957 static void tg3_get_regs(struct net_device *dev,
11958                 struct ethtool_regs *regs, void *_p)
11959 {
11960         struct tg3 *tp = netdev_priv(dev);
11961
11962         regs->version = 0;
11963
11964         memset(_p, 0, TG3_REG_BLK_SIZE);
11965
11966         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11967                 return;
11968
11969         tg3_full_lock(tp, 0);
11970
11971         tg3_dump_legacy_regs(tp, (u32 *)_p);
11972
11973         tg3_full_unlock(tp);
11974 }
11975
11976 static int tg3_get_eeprom_len(struct net_device *dev)
11977 {
11978         struct tg3 *tp = netdev_priv(dev);
11979
11980         return tp->nvram_size;
11981 }
11982
11983 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11984 {
11985         struct tg3 *tp = netdev_priv(dev);
11986         int ret, cpmu_restore = 0;
11987         u8  *pd;
11988         u32 i, offset, len, b_offset, b_count, cpmu_val = 0;
11989         __be32 val;
11990
11991         if (tg3_flag(tp, NO_NVRAM))
11992                 return -EINVAL;
11993
11994         offset = eeprom->offset;
11995         len = eeprom->len;
11996         eeprom->len = 0;
11997
11998         eeprom->magic = TG3_EEPROM_MAGIC;
11999
12000         /* Override clock, link aware and link idle modes */
12001         if (tg3_flag(tp, CPMU_PRESENT)) {
12002                 cpmu_val = tr32(TG3_CPMU_CTRL);
12003                 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE |
12004                                 CPMU_CTRL_LINK_IDLE_MODE)) {
12005                         tw32(TG3_CPMU_CTRL, cpmu_val &
12006                                             ~(CPMU_CTRL_LINK_AWARE_MODE |
12007                                              CPMU_CTRL_LINK_IDLE_MODE));
12008                         cpmu_restore = 1;
12009                 }
12010         }
12011         tg3_override_clk(tp);
12012
12013         if (offset & 3) {
12014                 /* adjustments to start on required 4 byte boundary */
12015                 b_offset = offset & 3;
12016                 b_count = 4 - b_offset;
12017                 if (b_count > len) {
12018                         /* i.e. offset=1 len=2 */
12019                         b_count = len;
12020                 }
12021                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
12022                 if (ret)
12023                         goto eeprom_done;
12024                 memcpy(data, ((char *)&val) + b_offset, b_count);
12025                 len -= b_count;
12026                 offset += b_count;
12027                 eeprom->len += b_count;
12028         }
12029
12030         /* read bytes up to the last 4 byte boundary */
12031         pd = &data[eeprom->len];
12032         for (i = 0; i < (len - (len & 3)); i += 4) {
12033                 ret = tg3_nvram_read_be32(tp, offset + i, &val);
12034                 if (ret) {
12035                         if (i)
12036                                 i -= 4;
12037                         eeprom->len += i;
12038                         goto eeprom_done;
12039                 }
12040                 memcpy(pd + i, &val, 4);
12041                 if (need_resched()) {
12042                         if (signal_pending(current)) {
12043                                 eeprom->len += i;
12044                                 ret = -EINTR;
12045                                 goto eeprom_done;
12046                         }
12047                         cond_resched();
12048                 }
12049         }
12050         eeprom->len += i;
12051
12052         if (len & 3) {
12053                 /* read last bytes not ending on 4 byte boundary */
12054                 pd = &data[eeprom->len];
12055                 b_count = len & 3;
12056                 b_offset = offset + len - b_count;
12057                 ret = tg3_nvram_read_be32(tp, b_offset, &val);
12058                 if (ret)
12059                         goto eeprom_done;
12060                 memcpy(pd, &val, b_count);
12061                 eeprom->len += b_count;
12062         }
12063         ret = 0;
12064
12065 eeprom_done:
12066         /* Restore clock, link aware and link idle modes */
12067         tg3_restore_clk(tp);
12068         if (cpmu_restore)
12069                 tw32(TG3_CPMU_CTRL, cpmu_val);
12070
12071         return ret;
12072 }
12073
12074 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
12075 {
12076         struct tg3 *tp = netdev_priv(dev);
12077         int ret;
12078         u32 offset, len, b_offset, odd_len;
12079         u8 *buf;
12080         __be32 start = 0, end;
12081
12082         if (tg3_flag(tp, NO_NVRAM) ||
12083             eeprom->magic != TG3_EEPROM_MAGIC)
12084                 return -EINVAL;
12085
12086         offset = eeprom->offset;
12087         len = eeprom->len;
12088
12089         if ((b_offset = (offset & 3))) {
12090                 /* adjustments to start on required 4 byte boundary */
12091                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
12092                 if (ret)
12093                         return ret;
12094                 len += b_offset;
12095                 offset &= ~3;
12096                 if (len < 4)
12097                         len = 4;
12098         }
12099
12100         odd_len = 0;
12101         if (len & 3) {
12102                 /* adjustments to end on required 4 byte boundary */
12103                 odd_len = 1;
12104                 len = (len + 3) & ~3;
12105                 ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
12106                 if (ret)
12107                         return ret;
12108         }
12109
12110         buf = data;
12111         if (b_offset || odd_len) {
12112                 buf = kmalloc(len, GFP_KERNEL);
12113                 if (!buf)
12114                         return -ENOMEM;
12115                 if (b_offset)
12116                         memcpy(buf, &start, 4);
12117                 if (odd_len)
12118                         memcpy(buf+len-4, &end, 4);
12119                 memcpy(buf + b_offset, data, eeprom->len);
12120         }
12121
12122         ret = tg3_nvram_write_block(tp, offset, len, buf);
12123
12124         if (buf != data)
12125                 kfree(buf);
12126
12127         return ret;
12128 }
12129
12130 static int tg3_get_link_ksettings(struct net_device *dev,
12131                                   struct ethtool_link_ksettings *cmd)
12132 {
12133         struct tg3 *tp = netdev_priv(dev);
12134         u32 supported, advertising;
12135
12136         if (tg3_flag(tp, USE_PHYLIB)) {
12137                 struct phy_device *phydev;
12138                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12139                         return -EAGAIN;
12140                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12141                 phy_ethtool_ksettings_get(phydev, cmd);
12142
12143                 return 0;
12144         }
12145
12146         supported = (SUPPORTED_Autoneg);
12147
12148         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12149                 supported |= (SUPPORTED_1000baseT_Half |
12150                               SUPPORTED_1000baseT_Full);
12151
12152         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12153                 supported |= (SUPPORTED_100baseT_Half |
12154                               SUPPORTED_100baseT_Full |
12155                               SUPPORTED_10baseT_Half |
12156                               SUPPORTED_10baseT_Full |
12157                               SUPPORTED_TP);
12158                 cmd->base.port = PORT_TP;
12159         } else {
12160                 supported |= SUPPORTED_FIBRE;
12161                 cmd->base.port = PORT_FIBRE;
12162         }
12163         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
12164                                                 supported);
12165
12166         advertising = tp->link_config.advertising;
12167         if (tg3_flag(tp, PAUSE_AUTONEG)) {
12168                 if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
12169                         if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12170                                 advertising |= ADVERTISED_Pause;
12171                         } else {
12172                                 advertising |= ADVERTISED_Pause |
12173                                         ADVERTISED_Asym_Pause;
12174                         }
12175                 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12176                         advertising |= ADVERTISED_Asym_Pause;
12177                 }
12178         }
12179         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
12180                                                 advertising);
12181
12182         if (netif_running(dev) && tp->link_up) {
12183                 cmd->base.speed = tp->link_config.active_speed;
12184                 cmd->base.duplex = tp->link_config.active_duplex;
12185                 ethtool_convert_legacy_u32_to_link_mode(
12186                         cmd->link_modes.lp_advertising,
12187                         tp->link_config.rmt_adv);
12188
12189                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12190                         if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
12191                                 cmd->base.eth_tp_mdix = ETH_TP_MDI_X;
12192                         else
12193                                 cmd->base.eth_tp_mdix = ETH_TP_MDI;
12194                 }
12195         } else {
12196                 cmd->base.speed = SPEED_UNKNOWN;
12197                 cmd->base.duplex = DUPLEX_UNKNOWN;
12198                 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
12199         }
12200         cmd->base.phy_address = tp->phy_addr;
12201         cmd->base.autoneg = tp->link_config.autoneg;
12202         return 0;
12203 }
12204
12205 static int tg3_set_link_ksettings(struct net_device *dev,
12206                                   const struct ethtool_link_ksettings *cmd)
12207 {
12208         struct tg3 *tp = netdev_priv(dev);
12209         u32 speed = cmd->base.speed;
12210         u32 advertising;
12211
12212         if (tg3_flag(tp, USE_PHYLIB)) {
12213                 struct phy_device *phydev;
12214                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12215                         return -EAGAIN;
12216                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12217                 return phy_ethtool_ksettings_set(phydev, cmd);
12218         }
12219
12220         if (cmd->base.autoneg != AUTONEG_ENABLE &&
12221             cmd->base.autoneg != AUTONEG_DISABLE)
12222                 return -EINVAL;
12223
12224         if (cmd->base.autoneg == AUTONEG_DISABLE &&
12225             cmd->base.duplex != DUPLEX_FULL &&
12226             cmd->base.duplex != DUPLEX_HALF)
12227                 return -EINVAL;
12228
12229         ethtool_convert_link_mode_to_legacy_u32(&advertising,
12230                                                 cmd->link_modes.advertising);
12231
12232         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12233                 u32 mask = ADVERTISED_Autoneg |
12234                            ADVERTISED_Pause |
12235                            ADVERTISED_Asym_Pause;
12236
12237                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12238                         mask |= ADVERTISED_1000baseT_Half |
12239                                 ADVERTISED_1000baseT_Full;
12240
12241                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
12242                         mask |= ADVERTISED_100baseT_Half |
12243                                 ADVERTISED_100baseT_Full |
12244                                 ADVERTISED_10baseT_Half |
12245                                 ADVERTISED_10baseT_Full |
12246                                 ADVERTISED_TP;
12247                 else
12248                         mask |= ADVERTISED_FIBRE;
12249
12250                 if (advertising & ~mask)
12251                         return -EINVAL;
12252
12253                 mask &= (ADVERTISED_1000baseT_Half |
12254                          ADVERTISED_1000baseT_Full |
12255                          ADVERTISED_100baseT_Half |
12256                          ADVERTISED_100baseT_Full |
12257                          ADVERTISED_10baseT_Half |
12258                          ADVERTISED_10baseT_Full);
12259
12260                 advertising &= mask;
12261         } else {
12262                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
12263                         if (speed != SPEED_1000)
12264                                 return -EINVAL;
12265
12266                         if (cmd->base.duplex != DUPLEX_FULL)
12267                                 return -EINVAL;
12268                 } else {
12269                         if (speed != SPEED_100 &&
12270                             speed != SPEED_10)
12271                                 return -EINVAL;
12272                 }
12273         }
12274
12275         tg3_full_lock(tp, 0);
12276
12277         tp->link_config.autoneg = cmd->base.autoneg;
12278         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12279                 tp->link_config.advertising = (advertising |
12280                                               ADVERTISED_Autoneg);
12281                 tp->link_config.speed = SPEED_UNKNOWN;
12282                 tp->link_config.duplex = DUPLEX_UNKNOWN;
12283         } else {
12284                 tp->link_config.advertising = 0;
12285                 tp->link_config.speed = speed;
12286                 tp->link_config.duplex = cmd->base.duplex;
12287         }
12288
12289         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12290
12291         tg3_warn_mgmt_link_flap(tp);
12292
12293         if (netif_running(dev))
12294                 tg3_setup_phy(tp, true);
12295
12296         tg3_full_unlock(tp);
12297
12298         return 0;
12299 }
12300
12301 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
12302 {
12303         struct tg3 *tp = netdev_priv(dev);
12304
12305         strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
12306         strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
12307         strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
12308 }
12309
12310 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12311 {
12312         struct tg3 *tp = netdev_priv(dev);
12313
12314         if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
12315                 wol->supported = WAKE_MAGIC;
12316         else
12317                 wol->supported = 0;
12318         wol->wolopts = 0;
12319         if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
12320                 wol->wolopts = WAKE_MAGIC;
12321         memset(&wol->sopass, 0, sizeof(wol->sopass));
12322 }
12323
12324 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12325 {
12326         struct tg3 *tp = netdev_priv(dev);
12327         struct device *dp = &tp->pdev->dev;
12328
12329         if (wol->wolopts & ~WAKE_MAGIC)
12330                 return -EINVAL;
12331         if ((wol->wolopts & WAKE_MAGIC) &&
12332             !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
12333                 return -EINVAL;
12334
12335         device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
12336
12337         if (device_may_wakeup(dp))
12338                 tg3_flag_set(tp, WOL_ENABLE);
12339         else
12340                 tg3_flag_clear(tp, WOL_ENABLE);
12341
12342         return 0;
12343 }
12344
12345 static u32 tg3_get_msglevel(struct net_device *dev)
12346 {
12347         struct tg3 *tp = netdev_priv(dev);
12348         return tp->msg_enable;
12349 }
12350
12351 static void tg3_set_msglevel(struct net_device *dev, u32 value)
12352 {
12353         struct tg3 *tp = netdev_priv(dev);
12354         tp->msg_enable = value;
12355 }
12356
12357 static int tg3_nway_reset(struct net_device *dev)
12358 {
12359         struct tg3 *tp = netdev_priv(dev);
12360         int r;
12361
12362         if (!netif_running(dev))
12363                 return -EAGAIN;
12364
12365         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12366                 return -EINVAL;
12367
12368         tg3_warn_mgmt_link_flap(tp);
12369
12370         if (tg3_flag(tp, USE_PHYLIB)) {
12371                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12372                         return -EAGAIN;
12373                 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
12374         } else {
12375                 u32 bmcr;
12376
12377                 spin_lock_bh(&tp->lock);
12378                 r = -EINVAL;
12379                 tg3_readphy(tp, MII_BMCR, &bmcr);
12380                 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
12381                     ((bmcr & BMCR_ANENABLE) ||
12382                      (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
12383                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
12384                                                    BMCR_ANENABLE);
12385                         r = 0;
12386                 }
12387                 spin_unlock_bh(&tp->lock);
12388         }
12389
12390         return r;
12391 }
12392
12393 static void tg3_get_ringparam(struct net_device *dev,
12394                               struct ethtool_ringparam *ering,
12395                               struct kernel_ethtool_ringparam *kernel_ering,
12396                               struct netlink_ext_ack *extack)
12397 {
12398         struct tg3 *tp = netdev_priv(dev);
12399
12400         ering->rx_max_pending = tp->rx_std_ring_mask;
12401         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12402                 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
12403         else
12404                 ering->rx_jumbo_max_pending = 0;
12405
12406         ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
12407
12408         ering->rx_pending = tp->rx_pending;
12409         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12410                 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
12411         else
12412                 ering->rx_jumbo_pending = 0;
12413
12414         ering->tx_pending = tp->napi[0].tx_pending;
12415 }
12416
12417 static int tg3_set_ringparam(struct net_device *dev,
12418                              struct ethtool_ringparam *ering,
12419                              struct kernel_ethtool_ringparam *kernel_ering,
12420                              struct netlink_ext_ack *extack)
12421 {
12422         struct tg3 *tp = netdev_priv(dev);
12423         int i, irq_sync = 0, err = 0;
12424         bool reset_phy = false;
12425
12426         if ((ering->rx_pending > tp->rx_std_ring_mask) ||
12427             (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
12428             (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
12429             (ering->tx_pending <= MAX_SKB_FRAGS) ||
12430             (tg3_flag(tp, TSO_BUG) &&
12431              (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
12432                 return -EINVAL;
12433
12434         if (netif_running(dev)) {
12435                 tg3_phy_stop(tp);
12436                 tg3_netif_stop(tp);
12437                 irq_sync = 1;
12438         }
12439
12440         tg3_full_lock(tp, irq_sync);
12441
12442         tp->rx_pending = ering->rx_pending;
12443
12444         if (tg3_flag(tp, MAX_RXPEND_64) &&
12445             tp->rx_pending > 63)
12446                 tp->rx_pending = 63;
12447
12448         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12449                 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
12450
12451         for (i = 0; i < tp->irq_max; i++)
12452                 tp->napi[i].tx_pending = ering->tx_pending;
12453
12454         if (netif_running(dev)) {
12455                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12456                 /* Reset PHY to avoid PHY lock up */
12457                 if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12458                     tg3_asic_rev(tp) == ASIC_REV_5719 ||
12459                     tg3_asic_rev(tp) == ASIC_REV_5720)
12460                         reset_phy = true;
12461
12462                 err = tg3_restart_hw(tp, reset_phy);
12463                 if (!err)
12464                         tg3_netif_start(tp);
12465         }
12466
12467         tg3_full_unlock(tp);
12468
12469         if (irq_sync && !err)
12470                 tg3_phy_start(tp);
12471
12472         return err;
12473 }
12474
12475 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12476 {
12477         struct tg3 *tp = netdev_priv(dev);
12478
12479         epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
12480
12481         if (tp->link_config.flowctrl & FLOW_CTRL_RX)
12482                 epause->rx_pause = 1;
12483         else
12484                 epause->rx_pause = 0;
12485
12486         if (tp->link_config.flowctrl & FLOW_CTRL_TX)
12487                 epause->tx_pause = 1;
12488         else
12489                 epause->tx_pause = 0;
12490 }
12491
12492 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12493 {
12494         struct tg3 *tp = netdev_priv(dev);
12495         int err = 0;
12496         bool reset_phy = false;
12497
12498         if (tp->link_config.autoneg == AUTONEG_ENABLE)
12499                 tg3_warn_mgmt_link_flap(tp);
12500
12501         if (tg3_flag(tp, USE_PHYLIB)) {
12502                 struct phy_device *phydev;
12503
12504                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12505
12506                 if (!phy_validate_pause(phydev, epause))
12507                         return -EINVAL;
12508
12509                 tp->link_config.flowctrl = 0;
12510                 phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause);
12511                 if (epause->rx_pause) {
12512                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12513
12514                         if (epause->tx_pause) {
12515                                 tp->link_config.flowctrl |= FLOW_CTRL_TX;
12516                         }
12517                 } else if (epause->tx_pause) {
12518                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12519                 }
12520
12521                 if (epause->autoneg)
12522                         tg3_flag_set(tp, PAUSE_AUTONEG);
12523                 else
12524                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12525
12526                 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
12527                         if (phydev->autoneg) {
12528                                 /* phy_set_asym_pause() will
12529                                  * renegotiate the link to inform our
12530                                  * link partner of our flow control
12531                                  * settings, even if the flow control
12532                                  * is forced.  Let tg3_adjust_link()
12533                                  * do the final flow control setup.
12534                                  */
12535                                 return 0;
12536                         }
12537
12538                         if (!epause->autoneg)
12539                                 tg3_setup_flow_control(tp, 0, 0);
12540                 }
12541         } else {
12542                 int irq_sync = 0;
12543
12544                 if (netif_running(dev)) {
12545                         tg3_netif_stop(tp);
12546                         irq_sync = 1;
12547                 }
12548
12549                 tg3_full_lock(tp, irq_sync);
12550
12551                 if (epause->autoneg)
12552                         tg3_flag_set(tp, PAUSE_AUTONEG);
12553                 else
12554                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12555                 if (epause->rx_pause)
12556                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12557                 else
12558                         tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
12559                 if (epause->tx_pause)
12560                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12561                 else
12562                         tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
12563
12564                 if (netif_running(dev)) {
12565                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12566                         /* Reset PHY to avoid PHY lock up */
12567                         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12568                             tg3_asic_rev(tp) == ASIC_REV_5719 ||
12569                             tg3_asic_rev(tp) == ASIC_REV_5720)
12570                                 reset_phy = true;
12571
12572                         err = tg3_restart_hw(tp, reset_phy);
12573                         if (!err)
12574                                 tg3_netif_start(tp);
12575                 }
12576
12577                 tg3_full_unlock(tp);
12578         }
12579
12580         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12581
12582         return err;
12583 }
12584
12585 static int tg3_get_sset_count(struct net_device *dev, int sset)
12586 {
12587         switch (sset) {
12588         case ETH_SS_TEST:
12589                 return TG3_NUM_TEST;
12590         case ETH_SS_STATS:
12591                 return TG3_NUM_STATS;
12592         default:
12593                 return -EOPNOTSUPP;
12594         }
12595 }
12596
12597 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
12598                          u32 *rules __always_unused)
12599 {
12600         struct tg3 *tp = netdev_priv(dev);
12601
12602         if (!tg3_flag(tp, SUPPORT_MSIX))
12603                 return -EOPNOTSUPP;
12604
12605         switch (info->cmd) {
12606         case ETHTOOL_GRXRINGS:
12607                 if (netif_running(tp->dev))
12608                         info->data = tp->rxq_cnt;
12609                 else {
12610                         info->data = num_online_cpus();
12611                         if (info->data > TG3_RSS_MAX_NUM_QS)
12612                                 info->data = TG3_RSS_MAX_NUM_QS;
12613                 }
12614
12615                 return 0;
12616
12617         default:
12618                 return -EOPNOTSUPP;
12619         }
12620 }
12621
12622 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
12623 {
12624         u32 size = 0;
12625         struct tg3 *tp = netdev_priv(dev);
12626
12627         if (tg3_flag(tp, SUPPORT_MSIX))
12628                 size = TG3_RSS_INDIR_TBL_SIZE;
12629
12630         return size;
12631 }
12632
12633 static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc)
12634 {
12635         struct tg3 *tp = netdev_priv(dev);
12636         int i;
12637
12638         if (hfunc)
12639                 *hfunc = ETH_RSS_HASH_TOP;
12640         if (!indir)
12641                 return 0;
12642
12643         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12644                 indir[i] = tp->rss_ind_tbl[i];
12645
12646         return 0;
12647 }
12648
12649 static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key,
12650                         const u8 hfunc)
12651 {
12652         struct tg3 *tp = netdev_priv(dev);
12653         size_t i;
12654
12655         /* We require at least one supported parameter to be changed and no
12656          * change in any of the unsupported parameters
12657          */
12658         if (key ||
12659             (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
12660                 return -EOPNOTSUPP;
12661
12662         if (!indir)
12663                 return 0;
12664
12665         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12666                 tp->rss_ind_tbl[i] = indir[i];
12667
12668         if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
12669                 return 0;
12670
12671         /* It is legal to write the indirection
12672          * table while the device is running.
12673          */
12674         tg3_full_lock(tp, 0);
12675         tg3_rss_write_indir_tbl(tp);
12676         tg3_full_unlock(tp);
12677
12678         return 0;
12679 }
12680
12681 static void tg3_get_channels(struct net_device *dev,
12682                              struct ethtool_channels *channel)
12683 {
12684         struct tg3 *tp = netdev_priv(dev);
12685         u32 deflt_qs = netif_get_num_default_rss_queues();
12686
12687         channel->max_rx = tp->rxq_max;
12688         channel->max_tx = tp->txq_max;
12689
12690         if (netif_running(dev)) {
12691                 channel->rx_count = tp->rxq_cnt;
12692                 channel->tx_count = tp->txq_cnt;
12693         } else {
12694                 if (tp->rxq_req)
12695                         channel->rx_count = tp->rxq_req;
12696                 else
12697                         channel->rx_count = min(deflt_qs, tp->rxq_max);
12698
12699                 if (tp->txq_req)
12700                         channel->tx_count = tp->txq_req;
12701                 else
12702                         channel->tx_count = min(deflt_qs, tp->txq_max);
12703         }
12704 }
12705
12706 static int tg3_set_channels(struct net_device *dev,
12707                             struct ethtool_channels *channel)
12708 {
12709         struct tg3 *tp = netdev_priv(dev);
12710
12711         if (!tg3_flag(tp, SUPPORT_MSIX))
12712                 return -EOPNOTSUPP;
12713
12714         if (channel->rx_count > tp->rxq_max ||
12715             channel->tx_count > tp->txq_max)
12716                 return -EINVAL;
12717
12718         tp->rxq_req = channel->rx_count;
12719         tp->txq_req = channel->tx_count;
12720
12721         if (!netif_running(dev))
12722                 return 0;
12723
12724         tg3_stop(tp);
12725
12726         tg3_carrier_off(tp);
12727
12728         tg3_start(tp, true, false, false);
12729
12730         return 0;
12731 }
12732
12733 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
12734 {
12735         switch (stringset) {
12736         case ETH_SS_STATS:
12737                 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
12738                 break;
12739         case ETH_SS_TEST:
12740                 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
12741                 break;
12742         default:
12743                 WARN_ON(1);     /* we need a WARN() */
12744                 break;
12745         }
12746 }
12747
12748 static int tg3_set_phys_id(struct net_device *dev,
12749                             enum ethtool_phys_id_state state)
12750 {
12751         struct tg3 *tp = netdev_priv(dev);
12752
12753         switch (state) {
12754         case ETHTOOL_ID_ACTIVE:
12755                 return 1;       /* cycle on/off once per second */
12756
12757         case ETHTOOL_ID_ON:
12758                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12759                      LED_CTRL_1000MBPS_ON |
12760                      LED_CTRL_100MBPS_ON |
12761                      LED_CTRL_10MBPS_ON |
12762                      LED_CTRL_TRAFFIC_OVERRIDE |
12763                      LED_CTRL_TRAFFIC_BLINK |
12764                      LED_CTRL_TRAFFIC_LED);
12765                 break;
12766
12767         case ETHTOOL_ID_OFF:
12768                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12769                      LED_CTRL_TRAFFIC_OVERRIDE);
12770                 break;
12771
12772         case ETHTOOL_ID_INACTIVE:
12773                 tw32(MAC_LED_CTRL, tp->led_ctrl);
12774                 break;
12775         }
12776
12777         return 0;
12778 }
12779
12780 static void tg3_get_ethtool_stats(struct net_device *dev,
12781                                    struct ethtool_stats *estats, u64 *tmp_stats)
12782 {
12783         struct tg3 *tp = netdev_priv(dev);
12784
12785         if (tp->hw_stats)
12786                 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
12787         else
12788                 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
12789 }
12790
12791 static __be32 *tg3_vpd_readblock(struct tg3 *tp, unsigned int *vpdlen)
12792 {
12793         int i;
12794         __be32 *buf;
12795         u32 offset = 0, len = 0;
12796         u32 magic, val;
12797
12798         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
12799                 return NULL;
12800
12801         if (magic == TG3_EEPROM_MAGIC) {
12802                 for (offset = TG3_NVM_DIR_START;
12803                      offset < TG3_NVM_DIR_END;
12804                      offset += TG3_NVM_DIRENT_SIZE) {
12805                         if (tg3_nvram_read(tp, offset, &val))
12806                                 return NULL;
12807
12808                         if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
12809                             TG3_NVM_DIRTYPE_EXTVPD)
12810                                 break;
12811                 }
12812
12813                 if (offset != TG3_NVM_DIR_END) {
12814                         len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
12815                         if (tg3_nvram_read(tp, offset + 4, &offset))
12816                                 return NULL;
12817
12818                         offset = tg3_nvram_logical_addr(tp, offset);
12819                 }
12820
12821                 if (!offset || !len) {
12822                         offset = TG3_NVM_VPD_OFF;
12823                         len = TG3_NVM_VPD_LEN;
12824                 }
12825
12826                 buf = kmalloc(len, GFP_KERNEL);
12827                 if (!buf)
12828                         return NULL;
12829
12830                 for (i = 0; i < len; i += 4) {
12831                         /* The data is in little-endian format in NVRAM.
12832                          * Use the big-endian read routines to preserve
12833                          * the byte order as it exists in NVRAM.
12834                          */
12835                         if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
12836                                 goto error;
12837                 }
12838                 *vpdlen = len;
12839         } else {
12840                 buf = pci_vpd_alloc(tp->pdev, vpdlen);
12841                 if (IS_ERR(buf))
12842                         return NULL;
12843         }
12844
12845         return buf;
12846
12847 error:
12848         kfree(buf);
12849         return NULL;
12850 }
12851
12852 #define NVRAM_TEST_SIZE 0x100
12853 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE   0x14
12854 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE   0x18
12855 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE   0x1c
12856 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE   0x20
12857 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE   0x24
12858 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE   0x50
12859 #define NVRAM_SELFBOOT_HW_SIZE 0x20
12860 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
12861
12862 static int tg3_test_nvram(struct tg3 *tp)
12863 {
12864         u32 csum, magic;
12865         __be32 *buf;
12866         int i, j, k, err = 0, size;
12867         unsigned int len;
12868
12869         if (tg3_flag(tp, NO_NVRAM))
12870                 return 0;
12871
12872         if (tg3_nvram_read(tp, 0, &magic) != 0)
12873                 return -EIO;
12874
12875         if (magic == TG3_EEPROM_MAGIC)
12876                 size = NVRAM_TEST_SIZE;
12877         else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
12878                 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
12879                     TG3_EEPROM_SB_FORMAT_1) {
12880                         switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
12881                         case TG3_EEPROM_SB_REVISION_0:
12882                                 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
12883                                 break;
12884                         case TG3_EEPROM_SB_REVISION_2:
12885                                 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
12886                                 break;
12887                         case TG3_EEPROM_SB_REVISION_3:
12888                                 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
12889                                 break;
12890                         case TG3_EEPROM_SB_REVISION_4:
12891                                 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
12892                                 break;
12893                         case TG3_EEPROM_SB_REVISION_5:
12894                                 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
12895                                 break;
12896                         case TG3_EEPROM_SB_REVISION_6:
12897                                 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
12898                                 break;
12899                         default:
12900                                 return -EIO;
12901                         }
12902                 } else
12903                         return 0;
12904         } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
12905                 size = NVRAM_SELFBOOT_HW_SIZE;
12906         else
12907                 return -EIO;
12908
12909         buf = kmalloc(size, GFP_KERNEL);
12910         if (buf == NULL)
12911                 return -ENOMEM;
12912
12913         err = -EIO;
12914         for (i = 0, j = 0; i < size; i += 4, j++) {
12915                 err = tg3_nvram_read_be32(tp, i, &buf[j]);
12916                 if (err)
12917                         break;
12918         }
12919         if (i < size)
12920                 goto out;
12921
12922         /* Selfboot format */
12923         magic = be32_to_cpu(buf[0]);
12924         if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
12925             TG3_EEPROM_MAGIC_FW) {
12926                 u8 *buf8 = (u8 *) buf, csum8 = 0;
12927
12928                 if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
12929                     TG3_EEPROM_SB_REVISION_2) {
12930                         /* For rev 2, the csum doesn't include the MBA. */
12931                         for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
12932                                 csum8 += buf8[i];
12933                         for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
12934                                 csum8 += buf8[i];
12935                 } else {
12936                         for (i = 0; i < size; i++)
12937                                 csum8 += buf8[i];
12938                 }
12939
12940                 if (csum8 == 0) {
12941                         err = 0;
12942                         goto out;
12943                 }
12944
12945                 err = -EIO;
12946                 goto out;
12947         }
12948
12949         if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
12950             TG3_EEPROM_MAGIC_HW) {
12951                 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
12952                 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
12953                 u8 *buf8 = (u8 *) buf;
12954
12955                 /* Separate the parity bits and the data bytes.  */
12956                 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
12957                         if ((i == 0) || (i == 8)) {
12958                                 int l;
12959                                 u8 msk;
12960
12961                                 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
12962                                         parity[k++] = buf8[i] & msk;
12963                                 i++;
12964                         } else if (i == 16) {
12965                                 int l;
12966                                 u8 msk;
12967
12968                                 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
12969                                         parity[k++] = buf8[i] & msk;
12970                                 i++;
12971
12972                                 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
12973                                         parity[k++] = buf8[i] & msk;
12974                                 i++;
12975                         }
12976                         data[j++] = buf8[i];
12977                 }
12978
12979                 err = -EIO;
12980                 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
12981                         u8 hw8 = hweight8(data[i]);
12982
12983                         if ((hw8 & 0x1) && parity[i])
12984                                 goto out;
12985                         else if (!(hw8 & 0x1) && !parity[i])
12986                                 goto out;
12987                 }
12988                 err = 0;
12989                 goto out;
12990         }
12991
12992         err = -EIO;
12993
12994         /* Bootstrap checksum at offset 0x10 */
12995         csum = calc_crc((unsigned char *) buf, 0x10);
12996         if (csum != le32_to_cpu(buf[0x10/4]))
12997                 goto out;
12998
12999         /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
13000         csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
13001         if (csum != le32_to_cpu(buf[0xfc/4]))
13002                 goto out;
13003
13004         kfree(buf);
13005
13006         buf = tg3_vpd_readblock(tp, &len);
13007         if (!buf)
13008                 return -ENOMEM;
13009
13010         err = pci_vpd_check_csum(buf, len);
13011         /* go on if no checksum found */
13012         if (err == 1)
13013                 err = 0;
13014 out:
13015         kfree(buf);
13016         return err;
13017 }
13018
13019 #define TG3_SERDES_TIMEOUT_SEC  2
13020 #define TG3_COPPER_TIMEOUT_SEC  6
13021
13022 static int tg3_test_link(struct tg3 *tp)
13023 {
13024         int i, max;
13025
13026         if (!netif_running(tp->dev))
13027                 return -ENODEV;
13028
13029         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
13030                 max = TG3_SERDES_TIMEOUT_SEC;
13031         else
13032                 max = TG3_COPPER_TIMEOUT_SEC;
13033
13034         for (i = 0; i < max; i++) {
13035                 if (tp->link_up)
13036                         return 0;
13037
13038                 if (msleep_interruptible(1000))
13039                         break;
13040         }
13041
13042         return -EIO;
13043 }
13044
13045 /* Only test the commonly used registers */
13046 static int tg3_test_registers(struct tg3 *tp)
13047 {
13048         int i, is_5705, is_5750;
13049         u32 offset, read_mask, write_mask, val, save_val, read_val;
13050         static struct {
13051                 u16 offset;
13052                 u16 flags;
13053 #define TG3_FL_5705     0x1
13054 #define TG3_FL_NOT_5705 0x2
13055 #define TG3_FL_NOT_5788 0x4
13056 #define TG3_FL_NOT_5750 0x8
13057                 u32 read_mask;
13058                 u32 write_mask;
13059         } reg_tbl[] = {
13060                 /* MAC Control Registers */
13061                 { MAC_MODE, TG3_FL_NOT_5705,
13062                         0x00000000, 0x00ef6f8c },
13063                 { MAC_MODE, TG3_FL_5705,
13064                         0x00000000, 0x01ef6b8c },
13065                 { MAC_STATUS, TG3_FL_NOT_5705,
13066                         0x03800107, 0x00000000 },
13067                 { MAC_STATUS, TG3_FL_5705,
13068                         0x03800100, 0x00000000 },
13069                 { MAC_ADDR_0_HIGH, 0x0000,
13070                         0x00000000, 0x0000ffff },
13071                 { MAC_ADDR_0_LOW, 0x0000,
13072                         0x00000000, 0xffffffff },
13073                 { MAC_RX_MTU_SIZE, 0x0000,
13074                         0x00000000, 0x0000ffff },
13075                 { MAC_TX_MODE, 0x0000,
13076                         0x00000000, 0x00000070 },
13077                 { MAC_TX_LENGTHS, 0x0000,
13078                         0x00000000, 0x00003fff },
13079                 { MAC_RX_MODE, TG3_FL_NOT_5705,
13080                         0x00000000, 0x000007fc },
13081                 { MAC_RX_MODE, TG3_FL_5705,
13082                         0x00000000, 0x000007dc },
13083                 { MAC_HASH_REG_0, 0x0000,
13084                         0x00000000, 0xffffffff },
13085                 { MAC_HASH_REG_1, 0x0000,
13086                         0x00000000, 0xffffffff },
13087                 { MAC_HASH_REG_2, 0x0000,
13088                         0x00000000, 0xffffffff },
13089                 { MAC_HASH_REG_3, 0x0000,
13090                         0x00000000, 0xffffffff },
13091
13092                 /* Receive Data and Receive BD Initiator Control Registers. */
13093                 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
13094                         0x00000000, 0xffffffff },
13095                 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
13096                         0x00000000, 0xffffffff },
13097                 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
13098                         0x00000000, 0x00000003 },
13099                 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
13100                         0x00000000, 0xffffffff },
13101                 { RCVDBDI_STD_BD+0, 0x0000,
13102                         0x00000000, 0xffffffff },
13103                 { RCVDBDI_STD_BD+4, 0x0000,
13104                         0x00000000, 0xffffffff },
13105                 { RCVDBDI_STD_BD+8, 0x0000,
13106                         0x00000000, 0xffff0002 },
13107                 { RCVDBDI_STD_BD+0xc, 0x0000,
13108                         0x00000000, 0xffffffff },
13109
13110                 /* Receive BD Initiator Control Registers. */
13111                 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
13112                         0x00000000, 0xffffffff },
13113                 { RCVBDI_STD_THRESH, TG3_FL_5705,
13114                         0x00000000, 0x000003ff },
13115                 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
13116                         0x00000000, 0xffffffff },
13117
13118                 /* Host Coalescing Control Registers. */
13119                 { HOSTCC_MODE, TG3_FL_NOT_5705,
13120                         0x00000000, 0x00000004 },
13121                 { HOSTCC_MODE, TG3_FL_5705,
13122                         0x00000000, 0x000000f6 },
13123                 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
13124                         0x00000000, 0xffffffff },
13125                 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
13126                         0x00000000, 0x000003ff },
13127                 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
13128                         0x00000000, 0xffffffff },
13129                 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
13130                         0x00000000, 0x000003ff },
13131                 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
13132                         0x00000000, 0xffffffff },
13133                 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13134                         0x00000000, 0x000000ff },
13135                 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
13136                         0x00000000, 0xffffffff },
13137                 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13138                         0x00000000, 0x000000ff },
13139                 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
13140                         0x00000000, 0xffffffff },
13141                 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
13142                         0x00000000, 0xffffffff },
13143                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13144                         0x00000000, 0xffffffff },
13145                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13146                         0x00000000, 0x000000ff },
13147                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13148                         0x00000000, 0xffffffff },
13149                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13150                         0x00000000, 0x000000ff },
13151                 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
13152                         0x00000000, 0xffffffff },
13153                 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
13154                         0x00000000, 0xffffffff },
13155                 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
13156                         0x00000000, 0xffffffff },
13157                 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
13158                         0x00000000, 0xffffffff },
13159                 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
13160                         0x00000000, 0xffffffff },
13161                 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
13162                         0xffffffff, 0x00000000 },
13163                 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
13164                         0xffffffff, 0x00000000 },
13165
13166                 /* Buffer Manager Control Registers. */
13167                 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
13168                         0x00000000, 0x007fff80 },
13169                 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
13170                         0x00000000, 0x007fffff },
13171                 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
13172                         0x00000000, 0x0000003f },
13173                 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
13174                         0x00000000, 0x000001ff },
13175                 { BUFMGR_MB_HIGH_WATER, 0x0000,
13176                         0x00000000, 0x000001ff },
13177                 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
13178                         0xffffffff, 0x00000000 },
13179                 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
13180                         0xffffffff, 0x00000000 },
13181
13182                 /* Mailbox Registers */
13183                 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
13184                         0x00000000, 0x000001ff },
13185                 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
13186                         0x00000000, 0x000001ff },
13187                 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
13188                         0x00000000, 0x000007ff },
13189                 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
13190                         0x00000000, 0x000001ff },
13191
13192                 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
13193         };
13194
13195         is_5705 = is_5750 = 0;
13196         if (tg3_flag(tp, 5705_PLUS)) {
13197                 is_5705 = 1;
13198                 if (tg3_flag(tp, 5750_PLUS))
13199                         is_5750 = 1;
13200         }
13201
13202         for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
13203                 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
13204                         continue;
13205
13206                 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
13207                         continue;
13208
13209                 if (tg3_flag(tp, IS_5788) &&
13210                     (reg_tbl[i].flags & TG3_FL_NOT_5788))
13211                         continue;
13212
13213                 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
13214                         continue;
13215
13216                 offset = (u32) reg_tbl[i].offset;
13217                 read_mask = reg_tbl[i].read_mask;
13218                 write_mask = reg_tbl[i].write_mask;
13219
13220                 /* Save the original register content */
13221                 save_val = tr32(offset);
13222
13223                 /* Determine the read-only value. */
13224                 read_val = save_val & read_mask;
13225
13226                 /* Write zero to the register, then make sure the read-only bits
13227                  * are not changed and the read/write bits are all zeros.
13228                  */
13229                 tw32(offset, 0);
13230
13231                 val = tr32(offset);
13232
13233                 /* Test the read-only and read/write bits. */
13234                 if (((val & read_mask) != read_val) || (val & write_mask))
13235                         goto out;
13236
13237                 /* Write ones to all the bits defined by RdMask and WrMask, then
13238                  * make sure the read-only bits are not changed and the
13239                  * read/write bits are all ones.
13240                  */
13241                 tw32(offset, read_mask | write_mask);
13242
13243                 val = tr32(offset);
13244
13245                 /* Test the read-only bits. */
13246                 if ((val & read_mask) != read_val)
13247                         goto out;
13248
13249                 /* Test the read/write bits. */
13250                 if ((val & write_mask) != write_mask)
13251                         goto out;
13252
13253                 tw32(offset, save_val);
13254         }
13255
13256         return 0;
13257
13258 out:
13259         if (netif_msg_hw(tp))
13260                 netdev_err(tp->dev,
13261                            "Register test failed at offset %x\n", offset);
13262         tw32(offset, save_val);
13263         return -EIO;
13264 }
13265
13266 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
13267 {
13268         static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
13269         int i;
13270         u32 j;
13271
13272         for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
13273                 for (j = 0; j < len; j += 4) {
13274                         u32 val;
13275
13276                         tg3_write_mem(tp, offset + j, test_pattern[i]);
13277                         tg3_read_mem(tp, offset + j, &val);
13278                         if (val != test_pattern[i])
13279                                 return -EIO;
13280                 }
13281         }
13282         return 0;
13283 }
13284
13285 static int tg3_test_memory(struct tg3 *tp)
13286 {
13287         static struct mem_entry {
13288                 u32 offset;
13289                 u32 len;
13290         } mem_tbl_570x[] = {
13291                 { 0x00000000, 0x00b50},
13292                 { 0x00002000, 0x1c000},
13293                 { 0xffffffff, 0x00000}
13294         }, mem_tbl_5705[] = {
13295                 { 0x00000100, 0x0000c},
13296                 { 0x00000200, 0x00008},
13297                 { 0x00004000, 0x00800},
13298                 { 0x00006000, 0x01000},
13299                 { 0x00008000, 0x02000},
13300                 { 0x00010000, 0x0e000},
13301                 { 0xffffffff, 0x00000}
13302         }, mem_tbl_5755[] = {
13303                 { 0x00000200, 0x00008},
13304                 { 0x00004000, 0x00800},
13305                 { 0x00006000, 0x00800},
13306                 { 0x00008000, 0x02000},
13307                 { 0x00010000, 0x0c000},
13308                 { 0xffffffff, 0x00000}
13309         }, mem_tbl_5906[] = {
13310                 { 0x00000200, 0x00008},
13311                 { 0x00004000, 0x00400},
13312                 { 0x00006000, 0x00400},
13313                 { 0x00008000, 0x01000},
13314                 { 0x00010000, 0x01000},
13315                 { 0xffffffff, 0x00000}
13316         }, mem_tbl_5717[] = {
13317                 { 0x00000200, 0x00008},
13318                 { 0x00010000, 0x0a000},
13319                 { 0x00020000, 0x13c00},
13320                 { 0xffffffff, 0x00000}
13321         }, mem_tbl_57765[] = {
13322                 { 0x00000200, 0x00008},
13323                 { 0x00004000, 0x00800},
13324                 { 0x00006000, 0x09800},
13325                 { 0x00010000, 0x0a000},
13326                 { 0xffffffff, 0x00000}
13327         };
13328         struct mem_entry *mem_tbl;
13329         int err = 0;
13330         int i;
13331
13332         if (tg3_flag(tp, 5717_PLUS))
13333                 mem_tbl = mem_tbl_5717;
13334         else if (tg3_flag(tp, 57765_CLASS) ||
13335                  tg3_asic_rev(tp) == ASIC_REV_5762)
13336                 mem_tbl = mem_tbl_57765;
13337         else if (tg3_flag(tp, 5755_PLUS))
13338                 mem_tbl = mem_tbl_5755;
13339         else if (tg3_asic_rev(tp) == ASIC_REV_5906)
13340                 mem_tbl = mem_tbl_5906;
13341         else if (tg3_flag(tp, 5705_PLUS))
13342                 mem_tbl = mem_tbl_5705;
13343         else
13344                 mem_tbl = mem_tbl_570x;
13345
13346         for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
13347                 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
13348                 if (err)
13349                         break;
13350         }
13351
13352         return err;
13353 }
13354
13355 #define TG3_TSO_MSS             500
13356
13357 #define TG3_TSO_IP_HDR_LEN      20
13358 #define TG3_TSO_TCP_HDR_LEN     20
13359 #define TG3_TSO_TCP_OPT_LEN     12
13360
13361 static const u8 tg3_tso_header[] = {
13362 0x08, 0x00,
13363 0x45, 0x00, 0x00, 0x00,
13364 0x00, 0x00, 0x40, 0x00,
13365 0x40, 0x06, 0x00, 0x00,
13366 0x0a, 0x00, 0x00, 0x01,
13367 0x0a, 0x00, 0x00, 0x02,
13368 0x0d, 0x00, 0xe0, 0x00,
13369 0x00, 0x00, 0x01, 0x00,
13370 0x00, 0x00, 0x02, 0x00,
13371 0x80, 0x10, 0x10, 0x00,
13372 0x14, 0x09, 0x00, 0x00,
13373 0x01, 0x01, 0x08, 0x0a,
13374 0x11, 0x11, 0x11, 0x11,
13375 0x11, 0x11, 0x11, 0x11,
13376 };
13377
13378 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
13379 {
13380         u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
13381         u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
13382         u32 budget;
13383         struct sk_buff *skb;
13384         u8 *tx_data, *rx_data;
13385         dma_addr_t map;
13386         int num_pkts, tx_len, rx_len, i, err;
13387         struct tg3_rx_buffer_desc *desc;
13388         struct tg3_napi *tnapi, *rnapi;
13389         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
13390
13391         tnapi = &tp->napi[0];
13392         rnapi = &tp->napi[0];
13393         if (tp->irq_cnt > 1) {
13394                 if (tg3_flag(tp, ENABLE_RSS))
13395                         rnapi = &tp->napi[1];
13396                 if (tg3_flag(tp, ENABLE_TSS))
13397                         tnapi = &tp->napi[1];
13398         }
13399         coal_now = tnapi->coal_now | rnapi->coal_now;
13400
13401         err = -EIO;
13402
13403         tx_len = pktsz;
13404         skb = netdev_alloc_skb(tp->dev, tx_len);
13405         if (!skb)
13406                 return -ENOMEM;
13407
13408         tx_data = skb_put(skb, tx_len);
13409         memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN);
13410         memset(tx_data + ETH_ALEN, 0x0, 8);
13411
13412         tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
13413
13414         if (tso_loopback) {
13415                 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
13416
13417                 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
13418                               TG3_TSO_TCP_OPT_LEN;
13419
13420                 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
13421                        sizeof(tg3_tso_header));
13422                 mss = TG3_TSO_MSS;
13423
13424                 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
13425                 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
13426
13427                 /* Set the total length field in the IP header */
13428                 iph->tot_len = htons((u16)(mss + hdr_len));
13429
13430                 base_flags = (TXD_FLAG_CPU_PRE_DMA |
13431                               TXD_FLAG_CPU_POST_DMA);
13432
13433                 if (tg3_flag(tp, HW_TSO_1) ||
13434                     tg3_flag(tp, HW_TSO_2) ||
13435                     tg3_flag(tp, HW_TSO_3)) {
13436                         struct tcphdr *th;
13437                         val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
13438                         th = (struct tcphdr *)&tx_data[val];
13439                         th->check = 0;
13440                 } else
13441                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
13442
13443                 if (tg3_flag(tp, HW_TSO_3)) {
13444                         mss |= (hdr_len & 0xc) << 12;
13445                         if (hdr_len & 0x10)
13446                                 base_flags |= 0x00000010;
13447                         base_flags |= (hdr_len & 0x3e0) << 5;
13448                 } else if (tg3_flag(tp, HW_TSO_2))
13449                         mss |= hdr_len << 9;
13450                 else if (tg3_flag(tp, HW_TSO_1) ||
13451                          tg3_asic_rev(tp) == ASIC_REV_5705) {
13452                         mss |= (TG3_TSO_TCP_OPT_LEN << 9);
13453                 } else {
13454                         base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
13455                 }
13456
13457                 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
13458         } else {
13459                 num_pkts = 1;
13460                 data_off = ETH_HLEN;
13461
13462                 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
13463                     tx_len > VLAN_ETH_FRAME_LEN)
13464                         base_flags |= TXD_FLAG_JMB_PKT;
13465         }
13466
13467         for (i = data_off; i < tx_len; i++)
13468                 tx_data[i] = (u8) (i & 0xff);
13469
13470         map = dma_map_single(&tp->pdev->dev, skb->data, tx_len, DMA_TO_DEVICE);
13471         if (dma_mapping_error(&tp->pdev->dev, map)) {
13472                 dev_kfree_skb(skb);
13473                 return -EIO;
13474         }
13475
13476         val = tnapi->tx_prod;
13477         tnapi->tx_buffers[val].skb = skb;
13478         dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
13479
13480         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13481                rnapi->coal_now);
13482
13483         udelay(10);
13484
13485         rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
13486
13487         budget = tg3_tx_avail(tnapi);
13488         if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
13489                             base_flags | TXD_FLAG_END, mss, 0)) {
13490                 tnapi->tx_buffers[val].skb = NULL;
13491                 dev_kfree_skb(skb);
13492                 return -EIO;
13493         }
13494
13495         tnapi->tx_prod++;
13496
13497         /* Sync BD data before updating mailbox */
13498         wmb();
13499
13500         tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
13501         tr32_mailbox(tnapi->prodmbox);
13502
13503         udelay(10);
13504
13505         /* 350 usec to allow enough time on some 10/100 Mbps devices.  */
13506         for (i = 0; i < 35; i++) {
13507                 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13508                        coal_now);
13509
13510                 udelay(10);
13511
13512                 tx_idx = tnapi->hw_status->idx[0].tx_consumer;
13513                 rx_idx = rnapi->hw_status->idx[0].rx_producer;
13514                 if ((tx_idx == tnapi->tx_prod) &&
13515                     (rx_idx == (rx_start_idx + num_pkts)))
13516                         break;
13517         }
13518
13519         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
13520         dev_kfree_skb(skb);
13521
13522         if (tx_idx != tnapi->tx_prod)
13523                 goto out;
13524
13525         if (rx_idx != rx_start_idx + num_pkts)
13526                 goto out;
13527
13528         val = data_off;
13529         while (rx_idx != rx_start_idx) {
13530                 desc = &rnapi->rx_rcb[rx_start_idx++];
13531                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
13532                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
13533
13534                 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
13535                     (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
13536                         goto out;
13537
13538                 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
13539                          - ETH_FCS_LEN;
13540
13541                 if (!tso_loopback) {
13542                         if (rx_len != tx_len)
13543                                 goto out;
13544
13545                         if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
13546                                 if (opaque_key != RXD_OPAQUE_RING_STD)
13547                                         goto out;
13548                         } else {
13549                                 if (opaque_key != RXD_OPAQUE_RING_JUMBO)
13550                                         goto out;
13551                         }
13552                 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
13553                            (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
13554                             >> RXD_TCPCSUM_SHIFT != 0xffff) {
13555                         goto out;
13556                 }
13557
13558                 if (opaque_key == RXD_OPAQUE_RING_STD) {
13559                         rx_data = tpr->rx_std_buffers[desc_idx].data;
13560                         map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
13561                                              mapping);
13562                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
13563                         rx_data = tpr->rx_jmb_buffers[desc_idx].data;
13564                         map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
13565                                              mapping);
13566                 } else
13567                         goto out;
13568
13569                 dma_sync_single_for_cpu(&tp->pdev->dev, map, rx_len,
13570                                         DMA_FROM_DEVICE);
13571
13572                 rx_data += TG3_RX_OFFSET(tp);
13573                 for (i = data_off; i < rx_len; i++, val++) {
13574                         if (*(rx_data + i) != (u8) (val & 0xff))
13575                                 goto out;
13576                 }
13577         }
13578
13579         err = 0;
13580
13581         /* tg3_free_rings will unmap and free the rx_data */
13582 out:
13583         return err;
13584 }
13585
13586 #define TG3_STD_LOOPBACK_FAILED         1
13587 #define TG3_JMB_LOOPBACK_FAILED         2
13588 #define TG3_TSO_LOOPBACK_FAILED         4
13589 #define TG3_LOOPBACK_FAILED \
13590         (TG3_STD_LOOPBACK_FAILED | \
13591          TG3_JMB_LOOPBACK_FAILED | \
13592          TG3_TSO_LOOPBACK_FAILED)
13593
13594 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
13595 {
13596         int err = -EIO;
13597         u32 eee_cap;
13598         u32 jmb_pkt_sz = 9000;
13599
13600         if (tp->dma_limit)
13601                 jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
13602
13603         eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
13604         tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
13605
13606         if (!netif_running(tp->dev)) {
13607                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13608                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13609                 if (do_extlpbk)
13610                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13611                 goto done;
13612         }
13613
13614         err = tg3_reset_hw(tp, true);
13615         if (err) {
13616                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13617                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13618                 if (do_extlpbk)
13619                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13620                 goto done;
13621         }
13622
13623         if (tg3_flag(tp, ENABLE_RSS)) {
13624                 int i;
13625
13626                 /* Reroute all rx packets to the 1st queue */
13627                 for (i = MAC_RSS_INDIR_TBL_0;
13628                      i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
13629                         tw32(i, 0x0);
13630         }
13631
13632         /* HW errata - mac loopback fails in some cases on 5780.
13633          * Normal traffic and PHY loopback are not affected by
13634          * errata.  Also, the MAC loopback test is deprecated for
13635          * all newer ASIC revisions.
13636          */
13637         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
13638             !tg3_flag(tp, CPMU_PRESENT)) {
13639                 tg3_mac_loopback(tp, true);
13640
13641                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13642                         data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13643
13644                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13645                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13646                         data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13647
13648                 tg3_mac_loopback(tp, false);
13649         }
13650
13651         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
13652             !tg3_flag(tp, USE_PHYLIB)) {
13653                 int i;
13654
13655                 tg3_phy_lpbk_set(tp, 0, false);
13656
13657                 /* Wait for link */
13658                 for (i = 0; i < 100; i++) {
13659                         if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
13660                                 break;
13661                         mdelay(1);
13662                 }
13663
13664                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13665                         data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13666                 if (tg3_flag(tp, TSO_CAPABLE) &&
13667                     tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13668                         data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
13669                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13670                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13671                         data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13672
13673                 if (do_extlpbk) {
13674                         tg3_phy_lpbk_set(tp, 0, true);
13675
13676                         /* All link indications report up, but the hardware
13677                          * isn't really ready for about 20 msec.  Double it
13678                          * to be sure.
13679                          */
13680                         mdelay(40);
13681
13682                         if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13683                                 data[TG3_EXT_LOOPB_TEST] |=
13684                                                         TG3_STD_LOOPBACK_FAILED;
13685                         if (tg3_flag(tp, TSO_CAPABLE) &&
13686                             tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13687                                 data[TG3_EXT_LOOPB_TEST] |=
13688                                                         TG3_TSO_LOOPBACK_FAILED;
13689                         if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13690                             tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13691                                 data[TG3_EXT_LOOPB_TEST] |=
13692                                                         TG3_JMB_LOOPBACK_FAILED;
13693                 }
13694
13695                 /* Re-enable gphy autopowerdown. */
13696                 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
13697                         tg3_phy_toggle_apd(tp, true);
13698         }
13699
13700         err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
13701                data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
13702
13703 done:
13704         tp->phy_flags |= eee_cap;
13705
13706         return err;
13707 }
13708
13709 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
13710                           u64 *data)
13711 {
13712         struct tg3 *tp = netdev_priv(dev);
13713         bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
13714
13715         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
13716                 if (tg3_power_up(tp)) {
13717                         etest->flags |= ETH_TEST_FL_FAILED;
13718                         memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
13719                         return;
13720                 }
13721                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
13722         }
13723
13724         memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
13725
13726         if (tg3_test_nvram(tp) != 0) {
13727                 etest->flags |= ETH_TEST_FL_FAILED;
13728                 data[TG3_NVRAM_TEST] = 1;
13729         }
13730         if (!doextlpbk && tg3_test_link(tp)) {
13731                 etest->flags |= ETH_TEST_FL_FAILED;
13732                 data[TG3_LINK_TEST] = 1;
13733         }
13734         if (etest->flags & ETH_TEST_FL_OFFLINE) {
13735                 int err, err2 = 0, irq_sync = 0;
13736
13737                 if (netif_running(dev)) {
13738                         tg3_phy_stop(tp);
13739                         tg3_netif_stop(tp);
13740                         irq_sync = 1;
13741                 }
13742
13743                 tg3_full_lock(tp, irq_sync);
13744                 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
13745                 err = tg3_nvram_lock(tp);
13746                 tg3_halt_cpu(tp, RX_CPU_BASE);
13747                 if (!tg3_flag(tp, 5705_PLUS))
13748                         tg3_halt_cpu(tp, TX_CPU_BASE);
13749                 if (!err)
13750                         tg3_nvram_unlock(tp);
13751
13752                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
13753                         tg3_phy_reset(tp);
13754
13755                 if (tg3_test_registers(tp) != 0) {
13756                         etest->flags |= ETH_TEST_FL_FAILED;
13757                         data[TG3_REGISTER_TEST] = 1;
13758                 }
13759
13760                 if (tg3_test_memory(tp) != 0) {
13761                         etest->flags |= ETH_TEST_FL_FAILED;
13762                         data[TG3_MEMORY_TEST] = 1;
13763                 }
13764
13765                 if (doextlpbk)
13766                         etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
13767
13768                 if (tg3_test_loopback(tp, data, doextlpbk))
13769                         etest->flags |= ETH_TEST_FL_FAILED;
13770
13771                 tg3_full_unlock(tp);
13772
13773                 if (tg3_test_interrupt(tp) != 0) {
13774                         etest->flags |= ETH_TEST_FL_FAILED;
13775                         data[TG3_INTERRUPT_TEST] = 1;
13776                 }
13777
13778                 tg3_full_lock(tp, 0);
13779
13780                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13781                 if (netif_running(dev)) {
13782                         tg3_flag_set(tp, INIT_COMPLETE);
13783                         err2 = tg3_restart_hw(tp, true);
13784                         if (!err2)
13785                                 tg3_netif_start(tp);
13786                 }
13787
13788                 tg3_full_unlock(tp);
13789
13790                 if (irq_sync && !err2)
13791                         tg3_phy_start(tp);
13792         }
13793         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
13794                 tg3_power_down_prepare(tp);
13795
13796 }
13797
13798 static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
13799 {
13800         struct tg3 *tp = netdev_priv(dev);
13801         struct hwtstamp_config stmpconf;
13802
13803         if (!tg3_flag(tp, PTP_CAPABLE))
13804                 return -EOPNOTSUPP;
13805
13806         if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
13807                 return -EFAULT;
13808
13809         if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
13810             stmpconf.tx_type != HWTSTAMP_TX_OFF)
13811                 return -ERANGE;
13812
13813         switch (stmpconf.rx_filter) {
13814         case HWTSTAMP_FILTER_NONE:
13815                 tp->rxptpctl = 0;
13816                 break;
13817         case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
13818                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13819                                TG3_RX_PTP_CTL_ALL_V1_EVENTS;
13820                 break;
13821         case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
13822                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13823                                TG3_RX_PTP_CTL_SYNC_EVNT;
13824                 break;
13825         case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
13826                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13827                                TG3_RX_PTP_CTL_DELAY_REQ;
13828                 break;
13829         case HWTSTAMP_FILTER_PTP_V2_EVENT:
13830                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13831                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13832                 break;
13833         case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
13834                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13835                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13836                 break;
13837         case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
13838                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13839                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13840                 break;
13841         case HWTSTAMP_FILTER_PTP_V2_SYNC:
13842                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13843                                TG3_RX_PTP_CTL_SYNC_EVNT;
13844                 break;
13845         case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
13846                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13847                                TG3_RX_PTP_CTL_SYNC_EVNT;
13848                 break;
13849         case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
13850                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13851                                TG3_RX_PTP_CTL_SYNC_EVNT;
13852                 break;
13853         case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
13854                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13855                                TG3_RX_PTP_CTL_DELAY_REQ;
13856                 break;
13857         case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
13858                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13859                                TG3_RX_PTP_CTL_DELAY_REQ;
13860                 break;
13861         case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
13862                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13863                                TG3_RX_PTP_CTL_DELAY_REQ;
13864                 break;
13865         default:
13866                 return -ERANGE;
13867         }
13868
13869         if (netif_running(dev) && tp->rxptpctl)
13870                 tw32(TG3_RX_PTP_CTL,
13871                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
13872
13873         if (stmpconf.tx_type == HWTSTAMP_TX_ON)
13874                 tg3_flag_set(tp, TX_TSTAMP_EN);
13875         else
13876                 tg3_flag_clear(tp, TX_TSTAMP_EN);
13877
13878         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13879                 -EFAULT : 0;
13880 }
13881
13882 static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
13883 {
13884         struct tg3 *tp = netdev_priv(dev);
13885         struct hwtstamp_config stmpconf;
13886
13887         if (!tg3_flag(tp, PTP_CAPABLE))
13888                 return -EOPNOTSUPP;
13889
13890         stmpconf.flags = 0;
13891         stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ?
13892                             HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF);
13893
13894         switch (tp->rxptpctl) {
13895         case 0:
13896                 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE;
13897                 break;
13898         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS:
13899                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
13900                 break;
13901         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13902                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
13903                 break;
13904         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13905                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
13906                 break;
13907         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13908                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
13909                 break;
13910         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13911                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
13912                 break;
13913         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13914                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
13915                 break;
13916         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13917                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
13918                 break;
13919         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13920                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC;
13921                 break;
13922         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13923                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
13924                 break;
13925         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13926                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
13927                 break;
13928         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13929                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ;
13930                 break;
13931         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13932                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
13933                 break;
13934         default:
13935                 WARN_ON_ONCE(1);
13936                 return -ERANGE;
13937         }
13938
13939         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13940                 -EFAULT : 0;
13941 }
13942
13943 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
13944 {
13945         struct mii_ioctl_data *data = if_mii(ifr);
13946         struct tg3 *tp = netdev_priv(dev);
13947         int err;
13948
13949         if (tg3_flag(tp, USE_PHYLIB)) {
13950                 struct phy_device *phydev;
13951                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
13952                         return -EAGAIN;
13953                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
13954                 return phy_mii_ioctl(phydev, ifr, cmd);
13955         }
13956
13957         switch (cmd) {
13958         case SIOCGMIIPHY:
13959                 data->phy_id = tp->phy_addr;
13960
13961                 fallthrough;
13962         case SIOCGMIIREG: {
13963                 u32 mii_regval;
13964
13965                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13966                         break;                  /* We have no PHY */
13967
13968                 if (!netif_running(dev))
13969                         return -EAGAIN;
13970
13971                 spin_lock_bh(&tp->lock);
13972                 err = __tg3_readphy(tp, data->phy_id & 0x1f,
13973                                     data->reg_num & 0x1f, &mii_regval);
13974                 spin_unlock_bh(&tp->lock);
13975
13976                 data->val_out = mii_regval;
13977
13978                 return err;
13979         }
13980
13981         case SIOCSMIIREG:
13982                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13983                         break;                  /* We have no PHY */
13984
13985                 if (!netif_running(dev))
13986                         return -EAGAIN;
13987
13988                 spin_lock_bh(&tp->lock);
13989                 err = __tg3_writephy(tp, data->phy_id & 0x1f,
13990                                      data->reg_num & 0x1f, data->val_in);
13991                 spin_unlock_bh(&tp->lock);
13992
13993                 return err;
13994
13995         case SIOCSHWTSTAMP:
13996                 return tg3_hwtstamp_set(dev, ifr);
13997
13998         case SIOCGHWTSTAMP:
13999                 return tg3_hwtstamp_get(dev, ifr);
14000
14001         default:
14002                 /* do nothing */
14003                 break;
14004         }
14005         return -EOPNOTSUPP;
14006 }
14007
14008 static int tg3_get_coalesce(struct net_device *dev,
14009                             struct ethtool_coalesce *ec,
14010                             struct kernel_ethtool_coalesce *kernel_coal,
14011                             struct netlink_ext_ack *extack)
14012 {
14013         struct tg3 *tp = netdev_priv(dev);
14014
14015         memcpy(ec, &tp->coal, sizeof(*ec));
14016         return 0;
14017 }
14018
14019 static int tg3_set_coalesce(struct net_device *dev,
14020                             struct ethtool_coalesce *ec,
14021                             struct kernel_ethtool_coalesce *kernel_coal,
14022                             struct netlink_ext_ack *extack)
14023 {
14024         struct tg3 *tp = netdev_priv(dev);
14025         u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
14026         u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
14027
14028         if (!tg3_flag(tp, 5705_PLUS)) {
14029                 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
14030                 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
14031                 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
14032                 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
14033         }
14034
14035         if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
14036             (!ec->rx_coalesce_usecs) ||
14037             (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
14038             (!ec->tx_coalesce_usecs) ||
14039             (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
14040             (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
14041             (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
14042             (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
14043             (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
14044             (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
14045             (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
14046             (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
14047                 return -EINVAL;
14048
14049         /* Only copy relevant parameters, ignore all others. */
14050         tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
14051         tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
14052         tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
14053         tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
14054         tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
14055         tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
14056         tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
14057         tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
14058         tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
14059
14060         if (netif_running(dev)) {
14061                 tg3_full_lock(tp, 0);
14062                 __tg3_set_coalesce(tp, &tp->coal);
14063                 tg3_full_unlock(tp);
14064         }
14065         return 0;
14066 }
14067
14068 static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata)
14069 {
14070         struct tg3 *tp = netdev_priv(dev);
14071
14072         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14073                 netdev_warn(tp->dev, "Board does not support EEE!\n");
14074                 return -EOPNOTSUPP;
14075         }
14076
14077         if (edata->advertised != tp->eee.advertised) {
14078                 netdev_warn(tp->dev,
14079                             "Direct manipulation of EEE advertisement is not supported\n");
14080                 return -EINVAL;
14081         }
14082
14083         if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) {
14084                 netdev_warn(tp->dev,
14085                             "Maximal Tx Lpi timer supported is %#x(u)\n",
14086                             TG3_CPMU_DBTMR1_LNKIDLE_MAX);
14087                 return -EINVAL;
14088         }
14089
14090         tp->eee = *edata;
14091
14092         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
14093         tg3_warn_mgmt_link_flap(tp);
14094
14095         if (netif_running(tp->dev)) {
14096                 tg3_full_lock(tp, 0);
14097                 tg3_setup_eee(tp);
14098                 tg3_phy_reset(tp);
14099                 tg3_full_unlock(tp);
14100         }
14101
14102         return 0;
14103 }
14104
14105 static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata)
14106 {
14107         struct tg3 *tp = netdev_priv(dev);
14108
14109         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14110                 netdev_warn(tp->dev,
14111                             "Board does not support EEE!\n");
14112                 return -EOPNOTSUPP;
14113         }
14114
14115         *edata = tp->eee;
14116         return 0;
14117 }
14118
14119 static const struct ethtool_ops tg3_ethtool_ops = {
14120         .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
14121                                      ETHTOOL_COALESCE_MAX_FRAMES |
14122                                      ETHTOOL_COALESCE_USECS_IRQ |
14123                                      ETHTOOL_COALESCE_MAX_FRAMES_IRQ |
14124                                      ETHTOOL_COALESCE_STATS_BLOCK_USECS,
14125         .get_drvinfo            = tg3_get_drvinfo,
14126         .get_regs_len           = tg3_get_regs_len,
14127         .get_regs               = tg3_get_regs,
14128         .get_wol                = tg3_get_wol,
14129         .set_wol                = tg3_set_wol,
14130         .get_msglevel           = tg3_get_msglevel,
14131         .set_msglevel           = tg3_set_msglevel,
14132         .nway_reset             = tg3_nway_reset,
14133         .get_link               = ethtool_op_get_link,
14134         .get_eeprom_len         = tg3_get_eeprom_len,
14135         .get_eeprom             = tg3_get_eeprom,
14136         .set_eeprom             = tg3_set_eeprom,
14137         .get_ringparam          = tg3_get_ringparam,
14138         .set_ringparam          = tg3_set_ringparam,
14139         .get_pauseparam         = tg3_get_pauseparam,
14140         .set_pauseparam         = tg3_set_pauseparam,
14141         .self_test              = tg3_self_test,
14142         .get_strings            = tg3_get_strings,
14143         .set_phys_id            = tg3_set_phys_id,
14144         .get_ethtool_stats      = tg3_get_ethtool_stats,
14145         .get_coalesce           = tg3_get_coalesce,
14146         .set_coalesce           = tg3_set_coalesce,
14147         .get_sset_count         = tg3_get_sset_count,
14148         .get_rxnfc              = tg3_get_rxnfc,
14149         .get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
14150         .get_rxfh               = tg3_get_rxfh,
14151         .set_rxfh               = tg3_set_rxfh,
14152         .get_channels           = tg3_get_channels,
14153         .set_channels           = tg3_set_channels,
14154         .get_ts_info            = tg3_get_ts_info,
14155         .get_eee                = tg3_get_eee,
14156         .set_eee                = tg3_set_eee,
14157         .get_link_ksettings     = tg3_get_link_ksettings,
14158         .set_link_ksettings     = tg3_set_link_ksettings,
14159 };
14160
14161 static void tg3_get_stats64(struct net_device *dev,
14162                             struct rtnl_link_stats64 *stats)
14163 {
14164         struct tg3 *tp = netdev_priv(dev);
14165
14166         spin_lock_bh(&tp->lock);
14167         if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) {
14168                 *stats = tp->net_stats_prev;
14169                 spin_unlock_bh(&tp->lock);
14170                 return;
14171         }
14172
14173         tg3_get_nstats(tp, stats);
14174         spin_unlock_bh(&tp->lock);
14175 }
14176
14177 static void tg3_set_rx_mode(struct net_device *dev)
14178 {
14179         struct tg3 *tp = netdev_priv(dev);
14180
14181         if (!netif_running(dev))
14182                 return;
14183
14184         tg3_full_lock(tp, 0);
14185         __tg3_set_rx_mode(dev);
14186         tg3_full_unlock(tp);
14187 }
14188
14189 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
14190                                int new_mtu)
14191 {
14192         dev->mtu = new_mtu;
14193
14194         if (new_mtu > ETH_DATA_LEN) {
14195                 if (tg3_flag(tp, 5780_CLASS)) {
14196                         netdev_update_features(dev);
14197                         tg3_flag_clear(tp, TSO_CAPABLE);
14198                 } else {
14199                         tg3_flag_set(tp, JUMBO_RING_ENABLE);
14200                 }
14201         } else {
14202                 if (tg3_flag(tp, 5780_CLASS)) {
14203                         tg3_flag_set(tp, TSO_CAPABLE);
14204                         netdev_update_features(dev);
14205                 }
14206                 tg3_flag_clear(tp, JUMBO_RING_ENABLE);
14207         }
14208 }
14209
14210 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
14211 {
14212         struct tg3 *tp = netdev_priv(dev);
14213         int err;
14214         bool reset_phy = false;
14215
14216         if (!netif_running(dev)) {
14217                 /* We'll just catch it later when the
14218                  * device is up'd.
14219                  */
14220                 tg3_set_mtu(dev, tp, new_mtu);
14221                 return 0;
14222         }
14223
14224         tg3_phy_stop(tp);
14225
14226         tg3_netif_stop(tp);
14227
14228         tg3_set_mtu(dev, tp, new_mtu);
14229
14230         tg3_full_lock(tp, 1);
14231
14232         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
14233
14234         /* Reset PHY, otherwise the read DMA engine will be in a mode that
14235          * breaks all requests to 256 bytes.
14236          */
14237         if (tg3_asic_rev(tp) == ASIC_REV_57766 ||
14238             tg3_asic_rev(tp) == ASIC_REV_5717 ||
14239             tg3_asic_rev(tp) == ASIC_REV_5719 ||
14240             tg3_asic_rev(tp) == ASIC_REV_5720)
14241                 reset_phy = true;
14242
14243         err = tg3_restart_hw(tp, reset_phy);
14244
14245         if (!err)
14246                 tg3_netif_start(tp);
14247
14248         tg3_full_unlock(tp);
14249
14250         if (!err)
14251                 tg3_phy_start(tp);
14252
14253         return err;
14254 }
14255
14256 static const struct net_device_ops tg3_netdev_ops = {
14257         .ndo_open               = tg3_open,
14258         .ndo_stop               = tg3_close,
14259         .ndo_start_xmit         = tg3_start_xmit,
14260         .ndo_get_stats64        = tg3_get_stats64,
14261         .ndo_validate_addr      = eth_validate_addr,
14262         .ndo_set_rx_mode        = tg3_set_rx_mode,
14263         .ndo_set_mac_address    = tg3_set_mac_addr,
14264         .ndo_eth_ioctl          = tg3_ioctl,
14265         .ndo_tx_timeout         = tg3_tx_timeout,
14266         .ndo_change_mtu         = tg3_change_mtu,
14267         .ndo_fix_features       = tg3_fix_features,
14268         .ndo_set_features       = tg3_set_features,
14269 #ifdef CONFIG_NET_POLL_CONTROLLER
14270         .ndo_poll_controller    = tg3_poll_controller,
14271 #endif
14272 };
14273
14274 static void tg3_get_eeprom_size(struct tg3 *tp)
14275 {
14276         u32 cursize, val, magic;
14277
14278         tp->nvram_size = EEPROM_CHIP_SIZE;
14279
14280         if (tg3_nvram_read(tp, 0, &magic) != 0)
14281                 return;
14282
14283         if ((magic != TG3_EEPROM_MAGIC) &&
14284             ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
14285             ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
14286                 return;
14287
14288         /*
14289          * Size the chip by reading offsets at increasing powers of two.
14290          * When we encounter our validation signature, we know the addressing
14291          * has wrapped around, and thus have our chip size.
14292          */
14293         cursize = 0x10;
14294
14295         while (cursize < tp->nvram_size) {
14296                 if (tg3_nvram_read(tp, cursize, &val) != 0)
14297                         return;
14298
14299                 if (val == magic)
14300                         break;
14301
14302                 cursize <<= 1;
14303         }
14304
14305         tp->nvram_size = cursize;
14306 }
14307
14308 static void tg3_get_nvram_size(struct tg3 *tp)
14309 {
14310         u32 val;
14311
14312         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
14313                 return;
14314
14315         /* Selfboot format */
14316         if (val != TG3_EEPROM_MAGIC) {
14317                 tg3_get_eeprom_size(tp);
14318                 return;
14319         }
14320
14321         if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
14322                 if (val != 0) {
14323                         /* This is confusing.  We want to operate on the
14324                          * 16-bit value at offset 0xf2.  The tg3_nvram_read()
14325                          * call will read from NVRAM and byteswap the data
14326                          * according to the byteswapping settings for all
14327                          * other register accesses.  This ensures the data we
14328                          * want will always reside in the lower 16-bits.
14329                          * However, the data in NVRAM is in LE format, which
14330                          * means the data from the NVRAM read will always be
14331                          * opposite the endianness of the CPU.  The 16-bit
14332                          * byteswap then brings the data to CPU endianness.
14333                          */
14334                         tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
14335                         return;
14336                 }
14337         }
14338         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14339 }
14340
14341 static void tg3_get_nvram_info(struct tg3 *tp)
14342 {
14343         u32 nvcfg1;
14344
14345         nvcfg1 = tr32(NVRAM_CFG1);
14346         if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
14347                 tg3_flag_set(tp, FLASH);
14348         } else {
14349                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14350                 tw32(NVRAM_CFG1, nvcfg1);
14351         }
14352
14353         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
14354             tg3_flag(tp, 5780_CLASS)) {
14355                 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
14356                 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
14357                         tp->nvram_jedecnum = JEDEC_ATMEL;
14358                         tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14359                         tg3_flag_set(tp, NVRAM_BUFFERED);
14360                         break;
14361                 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
14362                         tp->nvram_jedecnum = JEDEC_ATMEL;
14363                         tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
14364                         break;
14365                 case FLASH_VENDOR_ATMEL_EEPROM:
14366                         tp->nvram_jedecnum = JEDEC_ATMEL;
14367                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14368                         tg3_flag_set(tp, NVRAM_BUFFERED);
14369                         break;
14370                 case FLASH_VENDOR_ST:
14371                         tp->nvram_jedecnum = JEDEC_ST;
14372                         tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
14373                         tg3_flag_set(tp, NVRAM_BUFFERED);
14374                         break;
14375                 case FLASH_VENDOR_SAIFUN:
14376                         tp->nvram_jedecnum = JEDEC_SAIFUN;
14377                         tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
14378                         break;
14379                 case FLASH_VENDOR_SST_SMALL:
14380                 case FLASH_VENDOR_SST_LARGE:
14381                         tp->nvram_jedecnum = JEDEC_SST;
14382                         tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
14383                         break;
14384                 }
14385         } else {
14386                 tp->nvram_jedecnum = JEDEC_ATMEL;
14387                 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14388                 tg3_flag_set(tp, NVRAM_BUFFERED);
14389         }
14390 }
14391
14392 static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
14393 {
14394         switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
14395         case FLASH_5752PAGE_SIZE_256:
14396                 tp->nvram_pagesize = 256;
14397                 break;
14398         case FLASH_5752PAGE_SIZE_512:
14399                 tp->nvram_pagesize = 512;
14400                 break;
14401         case FLASH_5752PAGE_SIZE_1K:
14402                 tp->nvram_pagesize = 1024;
14403                 break;
14404         case FLASH_5752PAGE_SIZE_2K:
14405                 tp->nvram_pagesize = 2048;
14406                 break;
14407         case FLASH_5752PAGE_SIZE_4K:
14408                 tp->nvram_pagesize = 4096;
14409                 break;
14410         case FLASH_5752PAGE_SIZE_264:
14411                 tp->nvram_pagesize = 264;
14412                 break;
14413         case FLASH_5752PAGE_SIZE_528:
14414                 tp->nvram_pagesize = 528;
14415                 break;
14416         }
14417 }
14418
14419 static void tg3_get_5752_nvram_info(struct tg3 *tp)
14420 {
14421         u32 nvcfg1;
14422
14423         nvcfg1 = tr32(NVRAM_CFG1);
14424
14425         /* NVRAM protection for TPM */
14426         if (nvcfg1 & (1 << 27))
14427                 tg3_flag_set(tp, PROTECTED_NVRAM);
14428
14429         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14430         case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
14431         case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
14432                 tp->nvram_jedecnum = JEDEC_ATMEL;
14433                 tg3_flag_set(tp, NVRAM_BUFFERED);
14434                 break;
14435         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14436                 tp->nvram_jedecnum = JEDEC_ATMEL;
14437                 tg3_flag_set(tp, NVRAM_BUFFERED);
14438                 tg3_flag_set(tp, FLASH);
14439                 break;
14440         case FLASH_5752VENDOR_ST_M45PE10:
14441         case FLASH_5752VENDOR_ST_M45PE20:
14442         case FLASH_5752VENDOR_ST_M45PE40:
14443                 tp->nvram_jedecnum = JEDEC_ST;
14444                 tg3_flag_set(tp, NVRAM_BUFFERED);
14445                 tg3_flag_set(tp, FLASH);
14446                 break;
14447         }
14448
14449         if (tg3_flag(tp, FLASH)) {
14450                 tg3_nvram_get_pagesize(tp, nvcfg1);
14451         } else {
14452                 /* For eeprom, set pagesize to maximum eeprom size */
14453                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14454
14455                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14456                 tw32(NVRAM_CFG1, nvcfg1);
14457         }
14458 }
14459
14460 static void tg3_get_5755_nvram_info(struct tg3 *tp)
14461 {
14462         u32 nvcfg1, protect = 0;
14463
14464         nvcfg1 = tr32(NVRAM_CFG1);
14465
14466         /* NVRAM protection for TPM */
14467         if (nvcfg1 & (1 << 27)) {
14468                 tg3_flag_set(tp, PROTECTED_NVRAM);
14469                 protect = 1;
14470         }
14471
14472         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14473         switch (nvcfg1) {
14474         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14475         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14476         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14477         case FLASH_5755VENDOR_ATMEL_FLASH_5:
14478                 tp->nvram_jedecnum = JEDEC_ATMEL;
14479                 tg3_flag_set(tp, NVRAM_BUFFERED);
14480                 tg3_flag_set(tp, FLASH);
14481                 tp->nvram_pagesize = 264;
14482                 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
14483                     nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
14484                         tp->nvram_size = (protect ? 0x3e200 :
14485                                           TG3_NVRAM_SIZE_512KB);
14486                 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
14487                         tp->nvram_size = (protect ? 0x1f200 :
14488                                           TG3_NVRAM_SIZE_256KB);
14489                 else
14490                         tp->nvram_size = (protect ? 0x1f200 :
14491                                           TG3_NVRAM_SIZE_128KB);
14492                 break;
14493         case FLASH_5752VENDOR_ST_M45PE10:
14494         case FLASH_5752VENDOR_ST_M45PE20:
14495         case FLASH_5752VENDOR_ST_M45PE40:
14496                 tp->nvram_jedecnum = JEDEC_ST;
14497                 tg3_flag_set(tp, NVRAM_BUFFERED);
14498                 tg3_flag_set(tp, FLASH);
14499                 tp->nvram_pagesize = 256;
14500                 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
14501                         tp->nvram_size = (protect ?
14502                                           TG3_NVRAM_SIZE_64KB :
14503                                           TG3_NVRAM_SIZE_128KB);
14504                 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
14505                         tp->nvram_size = (protect ?
14506                                           TG3_NVRAM_SIZE_64KB :
14507                                           TG3_NVRAM_SIZE_256KB);
14508                 else
14509                         tp->nvram_size = (protect ?
14510                                           TG3_NVRAM_SIZE_128KB :
14511                                           TG3_NVRAM_SIZE_512KB);
14512                 break;
14513         }
14514 }
14515
14516 static void tg3_get_5787_nvram_info(struct tg3 *tp)
14517 {
14518         u32 nvcfg1;
14519
14520         nvcfg1 = tr32(NVRAM_CFG1);
14521
14522         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14523         case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
14524         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14525         case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
14526         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14527                 tp->nvram_jedecnum = JEDEC_ATMEL;
14528                 tg3_flag_set(tp, NVRAM_BUFFERED);
14529                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14530
14531                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14532                 tw32(NVRAM_CFG1, nvcfg1);
14533                 break;
14534         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14535         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14536         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14537         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14538                 tp->nvram_jedecnum = JEDEC_ATMEL;
14539                 tg3_flag_set(tp, NVRAM_BUFFERED);
14540                 tg3_flag_set(tp, FLASH);
14541                 tp->nvram_pagesize = 264;
14542                 break;
14543         case FLASH_5752VENDOR_ST_M45PE10:
14544         case FLASH_5752VENDOR_ST_M45PE20:
14545         case FLASH_5752VENDOR_ST_M45PE40:
14546                 tp->nvram_jedecnum = JEDEC_ST;
14547                 tg3_flag_set(tp, NVRAM_BUFFERED);
14548                 tg3_flag_set(tp, FLASH);
14549                 tp->nvram_pagesize = 256;
14550                 break;
14551         }
14552 }
14553
14554 static void tg3_get_5761_nvram_info(struct tg3 *tp)
14555 {
14556         u32 nvcfg1, protect = 0;
14557
14558         nvcfg1 = tr32(NVRAM_CFG1);
14559
14560         /* NVRAM protection for TPM */
14561         if (nvcfg1 & (1 << 27)) {
14562                 tg3_flag_set(tp, PROTECTED_NVRAM);
14563                 protect = 1;
14564         }
14565
14566         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14567         switch (nvcfg1) {
14568         case FLASH_5761VENDOR_ATMEL_ADB021D:
14569         case FLASH_5761VENDOR_ATMEL_ADB041D:
14570         case FLASH_5761VENDOR_ATMEL_ADB081D:
14571         case FLASH_5761VENDOR_ATMEL_ADB161D:
14572         case FLASH_5761VENDOR_ATMEL_MDB021D:
14573         case FLASH_5761VENDOR_ATMEL_MDB041D:
14574         case FLASH_5761VENDOR_ATMEL_MDB081D:
14575         case FLASH_5761VENDOR_ATMEL_MDB161D:
14576                 tp->nvram_jedecnum = JEDEC_ATMEL;
14577                 tg3_flag_set(tp, NVRAM_BUFFERED);
14578                 tg3_flag_set(tp, FLASH);
14579                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14580                 tp->nvram_pagesize = 256;
14581                 break;
14582         case FLASH_5761VENDOR_ST_A_M45PE20:
14583         case FLASH_5761VENDOR_ST_A_M45PE40:
14584         case FLASH_5761VENDOR_ST_A_M45PE80:
14585         case FLASH_5761VENDOR_ST_A_M45PE16:
14586         case FLASH_5761VENDOR_ST_M_M45PE20:
14587         case FLASH_5761VENDOR_ST_M_M45PE40:
14588         case FLASH_5761VENDOR_ST_M_M45PE80:
14589         case FLASH_5761VENDOR_ST_M_M45PE16:
14590                 tp->nvram_jedecnum = JEDEC_ST;
14591                 tg3_flag_set(tp, NVRAM_BUFFERED);
14592                 tg3_flag_set(tp, FLASH);
14593                 tp->nvram_pagesize = 256;
14594                 break;
14595         }
14596
14597         if (protect) {
14598                 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
14599         } else {
14600                 switch (nvcfg1) {
14601                 case FLASH_5761VENDOR_ATMEL_ADB161D:
14602                 case FLASH_5761VENDOR_ATMEL_MDB161D:
14603                 case FLASH_5761VENDOR_ST_A_M45PE16:
14604                 case FLASH_5761VENDOR_ST_M_M45PE16:
14605                         tp->nvram_size = TG3_NVRAM_SIZE_2MB;
14606                         break;
14607                 case FLASH_5761VENDOR_ATMEL_ADB081D:
14608                 case FLASH_5761VENDOR_ATMEL_MDB081D:
14609                 case FLASH_5761VENDOR_ST_A_M45PE80:
14610                 case FLASH_5761VENDOR_ST_M_M45PE80:
14611                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14612                         break;
14613                 case FLASH_5761VENDOR_ATMEL_ADB041D:
14614                 case FLASH_5761VENDOR_ATMEL_MDB041D:
14615                 case FLASH_5761VENDOR_ST_A_M45PE40:
14616                 case FLASH_5761VENDOR_ST_M_M45PE40:
14617                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14618                         break;
14619                 case FLASH_5761VENDOR_ATMEL_ADB021D:
14620                 case FLASH_5761VENDOR_ATMEL_MDB021D:
14621                 case FLASH_5761VENDOR_ST_A_M45PE20:
14622                 case FLASH_5761VENDOR_ST_M_M45PE20:
14623                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14624                         break;
14625                 }
14626         }
14627 }
14628
14629 static void tg3_get_5906_nvram_info(struct tg3 *tp)
14630 {
14631         tp->nvram_jedecnum = JEDEC_ATMEL;
14632         tg3_flag_set(tp, NVRAM_BUFFERED);
14633         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14634 }
14635
14636 static void tg3_get_57780_nvram_info(struct tg3 *tp)
14637 {
14638         u32 nvcfg1;
14639
14640         nvcfg1 = tr32(NVRAM_CFG1);
14641
14642         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14643         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14644         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14645                 tp->nvram_jedecnum = JEDEC_ATMEL;
14646                 tg3_flag_set(tp, NVRAM_BUFFERED);
14647                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14648
14649                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14650                 tw32(NVRAM_CFG1, nvcfg1);
14651                 return;
14652         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14653         case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14654         case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14655         case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14656         case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14657         case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14658         case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14659                 tp->nvram_jedecnum = JEDEC_ATMEL;
14660                 tg3_flag_set(tp, NVRAM_BUFFERED);
14661                 tg3_flag_set(tp, FLASH);
14662
14663                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14664                 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14665                 case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14666                 case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14667                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14668                         break;
14669                 case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14670                 case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14671                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14672                         break;
14673                 case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14674                 case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14675                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14676                         break;
14677                 }
14678                 break;
14679         case FLASH_5752VENDOR_ST_M45PE10:
14680         case FLASH_5752VENDOR_ST_M45PE20:
14681         case FLASH_5752VENDOR_ST_M45PE40:
14682                 tp->nvram_jedecnum = JEDEC_ST;
14683                 tg3_flag_set(tp, NVRAM_BUFFERED);
14684                 tg3_flag_set(tp, FLASH);
14685
14686                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14687                 case FLASH_5752VENDOR_ST_M45PE10:
14688                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14689                         break;
14690                 case FLASH_5752VENDOR_ST_M45PE20:
14691                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14692                         break;
14693                 case FLASH_5752VENDOR_ST_M45PE40:
14694                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14695                         break;
14696                 }
14697                 break;
14698         default:
14699                 tg3_flag_set(tp, NO_NVRAM);
14700                 return;
14701         }
14702
14703         tg3_nvram_get_pagesize(tp, nvcfg1);
14704         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14705                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14706 }
14707
14708
14709 static void tg3_get_5717_nvram_info(struct tg3 *tp)
14710 {
14711         u32 nvcfg1;
14712
14713         nvcfg1 = tr32(NVRAM_CFG1);
14714
14715         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14716         case FLASH_5717VENDOR_ATMEL_EEPROM:
14717         case FLASH_5717VENDOR_MICRO_EEPROM:
14718                 tp->nvram_jedecnum = JEDEC_ATMEL;
14719                 tg3_flag_set(tp, NVRAM_BUFFERED);
14720                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14721
14722                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14723                 tw32(NVRAM_CFG1, nvcfg1);
14724                 return;
14725         case FLASH_5717VENDOR_ATMEL_MDB011D:
14726         case FLASH_5717VENDOR_ATMEL_ADB011B:
14727         case FLASH_5717VENDOR_ATMEL_ADB011D:
14728         case FLASH_5717VENDOR_ATMEL_MDB021D:
14729         case FLASH_5717VENDOR_ATMEL_ADB021B:
14730         case FLASH_5717VENDOR_ATMEL_ADB021D:
14731         case FLASH_5717VENDOR_ATMEL_45USPT:
14732                 tp->nvram_jedecnum = JEDEC_ATMEL;
14733                 tg3_flag_set(tp, NVRAM_BUFFERED);
14734                 tg3_flag_set(tp, FLASH);
14735
14736                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14737                 case FLASH_5717VENDOR_ATMEL_MDB021D:
14738                         /* Detect size with tg3_nvram_get_size() */
14739                         break;
14740                 case FLASH_5717VENDOR_ATMEL_ADB021B:
14741                 case FLASH_5717VENDOR_ATMEL_ADB021D:
14742                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14743                         break;
14744                 default:
14745                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14746                         break;
14747                 }
14748                 break;
14749         case FLASH_5717VENDOR_ST_M_M25PE10:
14750         case FLASH_5717VENDOR_ST_A_M25PE10:
14751         case FLASH_5717VENDOR_ST_M_M45PE10:
14752         case FLASH_5717VENDOR_ST_A_M45PE10:
14753         case FLASH_5717VENDOR_ST_M_M25PE20:
14754         case FLASH_5717VENDOR_ST_A_M25PE20:
14755         case FLASH_5717VENDOR_ST_M_M45PE20:
14756         case FLASH_5717VENDOR_ST_A_M45PE20:
14757         case FLASH_5717VENDOR_ST_25USPT:
14758         case FLASH_5717VENDOR_ST_45USPT:
14759                 tp->nvram_jedecnum = JEDEC_ST;
14760                 tg3_flag_set(tp, NVRAM_BUFFERED);
14761                 tg3_flag_set(tp, FLASH);
14762
14763                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14764                 case FLASH_5717VENDOR_ST_M_M25PE20:
14765                 case FLASH_5717VENDOR_ST_M_M45PE20:
14766                         /* Detect size with tg3_nvram_get_size() */
14767                         break;
14768                 case FLASH_5717VENDOR_ST_A_M25PE20:
14769                 case FLASH_5717VENDOR_ST_A_M45PE20:
14770                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14771                         break;
14772                 default:
14773                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14774                         break;
14775                 }
14776                 break;
14777         default:
14778                 tg3_flag_set(tp, NO_NVRAM);
14779                 return;
14780         }
14781
14782         tg3_nvram_get_pagesize(tp, nvcfg1);
14783         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14784                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14785 }
14786
14787 static void tg3_get_5720_nvram_info(struct tg3 *tp)
14788 {
14789         u32 nvcfg1, nvmpinstrp, nv_status;
14790
14791         nvcfg1 = tr32(NVRAM_CFG1);
14792         nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
14793
14794         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14795                 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) {
14796                         tg3_flag_set(tp, NO_NVRAM);
14797                         return;
14798                 }
14799
14800                 switch (nvmpinstrp) {
14801                 case FLASH_5762_MX25L_100:
14802                 case FLASH_5762_MX25L_200:
14803                 case FLASH_5762_MX25L_400:
14804                 case FLASH_5762_MX25L_800:
14805                 case FLASH_5762_MX25L_160_320:
14806                         tp->nvram_pagesize = 4096;
14807                         tp->nvram_jedecnum = JEDEC_MACRONIX;
14808                         tg3_flag_set(tp, NVRAM_BUFFERED);
14809                         tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14810                         tg3_flag_set(tp, FLASH);
14811                         nv_status = tr32(NVRAM_AUTOSENSE_STATUS);
14812                         tp->nvram_size =
14813                                 (1 << (nv_status >> AUTOSENSE_DEVID &
14814                                                 AUTOSENSE_DEVID_MASK)
14815                                         << AUTOSENSE_SIZE_IN_MB);
14816                         return;
14817
14818                 case FLASH_5762_EEPROM_HD:
14819                         nvmpinstrp = FLASH_5720_EEPROM_HD;
14820                         break;
14821                 case FLASH_5762_EEPROM_LD:
14822                         nvmpinstrp = FLASH_5720_EEPROM_LD;
14823                         break;
14824                 case FLASH_5720VENDOR_M_ST_M45PE20:
14825                         /* This pinstrap supports multiple sizes, so force it
14826                          * to read the actual size from location 0xf0.
14827                          */
14828                         nvmpinstrp = FLASH_5720VENDOR_ST_45USPT;
14829                         break;
14830                 }
14831         }
14832
14833         switch (nvmpinstrp) {
14834         case FLASH_5720_EEPROM_HD:
14835         case FLASH_5720_EEPROM_LD:
14836                 tp->nvram_jedecnum = JEDEC_ATMEL;
14837                 tg3_flag_set(tp, NVRAM_BUFFERED);
14838
14839                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14840                 tw32(NVRAM_CFG1, nvcfg1);
14841                 if (nvmpinstrp == FLASH_5720_EEPROM_HD)
14842                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14843                 else
14844                         tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
14845                 return;
14846         case FLASH_5720VENDOR_M_ATMEL_DB011D:
14847         case FLASH_5720VENDOR_A_ATMEL_DB011B:
14848         case FLASH_5720VENDOR_A_ATMEL_DB011D:
14849         case FLASH_5720VENDOR_M_ATMEL_DB021D:
14850         case FLASH_5720VENDOR_A_ATMEL_DB021B:
14851         case FLASH_5720VENDOR_A_ATMEL_DB021D:
14852         case FLASH_5720VENDOR_M_ATMEL_DB041D:
14853         case FLASH_5720VENDOR_A_ATMEL_DB041B:
14854         case FLASH_5720VENDOR_A_ATMEL_DB041D:
14855         case FLASH_5720VENDOR_M_ATMEL_DB081D:
14856         case FLASH_5720VENDOR_A_ATMEL_DB081D:
14857         case FLASH_5720VENDOR_ATMEL_45USPT:
14858                 tp->nvram_jedecnum = JEDEC_ATMEL;
14859                 tg3_flag_set(tp, NVRAM_BUFFERED);
14860                 tg3_flag_set(tp, FLASH);
14861
14862                 switch (nvmpinstrp) {
14863                 case FLASH_5720VENDOR_M_ATMEL_DB021D:
14864                 case FLASH_5720VENDOR_A_ATMEL_DB021B:
14865                 case FLASH_5720VENDOR_A_ATMEL_DB021D:
14866                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14867                         break;
14868                 case FLASH_5720VENDOR_M_ATMEL_DB041D:
14869                 case FLASH_5720VENDOR_A_ATMEL_DB041B:
14870                 case FLASH_5720VENDOR_A_ATMEL_DB041D:
14871                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14872                         break;
14873                 case FLASH_5720VENDOR_M_ATMEL_DB081D:
14874                 case FLASH_5720VENDOR_A_ATMEL_DB081D:
14875                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14876                         break;
14877                 default:
14878                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14879                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14880                         break;
14881                 }
14882                 break;
14883         case FLASH_5720VENDOR_M_ST_M25PE10:
14884         case FLASH_5720VENDOR_M_ST_M45PE10:
14885         case FLASH_5720VENDOR_A_ST_M25PE10:
14886         case FLASH_5720VENDOR_A_ST_M45PE10:
14887         case FLASH_5720VENDOR_M_ST_M25PE20:
14888         case FLASH_5720VENDOR_M_ST_M45PE20:
14889         case FLASH_5720VENDOR_A_ST_M25PE20:
14890         case FLASH_5720VENDOR_A_ST_M45PE20:
14891         case FLASH_5720VENDOR_M_ST_M25PE40:
14892         case FLASH_5720VENDOR_M_ST_M45PE40:
14893         case FLASH_5720VENDOR_A_ST_M25PE40:
14894         case FLASH_5720VENDOR_A_ST_M45PE40:
14895         case FLASH_5720VENDOR_M_ST_M25PE80:
14896         case FLASH_5720VENDOR_M_ST_M45PE80:
14897         case FLASH_5720VENDOR_A_ST_M25PE80:
14898         case FLASH_5720VENDOR_A_ST_M45PE80:
14899         case FLASH_5720VENDOR_ST_25USPT:
14900         case FLASH_5720VENDOR_ST_45USPT:
14901                 tp->nvram_jedecnum = JEDEC_ST;
14902                 tg3_flag_set(tp, NVRAM_BUFFERED);
14903                 tg3_flag_set(tp, FLASH);
14904
14905                 switch (nvmpinstrp) {
14906                 case FLASH_5720VENDOR_M_ST_M25PE20:
14907                 case FLASH_5720VENDOR_M_ST_M45PE20:
14908                 case FLASH_5720VENDOR_A_ST_M25PE20:
14909                 case FLASH_5720VENDOR_A_ST_M45PE20:
14910                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14911                         break;
14912                 case FLASH_5720VENDOR_M_ST_M25PE40:
14913                 case FLASH_5720VENDOR_M_ST_M45PE40:
14914                 case FLASH_5720VENDOR_A_ST_M25PE40:
14915                 case FLASH_5720VENDOR_A_ST_M45PE40:
14916                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14917                         break;
14918                 case FLASH_5720VENDOR_M_ST_M25PE80:
14919                 case FLASH_5720VENDOR_M_ST_M45PE80:
14920                 case FLASH_5720VENDOR_A_ST_M25PE80:
14921                 case FLASH_5720VENDOR_A_ST_M45PE80:
14922                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14923                         break;
14924                 default:
14925                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14926                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14927                         break;
14928                 }
14929                 break;
14930         default:
14931                 tg3_flag_set(tp, NO_NVRAM);
14932                 return;
14933         }
14934
14935         tg3_nvram_get_pagesize(tp, nvcfg1);
14936         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14937                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14938
14939         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14940                 u32 val;
14941
14942                 if (tg3_nvram_read(tp, 0, &val))
14943                         return;
14944
14945                 if (val != TG3_EEPROM_MAGIC &&
14946                     (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW)
14947                         tg3_flag_set(tp, NO_NVRAM);
14948         }
14949 }
14950
14951 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
14952 static void tg3_nvram_init(struct tg3 *tp)
14953 {
14954         if (tg3_flag(tp, IS_SSB_CORE)) {
14955                 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
14956                 tg3_flag_clear(tp, NVRAM);
14957                 tg3_flag_clear(tp, NVRAM_BUFFERED);
14958                 tg3_flag_set(tp, NO_NVRAM);
14959                 return;
14960         }
14961
14962         tw32_f(GRC_EEPROM_ADDR,
14963              (EEPROM_ADDR_FSM_RESET |
14964               (EEPROM_DEFAULT_CLOCK_PERIOD <<
14965                EEPROM_ADDR_CLKPERD_SHIFT)));
14966
14967         msleep(1);
14968
14969         /* Enable seeprom accesses. */
14970         tw32_f(GRC_LOCAL_CTRL,
14971              tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
14972         udelay(100);
14973
14974         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
14975             tg3_asic_rev(tp) != ASIC_REV_5701) {
14976                 tg3_flag_set(tp, NVRAM);
14977
14978                 if (tg3_nvram_lock(tp)) {
14979                         netdev_warn(tp->dev,
14980                                     "Cannot get nvram lock, %s failed\n",
14981                                     __func__);
14982                         return;
14983                 }
14984                 tg3_enable_nvram_access(tp);
14985
14986                 tp->nvram_size = 0;
14987
14988                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
14989                         tg3_get_5752_nvram_info(tp);
14990                 else if (tg3_asic_rev(tp) == ASIC_REV_5755)
14991                         tg3_get_5755_nvram_info(tp);
14992                 else if (tg3_asic_rev(tp) == ASIC_REV_5787 ||
14993                          tg3_asic_rev(tp) == ASIC_REV_5784 ||
14994                          tg3_asic_rev(tp) == ASIC_REV_5785)
14995                         tg3_get_5787_nvram_info(tp);
14996                 else if (tg3_asic_rev(tp) == ASIC_REV_5761)
14997                         tg3_get_5761_nvram_info(tp);
14998                 else if (tg3_asic_rev(tp) == ASIC_REV_5906)
14999                         tg3_get_5906_nvram_info(tp);
15000                 else if (tg3_asic_rev(tp) == ASIC_REV_57780 ||
15001                          tg3_flag(tp, 57765_CLASS))
15002                         tg3_get_57780_nvram_info(tp);
15003                 else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15004                          tg3_asic_rev(tp) == ASIC_REV_5719)
15005                         tg3_get_5717_nvram_info(tp);
15006                 else if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
15007                          tg3_asic_rev(tp) == ASIC_REV_5762)
15008                         tg3_get_5720_nvram_info(tp);
15009                 else
15010                         tg3_get_nvram_info(tp);
15011
15012                 if (tp->nvram_size == 0)
15013                         tg3_get_nvram_size(tp);
15014
15015                 tg3_disable_nvram_access(tp);
15016                 tg3_nvram_unlock(tp);
15017
15018         } else {
15019                 tg3_flag_clear(tp, NVRAM);
15020                 tg3_flag_clear(tp, NVRAM_BUFFERED);
15021
15022                 tg3_get_eeprom_size(tp);
15023         }
15024 }
15025
15026 struct subsys_tbl_ent {
15027         u16 subsys_vendor, subsys_devid;
15028         u32 phy_id;
15029 };
15030
15031 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
15032         /* Broadcom boards. */
15033         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15034           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
15035         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15036           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
15037         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15038           TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
15039         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15040           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
15041         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15042           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
15043         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15044           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
15045         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15046           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
15047         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15048           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
15049         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15050           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
15051         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15052           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
15053         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15054           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
15055
15056         /* 3com boards. */
15057         { TG3PCI_SUBVENDOR_ID_3COM,
15058           TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
15059         { TG3PCI_SUBVENDOR_ID_3COM,
15060           TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
15061         { TG3PCI_SUBVENDOR_ID_3COM,
15062           TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
15063         { TG3PCI_SUBVENDOR_ID_3COM,
15064           TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
15065         { TG3PCI_SUBVENDOR_ID_3COM,
15066           TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
15067
15068         /* DELL boards. */
15069         { TG3PCI_SUBVENDOR_ID_DELL,
15070           TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
15071         { TG3PCI_SUBVENDOR_ID_DELL,
15072           TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
15073         { TG3PCI_SUBVENDOR_ID_DELL,
15074           TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
15075         { TG3PCI_SUBVENDOR_ID_DELL,
15076           TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
15077
15078         /* Compaq boards. */
15079         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15080           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
15081         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15082           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
15083         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15084           TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
15085         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15086           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
15087         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15088           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
15089
15090         /* IBM boards. */
15091         { TG3PCI_SUBVENDOR_ID_IBM,
15092           TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
15093 };
15094
15095 static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
15096 {
15097         int i;
15098
15099         for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
15100                 if ((subsys_id_to_phy_id[i].subsys_vendor ==
15101                      tp->pdev->subsystem_vendor) &&
15102                     (subsys_id_to_phy_id[i].subsys_devid ==
15103                      tp->pdev->subsystem_device))
15104                         return &subsys_id_to_phy_id[i];
15105         }
15106         return NULL;
15107 }
15108
15109 static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
15110 {
15111         u32 val;
15112
15113         tp->phy_id = TG3_PHY_ID_INVALID;
15114         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15115
15116         /* Assume an onboard device and WOL capable by default.  */
15117         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15118         tg3_flag_set(tp, WOL_CAP);
15119
15120         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15121                 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
15122                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15123                         tg3_flag_set(tp, IS_NIC);
15124                 }
15125                 val = tr32(VCPU_CFGSHDW);
15126                 if (val & VCPU_CFGSHDW_ASPM_DBNC)
15127                         tg3_flag_set(tp, ASPM_WORKAROUND);
15128                 if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
15129                     (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
15130                         tg3_flag_set(tp, WOL_ENABLE);
15131                         device_set_wakeup_enable(&tp->pdev->dev, true);
15132                 }
15133                 goto done;
15134         }
15135
15136         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
15137         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
15138                 u32 nic_cfg, led_cfg;
15139                 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0;
15140                 u32 nic_phy_id, ver, eeprom_phy_id;
15141                 int eeprom_phy_serdes = 0;
15142
15143                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
15144                 tp->nic_sram_data_cfg = nic_cfg;
15145
15146                 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
15147                 ver >>= NIC_SRAM_DATA_VER_SHIFT;
15148                 if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15149                     tg3_asic_rev(tp) != ASIC_REV_5701 &&
15150                     tg3_asic_rev(tp) != ASIC_REV_5703 &&
15151                     (ver > 0) && (ver < 0x100))
15152                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
15153
15154                 if (tg3_asic_rev(tp) == ASIC_REV_5785)
15155                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
15156
15157                 if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15158                     tg3_asic_rev(tp) == ASIC_REV_5719 ||
15159                     tg3_asic_rev(tp) == ASIC_REV_5720)
15160                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5);
15161
15162                 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
15163                     NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
15164                         eeprom_phy_serdes = 1;
15165
15166                 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
15167                 if (nic_phy_id != 0) {
15168                         u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
15169                         u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
15170
15171                         eeprom_phy_id  = (id1 >> 16) << 10;
15172                         eeprom_phy_id |= (id2 & 0xfc00) << 16;
15173                         eeprom_phy_id |= (id2 & 0x03ff) <<  0;
15174                 } else
15175                         eeprom_phy_id = 0;
15176
15177                 tp->phy_id = eeprom_phy_id;
15178                 if (eeprom_phy_serdes) {
15179                         if (!tg3_flag(tp, 5705_PLUS))
15180                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15181                         else
15182                                 tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
15183                 }
15184
15185                 if (tg3_flag(tp, 5750_PLUS))
15186                         led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
15187                                     SHASTA_EXT_LED_MODE_MASK);
15188                 else
15189                         led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
15190
15191                 switch (led_cfg) {
15192                 default:
15193                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
15194                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15195                         break;
15196
15197                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
15198                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15199                         break;
15200
15201                 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
15202                         tp->led_ctrl = LED_CTRL_MODE_MAC;
15203
15204                         /* Default to PHY_1_MODE if 0 (MAC_MODE) is
15205                          * read on some older 5700/5701 bootcode.
15206                          */
15207                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
15208                             tg3_asic_rev(tp) == ASIC_REV_5701)
15209                                 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15210
15211                         break;
15212
15213                 case SHASTA_EXT_LED_SHARED:
15214                         tp->led_ctrl = LED_CTRL_MODE_SHARED;
15215                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
15216                             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1)
15217                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15218                                                  LED_CTRL_MODE_PHY_2);
15219
15220                         if (tg3_flag(tp, 5717_PLUS) ||
15221                             tg3_asic_rev(tp) == ASIC_REV_5762)
15222                                 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE |
15223                                                 LED_CTRL_BLINK_RATE_MASK;
15224
15225                         break;
15226
15227                 case SHASTA_EXT_LED_MAC:
15228                         tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
15229                         break;
15230
15231                 case SHASTA_EXT_LED_COMBO:
15232                         tp->led_ctrl = LED_CTRL_MODE_COMBO;
15233                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0)
15234                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15235                                                  LED_CTRL_MODE_PHY_2);
15236                         break;
15237
15238                 }
15239
15240                 if ((tg3_asic_rev(tp) == ASIC_REV_5700 ||
15241                      tg3_asic_rev(tp) == ASIC_REV_5701) &&
15242                     tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
15243                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15244
15245                 if (tg3_chip_rev(tp) == CHIPREV_5784_AX)
15246                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15247
15248                 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
15249                         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15250                         if ((tp->pdev->subsystem_vendor ==
15251                              PCI_VENDOR_ID_ARIMA) &&
15252                             (tp->pdev->subsystem_device == 0x205a ||
15253                              tp->pdev->subsystem_device == 0x2063))
15254                                 tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15255                 } else {
15256                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15257                         tg3_flag_set(tp, IS_NIC);
15258                 }
15259
15260                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
15261                         tg3_flag_set(tp, ENABLE_ASF);
15262                         if (tg3_flag(tp, 5750_PLUS))
15263                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
15264                 }
15265
15266                 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
15267                     tg3_flag(tp, 5750_PLUS))
15268                         tg3_flag_set(tp, ENABLE_APE);
15269
15270                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
15271                     !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
15272                         tg3_flag_clear(tp, WOL_CAP);
15273
15274                 if (tg3_flag(tp, WOL_CAP) &&
15275                     (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
15276                         tg3_flag_set(tp, WOL_ENABLE);
15277                         device_set_wakeup_enable(&tp->pdev->dev, true);
15278                 }
15279
15280                 if (cfg2 & (1 << 17))
15281                         tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
15282
15283                 /* serdes signal pre-emphasis in register 0x590 set by */
15284                 /* bootcode if bit 18 is set */
15285                 if (cfg2 & (1 << 18))
15286                         tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
15287
15288                 if ((tg3_flag(tp, 57765_PLUS) ||
15289                      (tg3_asic_rev(tp) == ASIC_REV_5784 &&
15290                       tg3_chip_rev(tp) != CHIPREV_5784_AX)) &&
15291                     (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
15292                         tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
15293
15294                 if (tg3_flag(tp, PCI_EXPRESS)) {
15295                         u32 cfg3;
15296
15297                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
15298                         if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
15299                             !tg3_flag(tp, 57765_PLUS) &&
15300                             (cfg3 & NIC_SRAM_ASPM_DEBOUNCE))
15301                                 tg3_flag_set(tp, ASPM_WORKAROUND);
15302                         if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID)
15303                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
15304                         if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK)
15305                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
15306                 }
15307
15308                 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
15309                         tg3_flag_set(tp, RGMII_INBAND_DISABLE);
15310                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
15311                         tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
15312                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
15313                         tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
15314
15315                 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV)
15316                         tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV;
15317         }
15318 done:
15319         if (tg3_flag(tp, WOL_CAP))
15320                 device_set_wakeup_enable(&tp->pdev->dev,
15321                                          tg3_flag(tp, WOL_ENABLE));
15322         else
15323                 device_set_wakeup_capable(&tp->pdev->dev, false);
15324 }
15325
15326 static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val)
15327 {
15328         int i, err;
15329         u32 val2, off = offset * 8;
15330
15331         err = tg3_nvram_lock(tp);
15332         if (err)
15333                 return err;
15334
15335         tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE);
15336         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN |
15337                         APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START);
15338         tg3_ape_read32(tp, TG3_APE_OTP_CTRL);
15339         udelay(10);
15340
15341         for (i = 0; i < 100; i++) {
15342                 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS);
15343                 if (val2 & APE_OTP_STATUS_CMD_DONE) {
15344                         *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA);
15345                         break;
15346                 }
15347                 udelay(10);
15348         }
15349
15350         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0);
15351
15352         tg3_nvram_unlock(tp);
15353         if (val2 & APE_OTP_STATUS_CMD_DONE)
15354                 return 0;
15355
15356         return -EBUSY;
15357 }
15358
15359 static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
15360 {
15361         int i;
15362         u32 val;
15363
15364         tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
15365         tw32(OTP_CTRL, cmd);
15366
15367         /* Wait for up to 1 ms for command to execute. */
15368         for (i = 0; i < 100; i++) {
15369                 val = tr32(OTP_STATUS);
15370                 if (val & OTP_STATUS_CMD_DONE)
15371                         break;
15372                 udelay(10);
15373         }
15374
15375         return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
15376 }
15377
15378 /* Read the gphy configuration from the OTP region of the chip.  The gphy
15379  * configuration is a 32-bit value that straddles the alignment boundary.
15380  * We do two 32-bit reads and then shift and merge the results.
15381  */
15382 static u32 tg3_read_otp_phycfg(struct tg3 *tp)
15383 {
15384         u32 bhalf_otp, thalf_otp;
15385
15386         tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
15387
15388         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
15389                 return 0;
15390
15391         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
15392
15393         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15394                 return 0;
15395
15396         thalf_otp = tr32(OTP_READ_DATA);
15397
15398         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
15399
15400         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15401                 return 0;
15402
15403         bhalf_otp = tr32(OTP_READ_DATA);
15404
15405         return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
15406 }
15407
15408 static void tg3_phy_init_link_config(struct tg3 *tp)
15409 {
15410         u32 adv = ADVERTISED_Autoneg;
15411
15412         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
15413                 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV))
15414                         adv |= ADVERTISED_1000baseT_Half;
15415                 adv |= ADVERTISED_1000baseT_Full;
15416         }
15417
15418         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15419                 adv |= ADVERTISED_100baseT_Half |
15420                        ADVERTISED_100baseT_Full |
15421                        ADVERTISED_10baseT_Half |
15422                        ADVERTISED_10baseT_Full |
15423                        ADVERTISED_TP;
15424         else
15425                 adv |= ADVERTISED_FIBRE;
15426
15427         tp->link_config.advertising = adv;
15428         tp->link_config.speed = SPEED_UNKNOWN;
15429         tp->link_config.duplex = DUPLEX_UNKNOWN;
15430         tp->link_config.autoneg = AUTONEG_ENABLE;
15431         tp->link_config.active_speed = SPEED_UNKNOWN;
15432         tp->link_config.active_duplex = DUPLEX_UNKNOWN;
15433
15434         tp->old_link = -1;
15435 }
15436
15437 static int tg3_phy_probe(struct tg3 *tp)
15438 {
15439         u32 hw_phy_id_1, hw_phy_id_2;
15440         u32 hw_phy_id, hw_phy_id_masked;
15441         int err;
15442
15443         /* flow control autonegotiation is default behavior */
15444         tg3_flag_set(tp, PAUSE_AUTONEG);
15445         tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
15446
15447         if (tg3_flag(tp, ENABLE_APE)) {
15448                 switch (tp->pci_fn) {
15449                 case 0:
15450                         tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
15451                         break;
15452                 case 1:
15453                         tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
15454                         break;
15455                 case 2:
15456                         tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
15457                         break;
15458                 case 3:
15459                         tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
15460                         break;
15461                 }
15462         }
15463
15464         if (!tg3_flag(tp, ENABLE_ASF) &&
15465             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15466             !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15467                 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
15468                                    TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
15469
15470         if (tg3_flag(tp, USE_PHYLIB))
15471                 return tg3_phy_init(tp);
15472
15473         /* Reading the PHY ID register can conflict with ASF
15474          * firmware access to the PHY hardware.
15475          */
15476         err = 0;
15477         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
15478                 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
15479         } else {
15480                 /* Now read the physical PHY_ID from the chip and verify
15481                  * that it is sane.  If it doesn't look good, we fall back
15482                  * to either the hard-coded table based PHY_ID and failing
15483                  * that the value found in the eeprom area.
15484                  */
15485                 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
15486                 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
15487
15488                 hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
15489                 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
15490                 hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
15491
15492                 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
15493         }
15494
15495         if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
15496                 tp->phy_id = hw_phy_id;
15497                 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
15498                         tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15499                 else
15500                         tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
15501         } else {
15502                 if (tp->phy_id != TG3_PHY_ID_INVALID) {
15503                         /* Do nothing, phy ID already set up in
15504                          * tg3_get_eeprom_hw_cfg().
15505                          */
15506                 } else {
15507                         struct subsys_tbl_ent *p;
15508
15509                         /* No eeprom signature?  Try the hardcoded
15510                          * subsys device table.
15511                          */
15512                         p = tg3_lookup_by_subsys(tp);
15513                         if (p) {
15514                                 tp->phy_id = p->phy_id;
15515                         } else if (!tg3_flag(tp, IS_SSB_CORE)) {
15516                                 /* For now we saw the IDs 0xbc050cd0,
15517                                  * 0xbc050f80 and 0xbc050c30 on devices
15518                                  * connected to an BCM4785 and there are
15519                                  * probably more. Just assume that the phy is
15520                                  * supported when it is connected to a SSB core
15521                                  * for now.
15522                                  */
15523                                 return -ENODEV;
15524                         }
15525
15526                         if (!tp->phy_id ||
15527                             tp->phy_id == TG3_PHY_ID_BCM8002)
15528                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15529                 }
15530         }
15531
15532         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15533             (tg3_asic_rev(tp) == ASIC_REV_5719 ||
15534              tg3_asic_rev(tp) == ASIC_REV_5720 ||
15535              tg3_asic_rev(tp) == ASIC_REV_57766 ||
15536              tg3_asic_rev(tp) == ASIC_REV_5762 ||
15537              (tg3_asic_rev(tp) == ASIC_REV_5717 &&
15538               tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) ||
15539              (tg3_asic_rev(tp) == ASIC_REV_57765 &&
15540               tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) {
15541                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
15542
15543                 tp->eee.supported = SUPPORTED_100baseT_Full |
15544                                     SUPPORTED_1000baseT_Full;
15545                 tp->eee.advertised = ADVERTISED_100baseT_Full |
15546                                      ADVERTISED_1000baseT_Full;
15547                 tp->eee.eee_enabled = 1;
15548                 tp->eee.tx_lpi_enabled = 1;
15549                 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US;
15550         }
15551
15552         tg3_phy_init_link_config(tp);
15553
15554         if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
15555             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15556             !tg3_flag(tp, ENABLE_APE) &&
15557             !tg3_flag(tp, ENABLE_ASF)) {
15558                 u32 bmsr, dummy;
15559
15560                 tg3_readphy(tp, MII_BMSR, &bmsr);
15561                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
15562                     (bmsr & BMSR_LSTATUS))
15563                         goto skip_phy_reset;
15564
15565                 err = tg3_phy_reset(tp);
15566                 if (err)
15567                         return err;
15568
15569                 tg3_phy_set_wirespeed(tp);
15570
15571                 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
15572                         tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
15573                                             tp->link_config.flowctrl);
15574
15575                         tg3_writephy(tp, MII_BMCR,
15576                                      BMCR_ANENABLE | BMCR_ANRESTART);
15577                 }
15578         }
15579
15580 skip_phy_reset:
15581         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
15582                 err = tg3_init_5401phy_dsp(tp);
15583                 if (err)
15584                         return err;
15585
15586                 err = tg3_init_5401phy_dsp(tp);
15587         }
15588
15589         return err;
15590 }
15591
15592 static void tg3_read_vpd(struct tg3 *tp)
15593 {
15594         u8 *vpd_data;
15595         unsigned int len, vpdlen;
15596         int i;
15597
15598         vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
15599         if (!vpd_data)
15600                 goto out_no_vpd;
15601
15602         i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15603                                          PCI_VPD_RO_KEYWORD_MFR_ID, &len);
15604         if (i < 0)
15605                 goto partno;
15606
15607         if (len != 4 || memcmp(vpd_data + i, "1028", 4))
15608                 goto partno;
15609
15610         i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15611                                          PCI_VPD_RO_KEYWORD_VENDOR0, &len);
15612         if (i < 0)
15613                 goto partno;
15614
15615         memset(tp->fw_ver, 0, sizeof(tp->fw_ver));
15616         snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, vpd_data + i);
15617
15618 partno:
15619         i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15620                                          PCI_VPD_RO_KEYWORD_PARTNO, &len);
15621         if (i < 0)
15622                 goto out_not_found;
15623
15624         if (len > TG3_BPN_SIZE)
15625                 goto out_not_found;
15626
15627         memcpy(tp->board_part_number, &vpd_data[i], len);
15628
15629 out_not_found:
15630         kfree(vpd_data);
15631         if (tp->board_part_number[0])
15632                 return;
15633
15634 out_no_vpd:
15635         if (tg3_asic_rev(tp) == ASIC_REV_5717) {
15636                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15637                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
15638                         strcpy(tp->board_part_number, "BCM5717");
15639                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
15640                         strcpy(tp->board_part_number, "BCM5718");
15641                 else
15642                         goto nomatch;
15643         } else if (tg3_asic_rev(tp) == ASIC_REV_57780) {
15644                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
15645                         strcpy(tp->board_part_number, "BCM57780");
15646                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
15647                         strcpy(tp->board_part_number, "BCM57760");
15648                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
15649                         strcpy(tp->board_part_number, "BCM57790");
15650                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
15651                         strcpy(tp->board_part_number, "BCM57788");
15652                 else
15653                         goto nomatch;
15654         } else if (tg3_asic_rev(tp) == ASIC_REV_57765) {
15655                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
15656                         strcpy(tp->board_part_number, "BCM57761");
15657                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
15658                         strcpy(tp->board_part_number, "BCM57765");
15659                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
15660                         strcpy(tp->board_part_number, "BCM57781");
15661                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
15662                         strcpy(tp->board_part_number, "BCM57785");
15663                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
15664                         strcpy(tp->board_part_number, "BCM57791");
15665                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
15666                         strcpy(tp->board_part_number, "BCM57795");
15667                 else
15668                         goto nomatch;
15669         } else if (tg3_asic_rev(tp) == ASIC_REV_57766) {
15670                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
15671                         strcpy(tp->board_part_number, "BCM57762");
15672                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
15673                         strcpy(tp->board_part_number, "BCM57766");
15674                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
15675                         strcpy(tp->board_part_number, "BCM57782");
15676                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15677                         strcpy(tp->board_part_number, "BCM57786");
15678                 else
15679                         goto nomatch;
15680         } else if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15681                 strcpy(tp->board_part_number, "BCM95906");
15682         } else {
15683 nomatch:
15684                 strcpy(tp->board_part_number, "none");
15685         }
15686 }
15687
15688 static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
15689 {
15690         u32 val;
15691
15692         if (tg3_nvram_read(tp, offset, &val) ||
15693             (val & 0xfc000000) != 0x0c000000 ||
15694             tg3_nvram_read(tp, offset + 4, &val) ||
15695             val != 0)
15696                 return 0;
15697
15698         return 1;
15699 }
15700
15701 static void tg3_read_bc_ver(struct tg3 *tp)
15702 {
15703         u32 val, offset, start, ver_offset;
15704         int i, dst_off;
15705         bool newver = false;
15706
15707         if (tg3_nvram_read(tp, 0xc, &offset) ||
15708             tg3_nvram_read(tp, 0x4, &start))
15709                 return;
15710
15711         offset = tg3_nvram_logical_addr(tp, offset);
15712
15713         if (tg3_nvram_read(tp, offset, &val))
15714                 return;
15715
15716         if ((val & 0xfc000000) == 0x0c000000) {
15717                 if (tg3_nvram_read(tp, offset + 4, &val))
15718                         return;
15719
15720                 if (val == 0)
15721                         newver = true;
15722         }
15723
15724         dst_off = strlen(tp->fw_ver);
15725
15726         if (newver) {
15727                 if (TG3_VER_SIZE - dst_off < 16 ||
15728                     tg3_nvram_read(tp, offset + 8, &ver_offset))
15729                         return;
15730
15731                 offset = offset + ver_offset - start;
15732                 for (i = 0; i < 16; i += 4) {
15733                         __be32 v;
15734                         if (tg3_nvram_read_be32(tp, offset + i, &v))
15735                                 return;
15736
15737                         memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
15738                 }
15739         } else {
15740                 u32 major, minor;
15741
15742                 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
15743                         return;
15744
15745                 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
15746                         TG3_NVM_BCVER_MAJSFT;
15747                 minor = ver_offset & TG3_NVM_BCVER_MINMSK;
15748                 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
15749                          "v%d.%02d", major, minor);
15750         }
15751 }
15752
15753 static void tg3_read_hwsb_ver(struct tg3 *tp)
15754 {
15755         u32 val, major, minor;
15756
15757         /* Use native endian representation */
15758         if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
15759                 return;
15760
15761         major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
15762                 TG3_NVM_HWSB_CFG1_MAJSFT;
15763         minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
15764                 TG3_NVM_HWSB_CFG1_MINSFT;
15765
15766         snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
15767 }
15768
15769 static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
15770 {
15771         u32 offset, major, minor, build;
15772
15773         strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
15774
15775         if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
15776                 return;
15777
15778         switch (val & TG3_EEPROM_SB_REVISION_MASK) {
15779         case TG3_EEPROM_SB_REVISION_0:
15780                 offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
15781                 break;
15782         case TG3_EEPROM_SB_REVISION_2:
15783                 offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
15784                 break;
15785         case TG3_EEPROM_SB_REVISION_3:
15786                 offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
15787                 break;
15788         case TG3_EEPROM_SB_REVISION_4:
15789                 offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
15790                 break;
15791         case TG3_EEPROM_SB_REVISION_5:
15792                 offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
15793                 break;
15794         case TG3_EEPROM_SB_REVISION_6:
15795                 offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
15796                 break;
15797         default:
15798                 return;
15799         }
15800
15801         if (tg3_nvram_read(tp, offset, &val))
15802                 return;
15803
15804         build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
15805                 TG3_EEPROM_SB_EDH_BLD_SHFT;
15806         major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
15807                 TG3_EEPROM_SB_EDH_MAJ_SHFT;
15808         minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
15809
15810         if (minor > 99 || build > 26)
15811                 return;
15812
15813         offset = strlen(tp->fw_ver);
15814         snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
15815                  " v%d.%02d", major, minor);
15816
15817         if (build > 0) {
15818                 offset = strlen(tp->fw_ver);
15819                 if (offset < TG3_VER_SIZE - 1)
15820                         tp->fw_ver[offset] = 'a' + build - 1;
15821         }
15822 }
15823
15824 static void tg3_read_mgmtfw_ver(struct tg3 *tp)
15825 {
15826         u32 val, offset, start;
15827         int i, vlen;
15828
15829         for (offset = TG3_NVM_DIR_START;
15830              offset < TG3_NVM_DIR_END;
15831              offset += TG3_NVM_DIRENT_SIZE) {
15832                 if (tg3_nvram_read(tp, offset, &val))
15833                         return;
15834
15835                 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
15836                         break;
15837         }
15838
15839         if (offset == TG3_NVM_DIR_END)
15840                 return;
15841
15842         if (!tg3_flag(tp, 5705_PLUS))
15843                 start = 0x08000000;
15844         else if (tg3_nvram_read(tp, offset - 4, &start))
15845                 return;
15846
15847         if (tg3_nvram_read(tp, offset + 4, &offset) ||
15848             !tg3_fw_img_is_valid(tp, offset) ||
15849             tg3_nvram_read(tp, offset + 8, &val))
15850                 return;
15851
15852         offset += val - start;
15853
15854         vlen = strlen(tp->fw_ver);
15855
15856         tp->fw_ver[vlen++] = ',';
15857         tp->fw_ver[vlen++] = ' ';
15858
15859         for (i = 0; i < 4; i++) {
15860                 __be32 v;
15861                 if (tg3_nvram_read_be32(tp, offset, &v))
15862                         return;
15863
15864                 offset += sizeof(v);
15865
15866                 if (vlen > TG3_VER_SIZE - sizeof(v)) {
15867                         memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
15868                         break;
15869                 }
15870
15871                 memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
15872                 vlen += sizeof(v);
15873         }
15874 }
15875
15876 static void tg3_probe_ncsi(struct tg3 *tp)
15877 {
15878         u32 apedata;
15879
15880         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
15881         if (apedata != APE_SEG_SIG_MAGIC)
15882                 return;
15883
15884         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
15885         if (!(apedata & APE_FW_STATUS_READY))
15886                 return;
15887
15888         if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
15889                 tg3_flag_set(tp, APE_HAS_NCSI);
15890 }
15891
15892 static void tg3_read_dash_ver(struct tg3 *tp)
15893 {
15894         int vlen;
15895         u32 apedata;
15896         char *fwtype;
15897
15898         apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
15899
15900         if (tg3_flag(tp, APE_HAS_NCSI))
15901                 fwtype = "NCSI";
15902         else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725)
15903                 fwtype = "SMASH";
15904         else
15905                 fwtype = "DASH";
15906
15907         vlen = strlen(tp->fw_ver);
15908
15909         snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
15910                  fwtype,
15911                  (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
15912                  (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
15913                  (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
15914                  (apedata & APE_FW_VERSION_BLDMSK));
15915 }
15916
15917 static void tg3_read_otp_ver(struct tg3 *tp)
15918 {
15919         u32 val, val2;
15920
15921         if (tg3_asic_rev(tp) != ASIC_REV_5762)
15922                 return;
15923
15924         if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) &&
15925             !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) &&
15926             TG3_OTP_MAGIC0_VALID(val)) {
15927                 u64 val64 = (u64) val << 32 | val2;
15928                 u32 ver = 0;
15929                 int i, vlen;
15930
15931                 for (i = 0; i < 7; i++) {
15932                         if ((val64 & 0xff) == 0)
15933                                 break;
15934                         ver = val64 & 0xff;
15935                         val64 >>= 8;
15936                 }
15937                 vlen = strlen(tp->fw_ver);
15938                 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver);
15939         }
15940 }
15941
15942 static void tg3_read_fw_ver(struct tg3 *tp)
15943 {
15944         u32 val;
15945         bool vpd_vers = false;
15946
15947         if (tp->fw_ver[0] != 0)
15948                 vpd_vers = true;
15949
15950         if (tg3_flag(tp, NO_NVRAM)) {
15951                 strcat(tp->fw_ver, "sb");
15952                 tg3_read_otp_ver(tp);
15953                 return;
15954         }
15955
15956         if (tg3_nvram_read(tp, 0, &val))
15957                 return;
15958
15959         if (val == TG3_EEPROM_MAGIC)
15960                 tg3_read_bc_ver(tp);
15961         else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
15962                 tg3_read_sb_ver(tp, val);
15963         else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
15964                 tg3_read_hwsb_ver(tp);
15965
15966         if (tg3_flag(tp, ENABLE_ASF)) {
15967                 if (tg3_flag(tp, ENABLE_APE)) {
15968                         tg3_probe_ncsi(tp);
15969                         if (!vpd_vers)
15970                                 tg3_read_dash_ver(tp);
15971                 } else if (!vpd_vers) {
15972                         tg3_read_mgmtfw_ver(tp);
15973                 }
15974         }
15975
15976         tp->fw_ver[TG3_VER_SIZE - 1] = 0;
15977 }
15978
15979 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
15980 {
15981         if (tg3_flag(tp, LRG_PROD_RING_CAP))
15982                 return TG3_RX_RET_MAX_SIZE_5717;
15983         else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
15984                 return TG3_RX_RET_MAX_SIZE_5700;
15985         else
15986                 return TG3_RX_RET_MAX_SIZE_5705;
15987 }
15988
15989 static const struct pci_device_id tg3_write_reorder_chipsets[] = {
15990         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
15991         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
15992         { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
15993         { },
15994 };
15995
15996 static struct pci_dev *tg3_find_peer(struct tg3 *tp)
15997 {
15998         struct pci_dev *peer;
15999         unsigned int func, devnr = tp->pdev->devfn & ~7;
16000
16001         for (func = 0; func < 8; func++) {
16002                 peer = pci_get_slot(tp->pdev->bus, devnr | func);
16003                 if (peer && peer != tp->pdev)
16004                         break;
16005                 pci_dev_put(peer);
16006         }
16007         /* 5704 can be configured in single-port mode, set peer to
16008          * tp->pdev in that case.
16009          */
16010         if (!peer) {
16011                 peer = tp->pdev;
16012                 return peer;
16013         }
16014
16015         /*
16016          * We don't need to keep the refcount elevated; there's no way
16017          * to remove one half of this device without removing the other
16018          */
16019         pci_dev_put(peer);
16020
16021         return peer;
16022 }
16023
16024 static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
16025 {
16026         tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
16027         if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) {
16028                 u32 reg;
16029
16030                 /* All devices that use the alternate
16031                  * ASIC REV location have a CPMU.
16032                  */
16033                 tg3_flag_set(tp, CPMU_PRESENT);
16034
16035                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16036                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
16037                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16038                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16039                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
16040                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
16041                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
16042                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
16043                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
16044                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
16045                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787)
16046                         reg = TG3PCI_GEN2_PRODID_ASICREV;
16047                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
16048                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
16049                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
16050                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
16051                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
16052                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
16053                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
16054                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
16055                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
16056                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
16057                         reg = TG3PCI_GEN15_PRODID_ASICREV;
16058                 else
16059                         reg = TG3PCI_PRODID_ASICREV;
16060
16061                 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
16062         }
16063
16064         /* Wrong chip ID in 5752 A0. This code can be removed later
16065          * as A0 is not in production.
16066          */
16067         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW)
16068                 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
16069
16070         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0)
16071                 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
16072
16073         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16074             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16075             tg3_asic_rev(tp) == ASIC_REV_5720)
16076                 tg3_flag_set(tp, 5717_PLUS);
16077
16078         if (tg3_asic_rev(tp) == ASIC_REV_57765 ||
16079             tg3_asic_rev(tp) == ASIC_REV_57766)
16080                 tg3_flag_set(tp, 57765_CLASS);
16081
16082         if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) ||
16083              tg3_asic_rev(tp) == ASIC_REV_5762)
16084                 tg3_flag_set(tp, 57765_PLUS);
16085
16086         /* Intentionally exclude ASIC_REV_5906 */
16087         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16088             tg3_asic_rev(tp) == ASIC_REV_5787 ||
16089             tg3_asic_rev(tp) == ASIC_REV_5784 ||
16090             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16091             tg3_asic_rev(tp) == ASIC_REV_5785 ||
16092             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16093             tg3_flag(tp, 57765_PLUS))
16094                 tg3_flag_set(tp, 5755_PLUS);
16095
16096         if (tg3_asic_rev(tp) == ASIC_REV_5780 ||
16097             tg3_asic_rev(tp) == ASIC_REV_5714)
16098                 tg3_flag_set(tp, 5780_CLASS);
16099
16100         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16101             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16102             tg3_asic_rev(tp) == ASIC_REV_5906 ||
16103             tg3_flag(tp, 5755_PLUS) ||
16104             tg3_flag(tp, 5780_CLASS))
16105                 tg3_flag_set(tp, 5750_PLUS);
16106
16107         if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
16108             tg3_flag(tp, 5750_PLUS))
16109                 tg3_flag_set(tp, 5705_PLUS);
16110 }
16111
16112 static bool tg3_10_100_only_device(struct tg3 *tp,
16113                                    const struct pci_device_id *ent)
16114 {
16115         u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
16116
16117         if ((tg3_asic_rev(tp) == ASIC_REV_5703 &&
16118              (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
16119             (tp->phy_flags & TG3_PHYFLG_IS_FET))
16120                 return true;
16121
16122         if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
16123                 if (tg3_asic_rev(tp) == ASIC_REV_5705) {
16124                         if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
16125                                 return true;
16126                 } else {
16127                         return true;
16128                 }
16129         }
16130
16131         return false;
16132 }
16133
16134 static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
16135 {
16136         u32 misc_ctrl_reg;
16137         u32 pci_state_reg, grc_misc_cfg;
16138         u32 val;
16139         u16 pci_cmd;
16140         int err;
16141
16142         /* Force memory write invalidate off.  If we leave it on,
16143          * then on 5700_BX chips we have to enable a workaround.
16144          * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
16145          * to match the cacheline size.  The Broadcom driver have this
16146          * workaround but turns MWI off all the times so never uses
16147          * it.  This seems to suggest that the workaround is insufficient.
16148          */
16149         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16150         pci_cmd &= ~PCI_COMMAND_INVALIDATE;
16151         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16152
16153         /* Important! -- Make sure register accesses are byteswapped
16154          * correctly.  Also, for those chips that require it, make
16155          * sure that indirect register accesses are enabled before
16156          * the first operation.
16157          */
16158         pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16159                               &misc_ctrl_reg);
16160         tp->misc_host_ctrl |= (misc_ctrl_reg &
16161                                MISC_HOST_CTRL_CHIPREV);
16162         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16163                                tp->misc_host_ctrl);
16164
16165         tg3_detect_asic_rev(tp, misc_ctrl_reg);
16166
16167         /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
16168          * we need to disable memory and use config. cycles
16169          * only to access all registers. The 5702/03 chips
16170          * can mistakenly decode the special cycles from the
16171          * ICH chipsets as memory write cycles, causing corruption
16172          * of register and memory space. Only certain ICH bridges
16173          * will drive special cycles with non-zero data during the
16174          * address phase which can fall within the 5703's address
16175          * range. This is not an ICH bug as the PCI spec allows
16176          * non-zero address during special cycles. However, only
16177          * these ICH bridges are known to drive non-zero addresses
16178          * during special cycles.
16179          *
16180          * Since special cycles do not cross PCI bridges, we only
16181          * enable this workaround if the 5703 is on the secondary
16182          * bus of these ICH bridges.
16183          */
16184         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) ||
16185             (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) {
16186                 static struct tg3_dev_id {
16187                         u32     vendor;
16188                         u32     device;
16189                         u32     rev;
16190                 } ich_chipsets[] = {
16191                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
16192                           PCI_ANY_ID },
16193                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
16194                           PCI_ANY_ID },
16195                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
16196                           0xa },
16197                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
16198                           PCI_ANY_ID },
16199                         { },
16200                 };
16201                 struct tg3_dev_id *pci_id = &ich_chipsets[0];
16202                 struct pci_dev *bridge = NULL;
16203
16204                 while (pci_id->vendor != 0) {
16205                         bridge = pci_get_device(pci_id->vendor, pci_id->device,
16206                                                 bridge);
16207                         if (!bridge) {
16208                                 pci_id++;
16209                                 continue;
16210                         }
16211                         if (pci_id->rev != PCI_ANY_ID) {
16212                                 if (bridge->revision > pci_id->rev)
16213                                         continue;
16214                         }
16215                         if (bridge->subordinate &&
16216                             (bridge->subordinate->number ==
16217                              tp->pdev->bus->number)) {
16218                                 tg3_flag_set(tp, ICH_WORKAROUND);
16219                                 pci_dev_put(bridge);
16220                                 break;
16221                         }
16222                 }
16223         }
16224
16225         if (tg3_asic_rev(tp) == ASIC_REV_5701) {
16226                 static struct tg3_dev_id {
16227                         u32     vendor;
16228                         u32     device;
16229                 } bridge_chipsets[] = {
16230                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
16231                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
16232                         { },
16233                 };
16234                 struct tg3_dev_id *pci_id = &bridge_chipsets[0];
16235                 struct pci_dev *bridge = NULL;
16236
16237                 while (pci_id->vendor != 0) {
16238                         bridge = pci_get_device(pci_id->vendor,
16239                                                 pci_id->device,
16240                                                 bridge);
16241                         if (!bridge) {
16242                                 pci_id++;
16243                                 continue;
16244                         }
16245                         if (bridge->subordinate &&
16246                             (bridge->subordinate->number <=
16247                              tp->pdev->bus->number) &&
16248                             (bridge->subordinate->busn_res.end >=
16249                              tp->pdev->bus->number)) {
16250                                 tg3_flag_set(tp, 5701_DMA_BUG);
16251                                 pci_dev_put(bridge);
16252                                 break;
16253                         }
16254                 }
16255         }
16256
16257         /* The EPB bridge inside 5714, 5715, and 5780 cannot support
16258          * DMA addresses > 40-bit. This bridge may have other additional
16259          * 57xx devices behind it in some 4-port NIC designs for example.
16260          * Any tg3 device found behind the bridge will also need the 40-bit
16261          * DMA workaround.
16262          */
16263         if (tg3_flag(tp, 5780_CLASS)) {
16264                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16265                 tp->msi_cap = tp->pdev->msi_cap;
16266         } else {
16267                 struct pci_dev *bridge = NULL;
16268
16269                 do {
16270                         bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
16271                                                 PCI_DEVICE_ID_SERVERWORKS_EPB,
16272                                                 bridge);
16273                         if (bridge && bridge->subordinate &&
16274                             (bridge->subordinate->number <=
16275                              tp->pdev->bus->number) &&
16276                             (bridge->subordinate->busn_res.end >=
16277                              tp->pdev->bus->number)) {
16278                                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16279                                 pci_dev_put(bridge);
16280                                 break;
16281                         }
16282                 } while (bridge);
16283         }
16284
16285         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16286             tg3_asic_rev(tp) == ASIC_REV_5714)
16287                 tp->pdev_peer = tg3_find_peer(tp);
16288
16289         /* Determine TSO capabilities */
16290         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0)
16291                 ; /* Do nothing. HW bug. */
16292         else if (tg3_flag(tp, 57765_PLUS))
16293                 tg3_flag_set(tp, HW_TSO_3);
16294         else if (tg3_flag(tp, 5755_PLUS) ||
16295                  tg3_asic_rev(tp) == ASIC_REV_5906)
16296                 tg3_flag_set(tp, HW_TSO_2);
16297         else if (tg3_flag(tp, 5750_PLUS)) {
16298                 tg3_flag_set(tp, HW_TSO_1);
16299                 tg3_flag_set(tp, TSO_BUG);
16300                 if (tg3_asic_rev(tp) == ASIC_REV_5750 &&
16301                     tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2)
16302                         tg3_flag_clear(tp, TSO_BUG);
16303         } else if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16304                    tg3_asic_rev(tp) != ASIC_REV_5701 &&
16305                    tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
16306                 tg3_flag_set(tp, FW_TSO);
16307                 tg3_flag_set(tp, TSO_BUG);
16308                 if (tg3_asic_rev(tp) == ASIC_REV_5705)
16309                         tp->fw_needed = FIRMWARE_TG3TSO5;
16310                 else
16311                         tp->fw_needed = FIRMWARE_TG3TSO;
16312         }
16313
16314         /* Selectively allow TSO based on operating conditions */
16315         if (tg3_flag(tp, HW_TSO_1) ||
16316             tg3_flag(tp, HW_TSO_2) ||
16317             tg3_flag(tp, HW_TSO_3) ||
16318             tg3_flag(tp, FW_TSO)) {
16319                 /* For firmware TSO, assume ASF is disabled.
16320                  * We'll disable TSO later if we discover ASF
16321                  * is enabled in tg3_get_eeprom_hw_cfg().
16322                  */
16323                 tg3_flag_set(tp, TSO_CAPABLE);
16324         } else {
16325                 tg3_flag_clear(tp, TSO_CAPABLE);
16326                 tg3_flag_clear(tp, TSO_BUG);
16327                 tp->fw_needed = NULL;
16328         }
16329
16330         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0)
16331                 tp->fw_needed = FIRMWARE_TG3;
16332
16333         if (tg3_asic_rev(tp) == ASIC_REV_57766)
16334                 tp->fw_needed = FIRMWARE_TG357766;
16335
16336         tp->irq_max = 1;
16337
16338         if (tg3_flag(tp, 5750_PLUS)) {
16339                 tg3_flag_set(tp, SUPPORT_MSI);
16340                 if (tg3_chip_rev(tp) == CHIPREV_5750_AX ||
16341                     tg3_chip_rev(tp) == CHIPREV_5750_BX ||
16342                     (tg3_asic_rev(tp) == ASIC_REV_5714 &&
16343                      tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 &&
16344                      tp->pdev_peer == tp->pdev))
16345                         tg3_flag_clear(tp, SUPPORT_MSI);
16346
16347                 if (tg3_flag(tp, 5755_PLUS) ||
16348                     tg3_asic_rev(tp) == ASIC_REV_5906) {
16349                         tg3_flag_set(tp, 1SHOT_MSI);
16350                 }
16351
16352                 if (tg3_flag(tp, 57765_PLUS)) {
16353                         tg3_flag_set(tp, SUPPORT_MSIX);
16354                         tp->irq_max = TG3_IRQ_MAX_VECS;
16355                 }
16356         }
16357
16358         tp->txq_max = 1;
16359         tp->rxq_max = 1;
16360         if (tp->irq_max > 1) {
16361                 tp->rxq_max = TG3_RSS_MAX_NUM_QS;
16362                 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
16363
16364                 if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
16365                     tg3_asic_rev(tp) == ASIC_REV_5720)
16366                         tp->txq_max = tp->irq_max - 1;
16367         }
16368
16369         if (tg3_flag(tp, 5755_PLUS) ||
16370             tg3_asic_rev(tp) == ASIC_REV_5906)
16371                 tg3_flag_set(tp, SHORT_DMA_BUG);
16372
16373         if (tg3_asic_rev(tp) == ASIC_REV_5719)
16374                 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
16375
16376         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16377             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16378             tg3_asic_rev(tp) == ASIC_REV_5720 ||
16379             tg3_asic_rev(tp) == ASIC_REV_5762)
16380                 tg3_flag_set(tp, LRG_PROD_RING_CAP);
16381
16382         if (tg3_flag(tp, 57765_PLUS) &&
16383             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0)
16384                 tg3_flag_set(tp, USE_JUMBO_BDFLAG);
16385
16386         if (!tg3_flag(tp, 5705_PLUS) ||
16387             tg3_flag(tp, 5780_CLASS) ||
16388             tg3_flag(tp, USE_JUMBO_BDFLAG))
16389                 tg3_flag_set(tp, JUMBO_CAPABLE);
16390
16391         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16392                               &pci_state_reg);
16393
16394         if (pci_is_pcie(tp->pdev)) {
16395                 u16 lnkctl;
16396
16397                 tg3_flag_set(tp, PCI_EXPRESS);
16398
16399                 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
16400                 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
16401                         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16402                                 tg3_flag_clear(tp, HW_TSO_2);
16403                                 tg3_flag_clear(tp, TSO_CAPABLE);
16404                         }
16405                         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
16406                             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16407                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 ||
16408                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1)
16409                                 tg3_flag_set(tp, CLKREQ_BUG);
16410                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) {
16411                         tg3_flag_set(tp, L1PLLPD_EN);
16412                 }
16413         } else if (tg3_asic_rev(tp) == ASIC_REV_5785) {
16414                 /* BCM5785 devices are effectively PCIe devices, and should
16415                  * follow PCIe codepaths, but do not have a PCIe capabilities
16416                  * section.
16417                  */
16418                 tg3_flag_set(tp, PCI_EXPRESS);
16419         } else if (!tg3_flag(tp, 5705_PLUS) ||
16420                    tg3_flag(tp, 5780_CLASS)) {
16421                 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
16422                 if (!tp->pcix_cap) {
16423                         dev_err(&tp->pdev->dev,
16424                                 "Cannot find PCI-X capability, aborting\n");
16425                         return -EIO;
16426                 }
16427
16428                 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
16429                         tg3_flag_set(tp, PCIX_MODE);
16430         }
16431
16432         /* If we have an AMD 762 or VIA K8T800 chipset, write
16433          * reordering to the mailbox registers done by the host
16434          * controller can cause major troubles.  We read back from
16435          * every mailbox register write to force the writes to be
16436          * posted to the chip in order.
16437          */
16438         if (pci_dev_present(tg3_write_reorder_chipsets) &&
16439             !tg3_flag(tp, PCI_EXPRESS))
16440                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
16441
16442         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
16443                              &tp->pci_cacheline_sz);
16444         pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16445                              &tp->pci_lat_timer);
16446         if (tg3_asic_rev(tp) == ASIC_REV_5703 &&
16447             tp->pci_lat_timer < 64) {
16448                 tp->pci_lat_timer = 64;
16449                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16450                                       tp->pci_lat_timer);
16451         }
16452
16453         /* Important! -- It is critical that the PCI-X hw workaround
16454          * situation is decided before the first MMIO register access.
16455          */
16456         if (tg3_chip_rev(tp) == CHIPREV_5700_BX) {
16457                 /* 5700 BX chips need to have their TX producer index
16458                  * mailboxes written twice to workaround a bug.
16459                  */
16460                 tg3_flag_set(tp, TXD_MBOX_HWBUG);
16461
16462                 /* If we are in PCI-X mode, enable register write workaround.
16463                  *
16464                  * The workaround is to use indirect register accesses
16465                  * for all chip writes not to mailbox registers.
16466                  */
16467                 if (tg3_flag(tp, PCIX_MODE)) {
16468                         u32 pm_reg;
16469
16470                         tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16471
16472                         /* The chip can have it's power management PCI config
16473                          * space registers clobbered due to this bug.
16474                          * So explicitly force the chip into D0 here.
16475                          */
16476                         pci_read_config_dword(tp->pdev,
16477                                               tp->pdev->pm_cap + PCI_PM_CTRL,
16478                                               &pm_reg);
16479                         pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
16480                         pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
16481                         pci_write_config_dword(tp->pdev,
16482                                                tp->pdev->pm_cap + PCI_PM_CTRL,
16483                                                pm_reg);
16484
16485                         /* Also, force SERR#/PERR# in PCI command. */
16486                         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16487                         pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
16488                         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16489                 }
16490         }
16491
16492         if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
16493                 tg3_flag_set(tp, PCI_HIGH_SPEED);
16494         if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
16495                 tg3_flag_set(tp, PCI_32BIT);
16496
16497         /* Chip-specific fixup from Broadcom driver */
16498         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) &&
16499             (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
16500                 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
16501                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
16502         }
16503
16504         /* Default fast path register access methods */
16505         tp->read32 = tg3_read32;
16506         tp->write32 = tg3_write32;
16507         tp->read32_mbox = tg3_read32;
16508         tp->write32_mbox = tg3_write32;
16509         tp->write32_tx_mbox = tg3_write32;
16510         tp->write32_rx_mbox = tg3_write32;
16511
16512         /* Various workaround register access methods */
16513         if (tg3_flag(tp, PCIX_TARGET_HWBUG))
16514                 tp->write32 = tg3_write_indirect_reg32;
16515         else if (tg3_asic_rev(tp) == ASIC_REV_5701 ||
16516                  (tg3_flag(tp, PCI_EXPRESS) &&
16517                   tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) {
16518                 /*
16519                  * Back to back register writes can cause problems on these
16520                  * chips, the workaround is to read back all reg writes
16521                  * except those to mailbox regs.
16522                  *
16523                  * See tg3_write_indirect_reg32().
16524                  */
16525                 tp->write32 = tg3_write_flush_reg32;
16526         }
16527
16528         if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
16529                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
16530                 if (tg3_flag(tp, MBOX_WRITE_REORDER))
16531                         tp->write32_rx_mbox = tg3_write_flush_reg32;
16532         }
16533
16534         if (tg3_flag(tp, ICH_WORKAROUND)) {
16535                 tp->read32 = tg3_read_indirect_reg32;
16536                 tp->write32 = tg3_write_indirect_reg32;
16537                 tp->read32_mbox = tg3_read_indirect_mbox;
16538                 tp->write32_mbox = tg3_write_indirect_mbox;
16539                 tp->write32_tx_mbox = tg3_write_indirect_mbox;
16540                 tp->write32_rx_mbox = tg3_write_indirect_mbox;
16541
16542                 iounmap(tp->regs);
16543                 tp->regs = NULL;
16544
16545                 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16546                 pci_cmd &= ~PCI_COMMAND_MEMORY;
16547                 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16548         }
16549         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16550                 tp->read32_mbox = tg3_read32_mbox_5906;
16551                 tp->write32_mbox = tg3_write32_mbox_5906;
16552                 tp->write32_tx_mbox = tg3_write32_mbox_5906;
16553                 tp->write32_rx_mbox = tg3_write32_mbox_5906;
16554         }
16555
16556         if (tp->write32 == tg3_write_indirect_reg32 ||
16557             (tg3_flag(tp, PCIX_MODE) &&
16558              (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16559               tg3_asic_rev(tp) == ASIC_REV_5701)))
16560                 tg3_flag_set(tp, SRAM_USE_CONFIG);
16561
16562         /* The memory arbiter has to be enabled in order for SRAM accesses
16563          * to succeed.  Normally on powerup the tg3 chip firmware will make
16564          * sure it is enabled, but other entities such as system netboot
16565          * code might disable it.
16566          */
16567         val = tr32(MEMARB_MODE);
16568         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
16569
16570         tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
16571         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16572             tg3_flag(tp, 5780_CLASS)) {
16573                 if (tg3_flag(tp, PCIX_MODE)) {
16574                         pci_read_config_dword(tp->pdev,
16575                                               tp->pcix_cap + PCI_X_STATUS,
16576                                               &val);
16577                         tp->pci_fn = val & 0x7;
16578                 }
16579         } else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16580                    tg3_asic_rev(tp) == ASIC_REV_5719 ||
16581                    tg3_asic_rev(tp) == ASIC_REV_5720) {
16582                 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
16583                 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG)
16584                         val = tr32(TG3_CPMU_STATUS);
16585
16586                 if (tg3_asic_rev(tp) == ASIC_REV_5717)
16587                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0;
16588                 else
16589                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
16590                                      TG3_CPMU_STATUS_FSHFT_5719;
16591         }
16592
16593         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
16594                 tp->write32_tx_mbox = tg3_write_flush_reg32;
16595                 tp->write32_rx_mbox = tg3_write_flush_reg32;
16596         }
16597
16598         /* Get eeprom hw config before calling tg3_set_power_state().
16599          * In particular, the TG3_FLAG_IS_NIC flag must be
16600          * determined before calling tg3_set_power_state() so that
16601          * we know whether or not to switch out of Vaux power.
16602          * When the flag is set, it means that GPIO1 is used for eeprom
16603          * write protect and also implies that it is a LOM where GPIOs
16604          * are not used to switch power.
16605          */
16606         tg3_get_eeprom_hw_cfg(tp);
16607
16608         if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) {
16609                 tg3_flag_clear(tp, TSO_CAPABLE);
16610                 tg3_flag_clear(tp, TSO_BUG);
16611                 tp->fw_needed = NULL;
16612         }
16613
16614         if (tg3_flag(tp, ENABLE_APE)) {
16615                 /* Allow reads and writes to the
16616                  * APE register and memory space.
16617                  */
16618                 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
16619                                  PCISTATE_ALLOW_APE_SHMEM_WR |
16620                                  PCISTATE_ALLOW_APE_PSPACE_WR;
16621                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
16622                                        pci_state_reg);
16623
16624                 tg3_ape_lock_init(tp);
16625                 tp->ape_hb_interval =
16626                         msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC);
16627         }
16628
16629         /* Set up tp->grc_local_ctrl before calling
16630          * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
16631          * will bring 5700's external PHY out of reset.
16632          * It is also used as eeprom write protect on LOMs.
16633          */
16634         tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
16635         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16636             tg3_flag(tp, EEPROM_WRITE_PROT))
16637                 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
16638                                        GRC_LCLCTRL_GPIO_OUTPUT1);
16639         /* Unused GPIO3 must be driven as output on 5752 because there
16640          * are no pull-up resistors on unused GPIO pins.
16641          */
16642         else if (tg3_asic_rev(tp) == ASIC_REV_5752)
16643                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
16644
16645         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16646             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16647             tg3_flag(tp, 57765_CLASS))
16648                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16649
16650         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16651             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
16652                 /* Turn off the debug UART. */
16653                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16654                 if (tg3_flag(tp, IS_NIC))
16655                         /* Keep VMain power. */
16656                         tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
16657                                               GRC_LCLCTRL_GPIO_OUTPUT0;
16658         }
16659
16660         if (tg3_asic_rev(tp) == ASIC_REV_5762)
16661                 tp->grc_local_ctrl |=
16662                         tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL;
16663
16664         /* Switch out of Vaux if it is a NIC */
16665         tg3_pwrsrc_switch_to_vmain(tp);
16666
16667         /* Derive initial jumbo mode from MTU assigned in
16668          * ether_setup() via the alloc_etherdev() call
16669          */
16670         if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
16671                 tg3_flag_set(tp, JUMBO_RING_ENABLE);
16672
16673         /* Determine WakeOnLan speed to use. */
16674         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16675             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16676             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16677             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) {
16678                 tg3_flag_clear(tp, WOL_SPEED_100MB);
16679         } else {
16680                 tg3_flag_set(tp, WOL_SPEED_100MB);
16681         }
16682
16683         if (tg3_asic_rev(tp) == ASIC_REV_5906)
16684                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
16685
16686         /* A few boards don't want Ethernet@WireSpeed phy feature */
16687         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16688             (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16689              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) &&
16690              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) ||
16691             (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
16692             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
16693                 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
16694
16695         if (tg3_chip_rev(tp) == CHIPREV_5703_AX ||
16696             tg3_chip_rev(tp) == CHIPREV_5704_AX)
16697                 tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
16698         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0)
16699                 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
16700
16701         if (tg3_flag(tp, 5705_PLUS) &&
16702             !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
16703             tg3_asic_rev(tp) != ASIC_REV_5785 &&
16704             tg3_asic_rev(tp) != ASIC_REV_57780 &&
16705             !tg3_flag(tp, 57765_PLUS)) {
16706                 if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16707                     tg3_asic_rev(tp) == ASIC_REV_5787 ||
16708                     tg3_asic_rev(tp) == ASIC_REV_5784 ||
16709                     tg3_asic_rev(tp) == ASIC_REV_5761) {
16710                         if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
16711                             tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
16712                                 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
16713                         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
16714                                 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
16715                 } else
16716                         tp->phy_flags |= TG3_PHYFLG_BER_BUG;
16717         }
16718
16719         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
16720             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
16721                 tp->phy_otp = tg3_read_otp_phycfg(tp);
16722                 if (tp->phy_otp == 0)
16723                         tp->phy_otp = TG3_OTP_DEFAULT;
16724         }
16725
16726         if (tg3_flag(tp, CPMU_PRESENT))
16727                 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
16728         else
16729                 tp->mi_mode = MAC_MI_MODE_BASE;
16730
16731         tp->coalesce_mode = 0;
16732         if (tg3_chip_rev(tp) != CHIPREV_5700_AX &&
16733             tg3_chip_rev(tp) != CHIPREV_5700_BX)
16734                 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
16735
16736         /* Set these bits to enable statistics workaround. */
16737         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16738             tg3_asic_rev(tp) == ASIC_REV_5762 ||
16739             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
16740             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) {
16741                 tp->coalesce_mode |= HOSTCC_MODE_ATTN;
16742                 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
16743         }
16744
16745         if (tg3_asic_rev(tp) == ASIC_REV_5785 ||
16746             tg3_asic_rev(tp) == ASIC_REV_57780)
16747                 tg3_flag_set(tp, USE_PHYLIB);
16748
16749         err = tg3_mdio_init(tp);
16750         if (err)
16751                 return err;
16752
16753         /* Initialize data/descriptor byte/word swapping. */
16754         val = tr32(GRC_MODE);
16755         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
16756             tg3_asic_rev(tp) == ASIC_REV_5762)
16757                 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
16758                         GRC_MODE_WORD_SWAP_B2HRX_DATA |
16759                         GRC_MODE_B2HRX_ENABLE |
16760                         GRC_MODE_HTX2B_ENABLE |
16761                         GRC_MODE_HOST_STACKUP);
16762         else
16763                 val &= GRC_MODE_HOST_STACKUP;
16764
16765         tw32(GRC_MODE, val | tp->grc_mode);
16766
16767         tg3_switch_clocks(tp);
16768
16769         /* Clear this out for sanity. */
16770         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
16771
16772         /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */
16773         tw32(TG3PCI_REG_BASE_ADDR, 0);
16774
16775         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16776                               &pci_state_reg);
16777         if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
16778             !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
16779                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16780                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16781                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 ||
16782                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) {
16783                         void __iomem *sram_base;
16784
16785                         /* Write some dummy words into the SRAM status block
16786                          * area, see if it reads back correctly.  If the return
16787                          * value is bad, force enable the PCIX workaround.
16788                          */
16789                         sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
16790
16791                         writel(0x00000000, sram_base);
16792                         writel(0x00000000, sram_base + 4);
16793                         writel(0xffffffff, sram_base + 4);
16794                         if (readl(sram_base) != 0x00000000)
16795                                 tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16796                 }
16797         }
16798
16799         udelay(50);
16800         tg3_nvram_init(tp);
16801
16802         /* If the device has an NVRAM, no need to load patch firmware */
16803         if (tg3_asic_rev(tp) == ASIC_REV_57766 &&
16804             !tg3_flag(tp, NO_NVRAM))
16805                 tp->fw_needed = NULL;
16806
16807         grc_misc_cfg = tr32(GRC_MISC_CFG);
16808         grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
16809
16810         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16811             (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
16812              grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
16813                 tg3_flag_set(tp, IS_5788);
16814
16815         if (!tg3_flag(tp, IS_5788) &&
16816             tg3_asic_rev(tp) != ASIC_REV_5700)
16817                 tg3_flag_set(tp, TAGGED_STATUS);
16818         if (tg3_flag(tp, TAGGED_STATUS)) {
16819                 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
16820                                       HOSTCC_MODE_CLRTICK_TXBD);
16821
16822                 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
16823                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16824                                        tp->misc_host_ctrl);
16825         }
16826
16827         /* Preserve the APE MAC_MODE bits */
16828         if (tg3_flag(tp, ENABLE_APE))
16829                 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
16830         else
16831                 tp->mac_mode = 0;
16832
16833         if (tg3_10_100_only_device(tp, ent))
16834                 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
16835
16836         err = tg3_phy_probe(tp);
16837         if (err) {
16838                 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
16839                 /* ... but do not return immediately ... */
16840                 tg3_mdio_fini(tp);
16841         }
16842
16843         tg3_read_vpd(tp);
16844         tg3_read_fw_ver(tp);
16845
16846         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
16847                 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16848         } else {
16849                 if (tg3_asic_rev(tp) == ASIC_REV_5700)
16850                         tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16851                 else
16852                         tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16853         }
16854
16855         /* 5700 {AX,BX} chips have a broken status block link
16856          * change bit implementation, so we must use the
16857          * status register in those cases.
16858          */
16859         if (tg3_asic_rev(tp) == ASIC_REV_5700)
16860                 tg3_flag_set(tp, USE_LINKCHG_REG);
16861         else
16862                 tg3_flag_clear(tp, USE_LINKCHG_REG);
16863
16864         /* The led_ctrl is set during tg3_phy_probe, here we might
16865          * have to force the link status polling mechanism based
16866          * upon subsystem IDs.
16867          */
16868         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
16869             tg3_asic_rev(tp) == ASIC_REV_5701 &&
16870             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
16871                 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16872                 tg3_flag_set(tp, USE_LINKCHG_REG);
16873         }
16874
16875         /* For all SERDES we poll the MAC status register. */
16876         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
16877                 tg3_flag_set(tp, POLL_SERDES);
16878         else
16879                 tg3_flag_clear(tp, POLL_SERDES);
16880
16881         if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF))
16882                 tg3_flag_set(tp, POLL_CPMU_LINK);
16883
16884         tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
16885         tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
16886         if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
16887             tg3_flag(tp, PCIX_MODE)) {
16888                 tp->rx_offset = NET_SKB_PAD;
16889 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
16890                 tp->rx_copy_thresh = ~(u16)0;
16891 #endif
16892         }
16893
16894         tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
16895         tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
16896         tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
16897
16898         tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
16899
16900         /* Increment the rx prod index on the rx std ring by at most
16901          * 8 for these chips to workaround hw errata.
16902          */
16903         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16904             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16905             tg3_asic_rev(tp) == ASIC_REV_5755)
16906                 tp->rx_std_max_post = 8;
16907
16908         if (tg3_flag(tp, ASPM_WORKAROUND))
16909                 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
16910                                      PCIE_PWR_MGMT_L1_THRESH_MSK;
16911
16912         return err;
16913 }
16914
16915 static int tg3_get_device_address(struct tg3 *tp, u8 *addr)
16916 {
16917         u32 hi, lo, mac_offset;
16918         int addr_ok = 0;
16919         int err;
16920
16921         if (!eth_platform_get_mac_address(&tp->pdev->dev, addr))
16922                 return 0;
16923
16924         if (tg3_flag(tp, IS_SSB_CORE)) {
16925                 err = ssb_gige_get_macaddr(tp->pdev, addr);
16926                 if (!err && is_valid_ether_addr(addr))
16927                         return 0;
16928         }
16929
16930         mac_offset = 0x7c;
16931         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16932             tg3_flag(tp, 5780_CLASS)) {
16933                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
16934                         mac_offset = 0xcc;
16935                 if (tg3_nvram_lock(tp))
16936                         tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
16937                 else
16938                         tg3_nvram_unlock(tp);
16939         } else if (tg3_flag(tp, 5717_PLUS)) {
16940                 if (tp->pci_fn & 1)
16941                         mac_offset = 0xcc;
16942                 if (tp->pci_fn > 1)
16943                         mac_offset += 0x18c;
16944         } else if (tg3_asic_rev(tp) == ASIC_REV_5906)
16945                 mac_offset = 0x10;
16946
16947         /* First try to get it from MAC address mailbox. */
16948         tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
16949         if ((hi >> 16) == 0x484b) {
16950                 addr[0] = (hi >>  8) & 0xff;
16951                 addr[1] = (hi >>  0) & 0xff;
16952
16953                 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
16954                 addr[2] = (lo >> 24) & 0xff;
16955                 addr[3] = (lo >> 16) & 0xff;
16956                 addr[4] = (lo >>  8) & 0xff;
16957                 addr[5] = (lo >>  0) & 0xff;
16958
16959                 /* Some old bootcode may report a 0 MAC address in SRAM */
16960                 addr_ok = is_valid_ether_addr(addr);
16961         }
16962         if (!addr_ok) {
16963                 /* Next, try NVRAM. */
16964                 if (!tg3_flag(tp, NO_NVRAM) &&
16965                     !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
16966                     !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
16967                         memcpy(&addr[0], ((char *)&hi) + 2, 2);
16968                         memcpy(&addr[2], (char *)&lo, sizeof(lo));
16969                 }
16970                 /* Finally just fetch it out of the MAC control regs. */
16971                 else {
16972                         hi = tr32(MAC_ADDR_0_HIGH);
16973                         lo = tr32(MAC_ADDR_0_LOW);
16974
16975                         addr[5] = lo & 0xff;
16976                         addr[4] = (lo >> 8) & 0xff;
16977                         addr[3] = (lo >> 16) & 0xff;
16978                         addr[2] = (lo >> 24) & 0xff;
16979                         addr[1] = hi & 0xff;
16980                         addr[0] = (hi >> 8) & 0xff;
16981                 }
16982         }
16983
16984         if (!is_valid_ether_addr(addr))
16985                 return -EINVAL;
16986         return 0;
16987 }
16988
16989 #define BOUNDARY_SINGLE_CACHELINE       1
16990 #define BOUNDARY_MULTI_CACHELINE        2
16991
16992 static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
16993 {
16994         int cacheline_size;
16995         u8 byte;
16996         int goal;
16997
16998         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
16999         if (byte == 0)
17000                 cacheline_size = 1024;
17001         else
17002                 cacheline_size = (int) byte * 4;
17003
17004         /* On 5703 and later chips, the boundary bits have no
17005          * effect.
17006          */
17007         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17008             tg3_asic_rev(tp) != ASIC_REV_5701 &&
17009             !tg3_flag(tp, PCI_EXPRESS))
17010                 goto out;
17011
17012 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
17013         goal = BOUNDARY_MULTI_CACHELINE;
17014 #else
17015 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
17016         goal = BOUNDARY_SINGLE_CACHELINE;
17017 #else
17018         goal = 0;
17019 #endif
17020 #endif
17021
17022         if (tg3_flag(tp, 57765_PLUS)) {
17023                 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
17024                 goto out;
17025         }
17026
17027         if (!goal)
17028                 goto out;
17029
17030         /* PCI controllers on most RISC systems tend to disconnect
17031          * when a device tries to burst across a cache-line boundary.
17032          * Therefore, letting tg3 do so just wastes PCI bandwidth.
17033          *
17034          * Unfortunately, for PCI-E there are only limited
17035          * write-side controls for this, and thus for reads
17036          * we will still get the disconnects.  We'll also waste
17037          * these PCI cycles for both read and write for chips
17038          * other than 5700 and 5701 which do not implement the
17039          * boundary bits.
17040          */
17041         if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
17042                 switch (cacheline_size) {
17043                 case 16:
17044                 case 32:
17045                 case 64:
17046                 case 128:
17047                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17048                                 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
17049                                         DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
17050                         } else {
17051                                 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17052                                         DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17053                         }
17054                         break;
17055
17056                 case 256:
17057                         val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
17058                                 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
17059                         break;
17060
17061                 default:
17062                         val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17063                                 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17064                         break;
17065                 }
17066         } else if (tg3_flag(tp, PCI_EXPRESS)) {
17067                 switch (cacheline_size) {
17068                 case 16:
17069                 case 32:
17070                 case 64:
17071                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17072                                 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17073                                 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
17074                                 break;
17075                         }
17076                         fallthrough;
17077                 case 128:
17078                 default:
17079                         val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17080                         val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
17081                         break;
17082                 }
17083         } else {
17084                 switch (cacheline_size) {
17085                 case 16:
17086                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17087                                 val |= (DMA_RWCTRL_READ_BNDRY_16 |
17088                                         DMA_RWCTRL_WRITE_BNDRY_16);
17089                                 break;
17090                         }
17091                         fallthrough;
17092                 case 32:
17093                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17094                                 val |= (DMA_RWCTRL_READ_BNDRY_32 |
17095                                         DMA_RWCTRL_WRITE_BNDRY_32);
17096                                 break;
17097                         }
17098                         fallthrough;
17099                 case 64:
17100                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17101                                 val |= (DMA_RWCTRL_READ_BNDRY_64 |
17102                                         DMA_RWCTRL_WRITE_BNDRY_64);
17103                                 break;
17104                         }
17105                         fallthrough;
17106                 case 128:
17107                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17108                                 val |= (DMA_RWCTRL_READ_BNDRY_128 |
17109                                         DMA_RWCTRL_WRITE_BNDRY_128);
17110                                 break;
17111                         }
17112                         fallthrough;
17113                 case 256:
17114                         val |= (DMA_RWCTRL_READ_BNDRY_256 |
17115                                 DMA_RWCTRL_WRITE_BNDRY_256);
17116                         break;
17117                 case 512:
17118                         val |= (DMA_RWCTRL_READ_BNDRY_512 |
17119                                 DMA_RWCTRL_WRITE_BNDRY_512);
17120                         break;
17121                 case 1024:
17122                 default:
17123                         val |= (DMA_RWCTRL_READ_BNDRY_1024 |
17124                                 DMA_RWCTRL_WRITE_BNDRY_1024);
17125                         break;
17126                 }
17127         }
17128
17129 out:
17130         return val;
17131 }
17132
17133 static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
17134                            int size, bool to_device)
17135 {
17136         struct tg3_internal_buffer_desc test_desc;
17137         u32 sram_dma_descs;
17138         int i, ret;
17139
17140         sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
17141
17142         tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
17143         tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
17144         tw32(RDMAC_STATUS, 0);
17145         tw32(WDMAC_STATUS, 0);
17146
17147         tw32(BUFMGR_MODE, 0);
17148         tw32(FTQ_RESET, 0);
17149
17150         test_desc.addr_hi = ((u64) buf_dma) >> 32;
17151         test_desc.addr_lo = buf_dma & 0xffffffff;
17152         test_desc.nic_mbuf = 0x00002100;
17153         test_desc.len = size;
17154
17155         /*
17156          * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
17157          * the *second* time the tg3 driver was getting loaded after an
17158          * initial scan.
17159          *
17160          * Broadcom tells me:
17161          *   ...the DMA engine is connected to the GRC block and a DMA
17162          *   reset may affect the GRC block in some unpredictable way...
17163          *   The behavior of resets to individual blocks has not been tested.
17164          *
17165          * Broadcom noted the GRC reset will also reset all sub-components.
17166          */
17167         if (to_device) {
17168                 test_desc.cqid_sqid = (13 << 8) | 2;
17169
17170                 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
17171                 udelay(40);
17172         } else {
17173                 test_desc.cqid_sqid = (16 << 8) | 7;
17174
17175                 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
17176                 udelay(40);
17177         }
17178         test_desc.flags = 0x00000005;
17179
17180         for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
17181                 u32 val;
17182
17183                 val = *(((u32 *)&test_desc) + i);
17184                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
17185                                        sram_dma_descs + (i * sizeof(u32)));
17186                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
17187         }
17188         pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
17189
17190         if (to_device)
17191                 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
17192         else
17193                 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
17194
17195         ret = -ENODEV;
17196         for (i = 0; i < 40; i++) {
17197                 u32 val;
17198
17199                 if (to_device)
17200                         val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
17201                 else
17202                         val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
17203                 if ((val & 0xffff) == sram_dma_descs) {
17204                         ret = 0;
17205                         break;
17206                 }
17207
17208                 udelay(100);
17209         }
17210
17211         return ret;
17212 }
17213
17214 #define TEST_BUFFER_SIZE        0x2000
17215
17216 static const struct pci_device_id tg3_dma_wait_state_chipsets[] = {
17217         { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
17218         { },
17219 };
17220
17221 static int tg3_test_dma(struct tg3 *tp)
17222 {
17223         dma_addr_t buf_dma;
17224         u32 *buf, saved_dma_rwctrl;
17225         int ret = 0;
17226
17227         buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
17228                                  &buf_dma, GFP_KERNEL);
17229         if (!buf) {
17230                 ret = -ENOMEM;
17231                 goto out_nofree;
17232         }
17233
17234         tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
17235                           (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
17236
17237         tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
17238
17239         if (tg3_flag(tp, 57765_PLUS))
17240                 goto out;
17241
17242         if (tg3_flag(tp, PCI_EXPRESS)) {
17243                 /* DMA read watermark not used on PCIE */
17244                 tp->dma_rwctrl |= 0x00180000;
17245         } else if (!tg3_flag(tp, PCIX_MODE)) {
17246                 if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
17247                     tg3_asic_rev(tp) == ASIC_REV_5750)
17248                         tp->dma_rwctrl |= 0x003f0000;
17249                 else
17250                         tp->dma_rwctrl |= 0x003f000f;
17251         } else {
17252                 if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17253                     tg3_asic_rev(tp) == ASIC_REV_5704) {
17254                         u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
17255                         u32 read_water = 0x7;
17256
17257                         /* If the 5704 is behind the EPB bridge, we can
17258                          * do the less restrictive ONE_DMA workaround for
17259                          * better performance.
17260                          */
17261                         if (tg3_flag(tp, 40BIT_DMA_BUG) &&
17262                             tg3_asic_rev(tp) == ASIC_REV_5704)
17263                                 tp->dma_rwctrl |= 0x8000;
17264                         else if (ccval == 0x6 || ccval == 0x7)
17265                                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17266
17267                         if (tg3_asic_rev(tp) == ASIC_REV_5703)
17268                                 read_water = 4;
17269                         /* Set bit 23 to enable PCIX hw bug fix */
17270                         tp->dma_rwctrl |=
17271                                 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
17272                                 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
17273                                 (1 << 23);
17274                 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) {
17275                         /* 5780 always in PCIX mode */
17276                         tp->dma_rwctrl |= 0x00144000;
17277                 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) {
17278                         /* 5714 always in PCIX mode */
17279                         tp->dma_rwctrl |= 0x00148000;
17280                 } else {
17281                         tp->dma_rwctrl |= 0x001b000f;
17282                 }
17283         }
17284         if (tg3_flag(tp, ONE_DMA_AT_ONCE))
17285                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17286
17287         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17288             tg3_asic_rev(tp) == ASIC_REV_5704)
17289                 tp->dma_rwctrl &= 0xfffffff0;
17290
17291         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
17292             tg3_asic_rev(tp) == ASIC_REV_5701) {
17293                 /* Remove this if it causes problems for some boards. */
17294                 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
17295
17296                 /* On 5700/5701 chips, we need to set this bit.
17297                  * Otherwise the chip will issue cacheline transactions
17298                  * to streamable DMA memory with not all the byte
17299                  * enables turned on.  This is an error on several
17300                  * RISC PCI controllers, in particular sparc64.
17301                  *
17302                  * On 5703/5704 chips, this bit has been reassigned
17303                  * a different meaning.  In particular, it is used
17304                  * on those chips to enable a PCI-X workaround.
17305                  */
17306                 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
17307         }
17308
17309         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17310
17311
17312         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17313             tg3_asic_rev(tp) != ASIC_REV_5701)
17314                 goto out;
17315
17316         /* It is best to perform DMA test with maximum write burst size
17317          * to expose the 5700/5701 write DMA bug.
17318          */
17319         saved_dma_rwctrl = tp->dma_rwctrl;
17320         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17321         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17322
17323         while (1) {
17324                 u32 *p = buf, i;
17325
17326                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
17327                         p[i] = i;
17328
17329                 /* Send the buffer to the chip. */
17330                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true);
17331                 if (ret) {
17332                         dev_err(&tp->pdev->dev,
17333                                 "%s: Buffer write failed. err = %d\n",
17334                                 __func__, ret);
17335                         break;
17336                 }
17337
17338                 /* Now read it back. */
17339                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false);
17340                 if (ret) {
17341                         dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
17342                                 "err = %d\n", __func__, ret);
17343                         break;
17344                 }
17345
17346                 /* Verify it. */
17347                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
17348                         if (p[i] == i)
17349                                 continue;
17350
17351                         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17352                             DMA_RWCTRL_WRITE_BNDRY_16) {
17353                                 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17354                                 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17355                                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17356                                 break;
17357                         } else {
17358                                 dev_err(&tp->pdev->dev,
17359                                         "%s: Buffer corrupted on read back! "
17360                                         "(%d != %d)\n", __func__, p[i], i);
17361                                 ret = -ENODEV;
17362                                 goto out;
17363                         }
17364                 }
17365
17366                 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
17367                         /* Success. */
17368                         ret = 0;
17369                         break;
17370                 }
17371         }
17372         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17373             DMA_RWCTRL_WRITE_BNDRY_16) {
17374                 /* DMA test passed without adjusting DMA boundary,
17375                  * now look for chipsets that are known to expose the
17376                  * DMA bug without failing the test.
17377                  */
17378                 if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
17379                         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17380                         tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17381                 } else {
17382                         /* Safe to use the calculated DMA boundary. */
17383                         tp->dma_rwctrl = saved_dma_rwctrl;
17384                 }
17385
17386                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17387         }
17388
17389 out:
17390         dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
17391 out_nofree:
17392         return ret;
17393 }
17394
17395 static void tg3_init_bufmgr_config(struct tg3 *tp)
17396 {
17397         if (tg3_flag(tp, 57765_PLUS)) {
17398                 tp->bufmgr_config.mbuf_read_dma_low_water =
17399                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17400                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17401                         DEFAULT_MB_MACRX_LOW_WATER_57765;
17402                 tp->bufmgr_config.mbuf_high_water =
17403                         DEFAULT_MB_HIGH_WATER_57765;
17404
17405                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17406                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17407                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17408                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
17409                 tp->bufmgr_config.mbuf_high_water_jumbo =
17410                         DEFAULT_MB_HIGH_WATER_JUMBO_57765;
17411         } else if (tg3_flag(tp, 5705_PLUS)) {
17412                 tp->bufmgr_config.mbuf_read_dma_low_water =
17413                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17414                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17415                         DEFAULT_MB_MACRX_LOW_WATER_5705;
17416                 tp->bufmgr_config.mbuf_high_water =
17417                         DEFAULT_MB_HIGH_WATER_5705;
17418                 if (tg3_asic_rev(tp) == ASIC_REV_5906) {
17419                         tp->bufmgr_config.mbuf_mac_rx_low_water =
17420                                 DEFAULT_MB_MACRX_LOW_WATER_5906;
17421                         tp->bufmgr_config.mbuf_high_water =
17422                                 DEFAULT_MB_HIGH_WATER_5906;
17423                 }
17424
17425                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17426                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
17427                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17428                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
17429                 tp->bufmgr_config.mbuf_high_water_jumbo =
17430                         DEFAULT_MB_HIGH_WATER_JUMBO_5780;
17431         } else {
17432                 tp->bufmgr_config.mbuf_read_dma_low_water =
17433                         DEFAULT_MB_RDMA_LOW_WATER;
17434                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17435                         DEFAULT_MB_MACRX_LOW_WATER;
17436                 tp->bufmgr_config.mbuf_high_water =
17437                         DEFAULT_MB_HIGH_WATER;
17438
17439                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17440                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
17441                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17442                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
17443                 tp->bufmgr_config.mbuf_high_water_jumbo =
17444                         DEFAULT_MB_HIGH_WATER_JUMBO;
17445         }
17446
17447         tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
17448         tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
17449 }
17450
17451 static char *tg3_phy_string(struct tg3 *tp)
17452 {
17453         switch (tp->phy_id & TG3_PHY_ID_MASK) {
17454         case TG3_PHY_ID_BCM5400:        return "5400";
17455         case TG3_PHY_ID_BCM5401:        return "5401";
17456         case TG3_PHY_ID_BCM5411:        return "5411";
17457         case TG3_PHY_ID_BCM5701:        return "5701";
17458         case TG3_PHY_ID_BCM5703:        return "5703";
17459         case TG3_PHY_ID_BCM5704:        return "5704";
17460         case TG3_PHY_ID_BCM5705:        return "5705";
17461         case TG3_PHY_ID_BCM5750:        return "5750";
17462         case TG3_PHY_ID_BCM5752:        return "5752";
17463         case TG3_PHY_ID_BCM5714:        return "5714";
17464         case TG3_PHY_ID_BCM5780:        return "5780";
17465         case TG3_PHY_ID_BCM5755:        return "5755";
17466         case TG3_PHY_ID_BCM5787:        return "5787";
17467         case TG3_PHY_ID_BCM5784:        return "5784";
17468         case TG3_PHY_ID_BCM5756:        return "5722/5756";
17469         case TG3_PHY_ID_BCM5906:        return "5906";
17470         case TG3_PHY_ID_BCM5761:        return "5761";
17471         case TG3_PHY_ID_BCM5718C:       return "5718C";
17472         case TG3_PHY_ID_BCM5718S:       return "5718S";
17473         case TG3_PHY_ID_BCM57765:       return "57765";
17474         case TG3_PHY_ID_BCM5719C:       return "5719C";
17475         case TG3_PHY_ID_BCM5720C:       return "5720C";
17476         case TG3_PHY_ID_BCM5762:        return "5762C";
17477         case TG3_PHY_ID_BCM8002:        return "8002/serdes";
17478         case 0:                 return "serdes";
17479         default:                return "unknown";
17480         }
17481 }
17482
17483 static char *tg3_bus_string(struct tg3 *tp, char *str)
17484 {
17485         if (tg3_flag(tp, PCI_EXPRESS)) {
17486                 strcpy(str, "PCI Express");
17487                 return str;
17488         } else if (tg3_flag(tp, PCIX_MODE)) {
17489                 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
17490
17491                 strcpy(str, "PCIX:");
17492
17493                 if ((clock_ctrl == 7) ||
17494                     ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
17495                      GRC_MISC_CFG_BOARD_ID_5704CIOBE))
17496                         strcat(str, "133MHz");
17497                 else if (clock_ctrl == 0)
17498                         strcat(str, "33MHz");
17499                 else if (clock_ctrl == 2)
17500                         strcat(str, "50MHz");
17501                 else if (clock_ctrl == 4)
17502                         strcat(str, "66MHz");
17503                 else if (clock_ctrl == 6)
17504                         strcat(str, "100MHz");
17505         } else {
17506                 strcpy(str, "PCI:");
17507                 if (tg3_flag(tp, PCI_HIGH_SPEED))
17508                         strcat(str, "66MHz");
17509                 else
17510                         strcat(str, "33MHz");
17511         }
17512         if (tg3_flag(tp, PCI_32BIT))
17513                 strcat(str, ":32-bit");
17514         else
17515                 strcat(str, ":64-bit");
17516         return str;
17517 }
17518
17519 static void tg3_init_coal(struct tg3 *tp)
17520 {
17521         struct ethtool_coalesce *ec = &tp->coal;
17522
17523         memset(ec, 0, sizeof(*ec));
17524         ec->cmd = ETHTOOL_GCOALESCE;
17525         ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
17526         ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
17527         ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
17528         ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
17529         ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
17530         ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
17531         ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
17532         ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
17533         ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
17534
17535         if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
17536                                  HOSTCC_MODE_CLRTICK_TXBD)) {
17537                 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
17538                 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
17539                 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
17540                 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
17541         }
17542
17543         if (tg3_flag(tp, 5705_PLUS)) {
17544                 ec->rx_coalesce_usecs_irq = 0;
17545                 ec->tx_coalesce_usecs_irq = 0;
17546                 ec->stats_block_coalesce_usecs = 0;
17547         }
17548 }
17549
17550 static int tg3_init_one(struct pci_dev *pdev,
17551                                   const struct pci_device_id *ent)
17552 {
17553         struct net_device *dev;
17554         struct tg3 *tp;
17555         int i, err;
17556         u32 sndmbx, rcvmbx, intmbx;
17557         char str[40];
17558         u64 dma_mask, persist_dma_mask;
17559         netdev_features_t features = 0;
17560         u8 addr[ETH_ALEN] __aligned(2);
17561
17562         err = pci_enable_device(pdev);
17563         if (err) {
17564                 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
17565                 return err;
17566         }
17567
17568         err = pci_request_regions(pdev, DRV_MODULE_NAME);
17569         if (err) {
17570                 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
17571                 goto err_out_disable_pdev;
17572         }
17573
17574         pci_set_master(pdev);
17575
17576         dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
17577         if (!dev) {
17578                 err = -ENOMEM;
17579                 goto err_out_free_res;
17580         }
17581
17582         SET_NETDEV_DEV(dev, &pdev->dev);
17583
17584         tp = netdev_priv(dev);
17585         tp->pdev = pdev;
17586         tp->dev = dev;
17587         tp->rx_mode = TG3_DEF_RX_MODE;
17588         tp->tx_mode = TG3_DEF_TX_MODE;
17589         tp->irq_sync = 1;
17590         tp->pcierr_recovery = false;
17591
17592         if (tg3_debug > 0)
17593                 tp->msg_enable = tg3_debug;
17594         else
17595                 tp->msg_enable = TG3_DEF_MSG_ENABLE;
17596
17597         if (pdev_is_ssb_gige_core(pdev)) {
17598                 tg3_flag_set(tp, IS_SSB_CORE);
17599                 if (ssb_gige_must_flush_posted_writes(pdev))
17600                         tg3_flag_set(tp, FLUSH_POSTED_WRITES);
17601                 if (ssb_gige_one_dma_at_once(pdev))
17602                         tg3_flag_set(tp, ONE_DMA_AT_ONCE);
17603                 if (ssb_gige_have_roboswitch(pdev)) {
17604                         tg3_flag_set(tp, USE_PHYLIB);
17605                         tg3_flag_set(tp, ROBOSWITCH);
17606                 }
17607                 if (ssb_gige_is_rgmii(pdev))
17608                         tg3_flag_set(tp, RGMII_MODE);
17609         }
17610
17611         /* The word/byte swap controls here control register access byte
17612          * swapping.  DMA data byte swapping is controlled in the GRC_MODE
17613          * setting below.
17614          */
17615         tp->misc_host_ctrl =
17616                 MISC_HOST_CTRL_MASK_PCI_INT |
17617                 MISC_HOST_CTRL_WORD_SWAP |
17618                 MISC_HOST_CTRL_INDIR_ACCESS |
17619                 MISC_HOST_CTRL_PCISTATE_RW;
17620
17621         /* The NONFRM (non-frame) byte/word swap controls take effect
17622          * on descriptor entries, anything which isn't packet data.
17623          *
17624          * The StrongARM chips on the board (one for tx, one for rx)
17625          * are running in big-endian mode.
17626          */
17627         tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
17628                         GRC_MODE_WSWAP_NONFRM_DATA);
17629 #ifdef __BIG_ENDIAN
17630         tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
17631 #endif
17632         spin_lock_init(&tp->lock);
17633         spin_lock_init(&tp->indirect_lock);
17634         INIT_WORK(&tp->reset_task, tg3_reset_task);
17635
17636         tp->regs = pci_ioremap_bar(pdev, BAR_0);
17637         if (!tp->regs) {
17638                 dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
17639                 err = -ENOMEM;
17640                 goto err_out_free_dev;
17641         }
17642
17643         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
17644             tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
17645             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
17646             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
17647             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
17648             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
17649             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
17650             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
17651             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
17652             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
17653             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
17654             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
17655             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
17656             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
17657             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) {
17658                 tg3_flag_set(tp, ENABLE_APE);
17659                 tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
17660                 if (!tp->aperegs) {
17661                         dev_err(&pdev->dev,
17662                                 "Cannot map APE registers, aborting\n");
17663                         err = -ENOMEM;
17664                         goto err_out_iounmap;
17665                 }
17666         }
17667
17668         tp->rx_pending = TG3_DEF_RX_RING_PENDING;
17669         tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
17670
17671         dev->ethtool_ops = &tg3_ethtool_ops;
17672         dev->watchdog_timeo = TG3_TX_TIMEOUT;
17673         dev->netdev_ops = &tg3_netdev_ops;
17674         dev->irq = pdev->irq;
17675
17676         err = tg3_get_invariants(tp, ent);
17677         if (err) {
17678                 dev_err(&pdev->dev,
17679                         "Problem fetching invariants of chip, aborting\n");
17680                 goto err_out_apeunmap;
17681         }
17682
17683         /* The EPB bridge inside 5714, 5715, and 5780 and any
17684          * device behind the EPB cannot support DMA addresses > 40-bit.
17685          * On 64-bit systems with IOMMU, use 40-bit dma_mask.
17686          * On 64-bit systems without IOMMU, use 64-bit dma_mask and
17687          * do DMA address check in tg3_start_xmit().
17688          */
17689         if (tg3_flag(tp, IS_5788))
17690                 persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
17691         else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
17692                 persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
17693 #ifdef CONFIG_HIGHMEM
17694                 dma_mask = DMA_BIT_MASK(64);
17695 #endif
17696         } else
17697                 persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
17698
17699         /* Configure DMA attributes. */
17700         if (dma_mask > DMA_BIT_MASK(32)) {
17701                 err = dma_set_mask(&pdev->dev, dma_mask);
17702                 if (!err) {
17703                         features |= NETIF_F_HIGHDMA;
17704                         err = dma_set_coherent_mask(&pdev->dev,
17705                                                     persist_dma_mask);
17706                         if (err < 0) {
17707                                 dev_err(&pdev->dev, "Unable to obtain 64 bit "
17708                                         "DMA for consistent allocations\n");
17709                                 goto err_out_apeunmap;
17710                         }
17711                 }
17712         }
17713         if (err || dma_mask == DMA_BIT_MASK(32)) {
17714                 err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
17715                 if (err) {
17716                         dev_err(&pdev->dev,
17717                                 "No usable DMA configuration, aborting\n");
17718                         goto err_out_apeunmap;
17719                 }
17720         }
17721
17722         tg3_init_bufmgr_config(tp);
17723
17724         /* 5700 B0 chips do not support checksumming correctly due
17725          * to hardware bugs.
17726          */
17727         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) {
17728                 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
17729
17730                 if (tg3_flag(tp, 5755_PLUS))
17731                         features |= NETIF_F_IPV6_CSUM;
17732         }
17733
17734         /* TSO is on by default on chips that support hardware TSO.
17735          * Firmware TSO on older chips gives lower performance, so it
17736          * is off by default, but can be enabled using ethtool.
17737          */
17738         if ((tg3_flag(tp, HW_TSO_1) ||
17739              tg3_flag(tp, HW_TSO_2) ||
17740              tg3_flag(tp, HW_TSO_3)) &&
17741             (features & NETIF_F_IP_CSUM))
17742                 features |= NETIF_F_TSO;
17743         if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
17744                 if (features & NETIF_F_IPV6_CSUM)
17745                         features |= NETIF_F_TSO6;
17746                 if (tg3_flag(tp, HW_TSO_3) ||
17747                     tg3_asic_rev(tp) == ASIC_REV_5761 ||
17748                     (tg3_asic_rev(tp) == ASIC_REV_5784 &&
17749                      tg3_chip_rev(tp) != CHIPREV_5784_AX) ||
17750                     tg3_asic_rev(tp) == ASIC_REV_5785 ||
17751                     tg3_asic_rev(tp) == ASIC_REV_57780)
17752                         features |= NETIF_F_TSO_ECN;
17753         }
17754
17755         dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX |
17756                          NETIF_F_HW_VLAN_CTAG_RX;
17757         dev->vlan_features |= features;
17758
17759         /*
17760          * Add loopback capability only for a subset of devices that support
17761          * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
17762          * loopback for the remaining devices.
17763          */
17764         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
17765             !tg3_flag(tp, CPMU_PRESENT))
17766                 /* Add the loopback capability */
17767                 features |= NETIF_F_LOOPBACK;
17768
17769         dev->hw_features |= features;
17770         dev->priv_flags |= IFF_UNICAST_FLT;
17771
17772         /* MTU range: 60 - 9000 or 1500, depending on hardware */
17773         dev->min_mtu = TG3_MIN_MTU;
17774         dev->max_mtu = TG3_MAX_MTU(tp);
17775
17776         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 &&
17777             !tg3_flag(tp, TSO_CAPABLE) &&
17778             !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
17779                 tg3_flag_set(tp, MAX_RXPEND_64);
17780                 tp->rx_pending = 63;
17781         }
17782
17783         err = tg3_get_device_address(tp, addr);
17784         if (err) {
17785                 dev_err(&pdev->dev,
17786                         "Could not obtain valid ethernet address, aborting\n");
17787                 goto err_out_apeunmap;
17788         }
17789         eth_hw_addr_set(dev, addr);
17790
17791         intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
17792         rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
17793         sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
17794         for (i = 0; i < tp->irq_max; i++) {
17795                 struct tg3_napi *tnapi = &tp->napi[i];
17796
17797                 tnapi->tp = tp;
17798                 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
17799
17800                 tnapi->int_mbox = intmbx;
17801                 if (i <= 4)
17802                         intmbx += 0x8;
17803                 else
17804                         intmbx += 0x4;
17805
17806                 tnapi->consmbox = rcvmbx;
17807                 tnapi->prodmbox = sndmbx;
17808
17809                 if (i)
17810                         tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
17811                 else
17812                         tnapi->coal_now = HOSTCC_MODE_NOW;
17813
17814                 if (!tg3_flag(tp, SUPPORT_MSIX))
17815                         break;
17816
17817                 /*
17818                  * If we support MSIX, we'll be using RSS.  If we're using
17819                  * RSS, the first vector only handles link interrupts and the
17820                  * remaining vectors handle rx and tx interrupts.  Reuse the
17821                  * mailbox values for the next iteration.  The values we setup
17822                  * above are still useful for the single vectored mode.
17823                  */
17824                 if (!i)
17825                         continue;
17826
17827                 rcvmbx += 0x8;
17828
17829                 if (sndmbx & 0x4)
17830                         sndmbx -= 0x4;
17831                 else
17832                         sndmbx += 0xc;
17833         }
17834
17835         /*
17836          * Reset chip in case UNDI or EFI driver did not shutdown
17837          * DMA self test will enable WDMAC and we'll see (spurious)
17838          * pending DMA on the PCI bus at that point.
17839          */
17840         if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
17841             (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
17842                 tg3_full_lock(tp, 0);
17843                 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
17844                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17845                 tg3_full_unlock(tp);
17846         }
17847
17848         err = tg3_test_dma(tp);
17849         if (err) {
17850                 dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
17851                 goto err_out_apeunmap;
17852         }
17853
17854         tg3_init_coal(tp);
17855
17856         pci_set_drvdata(pdev, dev);
17857
17858         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
17859             tg3_asic_rev(tp) == ASIC_REV_5720 ||
17860             tg3_asic_rev(tp) == ASIC_REV_5762)
17861                 tg3_flag_set(tp, PTP_CAPABLE);
17862
17863         tg3_timer_init(tp);
17864
17865         tg3_carrier_off(tp);
17866
17867         err = register_netdev(dev);
17868         if (err) {
17869                 dev_err(&pdev->dev, "Cannot register net device, aborting\n");
17870                 goto err_out_apeunmap;
17871         }
17872
17873         if (tg3_flag(tp, PTP_CAPABLE)) {
17874                 tg3_ptp_init(tp);
17875                 tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
17876                                                    &tp->pdev->dev);
17877                 if (IS_ERR(tp->ptp_clock))
17878                         tp->ptp_clock = NULL;
17879         }
17880
17881         netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
17882                     tp->board_part_number,
17883                     tg3_chip_rev_id(tp),
17884                     tg3_bus_string(tp, str),
17885                     dev->dev_addr);
17886
17887         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) {
17888                 char *ethtype;
17889
17890                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
17891                         ethtype = "10/100Base-TX";
17892                 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
17893                         ethtype = "1000Base-SX";
17894                 else
17895                         ethtype = "10/100/1000Base-T";
17896
17897                 netdev_info(dev, "attached PHY is %s (%s Ethernet) "
17898                             "(WireSpeed[%d], EEE[%d])\n",
17899                             tg3_phy_string(tp), ethtype,
17900                             (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
17901                             (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
17902         }
17903
17904         netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
17905                     (dev->features & NETIF_F_RXCSUM) != 0,
17906                     tg3_flag(tp, USE_LINKCHG_REG) != 0,
17907                     (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
17908                     tg3_flag(tp, ENABLE_ASF) != 0,
17909                     tg3_flag(tp, TSO_CAPABLE) != 0);
17910         netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
17911                     tp->dma_rwctrl,
17912                     pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
17913                     ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
17914
17915         pci_save_state(pdev);
17916
17917         return 0;
17918
17919 err_out_apeunmap:
17920         if (tp->aperegs) {
17921                 iounmap(tp->aperegs);
17922                 tp->aperegs = NULL;
17923         }
17924
17925 err_out_iounmap:
17926         if (tp->regs) {
17927                 iounmap(tp->regs);
17928                 tp->regs = NULL;
17929         }
17930
17931 err_out_free_dev:
17932         free_netdev(dev);
17933
17934 err_out_free_res:
17935         pci_release_regions(pdev);
17936
17937 err_out_disable_pdev:
17938         if (pci_is_enabled(pdev))
17939                 pci_disable_device(pdev);
17940         return err;
17941 }
17942
17943 static void tg3_remove_one(struct pci_dev *pdev)
17944 {
17945         struct net_device *dev = pci_get_drvdata(pdev);
17946
17947         if (dev) {
17948                 struct tg3 *tp = netdev_priv(dev);
17949
17950                 tg3_ptp_fini(tp);
17951
17952                 release_firmware(tp->fw);
17953
17954                 tg3_reset_task_cancel(tp);
17955
17956                 if (tg3_flag(tp, USE_PHYLIB)) {
17957                         tg3_phy_fini(tp);
17958                         tg3_mdio_fini(tp);
17959                 }
17960
17961                 unregister_netdev(dev);
17962                 if (tp->aperegs) {
17963                         iounmap(tp->aperegs);
17964                         tp->aperegs = NULL;
17965                 }
17966                 if (tp->regs) {
17967                         iounmap(tp->regs);
17968                         tp->regs = NULL;
17969                 }
17970                 free_netdev(dev);
17971                 pci_release_regions(pdev);
17972                 pci_disable_device(pdev);
17973         }
17974 }
17975
17976 #ifdef CONFIG_PM_SLEEP
17977 static int tg3_suspend(struct device *device)
17978 {
17979         struct net_device *dev = dev_get_drvdata(device);
17980         struct tg3 *tp = netdev_priv(dev);
17981         int err = 0;
17982
17983         rtnl_lock();
17984
17985         if (!netif_running(dev))
17986                 goto unlock;
17987
17988         tg3_reset_task_cancel(tp);
17989         tg3_phy_stop(tp);
17990         tg3_netif_stop(tp);
17991
17992         tg3_timer_stop(tp);
17993
17994         tg3_full_lock(tp, 1);
17995         tg3_disable_ints(tp);
17996         tg3_full_unlock(tp);
17997
17998         netif_device_detach(dev);
17999
18000         tg3_full_lock(tp, 0);
18001         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
18002         tg3_flag_clear(tp, INIT_COMPLETE);
18003         tg3_full_unlock(tp);
18004
18005         err = tg3_power_down_prepare(tp);
18006         if (err) {
18007                 int err2;
18008
18009                 tg3_full_lock(tp, 0);
18010
18011                 tg3_flag_set(tp, INIT_COMPLETE);
18012                 err2 = tg3_restart_hw(tp, true);
18013                 if (err2)
18014                         goto out;
18015
18016                 tg3_timer_start(tp);
18017
18018                 netif_device_attach(dev);
18019                 tg3_netif_start(tp);
18020
18021 out:
18022                 tg3_full_unlock(tp);
18023
18024                 if (!err2)
18025                         tg3_phy_start(tp);
18026         }
18027
18028 unlock:
18029         rtnl_unlock();
18030         return err;
18031 }
18032
18033 static int tg3_resume(struct device *device)
18034 {
18035         struct net_device *dev = dev_get_drvdata(device);
18036         struct tg3 *tp = netdev_priv(dev);
18037         int err = 0;
18038
18039         rtnl_lock();
18040
18041         if (!netif_running(dev))
18042                 goto unlock;
18043
18044         netif_device_attach(dev);
18045
18046         tg3_full_lock(tp, 0);
18047
18048         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18049
18050         tg3_flag_set(tp, INIT_COMPLETE);
18051         err = tg3_restart_hw(tp,
18052                              !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
18053         if (err)
18054                 goto out;
18055
18056         tg3_timer_start(tp);
18057
18058         tg3_netif_start(tp);
18059
18060 out:
18061         tg3_full_unlock(tp);
18062
18063         if (!err)
18064                 tg3_phy_start(tp);
18065
18066 unlock:
18067         rtnl_unlock();
18068         return err;
18069 }
18070 #endif /* CONFIG_PM_SLEEP */
18071
18072 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
18073
18074 static void tg3_shutdown(struct pci_dev *pdev)
18075 {
18076         struct net_device *dev = pci_get_drvdata(pdev);
18077         struct tg3 *tp = netdev_priv(dev);
18078
18079         rtnl_lock();
18080         netif_device_detach(dev);
18081
18082         if (netif_running(dev))
18083                 dev_close(dev);
18084
18085         if (system_state == SYSTEM_POWER_OFF)
18086                 tg3_power_down(tp);
18087
18088         rtnl_unlock();
18089 }
18090
18091 /**
18092  * tg3_io_error_detected - called when PCI error is detected
18093  * @pdev: Pointer to PCI device
18094  * @state: The current pci connection state
18095  *
18096  * This function is called after a PCI bus error affecting
18097  * this device has been detected.
18098  */
18099 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
18100                                               pci_channel_state_t state)
18101 {
18102         struct net_device *netdev = pci_get_drvdata(pdev);
18103         struct tg3 *tp = netdev_priv(netdev);
18104         pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
18105
18106         netdev_info(netdev, "PCI I/O error detected\n");
18107
18108         rtnl_lock();
18109
18110         /* Could be second call or maybe we don't have netdev yet */
18111         if (!netdev || tp->pcierr_recovery || !netif_running(netdev))
18112                 goto done;
18113
18114         /* We needn't recover from permanent error */
18115         if (state == pci_channel_io_frozen)
18116                 tp->pcierr_recovery = true;
18117
18118         tg3_phy_stop(tp);
18119
18120         tg3_netif_stop(tp);
18121
18122         tg3_timer_stop(tp);
18123
18124         /* Want to make sure that the reset task doesn't run */
18125         tg3_reset_task_cancel(tp);
18126
18127         netif_device_detach(netdev);
18128
18129         /* Clean up software state, even if MMIO is blocked */
18130         tg3_full_lock(tp, 0);
18131         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
18132         tg3_full_unlock(tp);
18133
18134 done:
18135         if (state == pci_channel_io_perm_failure) {
18136                 if (netdev) {
18137                         tg3_napi_enable(tp);
18138                         dev_close(netdev);
18139                 }
18140                 err = PCI_ERS_RESULT_DISCONNECT;
18141         } else {
18142                 pci_disable_device(pdev);
18143         }
18144
18145         rtnl_unlock();
18146
18147         return err;
18148 }
18149
18150 /**
18151  * tg3_io_slot_reset - called after the pci bus has been reset.
18152  * @pdev: Pointer to PCI device
18153  *
18154  * Restart the card from scratch, as if from a cold-boot.
18155  * At this point, the card has exprienced a hard reset,
18156  * followed by fixups by BIOS, and has its config space
18157  * set up identically to what it was at cold boot.
18158  */
18159 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
18160 {
18161         struct net_device *netdev = pci_get_drvdata(pdev);
18162         struct tg3 *tp = netdev_priv(netdev);
18163         pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
18164         int err;
18165
18166         rtnl_lock();
18167
18168         if (pci_enable_device(pdev)) {
18169                 dev_err(&pdev->dev,
18170                         "Cannot re-enable PCI device after reset.\n");
18171                 goto done;
18172         }
18173
18174         pci_set_master(pdev);
18175         pci_restore_state(pdev);
18176         pci_save_state(pdev);
18177
18178         if (!netdev || !netif_running(netdev)) {
18179                 rc = PCI_ERS_RESULT_RECOVERED;
18180                 goto done;
18181         }
18182
18183         err = tg3_power_up(tp);
18184         if (err)
18185                 goto done;
18186
18187         rc = PCI_ERS_RESULT_RECOVERED;
18188
18189 done:
18190         if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) {
18191                 tg3_napi_enable(tp);
18192                 dev_close(netdev);
18193         }
18194         rtnl_unlock();
18195
18196         return rc;
18197 }
18198
18199 /**
18200  * tg3_io_resume - called when traffic can start flowing again.
18201  * @pdev: Pointer to PCI device
18202  *
18203  * This callback is called when the error recovery driver tells
18204  * us that its OK to resume normal operation.
18205  */
18206 static void tg3_io_resume(struct pci_dev *pdev)
18207 {
18208         struct net_device *netdev = pci_get_drvdata(pdev);
18209         struct tg3 *tp = netdev_priv(netdev);
18210         int err;
18211
18212         rtnl_lock();
18213
18214         if (!netdev || !netif_running(netdev))
18215                 goto done;
18216
18217         tg3_full_lock(tp, 0);
18218         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18219         tg3_flag_set(tp, INIT_COMPLETE);
18220         err = tg3_restart_hw(tp, true);
18221         if (err) {
18222                 tg3_full_unlock(tp);
18223                 netdev_err(netdev, "Cannot restart hardware after reset.\n");
18224                 goto done;
18225         }
18226
18227         netif_device_attach(netdev);
18228
18229         tg3_timer_start(tp);
18230
18231         tg3_netif_start(tp);
18232
18233         tg3_full_unlock(tp);
18234
18235         tg3_phy_start(tp);
18236
18237 done:
18238         tp->pcierr_recovery = false;
18239         rtnl_unlock();
18240 }
18241
18242 static const struct pci_error_handlers tg3_err_handler = {
18243         .error_detected = tg3_io_error_detected,
18244         .slot_reset     = tg3_io_slot_reset,
18245         .resume         = tg3_io_resume
18246 };
18247
18248 static struct pci_driver tg3_driver = {
18249         .name           = DRV_MODULE_NAME,
18250         .id_table       = tg3_pci_tbl,
18251         .probe          = tg3_init_one,
18252         .remove         = tg3_remove_one,
18253         .err_handler    = &tg3_err_handler,
18254         .driver.pm      = &tg3_pm_ops,
18255         .shutdown       = tg3_shutdown,
18256 };
18257
18258 module_pci_driver(tg3_driver);