Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[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/gso.h>
61 #include <net/ip.h>
62
63 #include <linux/io.h>
64 #include <asm/byteorder.h>
65 #include <linux/uaccess.h>
66
67 #include <uapi/linux/net_tstamp.h>
68 #include <linux/ptp_clock_kernel.h>
69
70 #define BAR_0   0
71 #define BAR_2   2
72
73 #include "tg3.h"
74
75 /* Functions & macros to verify TG3_FLAGS types */
76
77 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
78 {
79         return test_bit(flag, bits);
80 }
81
82 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
83 {
84         set_bit(flag, bits);
85 }
86
87 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
88 {
89         clear_bit(flag, bits);
90 }
91
92 #define tg3_flag(tp, flag)                              \
93         _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
94 #define tg3_flag_set(tp, flag)                          \
95         _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
96 #define tg3_flag_clear(tp, flag)                        \
97         _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
98
99 #define DRV_MODULE_NAME         "tg3"
100 /* DO NOT UPDATE TG3_*_NUM defines */
101 #define TG3_MAJ_NUM                     3
102 #define TG3_MIN_NUM                     137
103
104 #define RESET_KIND_SHUTDOWN     0
105 #define RESET_KIND_INIT         1
106 #define RESET_KIND_SUSPEND      2
107
108 #define TG3_DEF_RX_MODE         0
109 #define TG3_DEF_TX_MODE         0
110 #define TG3_DEF_MSG_ENABLE        \
111         (NETIF_MSG_DRV          | \
112          NETIF_MSG_PROBE        | \
113          NETIF_MSG_LINK         | \
114          NETIF_MSG_TIMER        | \
115          NETIF_MSG_IFDOWN       | \
116          NETIF_MSG_IFUP         | \
117          NETIF_MSG_RX_ERR       | \
118          NETIF_MSG_TX_ERR)
119
120 #define TG3_GRC_LCLCTL_PWRSW_DELAY      100
121
122 /* length of time before we decide the hardware is borked,
123  * and dev->tx_timeout() should be called to fix the problem
124  */
125
126 #define TG3_TX_TIMEOUT                  (5 * HZ)
127
128 /* hardware minimum and maximum for a single frame's data payload */
129 #define TG3_MIN_MTU                     ETH_ZLEN
130 #define TG3_MAX_MTU(tp) \
131         (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
132
133 /* These numbers seem to be hard coded in the NIC firmware somehow.
134  * You can't change the ring sizes, but you can change where you place
135  * them in the NIC onboard memory.
136  */
137 #define TG3_RX_STD_RING_SIZE(tp) \
138         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
139          TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
140 #define TG3_DEF_RX_RING_PENDING         200
141 #define TG3_RX_JMB_RING_SIZE(tp) \
142         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
143          TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
144 #define TG3_DEF_RX_JUMBO_RING_PENDING   100
145
146 /* Do not place this n-ring entries value into the tp struct itself,
147  * we really want to expose these constants to GCC so that modulo et
148  * al.  operations are done with shifts and masks instead of with
149  * hw multiply/modulo instructions.  Another solution would be to
150  * replace things like '% foo' with '& (foo - 1)'.
151  */
152
153 #define TG3_TX_RING_SIZE                512
154 #define TG3_DEF_TX_RING_PENDING         (TG3_TX_RING_SIZE - 1)
155
156 #define TG3_RX_STD_RING_BYTES(tp) \
157         (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
158 #define TG3_RX_JMB_RING_BYTES(tp) \
159         (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
160 #define TG3_RX_RCB_RING_BYTES(tp) \
161         (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
162 #define TG3_TX_RING_BYTES       (sizeof(struct tg3_tx_buffer_desc) * \
163                                  TG3_TX_RING_SIZE)
164 #define NEXT_TX(N)              (((N) + 1) & (TG3_TX_RING_SIZE - 1))
165
166 #define TG3_DMA_BYTE_ENAB               64
167
168 #define TG3_RX_STD_DMA_SZ               1536
169 #define TG3_RX_JMB_DMA_SZ               9046
170
171 #define TG3_RX_DMA_TO_MAP_SZ(x)         ((x) + TG3_DMA_BYTE_ENAB)
172
173 #define TG3_RX_STD_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
174 #define TG3_RX_JMB_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
175
176 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
177         (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
178
179 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
180         (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
181
182 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
183  * that are at least dword aligned when used in PCIX mode.  The driver
184  * works around this bug by double copying the packet.  This workaround
185  * is built into the normal double copy length check for efficiency.
186  *
187  * However, the double copy is only necessary on those architectures
188  * where unaligned memory accesses are inefficient.  For those architectures
189  * where unaligned memory accesses incur little penalty, we can reintegrate
190  * the 5701 in the normal rx path.  Doing so saves a device structure
191  * dereference by hardcoding the double copy threshold in place.
192  */
193 #define TG3_RX_COPY_THRESHOLD           256
194 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
195         #define TG3_RX_COPY_THRESH(tp)  TG3_RX_COPY_THRESHOLD
196 #else
197         #define TG3_RX_COPY_THRESH(tp)  ((tp)->rx_copy_thresh)
198 #endif
199
200 #if (NET_IP_ALIGN != 0)
201 #define TG3_RX_OFFSET(tp)       ((tp)->rx_offset)
202 #else
203 #define TG3_RX_OFFSET(tp)       (NET_SKB_PAD)
204 #endif
205
206 /* minimum number of free TX descriptors required to wake up TX process */
207 #define TG3_TX_WAKEUP_THRESH(tnapi)             ((tnapi)->tx_pending / 4)
208 #define TG3_TX_BD_DMA_MAX_2K            2048
209 #define TG3_TX_BD_DMA_MAX_4K            4096
210
211 #define TG3_RAW_IP_ALIGN 2
212
213 #define TG3_MAX_UCAST_ADDR(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 3)
214 #define TG3_UCAST_ADDR_IDX(tp) (tg3_flag((tp), ENABLE_ASF) ? 2 : 1)
215
216 #define TG3_FW_UPDATE_TIMEOUT_SEC       5
217 #define TG3_FW_UPDATE_FREQ_SEC          (TG3_FW_UPDATE_TIMEOUT_SEC / 2)
218
219 #define FIRMWARE_TG3            "tigon/tg3.bin"
220 #define FIRMWARE_TG357766       "tigon/tg357766.bin"
221 #define FIRMWARE_TG3TSO         "tigon/tg3_tso.bin"
222 #define FIRMWARE_TG3TSO5        "tigon/tg3_tso5.bin"
223
224 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
225 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
226 MODULE_LICENSE("GPL");
227 MODULE_FIRMWARE(FIRMWARE_TG3);
228 MODULE_FIRMWARE(FIRMWARE_TG357766);
229 MODULE_FIRMWARE(FIRMWARE_TG3TSO);
230 MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
231
232 static int tg3_debug = -1;      /* -1 == use TG3_DEF_MSG_ENABLE as value */
233 module_param(tg3_debug, int, 0);
234 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
235
236 #define TG3_DRV_DATA_FLAG_10_100_ONLY   0x0001
237 #define TG3_DRV_DATA_FLAG_5705_10_100   0x0002
238
239 static const struct pci_device_id tg3_pci_tbl[] = {
240         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
241         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
242         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
243         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
244         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
245         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
246         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
247         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
248         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
249         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
250         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
251         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
252         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
253         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
254         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
255         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
256         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
257         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
258         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
259          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
260                         TG3_DRV_DATA_FLAG_5705_10_100},
261         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2),
262          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
263                         TG3_DRV_DATA_FLAG_5705_10_100},
264         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
265         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
266          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
267                         TG3_DRV_DATA_FLAG_5705_10_100},
268         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
269         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
270         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
271         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
272         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
273         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
274          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
275         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
276         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
277         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
278         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
279         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
280          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
281         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
282         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
283         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
284         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
285         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
286         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
287         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
288         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
289                         PCI_VENDOR_ID_LENOVO,
290                         TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
291          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
292         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
293         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
294          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
295         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
296         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
297         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
298         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
299         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
300         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
301         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
302         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
303         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
304         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
305         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
306         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
307         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
308         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
309         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
310         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
311         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
312         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
313         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
314                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
315          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
316         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
317                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
318          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
319         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
320         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
321         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
322          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
323         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
324         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
325         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
326         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
327         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
328         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
329         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
330         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
331         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
332          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
333         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
334          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
335         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
336         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
337         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
338         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
339         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)},
340         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)},
341         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)},
342         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)},
343         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)},
344         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)},
345         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
346         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},
347         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
348         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
349         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
350         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
351         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
352         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
353         {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
354         {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
355         {}
356 };
357
358 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
359
360 static const struct {
361         const char string[ETH_GSTRING_LEN];
362 } ethtool_stats_keys[] = {
363         { "rx_octets" },
364         { "rx_fragments" },
365         { "rx_ucast_packets" },
366         { "rx_mcast_packets" },
367         { "rx_bcast_packets" },
368         { "rx_fcs_errors" },
369         { "rx_align_errors" },
370         { "rx_xon_pause_rcvd" },
371         { "rx_xoff_pause_rcvd" },
372         { "rx_mac_ctrl_rcvd" },
373         { "rx_xoff_entered" },
374         { "rx_frame_too_long_errors" },
375         { "rx_jabbers" },
376         { "rx_undersize_packets" },
377         { "rx_in_length_errors" },
378         { "rx_out_length_errors" },
379         { "rx_64_or_less_octet_packets" },
380         { "rx_65_to_127_octet_packets" },
381         { "rx_128_to_255_octet_packets" },
382         { "rx_256_to_511_octet_packets" },
383         { "rx_512_to_1023_octet_packets" },
384         { "rx_1024_to_1522_octet_packets" },
385         { "rx_1523_to_2047_octet_packets" },
386         { "rx_2048_to_4095_octet_packets" },
387         { "rx_4096_to_8191_octet_packets" },
388         { "rx_8192_to_9022_octet_packets" },
389
390         { "tx_octets" },
391         { "tx_collisions" },
392
393         { "tx_xon_sent" },
394         { "tx_xoff_sent" },
395         { "tx_flow_control" },
396         { "tx_mac_errors" },
397         { "tx_single_collisions" },
398         { "tx_mult_collisions" },
399         { "tx_deferred" },
400         { "tx_excessive_collisions" },
401         { "tx_late_collisions" },
402         { "tx_collide_2times" },
403         { "tx_collide_3times" },
404         { "tx_collide_4times" },
405         { "tx_collide_5times" },
406         { "tx_collide_6times" },
407         { "tx_collide_7times" },
408         { "tx_collide_8times" },
409         { "tx_collide_9times" },
410         { "tx_collide_10times" },
411         { "tx_collide_11times" },
412         { "tx_collide_12times" },
413         { "tx_collide_13times" },
414         { "tx_collide_14times" },
415         { "tx_collide_15times" },
416         { "tx_ucast_packets" },
417         { "tx_mcast_packets" },
418         { "tx_bcast_packets" },
419         { "tx_carrier_sense_errors" },
420         { "tx_discards" },
421         { "tx_errors" },
422
423         { "dma_writeq_full" },
424         { "dma_write_prioq_full" },
425         { "rxbds_empty" },
426         { "rx_discards" },
427         { "rx_errors" },
428         { "rx_threshold_hit" },
429
430         { "dma_readq_full" },
431         { "dma_read_prioq_full" },
432         { "tx_comp_queue_full" },
433
434         { "ring_set_send_prod_index" },
435         { "ring_status_update" },
436         { "nic_irqs" },
437         { "nic_avoided_irqs" },
438         { "nic_tx_threshold_hit" },
439
440         { "mbuf_lwm_thresh_hit" },
441 };
442
443 #define TG3_NUM_STATS   ARRAY_SIZE(ethtool_stats_keys)
444 #define TG3_NVRAM_TEST          0
445 #define TG3_LINK_TEST           1
446 #define TG3_REGISTER_TEST       2
447 #define TG3_MEMORY_TEST         3
448 #define TG3_MAC_LOOPB_TEST      4
449 #define TG3_PHY_LOOPB_TEST      5
450 #define TG3_EXT_LOOPB_TEST      6
451 #define TG3_INTERRUPT_TEST      7
452
453
454 static const struct {
455         const char string[ETH_GSTRING_LEN];
456 } ethtool_test_keys[] = {
457         [TG3_NVRAM_TEST]        = { "nvram test        (online) " },
458         [TG3_LINK_TEST]         = { "link test         (online) " },
459         [TG3_REGISTER_TEST]     = { "register test     (offline)" },
460         [TG3_MEMORY_TEST]       = { "memory test       (offline)" },
461         [TG3_MAC_LOOPB_TEST]    = { "mac loopback test (offline)" },
462         [TG3_PHY_LOOPB_TEST]    = { "phy loopback test (offline)" },
463         [TG3_EXT_LOOPB_TEST]    = { "ext loopback test (offline)" },
464         [TG3_INTERRUPT_TEST]    = { "interrupt test    (offline)" },
465 };
466
467 #define TG3_NUM_TEST    ARRAY_SIZE(ethtool_test_keys)
468
469
470 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
471 {
472         writel(val, tp->regs + off);
473 }
474
475 static u32 tg3_read32(struct tg3 *tp, u32 off)
476 {
477         return readl(tp->regs + off);
478 }
479
480 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
481 {
482         writel(val, tp->aperegs + off);
483 }
484
485 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
486 {
487         return readl(tp->aperegs + off);
488 }
489
490 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
491 {
492         unsigned long flags;
493
494         spin_lock_irqsave(&tp->indirect_lock, flags);
495         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
496         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
497         spin_unlock_irqrestore(&tp->indirect_lock, flags);
498 }
499
500 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
501 {
502         writel(val, tp->regs + off);
503         readl(tp->regs + off);
504 }
505
506 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
507 {
508         unsigned long flags;
509         u32 val;
510
511         spin_lock_irqsave(&tp->indirect_lock, flags);
512         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
513         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
514         spin_unlock_irqrestore(&tp->indirect_lock, flags);
515         return val;
516 }
517
518 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
519 {
520         unsigned long flags;
521
522         if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
523                 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
524                                        TG3_64BIT_REG_LOW, val);
525                 return;
526         }
527         if (off == TG3_RX_STD_PROD_IDX_REG) {
528                 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
529                                        TG3_64BIT_REG_LOW, val);
530                 return;
531         }
532
533         spin_lock_irqsave(&tp->indirect_lock, flags);
534         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
535         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
536         spin_unlock_irqrestore(&tp->indirect_lock, flags);
537
538         /* In indirect mode when disabling interrupts, we also need
539          * to clear the interrupt bit in the GRC local ctrl register.
540          */
541         if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
542             (val == 0x1)) {
543                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
544                                        tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
545         }
546 }
547
548 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
549 {
550         unsigned long flags;
551         u32 val;
552
553         spin_lock_irqsave(&tp->indirect_lock, flags);
554         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
555         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
556         spin_unlock_irqrestore(&tp->indirect_lock, flags);
557         return val;
558 }
559
560 /* usec_wait specifies the wait time in usec when writing to certain registers
561  * where it is unsafe to read back the register without some delay.
562  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
563  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
564  */
565 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
566 {
567         if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
568                 /* Non-posted methods */
569                 tp->write32(tp, off, val);
570         else {
571                 /* Posted method */
572                 tg3_write32(tp, off, val);
573                 if (usec_wait)
574                         udelay(usec_wait);
575                 tp->read32(tp, off);
576         }
577         /* Wait again after the read for the posted method to guarantee that
578          * the wait time is met.
579          */
580         if (usec_wait)
581                 udelay(usec_wait);
582 }
583
584 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
585 {
586         tp->write32_mbox(tp, off, val);
587         if (tg3_flag(tp, FLUSH_POSTED_WRITES) ||
588             (!tg3_flag(tp, MBOX_WRITE_REORDER) &&
589              !tg3_flag(tp, ICH_WORKAROUND)))
590                 tp->read32_mbox(tp, off);
591 }
592
593 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
594 {
595         void __iomem *mbox = tp->regs + off;
596         writel(val, mbox);
597         if (tg3_flag(tp, TXD_MBOX_HWBUG))
598                 writel(val, mbox);
599         if (tg3_flag(tp, MBOX_WRITE_REORDER) ||
600             tg3_flag(tp, FLUSH_POSTED_WRITES))
601                 readl(mbox);
602 }
603
604 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
605 {
606         return readl(tp->regs + off + GRCMBOX_BASE);
607 }
608
609 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
610 {
611         writel(val, tp->regs + off + GRCMBOX_BASE);
612 }
613
614 #define tw32_mailbox(reg, val)          tp->write32_mbox(tp, reg, val)
615 #define tw32_mailbox_f(reg, val)        tw32_mailbox_flush(tp, (reg), (val))
616 #define tw32_rx_mbox(reg, val)          tp->write32_rx_mbox(tp, reg, val)
617 #define tw32_tx_mbox(reg, val)          tp->write32_tx_mbox(tp, reg, val)
618 #define tr32_mailbox(reg)               tp->read32_mbox(tp, reg)
619
620 #define tw32(reg, val)                  tp->write32(tp, reg, val)
621 #define tw32_f(reg, val)                _tw32_flush(tp, (reg), (val), 0)
622 #define tw32_wait_f(reg, val, us)       _tw32_flush(tp, (reg), (val), (us))
623 #define tr32(reg)                       tp->read32(tp, reg)
624
625 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
626 {
627         unsigned long flags;
628
629         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
630             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
631                 return;
632
633         spin_lock_irqsave(&tp->indirect_lock, flags);
634         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
635                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
636                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
637
638                 /* Always leave this as zero. */
639                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
640         } else {
641                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
642                 tw32_f(TG3PCI_MEM_WIN_DATA, val);
643
644                 /* Always leave this as zero. */
645                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
646         }
647         spin_unlock_irqrestore(&tp->indirect_lock, flags);
648 }
649
650 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
651 {
652         unsigned long flags;
653
654         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
655             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
656                 *val = 0;
657                 return;
658         }
659
660         spin_lock_irqsave(&tp->indirect_lock, flags);
661         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
662                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
663                 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
664
665                 /* Always leave this as zero. */
666                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
667         } else {
668                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
669                 *val = tr32(TG3PCI_MEM_WIN_DATA);
670
671                 /* Always leave this as zero. */
672                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
673         }
674         spin_unlock_irqrestore(&tp->indirect_lock, flags);
675 }
676
677 static void tg3_ape_lock_init(struct tg3 *tp)
678 {
679         int i;
680         u32 regbase, bit;
681
682         if (tg3_asic_rev(tp) == ASIC_REV_5761)
683                 regbase = TG3_APE_LOCK_GRANT;
684         else
685                 regbase = TG3_APE_PER_LOCK_GRANT;
686
687         /* Make sure the driver hasn't any stale locks. */
688         for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
689                 switch (i) {
690                 case TG3_APE_LOCK_PHY0:
691                 case TG3_APE_LOCK_PHY1:
692                 case TG3_APE_LOCK_PHY2:
693                 case TG3_APE_LOCK_PHY3:
694                         bit = APE_LOCK_GRANT_DRIVER;
695                         break;
696                 default:
697                         if (!tp->pci_fn)
698                                 bit = APE_LOCK_GRANT_DRIVER;
699                         else
700                                 bit = 1 << tp->pci_fn;
701                 }
702                 tg3_ape_write32(tp, regbase + 4 * i, bit);
703         }
704
705 }
706
707 static int tg3_ape_lock(struct tg3 *tp, int locknum)
708 {
709         int i, off;
710         int ret = 0;
711         u32 status, req, gnt, bit;
712
713         if (!tg3_flag(tp, ENABLE_APE))
714                 return 0;
715
716         switch (locknum) {
717         case TG3_APE_LOCK_GPIO:
718                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
719                         return 0;
720                 fallthrough;
721         case TG3_APE_LOCK_GRC:
722         case TG3_APE_LOCK_MEM:
723                 if (!tp->pci_fn)
724                         bit = APE_LOCK_REQ_DRIVER;
725                 else
726                         bit = 1 << tp->pci_fn;
727                 break;
728         case TG3_APE_LOCK_PHY0:
729         case TG3_APE_LOCK_PHY1:
730         case TG3_APE_LOCK_PHY2:
731         case TG3_APE_LOCK_PHY3:
732                 bit = APE_LOCK_REQ_DRIVER;
733                 break;
734         default:
735                 return -EINVAL;
736         }
737
738         if (tg3_asic_rev(tp) == ASIC_REV_5761) {
739                 req = TG3_APE_LOCK_REQ;
740                 gnt = TG3_APE_LOCK_GRANT;
741         } else {
742                 req = TG3_APE_PER_LOCK_REQ;
743                 gnt = TG3_APE_PER_LOCK_GRANT;
744         }
745
746         off = 4 * locknum;
747
748         tg3_ape_write32(tp, req + off, bit);
749
750         /* Wait for up to 1 millisecond to acquire lock. */
751         for (i = 0; i < 100; i++) {
752                 status = tg3_ape_read32(tp, gnt + off);
753                 if (status == bit)
754                         break;
755                 if (pci_channel_offline(tp->pdev))
756                         break;
757
758                 udelay(10);
759         }
760
761         if (status != bit) {
762                 /* Revoke the lock request. */
763                 tg3_ape_write32(tp, gnt + off, bit);
764                 ret = -EBUSY;
765         }
766
767         return ret;
768 }
769
770 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
771 {
772         u32 gnt, bit;
773
774         if (!tg3_flag(tp, ENABLE_APE))
775                 return;
776
777         switch (locknum) {
778         case TG3_APE_LOCK_GPIO:
779                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
780                         return;
781                 fallthrough;
782         case TG3_APE_LOCK_GRC:
783         case TG3_APE_LOCK_MEM:
784                 if (!tp->pci_fn)
785                         bit = APE_LOCK_GRANT_DRIVER;
786                 else
787                         bit = 1 << tp->pci_fn;
788                 break;
789         case TG3_APE_LOCK_PHY0:
790         case TG3_APE_LOCK_PHY1:
791         case TG3_APE_LOCK_PHY2:
792         case TG3_APE_LOCK_PHY3:
793                 bit = APE_LOCK_GRANT_DRIVER;
794                 break;
795         default:
796                 return;
797         }
798
799         if (tg3_asic_rev(tp) == ASIC_REV_5761)
800                 gnt = TG3_APE_LOCK_GRANT;
801         else
802                 gnt = TG3_APE_PER_LOCK_GRANT;
803
804         tg3_ape_write32(tp, gnt + 4 * locknum, bit);
805 }
806
807 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
808 {
809         u32 apedata;
810
811         while (timeout_us) {
812                 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
813                         return -EBUSY;
814
815                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
816                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
817                         break;
818
819                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
820
821                 udelay(10);
822                 timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
823         }
824
825         return timeout_us ? 0 : -EBUSY;
826 }
827
828 #ifdef CONFIG_TIGON3_HWMON
829 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
830 {
831         u32 i, apedata;
832
833         for (i = 0; i < timeout_us / 10; i++) {
834                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
835
836                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
837                         break;
838
839                 udelay(10);
840         }
841
842         return i == timeout_us / 10;
843 }
844
845 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
846                                    u32 len)
847 {
848         int err;
849         u32 i, bufoff, msgoff, maxlen, apedata;
850
851         if (!tg3_flag(tp, APE_HAS_NCSI))
852                 return 0;
853
854         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
855         if (apedata != APE_SEG_SIG_MAGIC)
856                 return -ENODEV;
857
858         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
859         if (!(apedata & APE_FW_STATUS_READY))
860                 return -EAGAIN;
861
862         bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
863                  TG3_APE_SHMEM_BASE;
864         msgoff = bufoff + 2 * sizeof(u32);
865         maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
866
867         while (len) {
868                 u32 length;
869
870                 /* Cap xfer sizes to scratchpad limits. */
871                 length = (len > maxlen) ? maxlen : len;
872                 len -= length;
873
874                 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
875                 if (!(apedata & APE_FW_STATUS_READY))
876                         return -EAGAIN;
877
878                 /* Wait for up to 1 msec for APE to service previous event. */
879                 err = tg3_ape_event_lock(tp, 1000);
880                 if (err)
881                         return err;
882
883                 apedata = APE_EVENT_STATUS_DRIVER_EVNT |
884                           APE_EVENT_STATUS_SCRTCHPD_READ |
885                           APE_EVENT_STATUS_EVENT_PENDING;
886                 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
887
888                 tg3_ape_write32(tp, bufoff, base_off);
889                 tg3_ape_write32(tp, bufoff + sizeof(u32), length);
890
891                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
892                 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
893
894                 base_off += length;
895
896                 if (tg3_ape_wait_for_event(tp, 30000))
897                         return -EAGAIN;
898
899                 for (i = 0; length; i += 4, length -= 4) {
900                         u32 val = tg3_ape_read32(tp, msgoff + i);
901                         memcpy(data, &val, sizeof(u32));
902                         data++;
903                 }
904         }
905
906         return 0;
907 }
908 #endif
909
910 static int tg3_ape_send_event(struct tg3 *tp, u32 event)
911 {
912         int err;
913         u32 apedata;
914
915         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
916         if (apedata != APE_SEG_SIG_MAGIC)
917                 return -EAGAIN;
918
919         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
920         if (!(apedata & APE_FW_STATUS_READY))
921                 return -EAGAIN;
922
923         /* Wait for up to 20 millisecond for APE to service previous event. */
924         err = tg3_ape_event_lock(tp, 20000);
925         if (err)
926                 return err;
927
928         tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
929                         event | APE_EVENT_STATUS_EVENT_PENDING);
930
931         tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
932         tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
933
934         return 0;
935 }
936
937 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
938 {
939         u32 event;
940         u32 apedata;
941
942         if (!tg3_flag(tp, ENABLE_APE))
943                 return;
944
945         switch (kind) {
946         case RESET_KIND_INIT:
947                 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
948                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
949                                 APE_HOST_SEG_SIG_MAGIC);
950                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
951                                 APE_HOST_SEG_LEN_MAGIC);
952                 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
953                 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
954                 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
955                         APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
956                 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
957                                 APE_HOST_BEHAV_NO_PHYLOCK);
958                 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
959                                     TG3_APE_HOST_DRVR_STATE_START);
960
961                 event = APE_EVENT_STATUS_STATE_START;
962                 break;
963         case RESET_KIND_SHUTDOWN:
964                 if (device_may_wakeup(&tp->pdev->dev) &&
965                     tg3_flag(tp, WOL_ENABLE)) {
966                         tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
967                                             TG3_APE_HOST_WOL_SPEED_AUTO);
968                         apedata = TG3_APE_HOST_DRVR_STATE_WOL;
969                 } else
970                         apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
971
972                 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
973
974                 event = APE_EVENT_STATUS_STATE_UNLOAD;
975                 break;
976         default:
977                 return;
978         }
979
980         event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
981
982         tg3_ape_send_event(tp, event);
983 }
984
985 static void tg3_send_ape_heartbeat(struct tg3 *tp,
986                                    unsigned long interval)
987 {
988         /* Check if hb interval has exceeded */
989         if (!tg3_flag(tp, ENABLE_APE) ||
990             time_before(jiffies, tp->ape_hb_jiffies + interval))
991                 return;
992
993         tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_COUNT, tp->ape_hb++);
994         tp->ape_hb_jiffies = jiffies;
995 }
996
997 static void tg3_disable_ints(struct tg3 *tp)
998 {
999         int i;
1000
1001         tw32(TG3PCI_MISC_HOST_CTRL,
1002              (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
1003         for (i = 0; i < tp->irq_max; i++)
1004                 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
1005 }
1006
1007 static void tg3_enable_ints(struct tg3 *tp)
1008 {
1009         int i;
1010
1011         tp->irq_sync = 0;
1012         wmb();
1013
1014         tw32(TG3PCI_MISC_HOST_CTRL,
1015              (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
1016
1017         tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
1018         for (i = 0; i < tp->irq_cnt; i++) {
1019                 struct tg3_napi *tnapi = &tp->napi[i];
1020
1021                 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1022                 if (tg3_flag(tp, 1SHOT_MSI))
1023                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1024
1025                 tp->coal_now |= tnapi->coal_now;
1026         }
1027
1028         /* Force an initial interrupt */
1029         if (!tg3_flag(tp, TAGGED_STATUS) &&
1030             (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
1031                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
1032         else
1033                 tw32(HOSTCC_MODE, tp->coal_now);
1034
1035         tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1036 }
1037
1038 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
1039 {
1040         struct tg3 *tp = tnapi->tp;
1041         struct tg3_hw_status *sblk = tnapi->hw_status;
1042         unsigned int work_exists = 0;
1043
1044         /* check for phy events */
1045         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
1046                 if (sblk->status & SD_STATUS_LINK_CHG)
1047                         work_exists = 1;
1048         }
1049
1050         /* check for TX work to do */
1051         if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
1052                 work_exists = 1;
1053
1054         /* check for RX work to do */
1055         if (tnapi->rx_rcb_prod_idx &&
1056             *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
1057                 work_exists = 1;
1058
1059         return work_exists;
1060 }
1061
1062 /* tg3_int_reenable
1063  *  similar to tg3_enable_ints, but it accurately determines whether there
1064  *  is new work pending and can return without flushing the PIO write
1065  *  which reenables interrupts
1066  */
1067 static void tg3_int_reenable(struct tg3_napi *tnapi)
1068 {
1069         struct tg3 *tp = tnapi->tp;
1070
1071         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1072
1073         /* When doing tagged status, this work check is unnecessary.
1074          * The last_tag we write above tells the chip which piece of
1075          * work we've completed.
1076          */
1077         if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1078                 tw32(HOSTCC_MODE, tp->coalesce_mode |
1079                      HOSTCC_MODE_ENABLE | tnapi->coal_now);
1080 }
1081
1082 static void tg3_switch_clocks(struct tg3 *tp)
1083 {
1084         u32 clock_ctrl;
1085         u32 orig_clock_ctrl;
1086
1087         if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1088                 return;
1089
1090         clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1091
1092         orig_clock_ctrl = clock_ctrl;
1093         clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1094                        CLOCK_CTRL_CLKRUN_OENABLE |
1095                        0x1f);
1096         tp->pci_clock_ctrl = clock_ctrl;
1097
1098         if (tg3_flag(tp, 5705_PLUS)) {
1099                 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1100                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
1101                                     clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1102                 }
1103         } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1104                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1105                             clock_ctrl |
1106                             (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1107                             40);
1108                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1109                             clock_ctrl | (CLOCK_CTRL_ALTCLK),
1110                             40);
1111         }
1112         tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1113 }
1114
1115 #define PHY_BUSY_LOOPS  5000
1116
1117 static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg,
1118                          u32 *val)
1119 {
1120         u32 frame_val;
1121         unsigned int loops;
1122         int ret;
1123
1124         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1125                 tw32_f(MAC_MI_MODE,
1126                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1127                 udelay(80);
1128         }
1129
1130         tg3_ape_lock(tp, tp->phy_ape_lock);
1131
1132         *val = 0x0;
1133
1134         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1135                       MI_COM_PHY_ADDR_MASK);
1136         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1137                       MI_COM_REG_ADDR_MASK);
1138         frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1139
1140         tw32_f(MAC_MI_COM, frame_val);
1141
1142         loops = PHY_BUSY_LOOPS;
1143         while (loops != 0) {
1144                 udelay(10);
1145                 frame_val = tr32(MAC_MI_COM);
1146
1147                 if ((frame_val & MI_COM_BUSY) == 0) {
1148                         udelay(5);
1149                         frame_val = tr32(MAC_MI_COM);
1150                         break;
1151                 }
1152                 loops -= 1;
1153         }
1154
1155         ret = -EBUSY;
1156         if (loops != 0) {
1157                 *val = frame_val & MI_COM_DATA_MASK;
1158                 ret = 0;
1159         }
1160
1161         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1162                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1163                 udelay(80);
1164         }
1165
1166         tg3_ape_unlock(tp, tp->phy_ape_lock);
1167
1168         return ret;
1169 }
1170
1171 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1172 {
1173         return __tg3_readphy(tp, tp->phy_addr, reg, val);
1174 }
1175
1176 static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg,
1177                           u32 val)
1178 {
1179         u32 frame_val;
1180         unsigned int loops;
1181         int ret;
1182
1183         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1184             (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1185                 return 0;
1186
1187         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1188                 tw32_f(MAC_MI_MODE,
1189                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1190                 udelay(80);
1191         }
1192
1193         tg3_ape_lock(tp, tp->phy_ape_lock);
1194
1195         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1196                       MI_COM_PHY_ADDR_MASK);
1197         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1198                       MI_COM_REG_ADDR_MASK);
1199         frame_val |= (val & MI_COM_DATA_MASK);
1200         frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1201
1202         tw32_f(MAC_MI_COM, frame_val);
1203
1204         loops = PHY_BUSY_LOOPS;
1205         while (loops != 0) {
1206                 udelay(10);
1207                 frame_val = tr32(MAC_MI_COM);
1208                 if ((frame_val & MI_COM_BUSY) == 0) {
1209                         udelay(5);
1210                         frame_val = tr32(MAC_MI_COM);
1211                         break;
1212                 }
1213                 loops -= 1;
1214         }
1215
1216         ret = -EBUSY;
1217         if (loops != 0)
1218                 ret = 0;
1219
1220         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1221                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1222                 udelay(80);
1223         }
1224
1225         tg3_ape_unlock(tp, tp->phy_ape_lock);
1226
1227         return ret;
1228 }
1229
1230 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1231 {
1232         return __tg3_writephy(tp, tp->phy_addr, reg, val);
1233 }
1234
1235 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1236 {
1237         int err;
1238
1239         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1240         if (err)
1241                 goto done;
1242
1243         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1244         if (err)
1245                 goto done;
1246
1247         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1248                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1249         if (err)
1250                 goto done;
1251
1252         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1253
1254 done:
1255         return err;
1256 }
1257
1258 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1259 {
1260         int err;
1261
1262         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1263         if (err)
1264                 goto done;
1265
1266         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1267         if (err)
1268                 goto done;
1269
1270         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1271                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1272         if (err)
1273                 goto done;
1274
1275         err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1276
1277 done:
1278         return err;
1279 }
1280
1281 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1282 {
1283         int err;
1284
1285         err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1286         if (!err)
1287                 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1288
1289         return err;
1290 }
1291
1292 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1293 {
1294         int err;
1295
1296         err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1297         if (!err)
1298                 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1299
1300         return err;
1301 }
1302
1303 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1304 {
1305         int err;
1306
1307         err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1308                            (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1309                            MII_TG3_AUXCTL_SHDWSEL_MISC);
1310         if (!err)
1311                 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1312
1313         return err;
1314 }
1315
1316 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1317 {
1318         if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1319                 set |= MII_TG3_AUXCTL_MISC_WREN;
1320
1321         return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1322 }
1323
1324 static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable)
1325 {
1326         u32 val;
1327         int err;
1328
1329         err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1330
1331         if (err)
1332                 return err;
1333
1334         if (enable)
1335                 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1336         else
1337                 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1338
1339         err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1340                                    val | MII_TG3_AUXCTL_ACTL_TX_6DB);
1341
1342         return err;
1343 }
1344
1345 static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val)
1346 {
1347         return tg3_writephy(tp, MII_TG3_MISC_SHDW,
1348                             reg | val | MII_TG3_MISC_SHDW_WREN);
1349 }
1350
1351 static int tg3_bmcr_reset(struct tg3 *tp)
1352 {
1353         u32 phy_control;
1354         int limit, err;
1355
1356         /* OK, reset it, and poll the BMCR_RESET bit until it
1357          * clears or we time out.
1358          */
1359         phy_control = BMCR_RESET;
1360         err = tg3_writephy(tp, MII_BMCR, phy_control);
1361         if (err != 0)
1362                 return -EBUSY;
1363
1364         limit = 5000;
1365         while (limit--) {
1366                 err = tg3_readphy(tp, MII_BMCR, &phy_control);
1367                 if (err != 0)
1368                         return -EBUSY;
1369
1370                 if ((phy_control & BMCR_RESET) == 0) {
1371                         udelay(40);
1372                         break;
1373                 }
1374                 udelay(10);
1375         }
1376         if (limit < 0)
1377                 return -EBUSY;
1378
1379         return 0;
1380 }
1381
1382 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1383 {
1384         struct tg3 *tp = bp->priv;
1385         u32 val;
1386
1387         spin_lock_bh(&tp->lock);
1388
1389         if (__tg3_readphy(tp, mii_id, reg, &val))
1390                 val = -EIO;
1391
1392         spin_unlock_bh(&tp->lock);
1393
1394         return val;
1395 }
1396
1397 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1398 {
1399         struct tg3 *tp = bp->priv;
1400         u32 ret = 0;
1401
1402         spin_lock_bh(&tp->lock);
1403
1404         if (__tg3_writephy(tp, mii_id, reg, val))
1405                 ret = -EIO;
1406
1407         spin_unlock_bh(&tp->lock);
1408
1409         return ret;
1410 }
1411
1412 static void tg3_mdio_config_5785(struct tg3 *tp)
1413 {
1414         u32 val;
1415         struct phy_device *phydev;
1416
1417         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1418         switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1419         case PHY_ID_BCM50610:
1420         case PHY_ID_BCM50610M:
1421                 val = MAC_PHYCFG2_50610_LED_MODES;
1422                 break;
1423         case PHY_ID_BCMAC131:
1424                 val = MAC_PHYCFG2_AC131_LED_MODES;
1425                 break;
1426         case PHY_ID_RTL8211C:
1427                 val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1428                 break;
1429         case PHY_ID_RTL8201E:
1430                 val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1431                 break;
1432         default:
1433                 return;
1434         }
1435
1436         if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1437                 tw32(MAC_PHYCFG2, val);
1438
1439                 val = tr32(MAC_PHYCFG1);
1440                 val &= ~(MAC_PHYCFG1_RGMII_INT |
1441                          MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1442                 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1443                 tw32(MAC_PHYCFG1, val);
1444
1445                 return;
1446         }
1447
1448         if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1449                 val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1450                        MAC_PHYCFG2_FMODE_MASK_MASK |
1451                        MAC_PHYCFG2_GMODE_MASK_MASK |
1452                        MAC_PHYCFG2_ACT_MASK_MASK   |
1453                        MAC_PHYCFG2_QUAL_MASK_MASK |
1454                        MAC_PHYCFG2_INBAND_ENABLE;
1455
1456         tw32(MAC_PHYCFG2, val);
1457
1458         val = tr32(MAC_PHYCFG1);
1459         val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1460                  MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1461         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1462                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1463                         val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1464                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1465                         val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1466         }
1467         val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1468                MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1469         tw32(MAC_PHYCFG1, val);
1470
1471         val = tr32(MAC_EXT_RGMII_MODE);
1472         val &= ~(MAC_RGMII_MODE_RX_INT_B |
1473                  MAC_RGMII_MODE_RX_QUALITY |
1474                  MAC_RGMII_MODE_RX_ACTIVITY |
1475                  MAC_RGMII_MODE_RX_ENG_DET |
1476                  MAC_RGMII_MODE_TX_ENABLE |
1477                  MAC_RGMII_MODE_TX_LOWPWR |
1478                  MAC_RGMII_MODE_TX_RESET);
1479         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1480                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1481                         val |= MAC_RGMII_MODE_RX_INT_B |
1482                                MAC_RGMII_MODE_RX_QUALITY |
1483                                MAC_RGMII_MODE_RX_ACTIVITY |
1484                                MAC_RGMII_MODE_RX_ENG_DET;
1485                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1486                         val |= MAC_RGMII_MODE_TX_ENABLE |
1487                                MAC_RGMII_MODE_TX_LOWPWR |
1488                                MAC_RGMII_MODE_TX_RESET;
1489         }
1490         tw32(MAC_EXT_RGMII_MODE, val);
1491 }
1492
1493 static void tg3_mdio_start(struct tg3 *tp)
1494 {
1495         tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1496         tw32_f(MAC_MI_MODE, tp->mi_mode);
1497         udelay(80);
1498
1499         if (tg3_flag(tp, MDIOBUS_INITED) &&
1500             tg3_asic_rev(tp) == ASIC_REV_5785)
1501                 tg3_mdio_config_5785(tp);
1502 }
1503
1504 static int tg3_mdio_init(struct tg3 *tp)
1505 {
1506         int i;
1507         u32 reg;
1508         struct phy_device *phydev;
1509
1510         if (tg3_flag(tp, 5717_PLUS)) {
1511                 u32 is_serdes;
1512
1513                 tp->phy_addr = tp->pci_fn + 1;
1514
1515                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0)
1516                         is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1517                 else
1518                         is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1519                                     TG3_CPMU_PHY_STRAP_IS_SERDES;
1520                 if (is_serdes)
1521                         tp->phy_addr += 7;
1522         } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) {
1523                 int addr;
1524
1525                 addr = ssb_gige_get_phyaddr(tp->pdev);
1526                 if (addr < 0)
1527                         return addr;
1528                 tp->phy_addr = addr;
1529         } else
1530                 tp->phy_addr = TG3_PHY_MII_ADDR;
1531
1532         tg3_mdio_start(tp);
1533
1534         if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1535                 return 0;
1536
1537         tp->mdio_bus = mdiobus_alloc();
1538         if (tp->mdio_bus == NULL)
1539                 return -ENOMEM;
1540
1541         tp->mdio_bus->name     = "tg3 mdio bus";
1542         snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x", pci_dev_id(tp->pdev));
1543         tp->mdio_bus->priv     = tp;
1544         tp->mdio_bus->parent   = &tp->pdev->dev;
1545         tp->mdio_bus->read     = &tg3_mdio_read;
1546         tp->mdio_bus->write    = &tg3_mdio_write;
1547         tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
1548
1549         /* The bus registration will look for all the PHYs on the mdio bus.
1550          * Unfortunately, it does not ensure the PHY is powered up before
1551          * accessing the PHY ID registers.  A chip reset is the
1552          * quickest way to bring the device back to an operational state..
1553          */
1554         if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1555                 tg3_bmcr_reset(tp);
1556
1557         i = mdiobus_register(tp->mdio_bus);
1558         if (i) {
1559                 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1560                 mdiobus_free(tp->mdio_bus);
1561                 return i;
1562         }
1563
1564         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
1565
1566         if (!phydev || !phydev->drv) {
1567                 dev_warn(&tp->pdev->dev, "No PHY devices\n");
1568                 mdiobus_unregister(tp->mdio_bus);
1569                 mdiobus_free(tp->mdio_bus);
1570                 return -ENODEV;
1571         }
1572
1573         switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1574         case PHY_ID_BCM57780:
1575                 phydev->interface = PHY_INTERFACE_MODE_GMII;
1576                 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1577                 break;
1578         case PHY_ID_BCM50610:
1579         case PHY_ID_BCM50610M:
1580                 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE |
1581                                      PHY_BRCM_RX_REFCLK_UNUSED |
1582                                      PHY_BRCM_DIS_TXCRXC_NOENRGY |
1583                                      PHY_BRCM_AUTO_PWRDWN_ENABLE;
1584                 fallthrough;
1585         case PHY_ID_RTL8211C:
1586                 phydev->interface = PHY_INTERFACE_MODE_RGMII;
1587                 break;
1588         case PHY_ID_RTL8201E:
1589         case PHY_ID_BCMAC131:
1590                 phydev->interface = PHY_INTERFACE_MODE_MII;
1591                 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1592                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
1593                 break;
1594         }
1595
1596         tg3_flag_set(tp, MDIOBUS_INITED);
1597
1598         if (tg3_asic_rev(tp) == ASIC_REV_5785)
1599                 tg3_mdio_config_5785(tp);
1600
1601         return 0;
1602 }
1603
1604 static void tg3_mdio_fini(struct tg3 *tp)
1605 {
1606         if (tg3_flag(tp, MDIOBUS_INITED)) {
1607                 tg3_flag_clear(tp, MDIOBUS_INITED);
1608                 mdiobus_unregister(tp->mdio_bus);
1609                 mdiobus_free(tp->mdio_bus);
1610         }
1611 }
1612
1613 /* tp->lock is held. */
1614 static inline void tg3_generate_fw_event(struct tg3 *tp)
1615 {
1616         u32 val;
1617
1618         val = tr32(GRC_RX_CPU_EVENT);
1619         val |= GRC_RX_CPU_DRIVER_EVENT;
1620         tw32_f(GRC_RX_CPU_EVENT, val);
1621
1622         tp->last_event_jiffies = jiffies;
1623 }
1624
1625 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1626
1627 /* tp->lock is held. */
1628 static void tg3_wait_for_event_ack(struct tg3 *tp)
1629 {
1630         int i;
1631         unsigned int delay_cnt;
1632         long time_remain;
1633
1634         /* If enough time has passed, no wait is necessary. */
1635         time_remain = (long)(tp->last_event_jiffies + 1 +
1636                       usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1637                       (long)jiffies;
1638         if (time_remain < 0)
1639                 return;
1640
1641         /* Check if we can shorten the wait time. */
1642         delay_cnt = jiffies_to_usecs(time_remain);
1643         if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1644                 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1645         delay_cnt = (delay_cnt >> 3) + 1;
1646
1647         for (i = 0; i < delay_cnt; i++) {
1648                 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1649                         break;
1650                 if (pci_channel_offline(tp->pdev))
1651                         break;
1652
1653                 udelay(8);
1654         }
1655 }
1656
1657 /* tp->lock is held. */
1658 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1659 {
1660         u32 reg, val;
1661
1662         val = 0;
1663         if (!tg3_readphy(tp, MII_BMCR, &reg))
1664                 val = reg << 16;
1665         if (!tg3_readphy(tp, MII_BMSR, &reg))
1666                 val |= (reg & 0xffff);
1667         *data++ = val;
1668
1669         val = 0;
1670         if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1671                 val = reg << 16;
1672         if (!tg3_readphy(tp, MII_LPA, &reg))
1673                 val |= (reg & 0xffff);
1674         *data++ = val;
1675
1676         val = 0;
1677         if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1678                 if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1679                         val = reg << 16;
1680                 if (!tg3_readphy(tp, MII_STAT1000, &reg))
1681                         val |= (reg & 0xffff);
1682         }
1683         *data++ = val;
1684
1685         if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1686                 val = reg << 16;
1687         else
1688                 val = 0;
1689         *data++ = val;
1690 }
1691
1692 /* tp->lock is held. */
1693 static void tg3_ump_link_report(struct tg3 *tp)
1694 {
1695         u32 data[4];
1696
1697         if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1698                 return;
1699
1700         tg3_phy_gather_ump_data(tp, data);
1701
1702         tg3_wait_for_event_ack(tp);
1703
1704         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1705         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1706         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1707         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1708         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1709         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1710
1711         tg3_generate_fw_event(tp);
1712 }
1713
1714 /* tp->lock is held. */
1715 static void tg3_stop_fw(struct tg3 *tp)
1716 {
1717         if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1718                 /* Wait for RX cpu to ACK the previous event. */
1719                 tg3_wait_for_event_ack(tp);
1720
1721                 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1722
1723                 tg3_generate_fw_event(tp);
1724
1725                 /* Wait for RX cpu to ACK this event. */
1726                 tg3_wait_for_event_ack(tp);
1727         }
1728 }
1729
1730 /* tp->lock is held. */
1731 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1732 {
1733         tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1734                       NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1735
1736         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1737                 switch (kind) {
1738                 case RESET_KIND_INIT:
1739                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1740                                       DRV_STATE_START);
1741                         break;
1742
1743                 case RESET_KIND_SHUTDOWN:
1744                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1745                                       DRV_STATE_UNLOAD);
1746                         break;
1747
1748                 case RESET_KIND_SUSPEND:
1749                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1750                                       DRV_STATE_SUSPEND);
1751                         break;
1752
1753                 default:
1754                         break;
1755                 }
1756         }
1757 }
1758
1759 /* tp->lock is held. */
1760 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1761 {
1762         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1763                 switch (kind) {
1764                 case RESET_KIND_INIT:
1765                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1766                                       DRV_STATE_START_DONE);
1767                         break;
1768
1769                 case RESET_KIND_SHUTDOWN:
1770                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1771                                       DRV_STATE_UNLOAD_DONE);
1772                         break;
1773
1774                 default:
1775                         break;
1776                 }
1777         }
1778 }
1779
1780 /* tp->lock is held. */
1781 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1782 {
1783         if (tg3_flag(tp, ENABLE_ASF)) {
1784                 switch (kind) {
1785                 case RESET_KIND_INIT:
1786                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1787                                       DRV_STATE_START);
1788                         break;
1789
1790                 case RESET_KIND_SHUTDOWN:
1791                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1792                                       DRV_STATE_UNLOAD);
1793                         break;
1794
1795                 case RESET_KIND_SUSPEND:
1796                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1797                                       DRV_STATE_SUSPEND);
1798                         break;
1799
1800                 default:
1801                         break;
1802                 }
1803         }
1804 }
1805
1806 static int tg3_poll_fw(struct tg3 *tp)
1807 {
1808         int i;
1809         u32 val;
1810
1811         if (tg3_flag(tp, NO_FWARE_REPORTED))
1812                 return 0;
1813
1814         if (tg3_flag(tp, IS_SSB_CORE)) {
1815                 /* We don't use firmware. */
1816                 return 0;
1817         }
1818
1819         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
1820                 /* Wait up to 20ms for init done. */
1821                 for (i = 0; i < 200; i++) {
1822                         if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1823                                 return 0;
1824                         if (pci_channel_offline(tp->pdev))
1825                                 return -ENODEV;
1826
1827                         udelay(100);
1828                 }
1829                 return -ENODEV;
1830         }
1831
1832         /* Wait for firmware initialization to complete. */
1833         for (i = 0; i < 100000; i++) {
1834                 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1835                 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1836                         break;
1837                 if (pci_channel_offline(tp->pdev)) {
1838                         if (!tg3_flag(tp, NO_FWARE_REPORTED)) {
1839                                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1840                                 netdev_info(tp->dev, "No firmware running\n");
1841                         }
1842
1843                         break;
1844                 }
1845
1846                 udelay(10);
1847         }
1848
1849         /* Chip might not be fitted with firmware.  Some Sun onboard
1850          * parts are configured like that.  So don't signal the timeout
1851          * of the above loop as an error, but do report the lack of
1852          * running firmware once.
1853          */
1854         if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1855                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1856
1857                 netdev_info(tp->dev, "No firmware running\n");
1858         }
1859
1860         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
1861                 /* The 57765 A0 needs a little more
1862                  * time to do some important work.
1863                  */
1864                 mdelay(10);
1865         }
1866
1867         return 0;
1868 }
1869
1870 static void tg3_link_report(struct tg3 *tp)
1871 {
1872         if (!netif_carrier_ok(tp->dev)) {
1873                 netif_info(tp, link, tp->dev, "Link is down\n");
1874                 tg3_ump_link_report(tp);
1875         } else if (netif_msg_link(tp)) {
1876                 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1877                             (tp->link_config.active_speed == SPEED_1000 ?
1878                              1000 :
1879                              (tp->link_config.active_speed == SPEED_100 ?
1880                               100 : 10)),
1881                             (tp->link_config.active_duplex == DUPLEX_FULL ?
1882                              "full" : "half"));
1883
1884                 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1885                             (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1886                             "on" : "off",
1887                             (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1888                             "on" : "off");
1889
1890                 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1891                         netdev_info(tp->dev, "EEE is %s\n",
1892                                     tp->setlpicnt ? "enabled" : "disabled");
1893
1894                 tg3_ump_link_report(tp);
1895         }
1896
1897         tp->link_up = netif_carrier_ok(tp->dev);
1898 }
1899
1900 static u32 tg3_decode_flowctrl_1000T(u32 adv)
1901 {
1902         u32 flowctrl = 0;
1903
1904         if (adv & ADVERTISE_PAUSE_CAP) {
1905                 flowctrl |= FLOW_CTRL_RX;
1906                 if (!(adv & ADVERTISE_PAUSE_ASYM))
1907                         flowctrl |= FLOW_CTRL_TX;
1908         } else if (adv & ADVERTISE_PAUSE_ASYM)
1909                 flowctrl |= FLOW_CTRL_TX;
1910
1911         return flowctrl;
1912 }
1913
1914 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1915 {
1916         u16 miireg;
1917
1918         if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1919                 miireg = ADVERTISE_1000XPAUSE;
1920         else if (flow_ctrl & FLOW_CTRL_TX)
1921                 miireg = ADVERTISE_1000XPSE_ASYM;
1922         else if (flow_ctrl & FLOW_CTRL_RX)
1923                 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1924         else
1925                 miireg = 0;
1926
1927         return miireg;
1928 }
1929
1930 static u32 tg3_decode_flowctrl_1000X(u32 adv)
1931 {
1932         u32 flowctrl = 0;
1933
1934         if (adv & ADVERTISE_1000XPAUSE) {
1935                 flowctrl |= FLOW_CTRL_RX;
1936                 if (!(adv & ADVERTISE_1000XPSE_ASYM))
1937                         flowctrl |= FLOW_CTRL_TX;
1938         } else if (adv & ADVERTISE_1000XPSE_ASYM)
1939                 flowctrl |= FLOW_CTRL_TX;
1940
1941         return flowctrl;
1942 }
1943
1944 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1945 {
1946         u8 cap = 0;
1947
1948         if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1949                 cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1950         } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1951                 if (lcladv & ADVERTISE_1000XPAUSE)
1952                         cap = FLOW_CTRL_RX;
1953                 if (rmtadv & ADVERTISE_1000XPAUSE)
1954                         cap = FLOW_CTRL_TX;
1955         }
1956
1957         return cap;
1958 }
1959
1960 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1961 {
1962         u8 autoneg;
1963         u8 flowctrl = 0;
1964         u32 old_rx_mode = tp->rx_mode;
1965         u32 old_tx_mode = tp->tx_mode;
1966
1967         if (tg3_flag(tp, USE_PHYLIB))
1968                 autoneg = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)->autoneg;
1969         else
1970                 autoneg = tp->link_config.autoneg;
1971
1972         if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1973                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1974                         flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1975                 else
1976                         flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1977         } else
1978                 flowctrl = tp->link_config.flowctrl;
1979
1980         tp->link_config.active_flowctrl = flowctrl;
1981
1982         if (flowctrl & FLOW_CTRL_RX)
1983                 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1984         else
1985                 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1986
1987         if (old_rx_mode != tp->rx_mode)
1988                 tw32_f(MAC_RX_MODE, tp->rx_mode);
1989
1990         if (flowctrl & FLOW_CTRL_TX)
1991                 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1992         else
1993                 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1994
1995         if (old_tx_mode != tp->tx_mode)
1996                 tw32_f(MAC_TX_MODE, tp->tx_mode);
1997 }
1998
1999 static void tg3_adjust_link(struct net_device *dev)
2000 {
2001         u8 oldflowctrl, linkmesg = 0;
2002         u32 mac_mode, lcl_adv, rmt_adv;
2003         struct tg3 *tp = netdev_priv(dev);
2004         struct phy_device *phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2005
2006         spin_lock_bh(&tp->lock);
2007
2008         mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
2009                                     MAC_MODE_HALF_DUPLEX);
2010
2011         oldflowctrl = tp->link_config.active_flowctrl;
2012
2013         if (phydev->link) {
2014                 lcl_adv = 0;
2015                 rmt_adv = 0;
2016
2017                 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
2018                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2019                 else if (phydev->speed == SPEED_1000 ||
2020                          tg3_asic_rev(tp) != ASIC_REV_5785)
2021                         mac_mode |= MAC_MODE_PORT_MODE_GMII;
2022                 else
2023                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2024
2025                 if (phydev->duplex == DUPLEX_HALF)
2026                         mac_mode |= MAC_MODE_HALF_DUPLEX;
2027                 else {
2028                         lcl_adv = mii_advertise_flowctrl(
2029                                   tp->link_config.flowctrl);
2030
2031                         if (phydev->pause)
2032                                 rmt_adv = LPA_PAUSE_CAP;
2033                         if (phydev->asym_pause)
2034                                 rmt_adv |= LPA_PAUSE_ASYM;
2035                 }
2036
2037                 tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2038         } else
2039                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
2040
2041         if (mac_mode != tp->mac_mode) {
2042                 tp->mac_mode = mac_mode;
2043                 tw32_f(MAC_MODE, tp->mac_mode);
2044                 udelay(40);
2045         }
2046
2047         if (tg3_asic_rev(tp) == ASIC_REV_5785) {
2048                 if (phydev->speed == SPEED_10)
2049                         tw32(MAC_MI_STAT,
2050                              MAC_MI_STAT_10MBPS_MODE |
2051                              MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2052                 else
2053                         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2054         }
2055
2056         if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
2057                 tw32(MAC_TX_LENGTHS,
2058                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2059                       (6 << TX_LENGTHS_IPG_SHIFT) |
2060                       (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
2061         else
2062                 tw32(MAC_TX_LENGTHS,
2063                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2064                       (6 << TX_LENGTHS_IPG_SHIFT) |
2065                       (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
2066
2067         if (phydev->link != tp->old_link ||
2068             phydev->speed != tp->link_config.active_speed ||
2069             phydev->duplex != tp->link_config.active_duplex ||
2070             oldflowctrl != tp->link_config.active_flowctrl)
2071                 linkmesg = 1;
2072
2073         tp->old_link = phydev->link;
2074         tp->link_config.active_speed = phydev->speed;
2075         tp->link_config.active_duplex = phydev->duplex;
2076
2077         spin_unlock_bh(&tp->lock);
2078
2079         if (linkmesg)
2080                 tg3_link_report(tp);
2081 }
2082
2083 static int tg3_phy_init(struct tg3 *tp)
2084 {
2085         struct phy_device *phydev;
2086
2087         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
2088                 return 0;
2089
2090         /* Bring the PHY back to a known state. */
2091         tg3_bmcr_reset(tp);
2092
2093         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2094
2095         /* Attach the MAC to the PHY. */
2096         phydev = phy_connect(tp->dev, phydev_name(phydev),
2097                              tg3_adjust_link, phydev->interface);
2098         if (IS_ERR(phydev)) {
2099                 dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
2100                 return PTR_ERR(phydev);
2101         }
2102
2103         /* Mask with MAC supported features. */
2104         switch (phydev->interface) {
2105         case PHY_INTERFACE_MODE_GMII:
2106         case PHY_INTERFACE_MODE_RGMII:
2107                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
2108                         phy_set_max_speed(phydev, SPEED_1000);
2109                         phy_support_asym_pause(phydev);
2110                         break;
2111                 }
2112                 fallthrough;
2113         case PHY_INTERFACE_MODE_MII:
2114                 phy_set_max_speed(phydev, SPEED_100);
2115                 phy_support_asym_pause(phydev);
2116                 break;
2117         default:
2118                 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2119                 return -EINVAL;
2120         }
2121
2122         tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
2123
2124         phy_attached_info(phydev);
2125
2126         return 0;
2127 }
2128
2129 static void tg3_phy_start(struct tg3 *tp)
2130 {
2131         struct phy_device *phydev;
2132
2133         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2134                 return;
2135
2136         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
2137
2138         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2139                 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2140                 phydev->speed = tp->link_config.speed;
2141                 phydev->duplex = tp->link_config.duplex;
2142                 phydev->autoneg = tp->link_config.autoneg;
2143                 ethtool_convert_legacy_u32_to_link_mode(
2144                         phydev->advertising, tp->link_config.advertising);
2145         }
2146
2147         phy_start(phydev);
2148
2149         phy_start_aneg(phydev);
2150 }
2151
2152 static void tg3_phy_stop(struct tg3 *tp)
2153 {
2154         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2155                 return;
2156
2157         phy_stop(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2158 }
2159
2160 static void tg3_phy_fini(struct tg3 *tp)
2161 {
2162         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2163                 phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
2164                 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2165         }
2166 }
2167
2168 static int tg3_phy_set_extloopbk(struct tg3 *tp)
2169 {
2170         int err;
2171         u32 val;
2172
2173         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2174                 return 0;
2175
2176         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2177                 /* Cannot do read-modify-write on 5401 */
2178                 err = tg3_phy_auxctl_write(tp,
2179                                            MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2180                                            MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2181                                            0x4c20);
2182                 goto done;
2183         }
2184
2185         err = tg3_phy_auxctl_read(tp,
2186                                   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2187         if (err)
2188                 return err;
2189
2190         val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2191         err = tg3_phy_auxctl_write(tp,
2192                                    MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2193
2194 done:
2195         return err;
2196 }
2197
2198 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2199 {
2200         u32 phytest;
2201
2202         if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2203                 u32 phy;
2204
2205                 tg3_writephy(tp, MII_TG3_FET_TEST,
2206                              phytest | MII_TG3_FET_SHADOW_EN);
2207                 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2208                         if (enable)
2209                                 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2210                         else
2211                                 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2212                         tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2213                 }
2214                 tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2215         }
2216 }
2217
2218 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2219 {
2220         u32 reg;
2221
2222         if (!tg3_flag(tp, 5705_PLUS) ||
2223             (tg3_flag(tp, 5717_PLUS) &&
2224              (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2225                 return;
2226
2227         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2228                 tg3_phy_fet_toggle_apd(tp, enable);
2229                 return;
2230         }
2231
2232         reg = MII_TG3_MISC_SHDW_SCR5_LPED |
2233               MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2234               MII_TG3_MISC_SHDW_SCR5_SDTL |
2235               MII_TG3_MISC_SHDW_SCR5_C125OE;
2236         if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable)
2237                 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2238
2239         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg);
2240
2241
2242         reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2243         if (enable)
2244                 reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2245
2246         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg);
2247 }
2248
2249 static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable)
2250 {
2251         u32 phy;
2252
2253         if (!tg3_flag(tp, 5705_PLUS) ||
2254             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2255                 return;
2256
2257         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2258                 u32 ephy;
2259
2260                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2261                         u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2262
2263                         tg3_writephy(tp, MII_TG3_FET_TEST,
2264                                      ephy | MII_TG3_FET_SHADOW_EN);
2265                         if (!tg3_readphy(tp, reg, &phy)) {
2266                                 if (enable)
2267                                         phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2268                                 else
2269                                         phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2270                                 tg3_writephy(tp, reg, phy);
2271                         }
2272                         tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2273                 }
2274         } else {
2275                 int ret;
2276
2277                 ret = tg3_phy_auxctl_read(tp,
2278                                           MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2279                 if (!ret) {
2280                         if (enable)
2281                                 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2282                         else
2283                                 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2284                         tg3_phy_auxctl_write(tp,
2285                                              MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2286                 }
2287         }
2288 }
2289
2290 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2291 {
2292         int ret;
2293         u32 val;
2294
2295         if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2296                 return;
2297
2298         ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2299         if (!ret)
2300                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2301                                      val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2302 }
2303
2304 static void tg3_phy_apply_otp(struct tg3 *tp)
2305 {
2306         u32 otp, phy;
2307
2308         if (!tp->phy_otp)
2309                 return;
2310
2311         otp = tp->phy_otp;
2312
2313         if (tg3_phy_toggle_auxctl_smdsp(tp, true))
2314                 return;
2315
2316         phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2317         phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2318         tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2319
2320         phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2321               ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2322         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2323
2324         phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2325         phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2326         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2327
2328         phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2329         tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2330
2331         phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2332         tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2333
2334         phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2335               ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2336         tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2337
2338         tg3_phy_toggle_auxctl_smdsp(tp, false);
2339 }
2340
2341 static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee)
2342 {
2343         u32 val;
2344         struct ethtool_eee *dest = &tp->eee;
2345
2346         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2347                 return;
2348
2349         if (eee)
2350                 dest = eee;
2351
2352         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val))
2353                 return;
2354
2355         /* Pull eee_active */
2356         if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2357             val == TG3_CL45_D7_EEERES_STAT_LP_100TX) {
2358                 dest->eee_active = 1;
2359         } else
2360                 dest->eee_active = 0;
2361
2362         /* Pull lp advertised settings */
2363         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val))
2364                 return;
2365         dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2366
2367         /* Pull advertised and eee_enabled settings */
2368         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val))
2369                 return;
2370         dest->eee_enabled = !!val;
2371         dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2372
2373         /* Pull tx_lpi_enabled */
2374         val = tr32(TG3_CPMU_EEE_MODE);
2375         dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX);
2376
2377         /* Pull lpi timer value */
2378         dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff;
2379 }
2380
2381 static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up)
2382 {
2383         u32 val;
2384
2385         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2386                 return;
2387
2388         tp->setlpicnt = 0;
2389
2390         if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2391             current_link_up &&
2392             tp->link_config.active_duplex == DUPLEX_FULL &&
2393             (tp->link_config.active_speed == SPEED_100 ||
2394              tp->link_config.active_speed == SPEED_1000)) {
2395                 u32 eeectl;
2396
2397                 if (tp->link_config.active_speed == SPEED_1000)
2398                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2399                 else
2400                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2401
2402                 tw32(TG3_CPMU_EEE_CTRL, eeectl);
2403
2404                 tg3_eee_pull_config(tp, NULL);
2405                 if (tp->eee.eee_active)
2406                         tp->setlpicnt = 2;
2407         }
2408
2409         if (!tp->setlpicnt) {
2410                 if (current_link_up &&
2411                    !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2412                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2413                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2414                 }
2415
2416                 val = tr32(TG3_CPMU_EEE_MODE);
2417                 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2418         }
2419 }
2420
2421 static void tg3_phy_eee_enable(struct tg3 *tp)
2422 {
2423         u32 val;
2424
2425         if (tp->link_config.active_speed == SPEED_1000 &&
2426             (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2427              tg3_asic_rev(tp) == ASIC_REV_5719 ||
2428              tg3_flag(tp, 57765_CLASS)) &&
2429             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2430                 val = MII_TG3_DSP_TAP26_ALNOKO |
2431                       MII_TG3_DSP_TAP26_RMRXSTO;
2432                 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2433                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2434         }
2435
2436         val = tr32(TG3_CPMU_EEE_MODE);
2437         tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2438 }
2439
2440 static int tg3_wait_macro_done(struct tg3 *tp)
2441 {
2442         int limit = 100;
2443
2444         while (limit--) {
2445                 u32 tmp32;
2446
2447                 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2448                         if ((tmp32 & 0x1000) == 0)
2449                                 break;
2450                 }
2451         }
2452         if (limit < 0)
2453                 return -EBUSY;
2454
2455         return 0;
2456 }
2457
2458 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2459 {
2460         static const u32 test_pat[4][6] = {
2461         { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2462         { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2463         { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2464         { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2465         };
2466         int chan;
2467
2468         for (chan = 0; chan < 4; chan++) {
2469                 int i;
2470
2471                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2472                              (chan * 0x2000) | 0x0200);
2473                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2474
2475                 for (i = 0; i < 6; i++)
2476                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2477                                      test_pat[chan][i]);
2478
2479                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2480                 if (tg3_wait_macro_done(tp)) {
2481                         *resetp = 1;
2482                         return -EBUSY;
2483                 }
2484
2485                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2486                              (chan * 0x2000) | 0x0200);
2487                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2488                 if (tg3_wait_macro_done(tp)) {
2489                         *resetp = 1;
2490                         return -EBUSY;
2491                 }
2492
2493                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2494                 if (tg3_wait_macro_done(tp)) {
2495                         *resetp = 1;
2496                         return -EBUSY;
2497                 }
2498
2499                 for (i = 0; i < 6; i += 2) {
2500                         u32 low, high;
2501
2502                         if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2503                             tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2504                             tg3_wait_macro_done(tp)) {
2505                                 *resetp = 1;
2506                                 return -EBUSY;
2507                         }
2508                         low &= 0x7fff;
2509                         high &= 0x000f;
2510                         if (low != test_pat[chan][i] ||
2511                             high != test_pat[chan][i+1]) {
2512                                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2513                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2514                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2515
2516                                 return -EBUSY;
2517                         }
2518                 }
2519         }
2520
2521         return 0;
2522 }
2523
2524 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2525 {
2526         int chan;
2527
2528         for (chan = 0; chan < 4; chan++) {
2529                 int i;
2530
2531                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2532                              (chan * 0x2000) | 0x0200);
2533                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2534                 for (i = 0; i < 6; i++)
2535                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2536                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2537                 if (tg3_wait_macro_done(tp))
2538                         return -EBUSY;
2539         }
2540
2541         return 0;
2542 }
2543
2544 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2545 {
2546         u32 reg32, phy9_orig;
2547         int retries, do_phy_reset, err;
2548
2549         retries = 10;
2550         do_phy_reset = 1;
2551         do {
2552                 if (do_phy_reset) {
2553                         err = tg3_bmcr_reset(tp);
2554                         if (err)
2555                                 return err;
2556                         do_phy_reset = 0;
2557                 }
2558
2559                 /* Disable transmitter and interrupt.  */
2560                 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2561                         continue;
2562
2563                 reg32 |= 0x3000;
2564                 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2565
2566                 /* Set full-duplex, 1000 mbps.  */
2567                 tg3_writephy(tp, MII_BMCR,
2568                              BMCR_FULLDPLX | BMCR_SPEED1000);
2569
2570                 /* Set to master mode.  */
2571                 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2572                         continue;
2573
2574                 tg3_writephy(tp, MII_CTRL1000,
2575                              CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2576
2577                 err = tg3_phy_toggle_auxctl_smdsp(tp, true);
2578                 if (err)
2579                         return err;
2580
2581                 /* Block the PHY control access.  */
2582                 tg3_phydsp_write(tp, 0x8005, 0x0800);
2583
2584                 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2585                 if (!err)
2586                         break;
2587         } while (--retries);
2588
2589         err = tg3_phy_reset_chanpat(tp);
2590         if (err)
2591                 return err;
2592
2593         tg3_phydsp_write(tp, 0x8005, 0x0000);
2594
2595         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2596         tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2597
2598         tg3_phy_toggle_auxctl_smdsp(tp, false);
2599
2600         tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2601
2602         err = tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32);
2603         if (err)
2604                 return err;
2605
2606         reg32 &= ~0x3000;
2607         tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2608
2609         return 0;
2610 }
2611
2612 static void tg3_carrier_off(struct tg3 *tp)
2613 {
2614         netif_carrier_off(tp->dev);
2615         tp->link_up = false;
2616 }
2617
2618 static void tg3_warn_mgmt_link_flap(struct tg3 *tp)
2619 {
2620         if (tg3_flag(tp, ENABLE_ASF))
2621                 netdev_warn(tp->dev,
2622                             "Management side-band traffic will be interrupted during phy settings change\n");
2623 }
2624
2625 /* This will reset the tigon3 PHY if there is no valid
2626  * link unless the FORCE argument is non-zero.
2627  */
2628 static int tg3_phy_reset(struct tg3 *tp)
2629 {
2630         u32 val, cpmuctrl;
2631         int err;
2632
2633         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2634                 val = tr32(GRC_MISC_CFG);
2635                 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2636                 udelay(40);
2637         }
2638         err  = tg3_readphy(tp, MII_BMSR, &val);
2639         err |= tg3_readphy(tp, MII_BMSR, &val);
2640         if (err != 0)
2641                 return -EBUSY;
2642
2643         if (netif_running(tp->dev) && tp->link_up) {
2644                 netif_carrier_off(tp->dev);
2645                 tg3_link_report(tp);
2646         }
2647
2648         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
2649             tg3_asic_rev(tp) == ASIC_REV_5704 ||
2650             tg3_asic_rev(tp) == ASIC_REV_5705) {
2651                 err = tg3_phy_reset_5703_4_5(tp);
2652                 if (err)
2653                         return err;
2654                 goto out;
2655         }
2656
2657         cpmuctrl = 0;
2658         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
2659             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
2660                 cpmuctrl = tr32(TG3_CPMU_CTRL);
2661                 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2662                         tw32(TG3_CPMU_CTRL,
2663                              cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2664         }
2665
2666         err = tg3_bmcr_reset(tp);
2667         if (err)
2668                 return err;
2669
2670         if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2671                 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2672                 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2673
2674                 tw32(TG3_CPMU_CTRL, cpmuctrl);
2675         }
2676
2677         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
2678             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
2679                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2680                 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2681                     CPMU_LSPD_1000MB_MACCLK_12_5) {
2682                         val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2683                         udelay(40);
2684                         tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2685                 }
2686         }
2687
2688         if (tg3_flag(tp, 5717_PLUS) &&
2689             (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2690                 return 0;
2691
2692         tg3_phy_apply_otp(tp);
2693
2694         if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2695                 tg3_phy_toggle_apd(tp, true);
2696         else
2697                 tg3_phy_toggle_apd(tp, false);
2698
2699 out:
2700         if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2701             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2702                 tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2703                 tg3_phydsp_write(tp, 0x000a, 0x0323);
2704                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2705         }
2706
2707         if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2708                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2709                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2710         }
2711
2712         if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2713                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2714                         tg3_phydsp_write(tp, 0x000a, 0x310b);
2715                         tg3_phydsp_write(tp, 0x201f, 0x9506);
2716                         tg3_phydsp_write(tp, 0x401f, 0x14e2);
2717                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2718                 }
2719         } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2720                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2721                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2722                         if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2723                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2724                                 tg3_writephy(tp, MII_TG3_TEST1,
2725                                              MII_TG3_TEST1_TRIM_EN | 0x4);
2726                         } else
2727                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2728
2729                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2730                 }
2731         }
2732
2733         /* Set Extended packet length bit (bit 14) on all chips that */
2734         /* support jumbo frames */
2735         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2736                 /* Cannot do read-modify-write on 5401 */
2737                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2738         } else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2739                 /* Set bit 14 with read-modify-write to preserve other bits */
2740                 err = tg3_phy_auxctl_read(tp,
2741                                           MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2742                 if (!err)
2743                         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2744                                            val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2745         }
2746
2747         /* Set phy register 0x10 bit 0 to high fifo elasticity to support
2748          * jumbo frames transmission.
2749          */
2750         if (tg3_flag(tp, JUMBO_CAPABLE)) {
2751                 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2752                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
2753                                      val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2754         }
2755
2756         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2757                 /* adjust output voltage */
2758                 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2759         }
2760
2761         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0)
2762                 tg3_phydsp_write(tp, 0xffb, 0x4000);
2763
2764         tg3_phy_toggle_automdix(tp, true);
2765         tg3_phy_set_wirespeed(tp);
2766         return 0;
2767 }
2768
2769 #define TG3_GPIO_MSG_DRVR_PRES           0x00000001
2770 #define TG3_GPIO_MSG_NEED_VAUX           0x00000002
2771 #define TG3_GPIO_MSG_MASK                (TG3_GPIO_MSG_DRVR_PRES | \
2772                                           TG3_GPIO_MSG_NEED_VAUX)
2773 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2774         ((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2775          (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2776          (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2777          (TG3_GPIO_MSG_DRVR_PRES << 12))
2778
2779 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2780         ((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2781          (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2782          (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2783          (TG3_GPIO_MSG_NEED_VAUX << 12))
2784
2785 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2786 {
2787         u32 status, shift;
2788
2789         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2790             tg3_asic_rev(tp) == ASIC_REV_5719)
2791                 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2792         else
2793                 status = tr32(TG3_CPMU_DRV_STATUS);
2794
2795         shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2796         status &= ~(TG3_GPIO_MSG_MASK << shift);
2797         status |= (newstat << shift);
2798
2799         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2800             tg3_asic_rev(tp) == ASIC_REV_5719)
2801                 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2802         else
2803                 tw32(TG3_CPMU_DRV_STATUS, status);
2804
2805         return status >> TG3_APE_GPIO_MSG_SHIFT;
2806 }
2807
2808 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2809 {
2810         if (!tg3_flag(tp, IS_NIC))
2811                 return 0;
2812
2813         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2814             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2815             tg3_asic_rev(tp) == ASIC_REV_5720) {
2816                 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2817                         return -EIO;
2818
2819                 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2820
2821                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2822                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2823
2824                 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2825         } else {
2826                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2827                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2828         }
2829
2830         return 0;
2831 }
2832
2833 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2834 {
2835         u32 grc_local_ctrl;
2836
2837         if (!tg3_flag(tp, IS_NIC) ||
2838             tg3_asic_rev(tp) == ASIC_REV_5700 ||
2839             tg3_asic_rev(tp) == ASIC_REV_5701)
2840                 return;
2841
2842         grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2843
2844         tw32_wait_f(GRC_LOCAL_CTRL,
2845                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2846                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2847
2848         tw32_wait_f(GRC_LOCAL_CTRL,
2849                     grc_local_ctrl,
2850                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2851
2852         tw32_wait_f(GRC_LOCAL_CTRL,
2853                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2854                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2855 }
2856
2857 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2858 {
2859         if (!tg3_flag(tp, IS_NIC))
2860                 return;
2861
2862         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
2863             tg3_asic_rev(tp) == ASIC_REV_5701) {
2864                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2865                             (GRC_LCLCTRL_GPIO_OE0 |
2866                              GRC_LCLCTRL_GPIO_OE1 |
2867                              GRC_LCLCTRL_GPIO_OE2 |
2868                              GRC_LCLCTRL_GPIO_OUTPUT0 |
2869                              GRC_LCLCTRL_GPIO_OUTPUT1),
2870                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2871         } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2872                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2873                 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2874                 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2875                                      GRC_LCLCTRL_GPIO_OE1 |
2876                                      GRC_LCLCTRL_GPIO_OE2 |
2877                                      GRC_LCLCTRL_GPIO_OUTPUT0 |
2878                                      GRC_LCLCTRL_GPIO_OUTPUT1 |
2879                                      tp->grc_local_ctrl;
2880                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2881                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2882
2883                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2884                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2885                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2886
2887                 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2888                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2889                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2890         } else {
2891                 u32 no_gpio2;
2892                 u32 grc_local_ctrl = 0;
2893
2894                 /* Workaround to prevent overdrawing Amps. */
2895                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
2896                         grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2897                         tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2898                                     grc_local_ctrl,
2899                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2900                 }
2901
2902                 /* On 5753 and variants, GPIO2 cannot be used. */
2903                 no_gpio2 = tp->nic_sram_data_cfg &
2904                            NIC_SRAM_DATA_CFG_NO_GPIO2;
2905
2906                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2907                                   GRC_LCLCTRL_GPIO_OE1 |
2908                                   GRC_LCLCTRL_GPIO_OE2 |
2909                                   GRC_LCLCTRL_GPIO_OUTPUT1 |
2910                                   GRC_LCLCTRL_GPIO_OUTPUT2;
2911                 if (no_gpio2) {
2912                         grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2913                                             GRC_LCLCTRL_GPIO_OUTPUT2);
2914                 }
2915                 tw32_wait_f(GRC_LOCAL_CTRL,
2916                             tp->grc_local_ctrl | grc_local_ctrl,
2917                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2918
2919                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2920
2921                 tw32_wait_f(GRC_LOCAL_CTRL,
2922                             tp->grc_local_ctrl | grc_local_ctrl,
2923                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2924
2925                 if (!no_gpio2) {
2926                         grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2927                         tw32_wait_f(GRC_LOCAL_CTRL,
2928                                     tp->grc_local_ctrl | grc_local_ctrl,
2929                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2930                 }
2931         }
2932 }
2933
2934 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2935 {
2936         u32 msg = 0;
2937
2938         /* Serialize power state transitions */
2939         if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2940                 return;
2941
2942         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2943                 msg = TG3_GPIO_MSG_NEED_VAUX;
2944
2945         msg = tg3_set_function_status(tp, msg);
2946
2947         if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2948                 goto done;
2949
2950         if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2951                 tg3_pwrsrc_switch_to_vaux(tp);
2952         else
2953                 tg3_pwrsrc_die_with_vmain(tp);
2954
2955 done:
2956         tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2957 }
2958
2959 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2960 {
2961         bool need_vaux = false;
2962
2963         /* The GPIOs do something completely different on 57765. */
2964         if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2965                 return;
2966
2967         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2968             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2969             tg3_asic_rev(tp) == ASIC_REV_5720) {
2970                 tg3_frob_aux_power_5717(tp, include_wol ?
2971                                         tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2972                 return;
2973         }
2974
2975         if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2976                 struct net_device *dev_peer;
2977
2978                 dev_peer = pci_get_drvdata(tp->pdev_peer);
2979
2980                 /* remove_one() may have been run on the peer. */
2981                 if (dev_peer) {
2982                         struct tg3 *tp_peer = netdev_priv(dev_peer);
2983
2984                         if (tg3_flag(tp_peer, INIT_COMPLETE))
2985                                 return;
2986
2987                         if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2988                             tg3_flag(tp_peer, ENABLE_ASF))
2989                                 need_vaux = true;
2990                 }
2991         }
2992
2993         if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2994             tg3_flag(tp, ENABLE_ASF))
2995                 need_vaux = true;
2996
2997         if (need_vaux)
2998                 tg3_pwrsrc_switch_to_vaux(tp);
2999         else
3000                 tg3_pwrsrc_die_with_vmain(tp);
3001 }
3002
3003 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
3004 {
3005         if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
3006                 return 1;
3007         else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
3008                 if (speed != SPEED_10)
3009                         return 1;
3010         } else if (speed == SPEED_10)
3011                 return 1;
3012
3013         return 0;
3014 }
3015
3016 static bool tg3_phy_power_bug(struct tg3 *tp)
3017 {
3018         switch (tg3_asic_rev(tp)) {
3019         case ASIC_REV_5700:
3020         case ASIC_REV_5704:
3021                 return true;
3022         case ASIC_REV_5780:
3023                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3024                         return true;
3025                 return false;
3026         case ASIC_REV_5717:
3027                 if (!tp->pci_fn)
3028                         return true;
3029                 return false;
3030         case ASIC_REV_5719:
3031         case ASIC_REV_5720:
3032                 if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
3033                     !tp->pci_fn)
3034                         return true;
3035                 return false;
3036         }
3037
3038         return false;
3039 }
3040
3041 static bool tg3_phy_led_bug(struct tg3 *tp)
3042 {
3043         switch (tg3_asic_rev(tp)) {
3044         case ASIC_REV_5719:
3045         case ASIC_REV_5720:
3046                 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
3047                     !tp->pci_fn)
3048                         return true;
3049                 return false;
3050         }
3051
3052         return false;
3053 }
3054
3055 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
3056 {
3057         u32 val;
3058
3059         if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)
3060                 return;
3061
3062         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
3063                 if (tg3_asic_rev(tp) == ASIC_REV_5704) {
3064                         u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
3065                         u32 serdes_cfg = tr32(MAC_SERDES_CFG);
3066
3067                         sg_dig_ctrl |=
3068                                 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
3069                         tw32(SG_DIG_CTRL, sg_dig_ctrl);
3070                         tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
3071                 }
3072                 return;
3073         }
3074
3075         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3076                 tg3_bmcr_reset(tp);
3077                 val = tr32(GRC_MISC_CFG);
3078                 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
3079                 udelay(40);
3080                 return;
3081         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3082                 u32 phytest;
3083                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
3084                         u32 phy;
3085
3086                         tg3_writephy(tp, MII_ADVERTISE, 0);
3087                         tg3_writephy(tp, MII_BMCR,
3088                                      BMCR_ANENABLE | BMCR_ANRESTART);
3089
3090                         tg3_writephy(tp, MII_TG3_FET_TEST,
3091                                      phytest | MII_TG3_FET_SHADOW_EN);
3092                         if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
3093                                 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
3094                                 tg3_writephy(tp,
3095                                              MII_TG3_FET_SHDW_AUXMODE4,
3096                                              phy);
3097                         }
3098                         tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
3099                 }
3100                 return;
3101         } else if (do_low_power) {
3102                 if (!tg3_phy_led_bug(tp))
3103                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
3104                                      MII_TG3_EXT_CTRL_FORCE_LED_OFF);
3105
3106                 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3107                       MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
3108                       MII_TG3_AUXCTL_PCTL_VREG_11V;
3109                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
3110         }
3111
3112         /* The PHY should not be powered down on some chips because
3113          * of bugs.
3114          */
3115         if (tg3_phy_power_bug(tp))
3116                 return;
3117
3118         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
3119             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
3120                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
3121                 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
3122                 val |= CPMU_LSPD_1000MB_MACCLK_12_5;
3123                 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
3124         }
3125
3126         tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
3127 }
3128
3129 /* tp->lock is held. */
3130 static int tg3_nvram_lock(struct tg3 *tp)
3131 {
3132         if (tg3_flag(tp, NVRAM)) {
3133                 int i;
3134
3135                 if (tp->nvram_lock_cnt == 0) {
3136                         tw32(NVRAM_SWARB, SWARB_REQ_SET1);
3137                         for (i = 0; i < 8000; i++) {
3138                                 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
3139                                         break;
3140                                 udelay(20);
3141                         }
3142                         if (i == 8000) {
3143                                 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
3144                                 return -ENODEV;
3145                         }
3146                 }
3147                 tp->nvram_lock_cnt++;
3148         }
3149         return 0;
3150 }
3151
3152 /* tp->lock is held. */
3153 static void tg3_nvram_unlock(struct tg3 *tp)
3154 {
3155         if (tg3_flag(tp, NVRAM)) {
3156                 if (tp->nvram_lock_cnt > 0)
3157                         tp->nvram_lock_cnt--;
3158                 if (tp->nvram_lock_cnt == 0)
3159                         tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
3160         }
3161 }
3162
3163 /* tp->lock is held. */
3164 static void tg3_enable_nvram_access(struct tg3 *tp)
3165 {
3166         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3167                 u32 nvaccess = tr32(NVRAM_ACCESS);
3168
3169                 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
3170         }
3171 }
3172
3173 /* tp->lock is held. */
3174 static void tg3_disable_nvram_access(struct tg3 *tp)
3175 {
3176         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3177                 u32 nvaccess = tr32(NVRAM_ACCESS);
3178
3179                 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
3180         }
3181 }
3182
3183 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
3184                                         u32 offset, u32 *val)
3185 {
3186         u32 tmp;
3187         int i;
3188
3189         if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
3190                 return -EINVAL;
3191
3192         tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
3193                                         EEPROM_ADDR_DEVID_MASK |
3194                                         EEPROM_ADDR_READ);
3195         tw32(GRC_EEPROM_ADDR,
3196              tmp |
3197              (0 << EEPROM_ADDR_DEVID_SHIFT) |
3198              ((offset << EEPROM_ADDR_ADDR_SHIFT) &
3199               EEPROM_ADDR_ADDR_MASK) |
3200              EEPROM_ADDR_READ | EEPROM_ADDR_START);
3201
3202         for (i = 0; i < 1000; i++) {
3203                 tmp = tr32(GRC_EEPROM_ADDR);
3204
3205                 if (tmp & EEPROM_ADDR_COMPLETE)
3206                         break;
3207                 msleep(1);
3208         }
3209         if (!(tmp & EEPROM_ADDR_COMPLETE))
3210                 return -EBUSY;
3211
3212         tmp = tr32(GRC_EEPROM_DATA);
3213
3214         /*
3215          * The data will always be opposite the native endian
3216          * format.  Perform a blind byteswap to compensate.
3217          */
3218         *val = swab32(tmp);
3219
3220         return 0;
3221 }
3222
3223 #define NVRAM_CMD_TIMEOUT 10000
3224
3225 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3226 {
3227         int i;
3228
3229         tw32(NVRAM_CMD, nvram_cmd);
3230         for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3231                 usleep_range(10, 40);
3232                 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3233                         udelay(10);
3234                         break;
3235                 }
3236         }
3237
3238         if (i == NVRAM_CMD_TIMEOUT)
3239                 return -EBUSY;
3240
3241         return 0;
3242 }
3243
3244 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3245 {
3246         if (tg3_flag(tp, NVRAM) &&
3247             tg3_flag(tp, NVRAM_BUFFERED) &&
3248             tg3_flag(tp, FLASH) &&
3249             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3250             (tp->nvram_jedecnum == JEDEC_ATMEL))
3251
3252                 addr = ((addr / tp->nvram_pagesize) <<
3253                         ATMEL_AT45DB0X1B_PAGE_POS) +
3254                        (addr % tp->nvram_pagesize);
3255
3256         return addr;
3257 }
3258
3259 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3260 {
3261         if (tg3_flag(tp, NVRAM) &&
3262             tg3_flag(tp, NVRAM_BUFFERED) &&
3263             tg3_flag(tp, FLASH) &&
3264             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3265             (tp->nvram_jedecnum == JEDEC_ATMEL))
3266
3267                 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3268                         tp->nvram_pagesize) +
3269                        (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3270
3271         return addr;
3272 }
3273
3274 /* NOTE: Data read in from NVRAM is byteswapped according to
3275  * the byteswapping settings for all other register accesses.
3276  * tg3 devices are BE devices, so on a BE machine, the data
3277  * returned will be exactly as it is seen in NVRAM.  On a LE
3278  * machine, the 32-bit value will be byteswapped.
3279  */
3280 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3281 {
3282         int ret;
3283
3284         if (!tg3_flag(tp, NVRAM))
3285                 return tg3_nvram_read_using_eeprom(tp, offset, val);
3286
3287         offset = tg3_nvram_phys_addr(tp, offset);
3288
3289         if (offset > NVRAM_ADDR_MSK)
3290                 return -EINVAL;
3291
3292         ret = tg3_nvram_lock(tp);
3293         if (ret)
3294                 return ret;
3295
3296         tg3_enable_nvram_access(tp);
3297
3298         tw32(NVRAM_ADDR, offset);
3299         ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3300                 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3301
3302         if (ret == 0)
3303                 *val = tr32(NVRAM_RDDATA);
3304
3305         tg3_disable_nvram_access(tp);
3306
3307         tg3_nvram_unlock(tp);
3308
3309         return ret;
3310 }
3311
3312 /* Ensures NVRAM data is in bytestream format. */
3313 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3314 {
3315         u32 v;
3316         int res = tg3_nvram_read(tp, offset, &v);
3317         if (!res)
3318                 *val = cpu_to_be32(v);
3319         return res;
3320 }
3321
3322 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3323                                     u32 offset, u32 len, u8 *buf)
3324 {
3325         int i, j, rc = 0;
3326         u32 val;
3327
3328         for (i = 0; i < len; i += 4) {
3329                 u32 addr;
3330                 __be32 data;
3331
3332                 addr = offset + i;
3333
3334                 memcpy(&data, buf + i, 4);
3335
3336                 /*
3337                  * The SEEPROM interface expects the data to always be opposite
3338                  * the native endian format.  We accomplish this by reversing
3339                  * all the operations that would have been performed on the
3340                  * data from a call to tg3_nvram_read_be32().
3341                  */
3342                 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3343
3344                 val = tr32(GRC_EEPROM_ADDR);
3345                 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3346
3347                 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3348                         EEPROM_ADDR_READ);
3349                 tw32(GRC_EEPROM_ADDR, val |
3350                         (0 << EEPROM_ADDR_DEVID_SHIFT) |
3351                         (addr & EEPROM_ADDR_ADDR_MASK) |
3352                         EEPROM_ADDR_START |
3353                         EEPROM_ADDR_WRITE);
3354
3355                 for (j = 0; j < 1000; j++) {
3356                         val = tr32(GRC_EEPROM_ADDR);
3357
3358                         if (val & EEPROM_ADDR_COMPLETE)
3359                                 break;
3360                         msleep(1);
3361                 }
3362                 if (!(val & EEPROM_ADDR_COMPLETE)) {
3363                         rc = -EBUSY;
3364                         break;
3365                 }
3366         }
3367
3368         return rc;
3369 }
3370
3371 /* offset and length are dword aligned */
3372 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3373                 u8 *buf)
3374 {
3375         int ret = 0;
3376         u32 pagesize = tp->nvram_pagesize;
3377         u32 pagemask = pagesize - 1;
3378         u32 nvram_cmd;
3379         u8 *tmp;
3380
3381         tmp = kmalloc(pagesize, GFP_KERNEL);
3382         if (tmp == NULL)
3383                 return -ENOMEM;
3384
3385         while (len) {
3386                 int j;
3387                 u32 phy_addr, page_off, size;
3388
3389                 phy_addr = offset & ~pagemask;
3390
3391                 for (j = 0; j < pagesize; j += 4) {
3392                         ret = tg3_nvram_read_be32(tp, phy_addr + j,
3393                                                   (__be32 *) (tmp + j));
3394                         if (ret)
3395                                 break;
3396                 }
3397                 if (ret)
3398                         break;
3399
3400                 page_off = offset & pagemask;
3401                 size = pagesize;
3402                 if (len < size)
3403                         size = len;
3404
3405                 len -= size;
3406
3407                 memcpy(tmp + page_off, buf, size);
3408
3409                 offset = offset + (pagesize - page_off);
3410
3411                 tg3_enable_nvram_access(tp);
3412
3413                 /*
3414                  * Before we can erase the flash page, we need
3415                  * to issue a special "write enable" command.
3416                  */
3417                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3418
3419                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3420                         break;
3421
3422                 /* Erase the target page */
3423                 tw32(NVRAM_ADDR, phy_addr);
3424
3425                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3426                         NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3427
3428                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3429                         break;
3430
3431                 /* Issue another write enable to start the write. */
3432                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3433
3434                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3435                         break;
3436
3437                 for (j = 0; j < pagesize; j += 4) {
3438                         __be32 data;
3439
3440                         data = *((__be32 *) (tmp + j));
3441
3442                         tw32(NVRAM_WRDATA, be32_to_cpu(data));
3443
3444                         tw32(NVRAM_ADDR, phy_addr + j);
3445
3446                         nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3447                                 NVRAM_CMD_WR;
3448
3449                         if (j == 0)
3450                                 nvram_cmd |= NVRAM_CMD_FIRST;
3451                         else if (j == (pagesize - 4))
3452                                 nvram_cmd |= NVRAM_CMD_LAST;
3453
3454                         ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3455                         if (ret)
3456                                 break;
3457                 }
3458                 if (ret)
3459                         break;
3460         }
3461
3462         nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3463         tg3_nvram_exec_cmd(tp, nvram_cmd);
3464
3465         kfree(tmp);
3466
3467         return ret;
3468 }
3469
3470 /* offset and length are dword aligned */
3471 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3472                 u8 *buf)
3473 {
3474         int i, ret = 0;
3475
3476         for (i = 0; i < len; i += 4, offset += 4) {
3477                 u32 page_off, phy_addr, nvram_cmd;
3478                 __be32 data;
3479
3480                 memcpy(&data, buf + i, 4);
3481                 tw32(NVRAM_WRDATA, be32_to_cpu(data));
3482
3483                 page_off = offset % tp->nvram_pagesize;
3484
3485                 phy_addr = tg3_nvram_phys_addr(tp, offset);
3486
3487                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3488
3489                 if (page_off == 0 || i == 0)
3490                         nvram_cmd |= NVRAM_CMD_FIRST;
3491                 if (page_off == (tp->nvram_pagesize - 4))
3492                         nvram_cmd |= NVRAM_CMD_LAST;
3493
3494                 if (i == (len - 4))
3495                         nvram_cmd |= NVRAM_CMD_LAST;
3496
3497                 if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3498                     !tg3_flag(tp, FLASH) ||
3499                     !tg3_flag(tp, 57765_PLUS))
3500                         tw32(NVRAM_ADDR, phy_addr);
3501
3502                 if (tg3_asic_rev(tp) != ASIC_REV_5752 &&
3503                     !tg3_flag(tp, 5755_PLUS) &&
3504                     (tp->nvram_jedecnum == JEDEC_ST) &&
3505                     (nvram_cmd & NVRAM_CMD_FIRST)) {
3506                         u32 cmd;
3507
3508                         cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3509                         ret = tg3_nvram_exec_cmd(tp, cmd);
3510                         if (ret)
3511                                 break;
3512                 }
3513                 if (!tg3_flag(tp, FLASH)) {
3514                         /* We always do complete word writes to eeprom. */
3515                         nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3516                 }
3517
3518                 ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3519                 if (ret)
3520                         break;
3521         }
3522         return ret;
3523 }
3524
3525 /* offset and length are dword aligned */
3526 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3527 {
3528         int ret;
3529
3530         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3531                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3532                        ~GRC_LCLCTRL_GPIO_OUTPUT1);
3533                 udelay(40);
3534         }
3535
3536         if (!tg3_flag(tp, NVRAM)) {
3537                 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3538         } else {
3539                 u32 grc_mode;
3540
3541                 ret = tg3_nvram_lock(tp);
3542                 if (ret)
3543                         return ret;
3544
3545                 tg3_enable_nvram_access(tp);
3546                 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3547                         tw32(NVRAM_WRITE1, 0x406);
3548
3549                 grc_mode = tr32(GRC_MODE);
3550                 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3551
3552                 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3553                         ret = tg3_nvram_write_block_buffered(tp, offset, len,
3554                                 buf);
3555                 } else {
3556                         ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3557                                 buf);
3558                 }
3559
3560                 grc_mode = tr32(GRC_MODE);
3561                 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3562
3563                 tg3_disable_nvram_access(tp);
3564                 tg3_nvram_unlock(tp);
3565         }
3566
3567         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3568                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3569                 udelay(40);
3570         }
3571
3572         return ret;
3573 }
3574
3575 #define RX_CPU_SCRATCH_BASE     0x30000
3576 #define RX_CPU_SCRATCH_SIZE     0x04000
3577 #define TX_CPU_SCRATCH_BASE     0x34000
3578 #define TX_CPU_SCRATCH_SIZE     0x04000
3579
3580 /* tp->lock is held. */
3581 static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base)
3582 {
3583         int i;
3584         const int iters = 10000;
3585
3586         for (i = 0; i < iters; i++) {
3587                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3588                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3589                 if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT)
3590                         break;
3591                 if (pci_channel_offline(tp->pdev))
3592                         return -EBUSY;
3593         }
3594
3595         return (i == iters) ? -EBUSY : 0;
3596 }
3597
3598 /* tp->lock is held. */
3599 static int tg3_rxcpu_pause(struct tg3 *tp)
3600 {
3601         int rc = tg3_pause_cpu(tp, RX_CPU_BASE);
3602
3603         tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3604         tw32_f(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3605         udelay(10);
3606
3607         return rc;
3608 }
3609
3610 /* tp->lock is held. */
3611 static int tg3_txcpu_pause(struct tg3 *tp)
3612 {
3613         return tg3_pause_cpu(tp, TX_CPU_BASE);
3614 }
3615
3616 /* tp->lock is held. */
3617 static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base)
3618 {
3619         tw32(cpu_base + CPU_STATE, 0xffffffff);
3620         tw32_f(cpu_base + CPU_MODE,  0x00000000);
3621 }
3622
3623 /* tp->lock is held. */
3624 static void tg3_rxcpu_resume(struct tg3 *tp)
3625 {
3626         tg3_resume_cpu(tp, RX_CPU_BASE);
3627 }
3628
3629 /* tp->lock is held. */
3630 static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base)
3631 {
3632         int rc;
3633
3634         BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3635
3636         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3637                 u32 val = tr32(GRC_VCPU_EXT_CTRL);
3638
3639                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3640                 return 0;
3641         }
3642         if (cpu_base == RX_CPU_BASE) {
3643                 rc = tg3_rxcpu_pause(tp);
3644         } else {
3645                 /*
3646                  * There is only an Rx CPU for the 5750 derivative in the
3647                  * BCM4785.
3648                  */
3649                 if (tg3_flag(tp, IS_SSB_CORE))
3650                         return 0;
3651
3652                 rc = tg3_txcpu_pause(tp);
3653         }
3654
3655         if (rc) {
3656                 netdev_err(tp->dev, "%s timed out, %s CPU\n",
3657                            __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX");
3658                 return -ENODEV;
3659         }
3660
3661         /* Clear firmware's nvram arbitration. */
3662         if (tg3_flag(tp, NVRAM))
3663                 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3664         return 0;
3665 }
3666
3667 static int tg3_fw_data_len(struct tg3 *tp,
3668                            const struct tg3_firmware_hdr *fw_hdr)
3669 {
3670         int fw_len;
3671
3672         /* Non fragmented firmware have one firmware header followed by a
3673          * contiguous chunk of data to be written. The length field in that
3674          * header is not the length of data to be written but the complete
3675          * length of the bss. The data length is determined based on
3676          * tp->fw->size minus headers.
3677          *
3678          * Fragmented firmware have a main header followed by multiple
3679          * fragments. Each fragment is identical to non fragmented firmware
3680          * with a firmware header followed by a contiguous chunk of data. In
3681          * the main header, the length field is unused and set to 0xffffffff.
3682          * In each fragment header the length is the entire size of that
3683          * fragment i.e. fragment data + header length. Data length is
3684          * therefore length field in the header minus TG3_FW_HDR_LEN.
3685          */
3686         if (tp->fw_len == 0xffffffff)
3687                 fw_len = be32_to_cpu(fw_hdr->len);
3688         else
3689                 fw_len = tp->fw->size;
3690
3691         return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32);
3692 }
3693
3694 /* tp->lock is held. */
3695 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3696                                  u32 cpu_scratch_base, int cpu_scratch_size,
3697                                  const struct tg3_firmware_hdr *fw_hdr)
3698 {
3699         int err, i;
3700         void (*write_op)(struct tg3 *, u32, u32);
3701         int total_len = tp->fw->size;
3702
3703         if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3704                 netdev_err(tp->dev,
3705                            "%s: Trying to load TX cpu firmware which is 5705\n",
3706                            __func__);
3707                 return -EINVAL;
3708         }
3709
3710         if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766)
3711                 write_op = tg3_write_mem;
3712         else
3713                 write_op = tg3_write_indirect_reg32;
3714
3715         if (tg3_asic_rev(tp) != ASIC_REV_57766) {
3716                 /* It is possible that bootcode is still loading at this point.
3717                  * Get the nvram lock first before halting the cpu.
3718                  */
3719                 int lock_err = tg3_nvram_lock(tp);
3720                 err = tg3_halt_cpu(tp, cpu_base);
3721                 if (!lock_err)
3722                         tg3_nvram_unlock(tp);
3723                 if (err)
3724                         goto out;
3725
3726                 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3727                         write_op(tp, cpu_scratch_base + i, 0);
3728                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3729                 tw32(cpu_base + CPU_MODE,
3730                      tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT);
3731         } else {
3732                 /* Subtract additional main header for fragmented firmware and
3733                  * advance to the first fragment
3734                  */
3735                 total_len -= TG3_FW_HDR_LEN;
3736                 fw_hdr++;
3737         }
3738
3739         do {
3740                 u32 *fw_data = (u32 *)(fw_hdr + 1);
3741                 for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++)
3742                         write_op(tp, cpu_scratch_base +
3743                                      (be32_to_cpu(fw_hdr->base_addr) & 0xffff) +
3744                                      (i * sizeof(u32)),
3745                                  be32_to_cpu(fw_data[i]));
3746
3747                 total_len -= be32_to_cpu(fw_hdr->len);
3748
3749                 /* Advance to next fragment */
3750                 fw_hdr = (struct tg3_firmware_hdr *)
3751                          ((void *)fw_hdr + be32_to_cpu(fw_hdr->len));
3752         } while (total_len > 0);
3753
3754         err = 0;
3755
3756 out:
3757         return err;
3758 }
3759
3760 /* tp->lock is held. */
3761 static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc)
3762 {
3763         int i;
3764         const int iters = 5;
3765
3766         tw32(cpu_base + CPU_STATE, 0xffffffff);
3767         tw32_f(cpu_base + CPU_PC, pc);
3768
3769         for (i = 0; i < iters; i++) {
3770                 if (tr32(cpu_base + CPU_PC) == pc)
3771                         break;
3772                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3773                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3774                 tw32_f(cpu_base + CPU_PC, pc);
3775                 udelay(1000);
3776         }
3777
3778         return (i == iters) ? -EBUSY : 0;
3779 }
3780
3781 /* tp->lock is held. */
3782 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3783 {
3784         const struct tg3_firmware_hdr *fw_hdr;
3785         int err;
3786
3787         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3788
3789         /* Firmware blob starts with version numbers, followed by
3790            start address and length. We are setting complete length.
3791            length = end_address_of_bss - start_address_of_text.
3792            Remainder is the blob to be loaded contiguously
3793            from start address. */
3794
3795         err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3796                                     RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3797                                     fw_hdr);
3798         if (err)
3799                 return err;
3800
3801         err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3802                                     TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3803                                     fw_hdr);
3804         if (err)
3805                 return err;
3806
3807         /* Now startup only the RX cpu. */
3808         err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE,
3809                                        be32_to_cpu(fw_hdr->base_addr));
3810         if (err) {
3811                 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3812                            "should be %08x\n", __func__,
3813                            tr32(RX_CPU_BASE + CPU_PC),
3814                                 be32_to_cpu(fw_hdr->base_addr));
3815                 return -ENODEV;
3816         }
3817
3818         tg3_rxcpu_resume(tp);
3819
3820         return 0;
3821 }
3822
3823 static int tg3_validate_rxcpu_state(struct tg3 *tp)
3824 {
3825         const int iters = 1000;
3826         int i;
3827         u32 val;
3828
3829         /* Wait for boot code to complete initialization and enter service
3830          * loop. It is then safe to download service patches
3831          */
3832         for (i = 0; i < iters; i++) {
3833                 if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP)
3834                         break;
3835
3836                 udelay(10);
3837         }
3838
3839         if (i == iters) {
3840                 netdev_err(tp->dev, "Boot code not ready for service patches\n");
3841                 return -EBUSY;
3842         }
3843
3844         val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE);
3845         if (val & 0xff) {
3846                 netdev_warn(tp->dev,
3847                             "Other patches exist. Not downloading EEE patch\n");
3848                 return -EEXIST;
3849         }
3850
3851         return 0;
3852 }
3853
3854 /* tp->lock is held. */
3855 static void tg3_load_57766_firmware(struct tg3 *tp)
3856 {
3857         struct tg3_firmware_hdr *fw_hdr;
3858
3859         if (!tg3_flag(tp, NO_NVRAM))
3860                 return;
3861
3862         if (tg3_validate_rxcpu_state(tp))
3863                 return;
3864
3865         if (!tp->fw)
3866                 return;
3867
3868         /* This firmware blob has a different format than older firmware
3869          * releases as given below. The main difference is we have fragmented
3870          * data to be written to non-contiguous locations.
3871          *
3872          * In the beginning we have a firmware header identical to other
3873          * firmware which consists of version, base addr and length. The length
3874          * here is unused and set to 0xffffffff.
3875          *
3876          * This is followed by a series of firmware fragments which are
3877          * individually identical to previous firmware. i.e. they have the
3878          * firmware header and followed by data for that fragment. The version
3879          * field of the individual fragment header is unused.
3880          */
3881
3882         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3883         if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR)
3884                 return;
3885
3886         if (tg3_rxcpu_pause(tp))
3887                 return;
3888
3889         /* tg3_load_firmware_cpu() will always succeed for the 57766 */
3890         tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr);
3891
3892         tg3_rxcpu_resume(tp);
3893 }
3894
3895 /* tp->lock is held. */
3896 static int tg3_load_tso_firmware(struct tg3 *tp)
3897 {
3898         const struct tg3_firmware_hdr *fw_hdr;
3899         unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3900         int err;
3901
3902         if (!tg3_flag(tp, FW_TSO))
3903                 return 0;
3904
3905         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3906
3907         /* Firmware blob starts with version numbers, followed by
3908            start address and length. We are setting complete length.
3909            length = end_address_of_bss - start_address_of_text.
3910            Remainder is the blob to be loaded contiguously
3911            from start address. */
3912
3913         cpu_scratch_size = tp->fw_len;
3914
3915         if (tg3_asic_rev(tp) == ASIC_REV_5705) {
3916                 cpu_base = RX_CPU_BASE;
3917                 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3918         } else {
3919                 cpu_base = TX_CPU_BASE;
3920                 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3921                 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3922         }
3923
3924         err = tg3_load_firmware_cpu(tp, cpu_base,
3925                                     cpu_scratch_base, cpu_scratch_size,
3926                                     fw_hdr);
3927         if (err)
3928                 return err;
3929
3930         /* Now startup the cpu. */
3931         err = tg3_pause_cpu_and_set_pc(tp, cpu_base,
3932                                        be32_to_cpu(fw_hdr->base_addr));
3933         if (err) {
3934                 netdev_err(tp->dev,
3935                            "%s fails to set CPU PC, is %08x should be %08x\n",
3936                            __func__, tr32(cpu_base + CPU_PC),
3937                            be32_to_cpu(fw_hdr->base_addr));
3938                 return -ENODEV;
3939         }
3940
3941         tg3_resume_cpu(tp, cpu_base);
3942         return 0;
3943 }
3944
3945 /* tp->lock is held. */
3946 static void __tg3_set_one_mac_addr(struct tg3 *tp, const u8 *mac_addr,
3947                                    int index)
3948 {
3949         u32 addr_high, addr_low;
3950
3951         addr_high = ((mac_addr[0] << 8) | mac_addr[1]);
3952         addr_low = ((mac_addr[2] << 24) | (mac_addr[3] << 16) |
3953                     (mac_addr[4] <<  8) | mac_addr[5]);
3954
3955         if (index < 4) {
3956                 tw32(MAC_ADDR_0_HIGH + (index * 8), addr_high);
3957                 tw32(MAC_ADDR_0_LOW + (index * 8), addr_low);
3958         } else {
3959                 index -= 4;
3960                 tw32(MAC_EXTADDR_0_HIGH + (index * 8), addr_high);
3961                 tw32(MAC_EXTADDR_0_LOW + (index * 8), addr_low);
3962         }
3963 }
3964
3965 /* tp->lock is held. */
3966 static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1)
3967 {
3968         u32 addr_high;
3969         int i;
3970
3971         for (i = 0; i < 4; i++) {
3972                 if (i == 1 && skip_mac_1)
3973                         continue;
3974                 __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3975         }
3976
3977         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
3978             tg3_asic_rev(tp) == ASIC_REV_5704) {
3979                 for (i = 4; i < 16; i++)
3980                         __tg3_set_one_mac_addr(tp, tp->dev->dev_addr, i);
3981         }
3982
3983         addr_high = (tp->dev->dev_addr[0] +
3984                      tp->dev->dev_addr[1] +
3985                      tp->dev->dev_addr[2] +
3986                      tp->dev->dev_addr[3] +
3987                      tp->dev->dev_addr[4] +
3988                      tp->dev->dev_addr[5]) &
3989                 TX_BACKOFF_SEED_MASK;
3990         tw32(MAC_TX_BACKOFF_SEED, addr_high);
3991 }
3992
3993 static void tg3_enable_register_access(struct tg3 *tp)
3994 {
3995         /*
3996          * Make sure register accesses (indirect or otherwise) will function
3997          * correctly.
3998          */
3999         pci_write_config_dword(tp->pdev,
4000                                TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
4001 }
4002
4003 static int tg3_power_up(struct tg3 *tp)
4004 {
4005         int err;
4006
4007         tg3_enable_register_access(tp);
4008
4009         err = pci_set_power_state(tp->pdev, PCI_D0);
4010         if (!err) {
4011                 /* Switch out of Vaux if it is a NIC */
4012                 tg3_pwrsrc_switch_to_vmain(tp);
4013         } else {
4014                 netdev_err(tp->dev, "Transition to D0 failed\n");
4015         }
4016
4017         return err;
4018 }
4019
4020 static int tg3_setup_phy(struct tg3 *, bool);
4021
4022 static int tg3_power_down_prepare(struct tg3 *tp)
4023 {
4024         u32 misc_host_ctrl;
4025         bool device_should_wake, do_low_power;
4026
4027         tg3_enable_register_access(tp);
4028
4029         /* Restore the CLKREQ setting. */
4030         if (tg3_flag(tp, CLKREQ_BUG))
4031                 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4032                                          PCI_EXP_LNKCTL_CLKREQ_EN);
4033
4034         misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
4035         tw32(TG3PCI_MISC_HOST_CTRL,
4036              misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
4037
4038         device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
4039                              tg3_flag(tp, WOL_ENABLE);
4040
4041         if (tg3_flag(tp, USE_PHYLIB)) {
4042                 do_low_power = false;
4043                 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
4044                     !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4045                         __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising) = { 0, };
4046                         struct phy_device *phydev;
4047                         u32 phyid;
4048
4049                         phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
4050
4051                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4052
4053                         tp->link_config.speed = phydev->speed;
4054                         tp->link_config.duplex = phydev->duplex;
4055                         tp->link_config.autoneg = phydev->autoneg;
4056                         ethtool_convert_link_mode_to_legacy_u32(
4057                                 &tp->link_config.advertising,
4058                                 phydev->advertising);
4059
4060                         linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, advertising);
4061                         linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT,
4062                                          advertising);
4063                         linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
4064                                          advertising);
4065                         linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
4066                                          advertising);
4067
4068                         if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
4069                                 if (tg3_flag(tp, WOL_SPEED_100MB)) {
4070                                         linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
4071                                                          advertising);
4072                                         linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
4073                                                          advertising);
4074                                         linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4075                                                          advertising);
4076                                 } else {
4077                                         linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
4078                                                          advertising);
4079                                 }
4080                         }
4081
4082                         linkmode_copy(phydev->advertising, advertising);
4083                         phy_start_aneg(phydev);
4084
4085                         phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
4086                         if (phyid != PHY_ID_BCMAC131) {
4087                                 phyid &= PHY_BCM_OUI_MASK;
4088                                 if (phyid == PHY_BCM_OUI_1 ||
4089                                     phyid == PHY_BCM_OUI_2 ||
4090                                     phyid == PHY_BCM_OUI_3)
4091                                         do_low_power = true;
4092                         }
4093                 }
4094         } else {
4095                 do_low_power = true;
4096
4097                 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
4098                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4099
4100                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
4101                         tg3_setup_phy(tp, false);
4102         }
4103
4104         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
4105                 u32 val;
4106
4107                 val = tr32(GRC_VCPU_EXT_CTRL);
4108                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
4109         } else if (!tg3_flag(tp, ENABLE_ASF)) {
4110                 int i;
4111                 u32 val;
4112
4113                 for (i = 0; i < 200; i++) {
4114                         tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
4115                         if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4116                                 break;
4117                         msleep(1);
4118                 }
4119         }
4120         if (tg3_flag(tp, WOL_CAP))
4121                 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
4122                                                      WOL_DRV_STATE_SHUTDOWN |
4123                                                      WOL_DRV_WOL |
4124                                                      WOL_SET_MAGIC_PKT);
4125
4126         if (device_should_wake) {
4127                 u32 mac_mode;
4128
4129                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
4130                         if (do_low_power &&
4131                             !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
4132                                 tg3_phy_auxctl_write(tp,
4133                                                MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
4134                                                MII_TG3_AUXCTL_PCTL_WOL_EN |
4135                                                MII_TG3_AUXCTL_PCTL_100TX_LPWR |
4136                                                MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
4137                                 udelay(40);
4138                         }
4139
4140                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4141                                 mac_mode = MAC_MODE_PORT_MODE_GMII;
4142                         else if (tp->phy_flags &
4143                                  TG3_PHYFLG_KEEP_LINK_ON_PWRDN) {
4144                                 if (tp->link_config.active_speed == SPEED_1000)
4145                                         mac_mode = MAC_MODE_PORT_MODE_GMII;
4146                                 else
4147                                         mac_mode = MAC_MODE_PORT_MODE_MII;
4148                         } else
4149                                 mac_mode = MAC_MODE_PORT_MODE_MII;
4150
4151                         mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
4152                         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
4153                                 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
4154                                              SPEED_100 : SPEED_10;
4155                                 if (tg3_5700_link_polarity(tp, speed))
4156                                         mac_mode |= MAC_MODE_LINK_POLARITY;
4157                                 else
4158                                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
4159                         }
4160                 } else {
4161                         mac_mode = MAC_MODE_PORT_MODE_TBI;
4162                 }
4163
4164                 if (!tg3_flag(tp, 5750_PLUS))
4165                         tw32(MAC_LED_CTRL, tp->led_ctrl);
4166
4167                 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
4168                 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
4169                     (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
4170                         mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
4171
4172                 if (tg3_flag(tp, ENABLE_APE))
4173                         mac_mode |= MAC_MODE_APE_TX_EN |
4174                                     MAC_MODE_APE_RX_EN |
4175                                     MAC_MODE_TDE_ENABLE;
4176
4177                 tw32_f(MAC_MODE, mac_mode);
4178                 udelay(100);
4179
4180                 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
4181                 udelay(10);
4182         }
4183
4184         if (!tg3_flag(tp, WOL_SPEED_100MB) &&
4185             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4186              tg3_asic_rev(tp) == ASIC_REV_5701)) {
4187                 u32 base_val;
4188
4189                 base_val = tp->pci_clock_ctrl;
4190                 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
4191                              CLOCK_CTRL_TXCLK_DISABLE);
4192
4193                 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
4194                             CLOCK_CTRL_PWRDOWN_PLL133, 40);
4195         } else if (tg3_flag(tp, 5780_CLASS) ||
4196                    tg3_flag(tp, CPMU_PRESENT) ||
4197                    tg3_asic_rev(tp) == ASIC_REV_5906) {
4198                 /* do nothing */
4199         } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
4200                 u32 newbits1, newbits2;
4201
4202                 if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4203                     tg3_asic_rev(tp) == ASIC_REV_5701) {
4204                         newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
4205                                     CLOCK_CTRL_TXCLK_DISABLE |
4206                                     CLOCK_CTRL_ALTCLK);
4207                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4208                 } else if (tg3_flag(tp, 5705_PLUS)) {
4209                         newbits1 = CLOCK_CTRL_625_CORE;
4210                         newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
4211                 } else {
4212                         newbits1 = CLOCK_CTRL_ALTCLK;
4213                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4214                 }
4215
4216                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
4217                             40);
4218
4219                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
4220                             40);
4221
4222                 if (!tg3_flag(tp, 5705_PLUS)) {
4223                         u32 newbits3;
4224
4225                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4226                             tg3_asic_rev(tp) == ASIC_REV_5701) {
4227                                 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
4228                                             CLOCK_CTRL_TXCLK_DISABLE |
4229                                             CLOCK_CTRL_44MHZ_CORE);
4230                         } else {
4231                                 newbits3 = CLOCK_CTRL_44MHZ_CORE;
4232                         }
4233
4234                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
4235                                     tp->pci_clock_ctrl | newbits3, 40);
4236                 }
4237         }
4238
4239         if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
4240                 tg3_power_down_phy(tp, do_low_power);
4241
4242         tg3_frob_aux_power(tp, true);
4243
4244         /* Workaround for unstable PLL clock */
4245         if ((!tg3_flag(tp, IS_SSB_CORE)) &&
4246             ((tg3_chip_rev(tp) == CHIPREV_5750_AX) ||
4247              (tg3_chip_rev(tp) == CHIPREV_5750_BX))) {
4248                 u32 val = tr32(0x7d00);
4249
4250                 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
4251                 tw32(0x7d00, val);
4252                 if (!tg3_flag(tp, ENABLE_ASF)) {
4253                         int err;
4254
4255                         err = tg3_nvram_lock(tp);
4256                         tg3_halt_cpu(tp, RX_CPU_BASE);
4257                         if (!err)
4258                                 tg3_nvram_unlock(tp);
4259                 }
4260         }
4261
4262         tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
4263
4264         tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
4265
4266         return 0;
4267 }
4268
4269 static void tg3_power_down(struct tg3 *tp)
4270 {
4271         pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
4272         pci_set_power_state(tp->pdev, PCI_D3hot);
4273 }
4274
4275 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex)
4276 {
4277         switch (val & MII_TG3_AUX_STAT_SPDMASK) {
4278         case MII_TG3_AUX_STAT_10HALF:
4279                 *speed = SPEED_10;
4280                 *duplex = DUPLEX_HALF;
4281                 break;
4282
4283         case MII_TG3_AUX_STAT_10FULL:
4284                 *speed = SPEED_10;
4285                 *duplex = DUPLEX_FULL;
4286                 break;
4287
4288         case MII_TG3_AUX_STAT_100HALF:
4289                 *speed = SPEED_100;
4290                 *duplex = DUPLEX_HALF;
4291                 break;
4292
4293         case MII_TG3_AUX_STAT_100FULL:
4294                 *speed = SPEED_100;
4295                 *duplex = DUPLEX_FULL;
4296                 break;
4297
4298         case MII_TG3_AUX_STAT_1000HALF:
4299                 *speed = SPEED_1000;
4300                 *duplex = DUPLEX_HALF;
4301                 break;
4302
4303         case MII_TG3_AUX_STAT_1000FULL:
4304                 *speed = SPEED_1000;
4305                 *duplex = DUPLEX_FULL;
4306                 break;
4307
4308         default:
4309                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4310                         *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
4311                                  SPEED_10;
4312                         *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
4313                                   DUPLEX_HALF;
4314                         break;
4315                 }
4316                 *speed = SPEED_UNKNOWN;
4317                 *duplex = DUPLEX_UNKNOWN;
4318                 break;
4319         }
4320 }
4321
4322 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
4323 {
4324         int err = 0;
4325         u32 val, new_adv;
4326
4327         new_adv = ADVERTISE_CSMA;
4328         new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
4329         new_adv |= mii_advertise_flowctrl(flowctrl);
4330
4331         err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
4332         if (err)
4333                 goto done;
4334
4335         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4336                 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
4337
4338                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4339                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)
4340                         new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4341
4342                 err = tg3_writephy(tp, MII_CTRL1000, new_adv);
4343                 if (err)
4344                         goto done;
4345         }
4346
4347         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4348                 goto done;
4349
4350         tw32(TG3_CPMU_EEE_MODE,
4351              tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
4352
4353         err = tg3_phy_toggle_auxctl_smdsp(tp, true);
4354         if (!err) {
4355                 u32 err2;
4356
4357                 val = 0;
4358                 /* Advertise 100-BaseTX EEE ability */
4359                 if (advertise & ADVERTISED_100baseT_Full)
4360                         val |= MDIO_AN_EEE_ADV_100TX;
4361                 /* Advertise 1000-BaseT EEE ability */
4362                 if (advertise & ADVERTISED_1000baseT_Full)
4363                         val |= MDIO_AN_EEE_ADV_1000T;
4364
4365                 if (!tp->eee.eee_enabled) {
4366                         val = 0;
4367                         tp->eee.advertised = 0;
4368                 } else {
4369                         tp->eee.advertised = advertise &
4370                                              (ADVERTISED_100baseT_Full |
4371                                               ADVERTISED_1000baseT_Full);
4372                 }
4373
4374                 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
4375                 if (err)
4376                         val = 0;
4377
4378                 switch (tg3_asic_rev(tp)) {
4379                 case ASIC_REV_5717:
4380                 case ASIC_REV_57765:
4381                 case ASIC_REV_57766:
4382                 case ASIC_REV_5719:
4383                         /* If we advertised any eee advertisements above... */
4384                         if (val)
4385                                 val = MII_TG3_DSP_TAP26_ALNOKO |
4386                                       MII_TG3_DSP_TAP26_RMRXSTO |
4387                                       MII_TG3_DSP_TAP26_OPCSINPT;
4388                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
4389                         fallthrough;
4390                 case ASIC_REV_5720:
4391                 case ASIC_REV_5762:
4392                         if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4393                                 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4394                                                  MII_TG3_DSP_CH34TP2_HIBW01);
4395                 }
4396
4397                 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false);
4398                 if (!err)
4399                         err = err2;
4400         }
4401
4402 done:
4403         return err;
4404 }
4405
4406 static void tg3_phy_copper_begin(struct tg3 *tp)
4407 {
4408         if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4409             (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4410                 u32 adv, fc;
4411
4412                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4413                     !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4414                         adv = ADVERTISED_10baseT_Half |
4415                               ADVERTISED_10baseT_Full;
4416                         if (tg3_flag(tp, WOL_SPEED_100MB))
4417                                 adv |= ADVERTISED_100baseT_Half |
4418                                        ADVERTISED_100baseT_Full;
4419                         if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK) {
4420                                 if (!(tp->phy_flags &
4421                                       TG3_PHYFLG_DISABLE_1G_HD_ADV))
4422                                         adv |= ADVERTISED_1000baseT_Half;
4423                                 adv |= ADVERTISED_1000baseT_Full;
4424                         }
4425
4426                         fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4427                 } else {
4428                         adv = tp->link_config.advertising;
4429                         if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4430                                 adv &= ~(ADVERTISED_1000baseT_Half |
4431                                          ADVERTISED_1000baseT_Full);
4432
4433                         fc = tp->link_config.flowctrl;
4434                 }
4435
4436                 tg3_phy_autoneg_cfg(tp, adv, fc);
4437
4438                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4439                     (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4440                         /* Normally during power down we want to autonegotiate
4441                          * the lowest possible speed for WOL. However, to avoid
4442                          * link flap, we leave it untouched.
4443                          */
4444                         return;
4445                 }
4446
4447                 tg3_writephy(tp, MII_BMCR,
4448                              BMCR_ANENABLE | BMCR_ANRESTART);
4449         } else {
4450                 int i;
4451                 u32 bmcr, orig_bmcr;
4452
4453                 tp->link_config.active_speed = tp->link_config.speed;
4454                 tp->link_config.active_duplex = tp->link_config.duplex;
4455
4456                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
4457                         /* With autoneg disabled, 5715 only links up when the
4458                          * advertisement register has the configured speed
4459                          * enabled.
4460                          */
4461                         tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL);
4462                 }
4463
4464                 bmcr = 0;
4465                 switch (tp->link_config.speed) {
4466                 default:
4467                 case SPEED_10:
4468                         break;
4469
4470                 case SPEED_100:
4471                         bmcr |= BMCR_SPEED100;
4472                         break;
4473
4474                 case SPEED_1000:
4475                         bmcr |= BMCR_SPEED1000;
4476                         break;
4477                 }
4478
4479                 if (tp->link_config.duplex == DUPLEX_FULL)
4480                         bmcr |= BMCR_FULLDPLX;
4481
4482                 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4483                     (bmcr != orig_bmcr)) {
4484                         tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4485                         for (i = 0; i < 1500; i++) {
4486                                 u32 tmp;
4487
4488                                 udelay(10);
4489                                 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4490                                     tg3_readphy(tp, MII_BMSR, &tmp))
4491                                         continue;
4492                                 if (!(tmp & BMSR_LSTATUS)) {
4493                                         udelay(40);
4494                                         break;
4495                                 }
4496                         }
4497                         tg3_writephy(tp, MII_BMCR, bmcr);
4498                         udelay(40);
4499                 }
4500         }
4501 }
4502
4503 static int tg3_phy_pull_config(struct tg3 *tp)
4504 {
4505         int err;
4506         u32 val;
4507
4508         err = tg3_readphy(tp, MII_BMCR, &val);
4509         if (err)
4510                 goto done;
4511
4512         if (!(val & BMCR_ANENABLE)) {
4513                 tp->link_config.autoneg = AUTONEG_DISABLE;
4514                 tp->link_config.advertising = 0;
4515                 tg3_flag_clear(tp, PAUSE_AUTONEG);
4516
4517                 err = -EIO;
4518
4519                 switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) {
4520                 case 0:
4521                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4522                                 goto done;
4523
4524                         tp->link_config.speed = SPEED_10;
4525                         break;
4526                 case BMCR_SPEED100:
4527                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4528                                 goto done;
4529
4530                         tp->link_config.speed = SPEED_100;
4531                         break;
4532                 case BMCR_SPEED1000:
4533                         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4534                                 tp->link_config.speed = SPEED_1000;
4535                                 break;
4536                         }
4537                         fallthrough;
4538                 default:
4539                         goto done;
4540                 }
4541
4542                 if (val & BMCR_FULLDPLX)
4543                         tp->link_config.duplex = DUPLEX_FULL;
4544                 else
4545                         tp->link_config.duplex = DUPLEX_HALF;
4546
4547                 tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
4548
4549                 err = 0;
4550                 goto done;
4551         }
4552
4553         tp->link_config.autoneg = AUTONEG_ENABLE;
4554         tp->link_config.advertising = ADVERTISED_Autoneg;
4555         tg3_flag_set(tp, PAUSE_AUTONEG);
4556
4557         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4558                 u32 adv;
4559
4560                 err = tg3_readphy(tp, MII_ADVERTISE, &val);
4561                 if (err)
4562                         goto done;
4563
4564                 adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL);
4565                 tp->link_config.advertising |= adv | ADVERTISED_TP;
4566
4567                 tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val);
4568         } else {
4569                 tp->link_config.advertising |= ADVERTISED_FIBRE;
4570         }
4571
4572         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4573                 u32 adv;
4574
4575                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4576                         err = tg3_readphy(tp, MII_CTRL1000, &val);
4577                         if (err)
4578                                 goto done;
4579
4580                         adv = mii_ctrl1000_to_ethtool_adv_t(val);
4581                 } else {
4582                         err = tg3_readphy(tp, MII_ADVERTISE, &val);
4583                         if (err)
4584                                 goto done;
4585
4586                         adv = tg3_decode_flowctrl_1000X(val);
4587                         tp->link_config.flowctrl = adv;
4588
4589                         val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL);
4590                         adv = mii_adv_to_ethtool_adv_x(val);
4591                 }
4592
4593                 tp->link_config.advertising |= adv;
4594         }
4595
4596 done:
4597         return err;
4598 }
4599
4600 static int tg3_init_5401phy_dsp(struct tg3 *tp)
4601 {
4602         int err;
4603
4604         /* Turn off tap power management. */
4605         /* Set Extended packet length bit */
4606         err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4607
4608         err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4609         err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4610         err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4611         err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4612         err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4613
4614         udelay(40);
4615
4616         return err;
4617 }
4618
4619 static bool tg3_phy_eee_config_ok(struct tg3 *tp)
4620 {
4621         struct ethtool_eee eee;
4622
4623         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4624                 return true;
4625
4626         tg3_eee_pull_config(tp, &eee);
4627
4628         if (tp->eee.eee_enabled) {
4629                 if (tp->eee.advertised != eee.advertised ||
4630                     tp->eee.tx_lpi_timer != eee.tx_lpi_timer ||
4631                     tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled)
4632                         return false;
4633         } else {
4634                 /* EEE is disabled but we're advertising */
4635                 if (eee.advertised)
4636                         return false;
4637         }
4638
4639         return true;
4640 }
4641
4642 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4643 {
4644         u32 advmsk, tgtadv, advertising;
4645
4646         advertising = tp->link_config.advertising;
4647         tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4648
4649         advmsk = ADVERTISE_ALL;
4650         if (tp->link_config.active_duplex == DUPLEX_FULL) {
4651                 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4652                 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4653         }
4654
4655         if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4656                 return false;
4657
4658         if ((*lcladv & advmsk) != tgtadv)
4659                 return false;
4660
4661         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4662                 u32 tg3_ctrl;
4663
4664                 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4665
4666                 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4667                         return false;
4668
4669                 if (tgtadv &&
4670                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4671                      tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) {
4672                         tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4673                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4674                                      CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4675                 } else {
4676                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4677                 }
4678
4679                 if (tg3_ctrl != tgtadv)
4680                         return false;
4681         }
4682
4683         return true;
4684 }
4685
4686 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4687 {
4688         u32 lpeth = 0;
4689
4690         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4691                 u32 val;
4692
4693                 if (tg3_readphy(tp, MII_STAT1000, &val))
4694                         return false;
4695
4696                 lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4697         }
4698
4699         if (tg3_readphy(tp, MII_LPA, rmtadv))
4700                 return false;
4701
4702         lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4703         tp->link_config.rmt_adv = lpeth;
4704
4705         return true;
4706 }
4707
4708 static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up)
4709 {
4710         if (curr_link_up != tp->link_up) {
4711                 if (curr_link_up) {
4712                         netif_carrier_on(tp->dev);
4713                 } else {
4714                         netif_carrier_off(tp->dev);
4715                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4716                                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4717                 }
4718
4719                 tg3_link_report(tp);
4720                 return true;
4721         }
4722
4723         return false;
4724 }
4725
4726 static void tg3_clear_mac_status(struct tg3 *tp)
4727 {
4728         tw32(MAC_EVENT, 0);
4729
4730         tw32_f(MAC_STATUS,
4731                MAC_STATUS_SYNC_CHANGED |
4732                MAC_STATUS_CFG_CHANGED |
4733                MAC_STATUS_MI_COMPLETION |
4734                MAC_STATUS_LNKSTATE_CHANGED);
4735         udelay(40);
4736 }
4737
4738 static void tg3_setup_eee(struct tg3 *tp)
4739 {
4740         u32 val;
4741
4742         val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
4743               TG3_CPMU_EEE_LNKIDL_UART_IDL;
4744         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
4745                 val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT;
4746
4747         tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val);
4748
4749         tw32_f(TG3_CPMU_EEE_CTRL,
4750                TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
4751
4752         val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
4753               (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) |
4754               TG3_CPMU_EEEMD_LPI_IN_RX |
4755               TG3_CPMU_EEEMD_EEE_ENABLE;
4756
4757         if (tg3_asic_rev(tp) != ASIC_REV_5717)
4758                 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
4759
4760         if (tg3_flag(tp, ENABLE_APE))
4761                 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
4762
4763         tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0);
4764
4765         tw32_f(TG3_CPMU_EEE_DBTMR1,
4766                TG3_CPMU_DBTMR1_PCIEXIT_2047US |
4767                (tp->eee.tx_lpi_timer & 0xffff));
4768
4769         tw32_f(TG3_CPMU_EEE_DBTMR2,
4770                TG3_CPMU_DBTMR2_APE_TX_2047US |
4771                TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
4772 }
4773
4774 static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
4775 {
4776         bool current_link_up;
4777         u32 bmsr, val;
4778         u32 lcl_adv, rmt_adv;
4779         u32 current_speed;
4780         u8 current_duplex;
4781         int i, err;
4782
4783         tg3_clear_mac_status(tp);
4784
4785         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4786                 tw32_f(MAC_MI_MODE,
4787                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4788                 udelay(80);
4789         }
4790
4791         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4792
4793         /* Some third-party PHYs need to be reset on link going
4794          * down.
4795          */
4796         if ((tg3_asic_rev(tp) == ASIC_REV_5703 ||
4797              tg3_asic_rev(tp) == ASIC_REV_5704 ||
4798              tg3_asic_rev(tp) == ASIC_REV_5705) &&
4799             tp->link_up) {
4800                 tg3_readphy(tp, MII_BMSR, &bmsr);
4801                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4802                     !(bmsr & BMSR_LSTATUS))
4803                         force_reset = true;
4804         }
4805         if (force_reset)
4806                 tg3_phy_reset(tp);
4807
4808         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4809                 tg3_readphy(tp, MII_BMSR, &bmsr);
4810                 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4811                     !tg3_flag(tp, INIT_COMPLETE))
4812                         bmsr = 0;
4813
4814                 if (!(bmsr & BMSR_LSTATUS)) {
4815                         err = tg3_init_5401phy_dsp(tp);
4816                         if (err)
4817                                 return err;
4818
4819                         tg3_readphy(tp, MII_BMSR, &bmsr);
4820                         for (i = 0; i < 1000; i++) {
4821                                 udelay(10);
4822                                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4823                                     (bmsr & BMSR_LSTATUS)) {
4824                                         udelay(40);
4825                                         break;
4826                                 }
4827                         }
4828
4829                         if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4830                             TG3_PHY_REV_BCM5401_B0 &&
4831                             !(bmsr & BMSR_LSTATUS) &&
4832                             tp->link_config.active_speed == SPEED_1000) {
4833                                 err = tg3_phy_reset(tp);
4834                                 if (!err)
4835                                         err = tg3_init_5401phy_dsp(tp);
4836                                 if (err)
4837                                         return err;
4838                         }
4839                 }
4840         } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4841                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) {
4842                 /* 5701 {A0,B0} CRC bug workaround */
4843                 tg3_writephy(tp, 0x15, 0x0a75);
4844                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4845                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4846                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4847         }
4848
4849         /* Clear pending interrupts... */
4850         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4851         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4852
4853         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4854                 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4855         else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4856                 tg3_writephy(tp, MII_TG3_IMASK, ~0);
4857
4858         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4859             tg3_asic_rev(tp) == ASIC_REV_5701) {
4860                 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4861                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
4862                                      MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4863                 else
4864                         tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4865         }
4866
4867         current_link_up = false;
4868         current_speed = SPEED_UNKNOWN;
4869         current_duplex = DUPLEX_UNKNOWN;
4870         tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4871         tp->link_config.rmt_adv = 0;
4872
4873         if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4874                 err = tg3_phy_auxctl_read(tp,
4875                                           MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4876                                           &val);
4877                 if (!err && !(val & (1 << 10))) {
4878                         tg3_phy_auxctl_write(tp,
4879                                              MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4880                                              val | (1 << 10));
4881                         goto relink;
4882                 }
4883         }
4884
4885         bmsr = 0;
4886         for (i = 0; i < 100; i++) {
4887                 tg3_readphy(tp, MII_BMSR, &bmsr);
4888                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4889                     (bmsr & BMSR_LSTATUS))
4890                         break;
4891                 udelay(40);
4892         }
4893
4894         if (bmsr & BMSR_LSTATUS) {
4895                 u32 aux_stat, bmcr;
4896
4897                 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4898                 for (i = 0; i < 2000; i++) {
4899                         udelay(10);
4900                         if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4901                             aux_stat)
4902                                 break;
4903                 }
4904
4905                 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4906                                              &current_speed,
4907                                              &current_duplex);
4908
4909                 bmcr = 0;
4910                 for (i = 0; i < 200; i++) {
4911                         tg3_readphy(tp, MII_BMCR, &bmcr);
4912                         if (tg3_readphy(tp, MII_BMCR, &bmcr))
4913                                 continue;
4914                         if (bmcr && bmcr != 0x7fff)
4915                                 break;
4916                         udelay(10);
4917                 }
4918
4919                 lcl_adv = 0;
4920                 rmt_adv = 0;
4921
4922                 tp->link_config.active_speed = current_speed;
4923                 tp->link_config.active_duplex = current_duplex;
4924
4925                 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4926                         bool eee_config_ok = tg3_phy_eee_config_ok(tp);
4927
4928                         if ((bmcr & BMCR_ANENABLE) &&
4929                             eee_config_ok &&
4930                             tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4931                             tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4932                                 current_link_up = true;
4933
4934                         /* EEE settings changes take effect only after a phy
4935                          * reset.  If we have skipped a reset due to Link Flap
4936                          * Avoidance being enabled, do it now.
4937                          */
4938                         if (!eee_config_ok &&
4939                             (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
4940                             !force_reset) {
4941                                 tg3_setup_eee(tp);
4942                                 tg3_phy_reset(tp);
4943                         }
4944                 } else {
4945                         if (!(bmcr & BMCR_ANENABLE) &&
4946                             tp->link_config.speed == current_speed &&
4947                             tp->link_config.duplex == current_duplex) {
4948                                 current_link_up = true;
4949                         }
4950                 }
4951
4952                 if (current_link_up &&
4953                     tp->link_config.active_duplex == DUPLEX_FULL) {
4954                         u32 reg, bit;
4955
4956                         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4957                                 reg = MII_TG3_FET_GEN_STAT;
4958                                 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4959                         } else {
4960                                 reg = MII_TG3_EXT_STAT;
4961                                 bit = MII_TG3_EXT_STAT_MDIX;
4962                         }
4963
4964                         if (!tg3_readphy(tp, reg, &val) && (val & bit))
4965                                 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4966
4967                         tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4968                 }
4969         }
4970
4971 relink:
4972         if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4973                 tg3_phy_copper_begin(tp);
4974
4975                 if (tg3_flag(tp, ROBOSWITCH)) {
4976                         current_link_up = true;
4977                         /* FIXME: when BCM5325 switch is used use 100 MBit/s */
4978                         current_speed = SPEED_1000;
4979                         current_duplex = DUPLEX_FULL;
4980                         tp->link_config.active_speed = current_speed;
4981                         tp->link_config.active_duplex = current_duplex;
4982                 }
4983
4984                 tg3_readphy(tp, MII_BMSR, &bmsr);
4985                 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4986                     (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4987                         current_link_up = true;
4988         }
4989
4990         tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4991         if (current_link_up) {
4992                 if (tp->link_config.active_speed == SPEED_100 ||
4993                     tp->link_config.active_speed == SPEED_10)
4994                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4995                 else
4996                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4997         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4998                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4999         else
5000                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5001
5002         /* In order for the 5750 core in BCM4785 chip to work properly
5003          * in RGMII mode, the Led Control Register must be set up.
5004          */
5005         if (tg3_flag(tp, RGMII_MODE)) {
5006                 u32 led_ctrl = tr32(MAC_LED_CTRL);
5007                 led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON);
5008
5009                 if (tp->link_config.active_speed == SPEED_10)
5010                         led_ctrl |= LED_CTRL_LNKLED_OVERRIDE;
5011                 else if (tp->link_config.active_speed == SPEED_100)
5012                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5013                                      LED_CTRL_100MBPS_ON);
5014                 else if (tp->link_config.active_speed == SPEED_1000)
5015                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5016                                      LED_CTRL_1000MBPS_ON);
5017
5018                 tw32(MAC_LED_CTRL, led_ctrl);
5019                 udelay(40);
5020         }
5021
5022         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5023         if (tp->link_config.active_duplex == DUPLEX_HALF)
5024                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5025
5026         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
5027                 if (current_link_up &&
5028                     tg3_5700_link_polarity(tp, tp->link_config.active_speed))
5029                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
5030                 else
5031                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
5032         }
5033
5034         /* ??? Without this setting Netgear GA302T PHY does not
5035          * ??? send/receive packets...
5036          */
5037         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
5038             tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) {
5039                 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
5040                 tw32_f(MAC_MI_MODE, tp->mi_mode);
5041                 udelay(80);
5042         }
5043
5044         tw32_f(MAC_MODE, tp->mac_mode);
5045         udelay(40);
5046
5047         tg3_phy_eee_adjust(tp, current_link_up);
5048
5049         if (tg3_flag(tp, USE_LINKCHG_REG)) {
5050                 /* Polled via timer. */
5051                 tw32_f(MAC_EVENT, 0);
5052         } else {
5053                 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5054         }
5055         udelay(40);
5056
5057         if (tg3_asic_rev(tp) == ASIC_REV_5700 &&
5058             current_link_up &&
5059             tp->link_config.active_speed == SPEED_1000 &&
5060             (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
5061                 udelay(120);
5062                 tw32_f(MAC_STATUS,
5063                      (MAC_STATUS_SYNC_CHANGED |
5064                       MAC_STATUS_CFG_CHANGED));
5065                 udelay(40);
5066                 tg3_write_mem(tp,
5067                               NIC_SRAM_FIRMWARE_MBOX,
5068                               NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
5069         }
5070
5071         /* Prevent send BD corruption. */
5072         if (tg3_flag(tp, CLKREQ_BUG)) {
5073                 if (tp->link_config.active_speed == SPEED_100 ||
5074                     tp->link_config.active_speed == SPEED_10)
5075                         pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
5076                                                    PCI_EXP_LNKCTL_CLKREQ_EN);
5077                 else
5078                         pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
5079                                                  PCI_EXP_LNKCTL_CLKREQ_EN);
5080         }
5081
5082         tg3_test_and_report_link_chg(tp, current_link_up);
5083
5084         return 0;
5085 }
5086
5087 struct tg3_fiber_aneginfo {
5088         int state;
5089 #define ANEG_STATE_UNKNOWN              0
5090 #define ANEG_STATE_AN_ENABLE            1
5091 #define ANEG_STATE_RESTART_INIT         2
5092 #define ANEG_STATE_RESTART              3
5093 #define ANEG_STATE_DISABLE_LINK_OK      4
5094 #define ANEG_STATE_ABILITY_DETECT_INIT  5
5095 #define ANEG_STATE_ABILITY_DETECT       6
5096 #define ANEG_STATE_ACK_DETECT_INIT      7
5097 #define ANEG_STATE_ACK_DETECT           8
5098 #define ANEG_STATE_COMPLETE_ACK_INIT    9
5099 #define ANEG_STATE_COMPLETE_ACK         10
5100 #define ANEG_STATE_IDLE_DETECT_INIT     11
5101 #define ANEG_STATE_IDLE_DETECT          12
5102 #define ANEG_STATE_LINK_OK              13
5103 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT  14
5104 #define ANEG_STATE_NEXT_PAGE_WAIT       15
5105
5106         u32 flags;
5107 #define MR_AN_ENABLE            0x00000001
5108 #define MR_RESTART_AN           0x00000002
5109 #define MR_AN_COMPLETE          0x00000004
5110 #define MR_PAGE_RX              0x00000008
5111 #define MR_NP_LOADED            0x00000010
5112 #define MR_TOGGLE_TX            0x00000020
5113 #define MR_LP_ADV_FULL_DUPLEX   0x00000040
5114 #define MR_LP_ADV_HALF_DUPLEX   0x00000080
5115 #define MR_LP_ADV_SYM_PAUSE     0x00000100
5116 #define MR_LP_ADV_ASYM_PAUSE    0x00000200
5117 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400
5118 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800
5119 #define MR_LP_ADV_NEXT_PAGE     0x00001000
5120 #define MR_TOGGLE_RX            0x00002000
5121 #define MR_NP_RX                0x00004000
5122
5123 #define MR_LINK_OK              0x80000000
5124
5125         unsigned long link_time, cur_time;
5126
5127         u32 ability_match_cfg;
5128         int ability_match_count;
5129
5130         char ability_match, idle_match, ack_match;
5131
5132         u32 txconfig, rxconfig;
5133 #define ANEG_CFG_NP             0x00000080
5134 #define ANEG_CFG_ACK            0x00000040
5135 #define ANEG_CFG_RF2            0x00000020
5136 #define ANEG_CFG_RF1            0x00000010
5137 #define ANEG_CFG_PS2            0x00000001
5138 #define ANEG_CFG_PS1            0x00008000
5139 #define ANEG_CFG_HD             0x00004000
5140 #define ANEG_CFG_FD             0x00002000
5141 #define ANEG_CFG_INVAL          0x00001f06
5142
5143 };
5144 #define ANEG_OK         0
5145 #define ANEG_DONE       1
5146 #define ANEG_TIMER_ENAB 2
5147 #define ANEG_FAILED     -1
5148
5149 #define ANEG_STATE_SETTLE_TIME  10000
5150
5151 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
5152                                    struct tg3_fiber_aneginfo *ap)
5153 {
5154         u16 flowctrl;
5155         unsigned long delta;
5156         u32 rx_cfg_reg;
5157         int ret;
5158
5159         if (ap->state == ANEG_STATE_UNKNOWN) {
5160                 ap->rxconfig = 0;
5161                 ap->link_time = 0;
5162                 ap->cur_time = 0;
5163                 ap->ability_match_cfg = 0;
5164                 ap->ability_match_count = 0;
5165                 ap->ability_match = 0;
5166                 ap->idle_match = 0;
5167                 ap->ack_match = 0;
5168         }
5169         ap->cur_time++;
5170
5171         if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
5172                 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
5173
5174                 if (rx_cfg_reg != ap->ability_match_cfg) {
5175                         ap->ability_match_cfg = rx_cfg_reg;
5176                         ap->ability_match = 0;
5177                         ap->ability_match_count = 0;
5178                 } else {
5179                         if (++ap->ability_match_count > 1) {
5180                                 ap->ability_match = 1;
5181                                 ap->ability_match_cfg = rx_cfg_reg;
5182                         }
5183                 }
5184                 if (rx_cfg_reg & ANEG_CFG_ACK)
5185                         ap->ack_match = 1;
5186                 else
5187                         ap->ack_match = 0;
5188
5189                 ap->idle_match = 0;
5190         } else {
5191                 ap->idle_match = 1;
5192                 ap->ability_match_cfg = 0;
5193                 ap->ability_match_count = 0;
5194                 ap->ability_match = 0;
5195                 ap->ack_match = 0;
5196
5197                 rx_cfg_reg = 0;
5198         }
5199
5200         ap->rxconfig = rx_cfg_reg;
5201         ret = ANEG_OK;
5202
5203         switch (ap->state) {
5204         case ANEG_STATE_UNKNOWN:
5205                 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
5206                         ap->state = ANEG_STATE_AN_ENABLE;
5207
5208                 fallthrough;
5209         case ANEG_STATE_AN_ENABLE:
5210                 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
5211                 if (ap->flags & MR_AN_ENABLE) {
5212                         ap->link_time = 0;
5213                         ap->cur_time = 0;
5214                         ap->ability_match_cfg = 0;
5215                         ap->ability_match_count = 0;
5216                         ap->ability_match = 0;
5217                         ap->idle_match = 0;
5218                         ap->ack_match = 0;
5219
5220                         ap->state = ANEG_STATE_RESTART_INIT;
5221                 } else {
5222                         ap->state = ANEG_STATE_DISABLE_LINK_OK;
5223                 }
5224                 break;
5225
5226         case ANEG_STATE_RESTART_INIT:
5227                 ap->link_time = ap->cur_time;
5228                 ap->flags &= ~(MR_NP_LOADED);
5229                 ap->txconfig = 0;
5230                 tw32(MAC_TX_AUTO_NEG, 0);
5231                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5232                 tw32_f(MAC_MODE, tp->mac_mode);
5233                 udelay(40);
5234
5235                 ret = ANEG_TIMER_ENAB;
5236                 ap->state = ANEG_STATE_RESTART;
5237
5238                 fallthrough;
5239         case ANEG_STATE_RESTART:
5240                 delta = ap->cur_time - ap->link_time;
5241                 if (delta > ANEG_STATE_SETTLE_TIME)
5242                         ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
5243                 else
5244                         ret = ANEG_TIMER_ENAB;
5245                 break;
5246
5247         case ANEG_STATE_DISABLE_LINK_OK:
5248                 ret = ANEG_DONE;
5249                 break;
5250
5251         case ANEG_STATE_ABILITY_DETECT_INIT:
5252                 ap->flags &= ~(MR_TOGGLE_TX);
5253                 ap->txconfig = ANEG_CFG_FD;
5254                 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5255                 if (flowctrl & ADVERTISE_1000XPAUSE)
5256                         ap->txconfig |= ANEG_CFG_PS1;
5257                 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5258                         ap->txconfig |= ANEG_CFG_PS2;
5259                 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5260                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5261                 tw32_f(MAC_MODE, tp->mac_mode);
5262                 udelay(40);
5263
5264                 ap->state = ANEG_STATE_ABILITY_DETECT;
5265                 break;
5266
5267         case ANEG_STATE_ABILITY_DETECT:
5268                 if (ap->ability_match != 0 && ap->rxconfig != 0)
5269                         ap->state = ANEG_STATE_ACK_DETECT_INIT;
5270                 break;
5271
5272         case ANEG_STATE_ACK_DETECT_INIT:
5273                 ap->txconfig |= ANEG_CFG_ACK;
5274                 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5275                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5276                 tw32_f(MAC_MODE, tp->mac_mode);
5277                 udelay(40);
5278
5279                 ap->state = ANEG_STATE_ACK_DETECT;
5280
5281                 fallthrough;
5282         case ANEG_STATE_ACK_DETECT:
5283                 if (ap->ack_match != 0) {
5284                         if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
5285                             (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
5286                                 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
5287                         } else {
5288                                 ap->state = ANEG_STATE_AN_ENABLE;
5289                         }
5290                 } else if (ap->ability_match != 0 &&
5291                            ap->rxconfig == 0) {
5292                         ap->state = ANEG_STATE_AN_ENABLE;
5293                 }
5294                 break;
5295
5296         case ANEG_STATE_COMPLETE_ACK_INIT:
5297                 if (ap->rxconfig & ANEG_CFG_INVAL) {
5298                         ret = ANEG_FAILED;
5299                         break;
5300                 }
5301                 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
5302                                MR_LP_ADV_HALF_DUPLEX |
5303                                MR_LP_ADV_SYM_PAUSE |
5304                                MR_LP_ADV_ASYM_PAUSE |
5305                                MR_LP_ADV_REMOTE_FAULT1 |
5306                                MR_LP_ADV_REMOTE_FAULT2 |
5307                                MR_LP_ADV_NEXT_PAGE |
5308                                MR_TOGGLE_RX |
5309                                MR_NP_RX);
5310                 if (ap->rxconfig & ANEG_CFG_FD)
5311                         ap->flags |= MR_LP_ADV_FULL_DUPLEX;
5312                 if (ap->rxconfig & ANEG_CFG_HD)
5313                         ap->flags |= MR_LP_ADV_HALF_DUPLEX;
5314                 if (ap->rxconfig & ANEG_CFG_PS1)
5315                         ap->flags |= MR_LP_ADV_SYM_PAUSE;
5316                 if (ap->rxconfig & ANEG_CFG_PS2)
5317                         ap->flags |= MR_LP_ADV_ASYM_PAUSE;
5318                 if (ap->rxconfig & ANEG_CFG_RF1)
5319                         ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
5320                 if (ap->rxconfig & ANEG_CFG_RF2)
5321                         ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
5322                 if (ap->rxconfig & ANEG_CFG_NP)
5323                         ap->flags |= MR_LP_ADV_NEXT_PAGE;
5324
5325                 ap->link_time = ap->cur_time;
5326
5327                 ap->flags ^= (MR_TOGGLE_TX);
5328                 if (ap->rxconfig & 0x0008)
5329                         ap->flags |= MR_TOGGLE_RX;
5330                 if (ap->rxconfig & ANEG_CFG_NP)
5331                         ap->flags |= MR_NP_RX;
5332                 ap->flags |= MR_PAGE_RX;
5333
5334                 ap->state = ANEG_STATE_COMPLETE_ACK;
5335                 ret = ANEG_TIMER_ENAB;
5336                 break;
5337
5338         case ANEG_STATE_COMPLETE_ACK:
5339                 if (ap->ability_match != 0 &&
5340                     ap->rxconfig == 0) {
5341                         ap->state = ANEG_STATE_AN_ENABLE;
5342                         break;
5343                 }
5344                 delta = ap->cur_time - ap->link_time;
5345                 if (delta > ANEG_STATE_SETTLE_TIME) {
5346                         if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
5347                                 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5348                         } else {
5349                                 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
5350                                     !(ap->flags & MR_NP_RX)) {
5351                                         ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5352                                 } else {
5353                                         ret = ANEG_FAILED;
5354                                 }
5355                         }
5356                 }
5357                 break;
5358
5359         case ANEG_STATE_IDLE_DETECT_INIT:
5360                 ap->link_time = ap->cur_time;
5361                 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5362                 tw32_f(MAC_MODE, tp->mac_mode);
5363                 udelay(40);
5364
5365                 ap->state = ANEG_STATE_IDLE_DETECT;
5366                 ret = ANEG_TIMER_ENAB;
5367                 break;
5368
5369         case ANEG_STATE_IDLE_DETECT:
5370                 if (ap->ability_match != 0 &&
5371                     ap->rxconfig == 0) {
5372                         ap->state = ANEG_STATE_AN_ENABLE;
5373                         break;
5374                 }
5375                 delta = ap->cur_time - ap->link_time;
5376                 if (delta > ANEG_STATE_SETTLE_TIME) {
5377                         /* XXX another gem from the Broadcom driver :( */
5378                         ap->state = ANEG_STATE_LINK_OK;
5379                 }
5380                 break;
5381
5382         case ANEG_STATE_LINK_OK:
5383                 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
5384                 ret = ANEG_DONE;
5385                 break;
5386
5387         case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
5388                 /* ??? unimplemented */
5389                 break;
5390
5391         case ANEG_STATE_NEXT_PAGE_WAIT:
5392                 /* ??? unimplemented */
5393                 break;
5394
5395         default:
5396                 ret = ANEG_FAILED;
5397                 break;
5398         }
5399
5400         return ret;
5401 }
5402
5403 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
5404 {
5405         int res = 0;
5406         struct tg3_fiber_aneginfo aninfo;
5407         int status = ANEG_FAILED;
5408         unsigned int tick;
5409         u32 tmp;
5410
5411         tw32_f(MAC_TX_AUTO_NEG, 0);
5412
5413         tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
5414         tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
5415         udelay(40);
5416
5417         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
5418         udelay(40);
5419
5420         memset(&aninfo, 0, sizeof(aninfo));
5421         aninfo.flags |= MR_AN_ENABLE;
5422         aninfo.state = ANEG_STATE_UNKNOWN;
5423         aninfo.cur_time = 0;
5424         tick = 0;
5425         while (++tick < 195000) {
5426                 status = tg3_fiber_aneg_smachine(tp, &aninfo);
5427                 if (status == ANEG_DONE || status == ANEG_FAILED)
5428                         break;
5429
5430                 udelay(1);
5431         }
5432
5433         tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5434         tw32_f(MAC_MODE, tp->mac_mode);
5435         udelay(40);
5436
5437         *txflags = aninfo.txconfig;
5438         *rxflags = aninfo.flags;
5439
5440         if (status == ANEG_DONE &&
5441             (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
5442                              MR_LP_ADV_FULL_DUPLEX)))
5443                 res = 1;
5444
5445         return res;
5446 }
5447
5448 static void tg3_init_bcm8002(struct tg3 *tp)
5449 {
5450         u32 mac_status = tr32(MAC_STATUS);
5451         int i;
5452
5453         /* Reset when initting first time or we have a link. */
5454         if (tg3_flag(tp, INIT_COMPLETE) &&
5455             !(mac_status & MAC_STATUS_PCS_SYNCED))
5456                 return;
5457
5458         /* Set PLL lock range. */
5459         tg3_writephy(tp, 0x16, 0x8007);
5460
5461         /* SW reset */
5462         tg3_writephy(tp, MII_BMCR, BMCR_RESET);
5463
5464         /* Wait for reset to complete. */
5465         /* XXX schedule_timeout() ... */
5466         for (i = 0; i < 500; i++)
5467                 udelay(10);
5468
5469         /* Config mode; select PMA/Ch 1 regs. */
5470         tg3_writephy(tp, 0x10, 0x8411);
5471
5472         /* Enable auto-lock and comdet, select txclk for tx. */
5473         tg3_writephy(tp, 0x11, 0x0a10);
5474
5475         tg3_writephy(tp, 0x18, 0x00a0);
5476         tg3_writephy(tp, 0x16, 0x41ff);
5477
5478         /* Assert and deassert POR. */
5479         tg3_writephy(tp, 0x13, 0x0400);
5480         udelay(40);
5481         tg3_writephy(tp, 0x13, 0x0000);
5482
5483         tg3_writephy(tp, 0x11, 0x0a50);
5484         udelay(40);
5485         tg3_writephy(tp, 0x11, 0x0a10);
5486
5487         /* Wait for signal to stabilize */
5488         /* XXX schedule_timeout() ... */
5489         for (i = 0; i < 15000; i++)
5490                 udelay(10);
5491
5492         /* Deselect the channel register so we can read the PHYID
5493          * later.
5494          */
5495         tg3_writephy(tp, 0x10, 0x8011);
5496 }
5497
5498 static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
5499 {
5500         u16 flowctrl;
5501         bool current_link_up;
5502         u32 sg_dig_ctrl, sg_dig_status;
5503         u32 serdes_cfg, expected_sg_dig_ctrl;
5504         int workaround, port_a;
5505
5506         serdes_cfg = 0;
5507         workaround = 0;
5508         port_a = 1;
5509         current_link_up = false;
5510
5511         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 &&
5512             tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) {
5513                 workaround = 1;
5514                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
5515                         port_a = 0;
5516
5517                 /* preserve bits 0-11,13,14 for signal pre-emphasis */
5518                 /* preserve bits 20-23 for voltage regulator */
5519                 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
5520         }
5521
5522         sg_dig_ctrl = tr32(SG_DIG_CTRL);
5523
5524         if (tp->link_config.autoneg != AUTONEG_ENABLE) {
5525                 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
5526                         if (workaround) {
5527                                 u32 val = serdes_cfg;
5528
5529                                 if (port_a)
5530                                         val |= 0xc010000;
5531                                 else
5532                                         val |= 0x4010000;
5533                                 tw32_f(MAC_SERDES_CFG, val);
5534                         }
5535
5536                         tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5537                 }
5538                 if (mac_status & MAC_STATUS_PCS_SYNCED) {
5539                         tg3_setup_flow_control(tp, 0, 0);
5540                         current_link_up = true;
5541                 }
5542                 goto out;
5543         }
5544
5545         /* Want auto-negotiation.  */
5546         expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
5547
5548         flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5549         if (flowctrl & ADVERTISE_1000XPAUSE)
5550                 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
5551         if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5552                 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
5553
5554         if (sg_dig_ctrl != expected_sg_dig_ctrl) {
5555                 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
5556                     tp->serdes_counter &&
5557                     ((mac_status & (MAC_STATUS_PCS_SYNCED |
5558                                     MAC_STATUS_RCVD_CFG)) ==
5559                      MAC_STATUS_PCS_SYNCED)) {
5560                         tp->serdes_counter--;
5561                         current_link_up = true;
5562                         goto out;
5563                 }
5564 restart_autoneg:
5565                 if (workaround)
5566                         tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
5567                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
5568                 udelay(5);
5569                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
5570
5571                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5572                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5573         } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
5574                                  MAC_STATUS_SIGNAL_DET)) {
5575                 sg_dig_status = tr32(SG_DIG_STATUS);
5576                 mac_status = tr32(MAC_STATUS);
5577
5578                 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
5579                     (mac_status & MAC_STATUS_PCS_SYNCED)) {
5580                         u32 local_adv = 0, remote_adv = 0;
5581
5582                         if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
5583                                 local_adv |= ADVERTISE_1000XPAUSE;
5584                         if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
5585                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5586
5587                         if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
5588                                 remote_adv |= LPA_1000XPAUSE;
5589                         if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
5590                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5591
5592                         tp->link_config.rmt_adv =
5593                                            mii_adv_to_ethtool_adv_x(remote_adv);
5594
5595                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5596                         current_link_up = true;
5597                         tp->serdes_counter = 0;
5598                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5599                 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
5600                         if (tp->serdes_counter)
5601                                 tp->serdes_counter--;
5602                         else {
5603                                 if (workaround) {
5604                                         u32 val = serdes_cfg;
5605
5606                                         if (port_a)
5607                                                 val |= 0xc010000;
5608                                         else
5609                                                 val |= 0x4010000;
5610
5611                                         tw32_f(MAC_SERDES_CFG, val);
5612                                 }
5613
5614                                 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5615                                 udelay(40);
5616
5617                                 /* Link parallel detection - link is up */
5618                                 /* only if we have PCS_SYNC and not */
5619                                 /* receiving config code words */
5620                                 mac_status = tr32(MAC_STATUS);
5621                                 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5622                                     !(mac_status & MAC_STATUS_RCVD_CFG)) {
5623                                         tg3_setup_flow_control(tp, 0, 0);
5624                                         current_link_up = true;
5625                                         tp->phy_flags |=
5626                                                 TG3_PHYFLG_PARALLEL_DETECT;
5627                                         tp->serdes_counter =
5628                                                 SERDES_PARALLEL_DET_TIMEOUT;
5629                                 } else
5630                                         goto restart_autoneg;
5631                         }
5632                 }
5633         } else {
5634                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5635                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5636         }
5637
5638 out:
5639         return current_link_up;
5640 }
5641
5642 static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5643 {
5644         bool current_link_up = false;
5645
5646         if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5647                 goto out;
5648
5649         if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5650                 u32 txflags, rxflags;
5651                 int i;
5652
5653                 if (fiber_autoneg(tp, &txflags, &rxflags)) {
5654                         u32 local_adv = 0, remote_adv = 0;
5655
5656                         if (txflags & ANEG_CFG_PS1)
5657                                 local_adv |= ADVERTISE_1000XPAUSE;
5658                         if (txflags & ANEG_CFG_PS2)
5659                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5660
5661                         if (rxflags & MR_LP_ADV_SYM_PAUSE)
5662                                 remote_adv |= LPA_1000XPAUSE;
5663                         if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5664                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5665
5666                         tp->link_config.rmt_adv =
5667                                            mii_adv_to_ethtool_adv_x(remote_adv);
5668
5669                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5670
5671                         current_link_up = true;
5672                 }
5673                 for (i = 0; i < 30; i++) {
5674                         udelay(20);
5675                         tw32_f(MAC_STATUS,
5676                                (MAC_STATUS_SYNC_CHANGED |
5677                                 MAC_STATUS_CFG_CHANGED));
5678                         udelay(40);
5679                         if ((tr32(MAC_STATUS) &
5680                              (MAC_STATUS_SYNC_CHANGED |
5681                               MAC_STATUS_CFG_CHANGED)) == 0)
5682                                 break;
5683                 }
5684
5685                 mac_status = tr32(MAC_STATUS);
5686                 if (!current_link_up &&
5687                     (mac_status & MAC_STATUS_PCS_SYNCED) &&
5688                     !(mac_status & MAC_STATUS_RCVD_CFG))
5689                         current_link_up = true;
5690         } else {
5691                 tg3_setup_flow_control(tp, 0, 0);
5692
5693                 /* Forcing 1000FD link up. */
5694                 current_link_up = true;
5695
5696                 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5697                 udelay(40);
5698
5699                 tw32_f(MAC_MODE, tp->mac_mode);
5700                 udelay(40);
5701         }
5702
5703 out:
5704         return current_link_up;
5705 }
5706
5707 static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
5708 {
5709         u32 orig_pause_cfg;
5710         u32 orig_active_speed;
5711         u8 orig_active_duplex;
5712         u32 mac_status;
5713         bool current_link_up;
5714         int i;
5715
5716         orig_pause_cfg = tp->link_config.active_flowctrl;
5717         orig_active_speed = tp->link_config.active_speed;
5718         orig_active_duplex = tp->link_config.active_duplex;
5719
5720         if (!tg3_flag(tp, HW_AUTONEG) &&
5721             tp->link_up &&
5722             tg3_flag(tp, INIT_COMPLETE)) {
5723                 mac_status = tr32(MAC_STATUS);
5724                 mac_status &= (MAC_STATUS_PCS_SYNCED |
5725                                MAC_STATUS_SIGNAL_DET |
5726                                MAC_STATUS_CFG_CHANGED |
5727                                MAC_STATUS_RCVD_CFG);
5728                 if (mac_status == (MAC_STATUS_PCS_SYNCED |
5729                                    MAC_STATUS_SIGNAL_DET)) {
5730                         tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5731                                             MAC_STATUS_CFG_CHANGED));
5732                         return 0;
5733                 }
5734         }
5735
5736         tw32_f(MAC_TX_AUTO_NEG, 0);
5737
5738         tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5739         tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5740         tw32_f(MAC_MODE, tp->mac_mode);
5741         udelay(40);
5742
5743         if (tp->phy_id == TG3_PHY_ID_BCM8002)
5744                 tg3_init_bcm8002(tp);
5745
5746         /* Enable link change event even when serdes polling.  */
5747         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5748         udelay(40);
5749
5750         tp->link_config.rmt_adv = 0;
5751         mac_status = tr32(MAC_STATUS);
5752
5753         if (tg3_flag(tp, HW_AUTONEG))
5754                 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5755         else
5756                 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5757
5758         tp->napi[0].hw_status->status =
5759                 (SD_STATUS_UPDATED |
5760                  (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5761
5762         for (i = 0; i < 100; i++) {
5763                 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5764                                     MAC_STATUS_CFG_CHANGED));
5765                 udelay(5);
5766                 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5767                                          MAC_STATUS_CFG_CHANGED |
5768                                          MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5769                         break;
5770         }
5771
5772         mac_status = tr32(MAC_STATUS);
5773         if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5774                 current_link_up = false;
5775                 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5776                     tp->serdes_counter == 0) {
5777                         tw32_f(MAC_MODE, (tp->mac_mode |
5778                                           MAC_MODE_SEND_CONFIGS));
5779                         udelay(1);
5780                         tw32_f(MAC_MODE, tp->mac_mode);
5781                 }
5782         }
5783
5784         if (current_link_up) {
5785                 tp->link_config.active_speed = SPEED_1000;
5786                 tp->link_config.active_duplex = DUPLEX_FULL;
5787                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5788                                     LED_CTRL_LNKLED_OVERRIDE |
5789                                     LED_CTRL_1000MBPS_ON));
5790         } else {
5791                 tp->link_config.active_speed = SPEED_UNKNOWN;
5792                 tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5793                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5794                                     LED_CTRL_LNKLED_OVERRIDE |
5795                                     LED_CTRL_TRAFFIC_OVERRIDE));
5796         }
5797
5798         if (!tg3_test_and_report_link_chg(tp, current_link_up)) {
5799                 u32 now_pause_cfg = tp->link_config.active_flowctrl;
5800                 if (orig_pause_cfg != now_pause_cfg ||
5801                     orig_active_speed != tp->link_config.active_speed ||
5802                     orig_active_duplex != tp->link_config.active_duplex)
5803                         tg3_link_report(tp);
5804         }
5805
5806         return 0;
5807 }
5808
5809 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)
5810 {
5811         int err = 0;
5812         u32 bmsr, bmcr;
5813         u32 current_speed = SPEED_UNKNOWN;
5814         u8 current_duplex = DUPLEX_UNKNOWN;
5815         bool current_link_up = false;
5816         u32 local_adv, remote_adv, sgsr;
5817
5818         if ((tg3_asic_rev(tp) == ASIC_REV_5719 ||
5819              tg3_asic_rev(tp) == ASIC_REV_5720) &&
5820              !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) &&
5821              (sgsr & SERDES_TG3_SGMII_MODE)) {
5822
5823                 if (force_reset)
5824                         tg3_phy_reset(tp);
5825
5826                 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
5827
5828                 if (!(sgsr & SERDES_TG3_LINK_UP)) {
5829                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5830                 } else {
5831                         current_link_up = true;
5832                         if (sgsr & SERDES_TG3_SPEED_1000) {
5833                                 current_speed = SPEED_1000;
5834                                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5835                         } else if (sgsr & SERDES_TG3_SPEED_100) {
5836                                 current_speed = SPEED_100;
5837                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5838                         } else {
5839                                 current_speed = SPEED_10;
5840                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5841                         }
5842
5843                         if (sgsr & SERDES_TG3_FULL_DUPLEX)
5844                                 current_duplex = DUPLEX_FULL;
5845                         else
5846                                 current_duplex = DUPLEX_HALF;
5847                 }
5848
5849                 tw32_f(MAC_MODE, tp->mac_mode);
5850                 udelay(40);
5851
5852                 tg3_clear_mac_status(tp);
5853
5854                 goto fiber_setup_done;
5855         }
5856
5857         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5858         tw32_f(MAC_MODE, tp->mac_mode);
5859         udelay(40);
5860
5861         tg3_clear_mac_status(tp);
5862
5863         if (force_reset)
5864                 tg3_phy_reset(tp);
5865
5866         tp->link_config.rmt_adv = 0;
5867
5868         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5869         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5870         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5871                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5872                         bmsr |= BMSR_LSTATUS;
5873                 else
5874                         bmsr &= ~BMSR_LSTATUS;
5875         }
5876
5877         err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5878
5879         if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5880             (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5881                 /* do nothing, just check for link up at the end */
5882         } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5883                 u32 adv, newadv;
5884
5885                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5886                 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5887                                  ADVERTISE_1000XPAUSE |
5888                                  ADVERTISE_1000XPSE_ASYM |
5889                                  ADVERTISE_SLCT);
5890
5891                 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5892                 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5893
5894                 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5895                         tg3_writephy(tp, MII_ADVERTISE, newadv);
5896                         bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5897                         tg3_writephy(tp, MII_BMCR, bmcr);
5898
5899                         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5900                         tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5901                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5902
5903                         return err;
5904                 }
5905         } else {
5906                 u32 new_bmcr;
5907
5908                 bmcr &= ~BMCR_SPEED1000;
5909                 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5910
5911                 if (tp->link_config.duplex == DUPLEX_FULL)
5912                         new_bmcr |= BMCR_FULLDPLX;
5913
5914                 if (new_bmcr != bmcr) {
5915                         /* BMCR_SPEED1000 is a reserved bit that needs
5916                          * to be set on write.
5917                          */
5918                         new_bmcr |= BMCR_SPEED1000;
5919
5920                         /* Force a linkdown */
5921                         if (tp->link_up) {
5922                                 u32 adv;
5923
5924                                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5925                                 adv &= ~(ADVERTISE_1000XFULL |
5926                                          ADVERTISE_1000XHALF |
5927                                          ADVERTISE_SLCT);
5928                                 tg3_writephy(tp, MII_ADVERTISE, adv);
5929                                 tg3_writephy(tp, MII_BMCR, bmcr |
5930                                                            BMCR_ANRESTART |
5931                                                            BMCR_ANENABLE);
5932                                 udelay(10);
5933                                 tg3_carrier_off(tp);
5934                         }
5935                         tg3_writephy(tp, MII_BMCR, new_bmcr);
5936                         bmcr = new_bmcr;
5937                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5938                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5939                         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5940                                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5941                                         bmsr |= BMSR_LSTATUS;
5942                                 else
5943                                         bmsr &= ~BMSR_LSTATUS;
5944                         }
5945                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5946                 }
5947         }
5948
5949         if (bmsr & BMSR_LSTATUS) {
5950                 current_speed = SPEED_1000;
5951                 current_link_up = true;
5952                 if (bmcr & BMCR_FULLDPLX)
5953                         current_duplex = DUPLEX_FULL;
5954                 else
5955                         current_duplex = DUPLEX_HALF;
5956
5957                 local_adv = 0;
5958                 remote_adv = 0;
5959
5960                 if (bmcr & BMCR_ANENABLE) {
5961                         u32 common;
5962
5963                         err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5964                         err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5965                         common = local_adv & remote_adv;
5966                         if (common & (ADVERTISE_1000XHALF |
5967                                       ADVERTISE_1000XFULL)) {
5968                                 if (common & ADVERTISE_1000XFULL)
5969                                         current_duplex = DUPLEX_FULL;
5970                                 else
5971                                         current_duplex = DUPLEX_HALF;
5972
5973                                 tp->link_config.rmt_adv =
5974                                            mii_adv_to_ethtool_adv_x(remote_adv);
5975                         } else if (!tg3_flag(tp, 5780_CLASS)) {
5976                                 /* Link is up via parallel detect */
5977                         } else {
5978                                 current_link_up = false;
5979                         }
5980                 }
5981         }
5982
5983 fiber_setup_done:
5984         if (current_link_up && current_duplex == DUPLEX_FULL)
5985                 tg3_setup_flow_control(tp, local_adv, remote_adv);
5986
5987         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5988         if (tp->link_config.active_duplex == DUPLEX_HALF)
5989                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5990
5991         tw32_f(MAC_MODE, tp->mac_mode);
5992         udelay(40);
5993
5994         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5995
5996         tp->link_config.active_speed = current_speed;
5997         tp->link_config.active_duplex = current_duplex;
5998
5999         tg3_test_and_report_link_chg(tp, current_link_up);
6000         return err;
6001 }
6002
6003 static void tg3_serdes_parallel_detect(struct tg3 *tp)
6004 {
6005         if (tp->serdes_counter) {
6006                 /* Give autoneg time to complete. */
6007                 tp->serdes_counter--;
6008                 return;
6009         }
6010
6011         if (!tp->link_up &&
6012             (tp->link_config.autoneg == AUTONEG_ENABLE)) {
6013                 u32 bmcr;
6014
6015                 tg3_readphy(tp, MII_BMCR, &bmcr);
6016                 if (bmcr & BMCR_ANENABLE) {
6017                         u32 phy1, phy2;
6018
6019                         /* Select shadow register 0x1f */
6020                         tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
6021                         tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
6022
6023                         /* Select expansion interrupt status register */
6024                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6025                                          MII_TG3_DSP_EXP1_INT_STAT);
6026                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6027                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6028
6029                         if ((phy1 & 0x10) && !(phy2 & 0x20)) {
6030                                 /* We have signal detect and not receiving
6031                                  * config code words, link is up by parallel
6032                                  * detection.
6033                                  */
6034
6035                                 bmcr &= ~BMCR_ANENABLE;
6036                                 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
6037                                 tg3_writephy(tp, MII_BMCR, bmcr);
6038                                 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
6039                         }
6040                 }
6041         } else if (tp->link_up &&
6042                    (tp->link_config.autoneg == AUTONEG_ENABLE) &&
6043                    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
6044                 u32 phy2;
6045
6046                 /* Select expansion interrupt status register */
6047                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6048                                  MII_TG3_DSP_EXP1_INT_STAT);
6049                 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6050                 if (phy2 & 0x20) {
6051                         u32 bmcr;
6052
6053                         /* Config code words received, turn on autoneg. */
6054                         tg3_readphy(tp, MII_BMCR, &bmcr);
6055                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
6056
6057                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
6058
6059                 }
6060         }
6061 }
6062
6063 static int tg3_setup_phy(struct tg3 *tp, bool force_reset)
6064 {
6065         u32 val;
6066         int err;
6067
6068         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
6069                 err = tg3_setup_fiber_phy(tp, force_reset);
6070         else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
6071                 err = tg3_setup_fiber_mii_phy(tp, force_reset);
6072         else
6073                 err = tg3_setup_copper_phy(tp, force_reset);
6074
6075         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
6076                 u32 scale;
6077
6078                 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
6079                 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
6080                         scale = 65;
6081                 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
6082                         scale = 6;
6083                 else
6084                         scale = 12;
6085
6086                 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
6087                 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
6088                 tw32(GRC_MISC_CFG, val);
6089         }
6090
6091         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6092               (6 << TX_LENGTHS_IPG_SHIFT);
6093         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
6094             tg3_asic_rev(tp) == ASIC_REV_5762)
6095                 val |= tr32(MAC_TX_LENGTHS) &
6096                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
6097                         TX_LENGTHS_CNT_DWN_VAL_MSK);
6098
6099         if (tp->link_config.active_speed == SPEED_1000 &&
6100             tp->link_config.active_duplex == DUPLEX_HALF)
6101                 tw32(MAC_TX_LENGTHS, val |
6102                      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
6103         else
6104                 tw32(MAC_TX_LENGTHS, val |
6105                      (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6106
6107         if (!tg3_flag(tp, 5705_PLUS)) {
6108                 if (tp->link_up) {
6109                         tw32(HOSTCC_STAT_COAL_TICKS,
6110                              tp->coal.stats_block_coalesce_usecs);
6111                 } else {
6112                         tw32(HOSTCC_STAT_COAL_TICKS, 0);
6113                 }
6114         }
6115
6116         if (tg3_flag(tp, ASPM_WORKAROUND)) {
6117                 val = tr32(PCIE_PWR_MGMT_THRESH);
6118                 if (!tp->link_up)
6119                         val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
6120                               tp->pwrmgmt_thresh;
6121                 else
6122                         val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
6123                 tw32(PCIE_PWR_MGMT_THRESH, val);
6124         }
6125
6126         return err;
6127 }
6128
6129 /* tp->lock must be held */
6130 static u64 tg3_refclk_read(struct tg3 *tp, struct ptp_system_timestamp *sts)
6131 {
6132         u64 stamp;
6133
6134         ptp_read_system_prets(sts);
6135         stamp = tr32(TG3_EAV_REF_CLCK_LSB);
6136         ptp_read_system_postts(sts);
6137         stamp |= (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32;
6138
6139         return stamp;
6140 }
6141
6142 /* tp->lock must be held */
6143 static void tg3_refclk_write(struct tg3 *tp, u64 newval)
6144 {
6145         u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6146
6147         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP);
6148         tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff);
6149         tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32);
6150         tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME);
6151 }
6152
6153 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync);
6154 static inline void tg3_full_unlock(struct tg3 *tp);
6155 static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
6156 {
6157         struct tg3 *tp = netdev_priv(dev);
6158
6159         info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
6160                                 SOF_TIMESTAMPING_RX_SOFTWARE |
6161                                 SOF_TIMESTAMPING_SOFTWARE;
6162
6163         if (tg3_flag(tp, PTP_CAPABLE)) {
6164                 info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE |
6165                                         SOF_TIMESTAMPING_RX_HARDWARE |
6166                                         SOF_TIMESTAMPING_RAW_HARDWARE;
6167         }
6168
6169         if (tp->ptp_clock)
6170                 info->phc_index = ptp_clock_index(tp->ptp_clock);
6171         else
6172                 info->phc_index = -1;
6173
6174         info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
6175
6176         info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
6177                            (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
6178                            (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
6179                            (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
6180         return 0;
6181 }
6182
6183 static int tg3_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
6184 {
6185         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6186         u64 correction;
6187         bool neg_adj;
6188
6189         /* Frequency adjustment is performed using hardware with a 24 bit
6190          * accumulator and a programmable correction value. On each clk, the
6191          * correction value gets added to the accumulator and when it
6192          * overflows, the time counter is incremented/decremented.
6193          */
6194         neg_adj = diff_by_scaled_ppm(1 << 24, scaled_ppm, &correction);
6195
6196         tg3_full_lock(tp, 0);
6197
6198         if (correction)
6199                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
6200                      TG3_EAV_REF_CLK_CORRECT_EN |
6201                      (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) |
6202                      ((u32)correction & TG3_EAV_REF_CLK_CORRECT_MASK));
6203         else
6204                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0);
6205
6206         tg3_full_unlock(tp);
6207
6208         return 0;
6209 }
6210
6211 static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
6212 {
6213         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6214
6215         tg3_full_lock(tp, 0);
6216         tp->ptp_adjust += delta;
6217         tg3_full_unlock(tp);
6218
6219         return 0;
6220 }
6221
6222 static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts,
6223                             struct ptp_system_timestamp *sts)
6224 {
6225         u64 ns;
6226         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6227
6228         tg3_full_lock(tp, 0);
6229         ns = tg3_refclk_read(tp, sts);
6230         ns += tp->ptp_adjust;
6231         tg3_full_unlock(tp);
6232
6233         *ts = ns_to_timespec64(ns);
6234
6235         return 0;
6236 }
6237
6238 static int tg3_ptp_settime(struct ptp_clock_info *ptp,
6239                            const struct timespec64 *ts)
6240 {
6241         u64 ns;
6242         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6243
6244         ns = timespec64_to_ns(ts);
6245
6246         tg3_full_lock(tp, 0);
6247         tg3_refclk_write(tp, ns);
6248         tp->ptp_adjust = 0;
6249         tg3_full_unlock(tp);
6250
6251         return 0;
6252 }
6253
6254 static int tg3_ptp_enable(struct ptp_clock_info *ptp,
6255                           struct ptp_clock_request *rq, int on)
6256 {
6257         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6258         u32 clock_ctl;
6259         int rval = 0;
6260
6261         switch (rq->type) {
6262         case PTP_CLK_REQ_PEROUT:
6263                 /* Reject requests with unsupported flags */
6264                 if (rq->perout.flags)
6265                         return -EOPNOTSUPP;
6266
6267                 if (rq->perout.index != 0)
6268                         return -EINVAL;
6269
6270                 tg3_full_lock(tp, 0);
6271                 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6272                 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK;
6273
6274                 if (on) {
6275                         u64 nsec;
6276
6277                         nsec = rq->perout.start.sec * 1000000000ULL +
6278                                rq->perout.start.nsec;
6279
6280                         if (rq->perout.period.sec || rq->perout.period.nsec) {
6281                                 netdev_warn(tp->dev,
6282                                             "Device supports only a one-shot timesync output, period must be 0\n");
6283                                 rval = -EINVAL;
6284                                 goto err_out;
6285                         }
6286
6287                         if (nsec & (1ULL << 63)) {
6288                                 netdev_warn(tp->dev,
6289                                             "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n");
6290                                 rval = -EINVAL;
6291                                 goto err_out;
6292                         }
6293
6294                         tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff));
6295                         tw32(TG3_EAV_WATCHDOG0_MSB,
6296                              TG3_EAV_WATCHDOG0_EN |
6297                              ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK));
6298
6299                         tw32(TG3_EAV_REF_CLCK_CTL,
6300                              clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0);
6301                 } else {
6302                         tw32(TG3_EAV_WATCHDOG0_MSB, 0);
6303                         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl);
6304                 }
6305
6306 err_out:
6307                 tg3_full_unlock(tp);
6308                 return rval;
6309
6310         default:
6311                 break;
6312         }
6313
6314         return -EOPNOTSUPP;
6315 }
6316
6317 static const struct ptp_clock_info tg3_ptp_caps = {
6318         .owner          = THIS_MODULE,
6319         .name           = "tg3 clock",
6320         .max_adj        = 250000000,
6321         .n_alarm        = 0,
6322         .n_ext_ts       = 0,
6323         .n_per_out      = 1,
6324         .n_pins         = 0,
6325         .pps            = 0,
6326         .adjfine        = tg3_ptp_adjfine,
6327         .adjtime        = tg3_ptp_adjtime,
6328         .gettimex64     = tg3_ptp_gettimex,
6329         .settime64      = tg3_ptp_settime,
6330         .enable         = tg3_ptp_enable,
6331 };
6332
6333 static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
6334                                      struct skb_shared_hwtstamps *timestamp)
6335 {
6336         memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
6337         timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
6338                                            tp->ptp_adjust);
6339 }
6340
6341 /* tp->lock must be held */
6342 static void tg3_ptp_init(struct tg3 *tp)
6343 {
6344         if (!tg3_flag(tp, PTP_CAPABLE))
6345                 return;
6346
6347         /* Initialize the hardware clock to the system time. */
6348         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
6349         tp->ptp_adjust = 0;
6350         tp->ptp_info = tg3_ptp_caps;
6351 }
6352
6353 /* tp->lock must be held */
6354 static void tg3_ptp_resume(struct tg3 *tp)
6355 {
6356         if (!tg3_flag(tp, PTP_CAPABLE))
6357                 return;
6358
6359         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
6360         tp->ptp_adjust = 0;
6361 }
6362
6363 static void tg3_ptp_fini(struct tg3 *tp)
6364 {
6365         if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
6366                 return;
6367
6368         ptp_clock_unregister(tp->ptp_clock);
6369         tp->ptp_clock = NULL;
6370         tp->ptp_adjust = 0;
6371 }
6372
6373 static inline int tg3_irq_sync(struct tg3 *tp)
6374 {
6375         return tp->irq_sync;
6376 }
6377
6378 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
6379 {
6380         int i;
6381
6382         dst = (u32 *)((u8 *)dst + off);
6383         for (i = 0; i < len; i += sizeof(u32))
6384                 *dst++ = tr32(off + i);
6385 }
6386
6387 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
6388 {
6389         tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
6390         tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
6391         tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
6392         tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
6393         tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
6394         tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
6395         tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
6396         tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
6397         tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
6398         tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
6399         tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
6400         tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
6401         tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
6402         tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
6403         tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
6404         tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
6405         tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
6406         tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
6407         tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
6408
6409         if (tg3_flag(tp, SUPPORT_MSIX))
6410                 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
6411
6412         tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
6413         tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
6414         tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
6415         tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
6416         tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
6417         tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
6418         tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
6419         tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
6420
6421         if (!tg3_flag(tp, 5705_PLUS)) {
6422                 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
6423                 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
6424                 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
6425         }
6426
6427         tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
6428         tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
6429         tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
6430         tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
6431         tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
6432
6433         if (tg3_flag(tp, NVRAM))
6434                 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
6435 }
6436
6437 static void tg3_dump_state(struct tg3 *tp)
6438 {
6439         int i;
6440         u32 *regs;
6441
6442         regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
6443         if (!regs)
6444                 return;
6445
6446         if (tg3_flag(tp, PCI_EXPRESS)) {
6447                 /* Read up to but not including private PCI registers */
6448                 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
6449                         regs[i / sizeof(u32)] = tr32(i);
6450         } else
6451                 tg3_dump_legacy_regs(tp, regs);
6452
6453         for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
6454                 if (!regs[i + 0] && !regs[i + 1] &&
6455                     !regs[i + 2] && !regs[i + 3])
6456                         continue;
6457
6458                 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
6459                            i * 4,
6460                            regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
6461         }
6462
6463         kfree(regs);
6464
6465         for (i = 0; i < tp->irq_cnt; i++) {
6466                 struct tg3_napi *tnapi = &tp->napi[i];
6467
6468                 /* SW status block */
6469                 netdev_err(tp->dev,
6470                          "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6471                            i,
6472                            tnapi->hw_status->status,
6473                            tnapi->hw_status->status_tag,
6474                            tnapi->hw_status->rx_jumbo_consumer,
6475                            tnapi->hw_status->rx_consumer,
6476                            tnapi->hw_status->rx_mini_consumer,
6477                            tnapi->hw_status->idx[0].rx_producer,
6478                            tnapi->hw_status->idx[0].tx_consumer);
6479
6480                 netdev_err(tp->dev,
6481                 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
6482                            i,
6483                            tnapi->last_tag, tnapi->last_irq_tag,
6484                            tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
6485                            tnapi->rx_rcb_ptr,
6486                            tnapi->prodring.rx_std_prod_idx,
6487                            tnapi->prodring.rx_std_cons_idx,
6488                            tnapi->prodring.rx_jmb_prod_idx,
6489                            tnapi->prodring.rx_jmb_cons_idx);
6490         }
6491 }
6492
6493 /* This is called whenever we suspect that the system chipset is re-
6494  * ordering the sequence of MMIO to the tx send mailbox. The symptom
6495  * is bogus tx completions. We try to recover by setting the
6496  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
6497  * in the workqueue.
6498  */
6499 static void tg3_tx_recover(struct tg3 *tp)
6500 {
6501         BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
6502                tp->write32_tx_mbox == tg3_write_indirect_mbox);
6503
6504         netdev_warn(tp->dev,
6505                     "The system may be re-ordering memory-mapped I/O "
6506                     "cycles to the network device, attempting to recover. "
6507                     "Please report the problem to the driver maintainer "
6508                     "and include system chipset information.\n");
6509
6510         tg3_flag_set(tp, TX_RECOVERY_PENDING);
6511 }
6512
6513 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
6514 {
6515         /* Tell compiler to fetch tx indices from memory. */
6516         barrier();
6517         return tnapi->tx_pending -
6518                ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
6519 }
6520
6521 /* Tigon3 never reports partial packet sends.  So we do not
6522  * need special logic to handle SKBs that have not had all
6523  * of their frags sent yet, like SunGEM does.
6524  */
6525 static void tg3_tx(struct tg3_napi *tnapi)
6526 {
6527         struct tg3 *tp = tnapi->tp;
6528         u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
6529         u32 sw_idx = tnapi->tx_cons;
6530         struct netdev_queue *txq;
6531         int index = tnapi - tp->napi;
6532         unsigned int pkts_compl = 0, bytes_compl = 0;
6533
6534         if (tg3_flag(tp, ENABLE_TSS))
6535                 index--;
6536
6537         txq = netdev_get_tx_queue(tp->dev, index);
6538
6539         while (sw_idx != hw_idx) {
6540                 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
6541                 struct sk_buff *skb = ri->skb;
6542                 int i, tx_bug = 0;
6543
6544                 if (unlikely(skb == NULL)) {
6545                         tg3_tx_recover(tp);
6546                         return;
6547                 }
6548
6549                 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
6550                         struct skb_shared_hwtstamps timestamp;
6551                         u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
6552                         hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
6553
6554                         tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
6555
6556                         skb_tstamp_tx(skb, &timestamp);
6557                 }
6558
6559                 dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping),
6560                                  skb_headlen(skb), DMA_TO_DEVICE);
6561
6562                 ri->skb = NULL;
6563
6564                 while (ri->fragmented) {
6565                         ri->fragmented = false;
6566                         sw_idx = NEXT_TX(sw_idx);
6567                         ri = &tnapi->tx_buffers[sw_idx];
6568                 }
6569
6570                 sw_idx = NEXT_TX(sw_idx);
6571
6572                 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
6573                         ri = &tnapi->tx_buffers[sw_idx];
6574                         if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
6575                                 tx_bug = 1;
6576
6577                         dma_unmap_page(&tp->pdev->dev,
6578                                        dma_unmap_addr(ri, mapping),
6579                                        skb_frag_size(&skb_shinfo(skb)->frags[i]),
6580                                        DMA_TO_DEVICE);
6581
6582                         while (ri->fragmented) {
6583                                 ri->fragmented = false;
6584                                 sw_idx = NEXT_TX(sw_idx);
6585                                 ri = &tnapi->tx_buffers[sw_idx];
6586                         }
6587
6588                         sw_idx = NEXT_TX(sw_idx);
6589                 }
6590
6591                 pkts_compl++;
6592                 bytes_compl += skb->len;
6593
6594                 dev_consume_skb_any(skb);
6595
6596                 if (unlikely(tx_bug)) {
6597                         tg3_tx_recover(tp);
6598                         return;
6599                 }
6600         }
6601
6602         netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
6603
6604         tnapi->tx_cons = sw_idx;
6605
6606         /* Need to make the tx_cons update visible to tg3_start_xmit()
6607          * before checking for netif_queue_stopped().  Without the
6608          * memory barrier, there is a small possibility that tg3_start_xmit()
6609          * will miss it and cause the queue to be stopped forever.
6610          */
6611         smp_mb();
6612
6613         if (unlikely(netif_tx_queue_stopped(txq) &&
6614                      (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
6615                 __netif_tx_lock(txq, smp_processor_id());
6616                 if (netif_tx_queue_stopped(txq) &&
6617                     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
6618                         netif_tx_wake_queue(txq);
6619                 __netif_tx_unlock(txq);
6620         }
6621 }
6622
6623 static void tg3_frag_free(bool is_frag, void *data)
6624 {
6625         if (is_frag)
6626                 skb_free_frag(data);
6627         else
6628                 kfree(data);
6629 }
6630
6631 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
6632 {
6633         unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
6634                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6635
6636         if (!ri->data)
6637                 return;
6638
6639         dma_unmap_single(&tp->pdev->dev, dma_unmap_addr(ri, mapping), map_sz,
6640                          DMA_FROM_DEVICE);
6641         tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
6642         ri->data = NULL;
6643 }
6644
6645
6646 /* Returns size of skb allocated or < 0 on error.
6647  *
6648  * We only need to fill in the address because the other members
6649  * of the RX descriptor are invariant, see tg3_init_rings.
6650  *
6651  * Note the purposeful assymetry of cpu vs. chip accesses.  For
6652  * posting buffers we only dirty the first cache line of the RX
6653  * descriptor (containing the address).  Whereas for the RX status
6654  * buffers the cpu only reads the last cacheline of the RX descriptor
6655  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6656  */
6657 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6658                              u32 opaque_key, u32 dest_idx_unmasked,
6659                              unsigned int *frag_size)
6660 {
6661         struct tg3_rx_buffer_desc *desc;
6662         struct ring_info *map;
6663         u8 *data;
6664         dma_addr_t mapping;
6665         int skb_size, data_size, dest_idx;
6666
6667         switch (opaque_key) {
6668         case RXD_OPAQUE_RING_STD:
6669                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6670                 desc = &tpr->rx_std[dest_idx];
6671                 map = &tpr->rx_std_buffers[dest_idx];
6672                 data_size = tp->rx_pkt_map_sz;
6673                 break;
6674
6675         case RXD_OPAQUE_RING_JUMBO:
6676                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6677                 desc = &tpr->rx_jmb[dest_idx].std;
6678                 map = &tpr->rx_jmb_buffers[dest_idx];
6679                 data_size = TG3_RX_JMB_MAP_SZ;
6680                 break;
6681
6682         default:
6683                 return -EINVAL;
6684         }
6685
6686         /* Do not overwrite any of the map or rp information
6687          * until we are sure we can commit to a new buffer.
6688          *
6689          * Callers depend upon this behavior and assume that
6690          * we leave everything unchanged if we fail.
6691          */
6692         skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6693                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6694         if (skb_size <= PAGE_SIZE) {
6695                 data = napi_alloc_frag(skb_size);
6696                 *frag_size = skb_size;
6697         } else {
6698                 data = kmalloc(skb_size, GFP_ATOMIC);
6699                 *frag_size = 0;
6700         }
6701         if (!data)
6702                 return -ENOMEM;
6703
6704         mapping = dma_map_single(&tp->pdev->dev, data + TG3_RX_OFFSET(tp),
6705                                  data_size, DMA_FROM_DEVICE);
6706         if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) {
6707                 tg3_frag_free(skb_size <= PAGE_SIZE, data);
6708                 return -EIO;
6709         }
6710
6711         map->data = data;
6712         dma_unmap_addr_set(map, mapping, mapping);
6713
6714         desc->addr_hi = ((u64)mapping >> 32);
6715         desc->addr_lo = ((u64)mapping & 0xffffffff);
6716
6717         return data_size;
6718 }
6719
6720 /* We only need to move over in the address because the other
6721  * members of the RX descriptor are invariant.  See notes above
6722  * tg3_alloc_rx_data for full details.
6723  */
6724 static void tg3_recycle_rx(struct tg3_napi *tnapi,
6725                            struct tg3_rx_prodring_set *dpr,
6726                            u32 opaque_key, int src_idx,
6727                            u32 dest_idx_unmasked)
6728 {
6729         struct tg3 *tp = tnapi->tp;
6730         struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6731         struct ring_info *src_map, *dest_map;
6732         struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6733         int dest_idx;
6734
6735         switch (opaque_key) {
6736         case RXD_OPAQUE_RING_STD:
6737                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6738                 dest_desc = &dpr->rx_std[dest_idx];
6739                 dest_map = &dpr->rx_std_buffers[dest_idx];
6740                 src_desc = &spr->rx_std[src_idx];
6741                 src_map = &spr->rx_std_buffers[src_idx];
6742                 break;
6743
6744         case RXD_OPAQUE_RING_JUMBO:
6745                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6746                 dest_desc = &dpr->rx_jmb[dest_idx].std;
6747                 dest_map = &dpr->rx_jmb_buffers[dest_idx];
6748                 src_desc = &spr->rx_jmb[src_idx].std;
6749                 src_map = &spr->rx_jmb_buffers[src_idx];
6750                 break;
6751
6752         default:
6753                 return;
6754         }
6755
6756         dest_map->data = src_map->data;
6757         dma_unmap_addr_set(dest_map, mapping,
6758                            dma_unmap_addr(src_map, mapping));
6759         dest_desc->addr_hi = src_desc->addr_hi;
6760         dest_desc->addr_lo = src_desc->addr_lo;
6761
6762         /* Ensure that the update to the skb happens after the physical
6763          * addresses have been transferred to the new BD location.
6764          */
6765         smp_wmb();
6766
6767         src_map->data = NULL;
6768 }
6769
6770 /* The RX ring scheme is composed of multiple rings which post fresh
6771  * buffers to the chip, and one special ring the chip uses to report
6772  * status back to the host.
6773  *
6774  * The special ring reports the status of received packets to the
6775  * host.  The chip does not write into the original descriptor the
6776  * RX buffer was obtained from.  The chip simply takes the original
6777  * descriptor as provided by the host, updates the status and length
6778  * field, then writes this into the next status ring entry.
6779  *
6780  * Each ring the host uses to post buffers to the chip is described
6781  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6782  * it is first placed into the on-chip ram.  When the packet's length
6783  * is known, it walks down the TG3_BDINFO entries to select the ring.
6784  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6785  * which is within the range of the new packet's length is chosen.
6786  *
6787  * The "separate ring for rx status" scheme may sound queer, but it makes
6788  * sense from a cache coherency perspective.  If only the host writes
6789  * to the buffer post rings, and only the chip writes to the rx status
6790  * rings, then cache lines never move beyond shared-modified state.
6791  * If both the host and chip were to write into the same ring, cache line
6792  * eviction could occur since both entities want it in an exclusive state.
6793  */
6794 static int tg3_rx(struct tg3_napi *tnapi, int budget)
6795 {
6796         struct tg3 *tp = tnapi->tp;
6797         u32 work_mask, rx_std_posted = 0;
6798         u32 std_prod_idx, jmb_prod_idx;
6799         u32 sw_idx = tnapi->rx_rcb_ptr;
6800         u16 hw_idx;
6801         int received;
6802         struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6803
6804         hw_idx = *(tnapi->rx_rcb_prod_idx);
6805         /*
6806          * We need to order the read of hw_idx and the read of
6807          * the opaque cookie.
6808          */
6809         rmb();
6810         work_mask = 0;
6811         received = 0;
6812         std_prod_idx = tpr->rx_std_prod_idx;
6813         jmb_prod_idx = tpr->rx_jmb_prod_idx;
6814         while (sw_idx != hw_idx && budget > 0) {
6815                 struct ring_info *ri;
6816                 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6817                 unsigned int len;
6818                 struct sk_buff *skb;
6819                 dma_addr_t dma_addr;
6820                 u32 opaque_key, desc_idx, *post_ptr;
6821                 u8 *data;
6822                 u64 tstamp = 0;
6823
6824                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6825                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6826                 if (opaque_key == RXD_OPAQUE_RING_STD) {
6827                         ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6828                         dma_addr = dma_unmap_addr(ri, mapping);
6829                         data = ri->data;
6830                         post_ptr = &std_prod_idx;
6831                         rx_std_posted++;
6832                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6833                         ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6834                         dma_addr = dma_unmap_addr(ri, mapping);
6835                         data = ri->data;
6836                         post_ptr = &jmb_prod_idx;
6837                 } else
6838                         goto next_pkt_nopost;
6839
6840                 work_mask |= opaque_key;
6841
6842                 if (desc->err_vlan & RXD_ERR_MASK) {
6843                 drop_it:
6844                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6845                                        desc_idx, *post_ptr);
6846                 drop_it_no_recycle:
6847                         /* Other statistics kept track of by card. */
6848                         tp->rx_dropped++;
6849                         goto next_pkt;
6850                 }
6851
6852                 prefetch(data + TG3_RX_OFFSET(tp));
6853                 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6854                       ETH_FCS_LEN;
6855
6856                 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6857                      RXD_FLAG_PTPSTAT_PTPV1 ||
6858                     (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6859                      RXD_FLAG_PTPSTAT_PTPV2) {
6860                         tstamp = tr32(TG3_RX_TSTAMP_LSB);
6861                         tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6862                 }
6863
6864                 if (len > TG3_RX_COPY_THRESH(tp)) {
6865                         int skb_size;
6866                         unsigned int frag_size;
6867
6868                         skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6869                                                     *post_ptr, &frag_size);
6870                         if (skb_size < 0)
6871                                 goto drop_it;
6872
6873                         dma_unmap_single(&tp->pdev->dev, dma_addr, skb_size,
6874                                          DMA_FROM_DEVICE);
6875
6876                         /* Ensure that the update to the data happens
6877                          * after the usage of the old DMA mapping.
6878                          */
6879                         smp_wmb();
6880
6881                         ri->data = NULL;
6882
6883                         if (frag_size)
6884                                 skb = build_skb(data, frag_size);
6885                         else
6886                                 skb = slab_build_skb(data);
6887                         if (!skb) {
6888                                 tg3_frag_free(frag_size != 0, data);
6889                                 goto drop_it_no_recycle;
6890                         }
6891                         skb_reserve(skb, TG3_RX_OFFSET(tp));
6892                 } else {
6893                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6894                                        desc_idx, *post_ptr);
6895
6896                         skb = netdev_alloc_skb(tp->dev,
6897                                                len + TG3_RAW_IP_ALIGN);
6898                         if (skb == NULL)
6899                                 goto drop_it_no_recycle;
6900
6901                         skb_reserve(skb, TG3_RAW_IP_ALIGN);
6902                         dma_sync_single_for_cpu(&tp->pdev->dev, dma_addr, len,
6903                                                 DMA_FROM_DEVICE);
6904                         memcpy(skb->data,
6905                                data + TG3_RX_OFFSET(tp),
6906                                len);
6907                         dma_sync_single_for_device(&tp->pdev->dev, dma_addr,
6908                                                    len, DMA_FROM_DEVICE);
6909                 }
6910
6911                 skb_put(skb, len);
6912                 if (tstamp)
6913                         tg3_hwclock_to_timestamp(tp, tstamp,
6914                                                  skb_hwtstamps(skb));
6915
6916                 if ((tp->dev->features & NETIF_F_RXCSUM) &&
6917                     (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6918                     (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6919                       >> RXD_TCPCSUM_SHIFT) == 0xffff))
6920                         skb->ip_summed = CHECKSUM_UNNECESSARY;
6921                 else
6922                         skb_checksum_none_assert(skb);
6923
6924                 skb->protocol = eth_type_trans(skb, tp->dev);
6925
6926                 if (len > (tp->dev->mtu + ETH_HLEN) &&
6927                     skb->protocol != htons(ETH_P_8021Q) &&
6928                     skb->protocol != htons(ETH_P_8021AD)) {
6929                         dev_kfree_skb_any(skb);
6930                         goto drop_it_no_recycle;
6931                 }
6932
6933                 if (desc->type_flags & RXD_FLAG_VLAN &&
6934                     !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6935                         __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
6936                                                desc->err_vlan & RXD_VLAN_MASK);
6937
6938                 napi_gro_receive(&tnapi->napi, skb);
6939
6940                 received++;
6941                 budget--;
6942
6943 next_pkt:
6944                 (*post_ptr)++;
6945
6946                 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6947                         tpr->rx_std_prod_idx = std_prod_idx &
6948                                                tp->rx_std_ring_mask;
6949                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6950                                      tpr->rx_std_prod_idx);
6951                         work_mask &= ~RXD_OPAQUE_RING_STD;
6952                         rx_std_posted = 0;
6953                 }
6954 next_pkt_nopost:
6955                 sw_idx++;
6956                 sw_idx &= tp->rx_ret_ring_mask;
6957
6958                 /* Refresh hw_idx to see if there is new work */
6959                 if (sw_idx == hw_idx) {
6960                         hw_idx = *(tnapi->rx_rcb_prod_idx);
6961                         rmb();
6962                 }
6963         }
6964
6965         /* ACK the status ring. */
6966         tnapi->rx_rcb_ptr = sw_idx;
6967         tw32_rx_mbox(tnapi->consmbox, sw_idx);
6968
6969         /* Refill RX ring(s). */
6970         if (!tg3_flag(tp, ENABLE_RSS)) {
6971                 /* Sync BD data before updating mailbox */
6972                 wmb();
6973
6974                 if (work_mask & RXD_OPAQUE_RING_STD) {
6975                         tpr->rx_std_prod_idx = std_prod_idx &
6976                                                tp->rx_std_ring_mask;
6977                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6978                                      tpr->rx_std_prod_idx);
6979                 }
6980                 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6981                         tpr->rx_jmb_prod_idx = jmb_prod_idx &
6982                                                tp->rx_jmb_ring_mask;
6983                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6984                                      tpr->rx_jmb_prod_idx);
6985                 }
6986         } else if (work_mask) {
6987                 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6988                  * updated before the producer indices can be updated.
6989                  */
6990                 smp_wmb();
6991
6992                 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6993                 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6994
6995                 if (tnapi != &tp->napi[1]) {
6996                         tp->rx_refill = true;
6997                         napi_schedule(&tp->napi[1].napi);
6998                 }
6999         }
7000
7001         return received;
7002 }
7003
7004 static void tg3_poll_link(struct tg3 *tp)
7005 {
7006         /* handle link change and other phy events */
7007         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
7008                 struct tg3_hw_status *sblk = tp->napi[0].hw_status;
7009
7010                 if (sblk->status & SD_STATUS_LINK_CHG) {
7011                         sblk->status = SD_STATUS_UPDATED |
7012                                        (sblk->status & ~SD_STATUS_LINK_CHG);
7013                         spin_lock(&tp->lock);
7014                         if (tg3_flag(tp, USE_PHYLIB)) {
7015                                 tw32_f(MAC_STATUS,
7016                                      (MAC_STATUS_SYNC_CHANGED |
7017                                       MAC_STATUS_CFG_CHANGED |
7018                                       MAC_STATUS_MI_COMPLETION |
7019                                       MAC_STATUS_LNKSTATE_CHANGED));
7020                                 udelay(40);
7021                         } else
7022                                 tg3_setup_phy(tp, false);
7023                         spin_unlock(&tp->lock);
7024                 }
7025         }
7026 }
7027
7028 static int tg3_rx_prodring_xfer(struct tg3 *tp,
7029                                 struct tg3_rx_prodring_set *dpr,
7030                                 struct tg3_rx_prodring_set *spr)
7031 {
7032         u32 si, di, cpycnt, src_prod_idx;
7033         int i, err = 0;
7034
7035         while (1) {
7036                 src_prod_idx = spr->rx_std_prod_idx;
7037
7038                 /* Make sure updates to the rx_std_buffers[] entries and the
7039                  * standard producer index are seen in the correct order.
7040                  */
7041                 smp_rmb();
7042
7043                 if (spr->rx_std_cons_idx == src_prod_idx)
7044                         break;
7045
7046                 if (spr->rx_std_cons_idx < src_prod_idx)
7047                         cpycnt = src_prod_idx - spr->rx_std_cons_idx;
7048                 else
7049                         cpycnt = tp->rx_std_ring_mask + 1 -
7050                                  spr->rx_std_cons_idx;
7051
7052                 cpycnt = min(cpycnt,
7053                              tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
7054
7055                 si = spr->rx_std_cons_idx;
7056                 di = dpr->rx_std_prod_idx;
7057
7058                 for (i = di; i < di + cpycnt; i++) {
7059                         if (dpr->rx_std_buffers[i].data) {
7060                                 cpycnt = i - di;
7061                                 err = -ENOSPC;
7062                                 break;
7063                         }
7064                 }
7065
7066                 if (!cpycnt)
7067                         break;
7068
7069                 /* Ensure that updates to the rx_std_buffers ring and the
7070                  * shadowed hardware producer ring from tg3_recycle_skb() are
7071                  * ordered correctly WRT the skb check above.
7072                  */
7073                 smp_rmb();
7074
7075                 memcpy(&dpr->rx_std_buffers[di],
7076                        &spr->rx_std_buffers[si],
7077                        cpycnt * sizeof(struct ring_info));
7078
7079                 for (i = 0; i < cpycnt; i++, di++, si++) {
7080                         struct tg3_rx_buffer_desc *sbd, *dbd;
7081                         sbd = &spr->rx_std[si];
7082                         dbd = &dpr->rx_std[di];
7083                         dbd->addr_hi = sbd->addr_hi;
7084                         dbd->addr_lo = sbd->addr_lo;
7085                 }
7086
7087                 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
7088                                        tp->rx_std_ring_mask;
7089                 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
7090                                        tp->rx_std_ring_mask;
7091         }
7092
7093         while (1) {
7094                 src_prod_idx = spr->rx_jmb_prod_idx;
7095
7096                 /* Make sure updates to the rx_jmb_buffers[] entries and
7097                  * the jumbo producer index are seen in the correct order.
7098                  */
7099                 smp_rmb();
7100
7101                 if (spr->rx_jmb_cons_idx == src_prod_idx)
7102                         break;
7103
7104                 if (spr->rx_jmb_cons_idx < src_prod_idx)
7105                         cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
7106                 else
7107                         cpycnt = tp->rx_jmb_ring_mask + 1 -
7108                                  spr->rx_jmb_cons_idx;
7109
7110                 cpycnt = min(cpycnt,
7111                              tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
7112
7113                 si = spr->rx_jmb_cons_idx;
7114                 di = dpr->rx_jmb_prod_idx;
7115
7116                 for (i = di; i < di + cpycnt; i++) {
7117                         if (dpr->rx_jmb_buffers[i].data) {
7118                                 cpycnt = i - di;
7119                                 err = -ENOSPC;
7120                                 break;
7121                         }
7122                 }
7123
7124                 if (!cpycnt)
7125                         break;
7126
7127                 /* Ensure that updates to the rx_jmb_buffers ring and the
7128                  * shadowed hardware producer ring from tg3_recycle_skb() are
7129                  * ordered correctly WRT the skb check above.
7130                  */
7131                 smp_rmb();
7132
7133                 memcpy(&dpr->rx_jmb_buffers[di],
7134                        &spr->rx_jmb_buffers[si],
7135                        cpycnt * sizeof(struct ring_info));
7136
7137                 for (i = 0; i < cpycnt; i++, di++, si++) {
7138                         struct tg3_rx_buffer_desc *sbd, *dbd;
7139                         sbd = &spr->rx_jmb[si].std;
7140                         dbd = &dpr->rx_jmb[di].std;
7141                         dbd->addr_hi = sbd->addr_hi;
7142                         dbd->addr_lo = sbd->addr_lo;
7143                 }
7144
7145                 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
7146                                        tp->rx_jmb_ring_mask;
7147                 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
7148                                        tp->rx_jmb_ring_mask;
7149         }
7150
7151         return err;
7152 }
7153
7154 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
7155 {
7156         struct tg3 *tp = tnapi->tp;
7157
7158         /* run TX completion thread */
7159         if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
7160                 tg3_tx(tnapi);
7161                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7162                         return work_done;
7163         }
7164
7165         if (!tnapi->rx_rcb_prod_idx)
7166                 return work_done;
7167
7168         /* run RX thread, within the bounds set by NAPI.
7169          * All RX "locking" is done by ensuring outside
7170          * code synchronizes with tg3->napi.poll()
7171          */
7172         if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
7173                 work_done += tg3_rx(tnapi, budget - work_done);
7174
7175         if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
7176                 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
7177                 int i, err = 0;
7178                 u32 std_prod_idx = dpr->rx_std_prod_idx;
7179                 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
7180
7181                 tp->rx_refill = false;
7182                 for (i = 1; i <= tp->rxq_cnt; i++)
7183                         err |= tg3_rx_prodring_xfer(tp, dpr,
7184                                                     &tp->napi[i].prodring);
7185
7186                 wmb();
7187
7188                 if (std_prod_idx != dpr->rx_std_prod_idx)
7189                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7190                                      dpr->rx_std_prod_idx);
7191
7192                 if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
7193                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7194                                      dpr->rx_jmb_prod_idx);
7195
7196                 if (err)
7197                         tw32_f(HOSTCC_MODE, tp->coal_now);
7198         }
7199
7200         return work_done;
7201 }
7202
7203 static inline void tg3_reset_task_schedule(struct tg3 *tp)
7204 {
7205         if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7206                 schedule_work(&tp->reset_task);
7207 }
7208
7209 static inline void tg3_reset_task_cancel(struct tg3 *tp)
7210 {
7211         if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7212                 cancel_work_sync(&tp->reset_task);
7213         tg3_flag_clear(tp, TX_RECOVERY_PENDING);
7214 }
7215
7216 static int tg3_poll_msix(struct napi_struct *napi, int budget)
7217 {
7218         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7219         struct tg3 *tp = tnapi->tp;
7220         int work_done = 0;
7221         struct tg3_hw_status *sblk = tnapi->hw_status;
7222
7223         while (1) {
7224                 work_done = tg3_poll_work(tnapi, work_done, budget);
7225
7226                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7227                         goto tx_recovery;
7228
7229                 if (unlikely(work_done >= budget))
7230                         break;
7231
7232                 /* tp->last_tag is used in tg3_int_reenable() below
7233                  * to tell the hw how much work has been processed,
7234                  * so we must read it before checking for more work.
7235                  */
7236                 tnapi->last_tag = sblk->status_tag;
7237                 tnapi->last_irq_tag = tnapi->last_tag;
7238                 rmb();
7239
7240                 /* check for RX/TX work to do */
7241                 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
7242                            *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
7243
7244                         /* This test here is not race free, but will reduce
7245                          * the number of interrupts by looping again.
7246                          */
7247                         if (tnapi == &tp->napi[1] && tp->rx_refill)
7248                                 continue;
7249
7250                         napi_complete_done(napi, work_done);
7251                         /* Reenable interrupts. */
7252                         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
7253
7254                         /* This test here is synchronized by napi_schedule()
7255                          * and napi_complete() to close the race condition.
7256                          */
7257                         if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
7258                                 tw32(HOSTCC_MODE, tp->coalesce_mode |
7259                                                   HOSTCC_MODE_ENABLE |
7260                                                   tnapi->coal_now);
7261                         }
7262                         break;
7263                 }
7264         }
7265
7266         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7267         return work_done;
7268
7269 tx_recovery:
7270         /* work_done is guaranteed to be less than budget. */
7271         napi_complete(napi);
7272         tg3_reset_task_schedule(tp);
7273         return work_done;
7274 }
7275
7276 static void tg3_process_error(struct tg3 *tp)
7277 {
7278         u32 val;
7279         bool real_error = false;
7280
7281         if (tg3_flag(tp, ERROR_PROCESSED))
7282                 return;
7283
7284         /* Check Flow Attention register */
7285         val = tr32(HOSTCC_FLOW_ATTN);
7286         if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
7287                 netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
7288                 real_error = true;
7289         }
7290
7291         if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
7292                 netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
7293                 real_error = true;
7294         }
7295
7296         if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
7297                 netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
7298                 real_error = true;
7299         }
7300
7301         if (!real_error)
7302                 return;
7303
7304         tg3_dump_state(tp);
7305
7306         tg3_flag_set(tp, ERROR_PROCESSED);
7307         tg3_reset_task_schedule(tp);
7308 }
7309
7310 static int tg3_poll(struct napi_struct *napi, int budget)
7311 {
7312         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7313         struct tg3 *tp = tnapi->tp;
7314         int work_done = 0;
7315         struct tg3_hw_status *sblk = tnapi->hw_status;
7316
7317         while (1) {
7318                 if (sblk->status & SD_STATUS_ERROR)
7319                         tg3_process_error(tp);
7320
7321                 tg3_poll_link(tp);
7322
7323                 work_done = tg3_poll_work(tnapi, work_done, budget);
7324
7325                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7326                         goto tx_recovery;
7327
7328                 if (unlikely(work_done >= budget))
7329                         break;
7330
7331                 if (tg3_flag(tp, TAGGED_STATUS)) {
7332                         /* tp->last_tag is used in tg3_int_reenable() below
7333                          * to tell the hw how much work has been processed,
7334                          * so we must read it before checking for more work.
7335                          */
7336                         tnapi->last_tag = sblk->status_tag;
7337                         tnapi->last_irq_tag = tnapi->last_tag;
7338                         rmb();
7339                 } else
7340                         sblk->status &= ~SD_STATUS_UPDATED;
7341
7342                 if (likely(!tg3_has_work(tnapi))) {
7343                         napi_complete_done(napi, work_done);
7344                         tg3_int_reenable(tnapi);
7345                         break;
7346                 }
7347         }
7348
7349         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL << 1);
7350         return work_done;
7351
7352 tx_recovery:
7353         /* work_done is guaranteed to be less than budget. */
7354         napi_complete(napi);
7355         tg3_reset_task_schedule(tp);
7356         return work_done;
7357 }
7358
7359 static void tg3_napi_disable(struct tg3 *tp)
7360 {
7361         int i;
7362
7363         for (i = tp->irq_cnt - 1; i >= 0; i--)
7364                 napi_disable(&tp->napi[i].napi);
7365 }
7366
7367 static void tg3_napi_enable(struct tg3 *tp)
7368 {
7369         int i;
7370
7371         for (i = 0; i < tp->irq_cnt; i++)
7372                 napi_enable(&tp->napi[i].napi);
7373 }
7374
7375 static void tg3_napi_init(struct tg3 *tp)
7376 {
7377         int i;
7378
7379         netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll);
7380         for (i = 1; i < tp->irq_cnt; i++)
7381                 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix);
7382 }
7383
7384 static void tg3_napi_fini(struct tg3 *tp)
7385 {
7386         int i;
7387
7388         for (i = 0; i < tp->irq_cnt; i++)
7389                 netif_napi_del(&tp->napi[i].napi);
7390 }
7391
7392 static inline void tg3_netif_stop(struct tg3 *tp)
7393 {
7394         netif_trans_update(tp->dev);    /* prevent tx timeout */
7395         tg3_napi_disable(tp);
7396         netif_carrier_off(tp->dev);
7397         netif_tx_disable(tp->dev);
7398 }
7399
7400 /* tp->lock must be held */
7401 static inline void tg3_netif_start(struct tg3 *tp)
7402 {
7403         tg3_ptp_resume(tp);
7404
7405         /* NOTE: unconditional netif_tx_wake_all_queues is only
7406          * appropriate so long as all callers are assured to
7407          * have free tx slots (such as after tg3_init_hw)
7408          */
7409         netif_tx_wake_all_queues(tp->dev);
7410
7411         if (tp->link_up)
7412                 netif_carrier_on(tp->dev);
7413
7414         tg3_napi_enable(tp);
7415         tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
7416         tg3_enable_ints(tp);
7417 }
7418
7419 static void tg3_irq_quiesce(struct tg3 *tp)
7420         __releases(tp->lock)
7421         __acquires(tp->lock)
7422 {
7423         int i;
7424
7425         BUG_ON(tp->irq_sync);
7426
7427         tp->irq_sync = 1;
7428         smp_mb();
7429
7430         spin_unlock_bh(&tp->lock);
7431
7432         for (i = 0; i < tp->irq_cnt; i++)
7433                 synchronize_irq(tp->napi[i].irq_vec);
7434
7435         spin_lock_bh(&tp->lock);
7436 }
7437
7438 /* Fully shutdown all tg3 driver activity elsewhere in the system.
7439  * If irq_sync is non-zero, then the IRQ handler must be synchronized
7440  * with as well.  Most of the time, this is not necessary except when
7441  * shutting down the device.
7442  */
7443 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
7444 {
7445         spin_lock_bh(&tp->lock);
7446         if (irq_sync)
7447                 tg3_irq_quiesce(tp);
7448 }
7449
7450 static inline void tg3_full_unlock(struct tg3 *tp)
7451 {
7452         spin_unlock_bh(&tp->lock);
7453 }
7454
7455 /* One-shot MSI handler - Chip automatically disables interrupt
7456  * after sending MSI so driver doesn't have to do it.
7457  */
7458 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
7459 {
7460         struct tg3_napi *tnapi = dev_id;
7461         struct tg3 *tp = tnapi->tp;
7462
7463         prefetch(tnapi->hw_status);
7464         if (tnapi->rx_rcb)
7465                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7466
7467         if (likely(!tg3_irq_sync(tp)))
7468                 napi_schedule(&tnapi->napi);
7469
7470         return IRQ_HANDLED;
7471 }
7472
7473 /* MSI ISR - No need to check for interrupt sharing and no need to
7474  * flush status block and interrupt mailbox. PCI ordering rules
7475  * guarantee that MSI will arrive after the status block.
7476  */
7477 static irqreturn_t tg3_msi(int irq, void *dev_id)
7478 {
7479         struct tg3_napi *tnapi = dev_id;
7480         struct tg3 *tp = tnapi->tp;
7481
7482         prefetch(tnapi->hw_status);
7483         if (tnapi->rx_rcb)
7484                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7485         /*
7486          * Writing any value to intr-mbox-0 clears PCI INTA# and
7487          * chip-internal interrupt pending events.
7488          * Writing non-zero to intr-mbox-0 additional tells the
7489          * NIC to stop sending us irqs, engaging "in-intr-handler"
7490          * event coalescing.
7491          */
7492         tw32_mailbox(tnapi->int_mbox, 0x00000001);
7493         if (likely(!tg3_irq_sync(tp)))
7494                 napi_schedule(&tnapi->napi);
7495
7496         return IRQ_RETVAL(1);
7497 }
7498
7499 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
7500 {
7501         struct tg3_napi *tnapi = dev_id;
7502         struct tg3 *tp = tnapi->tp;
7503         struct tg3_hw_status *sblk = tnapi->hw_status;
7504         unsigned int handled = 1;
7505
7506         /* In INTx mode, it is possible for the interrupt to arrive at
7507          * the CPU before the status block posted prior to the interrupt.
7508          * Reading the PCI State register will confirm whether the
7509          * interrupt is ours and will flush the status block.
7510          */
7511         if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
7512                 if (tg3_flag(tp, CHIP_RESETTING) ||
7513                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7514                         handled = 0;
7515                         goto out;
7516                 }
7517         }
7518
7519         /*
7520          * Writing any value to intr-mbox-0 clears PCI INTA# and
7521          * chip-internal interrupt pending events.
7522          * Writing non-zero to intr-mbox-0 additional tells the
7523          * NIC to stop sending us irqs, engaging "in-intr-handler"
7524          * event coalescing.
7525          *
7526          * Flush the mailbox to de-assert the IRQ immediately to prevent
7527          * spurious interrupts.  The flush impacts performance but
7528          * excessive spurious interrupts can be worse in some cases.
7529          */
7530         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7531         if (tg3_irq_sync(tp))
7532                 goto out;
7533         sblk->status &= ~SD_STATUS_UPDATED;
7534         if (likely(tg3_has_work(tnapi))) {
7535                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7536                 napi_schedule(&tnapi->napi);
7537         } else {
7538                 /* No work, shared interrupt perhaps?  re-enable
7539                  * interrupts, and flush that PCI write
7540                  */
7541                 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
7542                                0x00000000);
7543         }
7544 out:
7545         return IRQ_RETVAL(handled);
7546 }
7547
7548 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
7549 {
7550         struct tg3_napi *tnapi = dev_id;
7551         struct tg3 *tp = tnapi->tp;
7552         struct tg3_hw_status *sblk = tnapi->hw_status;
7553         unsigned int handled = 1;
7554
7555         /* In INTx mode, it is possible for the interrupt to arrive at
7556          * the CPU before the status block posted prior to the interrupt.
7557          * Reading the PCI State register will confirm whether the
7558          * interrupt is ours and will flush the status block.
7559          */
7560         if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
7561                 if (tg3_flag(tp, CHIP_RESETTING) ||
7562                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7563                         handled = 0;
7564                         goto out;
7565                 }
7566         }
7567
7568         /*
7569          * writing any value to intr-mbox-0 clears PCI INTA# and
7570          * chip-internal interrupt pending events.
7571          * writing non-zero to intr-mbox-0 additional tells the
7572          * NIC to stop sending us irqs, engaging "in-intr-handler"
7573          * event coalescing.
7574          *
7575          * Flush the mailbox to de-assert the IRQ immediately to prevent
7576          * spurious interrupts.  The flush impacts performance but
7577          * excessive spurious interrupts can be worse in some cases.
7578          */
7579         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7580
7581         /*
7582          * In a shared interrupt configuration, sometimes other devices'
7583          * interrupts will scream.  We record the current status tag here
7584          * so that the above check can report that the screaming interrupts
7585          * are unhandled.  Eventually they will be silenced.
7586          */
7587         tnapi->last_irq_tag = sblk->status_tag;
7588
7589         if (tg3_irq_sync(tp))
7590                 goto out;
7591
7592         prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7593
7594         napi_schedule(&tnapi->napi);
7595
7596 out:
7597         return IRQ_RETVAL(handled);
7598 }
7599
7600 /* ISR for interrupt test */
7601 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7602 {
7603         struct tg3_napi *tnapi = dev_id;
7604         struct tg3 *tp = tnapi->tp;
7605         struct tg3_hw_status *sblk = tnapi->hw_status;
7606
7607         if ((sblk->status & SD_STATUS_UPDATED) ||
7608             !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7609                 tg3_disable_ints(tp);
7610                 return IRQ_RETVAL(1);
7611         }
7612         return IRQ_RETVAL(0);
7613 }
7614
7615 #ifdef CONFIG_NET_POLL_CONTROLLER
7616 static void tg3_poll_controller(struct net_device *dev)
7617 {
7618         int i;
7619         struct tg3 *tp = netdev_priv(dev);
7620
7621         if (tg3_irq_sync(tp))
7622                 return;
7623
7624         for (i = 0; i < tp->irq_cnt; i++)
7625                 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
7626 }
7627 #endif
7628
7629 static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue)
7630 {
7631         struct tg3 *tp = netdev_priv(dev);
7632
7633         if (netif_msg_tx_err(tp)) {
7634                 netdev_err(dev, "transmit timed out, resetting\n");
7635                 tg3_dump_state(tp);
7636         }
7637
7638         tg3_reset_task_schedule(tp);
7639 }
7640
7641 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
7642 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7643 {
7644         u32 base = (u32) mapping & 0xffffffff;
7645
7646         return base + len + 8 < base;
7647 }
7648
7649 /* Test for TSO DMA buffers that cross into regions which are within MSS bytes
7650  * of any 4GB boundaries: 4G, 8G, etc
7651  */
7652 static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7653                                            u32 len, u32 mss)
7654 {
7655         if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
7656                 u32 base = (u32) mapping & 0xffffffff;
7657
7658                 return ((base + len + (mss & 0x3fff)) < base);
7659         }
7660         return 0;
7661 }
7662
7663 /* Test for DMA addresses > 40-bit */
7664 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7665                                           int len)
7666 {
7667 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
7668         if (tg3_flag(tp, 40BIT_DMA_BUG))
7669                 return ((u64) mapping + len) > DMA_BIT_MASK(40);
7670         return 0;
7671 #else
7672         return 0;
7673 #endif
7674 }
7675
7676 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7677                                  dma_addr_t mapping, u32 len, u32 flags,
7678                                  u32 mss, u32 vlan)
7679 {
7680         txbd->addr_hi = ((u64) mapping >> 32);
7681         txbd->addr_lo = ((u64) mapping & 0xffffffff);
7682         txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7683         txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7684 }
7685
7686 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7687                             dma_addr_t map, u32 len, u32 flags,
7688                             u32 mss, u32 vlan)
7689 {
7690         struct tg3 *tp = tnapi->tp;
7691         bool hwbug = false;
7692
7693         if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7694                 hwbug = true;
7695
7696         if (tg3_4g_overflow_test(map, len))
7697                 hwbug = true;
7698
7699         if (tg3_4g_tso_overflow_test(tp, map, len, mss))
7700                 hwbug = true;
7701
7702         if (tg3_40bit_overflow_test(tp, map, len))
7703                 hwbug = true;
7704
7705         if (tp->dma_limit) {
7706                 u32 prvidx = *entry;
7707                 u32 tmp_flag = flags & ~TXD_FLAG_END;
7708                 while (len > tp->dma_limit && *budget) {
7709                         u32 frag_len = tp->dma_limit;
7710                         len -= tp->dma_limit;
7711
7712                         /* Avoid the 8byte DMA problem */
7713                         if (len <= 8) {
7714                                 len += tp->dma_limit / 2;
7715                                 frag_len = tp->dma_limit / 2;
7716                         }
7717
7718                         tnapi->tx_buffers[*entry].fragmented = true;
7719
7720                         tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7721                                       frag_len, tmp_flag, mss, vlan);
7722                         *budget -= 1;
7723                         prvidx = *entry;
7724                         *entry = NEXT_TX(*entry);
7725
7726                         map += frag_len;
7727                 }
7728
7729                 if (len) {
7730                         if (*budget) {
7731                                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7732                                               len, flags, mss, vlan);
7733                                 *budget -= 1;
7734                                 *entry = NEXT_TX(*entry);
7735                         } else {
7736                                 hwbug = true;
7737                                 tnapi->tx_buffers[prvidx].fragmented = false;
7738                         }
7739                 }
7740         } else {
7741                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7742                               len, flags, mss, vlan);
7743                 *entry = NEXT_TX(*entry);
7744         }
7745
7746         return hwbug;
7747 }
7748
7749 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7750 {
7751         int i;
7752         struct sk_buff *skb;
7753         struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7754
7755         skb = txb->skb;
7756         txb->skb = NULL;
7757
7758         dma_unmap_single(&tnapi->tp->pdev->dev, dma_unmap_addr(txb, mapping),
7759                          skb_headlen(skb), DMA_TO_DEVICE);
7760
7761         while (txb->fragmented) {
7762                 txb->fragmented = false;
7763                 entry = NEXT_TX(entry);
7764                 txb = &tnapi->tx_buffers[entry];
7765         }
7766
7767         for (i = 0; i <= last; i++) {
7768                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7769
7770                 entry = NEXT_TX(entry);
7771                 txb = &tnapi->tx_buffers[entry];
7772
7773                 dma_unmap_page(&tnapi->tp->pdev->dev,
7774                                dma_unmap_addr(txb, mapping),
7775                                skb_frag_size(frag), DMA_TO_DEVICE);
7776
7777                 while (txb->fragmented) {
7778                         txb->fragmented = false;
7779                         entry = NEXT_TX(entry);
7780                         txb = &tnapi->tx_buffers[entry];
7781                 }
7782         }
7783 }
7784
7785 /* Workaround 4GB and 40-bit hardware DMA bugs. */
7786 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7787                                        struct sk_buff **pskb,
7788                                        u32 *entry, u32 *budget,
7789                                        u32 base_flags, u32 mss, u32 vlan)
7790 {
7791         struct tg3 *tp = tnapi->tp;
7792         struct sk_buff *new_skb, *skb = *pskb;
7793         dma_addr_t new_addr = 0;
7794         int ret = 0;
7795
7796         if (tg3_asic_rev(tp) != ASIC_REV_5701)
7797                 new_skb = skb_copy(skb, GFP_ATOMIC);
7798         else {
7799                 int more_headroom = 4 - ((unsigned long)skb->data & 3);
7800
7801                 new_skb = skb_copy_expand(skb,
7802                                           skb_headroom(skb) + more_headroom,
7803                                           skb_tailroom(skb), GFP_ATOMIC);
7804         }
7805
7806         if (!new_skb) {
7807                 ret = -1;
7808         } else {
7809                 /* New SKB is guaranteed to be linear. */
7810                 new_addr = dma_map_single(&tp->pdev->dev, new_skb->data,
7811                                           new_skb->len, DMA_TO_DEVICE);
7812                 /* Make sure the mapping succeeded */
7813                 if (dma_mapping_error(&tp->pdev->dev, new_addr)) {
7814                         dev_kfree_skb_any(new_skb);
7815                         ret = -1;
7816                 } else {
7817                         u32 save_entry = *entry;
7818
7819                         base_flags |= TXD_FLAG_END;
7820
7821                         tnapi->tx_buffers[*entry].skb = new_skb;
7822                         dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7823                                            mapping, new_addr);
7824
7825                         if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7826                                             new_skb->len, base_flags,
7827                                             mss, vlan)) {
7828                                 tg3_tx_skb_unmap(tnapi, save_entry, -1);
7829                                 dev_kfree_skb_any(new_skb);
7830                                 ret = -1;
7831                         }
7832                 }
7833         }
7834
7835         dev_consume_skb_any(skb);
7836         *pskb = new_skb;
7837         return ret;
7838 }
7839
7840 static bool tg3_tso_bug_gso_check(struct tg3_napi *tnapi, struct sk_buff *skb)
7841 {
7842         /* Check if we will never have enough descriptors,
7843          * as gso_segs can be more than current ring size
7844          */
7845         return skb_shinfo(skb)->gso_segs < tnapi->tx_pending / 3;
7846 }
7847
7848 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7849
7850 /* Use GSO to workaround all TSO packets that meet HW bug conditions
7851  * indicated in tg3_tx_frag_set()
7852  */
7853 static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
7854                        struct netdev_queue *txq, struct sk_buff *skb)
7855 {
7856         u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7857         struct sk_buff *segs, *seg, *next;
7858
7859         /* Estimate the number of fragments in the worst case */
7860         if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
7861                 netif_tx_stop_queue(txq);
7862
7863                 /* netif_tx_stop_queue() must be done before checking
7864                  * checking tx index in tg3_tx_avail() below, because in
7865                  * tg3_tx(), we update tx index before checking for
7866                  * netif_tx_queue_stopped().
7867                  */
7868                 smp_mb();
7869                 if (tg3_tx_avail(tnapi) <= frag_cnt_est)
7870                         return NETDEV_TX_BUSY;
7871
7872                 netif_tx_wake_queue(txq);
7873         }
7874
7875         segs = skb_gso_segment(skb, tp->dev->features &
7876                                     ~(NETIF_F_TSO | NETIF_F_TSO6));
7877         if (IS_ERR(segs) || !segs)
7878                 goto tg3_tso_bug_end;
7879
7880         skb_list_walk_safe(segs, seg, next) {
7881                 skb_mark_not_on_list(seg);
7882                 tg3_start_xmit(seg, tp->dev);
7883         }
7884
7885 tg3_tso_bug_end:
7886         dev_consume_skb_any(skb);
7887
7888         return NETDEV_TX_OK;
7889 }
7890
7891 /* hard_start_xmit for all devices */
7892 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7893 {
7894         struct tg3 *tp = netdev_priv(dev);
7895         u32 len, entry, base_flags, mss, vlan = 0;
7896         u32 budget;
7897         int i = -1, would_hit_hwbug;
7898         dma_addr_t mapping;
7899         struct tg3_napi *tnapi;
7900         struct netdev_queue *txq;
7901         unsigned int last;
7902         struct iphdr *iph = NULL;
7903         struct tcphdr *tcph = NULL;
7904         __sum16 tcp_csum = 0, ip_csum = 0;
7905         __be16 ip_tot_len = 0;
7906
7907         txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7908         tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7909         if (tg3_flag(tp, ENABLE_TSS))
7910                 tnapi++;
7911
7912         budget = tg3_tx_avail(tnapi);
7913
7914         /* We are running in BH disabled context with netif_tx_lock
7915          * and TX reclaim runs via tp->napi.poll inside of a software
7916          * interrupt.  Furthermore, IRQ processing runs lockless so we have
7917          * no IRQ context deadlocks to worry about either.  Rejoice!
7918          */
7919         if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7920                 if (!netif_tx_queue_stopped(txq)) {
7921                         netif_tx_stop_queue(txq);
7922
7923                         /* This is a hard error, log it. */
7924                         netdev_err(dev,
7925                                    "BUG! Tx Ring full when queue awake!\n");
7926                 }
7927                 return NETDEV_TX_BUSY;
7928         }
7929
7930         entry = tnapi->tx_prod;
7931         base_flags = 0;
7932
7933         mss = skb_shinfo(skb)->gso_size;
7934         if (mss) {
7935                 u32 tcp_opt_len, hdr_len;
7936
7937                 if (skb_cow_head(skb, 0))
7938                         goto drop;
7939
7940                 iph = ip_hdr(skb);
7941                 tcp_opt_len = tcp_optlen(skb);
7942
7943                 hdr_len = skb_tcp_all_headers(skb) - ETH_HLEN;
7944
7945                 /* HW/FW can not correctly segment packets that have been
7946                  * vlan encapsulated.
7947                  */
7948                 if (skb->protocol == htons(ETH_P_8021Q) ||
7949                     skb->protocol == htons(ETH_P_8021AD)) {
7950                         if (tg3_tso_bug_gso_check(tnapi, skb))
7951                                 return tg3_tso_bug(tp, tnapi, txq, skb);
7952                         goto drop;
7953                 }
7954
7955                 if (!skb_is_gso_v6(skb)) {
7956                         if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7957                             tg3_flag(tp, TSO_BUG)) {
7958                                 if (tg3_tso_bug_gso_check(tnapi, skb))
7959                                         return tg3_tso_bug(tp, tnapi, txq, skb);
7960                                 goto drop;
7961                         }
7962                         ip_csum = iph->check;
7963                         ip_tot_len = iph->tot_len;
7964                         iph->check = 0;
7965                         iph->tot_len = htons(mss + hdr_len);
7966                 }
7967
7968                 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7969                                TXD_FLAG_CPU_POST_DMA);
7970
7971                 tcph = tcp_hdr(skb);
7972                 tcp_csum = tcph->check;
7973
7974                 if (tg3_flag(tp, HW_TSO_1) ||
7975                     tg3_flag(tp, HW_TSO_2) ||
7976                     tg3_flag(tp, HW_TSO_3)) {
7977                         tcph->check = 0;
7978                         base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7979                 } else {
7980                         tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
7981                                                          0, IPPROTO_TCP, 0);
7982                 }
7983
7984                 if (tg3_flag(tp, HW_TSO_3)) {
7985                         mss |= (hdr_len & 0xc) << 12;
7986                         if (hdr_len & 0x10)
7987                                 base_flags |= 0x00000010;
7988                         base_flags |= (hdr_len & 0x3e0) << 5;
7989                 } else if (tg3_flag(tp, HW_TSO_2))
7990                         mss |= hdr_len << 9;
7991                 else if (tg3_flag(tp, HW_TSO_1) ||
7992                          tg3_asic_rev(tp) == ASIC_REV_5705) {
7993                         if (tcp_opt_len || iph->ihl > 5) {
7994                                 int tsflags;
7995
7996                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7997                                 mss |= (tsflags << 11);
7998                         }
7999                 } else {
8000                         if (tcp_opt_len || iph->ihl > 5) {
8001                                 int tsflags;
8002
8003                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
8004                                 base_flags |= tsflags << 12;
8005                         }
8006                 }
8007         } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
8008                 /* HW/FW can not correctly checksum packets that have been
8009                  * vlan encapsulated.
8010                  */
8011                 if (skb->protocol == htons(ETH_P_8021Q) ||
8012                     skb->protocol == htons(ETH_P_8021AD)) {
8013                         if (skb_checksum_help(skb))
8014                                 goto drop;
8015                 } else  {
8016                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
8017                 }
8018         }
8019
8020         if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
8021             !mss && skb->len > VLAN_ETH_FRAME_LEN)
8022                 base_flags |= TXD_FLAG_JMB_PKT;
8023
8024         if (skb_vlan_tag_present(skb)) {
8025                 base_flags |= TXD_FLAG_VLAN;
8026                 vlan = skb_vlan_tag_get(skb);
8027         }
8028
8029         if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
8030             tg3_flag(tp, TX_TSTAMP_EN)) {
8031                 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
8032                 base_flags |= TXD_FLAG_HWTSTAMP;
8033         }
8034
8035         len = skb_headlen(skb);
8036
8037         mapping = dma_map_single(&tp->pdev->dev, skb->data, len,
8038                                  DMA_TO_DEVICE);
8039         if (dma_mapping_error(&tp->pdev->dev, mapping))
8040                 goto drop;
8041
8042
8043         tnapi->tx_buffers[entry].skb = skb;
8044         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
8045
8046         would_hit_hwbug = 0;
8047
8048         if (tg3_flag(tp, 5701_DMA_BUG))
8049                 would_hit_hwbug = 1;
8050
8051         if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
8052                           ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
8053                             mss, vlan)) {
8054                 would_hit_hwbug = 1;
8055         } else if (skb_shinfo(skb)->nr_frags > 0) {
8056                 u32 tmp_mss = mss;
8057
8058                 if (!tg3_flag(tp, HW_TSO_1) &&
8059                     !tg3_flag(tp, HW_TSO_2) &&
8060                     !tg3_flag(tp, HW_TSO_3))
8061                         tmp_mss = 0;
8062
8063                 /* Now loop through additional data
8064                  * fragments, and queue them.
8065                  */
8066                 last = skb_shinfo(skb)->nr_frags - 1;
8067                 for (i = 0; i <= last; i++) {
8068                         skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
8069
8070                         len = skb_frag_size(frag);
8071                         mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
8072                                                    len, DMA_TO_DEVICE);
8073
8074                         tnapi->tx_buffers[entry].skb = NULL;
8075                         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
8076                                            mapping);
8077                         if (dma_mapping_error(&tp->pdev->dev, mapping))
8078                                 goto dma_error;
8079
8080                         if (!budget ||
8081                             tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
8082                                             len, base_flags |
8083                                             ((i == last) ? TXD_FLAG_END : 0),
8084                                             tmp_mss, vlan)) {
8085                                 would_hit_hwbug = 1;
8086                                 break;
8087                         }
8088                 }
8089         }
8090
8091         if (would_hit_hwbug) {
8092                 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
8093
8094                 if (mss && tg3_tso_bug_gso_check(tnapi, skb)) {
8095                         /* If it's a TSO packet, do GSO instead of
8096                          * allocating and copying to a large linear SKB
8097                          */
8098                         if (ip_tot_len) {
8099                                 iph->check = ip_csum;
8100                                 iph->tot_len = ip_tot_len;
8101                         }
8102                         tcph->check = tcp_csum;
8103                         return tg3_tso_bug(tp, tnapi, txq, skb);
8104                 }
8105
8106                 /* If the workaround fails due to memory/mapping
8107                  * failure, silently drop this packet.
8108                  */
8109                 entry = tnapi->tx_prod;
8110                 budget = tg3_tx_avail(tnapi);
8111                 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
8112                                                 base_flags, mss, vlan))
8113                         goto drop_nofree;
8114         }
8115
8116         skb_tx_timestamp(skb);
8117         netdev_tx_sent_queue(txq, skb->len);
8118
8119         /* Sync BD data before updating mailbox */
8120         wmb();
8121
8122         tnapi->tx_prod = entry;
8123         if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
8124                 netif_tx_stop_queue(txq);
8125
8126                 /* netif_tx_stop_queue() must be done before checking
8127                  * checking tx index in tg3_tx_avail() below, because in
8128                  * tg3_tx(), we update tx index before checking for
8129                  * netif_tx_queue_stopped().
8130                  */
8131                 smp_mb();
8132                 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
8133                         netif_tx_wake_queue(txq);
8134         }
8135
8136         if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
8137                 /* Packets are ready, update Tx producer idx on card. */
8138                 tw32_tx_mbox(tnapi->prodmbox, entry);
8139         }
8140
8141         return NETDEV_TX_OK;
8142
8143 dma_error:
8144         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
8145         tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
8146 drop:
8147         dev_kfree_skb_any(skb);
8148 drop_nofree:
8149         tp->tx_dropped++;
8150         return NETDEV_TX_OK;
8151 }
8152
8153 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
8154 {
8155         if (enable) {
8156                 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
8157                                   MAC_MODE_PORT_MODE_MASK);
8158
8159                 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
8160
8161                 if (!tg3_flag(tp, 5705_PLUS))
8162                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
8163
8164                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
8165                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
8166                 else
8167                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
8168         } else {
8169                 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
8170
8171                 if (tg3_flag(tp, 5705_PLUS) ||
8172                     (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
8173                     tg3_asic_rev(tp) == ASIC_REV_5700)
8174                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
8175         }
8176
8177         tw32(MAC_MODE, tp->mac_mode);
8178         udelay(40);
8179 }
8180
8181 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
8182 {
8183         u32 val, bmcr, mac_mode, ptest = 0;
8184
8185         tg3_phy_toggle_apd(tp, false);
8186         tg3_phy_toggle_automdix(tp, false);
8187
8188         if (extlpbk && tg3_phy_set_extloopbk(tp))
8189                 return -EIO;
8190
8191         bmcr = BMCR_FULLDPLX;
8192         switch (speed) {
8193         case SPEED_10:
8194                 break;
8195         case SPEED_100:
8196                 bmcr |= BMCR_SPEED100;
8197                 break;
8198         case SPEED_1000:
8199         default:
8200                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
8201                         speed = SPEED_100;
8202                         bmcr |= BMCR_SPEED100;
8203                 } else {
8204                         speed = SPEED_1000;
8205                         bmcr |= BMCR_SPEED1000;
8206                 }
8207         }
8208
8209         if (extlpbk) {
8210                 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
8211                         tg3_readphy(tp, MII_CTRL1000, &val);
8212                         val |= CTL1000_AS_MASTER |
8213                                CTL1000_ENABLE_MASTER;
8214                         tg3_writephy(tp, MII_CTRL1000, val);
8215                 } else {
8216                         ptest = MII_TG3_FET_PTEST_TRIM_SEL |
8217                                 MII_TG3_FET_PTEST_TRIM_2;
8218                         tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
8219                 }
8220         } else
8221                 bmcr |= BMCR_LOOPBACK;
8222
8223         tg3_writephy(tp, MII_BMCR, bmcr);
8224
8225         /* The write needs to be flushed for the FETs */
8226         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
8227                 tg3_readphy(tp, MII_BMCR, &bmcr);
8228
8229         udelay(40);
8230
8231         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
8232             tg3_asic_rev(tp) == ASIC_REV_5785) {
8233                 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
8234                              MII_TG3_FET_PTEST_FRC_TX_LINK |
8235                              MII_TG3_FET_PTEST_FRC_TX_LOCK);
8236
8237                 /* The write needs to be flushed for the AC131 */
8238                 tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
8239         }
8240
8241         /* Reset to prevent losing 1st rx packet intermittently */
8242         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
8243             tg3_flag(tp, 5780_CLASS)) {
8244                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8245                 udelay(10);
8246                 tw32_f(MAC_RX_MODE, tp->rx_mode);
8247         }
8248
8249         mac_mode = tp->mac_mode &
8250                    ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
8251         if (speed == SPEED_1000)
8252                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
8253         else
8254                 mac_mode |= MAC_MODE_PORT_MODE_MII;
8255
8256         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
8257                 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
8258
8259                 if (masked_phy_id == TG3_PHY_ID_BCM5401)
8260                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
8261                 else if (masked_phy_id == TG3_PHY_ID_BCM5411)
8262                         mac_mode |= MAC_MODE_LINK_POLARITY;
8263
8264                 tg3_writephy(tp, MII_TG3_EXT_CTRL,
8265                              MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8266         }
8267
8268         tw32(MAC_MODE, mac_mode);
8269         udelay(40);
8270
8271         return 0;
8272 }
8273
8274 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
8275 {
8276         struct tg3 *tp = netdev_priv(dev);
8277
8278         if (features & NETIF_F_LOOPBACK) {
8279                 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
8280                         return;
8281
8282                 spin_lock_bh(&tp->lock);
8283                 tg3_mac_loopback(tp, true);
8284                 netif_carrier_on(tp->dev);
8285                 spin_unlock_bh(&tp->lock);
8286                 netdev_info(dev, "Internal MAC loopback mode enabled.\n");
8287         } else {
8288                 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
8289                         return;
8290
8291                 spin_lock_bh(&tp->lock);
8292                 tg3_mac_loopback(tp, false);
8293                 /* Force link status check */
8294                 tg3_setup_phy(tp, true);
8295                 spin_unlock_bh(&tp->lock);
8296                 netdev_info(dev, "Internal MAC loopback mode disabled.\n");
8297         }
8298 }
8299
8300 static netdev_features_t tg3_fix_features(struct net_device *dev,
8301         netdev_features_t features)
8302 {
8303         struct tg3 *tp = netdev_priv(dev);
8304
8305         if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
8306                 features &= ~NETIF_F_ALL_TSO;
8307
8308         return features;
8309 }
8310
8311 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
8312 {
8313         netdev_features_t changed = dev->features ^ features;
8314
8315         if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
8316                 tg3_set_loopback(dev, features);
8317
8318         return 0;
8319 }
8320
8321 static void tg3_rx_prodring_free(struct tg3 *tp,
8322                                  struct tg3_rx_prodring_set *tpr)
8323 {
8324         int i;
8325
8326         if (tpr != &tp->napi[0].prodring) {
8327                 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
8328                      i = (i + 1) & tp->rx_std_ring_mask)
8329                         tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8330                                         tp->rx_pkt_map_sz);
8331
8332                 if (tg3_flag(tp, JUMBO_CAPABLE)) {
8333                         for (i = tpr->rx_jmb_cons_idx;
8334                              i != tpr->rx_jmb_prod_idx;
8335                              i = (i + 1) & tp->rx_jmb_ring_mask) {
8336                                 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8337                                                 TG3_RX_JMB_MAP_SZ);
8338                         }
8339                 }
8340
8341                 return;
8342         }
8343
8344         for (i = 0; i <= tp->rx_std_ring_mask; i++)
8345                 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8346                                 tp->rx_pkt_map_sz);
8347
8348         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8349                 for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
8350                         tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8351                                         TG3_RX_JMB_MAP_SZ);
8352         }
8353 }
8354
8355 /* Initialize rx rings for packet processing.
8356  *
8357  * The chip has been shut down and the driver detached from
8358  * the networking, so no interrupts or new tx packets will
8359  * end up in the driver.  tp->{tx,}lock are held and thus
8360  * we may not sleep.
8361  */
8362 static int tg3_rx_prodring_alloc(struct tg3 *tp,
8363                                  struct tg3_rx_prodring_set *tpr)
8364 {
8365         u32 i, rx_pkt_dma_sz;
8366
8367         tpr->rx_std_cons_idx = 0;
8368         tpr->rx_std_prod_idx = 0;
8369         tpr->rx_jmb_cons_idx = 0;
8370         tpr->rx_jmb_prod_idx = 0;
8371
8372         if (tpr != &tp->napi[0].prodring) {
8373                 memset(&tpr->rx_std_buffers[0], 0,
8374                        TG3_RX_STD_BUFF_RING_SIZE(tp));
8375                 if (tpr->rx_jmb_buffers)
8376                         memset(&tpr->rx_jmb_buffers[0], 0,
8377                                TG3_RX_JMB_BUFF_RING_SIZE(tp));
8378                 goto done;
8379         }
8380
8381         /* Zero out all descriptors. */
8382         memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
8383
8384         rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
8385         if (tg3_flag(tp, 5780_CLASS) &&
8386             tp->dev->mtu > ETH_DATA_LEN)
8387                 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
8388         tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
8389
8390         /* Initialize invariants of the rings, we only set this
8391          * stuff once.  This works because the card does not
8392          * write into the rx buffer posting rings.
8393          */
8394         for (i = 0; i <= tp->rx_std_ring_mask; i++) {
8395                 struct tg3_rx_buffer_desc *rxd;
8396
8397                 rxd = &tpr->rx_std[i];
8398                 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
8399                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
8400                 rxd->opaque = (RXD_OPAQUE_RING_STD |
8401                                (i << RXD_OPAQUE_INDEX_SHIFT));
8402         }
8403
8404         /* Now allocate fresh SKBs for each rx ring. */
8405         for (i = 0; i < tp->rx_pending; i++) {
8406                 unsigned int frag_size;
8407
8408                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
8409                                       &frag_size) < 0) {
8410                         netdev_warn(tp->dev,
8411                                     "Using a smaller RX standard ring. Only "
8412                                     "%d out of %d buffers were allocated "
8413                                     "successfully\n", i, tp->rx_pending);
8414                         if (i == 0)
8415                                 goto initfail;
8416                         tp->rx_pending = i;
8417                         break;
8418                 }
8419         }
8420
8421         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8422                 goto done;
8423
8424         memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
8425
8426         if (!tg3_flag(tp, JUMBO_RING_ENABLE))
8427                 goto done;
8428
8429         for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
8430                 struct tg3_rx_buffer_desc *rxd;
8431
8432                 rxd = &tpr->rx_jmb[i].std;
8433                 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
8434                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
8435                                   RXD_FLAG_JUMBO;
8436                 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
8437                        (i << RXD_OPAQUE_INDEX_SHIFT));
8438         }
8439
8440         for (i = 0; i < tp->rx_jumbo_pending; i++) {
8441                 unsigned int frag_size;
8442
8443                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
8444                                       &frag_size) < 0) {
8445                         netdev_warn(tp->dev,
8446                                     "Using a smaller RX jumbo ring. Only %d "
8447                                     "out of %d buffers were allocated "
8448                                     "successfully\n", i, tp->rx_jumbo_pending);
8449                         if (i == 0)
8450                                 goto initfail;
8451                         tp->rx_jumbo_pending = i;
8452                         break;
8453                 }
8454         }
8455
8456 done:
8457         return 0;
8458
8459 initfail:
8460         tg3_rx_prodring_free(tp, tpr);
8461         return -ENOMEM;
8462 }
8463
8464 static void tg3_rx_prodring_fini(struct tg3 *tp,
8465                                  struct tg3_rx_prodring_set *tpr)
8466 {
8467         kfree(tpr->rx_std_buffers);
8468         tpr->rx_std_buffers = NULL;
8469         kfree(tpr->rx_jmb_buffers);
8470         tpr->rx_jmb_buffers = NULL;
8471         if (tpr->rx_std) {
8472                 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
8473                                   tpr->rx_std, tpr->rx_std_mapping);
8474                 tpr->rx_std = NULL;
8475         }
8476         if (tpr->rx_jmb) {
8477                 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
8478                                   tpr->rx_jmb, tpr->rx_jmb_mapping);
8479                 tpr->rx_jmb = NULL;
8480         }
8481 }
8482
8483 static int tg3_rx_prodring_init(struct tg3 *tp,
8484                                 struct tg3_rx_prodring_set *tpr)
8485 {
8486         tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
8487                                       GFP_KERNEL);
8488         if (!tpr->rx_std_buffers)
8489                 return -ENOMEM;
8490
8491         tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
8492                                          TG3_RX_STD_RING_BYTES(tp),
8493                                          &tpr->rx_std_mapping,
8494                                          GFP_KERNEL);
8495         if (!tpr->rx_std)
8496                 goto err_out;
8497
8498         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8499                 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
8500                                               GFP_KERNEL);
8501                 if (!tpr->rx_jmb_buffers)
8502                         goto err_out;
8503
8504                 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
8505                                                  TG3_RX_JMB_RING_BYTES(tp),
8506                                                  &tpr->rx_jmb_mapping,
8507                                                  GFP_KERNEL);
8508                 if (!tpr->rx_jmb)
8509                         goto err_out;
8510         }
8511
8512         return 0;
8513
8514 err_out:
8515         tg3_rx_prodring_fini(tp, tpr);
8516         return -ENOMEM;
8517 }
8518
8519 /* Free up pending packets in all rx/tx rings.
8520  *
8521  * The chip has been shut down and the driver detached from
8522  * the networking, so no interrupts or new tx packets will
8523  * end up in the driver.  tp->{tx,}lock is not held and we are not
8524  * in an interrupt context and thus may sleep.
8525  */
8526 static void tg3_free_rings(struct tg3 *tp)
8527 {
8528         int i, j;
8529
8530         for (j = 0; j < tp->irq_cnt; j++) {
8531                 struct tg3_napi *tnapi = &tp->napi[j];
8532
8533                 tg3_rx_prodring_free(tp, &tnapi->prodring);
8534
8535                 if (!tnapi->tx_buffers)
8536                         continue;
8537
8538                 for (i = 0; i < TG3_TX_RING_SIZE; i++) {
8539                         struct sk_buff *skb = tnapi->tx_buffers[i].skb;
8540
8541                         if (!skb)
8542                                 continue;
8543
8544                         tg3_tx_skb_unmap(tnapi, i,
8545                                          skb_shinfo(skb)->nr_frags - 1);
8546
8547                         dev_consume_skb_any(skb);
8548                 }
8549                 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
8550         }
8551 }
8552
8553 /* Initialize tx/rx rings for packet processing.
8554  *
8555  * The chip has been shut down and the driver detached from
8556  * the networking, so no interrupts or new tx packets will
8557  * end up in the driver.  tp->{tx,}lock are held and thus
8558  * we may not sleep.
8559  */
8560 static int tg3_init_rings(struct tg3 *tp)
8561 {
8562         int i;
8563
8564         /* Free up all the SKBs. */
8565         tg3_free_rings(tp);
8566
8567         for (i = 0; i < tp->irq_cnt; i++) {
8568                 struct tg3_napi *tnapi = &tp->napi[i];
8569
8570                 tnapi->last_tag = 0;
8571                 tnapi->last_irq_tag = 0;
8572                 tnapi->hw_status->status = 0;
8573                 tnapi->hw_status->status_tag = 0;
8574                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8575
8576                 tnapi->tx_prod = 0;
8577                 tnapi->tx_cons = 0;
8578                 if (tnapi->tx_ring)
8579                         memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
8580
8581                 tnapi->rx_rcb_ptr = 0;
8582                 if (tnapi->rx_rcb)
8583                         memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
8584
8585                 if (tnapi->prodring.rx_std &&
8586                     tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
8587                         tg3_free_rings(tp);
8588                         return -ENOMEM;
8589                 }
8590         }
8591
8592         return 0;
8593 }
8594
8595 static void tg3_mem_tx_release(struct tg3 *tp)
8596 {
8597         int i;
8598
8599         for (i = 0; i < tp->irq_max; i++) {
8600                 struct tg3_napi *tnapi = &tp->napi[i];
8601
8602                 if (tnapi->tx_ring) {
8603                         dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
8604                                 tnapi->tx_ring, tnapi->tx_desc_mapping);
8605                         tnapi->tx_ring = NULL;
8606                 }
8607
8608                 kfree(tnapi->tx_buffers);
8609                 tnapi->tx_buffers = NULL;
8610         }
8611 }
8612
8613 static int tg3_mem_tx_acquire(struct tg3 *tp)
8614 {
8615         int i;
8616         struct tg3_napi *tnapi = &tp->napi[0];
8617
8618         /* If multivector TSS is enabled, vector 0 does not handle
8619          * tx interrupts.  Don't allocate any resources for it.
8620          */
8621         if (tg3_flag(tp, ENABLE_TSS))
8622                 tnapi++;
8623
8624         for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
8625                 tnapi->tx_buffers = kcalloc(TG3_TX_RING_SIZE,
8626                                             sizeof(struct tg3_tx_ring_info),
8627                                             GFP_KERNEL);
8628                 if (!tnapi->tx_buffers)
8629                         goto err_out;
8630
8631                 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
8632                                                     TG3_TX_RING_BYTES,
8633                                                     &tnapi->tx_desc_mapping,
8634                                                     GFP_KERNEL);
8635                 if (!tnapi->tx_ring)
8636                         goto err_out;
8637         }
8638
8639         return 0;
8640
8641 err_out:
8642         tg3_mem_tx_release(tp);
8643         return -ENOMEM;
8644 }
8645
8646 static void tg3_mem_rx_release(struct tg3 *tp)
8647 {
8648         int i;
8649
8650         for (i = 0; i < tp->irq_max; i++) {
8651                 struct tg3_napi *tnapi = &tp->napi[i];
8652
8653                 tg3_rx_prodring_fini(tp, &tnapi->prodring);
8654
8655                 if (!tnapi->rx_rcb)
8656                         continue;
8657
8658                 dma_free_coherent(&tp->pdev->dev,
8659                                   TG3_RX_RCB_RING_BYTES(tp),
8660                                   tnapi->rx_rcb,
8661                                   tnapi->rx_rcb_mapping);
8662                 tnapi->rx_rcb = NULL;
8663         }
8664 }
8665
8666 static int tg3_mem_rx_acquire(struct tg3 *tp)
8667 {
8668         unsigned int i, limit;
8669
8670         limit = tp->rxq_cnt;
8671
8672         /* If RSS is enabled, we need a (dummy) producer ring
8673          * set on vector zero.  This is the true hw prodring.
8674          */
8675         if (tg3_flag(tp, ENABLE_RSS))
8676                 limit++;
8677
8678         for (i = 0; i < limit; i++) {
8679                 struct tg3_napi *tnapi = &tp->napi[i];
8680
8681                 if (tg3_rx_prodring_init(tp, &tnapi->prodring))
8682                         goto err_out;
8683
8684                 /* If multivector RSS is enabled, vector 0
8685                  * does not handle rx or tx interrupts.
8686                  * Don't allocate any resources for it.
8687                  */
8688                 if (!i && tg3_flag(tp, ENABLE_RSS))
8689                         continue;
8690
8691                 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
8692                                                    TG3_RX_RCB_RING_BYTES(tp),
8693                                                    &tnapi->rx_rcb_mapping,
8694                                                    GFP_KERNEL);
8695                 if (!tnapi->rx_rcb)
8696                         goto err_out;
8697         }
8698
8699         return 0;
8700
8701 err_out:
8702         tg3_mem_rx_release(tp);
8703         return -ENOMEM;
8704 }
8705
8706 /*
8707  * Must not be invoked with interrupt sources disabled and
8708  * the hardware shutdown down.
8709  */
8710 static void tg3_free_consistent(struct tg3 *tp)
8711 {
8712         int i;
8713
8714         for (i = 0; i < tp->irq_cnt; i++) {
8715                 struct tg3_napi *tnapi = &tp->napi[i];
8716
8717                 if (tnapi->hw_status) {
8718                         dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8719                                           tnapi->hw_status,
8720                                           tnapi->status_mapping);
8721                         tnapi->hw_status = NULL;
8722                 }
8723         }
8724
8725         tg3_mem_rx_release(tp);
8726         tg3_mem_tx_release(tp);
8727
8728         /* tp->hw_stats can be referenced safely:
8729          *     1. under rtnl_lock
8730          *     2. or under tp->lock if TG3_FLAG_INIT_COMPLETE is set.
8731          */
8732         if (tp->hw_stats) {
8733                 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8734                                   tp->hw_stats, tp->stats_mapping);
8735                 tp->hw_stats = NULL;
8736         }
8737 }
8738
8739 /*
8740  * Must not be invoked with interrupt sources disabled and
8741  * the hardware shutdown down.  Can sleep.
8742  */
8743 static int tg3_alloc_consistent(struct tg3 *tp)
8744 {
8745         int i;
8746
8747         tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
8748                                           sizeof(struct tg3_hw_stats),
8749                                           &tp->stats_mapping, GFP_KERNEL);
8750         if (!tp->hw_stats)
8751                 goto err_out;
8752
8753         for (i = 0; i < tp->irq_cnt; i++) {
8754                 struct tg3_napi *tnapi = &tp->napi[i];
8755                 struct tg3_hw_status *sblk;
8756
8757                 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
8758                                                       TG3_HW_STATUS_SIZE,
8759                                                       &tnapi->status_mapping,
8760                                                       GFP_KERNEL);
8761                 if (!tnapi->hw_status)
8762                         goto err_out;
8763
8764                 sblk = tnapi->hw_status;
8765
8766                 if (tg3_flag(tp, ENABLE_RSS)) {
8767                         u16 *prodptr = NULL;
8768
8769                         /*
8770                          * When RSS is enabled, the status block format changes
8771                          * slightly.  The "rx_jumbo_consumer", "reserved",
8772                          * and "rx_mini_consumer" members get mapped to the
8773                          * other three rx return ring producer indexes.
8774                          */
8775                         switch (i) {
8776                         case 1:
8777                                 prodptr = &sblk->idx[0].rx_producer;
8778                                 break;
8779                         case 2:
8780                                 prodptr = &sblk->rx_jumbo_consumer;
8781                                 break;
8782                         case 3:
8783                                 prodptr = &sblk->reserved;
8784                                 break;
8785                         case 4:
8786                                 prodptr = &sblk->rx_mini_consumer;
8787                                 break;
8788                         }
8789                         tnapi->rx_rcb_prod_idx = prodptr;
8790                 } else {
8791                         tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8792                 }
8793         }
8794
8795         if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8796                 goto err_out;
8797
8798         return 0;
8799
8800 err_out:
8801         tg3_free_consistent(tp);
8802         return -ENOMEM;
8803 }
8804
8805 #define MAX_WAIT_CNT 1000
8806
8807 /* To stop a block, clear the enable bit and poll till it
8808  * clears.  tp->lock is held.
8809  */
8810 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent)
8811 {
8812         unsigned int i;
8813         u32 val;
8814
8815         if (tg3_flag(tp, 5705_PLUS)) {
8816                 switch (ofs) {
8817                 case RCVLSC_MODE:
8818                 case DMAC_MODE:
8819                 case MBFREE_MODE:
8820                 case BUFMGR_MODE:
8821                 case MEMARB_MODE:
8822                         /* We can't enable/disable these bits of the
8823                          * 5705/5750, just say success.
8824                          */
8825                         return 0;
8826
8827                 default:
8828                         break;
8829                 }
8830         }
8831
8832         val = tr32(ofs);
8833         val &= ~enable_bit;
8834         tw32_f(ofs, val);
8835
8836         for (i = 0; i < MAX_WAIT_CNT; i++) {
8837                 if (pci_channel_offline(tp->pdev)) {
8838                         dev_err(&tp->pdev->dev,
8839                                 "tg3_stop_block device offline, "
8840                                 "ofs=%lx enable_bit=%x\n",
8841                                 ofs, enable_bit);
8842                         return -ENODEV;
8843                 }
8844
8845                 udelay(100);
8846                 val = tr32(ofs);
8847                 if ((val & enable_bit) == 0)
8848                         break;
8849         }
8850
8851         if (i == MAX_WAIT_CNT && !silent) {
8852                 dev_err(&tp->pdev->dev,
8853                         "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8854                         ofs, enable_bit);
8855                 return -ENODEV;
8856         }
8857
8858         return 0;
8859 }
8860
8861 /* tp->lock is held. */
8862 static int tg3_abort_hw(struct tg3 *tp, bool silent)
8863 {
8864         int i, err;
8865
8866         tg3_disable_ints(tp);
8867
8868         if (pci_channel_offline(tp->pdev)) {
8869                 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE);
8870                 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8871                 err = -ENODEV;
8872                 goto err_no_dev;
8873         }
8874
8875         tp->rx_mode &= ~RX_MODE_ENABLE;
8876         tw32_f(MAC_RX_MODE, tp->rx_mode);
8877         udelay(10);
8878
8879         err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8880         err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8881         err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8882         err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8883         err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8884         err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8885
8886         err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8887         err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8888         err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8889         err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8890         err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8891         err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8892         err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8893
8894         tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8895         tw32_f(MAC_MODE, tp->mac_mode);
8896         udelay(40);
8897
8898         tp->tx_mode &= ~TX_MODE_ENABLE;
8899         tw32_f(MAC_TX_MODE, tp->tx_mode);
8900
8901         for (i = 0; i < MAX_WAIT_CNT; i++) {
8902                 udelay(100);
8903                 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8904                         break;
8905         }
8906         if (i >= MAX_WAIT_CNT) {
8907                 dev_err(&tp->pdev->dev,
8908                         "%s timed out, TX_MODE_ENABLE will not clear "
8909                         "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8910                 err |= -ENODEV;
8911         }
8912
8913         err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8914         err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8915         err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8916
8917         tw32(FTQ_RESET, 0xffffffff);
8918         tw32(FTQ_RESET, 0x00000000);
8919
8920         err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8921         err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8922
8923 err_no_dev:
8924         for (i = 0; i < tp->irq_cnt; i++) {
8925                 struct tg3_napi *tnapi = &tp->napi[i];
8926                 if (tnapi->hw_status)
8927                         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8928         }
8929
8930         return err;
8931 }
8932
8933 /* Save PCI command register before chip reset */
8934 static void tg3_save_pci_state(struct tg3 *tp)
8935 {
8936         pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8937 }
8938
8939 /* Restore PCI state after chip reset */
8940 static void tg3_restore_pci_state(struct tg3 *tp)
8941 {
8942         u32 val;
8943
8944         /* Re-enable indirect register accesses. */
8945         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8946                                tp->misc_host_ctrl);
8947
8948         /* Set MAX PCI retry to zero. */
8949         val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8950         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
8951             tg3_flag(tp, PCIX_MODE))
8952                 val |= PCISTATE_RETRY_SAME_DMA;
8953         /* Allow reads and writes to the APE register and memory space. */
8954         if (tg3_flag(tp, ENABLE_APE))
8955                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8956                        PCISTATE_ALLOW_APE_SHMEM_WR |
8957                        PCISTATE_ALLOW_APE_PSPACE_WR;
8958         pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8959
8960         pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8961
8962         if (!tg3_flag(tp, PCI_EXPRESS)) {
8963                 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8964                                       tp->pci_cacheline_sz);
8965                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8966                                       tp->pci_lat_timer);
8967         }
8968
8969         /* Make sure PCI-X relaxed ordering bit is clear. */
8970         if (tg3_flag(tp, PCIX_MODE)) {
8971                 u16 pcix_cmd;
8972
8973                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8974                                      &pcix_cmd);
8975                 pcix_cmd &= ~PCI_X_CMD_ERO;
8976                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8977                                       pcix_cmd);
8978         }
8979
8980         if (tg3_flag(tp, 5780_CLASS)) {
8981
8982                 /* Chip reset on 5780 will reset MSI enable bit,
8983                  * so need to restore it.
8984                  */
8985                 if (tg3_flag(tp, USING_MSI)) {
8986                         u16 ctrl;
8987
8988                         pci_read_config_word(tp->pdev,
8989                                              tp->msi_cap + PCI_MSI_FLAGS,
8990                                              &ctrl);
8991                         pci_write_config_word(tp->pdev,
8992                                               tp->msi_cap + PCI_MSI_FLAGS,
8993                                               ctrl | PCI_MSI_FLAGS_ENABLE);
8994                         val = tr32(MSGINT_MODE);
8995                         tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
8996                 }
8997         }
8998 }
8999
9000 static void tg3_override_clk(struct tg3 *tp)
9001 {
9002         u32 val;
9003
9004         switch (tg3_asic_rev(tp)) {
9005         case ASIC_REV_5717:
9006                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9007                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9008                      TG3_CPMU_MAC_ORIDE_ENABLE);
9009                 break;
9010
9011         case ASIC_REV_5719:
9012         case ASIC_REV_5720:
9013                 tw32(TG3_CPMU_CLCK_ORIDE, CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9014                 break;
9015
9016         default:
9017                 return;
9018         }
9019 }
9020
9021 static void tg3_restore_clk(struct tg3 *tp)
9022 {
9023         u32 val;
9024
9025         switch (tg3_asic_rev(tp)) {
9026         case ASIC_REV_5717:
9027                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9028                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE,
9029                      val & ~TG3_CPMU_MAC_ORIDE_ENABLE);
9030                 break;
9031
9032         case ASIC_REV_5719:
9033         case ASIC_REV_5720:
9034                 val = tr32(TG3_CPMU_CLCK_ORIDE);
9035                 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9036                 break;
9037
9038         default:
9039                 return;
9040         }
9041 }
9042
9043 /* tp->lock is held. */
9044 static int tg3_chip_reset(struct tg3 *tp)
9045         __releases(tp->lock)
9046         __acquires(tp->lock)
9047 {
9048         u32 val;
9049         void (*write_op)(struct tg3 *, u32, u32);
9050         int i, err;
9051
9052         if (!pci_device_is_present(tp->pdev))
9053                 return -ENODEV;
9054
9055         tg3_nvram_lock(tp);
9056
9057         tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
9058
9059         /* No matching tg3_nvram_unlock() after this because
9060          * chip reset below will undo the nvram lock.
9061          */
9062         tp->nvram_lock_cnt = 0;
9063
9064         /* GRC_MISC_CFG core clock reset will clear the memory
9065          * enable bit in PCI register 4 and the MSI enable bit
9066          * on some chips, so we save relevant registers here.
9067          */
9068         tg3_save_pci_state(tp);
9069
9070         if (tg3_asic_rev(tp) == ASIC_REV_5752 ||
9071             tg3_flag(tp, 5755_PLUS))
9072                 tw32(GRC_FASTBOOT_PC, 0);
9073
9074         /*
9075          * We must avoid the readl() that normally takes place.
9076          * It locks machines, causes machine checks, and other
9077          * fun things.  So, temporarily disable the 5701
9078          * hardware workaround, while we do the reset.
9079          */
9080         write_op = tp->write32;
9081         if (write_op == tg3_write_flush_reg32)
9082                 tp->write32 = tg3_write32;
9083
9084         /* Prevent the irq handler from reading or writing PCI registers
9085          * during chip reset when the memory enable bit in the PCI command
9086          * register may be cleared.  The chip does not generate interrupt
9087          * at this time, but the irq handler may still be called due to irq
9088          * sharing or irqpoll.
9089          */
9090         tg3_flag_set(tp, CHIP_RESETTING);
9091         for (i = 0; i < tp->irq_cnt; i++) {
9092                 struct tg3_napi *tnapi = &tp->napi[i];
9093                 if (tnapi->hw_status) {
9094                         tnapi->hw_status->status = 0;
9095                         tnapi->hw_status->status_tag = 0;
9096                 }
9097                 tnapi->last_tag = 0;
9098                 tnapi->last_irq_tag = 0;
9099         }
9100         smp_mb();
9101
9102         tg3_full_unlock(tp);
9103
9104         for (i = 0; i < tp->irq_cnt; i++)
9105                 synchronize_irq(tp->napi[i].irq_vec);
9106
9107         tg3_full_lock(tp, 0);
9108
9109         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9110                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9111                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9112         }
9113
9114         /* do the reset */
9115         val = GRC_MISC_CFG_CORECLK_RESET;
9116
9117         if (tg3_flag(tp, PCI_EXPRESS)) {
9118                 /* Force PCIe 1.0a mode */
9119                 if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
9120                     !tg3_flag(tp, 57765_PLUS) &&
9121                     tr32(TG3_PCIE_PHY_TSTCTL) ==
9122                     (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
9123                         tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
9124
9125                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) {
9126                         tw32(GRC_MISC_CFG, (1 << 29));
9127                         val |= (1 << 29);
9128                 }
9129         }
9130
9131         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
9132                 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
9133                 tw32(GRC_VCPU_EXT_CTRL,
9134                      tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
9135         }
9136
9137         /* Set the clock to the highest frequency to avoid timeouts. With link
9138          * aware mode, the clock speed could be slow and bootcode does not
9139          * complete within the expected time. Override the clock to allow the
9140          * bootcode to finish sooner and then restore it.
9141          */
9142         tg3_override_clk(tp);
9143
9144         /* Manage gphy power for all CPMU absent PCIe devices. */
9145         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
9146                 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
9147
9148         tw32(GRC_MISC_CFG, val);
9149
9150         /* restore 5701 hardware bug workaround write method */
9151         tp->write32 = write_op;
9152
9153         /* Unfortunately, we have to delay before the PCI read back.
9154          * Some 575X chips even will not respond to a PCI cfg access
9155          * when the reset command is given to the chip.
9156          *
9157          * How do these hardware designers expect things to work
9158          * properly if the PCI write is posted for a long period
9159          * of time?  It is always necessary to have some method by
9160          * which a register read back can occur to push the write
9161          * out which does the reset.
9162          *
9163          * For most tg3 variants the trick below was working.
9164          * Ho hum...
9165          */
9166         udelay(120);
9167
9168         /* Flush PCI posted writes.  The normal MMIO registers
9169          * are inaccessible at this time so this is the only
9170          * way to make this reliably (actually, this is no longer
9171          * the case, see above).  I tried to use indirect
9172          * register read/write but this upset some 5701 variants.
9173          */
9174         pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
9175
9176         udelay(120);
9177
9178         if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
9179                 u16 val16;
9180
9181                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) {
9182                         int j;
9183                         u32 cfg_val;
9184
9185                         /* Wait for link training to complete.  */
9186                         for (j = 0; j < 5000; j++)
9187                                 udelay(100);
9188
9189                         pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
9190                         pci_write_config_dword(tp->pdev, 0xc4,
9191                                                cfg_val | (1 << 15));
9192                 }
9193
9194                 /* Clear the "no snoop" and "relaxed ordering" bits. */
9195                 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
9196                 /*
9197                  * Older PCIe devices only support the 128 byte
9198                  * MPS setting.  Enforce the restriction.
9199                  */
9200                 if (!tg3_flag(tp, CPMU_PRESENT))
9201                         val16 |= PCI_EXP_DEVCTL_PAYLOAD;
9202                 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
9203
9204                 /* Clear error status */
9205                 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
9206                                       PCI_EXP_DEVSTA_CED |
9207                                       PCI_EXP_DEVSTA_NFED |
9208                                       PCI_EXP_DEVSTA_FED |
9209                                       PCI_EXP_DEVSTA_URD);
9210         }
9211
9212         tg3_restore_pci_state(tp);
9213
9214         tg3_flag_clear(tp, CHIP_RESETTING);
9215         tg3_flag_clear(tp, ERROR_PROCESSED);
9216
9217         val = 0;
9218         if (tg3_flag(tp, 5780_CLASS))
9219                 val = tr32(MEMARB_MODE);
9220         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9221
9222         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) {
9223                 tg3_stop_fw(tp);
9224                 tw32(0x5000, 0x400);
9225         }
9226
9227         if (tg3_flag(tp, IS_SSB_CORE)) {
9228                 /*
9229                  * BCM4785: In order to avoid repercussions from using
9230                  * potentially defective internal ROM, stop the Rx RISC CPU,
9231                  * which is not required.
9232                  */
9233                 tg3_stop_fw(tp);
9234                 tg3_halt_cpu(tp, RX_CPU_BASE);
9235         }
9236
9237         err = tg3_poll_fw(tp);
9238         if (err)
9239                 return err;
9240
9241         tw32(GRC_MODE, tp->grc_mode);
9242
9243         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
9244                 val = tr32(0xc4);
9245
9246                 tw32(0xc4, val | (1 << 15));
9247         }
9248
9249         if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
9250             tg3_asic_rev(tp) == ASIC_REV_5705) {
9251                 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
9252                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0)
9253                         tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
9254                 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9255         }
9256
9257         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9258                 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
9259                 val = tp->mac_mode;
9260         } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9261                 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
9262                 val = tp->mac_mode;
9263         } else
9264                 val = 0;
9265
9266         tw32_f(MAC_MODE, val);
9267         udelay(40);
9268
9269         tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
9270
9271         tg3_mdio_start(tp);
9272
9273         if (tg3_flag(tp, PCI_EXPRESS) &&
9274             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
9275             tg3_asic_rev(tp) != ASIC_REV_5785 &&
9276             !tg3_flag(tp, 57765_PLUS)) {
9277                 val = tr32(0x7c00);
9278
9279                 tw32(0x7c00, val | (1 << 25));
9280         }
9281
9282         tg3_restore_clk(tp);
9283
9284         /* Increase the core clock speed to fix tx timeout issue for 5762
9285          * with 100Mbps link speed.
9286          */
9287         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
9288                 val = tr32(TG3_CPMU_CLCK_ORIDE_ENABLE);
9289                 tw32(TG3_CPMU_CLCK_ORIDE_ENABLE, val |
9290                      TG3_CPMU_MAC_ORIDE_ENABLE);
9291         }
9292
9293         /* Reprobe ASF enable state.  */
9294         tg3_flag_clear(tp, ENABLE_ASF);
9295         tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
9296                            TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
9297
9298         tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
9299         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9300         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9301                 u32 nic_cfg;
9302
9303                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9304                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9305                         tg3_flag_set(tp, ENABLE_ASF);
9306                         tp->last_event_jiffies = jiffies;
9307                         if (tg3_flag(tp, 5750_PLUS))
9308                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
9309
9310                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg);
9311                         if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK)
9312                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
9313                         if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID)
9314                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
9315                 }
9316         }
9317
9318         return 0;
9319 }
9320
9321 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
9322 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
9323 static void __tg3_set_rx_mode(struct net_device *);
9324
9325 /* tp->lock is held. */
9326 static int tg3_halt(struct tg3 *tp, int kind, bool silent)
9327 {
9328         int err;
9329
9330         tg3_stop_fw(tp);
9331
9332         tg3_write_sig_pre_reset(tp, kind);
9333
9334         tg3_abort_hw(tp, silent);
9335         err = tg3_chip_reset(tp);
9336
9337         __tg3_set_mac_addr(tp, false);
9338
9339         tg3_write_sig_legacy(tp, kind);
9340         tg3_write_sig_post_reset(tp, kind);
9341
9342         if (tp->hw_stats) {
9343                 /* Save the stats across chip resets... */
9344                 tg3_get_nstats(tp, &tp->net_stats_prev);
9345                 tg3_get_estats(tp, &tp->estats_prev);
9346
9347                 /* And make sure the next sample is new data */
9348                 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
9349         }
9350
9351         return err;
9352 }
9353
9354 static int tg3_set_mac_addr(struct net_device *dev, void *p)
9355 {
9356         struct tg3 *tp = netdev_priv(dev);
9357         struct sockaddr *addr = p;
9358         int err = 0;
9359         bool skip_mac_1 = false;
9360
9361         if (!is_valid_ether_addr(addr->sa_data))
9362                 return -EADDRNOTAVAIL;
9363
9364         eth_hw_addr_set(dev, addr->sa_data);
9365
9366         if (!netif_running(dev))
9367                 return 0;
9368
9369         if (tg3_flag(tp, ENABLE_ASF)) {
9370                 u32 addr0_high, addr0_low, addr1_high, addr1_low;
9371
9372                 addr0_high = tr32(MAC_ADDR_0_HIGH);
9373                 addr0_low = tr32(MAC_ADDR_0_LOW);
9374                 addr1_high = tr32(MAC_ADDR_1_HIGH);
9375                 addr1_low = tr32(MAC_ADDR_1_LOW);
9376
9377                 /* Skip MAC addr 1 if ASF is using it. */
9378                 if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
9379                     !(addr1_high == 0 && addr1_low == 0))
9380                         skip_mac_1 = true;
9381         }
9382         spin_lock_bh(&tp->lock);
9383         __tg3_set_mac_addr(tp, skip_mac_1);
9384         __tg3_set_rx_mode(dev);
9385         spin_unlock_bh(&tp->lock);
9386
9387         return err;
9388 }
9389
9390 /* tp->lock is held. */
9391 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
9392                            dma_addr_t mapping, u32 maxlen_flags,
9393                            u32 nic_addr)
9394 {
9395         tg3_write_mem(tp,
9396                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
9397                       ((u64) mapping >> 32));
9398         tg3_write_mem(tp,
9399                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
9400                       ((u64) mapping & 0xffffffff));
9401         tg3_write_mem(tp,
9402                       (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
9403                        maxlen_flags);
9404
9405         if (!tg3_flag(tp, 5705_PLUS))
9406                 tg3_write_mem(tp,
9407                               (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
9408                               nic_addr);
9409 }
9410
9411
9412 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9413 {
9414         int i = 0;
9415
9416         if (!tg3_flag(tp, ENABLE_TSS)) {
9417                 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
9418                 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
9419                 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
9420         } else {
9421                 tw32(HOSTCC_TXCOL_TICKS, 0);
9422                 tw32(HOSTCC_TXMAX_FRAMES, 0);
9423                 tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
9424
9425                 for (; i < tp->txq_cnt; i++) {
9426                         u32 reg;
9427
9428                         reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
9429                         tw32(reg, ec->tx_coalesce_usecs);
9430                         reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
9431                         tw32(reg, ec->tx_max_coalesced_frames);
9432                         reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
9433                         tw32(reg, ec->tx_max_coalesced_frames_irq);
9434                 }
9435         }
9436
9437         for (; i < tp->irq_max - 1; i++) {
9438                 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
9439                 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
9440                 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9441         }
9442 }
9443
9444 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9445 {
9446         int i = 0;
9447         u32 limit = tp->rxq_cnt;
9448
9449         if (!tg3_flag(tp, ENABLE_RSS)) {
9450                 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
9451                 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
9452                 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
9453                 limit--;
9454         } else {
9455                 tw32(HOSTCC_RXCOL_TICKS, 0);
9456                 tw32(HOSTCC_RXMAX_FRAMES, 0);
9457                 tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
9458         }
9459
9460         for (; i < limit; i++) {
9461                 u32 reg;
9462
9463                 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
9464                 tw32(reg, ec->rx_coalesce_usecs);
9465                 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
9466                 tw32(reg, ec->rx_max_coalesced_frames);
9467                 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
9468                 tw32(reg, ec->rx_max_coalesced_frames_irq);
9469         }
9470
9471         for (; i < tp->irq_max - 1; i++) {
9472                 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
9473                 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
9474                 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9475         }
9476 }
9477
9478 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
9479 {
9480         tg3_coal_tx_init(tp, ec);
9481         tg3_coal_rx_init(tp, ec);
9482
9483         if (!tg3_flag(tp, 5705_PLUS)) {
9484                 u32 val = ec->stats_block_coalesce_usecs;
9485
9486                 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
9487                 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
9488
9489                 if (!tp->link_up)
9490                         val = 0;
9491
9492                 tw32(HOSTCC_STAT_COAL_TICKS, val);
9493         }
9494 }
9495
9496 /* tp->lock is held. */
9497 static void tg3_tx_rcbs_disable(struct tg3 *tp)
9498 {
9499         u32 txrcb, limit;
9500
9501         /* Disable all transmit rings but the first. */
9502         if (!tg3_flag(tp, 5705_PLUS))
9503                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
9504         else if (tg3_flag(tp, 5717_PLUS))
9505                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
9506         else if (tg3_flag(tp, 57765_CLASS) ||
9507                  tg3_asic_rev(tp) == ASIC_REV_5762)
9508                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
9509         else
9510                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9511
9512         for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9513              txrcb < limit; txrcb += TG3_BDINFO_SIZE)
9514                 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
9515                               BDINFO_FLAGS_DISABLED);
9516 }
9517
9518 /* tp->lock is held. */
9519 static void tg3_tx_rcbs_init(struct tg3 *tp)
9520 {
9521         int i = 0;
9522         u32 txrcb = NIC_SRAM_SEND_RCB;
9523
9524         if (tg3_flag(tp, ENABLE_TSS))
9525                 i++;
9526
9527         for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) {
9528                 struct tg3_napi *tnapi = &tp->napi[i];
9529
9530                 if (!tnapi->tx_ring)
9531                         continue;
9532
9533                 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
9534                                (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
9535                                NIC_SRAM_TX_BUFFER_DESC);
9536         }
9537 }
9538
9539 /* tp->lock is held. */
9540 static void tg3_rx_ret_rcbs_disable(struct tg3 *tp)
9541 {
9542         u32 rxrcb, limit;
9543
9544         /* Disable all receive return rings but the first. */
9545         if (tg3_flag(tp, 5717_PLUS))
9546                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
9547         else if (!tg3_flag(tp, 5705_PLUS))
9548                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
9549         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9550                  tg3_asic_rev(tp) == ASIC_REV_5762 ||
9551                  tg3_flag(tp, 57765_CLASS))
9552                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
9553         else
9554                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9555
9556         for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9557              rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
9558                 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
9559                               BDINFO_FLAGS_DISABLED);
9560 }
9561
9562 /* tp->lock is held. */
9563 static void tg3_rx_ret_rcbs_init(struct tg3 *tp)
9564 {
9565         int i = 0;
9566         u32 rxrcb = NIC_SRAM_RCV_RET_RCB;
9567
9568         if (tg3_flag(tp, ENABLE_RSS))
9569                 i++;
9570
9571         for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) {
9572                 struct tg3_napi *tnapi = &tp->napi[i];
9573
9574                 if (!tnapi->rx_rcb)
9575                         continue;
9576
9577                 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
9578                                (tp->rx_ret_ring_mask + 1) <<
9579                                 BDINFO_FLAGS_MAXLEN_SHIFT, 0);
9580         }
9581 }
9582
9583 /* tp->lock is held. */
9584 static void tg3_rings_reset(struct tg3 *tp)
9585 {
9586         int i;
9587         u32 stblk;
9588         struct tg3_napi *tnapi = &tp->napi[0];
9589
9590         tg3_tx_rcbs_disable(tp);
9591
9592         tg3_rx_ret_rcbs_disable(tp);
9593
9594         /* Disable interrupts */
9595         tw32_mailbox_f(tp->napi[0].int_mbox, 1);
9596         tp->napi[0].chk_msi_cnt = 0;
9597         tp->napi[0].last_rx_cons = 0;
9598         tp->napi[0].last_tx_cons = 0;
9599
9600         /* Zero mailbox registers. */
9601         if (tg3_flag(tp, SUPPORT_MSIX)) {
9602                 for (i = 1; i < tp->irq_max; i++) {
9603                         tp->napi[i].tx_prod = 0;
9604                         tp->napi[i].tx_cons = 0;
9605                         if (tg3_flag(tp, ENABLE_TSS))
9606                                 tw32_mailbox(tp->napi[i].prodmbox, 0);
9607                         tw32_rx_mbox(tp->napi[i].consmbox, 0);
9608                         tw32_mailbox_f(tp->napi[i].int_mbox, 1);
9609                         tp->napi[i].chk_msi_cnt = 0;
9610                         tp->napi[i].last_rx_cons = 0;
9611                         tp->napi[i].last_tx_cons = 0;
9612                 }
9613                 if (!tg3_flag(tp, ENABLE_TSS))
9614                         tw32_mailbox(tp->napi[0].prodmbox, 0);
9615         } else {
9616                 tp->napi[0].tx_prod = 0;
9617                 tp->napi[0].tx_cons = 0;
9618                 tw32_mailbox(tp->napi[0].prodmbox, 0);
9619                 tw32_rx_mbox(tp->napi[0].consmbox, 0);
9620         }
9621
9622         /* Make sure the NIC-based send BD rings are disabled. */
9623         if (!tg3_flag(tp, 5705_PLUS)) {
9624                 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
9625                 for (i = 0; i < 16; i++)
9626                         tw32_tx_mbox(mbox + i * 8, 0);
9627         }
9628
9629         /* Clear status block in ram. */
9630         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9631
9632         /* Set status block DMA address */
9633         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9634              ((u64) tnapi->status_mapping >> 32));
9635         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9636              ((u64) tnapi->status_mapping & 0xffffffff));
9637
9638         stblk = HOSTCC_STATBLCK_RING1;
9639
9640         for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
9641                 u64 mapping = (u64)tnapi->status_mapping;
9642                 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
9643                 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
9644                 stblk += 8;
9645
9646                 /* Clear status block in ram. */
9647                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9648         }
9649
9650         tg3_tx_rcbs_init(tp);
9651         tg3_rx_ret_rcbs_init(tp);
9652 }
9653
9654 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
9655 {
9656         u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
9657
9658         if (!tg3_flag(tp, 5750_PLUS) ||
9659             tg3_flag(tp, 5780_CLASS) ||
9660             tg3_asic_rev(tp) == ASIC_REV_5750 ||
9661             tg3_asic_rev(tp) == ASIC_REV_5752 ||
9662             tg3_flag(tp, 57765_PLUS))
9663                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
9664         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9665                  tg3_asic_rev(tp) == ASIC_REV_5787)
9666                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
9667         else
9668                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
9669
9670         nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
9671         host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
9672
9673         val = min(nic_rep_thresh, host_rep_thresh);
9674         tw32(RCVBDI_STD_THRESH, val);
9675
9676         if (tg3_flag(tp, 57765_PLUS))
9677                 tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
9678
9679         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
9680                 return;
9681
9682         bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
9683
9684         host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
9685
9686         val = min(bdcache_maxcnt / 2, host_rep_thresh);
9687         tw32(RCVBDI_JUMBO_THRESH, val);
9688
9689         if (tg3_flag(tp, 57765_PLUS))
9690                 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
9691 }
9692
9693 static inline u32 calc_crc(unsigned char *buf, int len)
9694 {
9695         u32 reg;
9696         u32 tmp;
9697         int j, k;
9698
9699         reg = 0xffffffff;
9700
9701         for (j = 0; j < len; j++) {
9702                 reg ^= buf[j];
9703
9704                 for (k = 0; k < 8; k++) {
9705                         tmp = reg & 0x01;
9706
9707                         reg >>= 1;
9708
9709                         if (tmp)
9710                                 reg ^= CRC32_POLY_LE;
9711                 }
9712         }
9713
9714         return ~reg;
9715 }
9716
9717 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
9718 {
9719         /* accept or reject all multicast frames */
9720         tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
9721         tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
9722         tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
9723         tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
9724 }
9725
9726 static void __tg3_set_rx_mode(struct net_device *dev)
9727 {
9728         struct tg3 *tp = netdev_priv(dev);
9729         u32 rx_mode;
9730
9731         rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
9732                                   RX_MODE_KEEP_VLAN_TAG);
9733
9734 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
9735         /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
9736          * flag clear.
9737          */
9738         if (!tg3_flag(tp, ENABLE_ASF))
9739                 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
9740 #endif
9741
9742         if (dev->flags & IFF_PROMISC) {
9743                 /* Promiscuous mode. */
9744                 rx_mode |= RX_MODE_PROMISC;
9745         } else if (dev->flags & IFF_ALLMULTI) {
9746                 /* Accept all multicast. */
9747                 tg3_set_multi(tp, 1);
9748         } else if (netdev_mc_empty(dev)) {
9749                 /* Reject all multicast. */
9750                 tg3_set_multi(tp, 0);
9751         } else {
9752                 /* Accept one or more multicast(s). */
9753                 struct netdev_hw_addr *ha;
9754                 u32 mc_filter[4] = { 0, };
9755                 u32 regidx;
9756                 u32 bit;
9757                 u32 crc;
9758
9759                 netdev_for_each_mc_addr(ha, dev) {
9760                         crc = calc_crc(ha->addr, ETH_ALEN);
9761                         bit = ~crc & 0x7f;
9762                         regidx = (bit & 0x60) >> 5;
9763                         bit &= 0x1f;
9764                         mc_filter[regidx] |= (1 << bit);
9765                 }
9766
9767                 tw32(MAC_HASH_REG_0, mc_filter[0]);
9768                 tw32(MAC_HASH_REG_1, mc_filter[1]);
9769                 tw32(MAC_HASH_REG_2, mc_filter[2]);
9770                 tw32(MAC_HASH_REG_3, mc_filter[3]);
9771         }
9772
9773         if (netdev_uc_count(dev) > TG3_MAX_UCAST_ADDR(tp)) {
9774                 rx_mode |= RX_MODE_PROMISC;
9775         } else if (!(dev->flags & IFF_PROMISC)) {
9776                 /* Add all entries into to the mac addr filter list */
9777                 int i = 0;
9778                 struct netdev_hw_addr *ha;
9779
9780                 netdev_for_each_uc_addr(ha, dev) {
9781                         __tg3_set_one_mac_addr(tp, ha->addr,
9782                                                i + TG3_UCAST_ADDR_IDX(tp));
9783                         i++;
9784                 }
9785         }
9786
9787         if (rx_mode != tp->rx_mode) {
9788                 tp->rx_mode = rx_mode;
9789                 tw32_f(MAC_RX_MODE, rx_mode);
9790                 udelay(10);
9791         }
9792 }
9793
9794 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
9795 {
9796         int i;
9797
9798         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
9799                 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
9800 }
9801
9802 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
9803 {
9804         int i;
9805
9806         if (!tg3_flag(tp, SUPPORT_MSIX))
9807                 return;
9808
9809         if (tp->rxq_cnt == 1) {
9810                 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
9811                 return;
9812         }
9813
9814         /* Validate table against current IRQ count */
9815         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
9816                 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
9817                         break;
9818         }
9819
9820         if (i != TG3_RSS_INDIR_TBL_SIZE)
9821                 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
9822 }
9823
9824 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
9825 {
9826         int i = 0;
9827         u32 reg = MAC_RSS_INDIR_TBL_0;
9828
9829         while (i < TG3_RSS_INDIR_TBL_SIZE) {
9830                 u32 val = tp->rss_ind_tbl[i];
9831                 i++;
9832                 for (; i % 8; i++) {
9833                         val <<= 4;
9834                         val |= tp->rss_ind_tbl[i];
9835                 }
9836                 tw32(reg, val);
9837                 reg += 4;
9838         }
9839 }
9840
9841 static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp)
9842 {
9843         if (tg3_asic_rev(tp) == ASIC_REV_5719)
9844                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719;
9845         else
9846                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720;
9847 }
9848
9849 /* tp->lock is held. */
9850 static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
9851 {
9852         u32 val, rdmac_mode;
9853         int i, err, limit;
9854         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
9855
9856         tg3_disable_ints(tp);
9857
9858         tg3_stop_fw(tp);
9859
9860         tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
9861
9862         if (tg3_flag(tp, INIT_COMPLETE))
9863                 tg3_abort_hw(tp, 1);
9864
9865         if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
9866             !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) {
9867                 tg3_phy_pull_config(tp);
9868                 tg3_eee_pull_config(tp, NULL);
9869                 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
9870         }
9871
9872         /* Enable MAC control of LPI */
9873         if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
9874                 tg3_setup_eee(tp);
9875
9876         if (reset_phy)
9877                 tg3_phy_reset(tp);
9878
9879         err = tg3_chip_reset(tp);
9880         if (err)
9881                 return err;
9882
9883         tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9884
9885         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
9886                 val = tr32(TG3_CPMU_CTRL);
9887                 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9888                 tw32(TG3_CPMU_CTRL, val);
9889
9890                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9891                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9892                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9893                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9894
9895                 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9896                 val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9897                 val |= CPMU_LNK_AWARE_MACCLK_6_25;
9898                 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9899
9900                 val = tr32(TG3_CPMU_HST_ACC);
9901                 val &= ~CPMU_HST_ACC_MACCLK_MASK;
9902                 val |= CPMU_HST_ACC_MACCLK_6_25;
9903                 tw32(TG3_CPMU_HST_ACC, val);
9904         }
9905
9906         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9907                 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9908                 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9909                        PCIE_PWR_MGMT_L1_THRESH_4MS;
9910                 tw32(PCIE_PWR_MGMT_THRESH, val);
9911
9912                 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9913                 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9914
9915                 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9916
9917                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9918                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9919         }
9920
9921         if (tg3_flag(tp, L1PLLPD_EN)) {
9922                 u32 grc_mode = tr32(GRC_MODE);
9923
9924                 /* Access the lower 1K of PL PCIE block registers. */
9925                 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9926                 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9927
9928                 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9929                 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9930                      val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9931
9932                 tw32(GRC_MODE, grc_mode);
9933         }
9934
9935         if (tg3_flag(tp, 57765_CLASS)) {
9936                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
9937                         u32 grc_mode = tr32(GRC_MODE);
9938
9939                         /* Access the lower 1K of PL PCIE block registers. */
9940                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9941                         tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9942
9943                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9944                                    TG3_PCIE_PL_LO_PHYCTL5);
9945                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9946                              val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9947
9948                         tw32(GRC_MODE, grc_mode);
9949                 }
9950
9951                 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) {
9952                         u32 grc_mode;
9953
9954                         /* Fix transmit hangs */
9955                         val = tr32(TG3_CPMU_PADRNG_CTL);
9956                         val |= TG3_CPMU_PADRNG_CTL_RDIV2;
9957                         tw32(TG3_CPMU_PADRNG_CTL, val);
9958
9959                         grc_mode = tr32(GRC_MODE);
9960
9961                         /* Access the lower 1K of DL PCIE block registers. */
9962                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9963                         tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9964
9965                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9966                                    TG3_PCIE_DL_LO_FTSMAX);
9967                         val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
9968                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
9969                              val | TG3_PCIE_DL_LO_FTSMAX_VAL);
9970
9971                         tw32(GRC_MODE, grc_mode);
9972                 }
9973
9974                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9975                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9976                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9977                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9978         }
9979
9980         /* This works around an issue with Athlon chipsets on
9981          * B3 tigon3 silicon.  This bit has no effect on any
9982          * other revision.  But do not set this on PCI Express
9983          * chips and don't even touch the clocks if the CPMU is present.
9984          */
9985         if (!tg3_flag(tp, CPMU_PRESENT)) {
9986                 if (!tg3_flag(tp, PCI_EXPRESS))
9987                         tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
9988                 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9989         }
9990
9991         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
9992             tg3_flag(tp, PCIX_MODE)) {
9993                 val = tr32(TG3PCI_PCISTATE);
9994                 val |= PCISTATE_RETRY_SAME_DMA;
9995                 tw32(TG3PCI_PCISTATE, val);
9996         }
9997
9998         if (tg3_flag(tp, ENABLE_APE)) {
9999                 /* Allow reads and writes to the
10000                  * APE register and memory space.
10001                  */
10002                 val = tr32(TG3PCI_PCISTATE);
10003                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
10004                        PCISTATE_ALLOW_APE_SHMEM_WR |
10005                        PCISTATE_ALLOW_APE_PSPACE_WR;
10006                 tw32(TG3PCI_PCISTATE, val);
10007         }
10008
10009         if (tg3_chip_rev(tp) == CHIPREV_5704_BX) {
10010                 /* Enable some hw fixes.  */
10011                 val = tr32(TG3PCI_MSI_DATA);
10012                 val |= (1 << 26) | (1 << 28) | (1 << 29);
10013                 tw32(TG3PCI_MSI_DATA, val);
10014         }
10015
10016         /* Descriptor ring init may make accesses to the
10017          * NIC SRAM area to setup the TX descriptors, so we
10018          * can only do this after the hardware has been
10019          * successfully reset.
10020          */
10021         err = tg3_init_rings(tp);
10022         if (err)
10023                 return err;
10024
10025         if (tg3_flag(tp, 57765_PLUS)) {
10026                 val = tr32(TG3PCI_DMA_RW_CTRL) &
10027                       ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
10028                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
10029                         val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
10030                 if (!tg3_flag(tp, 57765_CLASS) &&
10031                     tg3_asic_rev(tp) != ASIC_REV_5717 &&
10032                     tg3_asic_rev(tp) != ASIC_REV_5762)
10033                         val |= DMA_RWCTRL_TAGGED_STAT_WA;
10034                 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
10035         } else if (tg3_asic_rev(tp) != ASIC_REV_5784 &&
10036                    tg3_asic_rev(tp) != ASIC_REV_5761) {
10037                 /* This value is determined during the probe time DMA
10038                  * engine test, tg3_test_dma.
10039                  */
10040                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10041         }
10042
10043         tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
10044                           GRC_MODE_4X_NIC_SEND_RINGS |
10045                           GRC_MODE_NO_TX_PHDR_CSUM |
10046                           GRC_MODE_NO_RX_PHDR_CSUM);
10047         tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
10048
10049         /* Pseudo-header checksum is done by hardware logic and not
10050          * the offload processers, so make the chip do the pseudo-
10051          * header checksums on receive.  For transmit it is more
10052          * convenient to do the pseudo-header checksum in software
10053          * as Linux does that on transmit for us in all cases.
10054          */
10055         tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
10056
10057         val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
10058         if (tp->rxptpctl)
10059                 tw32(TG3_RX_PTP_CTL,
10060                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
10061
10062         if (tg3_flag(tp, PTP_CAPABLE))
10063                 val |= GRC_MODE_TIME_SYNC_ENABLE;
10064
10065         tw32(GRC_MODE, tp->grc_mode | val);
10066
10067         /* On one of the AMD platform, MRRS is restricted to 4000 because of
10068          * south bridge limitation. As a workaround, Driver is setting MRRS
10069          * to 2048 instead of default 4096.
10070          */
10071         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
10072             tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) {
10073                 val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK;
10074                 tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048);
10075         }
10076
10077         /* Setup the timer prescalar register.  Clock is always 66Mhz. */
10078         val = tr32(GRC_MISC_CFG);
10079         val &= ~0xff;
10080         val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
10081         tw32(GRC_MISC_CFG, val);
10082
10083         /* Initialize MBUF/DESC pool. */
10084         if (tg3_flag(tp, 5750_PLUS)) {
10085                 /* Do nothing.  */
10086         } else if (tg3_asic_rev(tp) != ASIC_REV_5705) {
10087                 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
10088                 if (tg3_asic_rev(tp) == ASIC_REV_5704)
10089                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
10090                 else
10091                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
10092                 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
10093                 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
10094         } else if (tg3_flag(tp, TSO_CAPABLE)) {
10095                 int fw_len;
10096
10097                 fw_len = tp->fw_len;
10098                 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
10099                 tw32(BUFMGR_MB_POOL_ADDR,
10100                      NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
10101                 tw32(BUFMGR_MB_POOL_SIZE,
10102                      NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
10103         }
10104
10105         if (tp->dev->mtu <= ETH_DATA_LEN) {
10106                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10107                      tp->bufmgr_config.mbuf_read_dma_low_water);
10108                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10109                      tp->bufmgr_config.mbuf_mac_rx_low_water);
10110                 tw32(BUFMGR_MB_HIGH_WATER,
10111                      tp->bufmgr_config.mbuf_high_water);
10112         } else {
10113                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
10114                      tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
10115                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
10116                      tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
10117                 tw32(BUFMGR_MB_HIGH_WATER,
10118                      tp->bufmgr_config.mbuf_high_water_jumbo);
10119         }
10120         tw32(BUFMGR_DMA_LOW_WATER,
10121              tp->bufmgr_config.dma_low_water);
10122         tw32(BUFMGR_DMA_HIGH_WATER,
10123              tp->bufmgr_config.dma_high_water);
10124
10125         val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
10126         if (tg3_asic_rev(tp) == ASIC_REV_5719)
10127                 val |= BUFMGR_MODE_NO_TX_UNDERRUN;
10128         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10129             tg3_asic_rev(tp) == ASIC_REV_5762 ||
10130             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10131             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0)
10132                 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
10133         tw32(BUFMGR_MODE, val);
10134         for (i = 0; i < 2000; i++) {
10135                 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
10136                         break;
10137                 udelay(10);
10138         }
10139         if (i >= 2000) {
10140                 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
10141                 return -ENODEV;
10142         }
10143
10144         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1)
10145                 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
10146
10147         tg3_setup_rxbd_thresholds(tp);
10148
10149         /* Initialize TG3_BDINFO's at:
10150          *  RCVDBDI_STD_BD:     standard eth size rx ring
10151          *  RCVDBDI_JUMBO_BD:   jumbo frame rx ring
10152          *  RCVDBDI_MINI_BD:    small frame rx ring (??? does not work)
10153          *
10154          * like so:
10155          *  TG3_BDINFO_HOST_ADDR:       high/low parts of DMA address of ring
10156          *  TG3_BDINFO_MAXLEN_FLAGS:    (rx max buffer size << 16) |
10157          *                              ring attribute flags
10158          *  TG3_BDINFO_NIC_ADDR:        location of descriptors in nic SRAM
10159          *
10160          * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
10161          * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
10162          *
10163          * The size of each ring is fixed in the firmware, but the location is
10164          * configurable.
10165          */
10166         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10167              ((u64) tpr->rx_std_mapping >> 32));
10168         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10169              ((u64) tpr->rx_std_mapping & 0xffffffff));
10170         if (!tg3_flag(tp, 5717_PLUS))
10171                 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
10172                      NIC_SRAM_RX_BUFFER_DESC);
10173
10174         /* Disable the mini ring */
10175         if (!tg3_flag(tp, 5705_PLUS))
10176                 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
10177                      BDINFO_FLAGS_DISABLED);
10178
10179         /* Program the jumbo buffer descriptor ring control
10180          * blocks on those devices that have them.
10181          */
10182         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10183             (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
10184
10185                 if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
10186                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10187                              ((u64) tpr->rx_jmb_mapping >> 32));
10188                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10189                              ((u64) tpr->rx_jmb_mapping & 0xffffffff));
10190                         val = TG3_RX_JMB_RING_SIZE(tp) <<
10191                               BDINFO_FLAGS_MAXLEN_SHIFT;
10192                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10193                              val | BDINFO_FLAGS_USE_EXT_RECV);
10194                         if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
10195                             tg3_flag(tp, 57765_CLASS) ||
10196                             tg3_asic_rev(tp) == ASIC_REV_5762)
10197                                 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
10198                                      NIC_SRAM_RX_JUMBO_BUFFER_DESC);
10199                 } else {
10200                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10201                              BDINFO_FLAGS_DISABLED);
10202                 }
10203
10204                 if (tg3_flag(tp, 57765_PLUS)) {
10205                         val = TG3_RX_STD_RING_SIZE(tp);
10206                         val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
10207                         val |= (TG3_RX_STD_DMA_SZ << 2);
10208                 } else
10209                         val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
10210         } else
10211                 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
10212
10213         tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
10214
10215         tpr->rx_std_prod_idx = tp->rx_pending;
10216         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
10217
10218         tpr->rx_jmb_prod_idx =
10219                 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
10220         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
10221
10222         tg3_rings_reset(tp);
10223
10224         /* Initialize MAC address and backoff seed. */
10225         __tg3_set_mac_addr(tp, false);
10226
10227         /* MTU + ethernet header + FCS + optional VLAN tag */
10228         tw32(MAC_RX_MTU_SIZE,
10229              tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
10230
10231         /* The slot time is changed by tg3_setup_phy if we
10232          * run at gigabit with half duplex.
10233          */
10234         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
10235               (6 << TX_LENGTHS_IPG_SHIFT) |
10236               (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
10237
10238         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10239             tg3_asic_rev(tp) == ASIC_REV_5762)
10240                 val |= tr32(MAC_TX_LENGTHS) &
10241                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
10242                         TX_LENGTHS_CNT_DWN_VAL_MSK);
10243
10244         tw32(MAC_TX_LENGTHS, val);
10245
10246         /* Receive rules. */
10247         tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
10248         tw32(RCVLPC_CONFIG, 0x0181);
10249
10250         /* Calculate RDMAC_MODE setting early, we need it to determine
10251          * the RCVLPC_STATE_ENABLE mask.
10252          */
10253         rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
10254                       RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
10255                       RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
10256                       RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
10257                       RDMAC_MODE_LNGREAD_ENAB);
10258
10259         if (tg3_asic_rev(tp) == ASIC_REV_5717)
10260                 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
10261
10262         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
10263             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10264             tg3_asic_rev(tp) == ASIC_REV_57780)
10265                 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
10266                               RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
10267                               RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
10268
10269         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10270             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10271                 if (tg3_flag(tp, TSO_CAPABLE)) {
10272                         rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
10273                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10274                            !tg3_flag(tp, IS_5788)) {
10275                         rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10276                 }
10277         }
10278
10279         if (tg3_flag(tp, PCI_EXPRESS))
10280                 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10281
10282         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10283                 tp->dma_limit = 0;
10284                 if (tp->dev->mtu <= ETH_DATA_LEN) {
10285                         rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR;
10286                         tp->dma_limit = TG3_TX_BD_DMA_MAX_2K;
10287                 }
10288         }
10289
10290         if (tg3_flag(tp, HW_TSO_1) ||
10291             tg3_flag(tp, HW_TSO_2) ||
10292             tg3_flag(tp, HW_TSO_3))
10293                 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
10294
10295         if (tg3_flag(tp, 57765_PLUS) ||
10296             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10297             tg3_asic_rev(tp) == ASIC_REV_57780)
10298                 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
10299
10300         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10301             tg3_asic_rev(tp) == ASIC_REV_5762)
10302                 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
10303
10304         if (tg3_asic_rev(tp) == ASIC_REV_5761 ||
10305             tg3_asic_rev(tp) == ASIC_REV_5784 ||
10306             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10307             tg3_asic_rev(tp) == ASIC_REV_57780 ||
10308             tg3_flag(tp, 57765_PLUS)) {
10309                 u32 tgtreg;
10310
10311                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10312                         tgtreg = TG3_RDMA_RSRVCTRL_REG2;
10313                 else
10314                         tgtreg = TG3_RDMA_RSRVCTRL_REG;
10315
10316                 val = tr32(tgtreg);
10317                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10318                     tg3_asic_rev(tp) == ASIC_REV_5762) {
10319                         val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
10320                                  TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
10321                                  TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
10322                         val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
10323                                TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
10324                                TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
10325                 }
10326                 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
10327         }
10328
10329         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10330             tg3_asic_rev(tp) == ASIC_REV_5720 ||
10331             tg3_asic_rev(tp) == ASIC_REV_5762) {
10332                 u32 tgtreg;
10333
10334                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10335                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2;
10336                 else
10337                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL;
10338
10339                 val = tr32(tgtreg);
10340                 tw32(tgtreg, val |
10341                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
10342                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
10343         }
10344
10345         /* Receive/send statistics. */
10346         if (tg3_flag(tp, 5750_PLUS)) {
10347                 val = tr32(RCVLPC_STATS_ENABLE);
10348                 val &= ~RCVLPC_STATSENAB_DACK_FIX;
10349                 tw32(RCVLPC_STATS_ENABLE, val);
10350         } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
10351                    tg3_flag(tp, TSO_CAPABLE)) {
10352                 val = tr32(RCVLPC_STATS_ENABLE);
10353                 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
10354                 tw32(RCVLPC_STATS_ENABLE, val);
10355         } else {
10356                 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
10357         }
10358         tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
10359         tw32(SNDDATAI_STATSENAB, 0xffffff);
10360         tw32(SNDDATAI_STATSCTRL,
10361              (SNDDATAI_SCTRL_ENABLE |
10362               SNDDATAI_SCTRL_FASTUPD));
10363
10364         /* Setup host coalescing engine. */
10365         tw32(HOSTCC_MODE, 0);
10366         for (i = 0; i < 2000; i++) {
10367                 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
10368                         break;
10369                 udelay(10);
10370         }
10371
10372         __tg3_set_coalesce(tp, &tp->coal);
10373
10374         if (!tg3_flag(tp, 5705_PLUS)) {
10375                 /* Status/statistics block address.  See tg3_timer,
10376                  * the tg3_periodic_fetch_stats call there, and
10377                  * tg3_get_stats to see how this works for 5705/5750 chips.
10378                  */
10379                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
10380                      ((u64) tp->stats_mapping >> 32));
10381                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
10382                      ((u64) tp->stats_mapping & 0xffffffff));
10383                 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
10384
10385                 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
10386
10387                 /* Clear statistics and status block memory areas */
10388                 for (i = NIC_SRAM_STATS_BLK;
10389                      i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
10390                      i += sizeof(u32)) {
10391                         tg3_write_mem(tp, i, 0);
10392                         udelay(40);
10393                 }
10394         }
10395
10396         tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
10397
10398         tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
10399         tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
10400         if (!tg3_flag(tp, 5705_PLUS))
10401                 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
10402
10403         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
10404                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
10405                 /* reset to prevent losing 1st rx packet intermittently */
10406                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10407                 udelay(10);
10408         }
10409
10410         tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
10411                         MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
10412                         MAC_MODE_FHDE_ENABLE;
10413         if (tg3_flag(tp, ENABLE_APE))
10414                 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
10415         if (!tg3_flag(tp, 5705_PLUS) &&
10416             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10417             tg3_asic_rev(tp) != ASIC_REV_5700)
10418                 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
10419         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
10420         udelay(40);
10421
10422         /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
10423          * If TG3_FLAG_IS_NIC is zero, we should read the
10424          * register to preserve the GPIO settings for LOMs. The GPIOs,
10425          * whether used as inputs or outputs, are set by boot code after
10426          * reset.
10427          */
10428         if (!tg3_flag(tp, IS_NIC)) {
10429                 u32 gpio_mask;
10430
10431                 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
10432                             GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
10433                             GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
10434
10435                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
10436                         gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
10437                                      GRC_LCLCTRL_GPIO_OUTPUT3;
10438
10439                 if (tg3_asic_rev(tp) == ASIC_REV_5755)
10440                         gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
10441
10442                 tp->grc_local_ctrl &= ~gpio_mask;
10443                 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
10444
10445                 /* GPIO1 must be driven high for eeprom write protect */
10446                 if (tg3_flag(tp, EEPROM_WRITE_PROT))
10447                         tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10448                                                GRC_LCLCTRL_GPIO_OUTPUT1);
10449         }
10450         tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10451         udelay(100);
10452
10453         if (tg3_flag(tp, USING_MSIX)) {
10454                 val = tr32(MSGINT_MODE);
10455                 val |= MSGINT_MODE_ENABLE;
10456                 if (tp->irq_cnt > 1)
10457                         val |= MSGINT_MODE_MULTIVEC_EN;
10458                 if (!tg3_flag(tp, 1SHOT_MSI))
10459                         val |= MSGINT_MODE_ONE_SHOT_DISABLE;
10460                 tw32(MSGINT_MODE, val);
10461         }
10462
10463         if (!tg3_flag(tp, 5705_PLUS)) {
10464                 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
10465                 udelay(40);
10466         }
10467
10468         val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
10469                WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
10470                WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
10471                WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
10472                WDMAC_MODE_LNGREAD_ENAB);
10473
10474         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10475             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10476                 if (tg3_flag(tp, TSO_CAPABLE) &&
10477                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 ||
10478                      tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) {
10479                         /* nothing */
10480                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10481                            !tg3_flag(tp, IS_5788)) {
10482                         val |= WDMAC_MODE_RX_ACCEL;
10483                 }
10484         }
10485
10486         /* Enable host coalescing bug fix */
10487         if (tg3_flag(tp, 5755_PLUS))
10488                 val |= WDMAC_MODE_STATUS_TAG_FIX;
10489
10490         if (tg3_asic_rev(tp) == ASIC_REV_5785)
10491                 val |= WDMAC_MODE_BURST_ALL_DATA;
10492
10493         tw32_f(WDMAC_MODE, val);
10494         udelay(40);
10495
10496         if (tg3_flag(tp, PCIX_MODE)) {
10497                 u16 pcix_cmd;
10498
10499                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10500                                      &pcix_cmd);
10501                 if (tg3_asic_rev(tp) == ASIC_REV_5703) {
10502                         pcix_cmd &= ~PCI_X_CMD_MAX_READ;
10503                         pcix_cmd |= PCI_X_CMD_READ_2K;
10504                 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) {
10505                         pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
10506                         pcix_cmd |= PCI_X_CMD_READ_2K;
10507                 }
10508                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10509                                       pcix_cmd);
10510         }
10511
10512         tw32_f(RDMAC_MODE, rdmac_mode);
10513         udelay(40);
10514
10515         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10516             tg3_asic_rev(tp) == ASIC_REV_5720) {
10517                 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
10518                         if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
10519                                 break;
10520                 }
10521                 if (i < TG3_NUM_RDMA_CHANNELS) {
10522                         val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10523                         val |= tg3_lso_rd_dma_workaround_bit(tp);
10524                         tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10525                         tg3_flag_set(tp, 5719_5720_RDMA_BUG);
10526                 }
10527         }
10528
10529         tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
10530         if (!tg3_flag(tp, 5705_PLUS))
10531                 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
10532
10533         if (tg3_asic_rev(tp) == ASIC_REV_5761)
10534                 tw32(SNDDATAC_MODE,
10535                      SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
10536         else
10537                 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
10538
10539         tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
10540         tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
10541         val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
10542         if (tg3_flag(tp, LRG_PROD_RING_CAP))
10543                 val |= RCVDBDI_MODE_LRG_RING_SZ;
10544         tw32(RCVDBDI_MODE, val);
10545         tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
10546         if (tg3_flag(tp, HW_TSO_1) ||
10547             tg3_flag(tp, HW_TSO_2) ||
10548             tg3_flag(tp, HW_TSO_3))
10549                 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
10550         val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
10551         if (tg3_flag(tp, ENABLE_TSS))
10552                 val |= SNDBDI_MODE_MULTI_TXQ_EN;
10553         tw32(SNDBDI_MODE, val);
10554         tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
10555
10556         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
10557                 err = tg3_load_5701_a0_firmware_fix(tp);
10558                 if (err)
10559                         return err;
10560         }
10561
10562         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10563                 /* Ignore any errors for the firmware download. If download
10564                  * fails, the device will operate with EEE disabled
10565                  */
10566                 tg3_load_57766_firmware(tp);
10567         }
10568
10569         if (tg3_flag(tp, TSO_CAPABLE)) {
10570                 err = tg3_load_tso_firmware(tp);
10571                 if (err)
10572                         return err;
10573         }
10574
10575         tp->tx_mode = TX_MODE_ENABLE;
10576
10577         if (tg3_flag(tp, 5755_PLUS) ||
10578             tg3_asic_rev(tp) == ASIC_REV_5906)
10579                 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
10580
10581         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10582             tg3_asic_rev(tp) == ASIC_REV_5762) {
10583                 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
10584                 tp->tx_mode &= ~val;
10585                 tp->tx_mode |= tr32(MAC_TX_MODE) & val;
10586         }
10587
10588         tw32_f(MAC_TX_MODE, tp->tx_mode);
10589         udelay(100);
10590
10591         if (tg3_flag(tp, ENABLE_RSS)) {
10592                 u32 rss_key[10];
10593
10594                 tg3_rss_write_indir_tbl(tp);
10595
10596                 netdev_rss_key_fill(rss_key, 10 * sizeof(u32));
10597
10598                 for (i = 0; i < 10 ; i++)
10599                         tw32(MAC_RSS_HASH_KEY_0 + i*4, rss_key[i]);
10600         }
10601
10602         tp->rx_mode = RX_MODE_ENABLE;
10603         if (tg3_flag(tp, 5755_PLUS))
10604                 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
10605
10606         if (tg3_asic_rev(tp) == ASIC_REV_5762)
10607                 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX;
10608
10609         if (tg3_flag(tp, ENABLE_RSS))
10610                 tp->rx_mode |= RX_MODE_RSS_ENABLE |
10611                                RX_MODE_RSS_ITBL_HASH_BITS_7 |
10612                                RX_MODE_RSS_IPV6_HASH_EN |
10613                                RX_MODE_RSS_TCP_IPV6_HASH_EN |
10614                                RX_MODE_RSS_IPV4_HASH_EN |
10615                                RX_MODE_RSS_TCP_IPV4_HASH_EN;
10616
10617         tw32_f(MAC_RX_MODE, tp->rx_mode);
10618         udelay(10);
10619
10620         tw32(MAC_LED_CTRL, tp->led_ctrl);
10621
10622         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
10623         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10624                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10625                 udelay(10);
10626         }
10627         tw32_f(MAC_RX_MODE, tp->rx_mode);
10628         udelay(10);
10629
10630         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10631                 if ((tg3_asic_rev(tp) == ASIC_REV_5704) &&
10632                     !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
10633                         /* Set drive transmission level to 1.2V  */
10634                         /* only if the signal pre-emphasis bit is not set  */
10635                         val = tr32(MAC_SERDES_CFG);
10636                         val &= 0xfffff000;
10637                         val |= 0x880;
10638                         tw32(MAC_SERDES_CFG, val);
10639                 }
10640                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1)
10641                         tw32(MAC_SERDES_CFG, 0x616000);
10642         }
10643
10644         /* Prevent chip from dropping frames when flow control
10645          * is enabled.
10646          */
10647         if (tg3_flag(tp, 57765_CLASS))
10648                 val = 1;
10649         else
10650                 val = 2;
10651         tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
10652
10653         if (tg3_asic_rev(tp) == ASIC_REV_5704 &&
10654             (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
10655                 /* Use hardware link auto-negotiation */
10656                 tg3_flag_set(tp, HW_AUTONEG);
10657         }
10658
10659         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10660             tg3_asic_rev(tp) == ASIC_REV_5714) {
10661                 u32 tmp;
10662
10663                 tmp = tr32(SERDES_RX_CTRL);
10664                 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
10665                 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
10666                 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
10667                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10668         }
10669
10670         if (!tg3_flag(tp, USE_PHYLIB)) {
10671                 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10672                         tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
10673
10674                 err = tg3_setup_phy(tp, false);
10675                 if (err)
10676                         return err;
10677
10678                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10679                     !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
10680                         u32 tmp;
10681
10682                         /* Clear CRC stats. */
10683                         if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
10684                                 tg3_writephy(tp, MII_TG3_TEST1,
10685                                              tmp | MII_TG3_TEST1_CRC_EN);
10686                                 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
10687                         }
10688                 }
10689         }
10690
10691         __tg3_set_rx_mode(tp->dev);
10692
10693         /* Initialize receive rules. */
10694         tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
10695         tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
10696         tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
10697         tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
10698
10699         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
10700                 limit = 8;
10701         else
10702                 limit = 16;
10703         if (tg3_flag(tp, ENABLE_ASF))
10704                 limit -= 4;
10705         switch (limit) {
10706         case 16:
10707                 tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
10708                 fallthrough;
10709         case 15:
10710                 tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
10711                 fallthrough;
10712         case 14:
10713                 tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
10714                 fallthrough;
10715         case 13:
10716                 tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
10717                 fallthrough;
10718         case 12:
10719                 tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
10720                 fallthrough;
10721         case 11:
10722                 tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
10723                 fallthrough;
10724         case 10:
10725                 tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
10726                 fallthrough;
10727         case 9:
10728                 tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
10729                 fallthrough;
10730         case 8:
10731                 tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
10732                 fallthrough;
10733         case 7:
10734                 tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
10735                 fallthrough;
10736         case 6:
10737                 tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
10738                 fallthrough;
10739         case 5:
10740                 tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
10741                 fallthrough;
10742         case 4:
10743                 /* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
10744         case 3:
10745                 /* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
10746         case 2:
10747         case 1:
10748
10749         default:
10750                 break;
10751         }
10752
10753         if (tg3_flag(tp, ENABLE_APE))
10754                 /* Write our heartbeat update interval to APE. */
10755                 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
10756                                 APE_HOST_HEARTBEAT_INT_5SEC);
10757
10758         tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
10759
10760         return 0;
10761 }
10762
10763 /* Called at device open time to get the chip ready for
10764  * packet processing.  Invoked with tp->lock held.
10765  */
10766 static int tg3_init_hw(struct tg3 *tp, bool reset_phy)
10767 {
10768         /* Chip may have been just powered on. If so, the boot code may still
10769          * be running initialization. Wait for it to finish to avoid races in
10770          * accessing the hardware.
10771          */
10772         tg3_enable_register_access(tp);
10773         tg3_poll_fw(tp);
10774
10775         tg3_switch_clocks(tp);
10776
10777         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10778
10779         return tg3_reset_hw(tp, reset_phy);
10780 }
10781
10782 #ifdef CONFIG_TIGON3_HWMON
10783 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
10784 {
10785         u32 off, len = TG3_OCIR_LEN;
10786         int i;
10787
10788         for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) {
10789                 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
10790
10791                 if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
10792                     !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
10793                         memset(ocir, 0, len);
10794         }
10795 }
10796
10797 /* sysfs attributes for hwmon */
10798 static ssize_t tg3_show_temp(struct device *dev,
10799                              struct device_attribute *devattr, char *buf)
10800 {
10801         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
10802         struct tg3 *tp = dev_get_drvdata(dev);
10803         u32 temperature;
10804
10805         spin_lock_bh(&tp->lock);
10806         tg3_ape_scratchpad_read(tp, &temperature, attr->index,
10807                                 sizeof(temperature));
10808         spin_unlock_bh(&tp->lock);
10809         return sprintf(buf, "%u\n", temperature * 1000);
10810 }
10811
10812
10813 static SENSOR_DEVICE_ATTR(temp1_input, 0444, tg3_show_temp, NULL,
10814                           TG3_TEMP_SENSOR_OFFSET);
10815 static SENSOR_DEVICE_ATTR(temp1_crit, 0444, tg3_show_temp, NULL,
10816                           TG3_TEMP_CAUTION_OFFSET);
10817 static SENSOR_DEVICE_ATTR(temp1_max, 0444, tg3_show_temp, NULL,
10818                           TG3_TEMP_MAX_OFFSET);
10819
10820 static struct attribute *tg3_attrs[] = {
10821         &sensor_dev_attr_temp1_input.dev_attr.attr,
10822         &sensor_dev_attr_temp1_crit.dev_attr.attr,
10823         &sensor_dev_attr_temp1_max.dev_attr.attr,
10824         NULL
10825 };
10826 ATTRIBUTE_GROUPS(tg3);
10827
10828 static void tg3_hwmon_close(struct tg3 *tp)
10829 {
10830         if (tp->hwmon_dev) {
10831                 hwmon_device_unregister(tp->hwmon_dev);
10832                 tp->hwmon_dev = NULL;
10833         }
10834 }
10835
10836 static void tg3_hwmon_open(struct tg3 *tp)
10837 {
10838         int i;
10839         u32 size = 0;
10840         struct pci_dev *pdev = tp->pdev;
10841         struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
10842
10843         tg3_sd_scan_scratchpad(tp, ocirs);
10844
10845         for (i = 0; i < TG3_SD_NUM_RECS; i++) {
10846                 if (!ocirs[i].src_data_length)
10847                         continue;
10848
10849                 size += ocirs[i].src_hdr_length;
10850                 size += ocirs[i].src_data_length;
10851         }
10852
10853         if (!size)
10854                 return;
10855
10856         tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3",
10857                                                           tp, tg3_groups);
10858         if (IS_ERR(tp->hwmon_dev)) {
10859                 tp->hwmon_dev = NULL;
10860                 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
10861         }
10862 }
10863 #else
10864 static inline void tg3_hwmon_close(struct tg3 *tp) { }
10865 static inline void tg3_hwmon_open(struct tg3 *tp) { }
10866 #endif /* CONFIG_TIGON3_HWMON */
10867
10868
10869 #define TG3_STAT_ADD32(PSTAT, REG) \
10870 do {    u32 __val = tr32(REG); \
10871         (PSTAT)->low += __val; \
10872         if ((PSTAT)->low < __val) \
10873                 (PSTAT)->high += 1; \
10874 } while (0)
10875
10876 static void tg3_periodic_fetch_stats(struct tg3 *tp)
10877 {
10878         struct tg3_hw_stats *sp = tp->hw_stats;
10879
10880         if (!tp->link_up)
10881                 return;
10882
10883         TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
10884         TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
10885         TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
10886         TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
10887         TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
10888         TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
10889         TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
10890         TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
10891         TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
10892         TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
10893         TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
10894         TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
10895         TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
10896         if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) &&
10897                      (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
10898                       sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
10899                 u32 val;
10900
10901                 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10902                 val &= ~tg3_lso_rd_dma_workaround_bit(tp);
10903                 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10904                 tg3_flag_clear(tp, 5719_5720_RDMA_BUG);
10905         }
10906
10907         TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
10908         TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
10909         TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10910         TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10911         TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10912         TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10913         TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10914         TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10915         TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10916         TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10917         TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10918         TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10919         TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10920         TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10921
10922         TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10923         if (tg3_asic_rev(tp) != ASIC_REV_5717 &&
10924             tg3_asic_rev(tp) != ASIC_REV_5762 &&
10925             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 &&
10926             tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) {
10927                 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10928         } else {
10929                 u32 val = tr32(HOSTCC_FLOW_ATTN);
10930                 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10931                 if (val) {
10932                         tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10933                         sp->rx_discards.low += val;
10934                         if (sp->rx_discards.low < val)
10935                                 sp->rx_discards.high += 1;
10936                 }
10937                 sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10938         }
10939         TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10940 }
10941
10942 static void tg3_chk_missed_msi(struct tg3 *tp)
10943 {
10944         u32 i;
10945
10946         for (i = 0; i < tp->irq_cnt; i++) {
10947                 struct tg3_napi *tnapi = &tp->napi[i];
10948
10949                 if (tg3_has_work(tnapi)) {
10950                         if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10951                             tnapi->last_tx_cons == tnapi->tx_cons) {
10952                                 if (tnapi->chk_msi_cnt < 1) {
10953                                         tnapi->chk_msi_cnt++;
10954                                         return;
10955                                 }
10956                                 tg3_msi(0, tnapi);
10957                         }
10958                 }
10959                 tnapi->chk_msi_cnt = 0;
10960                 tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10961                 tnapi->last_tx_cons = tnapi->tx_cons;
10962         }
10963 }
10964
10965 static void tg3_timer(struct timer_list *t)
10966 {
10967         struct tg3 *tp = from_timer(tp, t, timer);
10968
10969         spin_lock(&tp->lock);
10970
10971         if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) {
10972                 spin_unlock(&tp->lock);
10973                 goto restart_timer;
10974         }
10975
10976         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10977             tg3_flag(tp, 57765_CLASS))
10978                 tg3_chk_missed_msi(tp);
10979
10980         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
10981                 /* BCM4785: Flush posted writes from GbE to host memory. */
10982                 tr32(HOSTCC_MODE);
10983         }
10984
10985         if (!tg3_flag(tp, TAGGED_STATUS)) {
10986                 /* All of this garbage is because when using non-tagged
10987                  * IRQ status the mailbox/status_block protocol the chip
10988                  * uses with the cpu is race prone.
10989                  */
10990                 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
10991                         tw32(GRC_LOCAL_CTRL,
10992                              tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
10993                 } else {
10994                         tw32(HOSTCC_MODE, tp->coalesce_mode |
10995                              HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
10996                 }
10997
10998                 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
10999                         spin_unlock(&tp->lock);
11000                         tg3_reset_task_schedule(tp);
11001                         goto restart_timer;
11002                 }
11003         }
11004
11005         /* This part only runs once per second. */
11006         if (!--tp->timer_counter) {
11007                 if (tg3_flag(tp, 5705_PLUS))
11008                         tg3_periodic_fetch_stats(tp);
11009
11010                 if (tp->setlpicnt && !--tp->setlpicnt)
11011                         tg3_phy_eee_enable(tp);
11012
11013                 if (tg3_flag(tp, USE_LINKCHG_REG)) {
11014                         u32 mac_stat;
11015                         int phy_event;
11016
11017                         mac_stat = tr32(MAC_STATUS);
11018
11019                         phy_event = 0;
11020                         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
11021                                 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
11022                                         phy_event = 1;
11023                         } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
11024                                 phy_event = 1;
11025
11026                         if (phy_event)
11027                                 tg3_setup_phy(tp, false);
11028                 } else if (tg3_flag(tp, POLL_SERDES)) {
11029                         u32 mac_stat = tr32(MAC_STATUS);
11030                         int need_setup = 0;
11031
11032                         if (tp->link_up &&
11033                             (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
11034                                 need_setup = 1;
11035                         }
11036                         if (!tp->link_up &&
11037                             (mac_stat & (MAC_STATUS_PCS_SYNCED |
11038                                          MAC_STATUS_SIGNAL_DET))) {
11039                                 need_setup = 1;
11040                         }
11041                         if (need_setup) {
11042                                 if (!tp->serdes_counter) {
11043                                         tw32_f(MAC_MODE,
11044                                              (tp->mac_mode &
11045                                               ~MAC_MODE_PORT_MODE_MASK));
11046                                         udelay(40);
11047                                         tw32_f(MAC_MODE, tp->mac_mode);
11048                                         udelay(40);
11049                                 }
11050                                 tg3_setup_phy(tp, false);
11051                         }
11052                 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
11053                            tg3_flag(tp, 5780_CLASS)) {
11054                         tg3_serdes_parallel_detect(tp);
11055                 } else if (tg3_flag(tp, POLL_CPMU_LINK)) {
11056                         u32 cpmu = tr32(TG3_CPMU_STATUS);
11057                         bool link_up = !((cpmu & TG3_CPMU_STATUS_LINK_MASK) ==
11058                                          TG3_CPMU_STATUS_LINK_MASK);
11059
11060                         if (link_up != tp->link_up)
11061                                 tg3_setup_phy(tp, false);
11062                 }
11063
11064                 tp->timer_counter = tp->timer_multiplier;
11065         }
11066
11067         /* Heartbeat is only sent once every 2 seconds.
11068          *
11069          * The heartbeat is to tell the ASF firmware that the host
11070          * driver is still alive.  In the event that the OS crashes,
11071          * ASF needs to reset the hardware to free up the FIFO space
11072          * that may be filled with rx packets destined for the host.
11073          * If the FIFO is full, ASF will no longer function properly.
11074          *
11075          * Unintended resets have been reported on real time kernels
11076          * where the timer doesn't run on time.  Netpoll will also have
11077          * same problem.
11078          *
11079          * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
11080          * to check the ring condition when the heartbeat is expiring
11081          * before doing the reset.  This will prevent most unintended
11082          * resets.
11083          */
11084         if (!--tp->asf_counter) {
11085                 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
11086                         tg3_wait_for_event_ack(tp);
11087
11088                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
11089                                       FWCMD_NICDRV_ALIVE3);
11090                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
11091                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
11092                                       TG3_FW_UPDATE_TIMEOUT_SEC);
11093
11094                         tg3_generate_fw_event(tp);
11095                 }
11096                 tp->asf_counter = tp->asf_multiplier;
11097         }
11098
11099         /* Update the APE heartbeat every 5 seconds.*/
11100         tg3_send_ape_heartbeat(tp, TG3_APE_HB_INTERVAL);
11101
11102         spin_unlock(&tp->lock);
11103
11104 restart_timer:
11105         tp->timer.expires = jiffies + tp->timer_offset;
11106         add_timer(&tp->timer);
11107 }
11108
11109 static void tg3_timer_init(struct tg3 *tp)
11110 {
11111         if (tg3_flag(tp, TAGGED_STATUS) &&
11112             tg3_asic_rev(tp) != ASIC_REV_5717 &&
11113             !tg3_flag(tp, 57765_CLASS))
11114                 tp->timer_offset = HZ;
11115         else
11116                 tp->timer_offset = HZ / 10;
11117
11118         BUG_ON(tp->timer_offset > HZ);
11119
11120         tp->timer_multiplier = (HZ / tp->timer_offset);
11121         tp->asf_multiplier = (HZ / tp->timer_offset) *
11122                              TG3_FW_UPDATE_FREQ_SEC;
11123
11124         timer_setup(&tp->timer, tg3_timer, 0);
11125 }
11126
11127 static void tg3_timer_start(struct tg3 *tp)
11128 {
11129         tp->asf_counter   = tp->asf_multiplier;
11130         tp->timer_counter = tp->timer_multiplier;
11131
11132         tp->timer.expires = jiffies + tp->timer_offset;
11133         add_timer(&tp->timer);
11134 }
11135
11136 static void tg3_timer_stop(struct tg3 *tp)
11137 {
11138         del_timer_sync(&tp->timer);
11139 }
11140
11141 /* Restart hardware after configuration changes, self-test, etc.
11142  * Invoked with tp->lock held.
11143  */
11144 static int tg3_restart_hw(struct tg3 *tp, bool reset_phy)
11145         __releases(tp->lock)
11146         __acquires(tp->lock)
11147 {
11148         int err;
11149
11150         err = tg3_init_hw(tp, reset_phy);
11151         if (err) {
11152                 netdev_err(tp->dev,
11153                            "Failed to re-initialize device, aborting\n");
11154                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11155                 tg3_full_unlock(tp);
11156                 tg3_timer_stop(tp);
11157                 tp->irq_sync = 0;
11158                 tg3_napi_enable(tp);
11159                 dev_close(tp->dev);
11160                 tg3_full_lock(tp, 0);
11161         }
11162         return err;
11163 }
11164
11165 static void tg3_reset_task(struct work_struct *work)
11166 {
11167         struct tg3 *tp = container_of(work, struct tg3, reset_task);
11168         int err;
11169
11170         rtnl_lock();
11171         tg3_full_lock(tp, 0);
11172
11173         if (tp->pcierr_recovery || !netif_running(tp->dev)) {
11174                 tg3_flag_clear(tp, RESET_TASK_PENDING);
11175                 tg3_full_unlock(tp);
11176                 rtnl_unlock();
11177                 return;
11178         }
11179
11180         tg3_full_unlock(tp);
11181
11182         tg3_phy_stop(tp);
11183
11184         tg3_netif_stop(tp);
11185
11186         tg3_full_lock(tp, 1);
11187
11188         if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
11189                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
11190                 tp->write32_rx_mbox = tg3_write_flush_reg32;
11191                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
11192                 tg3_flag_clear(tp, TX_RECOVERY_PENDING);
11193         }
11194
11195         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
11196         err = tg3_init_hw(tp, true);
11197         if (err) {
11198                 tg3_full_unlock(tp);
11199                 tp->irq_sync = 0;
11200                 tg3_napi_enable(tp);
11201                 /* Clear this flag so that tg3_reset_task_cancel() will not
11202                  * call cancel_work_sync() and wait forever.
11203                  */
11204                 tg3_flag_clear(tp, RESET_TASK_PENDING);
11205                 dev_close(tp->dev);
11206                 goto out;
11207         }
11208
11209         tg3_netif_start(tp);
11210         tg3_full_unlock(tp);
11211         tg3_phy_start(tp);
11212         tg3_flag_clear(tp, RESET_TASK_PENDING);
11213 out:
11214         rtnl_unlock();
11215 }
11216
11217 static int tg3_request_irq(struct tg3 *tp, int irq_num)
11218 {
11219         irq_handler_t fn;
11220         unsigned long flags;
11221         char *name;
11222         struct tg3_napi *tnapi = &tp->napi[irq_num];
11223
11224         if (tp->irq_cnt == 1)
11225                 name = tp->dev->name;
11226         else {
11227                 name = &tnapi->irq_lbl[0];
11228                 if (tnapi->tx_buffers && tnapi->rx_rcb)
11229                         snprintf(name, IFNAMSIZ,
11230                                  "%s-txrx-%d", tp->dev->name, irq_num);
11231                 else if (tnapi->tx_buffers)
11232                         snprintf(name, IFNAMSIZ,
11233                                  "%s-tx-%d", tp->dev->name, irq_num);
11234                 else if (tnapi->rx_rcb)
11235                         snprintf(name, IFNAMSIZ,
11236                                  "%s-rx-%d", tp->dev->name, irq_num);
11237                 else
11238                         snprintf(name, IFNAMSIZ,
11239                                  "%s-%d", tp->dev->name, irq_num);
11240                 name[IFNAMSIZ-1] = 0;
11241         }
11242
11243         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11244                 fn = tg3_msi;
11245                 if (tg3_flag(tp, 1SHOT_MSI))
11246                         fn = tg3_msi_1shot;
11247                 flags = 0;
11248         } else {
11249                 fn = tg3_interrupt;
11250                 if (tg3_flag(tp, TAGGED_STATUS))
11251                         fn = tg3_interrupt_tagged;
11252                 flags = IRQF_SHARED;
11253         }
11254
11255         return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
11256 }
11257
11258 static int tg3_test_interrupt(struct tg3 *tp)
11259 {
11260         struct tg3_napi *tnapi = &tp->napi[0];
11261         struct net_device *dev = tp->dev;
11262         int err, i, intr_ok = 0;
11263         u32 val;
11264
11265         if (!netif_running(dev))
11266                 return -ENODEV;
11267
11268         tg3_disable_ints(tp);
11269
11270         free_irq(tnapi->irq_vec, tnapi);
11271
11272         /*
11273          * Turn off MSI one shot mode.  Otherwise this test has no
11274          * observable way to know whether the interrupt was delivered.
11275          */
11276         if (tg3_flag(tp, 57765_PLUS)) {
11277                 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
11278                 tw32(MSGINT_MODE, val);
11279         }
11280
11281         err = request_irq(tnapi->irq_vec, tg3_test_isr,
11282                           IRQF_SHARED, dev->name, tnapi);
11283         if (err)
11284                 return err;
11285
11286         tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
11287         tg3_enable_ints(tp);
11288
11289         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11290                tnapi->coal_now);
11291
11292         for (i = 0; i < 5; i++) {
11293                 u32 int_mbox, misc_host_ctrl;
11294
11295                 int_mbox = tr32_mailbox(tnapi->int_mbox);
11296                 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
11297
11298                 if ((int_mbox != 0) ||
11299                     (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
11300                         intr_ok = 1;
11301                         break;
11302                 }
11303
11304                 if (tg3_flag(tp, 57765_PLUS) &&
11305                     tnapi->hw_status->status_tag != tnapi->last_tag)
11306                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
11307
11308                 msleep(10);
11309         }
11310
11311         tg3_disable_ints(tp);
11312
11313         free_irq(tnapi->irq_vec, tnapi);
11314
11315         err = tg3_request_irq(tp, 0);
11316
11317         if (err)
11318                 return err;
11319
11320         if (intr_ok) {
11321                 /* Reenable MSI one shot mode. */
11322                 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
11323                         val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
11324                         tw32(MSGINT_MODE, val);
11325                 }
11326                 return 0;
11327         }
11328
11329         return -EIO;
11330 }
11331
11332 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
11333  * successfully restored
11334  */
11335 static int tg3_test_msi(struct tg3 *tp)
11336 {
11337         int err;
11338         u16 pci_cmd;
11339
11340         if (!tg3_flag(tp, USING_MSI))
11341                 return 0;
11342
11343         /* Turn off SERR reporting in case MSI terminates with Master
11344          * Abort.
11345          */
11346         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11347         pci_write_config_word(tp->pdev, PCI_COMMAND,
11348                               pci_cmd & ~PCI_COMMAND_SERR);
11349
11350         err = tg3_test_interrupt(tp);
11351
11352         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11353
11354         if (!err)
11355                 return 0;
11356
11357         /* other failures */
11358         if (err != -EIO)
11359                 return err;
11360
11361         /* MSI test failed, go back to INTx mode */
11362         netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
11363                     "to INTx mode. Please report this failure to the PCI "
11364                     "maintainer and include system chipset information\n");
11365
11366         free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11367
11368         pci_disable_msi(tp->pdev);
11369
11370         tg3_flag_clear(tp, USING_MSI);
11371         tp->napi[0].irq_vec = tp->pdev->irq;
11372
11373         err = tg3_request_irq(tp, 0);
11374         if (err)
11375                 return err;
11376
11377         /* Need to reset the chip because the MSI cycle may have terminated
11378          * with Master Abort.
11379          */
11380         tg3_full_lock(tp, 1);
11381
11382         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11383         err = tg3_init_hw(tp, true);
11384
11385         tg3_full_unlock(tp);
11386
11387         if (err)
11388                 free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11389
11390         return err;
11391 }
11392
11393 static int tg3_request_firmware(struct tg3 *tp)
11394 {
11395         const struct tg3_firmware_hdr *fw_hdr;
11396
11397         if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
11398                 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
11399                            tp->fw_needed);
11400                 return -ENOENT;
11401         }
11402
11403         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
11404
11405         /* Firmware blob starts with version numbers, followed by
11406          * start address and _full_ length including BSS sections
11407          * (which must be longer than the actual data, of course
11408          */
11409
11410         tp->fw_len = be32_to_cpu(fw_hdr->len);  /* includes bss */
11411         if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) {
11412                 netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
11413                            tp->fw_len, tp->fw_needed);
11414                 release_firmware(tp->fw);
11415                 tp->fw = NULL;
11416                 return -EINVAL;
11417         }
11418
11419         /* We no longer need firmware; we have it. */
11420         tp->fw_needed = NULL;
11421         return 0;
11422 }
11423
11424 static u32 tg3_irq_count(struct tg3 *tp)
11425 {
11426         u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
11427
11428         if (irq_cnt > 1) {
11429                 /* We want as many rx rings enabled as there are cpus.
11430                  * In multiqueue MSI-X mode, the first MSI-X vector
11431                  * only deals with link interrupts, etc, so we add
11432                  * one to the number of vectors we are requesting.
11433                  */
11434                 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
11435         }
11436
11437         return irq_cnt;
11438 }
11439
11440 static bool tg3_enable_msix(struct tg3 *tp)
11441 {
11442         int i, rc;
11443         struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
11444
11445         tp->txq_cnt = tp->txq_req;
11446         tp->rxq_cnt = tp->rxq_req;
11447         if (!tp->rxq_cnt)
11448                 tp->rxq_cnt = netif_get_num_default_rss_queues();
11449         if (tp->rxq_cnt > tp->rxq_max)
11450                 tp->rxq_cnt = tp->rxq_max;
11451
11452         /* Disable multiple TX rings by default.  Simple round-robin hardware
11453          * scheduling of the TX rings can cause starvation of rings with
11454          * small packets when other rings have TSO or jumbo packets.
11455          */
11456         if (!tp->txq_req)
11457                 tp->txq_cnt = 1;
11458
11459         tp->irq_cnt = tg3_irq_count(tp);
11460
11461         for (i = 0; i < tp->irq_max; i++) {
11462                 msix_ent[i].entry  = i;
11463                 msix_ent[i].vector = 0;
11464         }
11465
11466         rc = pci_enable_msix_range(tp->pdev, msix_ent, 1, tp->irq_cnt);
11467         if (rc < 0) {
11468                 return false;
11469         } else if (rc < tp->irq_cnt) {
11470                 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
11471                               tp->irq_cnt, rc);
11472                 tp->irq_cnt = rc;
11473                 tp->rxq_cnt = max(rc - 1, 1);
11474                 if (tp->txq_cnt)
11475                         tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
11476         }
11477
11478         for (i = 0; i < tp->irq_max; i++)
11479                 tp->napi[i].irq_vec = msix_ent[i].vector;
11480
11481         if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
11482                 pci_disable_msix(tp->pdev);
11483                 return false;
11484         }
11485
11486         if (tp->irq_cnt == 1)
11487                 return true;
11488
11489         tg3_flag_set(tp, ENABLE_RSS);
11490
11491         if (tp->txq_cnt > 1)
11492                 tg3_flag_set(tp, ENABLE_TSS);
11493
11494         netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
11495
11496         return true;
11497 }
11498
11499 static void tg3_ints_init(struct tg3 *tp)
11500 {
11501         if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
11502             !tg3_flag(tp, TAGGED_STATUS)) {
11503                 /* All MSI supporting chips should support tagged
11504                  * status.  Assert that this is the case.
11505                  */
11506                 netdev_warn(tp->dev,
11507                             "MSI without TAGGED_STATUS? Not using MSI\n");
11508                 goto defcfg;
11509         }
11510
11511         if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
11512                 tg3_flag_set(tp, USING_MSIX);
11513         else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
11514                 tg3_flag_set(tp, USING_MSI);
11515
11516         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11517                 u32 msi_mode = tr32(MSGINT_MODE);
11518                 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
11519                         msi_mode |= MSGINT_MODE_MULTIVEC_EN;
11520                 if (!tg3_flag(tp, 1SHOT_MSI))
11521                         msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
11522                 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
11523         }
11524 defcfg:
11525         if (!tg3_flag(tp, USING_MSIX)) {
11526                 tp->irq_cnt = 1;
11527                 tp->napi[0].irq_vec = tp->pdev->irq;
11528         }
11529
11530         if (tp->irq_cnt == 1) {
11531                 tp->txq_cnt = 1;
11532                 tp->rxq_cnt = 1;
11533                 netif_set_real_num_tx_queues(tp->dev, 1);
11534                 netif_set_real_num_rx_queues(tp->dev, 1);
11535         }
11536 }
11537
11538 static void tg3_ints_fini(struct tg3 *tp)
11539 {
11540         if (tg3_flag(tp, USING_MSIX))
11541                 pci_disable_msix(tp->pdev);
11542         else if (tg3_flag(tp, USING_MSI))
11543                 pci_disable_msi(tp->pdev);
11544         tg3_flag_clear(tp, USING_MSI);
11545         tg3_flag_clear(tp, USING_MSIX);
11546         tg3_flag_clear(tp, ENABLE_RSS);
11547         tg3_flag_clear(tp, ENABLE_TSS);
11548 }
11549
11550 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
11551                      bool init)
11552 {
11553         struct net_device *dev = tp->dev;
11554         int i, err;
11555
11556         /*
11557          * Setup interrupts first so we know how
11558          * many NAPI resources to allocate
11559          */
11560         tg3_ints_init(tp);
11561
11562         tg3_rss_check_indir_tbl(tp);
11563
11564         /* The placement of this call is tied
11565          * to the setup and use of Host TX descriptors.
11566          */
11567         err = tg3_alloc_consistent(tp);
11568         if (err)
11569                 goto out_ints_fini;
11570
11571         tg3_napi_init(tp);
11572
11573         tg3_napi_enable(tp);
11574
11575         for (i = 0; i < tp->irq_cnt; i++) {
11576                 err = tg3_request_irq(tp, i);
11577                 if (err) {
11578                         for (i--; i >= 0; i--) {
11579                                 struct tg3_napi *tnapi = &tp->napi[i];
11580
11581                                 free_irq(tnapi->irq_vec, tnapi);
11582                         }
11583                         goto out_napi_fini;
11584                 }
11585         }
11586
11587         tg3_full_lock(tp, 0);
11588
11589         if (init)
11590                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
11591
11592         err = tg3_init_hw(tp, reset_phy);
11593         if (err) {
11594                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11595                 tg3_free_rings(tp);
11596         }
11597
11598         tg3_full_unlock(tp);
11599
11600         if (err)
11601                 goto out_free_irq;
11602
11603         if (test_irq && tg3_flag(tp, USING_MSI)) {
11604                 err = tg3_test_msi(tp);
11605
11606                 if (err) {
11607                         tg3_full_lock(tp, 0);
11608                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11609                         tg3_free_rings(tp);
11610                         tg3_full_unlock(tp);
11611
11612                         goto out_napi_fini;
11613                 }
11614
11615                 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
11616                         u32 val = tr32(PCIE_TRANSACTION_CFG);
11617
11618                         tw32(PCIE_TRANSACTION_CFG,
11619                              val | PCIE_TRANS_CFG_1SHOT_MSI);
11620                 }
11621         }
11622
11623         tg3_phy_start(tp);
11624
11625         tg3_hwmon_open(tp);
11626
11627         tg3_full_lock(tp, 0);
11628
11629         tg3_timer_start(tp);
11630         tg3_flag_set(tp, INIT_COMPLETE);
11631         tg3_enable_ints(tp);
11632
11633         tg3_ptp_resume(tp);
11634
11635         tg3_full_unlock(tp);
11636
11637         netif_tx_start_all_queues(dev);
11638
11639         /*
11640          * Reset loopback feature if it was turned on while the device was down
11641          * make sure that it's installed properly now.
11642          */
11643         if (dev->features & NETIF_F_LOOPBACK)
11644                 tg3_set_loopback(dev, dev->features);
11645
11646         return 0;
11647
11648 out_free_irq:
11649         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11650                 struct tg3_napi *tnapi = &tp->napi[i];
11651                 free_irq(tnapi->irq_vec, tnapi);
11652         }
11653
11654 out_napi_fini:
11655         tg3_napi_disable(tp);
11656         tg3_napi_fini(tp);
11657         tg3_free_consistent(tp);
11658
11659 out_ints_fini:
11660         tg3_ints_fini(tp);
11661
11662         return err;
11663 }
11664
11665 static void tg3_stop(struct tg3 *tp)
11666 {
11667         int i;
11668
11669         tg3_reset_task_cancel(tp);
11670         tg3_netif_stop(tp);
11671
11672         tg3_timer_stop(tp);
11673
11674         tg3_hwmon_close(tp);
11675
11676         tg3_phy_stop(tp);
11677
11678         tg3_full_lock(tp, 1);
11679
11680         tg3_disable_ints(tp);
11681
11682         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11683         tg3_free_rings(tp);
11684         tg3_flag_clear(tp, INIT_COMPLETE);
11685
11686         tg3_full_unlock(tp);
11687
11688         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11689                 struct tg3_napi *tnapi = &tp->napi[i];
11690                 free_irq(tnapi->irq_vec, tnapi);
11691         }
11692
11693         tg3_ints_fini(tp);
11694
11695         tg3_napi_fini(tp);
11696
11697         tg3_free_consistent(tp);
11698 }
11699
11700 static int tg3_open(struct net_device *dev)
11701 {
11702         struct tg3 *tp = netdev_priv(dev);
11703         int err;
11704
11705         if (tp->pcierr_recovery) {
11706                 netdev_err(dev, "Failed to open device. PCI error recovery "
11707                            "in progress\n");
11708                 return -EAGAIN;
11709         }
11710
11711         if (tp->fw_needed) {
11712                 err = tg3_request_firmware(tp);
11713                 if (tg3_asic_rev(tp) == ASIC_REV_57766) {
11714                         if (err) {
11715                                 netdev_warn(tp->dev, "EEE capability disabled\n");
11716                                 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11717                         } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
11718                                 netdev_warn(tp->dev, "EEE capability restored\n");
11719                                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
11720                         }
11721                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
11722                         if (err)
11723                                 return err;
11724                 } else if (err) {
11725                         netdev_warn(tp->dev, "TSO capability disabled\n");
11726                         tg3_flag_clear(tp, TSO_CAPABLE);
11727                 } else if (!tg3_flag(tp, TSO_CAPABLE)) {
11728                         netdev_notice(tp->dev, "TSO capability restored\n");
11729                         tg3_flag_set(tp, TSO_CAPABLE);
11730                 }
11731         }
11732
11733         tg3_carrier_off(tp);
11734
11735         err = tg3_power_up(tp);
11736         if (err)
11737                 return err;
11738
11739         tg3_full_lock(tp, 0);
11740
11741         tg3_disable_ints(tp);
11742         tg3_flag_clear(tp, INIT_COMPLETE);
11743
11744         tg3_full_unlock(tp);
11745
11746         err = tg3_start(tp,
11747                         !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN),
11748                         true, true);
11749         if (err) {
11750                 tg3_frob_aux_power(tp, false);
11751                 pci_set_power_state(tp->pdev, PCI_D3hot);
11752         }
11753
11754         return err;
11755 }
11756
11757 static int tg3_close(struct net_device *dev)
11758 {
11759         struct tg3 *tp = netdev_priv(dev);
11760
11761         if (tp->pcierr_recovery) {
11762                 netdev_err(dev, "Failed to close device. PCI error recovery "
11763                            "in progress\n");
11764                 return -EAGAIN;
11765         }
11766
11767         tg3_stop(tp);
11768
11769         if (pci_device_is_present(tp->pdev)) {
11770                 tg3_power_down_prepare(tp);
11771
11772                 tg3_carrier_off(tp);
11773         }
11774         return 0;
11775 }
11776
11777 static inline u64 get_stat64(tg3_stat64_t *val)
11778 {
11779        return ((u64)val->high << 32) | ((u64)val->low);
11780 }
11781
11782 static u64 tg3_calc_crc_errors(struct tg3 *tp)
11783 {
11784         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11785
11786         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11787             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
11788              tg3_asic_rev(tp) == ASIC_REV_5701)) {
11789                 u32 val;
11790
11791                 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
11792                         tg3_writephy(tp, MII_TG3_TEST1,
11793                                      val | MII_TG3_TEST1_CRC_EN);
11794                         tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
11795                 } else
11796                         val = 0;
11797
11798                 tp->phy_crc_errors += val;
11799
11800                 return tp->phy_crc_errors;
11801         }
11802
11803         return get_stat64(&hw_stats->rx_fcs_errors);
11804 }
11805
11806 #define ESTAT_ADD(member) \
11807         estats->member =        old_estats->member + \
11808                                 get_stat64(&hw_stats->member)
11809
11810 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
11811 {
11812         struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
11813         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11814
11815         ESTAT_ADD(rx_octets);
11816         ESTAT_ADD(rx_fragments);
11817         ESTAT_ADD(rx_ucast_packets);
11818         ESTAT_ADD(rx_mcast_packets);
11819         ESTAT_ADD(rx_bcast_packets);
11820         ESTAT_ADD(rx_fcs_errors);
11821         ESTAT_ADD(rx_align_errors);
11822         ESTAT_ADD(rx_xon_pause_rcvd);
11823         ESTAT_ADD(rx_xoff_pause_rcvd);
11824         ESTAT_ADD(rx_mac_ctrl_rcvd);
11825         ESTAT_ADD(rx_xoff_entered);
11826         ESTAT_ADD(rx_frame_too_long_errors);
11827         ESTAT_ADD(rx_jabbers);
11828         ESTAT_ADD(rx_undersize_packets);
11829         ESTAT_ADD(rx_in_length_errors);
11830         ESTAT_ADD(rx_out_length_errors);
11831         ESTAT_ADD(rx_64_or_less_octet_packets);
11832         ESTAT_ADD(rx_65_to_127_octet_packets);
11833         ESTAT_ADD(rx_128_to_255_octet_packets);
11834         ESTAT_ADD(rx_256_to_511_octet_packets);
11835         ESTAT_ADD(rx_512_to_1023_octet_packets);
11836         ESTAT_ADD(rx_1024_to_1522_octet_packets);
11837         ESTAT_ADD(rx_1523_to_2047_octet_packets);
11838         ESTAT_ADD(rx_2048_to_4095_octet_packets);
11839         ESTAT_ADD(rx_4096_to_8191_octet_packets);
11840         ESTAT_ADD(rx_8192_to_9022_octet_packets);
11841
11842         ESTAT_ADD(tx_octets);
11843         ESTAT_ADD(tx_collisions);
11844         ESTAT_ADD(tx_xon_sent);
11845         ESTAT_ADD(tx_xoff_sent);
11846         ESTAT_ADD(tx_flow_control);
11847         ESTAT_ADD(tx_mac_errors);
11848         ESTAT_ADD(tx_single_collisions);
11849         ESTAT_ADD(tx_mult_collisions);
11850         ESTAT_ADD(tx_deferred);
11851         ESTAT_ADD(tx_excessive_collisions);
11852         ESTAT_ADD(tx_late_collisions);
11853         ESTAT_ADD(tx_collide_2times);
11854         ESTAT_ADD(tx_collide_3times);
11855         ESTAT_ADD(tx_collide_4times);
11856         ESTAT_ADD(tx_collide_5times);
11857         ESTAT_ADD(tx_collide_6times);
11858         ESTAT_ADD(tx_collide_7times);
11859         ESTAT_ADD(tx_collide_8times);
11860         ESTAT_ADD(tx_collide_9times);
11861         ESTAT_ADD(tx_collide_10times);
11862         ESTAT_ADD(tx_collide_11times);
11863         ESTAT_ADD(tx_collide_12times);
11864         ESTAT_ADD(tx_collide_13times);
11865         ESTAT_ADD(tx_collide_14times);
11866         ESTAT_ADD(tx_collide_15times);
11867         ESTAT_ADD(tx_ucast_packets);
11868         ESTAT_ADD(tx_mcast_packets);
11869         ESTAT_ADD(tx_bcast_packets);
11870         ESTAT_ADD(tx_carrier_sense_errors);
11871         ESTAT_ADD(tx_discards);
11872         ESTAT_ADD(tx_errors);
11873
11874         ESTAT_ADD(dma_writeq_full);
11875         ESTAT_ADD(dma_write_prioq_full);
11876         ESTAT_ADD(rxbds_empty);
11877         ESTAT_ADD(rx_discards);
11878         ESTAT_ADD(rx_errors);
11879         ESTAT_ADD(rx_threshold_hit);
11880
11881         ESTAT_ADD(dma_readq_full);
11882         ESTAT_ADD(dma_read_prioq_full);
11883         ESTAT_ADD(tx_comp_queue_full);
11884
11885         ESTAT_ADD(ring_set_send_prod_index);
11886         ESTAT_ADD(ring_status_update);
11887         ESTAT_ADD(nic_irqs);
11888         ESTAT_ADD(nic_avoided_irqs);
11889         ESTAT_ADD(nic_tx_threshold_hit);
11890
11891         ESTAT_ADD(mbuf_lwm_thresh_hit);
11892 }
11893
11894 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
11895 {
11896         struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
11897         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11898
11899         stats->rx_packets = old_stats->rx_packets +
11900                 get_stat64(&hw_stats->rx_ucast_packets) +
11901                 get_stat64(&hw_stats->rx_mcast_packets) +
11902                 get_stat64(&hw_stats->rx_bcast_packets);
11903
11904         stats->tx_packets = old_stats->tx_packets +
11905                 get_stat64(&hw_stats->tx_ucast_packets) +
11906                 get_stat64(&hw_stats->tx_mcast_packets) +
11907                 get_stat64(&hw_stats->tx_bcast_packets);
11908
11909         stats->rx_bytes = old_stats->rx_bytes +
11910                 get_stat64(&hw_stats->rx_octets);
11911         stats->tx_bytes = old_stats->tx_bytes +
11912                 get_stat64(&hw_stats->tx_octets);
11913
11914         stats->rx_errors = old_stats->rx_errors +
11915                 get_stat64(&hw_stats->rx_errors);
11916         stats->tx_errors = old_stats->tx_errors +
11917                 get_stat64(&hw_stats->tx_errors) +
11918                 get_stat64(&hw_stats->tx_mac_errors) +
11919                 get_stat64(&hw_stats->tx_carrier_sense_errors) +
11920                 get_stat64(&hw_stats->tx_discards);
11921
11922         stats->multicast = old_stats->multicast +
11923                 get_stat64(&hw_stats->rx_mcast_packets);
11924         stats->collisions = old_stats->collisions +
11925                 get_stat64(&hw_stats->tx_collisions);
11926
11927         stats->rx_length_errors = old_stats->rx_length_errors +
11928                 get_stat64(&hw_stats->rx_frame_too_long_errors) +
11929                 get_stat64(&hw_stats->rx_undersize_packets);
11930
11931         stats->rx_frame_errors = old_stats->rx_frame_errors +
11932                 get_stat64(&hw_stats->rx_align_errors);
11933         stats->tx_aborted_errors = old_stats->tx_aborted_errors +
11934                 get_stat64(&hw_stats->tx_discards);
11935         stats->tx_carrier_errors = old_stats->tx_carrier_errors +
11936                 get_stat64(&hw_stats->tx_carrier_sense_errors);
11937
11938         stats->rx_crc_errors = old_stats->rx_crc_errors +
11939                 tg3_calc_crc_errors(tp);
11940
11941         stats->rx_missed_errors = old_stats->rx_missed_errors +
11942                 get_stat64(&hw_stats->rx_discards);
11943
11944         stats->rx_dropped = tp->rx_dropped;
11945         stats->tx_dropped = tp->tx_dropped;
11946 }
11947
11948 static int tg3_get_regs_len(struct net_device *dev)
11949 {
11950         return TG3_REG_BLK_SIZE;
11951 }
11952
11953 static void tg3_get_regs(struct net_device *dev,
11954                 struct ethtool_regs *regs, void *_p)
11955 {
11956         struct tg3 *tp = netdev_priv(dev);
11957
11958         regs->version = 0;
11959
11960         memset(_p, 0, TG3_REG_BLK_SIZE);
11961
11962         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11963                 return;
11964
11965         tg3_full_lock(tp, 0);
11966
11967         tg3_dump_legacy_regs(tp, (u32 *)_p);
11968
11969         tg3_full_unlock(tp);
11970 }
11971
11972 static int tg3_get_eeprom_len(struct net_device *dev)
11973 {
11974         struct tg3 *tp = netdev_priv(dev);
11975
11976         return tp->nvram_size;
11977 }
11978
11979 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11980 {
11981         struct tg3 *tp = netdev_priv(dev);
11982         int ret, cpmu_restore = 0;
11983         u8  *pd;
11984         u32 i, offset, len, b_offset, b_count, cpmu_val = 0;
11985         __be32 val;
11986
11987         if (tg3_flag(tp, NO_NVRAM))
11988                 return -EINVAL;
11989
11990         offset = eeprom->offset;
11991         len = eeprom->len;
11992         eeprom->len = 0;
11993
11994         eeprom->magic = TG3_EEPROM_MAGIC;
11995
11996         /* Override clock, link aware and link idle modes */
11997         if (tg3_flag(tp, CPMU_PRESENT)) {
11998                 cpmu_val = tr32(TG3_CPMU_CTRL);
11999                 if (cpmu_val & (CPMU_CTRL_LINK_AWARE_MODE |
12000                                 CPMU_CTRL_LINK_IDLE_MODE)) {
12001                         tw32(TG3_CPMU_CTRL, cpmu_val &
12002                                             ~(CPMU_CTRL_LINK_AWARE_MODE |
12003                                              CPMU_CTRL_LINK_IDLE_MODE));
12004                         cpmu_restore = 1;
12005                 }
12006         }
12007         tg3_override_clk(tp);
12008
12009         if (offset & 3) {
12010                 /* adjustments to start on required 4 byte boundary */
12011                 b_offset = offset & 3;
12012                 b_count = 4 - b_offset;
12013                 if (b_count > len) {
12014                         /* i.e. offset=1 len=2 */
12015                         b_count = len;
12016                 }
12017                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
12018                 if (ret)
12019                         goto eeprom_done;
12020                 memcpy(data, ((char *)&val) + b_offset, b_count);
12021                 len -= b_count;
12022                 offset += b_count;
12023                 eeprom->len += b_count;
12024         }
12025
12026         /* read bytes up to the last 4 byte boundary */
12027         pd = &data[eeprom->len];
12028         for (i = 0; i < (len - (len & 3)); i += 4) {
12029                 ret = tg3_nvram_read_be32(tp, offset + i, &val);
12030                 if (ret) {
12031                         if (i)
12032                                 i -= 4;
12033                         eeprom->len += i;
12034                         goto eeprom_done;
12035                 }
12036                 memcpy(pd + i, &val, 4);
12037                 if (need_resched()) {
12038                         if (signal_pending(current)) {
12039                                 eeprom->len += i;
12040                                 ret = -EINTR;
12041                                 goto eeprom_done;
12042                         }
12043                         cond_resched();
12044                 }
12045         }
12046         eeprom->len += i;
12047
12048         if (len & 3) {
12049                 /* read last bytes not ending on 4 byte boundary */
12050                 pd = &data[eeprom->len];
12051                 b_count = len & 3;
12052                 b_offset = offset + len - b_count;
12053                 ret = tg3_nvram_read_be32(tp, b_offset, &val);
12054                 if (ret)
12055                         goto eeprom_done;
12056                 memcpy(pd, &val, b_count);
12057                 eeprom->len += b_count;
12058         }
12059         ret = 0;
12060
12061 eeprom_done:
12062         /* Restore clock, link aware and link idle modes */
12063         tg3_restore_clk(tp);
12064         if (cpmu_restore)
12065                 tw32(TG3_CPMU_CTRL, cpmu_val);
12066
12067         return ret;
12068 }
12069
12070 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
12071 {
12072         struct tg3 *tp = netdev_priv(dev);
12073         int ret;
12074         u32 offset, len, b_offset, odd_len;
12075         u8 *buf;
12076         __be32 start = 0, end;
12077
12078         if (tg3_flag(tp, NO_NVRAM) ||
12079             eeprom->magic != TG3_EEPROM_MAGIC)
12080                 return -EINVAL;
12081
12082         offset = eeprom->offset;
12083         len = eeprom->len;
12084
12085         if ((b_offset = (offset & 3))) {
12086                 /* adjustments to start on required 4 byte boundary */
12087                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
12088                 if (ret)
12089                         return ret;
12090                 len += b_offset;
12091                 offset &= ~3;
12092                 if (len < 4)
12093                         len = 4;
12094         }
12095
12096         odd_len = 0;
12097         if (len & 3) {
12098                 /* adjustments to end on required 4 byte boundary */
12099                 odd_len = 1;
12100                 len = (len + 3) & ~3;
12101                 ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
12102                 if (ret)
12103                         return ret;
12104         }
12105
12106         buf = data;
12107         if (b_offset || odd_len) {
12108                 buf = kmalloc(len, GFP_KERNEL);
12109                 if (!buf)
12110                         return -ENOMEM;
12111                 if (b_offset)
12112                         memcpy(buf, &start, 4);
12113                 if (odd_len)
12114                         memcpy(buf+len-4, &end, 4);
12115                 memcpy(buf + b_offset, data, eeprom->len);
12116         }
12117
12118         ret = tg3_nvram_write_block(tp, offset, len, buf);
12119
12120         if (buf != data)
12121                 kfree(buf);
12122
12123         return ret;
12124 }
12125
12126 static int tg3_get_link_ksettings(struct net_device *dev,
12127                                   struct ethtool_link_ksettings *cmd)
12128 {
12129         struct tg3 *tp = netdev_priv(dev);
12130         u32 supported, advertising;
12131
12132         if (tg3_flag(tp, USE_PHYLIB)) {
12133                 struct phy_device *phydev;
12134                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12135                         return -EAGAIN;
12136                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12137                 phy_ethtool_ksettings_get(phydev, cmd);
12138
12139                 return 0;
12140         }
12141
12142         supported = (SUPPORTED_Autoneg);
12143
12144         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12145                 supported |= (SUPPORTED_1000baseT_Half |
12146                               SUPPORTED_1000baseT_Full);
12147
12148         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12149                 supported |= (SUPPORTED_100baseT_Half |
12150                               SUPPORTED_100baseT_Full |
12151                               SUPPORTED_10baseT_Half |
12152                               SUPPORTED_10baseT_Full |
12153                               SUPPORTED_TP);
12154                 cmd->base.port = PORT_TP;
12155         } else {
12156                 supported |= SUPPORTED_FIBRE;
12157                 cmd->base.port = PORT_FIBRE;
12158         }
12159         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
12160                                                 supported);
12161
12162         advertising = tp->link_config.advertising;
12163         if (tg3_flag(tp, PAUSE_AUTONEG)) {
12164                 if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
12165                         if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12166                                 advertising |= ADVERTISED_Pause;
12167                         } else {
12168                                 advertising |= ADVERTISED_Pause |
12169                                         ADVERTISED_Asym_Pause;
12170                         }
12171                 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
12172                         advertising |= ADVERTISED_Asym_Pause;
12173                 }
12174         }
12175         ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
12176                                                 advertising);
12177
12178         if (netif_running(dev) && tp->link_up) {
12179                 cmd->base.speed = tp->link_config.active_speed;
12180                 cmd->base.duplex = tp->link_config.active_duplex;
12181                 ethtool_convert_legacy_u32_to_link_mode(
12182                         cmd->link_modes.lp_advertising,
12183                         tp->link_config.rmt_adv);
12184
12185                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
12186                         if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
12187                                 cmd->base.eth_tp_mdix = ETH_TP_MDI_X;
12188                         else
12189                                 cmd->base.eth_tp_mdix = ETH_TP_MDI;
12190                 }
12191         } else {
12192                 cmd->base.speed = SPEED_UNKNOWN;
12193                 cmd->base.duplex = DUPLEX_UNKNOWN;
12194                 cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
12195         }
12196         cmd->base.phy_address = tp->phy_addr;
12197         cmd->base.autoneg = tp->link_config.autoneg;
12198         return 0;
12199 }
12200
12201 static int tg3_set_link_ksettings(struct net_device *dev,
12202                                   const struct ethtool_link_ksettings *cmd)
12203 {
12204         struct tg3 *tp = netdev_priv(dev);
12205         u32 speed = cmd->base.speed;
12206         u32 advertising;
12207
12208         if (tg3_flag(tp, USE_PHYLIB)) {
12209                 struct phy_device *phydev;
12210                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12211                         return -EAGAIN;
12212                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12213                 return phy_ethtool_ksettings_set(phydev, cmd);
12214         }
12215
12216         if (cmd->base.autoneg != AUTONEG_ENABLE &&
12217             cmd->base.autoneg != AUTONEG_DISABLE)
12218                 return -EINVAL;
12219
12220         if (cmd->base.autoneg == AUTONEG_DISABLE &&
12221             cmd->base.duplex != DUPLEX_FULL &&
12222             cmd->base.duplex != DUPLEX_HALF)
12223                 return -EINVAL;
12224
12225         ethtool_convert_link_mode_to_legacy_u32(&advertising,
12226                                                 cmd->link_modes.advertising);
12227
12228         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12229                 u32 mask = ADVERTISED_Autoneg |
12230                            ADVERTISED_Pause |
12231                            ADVERTISED_Asym_Pause;
12232
12233                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12234                         mask |= ADVERTISED_1000baseT_Half |
12235                                 ADVERTISED_1000baseT_Full;
12236
12237                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
12238                         mask |= ADVERTISED_100baseT_Half |
12239                                 ADVERTISED_100baseT_Full |
12240                                 ADVERTISED_10baseT_Half |
12241                                 ADVERTISED_10baseT_Full |
12242                                 ADVERTISED_TP;
12243                 else
12244                         mask |= ADVERTISED_FIBRE;
12245
12246                 if (advertising & ~mask)
12247                         return -EINVAL;
12248
12249                 mask &= (ADVERTISED_1000baseT_Half |
12250                          ADVERTISED_1000baseT_Full |
12251                          ADVERTISED_100baseT_Half |
12252                          ADVERTISED_100baseT_Full |
12253                          ADVERTISED_10baseT_Half |
12254                          ADVERTISED_10baseT_Full);
12255
12256                 advertising &= mask;
12257         } else {
12258                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
12259                         if (speed != SPEED_1000)
12260                                 return -EINVAL;
12261
12262                         if (cmd->base.duplex != DUPLEX_FULL)
12263                                 return -EINVAL;
12264                 } else {
12265                         if (speed != SPEED_100 &&
12266                             speed != SPEED_10)
12267                                 return -EINVAL;
12268                 }
12269         }
12270
12271         tg3_full_lock(tp, 0);
12272
12273         tp->link_config.autoneg = cmd->base.autoneg;
12274         if (cmd->base.autoneg == AUTONEG_ENABLE) {
12275                 tp->link_config.advertising = (advertising |
12276                                               ADVERTISED_Autoneg);
12277                 tp->link_config.speed = SPEED_UNKNOWN;
12278                 tp->link_config.duplex = DUPLEX_UNKNOWN;
12279         } else {
12280                 tp->link_config.advertising = 0;
12281                 tp->link_config.speed = speed;
12282                 tp->link_config.duplex = cmd->base.duplex;
12283         }
12284
12285         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12286
12287         tg3_warn_mgmt_link_flap(tp);
12288
12289         if (netif_running(dev))
12290                 tg3_setup_phy(tp, true);
12291
12292         tg3_full_unlock(tp);
12293
12294         return 0;
12295 }
12296
12297 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
12298 {
12299         struct tg3 *tp = netdev_priv(dev);
12300
12301         strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
12302         strscpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
12303         strscpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
12304 }
12305
12306 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12307 {
12308         struct tg3 *tp = netdev_priv(dev);
12309
12310         if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
12311                 wol->supported = WAKE_MAGIC;
12312         else
12313                 wol->supported = 0;
12314         wol->wolopts = 0;
12315         if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
12316                 wol->wolopts = WAKE_MAGIC;
12317         memset(&wol->sopass, 0, sizeof(wol->sopass));
12318 }
12319
12320 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12321 {
12322         struct tg3 *tp = netdev_priv(dev);
12323         struct device *dp = &tp->pdev->dev;
12324
12325         if (wol->wolopts & ~WAKE_MAGIC)
12326                 return -EINVAL;
12327         if ((wol->wolopts & WAKE_MAGIC) &&
12328             !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
12329                 return -EINVAL;
12330
12331         device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
12332
12333         if (device_may_wakeup(dp))
12334                 tg3_flag_set(tp, WOL_ENABLE);
12335         else
12336                 tg3_flag_clear(tp, WOL_ENABLE);
12337
12338         return 0;
12339 }
12340
12341 static u32 tg3_get_msglevel(struct net_device *dev)
12342 {
12343         struct tg3 *tp = netdev_priv(dev);
12344         return tp->msg_enable;
12345 }
12346
12347 static void tg3_set_msglevel(struct net_device *dev, u32 value)
12348 {
12349         struct tg3 *tp = netdev_priv(dev);
12350         tp->msg_enable = value;
12351 }
12352
12353 static int tg3_nway_reset(struct net_device *dev)
12354 {
12355         struct tg3 *tp = netdev_priv(dev);
12356         int r;
12357
12358         if (!netif_running(dev))
12359                 return -EAGAIN;
12360
12361         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12362                 return -EINVAL;
12363
12364         tg3_warn_mgmt_link_flap(tp);
12365
12366         if (tg3_flag(tp, USE_PHYLIB)) {
12367                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12368                         return -EAGAIN;
12369                 r = phy_start_aneg(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr));
12370         } else {
12371                 u32 bmcr;
12372
12373                 spin_lock_bh(&tp->lock);
12374                 r = -EINVAL;
12375                 tg3_readphy(tp, MII_BMCR, &bmcr);
12376                 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
12377                     ((bmcr & BMCR_ANENABLE) ||
12378                      (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
12379                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
12380                                                    BMCR_ANENABLE);
12381                         r = 0;
12382                 }
12383                 spin_unlock_bh(&tp->lock);
12384         }
12385
12386         return r;
12387 }
12388
12389 static void tg3_get_ringparam(struct net_device *dev,
12390                               struct ethtool_ringparam *ering,
12391                               struct kernel_ethtool_ringparam *kernel_ering,
12392                               struct netlink_ext_ack *extack)
12393 {
12394         struct tg3 *tp = netdev_priv(dev);
12395
12396         ering->rx_max_pending = tp->rx_std_ring_mask;
12397         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12398                 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
12399         else
12400                 ering->rx_jumbo_max_pending = 0;
12401
12402         ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
12403
12404         ering->rx_pending = tp->rx_pending;
12405         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12406                 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
12407         else
12408                 ering->rx_jumbo_pending = 0;
12409
12410         ering->tx_pending = tp->napi[0].tx_pending;
12411 }
12412
12413 static int tg3_set_ringparam(struct net_device *dev,
12414                              struct ethtool_ringparam *ering,
12415                              struct kernel_ethtool_ringparam *kernel_ering,
12416                              struct netlink_ext_ack *extack)
12417 {
12418         struct tg3 *tp = netdev_priv(dev);
12419         int i, irq_sync = 0, err = 0;
12420         bool reset_phy = false;
12421
12422         if ((ering->rx_pending > tp->rx_std_ring_mask) ||
12423             (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
12424             (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
12425             (ering->tx_pending <= MAX_SKB_FRAGS) ||
12426             (tg3_flag(tp, TSO_BUG) &&
12427              (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
12428                 return -EINVAL;
12429
12430         if (netif_running(dev)) {
12431                 tg3_phy_stop(tp);
12432                 tg3_netif_stop(tp);
12433                 irq_sync = 1;
12434         }
12435
12436         tg3_full_lock(tp, irq_sync);
12437
12438         tp->rx_pending = ering->rx_pending;
12439
12440         if (tg3_flag(tp, MAX_RXPEND_64) &&
12441             tp->rx_pending > 63)
12442                 tp->rx_pending = 63;
12443
12444         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12445                 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
12446
12447         for (i = 0; i < tp->irq_max; i++)
12448                 tp->napi[i].tx_pending = ering->tx_pending;
12449
12450         if (netif_running(dev)) {
12451                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12452                 /* Reset PHY to avoid PHY lock up */
12453                 if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12454                     tg3_asic_rev(tp) == ASIC_REV_5719 ||
12455                     tg3_asic_rev(tp) == ASIC_REV_5720)
12456                         reset_phy = true;
12457
12458                 err = tg3_restart_hw(tp, reset_phy);
12459                 if (!err)
12460                         tg3_netif_start(tp);
12461         }
12462
12463         tg3_full_unlock(tp);
12464
12465         if (irq_sync && !err)
12466                 tg3_phy_start(tp);
12467
12468         return err;
12469 }
12470
12471 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12472 {
12473         struct tg3 *tp = netdev_priv(dev);
12474
12475         epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
12476
12477         if (tp->link_config.flowctrl & FLOW_CTRL_RX)
12478                 epause->rx_pause = 1;
12479         else
12480                 epause->rx_pause = 0;
12481
12482         if (tp->link_config.flowctrl & FLOW_CTRL_TX)
12483                 epause->tx_pause = 1;
12484         else
12485                 epause->tx_pause = 0;
12486 }
12487
12488 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12489 {
12490         struct tg3 *tp = netdev_priv(dev);
12491         int err = 0;
12492         bool reset_phy = false;
12493
12494         if (tp->link_config.autoneg == AUTONEG_ENABLE)
12495                 tg3_warn_mgmt_link_flap(tp);
12496
12497         if (tg3_flag(tp, USE_PHYLIB)) {
12498                 struct phy_device *phydev;
12499
12500                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
12501
12502                 if (!phy_validate_pause(phydev, epause))
12503                         return -EINVAL;
12504
12505                 tp->link_config.flowctrl = 0;
12506                 phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause);
12507                 if (epause->rx_pause) {
12508                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12509
12510                         if (epause->tx_pause) {
12511                                 tp->link_config.flowctrl |= FLOW_CTRL_TX;
12512                         }
12513                 } else if (epause->tx_pause) {
12514                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12515                 }
12516
12517                 if (epause->autoneg)
12518                         tg3_flag_set(tp, PAUSE_AUTONEG);
12519                 else
12520                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12521
12522                 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
12523                         if (phydev->autoneg) {
12524                                 /* phy_set_asym_pause() will
12525                                  * renegotiate the link to inform our
12526                                  * link partner of our flow control
12527                                  * settings, even if the flow control
12528                                  * is forced.  Let tg3_adjust_link()
12529                                  * do the final flow control setup.
12530                                  */
12531                                 return 0;
12532                         }
12533
12534                         if (!epause->autoneg)
12535                                 tg3_setup_flow_control(tp, 0, 0);
12536                 }
12537         } else {
12538                 int irq_sync = 0;
12539
12540                 if (netif_running(dev)) {
12541                         tg3_netif_stop(tp);
12542                         irq_sync = 1;
12543                 }
12544
12545                 tg3_full_lock(tp, irq_sync);
12546
12547                 if (epause->autoneg)
12548                         tg3_flag_set(tp, PAUSE_AUTONEG);
12549                 else
12550                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12551                 if (epause->rx_pause)
12552                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12553                 else
12554                         tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
12555                 if (epause->tx_pause)
12556                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12557                 else
12558                         tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
12559
12560                 if (netif_running(dev)) {
12561                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12562                         /* Reset PHY to avoid PHY lock up */
12563                         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
12564                             tg3_asic_rev(tp) == ASIC_REV_5719 ||
12565                             tg3_asic_rev(tp) == ASIC_REV_5720)
12566                                 reset_phy = true;
12567
12568                         err = tg3_restart_hw(tp, reset_phy);
12569                         if (!err)
12570                                 tg3_netif_start(tp);
12571                 }
12572
12573                 tg3_full_unlock(tp);
12574         }
12575
12576         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12577
12578         return err;
12579 }
12580
12581 static int tg3_get_sset_count(struct net_device *dev, int sset)
12582 {
12583         switch (sset) {
12584         case ETH_SS_TEST:
12585                 return TG3_NUM_TEST;
12586         case ETH_SS_STATS:
12587                 return TG3_NUM_STATS;
12588         default:
12589                 return -EOPNOTSUPP;
12590         }
12591 }
12592
12593 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
12594                          u32 *rules __always_unused)
12595 {
12596         struct tg3 *tp = netdev_priv(dev);
12597
12598         if (!tg3_flag(tp, SUPPORT_MSIX))
12599                 return -EOPNOTSUPP;
12600
12601         switch (info->cmd) {
12602         case ETHTOOL_GRXRINGS:
12603                 if (netif_running(tp->dev))
12604                         info->data = tp->rxq_cnt;
12605                 else {
12606                         info->data = num_online_cpus();
12607                         if (info->data > TG3_RSS_MAX_NUM_QS)
12608                                 info->data = TG3_RSS_MAX_NUM_QS;
12609                 }
12610
12611                 return 0;
12612
12613         default:
12614                 return -EOPNOTSUPP;
12615         }
12616 }
12617
12618 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
12619 {
12620         u32 size = 0;
12621         struct tg3 *tp = netdev_priv(dev);
12622
12623         if (tg3_flag(tp, SUPPORT_MSIX))
12624                 size = TG3_RSS_INDIR_TBL_SIZE;
12625
12626         return size;
12627 }
12628
12629 static int tg3_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc)
12630 {
12631         struct tg3 *tp = netdev_priv(dev);
12632         int i;
12633
12634         if (hfunc)
12635                 *hfunc = ETH_RSS_HASH_TOP;
12636         if (!indir)
12637                 return 0;
12638
12639         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12640                 indir[i] = tp->rss_ind_tbl[i];
12641
12642         return 0;
12643 }
12644
12645 static int tg3_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key,
12646                         const u8 hfunc)
12647 {
12648         struct tg3 *tp = netdev_priv(dev);
12649         size_t i;
12650
12651         /* We require at least one supported parameter to be changed and no
12652          * change in any of the unsupported parameters
12653          */
12654         if (key ||
12655             (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
12656                 return -EOPNOTSUPP;
12657
12658         if (!indir)
12659                 return 0;
12660
12661         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12662                 tp->rss_ind_tbl[i] = indir[i];
12663
12664         if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
12665                 return 0;
12666
12667         /* It is legal to write the indirection
12668          * table while the device is running.
12669          */
12670         tg3_full_lock(tp, 0);
12671         tg3_rss_write_indir_tbl(tp);
12672         tg3_full_unlock(tp);
12673
12674         return 0;
12675 }
12676
12677 static void tg3_get_channels(struct net_device *dev,
12678                              struct ethtool_channels *channel)
12679 {
12680         struct tg3 *tp = netdev_priv(dev);
12681         u32 deflt_qs = netif_get_num_default_rss_queues();
12682
12683         channel->max_rx = tp->rxq_max;
12684         channel->max_tx = tp->txq_max;
12685
12686         if (netif_running(dev)) {
12687                 channel->rx_count = tp->rxq_cnt;
12688                 channel->tx_count = tp->txq_cnt;
12689         } else {
12690                 if (tp->rxq_req)
12691                         channel->rx_count = tp->rxq_req;
12692                 else
12693                         channel->rx_count = min(deflt_qs, tp->rxq_max);
12694
12695                 if (tp->txq_req)
12696                         channel->tx_count = tp->txq_req;
12697                 else
12698                         channel->tx_count = min(deflt_qs, tp->txq_max);
12699         }
12700 }
12701
12702 static int tg3_set_channels(struct net_device *dev,
12703                             struct ethtool_channels *channel)
12704 {
12705         struct tg3 *tp = netdev_priv(dev);
12706
12707         if (!tg3_flag(tp, SUPPORT_MSIX))
12708                 return -EOPNOTSUPP;
12709
12710         if (channel->rx_count > tp->rxq_max ||
12711             channel->tx_count > tp->txq_max)
12712                 return -EINVAL;
12713
12714         tp->rxq_req = channel->rx_count;
12715         tp->txq_req = channel->tx_count;
12716
12717         if (!netif_running(dev))
12718                 return 0;
12719
12720         tg3_stop(tp);
12721
12722         tg3_carrier_off(tp);
12723
12724         tg3_start(tp, true, false, false);
12725
12726         return 0;
12727 }
12728
12729 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
12730 {
12731         switch (stringset) {
12732         case ETH_SS_STATS:
12733                 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
12734                 break;
12735         case ETH_SS_TEST:
12736                 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
12737                 break;
12738         default:
12739                 WARN_ON(1);     /* we need a WARN() */
12740                 break;
12741         }
12742 }
12743
12744 static int tg3_set_phys_id(struct net_device *dev,
12745                             enum ethtool_phys_id_state state)
12746 {
12747         struct tg3 *tp = netdev_priv(dev);
12748
12749         switch (state) {
12750         case ETHTOOL_ID_ACTIVE:
12751                 return 1;       /* cycle on/off once per second */
12752
12753         case ETHTOOL_ID_ON:
12754                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12755                      LED_CTRL_1000MBPS_ON |
12756                      LED_CTRL_100MBPS_ON |
12757                      LED_CTRL_10MBPS_ON |
12758                      LED_CTRL_TRAFFIC_OVERRIDE |
12759                      LED_CTRL_TRAFFIC_BLINK |
12760                      LED_CTRL_TRAFFIC_LED);
12761                 break;
12762
12763         case ETHTOOL_ID_OFF:
12764                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12765                      LED_CTRL_TRAFFIC_OVERRIDE);
12766                 break;
12767
12768         case ETHTOOL_ID_INACTIVE:
12769                 tw32(MAC_LED_CTRL, tp->led_ctrl);
12770                 break;
12771         }
12772
12773         return 0;
12774 }
12775
12776 static void tg3_get_ethtool_stats(struct net_device *dev,
12777                                    struct ethtool_stats *estats, u64 *tmp_stats)
12778 {
12779         struct tg3 *tp = netdev_priv(dev);
12780
12781         if (tp->hw_stats)
12782                 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
12783         else
12784                 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
12785 }
12786
12787 static __be32 *tg3_vpd_readblock(struct tg3 *tp, unsigned int *vpdlen)
12788 {
12789         int i;
12790         __be32 *buf;
12791         u32 offset = 0, len = 0;
12792         u32 magic, val;
12793
12794         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
12795                 return NULL;
12796
12797         if (magic == TG3_EEPROM_MAGIC) {
12798                 for (offset = TG3_NVM_DIR_START;
12799                      offset < TG3_NVM_DIR_END;
12800                      offset += TG3_NVM_DIRENT_SIZE) {
12801                         if (tg3_nvram_read(tp, offset, &val))
12802                                 return NULL;
12803
12804                         if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
12805                             TG3_NVM_DIRTYPE_EXTVPD)
12806                                 break;
12807                 }
12808
12809                 if (offset != TG3_NVM_DIR_END) {
12810                         len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
12811                         if (tg3_nvram_read(tp, offset + 4, &offset))
12812                                 return NULL;
12813
12814                         offset = tg3_nvram_logical_addr(tp, offset);
12815                 }
12816
12817                 if (!offset || !len) {
12818                         offset = TG3_NVM_VPD_OFF;
12819                         len = TG3_NVM_VPD_LEN;
12820                 }
12821
12822                 buf = kmalloc(len, GFP_KERNEL);
12823                 if (!buf)
12824                         return NULL;
12825
12826                 for (i = 0; i < len; i += 4) {
12827                         /* The data is in little-endian format in NVRAM.
12828                          * Use the big-endian read routines to preserve
12829                          * the byte order as it exists in NVRAM.
12830                          */
12831                         if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
12832                                 goto error;
12833                 }
12834                 *vpdlen = len;
12835         } else {
12836                 buf = pci_vpd_alloc(tp->pdev, vpdlen);
12837                 if (IS_ERR(buf))
12838                         return NULL;
12839         }
12840
12841         return buf;
12842
12843 error:
12844         kfree(buf);
12845         return NULL;
12846 }
12847
12848 #define NVRAM_TEST_SIZE 0x100
12849 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE   0x14
12850 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE   0x18
12851 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE   0x1c
12852 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE   0x20
12853 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE   0x24
12854 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE   0x50
12855 #define NVRAM_SELFBOOT_HW_SIZE 0x20
12856 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
12857
12858 static int tg3_test_nvram(struct tg3 *tp)
12859 {
12860         u32 csum, magic;
12861         __be32 *buf;
12862         int i, j, k, err = 0, size;
12863         unsigned int len;
12864
12865         if (tg3_flag(tp, NO_NVRAM))
12866                 return 0;
12867
12868         if (tg3_nvram_read(tp, 0, &magic) != 0)
12869                 return -EIO;
12870
12871         if (magic == TG3_EEPROM_MAGIC)
12872                 size = NVRAM_TEST_SIZE;
12873         else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
12874                 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
12875                     TG3_EEPROM_SB_FORMAT_1) {
12876                         switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
12877                         case TG3_EEPROM_SB_REVISION_0:
12878                                 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
12879                                 break;
12880                         case TG3_EEPROM_SB_REVISION_2:
12881                                 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
12882                                 break;
12883                         case TG3_EEPROM_SB_REVISION_3:
12884                                 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
12885                                 break;
12886                         case TG3_EEPROM_SB_REVISION_4:
12887                                 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
12888                                 break;
12889                         case TG3_EEPROM_SB_REVISION_5:
12890                                 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
12891                                 break;
12892                         case TG3_EEPROM_SB_REVISION_6:
12893                                 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
12894                                 break;
12895                         default:
12896                                 return -EIO;
12897                         }
12898                 } else
12899                         return 0;
12900         } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
12901                 size = NVRAM_SELFBOOT_HW_SIZE;
12902         else
12903                 return -EIO;
12904
12905         buf = kmalloc(size, GFP_KERNEL);
12906         if (buf == NULL)
12907                 return -ENOMEM;
12908
12909         err = -EIO;
12910         for (i = 0, j = 0; i < size; i += 4, j++) {
12911                 err = tg3_nvram_read_be32(tp, i, &buf[j]);
12912                 if (err)
12913                         break;
12914         }
12915         if (i < size)
12916                 goto out;
12917
12918         /* Selfboot format */
12919         magic = be32_to_cpu(buf[0]);
12920         if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
12921             TG3_EEPROM_MAGIC_FW) {
12922                 u8 *buf8 = (u8 *) buf, csum8 = 0;
12923
12924                 if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
12925                     TG3_EEPROM_SB_REVISION_2) {
12926                         /* For rev 2, the csum doesn't include the MBA. */
12927                         for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
12928                                 csum8 += buf8[i];
12929                         for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
12930                                 csum8 += buf8[i];
12931                 } else {
12932                         for (i = 0; i < size; i++)
12933                                 csum8 += buf8[i];
12934                 }
12935
12936                 if (csum8 == 0) {
12937                         err = 0;
12938                         goto out;
12939                 }
12940
12941                 err = -EIO;
12942                 goto out;
12943         }
12944
12945         if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
12946             TG3_EEPROM_MAGIC_HW) {
12947                 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
12948                 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
12949                 u8 *buf8 = (u8 *) buf;
12950
12951                 /* Separate the parity bits and the data bytes.  */
12952                 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
12953                         if ((i == 0) || (i == 8)) {
12954                                 int l;
12955                                 u8 msk;
12956
12957                                 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
12958                                         parity[k++] = buf8[i] & msk;
12959                                 i++;
12960                         } else if (i == 16) {
12961                                 int l;
12962                                 u8 msk;
12963
12964                                 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
12965                                         parity[k++] = buf8[i] & msk;
12966                                 i++;
12967
12968                                 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
12969                                         parity[k++] = buf8[i] & msk;
12970                                 i++;
12971                         }
12972                         data[j++] = buf8[i];
12973                 }
12974
12975                 err = -EIO;
12976                 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
12977                         u8 hw8 = hweight8(data[i]);
12978
12979                         if ((hw8 & 0x1) && parity[i])
12980                                 goto out;
12981                         else if (!(hw8 & 0x1) && !parity[i])
12982                                 goto out;
12983                 }
12984                 err = 0;
12985                 goto out;
12986         }
12987
12988         err = -EIO;
12989
12990         /* Bootstrap checksum at offset 0x10 */
12991         csum = calc_crc((unsigned char *) buf, 0x10);
12992         if (csum != le32_to_cpu(buf[0x10/4]))
12993                 goto out;
12994
12995         /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
12996         csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
12997         if (csum != le32_to_cpu(buf[0xfc/4]))
12998                 goto out;
12999
13000         kfree(buf);
13001
13002         buf = tg3_vpd_readblock(tp, &len);
13003         if (!buf)
13004                 return -ENOMEM;
13005
13006         err = pci_vpd_check_csum(buf, len);
13007         /* go on if no checksum found */
13008         if (err == 1)
13009                 err = 0;
13010 out:
13011         kfree(buf);
13012         return err;
13013 }
13014
13015 #define TG3_SERDES_TIMEOUT_SEC  2
13016 #define TG3_COPPER_TIMEOUT_SEC  6
13017
13018 static int tg3_test_link(struct tg3 *tp)
13019 {
13020         int i, max;
13021
13022         if (!netif_running(tp->dev))
13023                 return -ENODEV;
13024
13025         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
13026                 max = TG3_SERDES_TIMEOUT_SEC;
13027         else
13028                 max = TG3_COPPER_TIMEOUT_SEC;
13029
13030         for (i = 0; i < max; i++) {
13031                 if (tp->link_up)
13032                         return 0;
13033
13034                 if (msleep_interruptible(1000))
13035                         break;
13036         }
13037
13038         return -EIO;
13039 }
13040
13041 /* Only test the commonly used registers */
13042 static int tg3_test_registers(struct tg3 *tp)
13043 {
13044         int i, is_5705, is_5750;
13045         u32 offset, read_mask, write_mask, val, save_val, read_val;
13046         static struct {
13047                 u16 offset;
13048                 u16 flags;
13049 #define TG3_FL_5705     0x1
13050 #define TG3_FL_NOT_5705 0x2
13051 #define TG3_FL_NOT_5788 0x4
13052 #define TG3_FL_NOT_5750 0x8
13053                 u32 read_mask;
13054                 u32 write_mask;
13055         } reg_tbl[] = {
13056                 /* MAC Control Registers */
13057                 { MAC_MODE, TG3_FL_NOT_5705,
13058                         0x00000000, 0x00ef6f8c },
13059                 { MAC_MODE, TG3_FL_5705,
13060                         0x00000000, 0x01ef6b8c },
13061                 { MAC_STATUS, TG3_FL_NOT_5705,
13062                         0x03800107, 0x00000000 },
13063                 { MAC_STATUS, TG3_FL_5705,
13064                         0x03800100, 0x00000000 },
13065                 { MAC_ADDR_0_HIGH, 0x0000,
13066                         0x00000000, 0x0000ffff },
13067                 { MAC_ADDR_0_LOW, 0x0000,
13068                         0x00000000, 0xffffffff },
13069                 { MAC_RX_MTU_SIZE, 0x0000,
13070                         0x00000000, 0x0000ffff },
13071                 { MAC_TX_MODE, 0x0000,
13072                         0x00000000, 0x00000070 },
13073                 { MAC_TX_LENGTHS, 0x0000,
13074                         0x00000000, 0x00003fff },
13075                 { MAC_RX_MODE, TG3_FL_NOT_5705,
13076                         0x00000000, 0x000007fc },
13077                 { MAC_RX_MODE, TG3_FL_5705,
13078                         0x00000000, 0x000007dc },
13079                 { MAC_HASH_REG_0, 0x0000,
13080                         0x00000000, 0xffffffff },
13081                 { MAC_HASH_REG_1, 0x0000,
13082                         0x00000000, 0xffffffff },
13083                 { MAC_HASH_REG_2, 0x0000,
13084                         0x00000000, 0xffffffff },
13085                 { MAC_HASH_REG_3, 0x0000,
13086                         0x00000000, 0xffffffff },
13087
13088                 /* Receive Data and Receive BD Initiator Control Registers. */
13089                 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
13090                         0x00000000, 0xffffffff },
13091                 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
13092                         0x00000000, 0xffffffff },
13093                 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
13094                         0x00000000, 0x00000003 },
13095                 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
13096                         0x00000000, 0xffffffff },
13097                 { RCVDBDI_STD_BD+0, 0x0000,
13098                         0x00000000, 0xffffffff },
13099                 { RCVDBDI_STD_BD+4, 0x0000,
13100                         0x00000000, 0xffffffff },
13101                 { RCVDBDI_STD_BD+8, 0x0000,
13102                         0x00000000, 0xffff0002 },
13103                 { RCVDBDI_STD_BD+0xc, 0x0000,
13104                         0x00000000, 0xffffffff },
13105
13106                 /* Receive BD Initiator Control Registers. */
13107                 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
13108                         0x00000000, 0xffffffff },
13109                 { RCVBDI_STD_THRESH, TG3_FL_5705,
13110                         0x00000000, 0x000003ff },
13111                 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
13112                         0x00000000, 0xffffffff },
13113
13114                 /* Host Coalescing Control Registers. */
13115                 { HOSTCC_MODE, TG3_FL_NOT_5705,
13116                         0x00000000, 0x00000004 },
13117                 { HOSTCC_MODE, TG3_FL_5705,
13118                         0x00000000, 0x000000f6 },
13119                 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
13120                         0x00000000, 0xffffffff },
13121                 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
13122                         0x00000000, 0x000003ff },
13123                 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
13124                         0x00000000, 0xffffffff },
13125                 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
13126                         0x00000000, 0x000003ff },
13127                 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
13128                         0x00000000, 0xffffffff },
13129                 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13130                         0x00000000, 0x000000ff },
13131                 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
13132                         0x00000000, 0xffffffff },
13133                 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
13134                         0x00000000, 0x000000ff },
13135                 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
13136                         0x00000000, 0xffffffff },
13137                 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
13138                         0x00000000, 0xffffffff },
13139                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13140                         0x00000000, 0xffffffff },
13141                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13142                         0x00000000, 0x000000ff },
13143                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
13144                         0x00000000, 0xffffffff },
13145                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
13146                         0x00000000, 0x000000ff },
13147                 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
13148                         0x00000000, 0xffffffff },
13149                 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
13150                         0x00000000, 0xffffffff },
13151                 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
13152                         0x00000000, 0xffffffff },
13153                 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
13154                         0x00000000, 0xffffffff },
13155                 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
13156                         0x00000000, 0xffffffff },
13157                 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
13158                         0xffffffff, 0x00000000 },
13159                 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
13160                         0xffffffff, 0x00000000 },
13161
13162                 /* Buffer Manager Control Registers. */
13163                 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
13164                         0x00000000, 0x007fff80 },
13165                 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
13166                         0x00000000, 0x007fffff },
13167                 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
13168                         0x00000000, 0x0000003f },
13169                 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
13170                         0x00000000, 0x000001ff },
13171                 { BUFMGR_MB_HIGH_WATER, 0x0000,
13172                         0x00000000, 0x000001ff },
13173                 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
13174                         0xffffffff, 0x00000000 },
13175                 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
13176                         0xffffffff, 0x00000000 },
13177
13178                 /* Mailbox Registers */
13179                 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
13180                         0x00000000, 0x000001ff },
13181                 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
13182                         0x00000000, 0x000001ff },
13183                 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
13184                         0x00000000, 0x000007ff },
13185                 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
13186                         0x00000000, 0x000001ff },
13187
13188                 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
13189         };
13190
13191         is_5705 = is_5750 = 0;
13192         if (tg3_flag(tp, 5705_PLUS)) {
13193                 is_5705 = 1;
13194                 if (tg3_flag(tp, 5750_PLUS))
13195                         is_5750 = 1;
13196         }
13197
13198         for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
13199                 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
13200                         continue;
13201
13202                 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
13203                         continue;
13204
13205                 if (tg3_flag(tp, IS_5788) &&
13206                     (reg_tbl[i].flags & TG3_FL_NOT_5788))
13207                         continue;
13208
13209                 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
13210                         continue;
13211
13212                 offset = (u32) reg_tbl[i].offset;
13213                 read_mask = reg_tbl[i].read_mask;
13214                 write_mask = reg_tbl[i].write_mask;
13215
13216                 /* Save the original register content */
13217                 save_val = tr32(offset);
13218
13219                 /* Determine the read-only value. */
13220                 read_val = save_val & read_mask;
13221
13222                 /* Write zero to the register, then make sure the read-only bits
13223                  * are not changed and the read/write bits are all zeros.
13224                  */
13225                 tw32(offset, 0);
13226
13227                 val = tr32(offset);
13228
13229                 /* Test the read-only and read/write bits. */
13230                 if (((val & read_mask) != read_val) || (val & write_mask))
13231                         goto out;
13232
13233                 /* Write ones to all the bits defined by RdMask and WrMask, then
13234                  * make sure the read-only bits are not changed and the
13235                  * read/write bits are all ones.
13236                  */
13237                 tw32(offset, read_mask | write_mask);
13238
13239                 val = tr32(offset);
13240
13241                 /* Test the read-only bits. */
13242                 if ((val & read_mask) != read_val)
13243                         goto out;
13244
13245                 /* Test the read/write bits. */
13246                 if ((val & write_mask) != write_mask)
13247                         goto out;
13248
13249                 tw32(offset, save_val);
13250         }
13251
13252         return 0;
13253
13254 out:
13255         if (netif_msg_hw(tp))
13256                 netdev_err(tp->dev,
13257                            "Register test failed at offset %x\n", offset);
13258         tw32(offset, save_val);
13259         return -EIO;
13260 }
13261
13262 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
13263 {
13264         static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
13265         int i;
13266         u32 j;
13267
13268         for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
13269                 for (j = 0; j < len; j += 4) {
13270                         u32 val;
13271
13272                         tg3_write_mem(tp, offset + j, test_pattern[i]);
13273                         tg3_read_mem(tp, offset + j, &val);
13274                         if (val != test_pattern[i])
13275                                 return -EIO;
13276                 }
13277         }
13278         return 0;
13279 }
13280
13281 static int tg3_test_memory(struct tg3 *tp)
13282 {
13283         static struct mem_entry {
13284                 u32 offset;
13285                 u32 len;
13286         } mem_tbl_570x[] = {
13287                 { 0x00000000, 0x00b50},
13288                 { 0x00002000, 0x1c000},
13289                 { 0xffffffff, 0x00000}
13290         }, mem_tbl_5705[] = {
13291                 { 0x00000100, 0x0000c},
13292                 { 0x00000200, 0x00008},
13293                 { 0x00004000, 0x00800},
13294                 { 0x00006000, 0x01000},
13295                 { 0x00008000, 0x02000},
13296                 { 0x00010000, 0x0e000},
13297                 { 0xffffffff, 0x00000}
13298         }, mem_tbl_5755[] = {
13299                 { 0x00000200, 0x00008},
13300                 { 0x00004000, 0x00800},
13301                 { 0x00006000, 0x00800},
13302                 { 0x00008000, 0x02000},
13303                 { 0x00010000, 0x0c000},
13304                 { 0xffffffff, 0x00000}
13305         }, mem_tbl_5906[] = {
13306                 { 0x00000200, 0x00008},
13307                 { 0x00004000, 0x00400},
13308                 { 0x00006000, 0x00400},
13309                 { 0x00008000, 0x01000},
13310                 { 0x00010000, 0x01000},
13311                 { 0xffffffff, 0x00000}
13312         }, mem_tbl_5717[] = {
13313                 { 0x00000200, 0x00008},
13314                 { 0x00010000, 0x0a000},
13315                 { 0x00020000, 0x13c00},
13316                 { 0xffffffff, 0x00000}
13317         }, mem_tbl_57765[] = {
13318                 { 0x00000200, 0x00008},
13319                 { 0x00004000, 0x00800},
13320                 { 0x00006000, 0x09800},
13321                 { 0x00010000, 0x0a000},
13322                 { 0xffffffff, 0x00000}
13323         };
13324         struct mem_entry *mem_tbl;
13325         int err = 0;
13326         int i;
13327
13328         if (tg3_flag(tp, 5717_PLUS))
13329                 mem_tbl = mem_tbl_5717;
13330         else if (tg3_flag(tp, 57765_CLASS) ||
13331                  tg3_asic_rev(tp) == ASIC_REV_5762)
13332                 mem_tbl = mem_tbl_57765;
13333         else if (tg3_flag(tp, 5755_PLUS))
13334                 mem_tbl = mem_tbl_5755;
13335         else if (tg3_asic_rev(tp) == ASIC_REV_5906)
13336                 mem_tbl = mem_tbl_5906;
13337         else if (tg3_flag(tp, 5705_PLUS))
13338                 mem_tbl = mem_tbl_5705;
13339         else
13340                 mem_tbl = mem_tbl_570x;
13341
13342         for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
13343                 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
13344                 if (err)
13345                         break;
13346         }
13347
13348         return err;
13349 }
13350
13351 #define TG3_TSO_MSS             500
13352
13353 #define TG3_TSO_IP_HDR_LEN      20
13354 #define TG3_TSO_TCP_HDR_LEN     20
13355 #define TG3_TSO_TCP_OPT_LEN     12
13356
13357 static const u8 tg3_tso_header[] = {
13358 0x08, 0x00,
13359 0x45, 0x00, 0x00, 0x00,
13360 0x00, 0x00, 0x40, 0x00,
13361 0x40, 0x06, 0x00, 0x00,
13362 0x0a, 0x00, 0x00, 0x01,
13363 0x0a, 0x00, 0x00, 0x02,
13364 0x0d, 0x00, 0xe0, 0x00,
13365 0x00, 0x00, 0x01, 0x00,
13366 0x00, 0x00, 0x02, 0x00,
13367 0x80, 0x10, 0x10, 0x00,
13368 0x14, 0x09, 0x00, 0x00,
13369 0x01, 0x01, 0x08, 0x0a,
13370 0x11, 0x11, 0x11, 0x11,
13371 0x11, 0x11, 0x11, 0x11,
13372 };
13373
13374 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
13375 {
13376         u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
13377         u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
13378         u32 budget;
13379         struct sk_buff *skb;
13380         u8 *tx_data, *rx_data;
13381         dma_addr_t map;
13382         int num_pkts, tx_len, rx_len, i, err;
13383         struct tg3_rx_buffer_desc *desc;
13384         struct tg3_napi *tnapi, *rnapi;
13385         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
13386
13387         tnapi = &tp->napi[0];
13388         rnapi = &tp->napi[0];
13389         if (tp->irq_cnt > 1) {
13390                 if (tg3_flag(tp, ENABLE_RSS))
13391                         rnapi = &tp->napi[1];
13392                 if (tg3_flag(tp, ENABLE_TSS))
13393                         tnapi = &tp->napi[1];
13394         }
13395         coal_now = tnapi->coal_now | rnapi->coal_now;
13396
13397         err = -EIO;
13398
13399         tx_len = pktsz;
13400         skb = netdev_alloc_skb(tp->dev, tx_len);
13401         if (!skb)
13402                 return -ENOMEM;
13403
13404         tx_data = skb_put(skb, tx_len);
13405         memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN);
13406         memset(tx_data + ETH_ALEN, 0x0, 8);
13407
13408         tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
13409
13410         if (tso_loopback) {
13411                 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
13412
13413                 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
13414                               TG3_TSO_TCP_OPT_LEN;
13415
13416                 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
13417                        sizeof(tg3_tso_header));
13418                 mss = TG3_TSO_MSS;
13419
13420                 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
13421                 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
13422
13423                 /* Set the total length field in the IP header */
13424                 iph->tot_len = htons((u16)(mss + hdr_len));
13425
13426                 base_flags = (TXD_FLAG_CPU_PRE_DMA |
13427                               TXD_FLAG_CPU_POST_DMA);
13428
13429                 if (tg3_flag(tp, HW_TSO_1) ||
13430                     tg3_flag(tp, HW_TSO_2) ||
13431                     tg3_flag(tp, HW_TSO_3)) {
13432                         struct tcphdr *th;
13433                         val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
13434                         th = (struct tcphdr *)&tx_data[val];
13435                         th->check = 0;
13436                 } else
13437                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
13438
13439                 if (tg3_flag(tp, HW_TSO_3)) {
13440                         mss |= (hdr_len & 0xc) << 12;
13441                         if (hdr_len & 0x10)
13442                                 base_flags |= 0x00000010;
13443                         base_flags |= (hdr_len & 0x3e0) << 5;
13444                 } else if (tg3_flag(tp, HW_TSO_2))
13445                         mss |= hdr_len << 9;
13446                 else if (tg3_flag(tp, HW_TSO_1) ||
13447                          tg3_asic_rev(tp) == ASIC_REV_5705) {
13448                         mss |= (TG3_TSO_TCP_OPT_LEN << 9);
13449                 } else {
13450                         base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
13451                 }
13452
13453                 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
13454         } else {
13455                 num_pkts = 1;
13456                 data_off = ETH_HLEN;
13457
13458                 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
13459                     tx_len > VLAN_ETH_FRAME_LEN)
13460                         base_flags |= TXD_FLAG_JMB_PKT;
13461         }
13462
13463         for (i = data_off; i < tx_len; i++)
13464                 tx_data[i] = (u8) (i & 0xff);
13465
13466         map = dma_map_single(&tp->pdev->dev, skb->data, tx_len, DMA_TO_DEVICE);
13467         if (dma_mapping_error(&tp->pdev->dev, map)) {
13468                 dev_kfree_skb(skb);
13469                 return -EIO;
13470         }
13471
13472         val = tnapi->tx_prod;
13473         tnapi->tx_buffers[val].skb = skb;
13474         dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
13475
13476         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13477                rnapi->coal_now);
13478
13479         udelay(10);
13480
13481         rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
13482
13483         budget = tg3_tx_avail(tnapi);
13484         if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
13485                             base_flags | TXD_FLAG_END, mss, 0)) {
13486                 tnapi->tx_buffers[val].skb = NULL;
13487                 dev_kfree_skb(skb);
13488                 return -EIO;
13489         }
13490
13491         tnapi->tx_prod++;
13492
13493         /* Sync BD data before updating mailbox */
13494         wmb();
13495
13496         tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
13497         tr32_mailbox(tnapi->prodmbox);
13498
13499         udelay(10);
13500
13501         /* 350 usec to allow enough time on some 10/100 Mbps devices.  */
13502         for (i = 0; i < 35; i++) {
13503                 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13504                        coal_now);
13505
13506                 udelay(10);
13507
13508                 tx_idx = tnapi->hw_status->idx[0].tx_consumer;
13509                 rx_idx = rnapi->hw_status->idx[0].rx_producer;
13510                 if ((tx_idx == tnapi->tx_prod) &&
13511                     (rx_idx == (rx_start_idx + num_pkts)))
13512                         break;
13513         }
13514
13515         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
13516         dev_kfree_skb(skb);
13517
13518         if (tx_idx != tnapi->tx_prod)
13519                 goto out;
13520
13521         if (rx_idx != rx_start_idx + num_pkts)
13522                 goto out;
13523
13524         val = data_off;
13525         while (rx_idx != rx_start_idx) {
13526                 desc = &rnapi->rx_rcb[rx_start_idx++];
13527                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
13528                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
13529
13530                 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
13531                     (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
13532                         goto out;
13533
13534                 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
13535                          - ETH_FCS_LEN;
13536
13537                 if (!tso_loopback) {
13538                         if (rx_len != tx_len)
13539                                 goto out;
13540
13541                         if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
13542                                 if (opaque_key != RXD_OPAQUE_RING_STD)
13543                                         goto out;
13544                         } else {
13545                                 if (opaque_key != RXD_OPAQUE_RING_JUMBO)
13546                                         goto out;
13547                         }
13548                 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
13549                            (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
13550                             >> RXD_TCPCSUM_SHIFT != 0xffff) {
13551                         goto out;
13552                 }
13553
13554                 if (opaque_key == RXD_OPAQUE_RING_STD) {
13555                         rx_data = tpr->rx_std_buffers[desc_idx].data;
13556                         map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
13557                                              mapping);
13558                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
13559                         rx_data = tpr->rx_jmb_buffers[desc_idx].data;
13560                         map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
13561                                              mapping);
13562                 } else
13563                         goto out;
13564
13565                 dma_sync_single_for_cpu(&tp->pdev->dev, map, rx_len,
13566                                         DMA_FROM_DEVICE);
13567
13568                 rx_data += TG3_RX_OFFSET(tp);
13569                 for (i = data_off; i < rx_len; i++, val++) {
13570                         if (*(rx_data + i) != (u8) (val & 0xff))
13571                                 goto out;
13572                 }
13573         }
13574
13575         err = 0;
13576
13577         /* tg3_free_rings will unmap and free the rx_data */
13578 out:
13579         return err;
13580 }
13581
13582 #define TG3_STD_LOOPBACK_FAILED         1
13583 #define TG3_JMB_LOOPBACK_FAILED         2
13584 #define TG3_TSO_LOOPBACK_FAILED         4
13585 #define TG3_LOOPBACK_FAILED \
13586         (TG3_STD_LOOPBACK_FAILED | \
13587          TG3_JMB_LOOPBACK_FAILED | \
13588          TG3_TSO_LOOPBACK_FAILED)
13589
13590 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
13591 {
13592         int err = -EIO;
13593         u32 eee_cap;
13594         u32 jmb_pkt_sz = 9000;
13595
13596         if (tp->dma_limit)
13597                 jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
13598
13599         eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
13600         tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
13601
13602         if (!netif_running(tp->dev)) {
13603                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13604                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13605                 if (do_extlpbk)
13606                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13607                 goto done;
13608         }
13609
13610         err = tg3_reset_hw(tp, true);
13611         if (err) {
13612                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13613                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13614                 if (do_extlpbk)
13615                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13616                 goto done;
13617         }
13618
13619         if (tg3_flag(tp, ENABLE_RSS)) {
13620                 int i;
13621
13622                 /* Reroute all rx packets to the 1st queue */
13623                 for (i = MAC_RSS_INDIR_TBL_0;
13624                      i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
13625                         tw32(i, 0x0);
13626         }
13627
13628         /* HW errata - mac loopback fails in some cases on 5780.
13629          * Normal traffic and PHY loopback are not affected by
13630          * errata.  Also, the MAC loopback test is deprecated for
13631          * all newer ASIC revisions.
13632          */
13633         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
13634             !tg3_flag(tp, CPMU_PRESENT)) {
13635                 tg3_mac_loopback(tp, true);
13636
13637                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13638                         data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13639
13640                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13641                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13642                         data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13643
13644                 tg3_mac_loopback(tp, false);
13645         }
13646
13647         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
13648             !tg3_flag(tp, USE_PHYLIB)) {
13649                 int i;
13650
13651                 tg3_phy_lpbk_set(tp, 0, false);
13652
13653                 /* Wait for link */
13654                 for (i = 0; i < 100; i++) {
13655                         if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
13656                                 break;
13657                         mdelay(1);
13658                 }
13659
13660                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13661                         data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13662                 if (tg3_flag(tp, TSO_CAPABLE) &&
13663                     tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13664                         data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
13665                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13666                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13667                         data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13668
13669                 if (do_extlpbk) {
13670                         tg3_phy_lpbk_set(tp, 0, true);
13671
13672                         /* All link indications report up, but the hardware
13673                          * isn't really ready for about 20 msec.  Double it
13674                          * to be sure.
13675                          */
13676                         mdelay(40);
13677
13678                         if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13679                                 data[TG3_EXT_LOOPB_TEST] |=
13680                                                         TG3_STD_LOOPBACK_FAILED;
13681                         if (tg3_flag(tp, TSO_CAPABLE) &&
13682                             tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13683                                 data[TG3_EXT_LOOPB_TEST] |=
13684                                                         TG3_TSO_LOOPBACK_FAILED;
13685                         if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13686                             tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13687                                 data[TG3_EXT_LOOPB_TEST] |=
13688                                                         TG3_JMB_LOOPBACK_FAILED;
13689                 }
13690
13691                 /* Re-enable gphy autopowerdown. */
13692                 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
13693                         tg3_phy_toggle_apd(tp, true);
13694         }
13695
13696         err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
13697                data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
13698
13699 done:
13700         tp->phy_flags |= eee_cap;
13701
13702         return err;
13703 }
13704
13705 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
13706                           u64 *data)
13707 {
13708         struct tg3 *tp = netdev_priv(dev);
13709         bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
13710
13711         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
13712                 if (tg3_power_up(tp)) {
13713                         etest->flags |= ETH_TEST_FL_FAILED;
13714                         memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
13715                         return;
13716                 }
13717                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
13718         }
13719
13720         memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
13721
13722         if (tg3_test_nvram(tp) != 0) {
13723                 etest->flags |= ETH_TEST_FL_FAILED;
13724                 data[TG3_NVRAM_TEST] = 1;
13725         }
13726         if (!doextlpbk && tg3_test_link(tp)) {
13727                 etest->flags |= ETH_TEST_FL_FAILED;
13728                 data[TG3_LINK_TEST] = 1;
13729         }
13730         if (etest->flags & ETH_TEST_FL_OFFLINE) {
13731                 int err, err2 = 0, irq_sync = 0;
13732
13733                 if (netif_running(dev)) {
13734                         tg3_phy_stop(tp);
13735                         tg3_netif_stop(tp);
13736                         irq_sync = 1;
13737                 }
13738
13739                 tg3_full_lock(tp, irq_sync);
13740                 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
13741                 err = tg3_nvram_lock(tp);
13742                 tg3_halt_cpu(tp, RX_CPU_BASE);
13743                 if (!tg3_flag(tp, 5705_PLUS))
13744                         tg3_halt_cpu(tp, TX_CPU_BASE);
13745                 if (!err)
13746                         tg3_nvram_unlock(tp);
13747
13748                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
13749                         tg3_phy_reset(tp);
13750
13751                 if (tg3_test_registers(tp) != 0) {
13752                         etest->flags |= ETH_TEST_FL_FAILED;
13753                         data[TG3_REGISTER_TEST] = 1;
13754                 }
13755
13756                 if (tg3_test_memory(tp) != 0) {
13757                         etest->flags |= ETH_TEST_FL_FAILED;
13758                         data[TG3_MEMORY_TEST] = 1;
13759                 }
13760
13761                 if (doextlpbk)
13762                         etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
13763
13764                 if (tg3_test_loopback(tp, data, doextlpbk))
13765                         etest->flags |= ETH_TEST_FL_FAILED;
13766
13767                 tg3_full_unlock(tp);
13768
13769                 if (tg3_test_interrupt(tp) != 0) {
13770                         etest->flags |= ETH_TEST_FL_FAILED;
13771                         data[TG3_INTERRUPT_TEST] = 1;
13772                 }
13773
13774                 tg3_full_lock(tp, 0);
13775
13776                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13777                 if (netif_running(dev)) {
13778                         tg3_flag_set(tp, INIT_COMPLETE);
13779                         err2 = tg3_restart_hw(tp, true);
13780                         if (!err2)
13781                                 tg3_netif_start(tp);
13782                 }
13783
13784                 tg3_full_unlock(tp);
13785
13786                 if (irq_sync && !err2)
13787                         tg3_phy_start(tp);
13788         }
13789         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
13790                 tg3_power_down_prepare(tp);
13791
13792 }
13793
13794 static int tg3_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
13795 {
13796         struct tg3 *tp = netdev_priv(dev);
13797         struct hwtstamp_config stmpconf;
13798
13799         if (!tg3_flag(tp, PTP_CAPABLE))
13800                 return -EOPNOTSUPP;
13801
13802         if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
13803                 return -EFAULT;
13804
13805         if (stmpconf.tx_type != HWTSTAMP_TX_ON &&
13806             stmpconf.tx_type != HWTSTAMP_TX_OFF)
13807                 return -ERANGE;
13808
13809         switch (stmpconf.rx_filter) {
13810         case HWTSTAMP_FILTER_NONE:
13811                 tp->rxptpctl = 0;
13812                 break;
13813         case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
13814                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13815                                TG3_RX_PTP_CTL_ALL_V1_EVENTS;
13816                 break;
13817         case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
13818                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13819                                TG3_RX_PTP_CTL_SYNC_EVNT;
13820                 break;
13821         case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
13822                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13823                                TG3_RX_PTP_CTL_DELAY_REQ;
13824                 break;
13825         case HWTSTAMP_FILTER_PTP_V2_EVENT:
13826                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13827                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13828                 break;
13829         case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
13830                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13831                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13832                 break;
13833         case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
13834                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13835                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13836                 break;
13837         case HWTSTAMP_FILTER_PTP_V2_SYNC:
13838                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13839                                TG3_RX_PTP_CTL_SYNC_EVNT;
13840                 break;
13841         case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
13842                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13843                                TG3_RX_PTP_CTL_SYNC_EVNT;
13844                 break;
13845         case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
13846                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13847                                TG3_RX_PTP_CTL_SYNC_EVNT;
13848                 break;
13849         case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
13850                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13851                                TG3_RX_PTP_CTL_DELAY_REQ;
13852                 break;
13853         case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
13854                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13855                                TG3_RX_PTP_CTL_DELAY_REQ;
13856                 break;
13857         case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
13858                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13859                                TG3_RX_PTP_CTL_DELAY_REQ;
13860                 break;
13861         default:
13862                 return -ERANGE;
13863         }
13864
13865         if (netif_running(dev) && tp->rxptpctl)
13866                 tw32(TG3_RX_PTP_CTL,
13867                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
13868
13869         if (stmpconf.tx_type == HWTSTAMP_TX_ON)
13870                 tg3_flag_set(tp, TX_TSTAMP_EN);
13871         else
13872                 tg3_flag_clear(tp, TX_TSTAMP_EN);
13873
13874         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13875                 -EFAULT : 0;
13876 }
13877
13878 static int tg3_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
13879 {
13880         struct tg3 *tp = netdev_priv(dev);
13881         struct hwtstamp_config stmpconf;
13882
13883         if (!tg3_flag(tp, PTP_CAPABLE))
13884                 return -EOPNOTSUPP;
13885
13886         stmpconf.flags = 0;
13887         stmpconf.tx_type = (tg3_flag(tp, TX_TSTAMP_EN) ?
13888                             HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF);
13889
13890         switch (tp->rxptpctl) {
13891         case 0:
13892                 stmpconf.rx_filter = HWTSTAMP_FILTER_NONE;
13893                 break;
13894         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_ALL_V1_EVENTS:
13895                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
13896                 break;
13897         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13898                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
13899                 break;
13900         case TG3_RX_PTP_CTL_RX_PTP_V1_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13901                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
13902                 break;
13903         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13904                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
13905                 break;
13906         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13907                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
13908                 break;
13909         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_ALL_V2_EVENTS:
13910                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
13911                 break;
13912         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13913                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
13914                 break;
13915         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13916                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_SYNC;
13917                 break;
13918         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_SYNC_EVNT:
13919                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
13920                 break;
13921         case TG3_RX_PTP_CTL_RX_PTP_V2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13922                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
13923                 break;
13924         case TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13925                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ;
13926                 break;
13927         case TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | TG3_RX_PTP_CTL_DELAY_REQ:
13928                 stmpconf.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
13929                 break;
13930         default:
13931                 WARN_ON_ONCE(1);
13932                 return -ERANGE;
13933         }
13934
13935         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13936                 -EFAULT : 0;
13937 }
13938
13939 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
13940 {
13941         struct mii_ioctl_data *data = if_mii(ifr);
13942         struct tg3 *tp = netdev_priv(dev);
13943         int err;
13944
13945         if (tg3_flag(tp, USE_PHYLIB)) {
13946                 struct phy_device *phydev;
13947                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
13948                         return -EAGAIN;
13949                 phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr);
13950                 return phy_mii_ioctl(phydev, ifr, cmd);
13951         }
13952
13953         switch (cmd) {
13954         case SIOCGMIIPHY:
13955                 data->phy_id = tp->phy_addr;
13956
13957                 fallthrough;
13958         case SIOCGMIIREG: {
13959                 u32 mii_regval;
13960
13961                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13962                         break;                  /* We have no PHY */
13963
13964                 if (!netif_running(dev))
13965                         return -EAGAIN;
13966
13967                 spin_lock_bh(&tp->lock);
13968                 err = __tg3_readphy(tp, data->phy_id & 0x1f,
13969                                     data->reg_num & 0x1f, &mii_regval);
13970                 spin_unlock_bh(&tp->lock);
13971
13972                 data->val_out = mii_regval;
13973
13974                 return err;
13975         }
13976
13977         case SIOCSMIIREG:
13978                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13979                         break;                  /* We have no PHY */
13980
13981                 if (!netif_running(dev))
13982                         return -EAGAIN;
13983
13984                 spin_lock_bh(&tp->lock);
13985                 err = __tg3_writephy(tp, data->phy_id & 0x1f,
13986                                      data->reg_num & 0x1f, data->val_in);
13987                 spin_unlock_bh(&tp->lock);
13988
13989                 return err;
13990
13991         case SIOCSHWTSTAMP:
13992                 return tg3_hwtstamp_set(dev, ifr);
13993
13994         case SIOCGHWTSTAMP:
13995                 return tg3_hwtstamp_get(dev, ifr);
13996
13997         default:
13998                 /* do nothing */
13999                 break;
14000         }
14001         return -EOPNOTSUPP;
14002 }
14003
14004 static int tg3_get_coalesce(struct net_device *dev,
14005                             struct ethtool_coalesce *ec,
14006                             struct kernel_ethtool_coalesce *kernel_coal,
14007                             struct netlink_ext_ack *extack)
14008 {
14009         struct tg3 *tp = netdev_priv(dev);
14010
14011         memcpy(ec, &tp->coal, sizeof(*ec));
14012         return 0;
14013 }
14014
14015 static int tg3_set_coalesce(struct net_device *dev,
14016                             struct ethtool_coalesce *ec,
14017                             struct kernel_ethtool_coalesce *kernel_coal,
14018                             struct netlink_ext_ack *extack)
14019 {
14020         struct tg3 *tp = netdev_priv(dev);
14021         u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
14022         u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
14023
14024         if (!tg3_flag(tp, 5705_PLUS)) {
14025                 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
14026                 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
14027                 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
14028                 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
14029         }
14030
14031         if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
14032             (!ec->rx_coalesce_usecs) ||
14033             (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
14034             (!ec->tx_coalesce_usecs) ||
14035             (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
14036             (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
14037             (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
14038             (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
14039             (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
14040             (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
14041             (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
14042             (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
14043                 return -EINVAL;
14044
14045         /* Only copy relevant parameters, ignore all others. */
14046         tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
14047         tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
14048         tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
14049         tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
14050         tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
14051         tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
14052         tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
14053         tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
14054         tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
14055
14056         if (netif_running(dev)) {
14057                 tg3_full_lock(tp, 0);
14058                 __tg3_set_coalesce(tp, &tp->coal);
14059                 tg3_full_unlock(tp);
14060         }
14061         return 0;
14062 }
14063
14064 static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata)
14065 {
14066         struct tg3 *tp = netdev_priv(dev);
14067
14068         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14069                 netdev_warn(tp->dev, "Board does not support EEE!\n");
14070                 return -EOPNOTSUPP;
14071         }
14072
14073         if (edata->advertised != tp->eee.advertised) {
14074                 netdev_warn(tp->dev,
14075                             "Direct manipulation of EEE advertisement is not supported\n");
14076                 return -EINVAL;
14077         }
14078
14079         if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) {
14080                 netdev_warn(tp->dev,
14081                             "Maximal Tx Lpi timer supported is %#x(u)\n",
14082                             TG3_CPMU_DBTMR1_LNKIDLE_MAX);
14083                 return -EINVAL;
14084         }
14085
14086         tp->eee = *edata;
14087
14088         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
14089         tg3_warn_mgmt_link_flap(tp);
14090
14091         if (netif_running(tp->dev)) {
14092                 tg3_full_lock(tp, 0);
14093                 tg3_setup_eee(tp);
14094                 tg3_phy_reset(tp);
14095                 tg3_full_unlock(tp);
14096         }
14097
14098         return 0;
14099 }
14100
14101 static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata)
14102 {
14103         struct tg3 *tp = netdev_priv(dev);
14104
14105         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
14106                 netdev_warn(tp->dev,
14107                             "Board does not support EEE!\n");
14108                 return -EOPNOTSUPP;
14109         }
14110
14111         *edata = tp->eee;
14112         return 0;
14113 }
14114
14115 static const struct ethtool_ops tg3_ethtool_ops = {
14116         .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
14117                                      ETHTOOL_COALESCE_MAX_FRAMES |
14118                                      ETHTOOL_COALESCE_USECS_IRQ |
14119                                      ETHTOOL_COALESCE_MAX_FRAMES_IRQ |
14120                                      ETHTOOL_COALESCE_STATS_BLOCK_USECS,
14121         .get_drvinfo            = tg3_get_drvinfo,
14122         .get_regs_len           = tg3_get_regs_len,
14123         .get_regs               = tg3_get_regs,
14124         .get_wol                = tg3_get_wol,
14125         .set_wol                = tg3_set_wol,
14126         .get_msglevel           = tg3_get_msglevel,
14127         .set_msglevel           = tg3_set_msglevel,
14128         .nway_reset             = tg3_nway_reset,
14129         .get_link               = ethtool_op_get_link,
14130         .get_eeprom_len         = tg3_get_eeprom_len,
14131         .get_eeprom             = tg3_get_eeprom,
14132         .set_eeprom             = tg3_set_eeprom,
14133         .get_ringparam          = tg3_get_ringparam,
14134         .set_ringparam          = tg3_set_ringparam,
14135         .get_pauseparam         = tg3_get_pauseparam,
14136         .set_pauseparam         = tg3_set_pauseparam,
14137         .self_test              = tg3_self_test,
14138         .get_strings            = tg3_get_strings,
14139         .set_phys_id            = tg3_set_phys_id,
14140         .get_ethtool_stats      = tg3_get_ethtool_stats,
14141         .get_coalesce           = tg3_get_coalesce,
14142         .set_coalesce           = tg3_set_coalesce,
14143         .get_sset_count         = tg3_get_sset_count,
14144         .get_rxnfc              = tg3_get_rxnfc,
14145         .get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
14146         .get_rxfh               = tg3_get_rxfh,
14147         .set_rxfh               = tg3_set_rxfh,
14148         .get_channels           = tg3_get_channels,
14149         .set_channels           = tg3_set_channels,
14150         .get_ts_info            = tg3_get_ts_info,
14151         .get_eee                = tg3_get_eee,
14152         .set_eee                = tg3_set_eee,
14153         .get_link_ksettings     = tg3_get_link_ksettings,
14154         .set_link_ksettings     = tg3_set_link_ksettings,
14155 };
14156
14157 static void tg3_get_stats64(struct net_device *dev,
14158                             struct rtnl_link_stats64 *stats)
14159 {
14160         struct tg3 *tp = netdev_priv(dev);
14161
14162         spin_lock_bh(&tp->lock);
14163         if (!tp->hw_stats || !tg3_flag(tp, INIT_COMPLETE)) {
14164                 *stats = tp->net_stats_prev;
14165                 spin_unlock_bh(&tp->lock);
14166                 return;
14167         }
14168
14169         tg3_get_nstats(tp, stats);
14170         spin_unlock_bh(&tp->lock);
14171 }
14172
14173 static void tg3_set_rx_mode(struct net_device *dev)
14174 {
14175         struct tg3 *tp = netdev_priv(dev);
14176
14177         if (!netif_running(dev))
14178                 return;
14179
14180         tg3_full_lock(tp, 0);
14181         __tg3_set_rx_mode(dev);
14182         tg3_full_unlock(tp);
14183 }
14184
14185 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
14186                                int new_mtu)
14187 {
14188         dev->mtu = new_mtu;
14189
14190         if (new_mtu > ETH_DATA_LEN) {
14191                 if (tg3_flag(tp, 5780_CLASS)) {
14192                         netdev_update_features(dev);
14193                         tg3_flag_clear(tp, TSO_CAPABLE);
14194                 } else {
14195                         tg3_flag_set(tp, JUMBO_RING_ENABLE);
14196                 }
14197         } else {
14198                 if (tg3_flag(tp, 5780_CLASS)) {
14199                         tg3_flag_set(tp, TSO_CAPABLE);
14200                         netdev_update_features(dev);
14201                 }
14202                 tg3_flag_clear(tp, JUMBO_RING_ENABLE);
14203         }
14204 }
14205
14206 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
14207 {
14208         struct tg3 *tp = netdev_priv(dev);
14209         int err;
14210         bool reset_phy = false;
14211
14212         if (!netif_running(dev)) {
14213                 /* We'll just catch it later when the
14214                  * device is up'd.
14215                  */
14216                 tg3_set_mtu(dev, tp, new_mtu);
14217                 return 0;
14218         }
14219
14220         tg3_phy_stop(tp);
14221
14222         tg3_netif_stop(tp);
14223
14224         tg3_set_mtu(dev, tp, new_mtu);
14225
14226         tg3_full_lock(tp, 1);
14227
14228         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
14229
14230         /* Reset PHY, otherwise the read DMA engine will be in a mode that
14231          * breaks all requests to 256 bytes.
14232          */
14233         if (tg3_asic_rev(tp) == ASIC_REV_57766 ||
14234             tg3_asic_rev(tp) == ASIC_REV_5717 ||
14235             tg3_asic_rev(tp) == ASIC_REV_5719 ||
14236             tg3_asic_rev(tp) == ASIC_REV_5720)
14237                 reset_phy = true;
14238
14239         err = tg3_restart_hw(tp, reset_phy);
14240
14241         if (!err)
14242                 tg3_netif_start(tp);
14243
14244         tg3_full_unlock(tp);
14245
14246         if (!err)
14247                 tg3_phy_start(tp);
14248
14249         return err;
14250 }
14251
14252 static const struct net_device_ops tg3_netdev_ops = {
14253         .ndo_open               = tg3_open,
14254         .ndo_stop               = tg3_close,
14255         .ndo_start_xmit         = tg3_start_xmit,
14256         .ndo_get_stats64        = tg3_get_stats64,
14257         .ndo_validate_addr      = eth_validate_addr,
14258         .ndo_set_rx_mode        = tg3_set_rx_mode,
14259         .ndo_set_mac_address    = tg3_set_mac_addr,
14260         .ndo_eth_ioctl          = tg3_ioctl,
14261         .ndo_tx_timeout         = tg3_tx_timeout,
14262         .ndo_change_mtu         = tg3_change_mtu,
14263         .ndo_fix_features       = tg3_fix_features,
14264         .ndo_set_features       = tg3_set_features,
14265 #ifdef CONFIG_NET_POLL_CONTROLLER
14266         .ndo_poll_controller    = tg3_poll_controller,
14267 #endif
14268 };
14269
14270 static void tg3_get_eeprom_size(struct tg3 *tp)
14271 {
14272         u32 cursize, val, magic;
14273
14274         tp->nvram_size = EEPROM_CHIP_SIZE;
14275
14276         if (tg3_nvram_read(tp, 0, &magic) != 0)
14277                 return;
14278
14279         if ((magic != TG3_EEPROM_MAGIC) &&
14280             ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
14281             ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
14282                 return;
14283
14284         /*
14285          * Size the chip by reading offsets at increasing powers of two.
14286          * When we encounter our validation signature, we know the addressing
14287          * has wrapped around, and thus have our chip size.
14288          */
14289         cursize = 0x10;
14290
14291         while (cursize < tp->nvram_size) {
14292                 if (tg3_nvram_read(tp, cursize, &val) != 0)
14293                         return;
14294
14295                 if (val == magic)
14296                         break;
14297
14298                 cursize <<= 1;
14299         }
14300
14301         tp->nvram_size = cursize;
14302 }
14303
14304 static void tg3_get_nvram_size(struct tg3 *tp)
14305 {
14306         u32 val;
14307
14308         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
14309                 return;
14310
14311         /* Selfboot format */
14312         if (val != TG3_EEPROM_MAGIC) {
14313                 tg3_get_eeprom_size(tp);
14314                 return;
14315         }
14316
14317         if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
14318                 if (val != 0) {
14319                         /* This is confusing.  We want to operate on the
14320                          * 16-bit value at offset 0xf2.  The tg3_nvram_read()
14321                          * call will read from NVRAM and byteswap the data
14322                          * according to the byteswapping settings for all
14323                          * other register accesses.  This ensures the data we
14324                          * want will always reside in the lower 16-bits.
14325                          * However, the data in NVRAM is in LE format, which
14326                          * means the data from the NVRAM read will always be
14327                          * opposite the endianness of the CPU.  The 16-bit
14328                          * byteswap then brings the data to CPU endianness.
14329                          */
14330                         tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
14331                         return;
14332                 }
14333         }
14334         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14335 }
14336
14337 static void tg3_get_nvram_info(struct tg3 *tp)
14338 {
14339         u32 nvcfg1;
14340
14341         nvcfg1 = tr32(NVRAM_CFG1);
14342         if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
14343                 tg3_flag_set(tp, FLASH);
14344         } else {
14345                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14346                 tw32(NVRAM_CFG1, nvcfg1);
14347         }
14348
14349         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
14350             tg3_flag(tp, 5780_CLASS)) {
14351                 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
14352                 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
14353                         tp->nvram_jedecnum = JEDEC_ATMEL;
14354                         tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14355                         tg3_flag_set(tp, NVRAM_BUFFERED);
14356                         break;
14357                 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
14358                         tp->nvram_jedecnum = JEDEC_ATMEL;
14359                         tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
14360                         break;
14361                 case FLASH_VENDOR_ATMEL_EEPROM:
14362                         tp->nvram_jedecnum = JEDEC_ATMEL;
14363                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14364                         tg3_flag_set(tp, NVRAM_BUFFERED);
14365                         break;
14366                 case FLASH_VENDOR_ST:
14367                         tp->nvram_jedecnum = JEDEC_ST;
14368                         tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
14369                         tg3_flag_set(tp, NVRAM_BUFFERED);
14370                         break;
14371                 case FLASH_VENDOR_SAIFUN:
14372                         tp->nvram_jedecnum = JEDEC_SAIFUN;
14373                         tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
14374                         break;
14375                 case FLASH_VENDOR_SST_SMALL:
14376                 case FLASH_VENDOR_SST_LARGE:
14377                         tp->nvram_jedecnum = JEDEC_SST;
14378                         tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
14379                         break;
14380                 }
14381         } else {
14382                 tp->nvram_jedecnum = JEDEC_ATMEL;
14383                 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14384                 tg3_flag_set(tp, NVRAM_BUFFERED);
14385         }
14386 }
14387
14388 static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
14389 {
14390         switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
14391         case FLASH_5752PAGE_SIZE_256:
14392                 tp->nvram_pagesize = 256;
14393                 break;
14394         case FLASH_5752PAGE_SIZE_512:
14395                 tp->nvram_pagesize = 512;
14396                 break;
14397         case FLASH_5752PAGE_SIZE_1K:
14398                 tp->nvram_pagesize = 1024;
14399                 break;
14400         case FLASH_5752PAGE_SIZE_2K:
14401                 tp->nvram_pagesize = 2048;
14402                 break;
14403         case FLASH_5752PAGE_SIZE_4K:
14404                 tp->nvram_pagesize = 4096;
14405                 break;
14406         case FLASH_5752PAGE_SIZE_264:
14407                 tp->nvram_pagesize = 264;
14408                 break;
14409         case FLASH_5752PAGE_SIZE_528:
14410                 tp->nvram_pagesize = 528;
14411                 break;
14412         }
14413 }
14414
14415 static void tg3_get_5752_nvram_info(struct tg3 *tp)
14416 {
14417         u32 nvcfg1;
14418
14419         nvcfg1 = tr32(NVRAM_CFG1);
14420
14421         /* NVRAM protection for TPM */
14422         if (nvcfg1 & (1 << 27))
14423                 tg3_flag_set(tp, PROTECTED_NVRAM);
14424
14425         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14426         case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
14427         case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
14428                 tp->nvram_jedecnum = JEDEC_ATMEL;
14429                 tg3_flag_set(tp, NVRAM_BUFFERED);
14430                 break;
14431         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14432                 tp->nvram_jedecnum = JEDEC_ATMEL;
14433                 tg3_flag_set(tp, NVRAM_BUFFERED);
14434                 tg3_flag_set(tp, FLASH);
14435                 break;
14436         case FLASH_5752VENDOR_ST_M45PE10:
14437         case FLASH_5752VENDOR_ST_M45PE20:
14438         case FLASH_5752VENDOR_ST_M45PE40:
14439                 tp->nvram_jedecnum = JEDEC_ST;
14440                 tg3_flag_set(tp, NVRAM_BUFFERED);
14441                 tg3_flag_set(tp, FLASH);
14442                 break;
14443         }
14444
14445         if (tg3_flag(tp, FLASH)) {
14446                 tg3_nvram_get_pagesize(tp, nvcfg1);
14447         } else {
14448                 /* For eeprom, set pagesize to maximum eeprom size */
14449                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14450
14451                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14452                 tw32(NVRAM_CFG1, nvcfg1);
14453         }
14454 }
14455
14456 static void tg3_get_5755_nvram_info(struct tg3 *tp)
14457 {
14458         u32 nvcfg1, protect = 0;
14459
14460         nvcfg1 = tr32(NVRAM_CFG1);
14461
14462         /* NVRAM protection for TPM */
14463         if (nvcfg1 & (1 << 27)) {
14464                 tg3_flag_set(tp, PROTECTED_NVRAM);
14465                 protect = 1;
14466         }
14467
14468         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14469         switch (nvcfg1) {
14470         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14471         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14472         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14473         case FLASH_5755VENDOR_ATMEL_FLASH_5:
14474                 tp->nvram_jedecnum = JEDEC_ATMEL;
14475                 tg3_flag_set(tp, NVRAM_BUFFERED);
14476                 tg3_flag_set(tp, FLASH);
14477                 tp->nvram_pagesize = 264;
14478                 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
14479                     nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
14480                         tp->nvram_size = (protect ? 0x3e200 :
14481                                           TG3_NVRAM_SIZE_512KB);
14482                 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
14483                         tp->nvram_size = (protect ? 0x1f200 :
14484                                           TG3_NVRAM_SIZE_256KB);
14485                 else
14486                         tp->nvram_size = (protect ? 0x1f200 :
14487                                           TG3_NVRAM_SIZE_128KB);
14488                 break;
14489         case FLASH_5752VENDOR_ST_M45PE10:
14490         case FLASH_5752VENDOR_ST_M45PE20:
14491         case FLASH_5752VENDOR_ST_M45PE40:
14492                 tp->nvram_jedecnum = JEDEC_ST;
14493                 tg3_flag_set(tp, NVRAM_BUFFERED);
14494                 tg3_flag_set(tp, FLASH);
14495                 tp->nvram_pagesize = 256;
14496                 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
14497                         tp->nvram_size = (protect ?
14498                                           TG3_NVRAM_SIZE_64KB :
14499                                           TG3_NVRAM_SIZE_128KB);
14500                 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
14501                         tp->nvram_size = (protect ?
14502                                           TG3_NVRAM_SIZE_64KB :
14503                                           TG3_NVRAM_SIZE_256KB);
14504                 else
14505                         tp->nvram_size = (protect ?
14506                                           TG3_NVRAM_SIZE_128KB :
14507                                           TG3_NVRAM_SIZE_512KB);
14508                 break;
14509         }
14510 }
14511
14512 static void tg3_get_5787_nvram_info(struct tg3 *tp)
14513 {
14514         u32 nvcfg1;
14515
14516         nvcfg1 = tr32(NVRAM_CFG1);
14517
14518         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14519         case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
14520         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14521         case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
14522         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14523                 tp->nvram_jedecnum = JEDEC_ATMEL;
14524                 tg3_flag_set(tp, NVRAM_BUFFERED);
14525                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14526
14527                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14528                 tw32(NVRAM_CFG1, nvcfg1);
14529                 break;
14530         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14531         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14532         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14533         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14534                 tp->nvram_jedecnum = JEDEC_ATMEL;
14535                 tg3_flag_set(tp, NVRAM_BUFFERED);
14536                 tg3_flag_set(tp, FLASH);
14537                 tp->nvram_pagesize = 264;
14538                 break;
14539         case FLASH_5752VENDOR_ST_M45PE10:
14540         case FLASH_5752VENDOR_ST_M45PE20:
14541         case FLASH_5752VENDOR_ST_M45PE40:
14542                 tp->nvram_jedecnum = JEDEC_ST;
14543                 tg3_flag_set(tp, NVRAM_BUFFERED);
14544                 tg3_flag_set(tp, FLASH);
14545                 tp->nvram_pagesize = 256;
14546                 break;
14547         }
14548 }
14549
14550 static void tg3_get_5761_nvram_info(struct tg3 *tp)
14551 {
14552         u32 nvcfg1, protect = 0;
14553
14554         nvcfg1 = tr32(NVRAM_CFG1);
14555
14556         /* NVRAM protection for TPM */
14557         if (nvcfg1 & (1 << 27)) {
14558                 tg3_flag_set(tp, PROTECTED_NVRAM);
14559                 protect = 1;
14560         }
14561
14562         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14563         switch (nvcfg1) {
14564         case FLASH_5761VENDOR_ATMEL_ADB021D:
14565         case FLASH_5761VENDOR_ATMEL_ADB041D:
14566         case FLASH_5761VENDOR_ATMEL_ADB081D:
14567         case FLASH_5761VENDOR_ATMEL_ADB161D:
14568         case FLASH_5761VENDOR_ATMEL_MDB021D:
14569         case FLASH_5761VENDOR_ATMEL_MDB041D:
14570         case FLASH_5761VENDOR_ATMEL_MDB081D:
14571         case FLASH_5761VENDOR_ATMEL_MDB161D:
14572                 tp->nvram_jedecnum = JEDEC_ATMEL;
14573                 tg3_flag_set(tp, NVRAM_BUFFERED);
14574                 tg3_flag_set(tp, FLASH);
14575                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14576                 tp->nvram_pagesize = 256;
14577                 break;
14578         case FLASH_5761VENDOR_ST_A_M45PE20:
14579         case FLASH_5761VENDOR_ST_A_M45PE40:
14580         case FLASH_5761VENDOR_ST_A_M45PE80:
14581         case FLASH_5761VENDOR_ST_A_M45PE16:
14582         case FLASH_5761VENDOR_ST_M_M45PE20:
14583         case FLASH_5761VENDOR_ST_M_M45PE40:
14584         case FLASH_5761VENDOR_ST_M_M45PE80:
14585         case FLASH_5761VENDOR_ST_M_M45PE16:
14586                 tp->nvram_jedecnum = JEDEC_ST;
14587                 tg3_flag_set(tp, NVRAM_BUFFERED);
14588                 tg3_flag_set(tp, FLASH);
14589                 tp->nvram_pagesize = 256;
14590                 break;
14591         }
14592
14593         if (protect) {
14594                 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
14595         } else {
14596                 switch (nvcfg1) {
14597                 case FLASH_5761VENDOR_ATMEL_ADB161D:
14598                 case FLASH_5761VENDOR_ATMEL_MDB161D:
14599                 case FLASH_5761VENDOR_ST_A_M45PE16:
14600                 case FLASH_5761VENDOR_ST_M_M45PE16:
14601                         tp->nvram_size = TG3_NVRAM_SIZE_2MB;
14602                         break;
14603                 case FLASH_5761VENDOR_ATMEL_ADB081D:
14604                 case FLASH_5761VENDOR_ATMEL_MDB081D:
14605                 case FLASH_5761VENDOR_ST_A_M45PE80:
14606                 case FLASH_5761VENDOR_ST_M_M45PE80:
14607                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14608                         break;
14609                 case FLASH_5761VENDOR_ATMEL_ADB041D:
14610                 case FLASH_5761VENDOR_ATMEL_MDB041D:
14611                 case FLASH_5761VENDOR_ST_A_M45PE40:
14612                 case FLASH_5761VENDOR_ST_M_M45PE40:
14613                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14614                         break;
14615                 case FLASH_5761VENDOR_ATMEL_ADB021D:
14616                 case FLASH_5761VENDOR_ATMEL_MDB021D:
14617                 case FLASH_5761VENDOR_ST_A_M45PE20:
14618                 case FLASH_5761VENDOR_ST_M_M45PE20:
14619                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14620                         break;
14621                 }
14622         }
14623 }
14624
14625 static void tg3_get_5906_nvram_info(struct tg3 *tp)
14626 {
14627         tp->nvram_jedecnum = JEDEC_ATMEL;
14628         tg3_flag_set(tp, NVRAM_BUFFERED);
14629         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14630 }
14631
14632 static void tg3_get_57780_nvram_info(struct tg3 *tp)
14633 {
14634         u32 nvcfg1;
14635
14636         nvcfg1 = tr32(NVRAM_CFG1);
14637
14638         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14639         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14640         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14641                 tp->nvram_jedecnum = JEDEC_ATMEL;
14642                 tg3_flag_set(tp, NVRAM_BUFFERED);
14643                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14644
14645                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14646                 tw32(NVRAM_CFG1, nvcfg1);
14647                 return;
14648         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14649         case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14650         case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14651         case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14652         case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14653         case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14654         case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14655                 tp->nvram_jedecnum = JEDEC_ATMEL;
14656                 tg3_flag_set(tp, NVRAM_BUFFERED);
14657                 tg3_flag_set(tp, FLASH);
14658
14659                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14660                 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14661                 case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14662                 case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14663                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14664                         break;
14665                 case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14666                 case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14667                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14668                         break;
14669                 case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14670                 case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14671                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14672                         break;
14673                 }
14674                 break;
14675         case FLASH_5752VENDOR_ST_M45PE10:
14676         case FLASH_5752VENDOR_ST_M45PE20:
14677         case FLASH_5752VENDOR_ST_M45PE40:
14678                 tp->nvram_jedecnum = JEDEC_ST;
14679                 tg3_flag_set(tp, NVRAM_BUFFERED);
14680                 tg3_flag_set(tp, FLASH);
14681
14682                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14683                 case FLASH_5752VENDOR_ST_M45PE10:
14684                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14685                         break;
14686                 case FLASH_5752VENDOR_ST_M45PE20:
14687                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14688                         break;
14689                 case FLASH_5752VENDOR_ST_M45PE40:
14690                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14691                         break;
14692                 }
14693                 break;
14694         default:
14695                 tg3_flag_set(tp, NO_NVRAM);
14696                 return;
14697         }
14698
14699         tg3_nvram_get_pagesize(tp, nvcfg1);
14700         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14701                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14702 }
14703
14704
14705 static void tg3_get_5717_nvram_info(struct tg3 *tp)
14706 {
14707         u32 nvcfg1;
14708
14709         nvcfg1 = tr32(NVRAM_CFG1);
14710
14711         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14712         case FLASH_5717VENDOR_ATMEL_EEPROM:
14713         case FLASH_5717VENDOR_MICRO_EEPROM:
14714                 tp->nvram_jedecnum = JEDEC_ATMEL;
14715                 tg3_flag_set(tp, NVRAM_BUFFERED);
14716                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14717
14718                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14719                 tw32(NVRAM_CFG1, nvcfg1);
14720                 return;
14721         case FLASH_5717VENDOR_ATMEL_MDB011D:
14722         case FLASH_5717VENDOR_ATMEL_ADB011B:
14723         case FLASH_5717VENDOR_ATMEL_ADB011D:
14724         case FLASH_5717VENDOR_ATMEL_MDB021D:
14725         case FLASH_5717VENDOR_ATMEL_ADB021B:
14726         case FLASH_5717VENDOR_ATMEL_ADB021D:
14727         case FLASH_5717VENDOR_ATMEL_45USPT:
14728                 tp->nvram_jedecnum = JEDEC_ATMEL;
14729                 tg3_flag_set(tp, NVRAM_BUFFERED);
14730                 tg3_flag_set(tp, FLASH);
14731
14732                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14733                 case FLASH_5717VENDOR_ATMEL_MDB021D:
14734                         /* Detect size with tg3_nvram_get_size() */
14735                         break;
14736                 case FLASH_5717VENDOR_ATMEL_ADB021B:
14737                 case FLASH_5717VENDOR_ATMEL_ADB021D:
14738                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14739                         break;
14740                 default:
14741                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14742                         break;
14743                 }
14744                 break;
14745         case FLASH_5717VENDOR_ST_M_M25PE10:
14746         case FLASH_5717VENDOR_ST_A_M25PE10:
14747         case FLASH_5717VENDOR_ST_M_M45PE10:
14748         case FLASH_5717VENDOR_ST_A_M45PE10:
14749         case FLASH_5717VENDOR_ST_M_M25PE20:
14750         case FLASH_5717VENDOR_ST_A_M25PE20:
14751         case FLASH_5717VENDOR_ST_M_M45PE20:
14752         case FLASH_5717VENDOR_ST_A_M45PE20:
14753         case FLASH_5717VENDOR_ST_25USPT:
14754         case FLASH_5717VENDOR_ST_45USPT:
14755                 tp->nvram_jedecnum = JEDEC_ST;
14756                 tg3_flag_set(tp, NVRAM_BUFFERED);
14757                 tg3_flag_set(tp, FLASH);
14758
14759                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14760                 case FLASH_5717VENDOR_ST_M_M25PE20:
14761                 case FLASH_5717VENDOR_ST_M_M45PE20:
14762                         /* Detect size with tg3_nvram_get_size() */
14763                         break;
14764                 case FLASH_5717VENDOR_ST_A_M25PE20:
14765                 case FLASH_5717VENDOR_ST_A_M45PE20:
14766                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14767                         break;
14768                 default:
14769                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14770                         break;
14771                 }
14772                 break;
14773         default:
14774                 tg3_flag_set(tp, NO_NVRAM);
14775                 return;
14776         }
14777
14778         tg3_nvram_get_pagesize(tp, nvcfg1);
14779         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14780                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14781 }
14782
14783 static void tg3_get_5720_nvram_info(struct tg3 *tp)
14784 {
14785         u32 nvcfg1, nvmpinstrp, nv_status;
14786
14787         nvcfg1 = tr32(NVRAM_CFG1);
14788         nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
14789
14790         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14791                 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) {
14792                         tg3_flag_set(tp, NO_NVRAM);
14793                         return;
14794                 }
14795
14796                 switch (nvmpinstrp) {
14797                 case FLASH_5762_MX25L_100:
14798                 case FLASH_5762_MX25L_200:
14799                 case FLASH_5762_MX25L_400:
14800                 case FLASH_5762_MX25L_800:
14801                 case FLASH_5762_MX25L_160_320:
14802                         tp->nvram_pagesize = 4096;
14803                         tp->nvram_jedecnum = JEDEC_MACRONIX;
14804                         tg3_flag_set(tp, NVRAM_BUFFERED);
14805                         tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14806                         tg3_flag_set(tp, FLASH);
14807                         nv_status = tr32(NVRAM_AUTOSENSE_STATUS);
14808                         tp->nvram_size =
14809                                 (1 << (nv_status >> AUTOSENSE_DEVID &
14810                                                 AUTOSENSE_DEVID_MASK)
14811                                         << AUTOSENSE_SIZE_IN_MB);
14812                         return;
14813
14814                 case FLASH_5762_EEPROM_HD:
14815                         nvmpinstrp = FLASH_5720_EEPROM_HD;
14816                         break;
14817                 case FLASH_5762_EEPROM_LD:
14818                         nvmpinstrp = FLASH_5720_EEPROM_LD;
14819                         break;
14820                 case FLASH_5720VENDOR_M_ST_M45PE20:
14821                         /* This pinstrap supports multiple sizes, so force it
14822                          * to read the actual size from location 0xf0.
14823                          */
14824                         nvmpinstrp = FLASH_5720VENDOR_ST_45USPT;
14825                         break;
14826                 }
14827         }
14828
14829         switch (nvmpinstrp) {
14830         case FLASH_5720_EEPROM_HD:
14831         case FLASH_5720_EEPROM_LD:
14832                 tp->nvram_jedecnum = JEDEC_ATMEL;
14833                 tg3_flag_set(tp, NVRAM_BUFFERED);
14834
14835                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14836                 tw32(NVRAM_CFG1, nvcfg1);
14837                 if (nvmpinstrp == FLASH_5720_EEPROM_HD)
14838                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14839                 else
14840                         tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
14841                 return;
14842         case FLASH_5720VENDOR_M_ATMEL_DB011D:
14843         case FLASH_5720VENDOR_A_ATMEL_DB011B:
14844         case FLASH_5720VENDOR_A_ATMEL_DB011D:
14845         case FLASH_5720VENDOR_M_ATMEL_DB021D:
14846         case FLASH_5720VENDOR_A_ATMEL_DB021B:
14847         case FLASH_5720VENDOR_A_ATMEL_DB021D:
14848         case FLASH_5720VENDOR_M_ATMEL_DB041D:
14849         case FLASH_5720VENDOR_A_ATMEL_DB041B:
14850         case FLASH_5720VENDOR_A_ATMEL_DB041D:
14851         case FLASH_5720VENDOR_M_ATMEL_DB081D:
14852         case FLASH_5720VENDOR_A_ATMEL_DB081D:
14853         case FLASH_5720VENDOR_ATMEL_45USPT:
14854                 tp->nvram_jedecnum = JEDEC_ATMEL;
14855                 tg3_flag_set(tp, NVRAM_BUFFERED);
14856                 tg3_flag_set(tp, FLASH);
14857
14858                 switch (nvmpinstrp) {
14859                 case FLASH_5720VENDOR_M_ATMEL_DB021D:
14860                 case FLASH_5720VENDOR_A_ATMEL_DB021B:
14861                 case FLASH_5720VENDOR_A_ATMEL_DB021D:
14862                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14863                         break;
14864                 case FLASH_5720VENDOR_M_ATMEL_DB041D:
14865                 case FLASH_5720VENDOR_A_ATMEL_DB041B:
14866                 case FLASH_5720VENDOR_A_ATMEL_DB041D:
14867                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14868                         break;
14869                 case FLASH_5720VENDOR_M_ATMEL_DB081D:
14870                 case FLASH_5720VENDOR_A_ATMEL_DB081D:
14871                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14872                         break;
14873                 default:
14874                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14875                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14876                         break;
14877                 }
14878                 break;
14879         case FLASH_5720VENDOR_M_ST_M25PE10:
14880         case FLASH_5720VENDOR_M_ST_M45PE10:
14881         case FLASH_5720VENDOR_A_ST_M25PE10:
14882         case FLASH_5720VENDOR_A_ST_M45PE10:
14883         case FLASH_5720VENDOR_M_ST_M25PE20:
14884         case FLASH_5720VENDOR_M_ST_M45PE20:
14885         case FLASH_5720VENDOR_A_ST_M25PE20:
14886         case FLASH_5720VENDOR_A_ST_M45PE20:
14887         case FLASH_5720VENDOR_M_ST_M25PE40:
14888         case FLASH_5720VENDOR_M_ST_M45PE40:
14889         case FLASH_5720VENDOR_A_ST_M25PE40:
14890         case FLASH_5720VENDOR_A_ST_M45PE40:
14891         case FLASH_5720VENDOR_M_ST_M25PE80:
14892         case FLASH_5720VENDOR_M_ST_M45PE80:
14893         case FLASH_5720VENDOR_A_ST_M25PE80:
14894         case FLASH_5720VENDOR_A_ST_M45PE80:
14895         case FLASH_5720VENDOR_ST_25USPT:
14896         case FLASH_5720VENDOR_ST_45USPT:
14897                 tp->nvram_jedecnum = JEDEC_ST;
14898                 tg3_flag_set(tp, NVRAM_BUFFERED);
14899                 tg3_flag_set(tp, FLASH);
14900
14901                 switch (nvmpinstrp) {
14902                 case FLASH_5720VENDOR_M_ST_M25PE20:
14903                 case FLASH_5720VENDOR_M_ST_M45PE20:
14904                 case FLASH_5720VENDOR_A_ST_M25PE20:
14905                 case FLASH_5720VENDOR_A_ST_M45PE20:
14906                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14907                         break;
14908                 case FLASH_5720VENDOR_M_ST_M25PE40:
14909                 case FLASH_5720VENDOR_M_ST_M45PE40:
14910                 case FLASH_5720VENDOR_A_ST_M25PE40:
14911                 case FLASH_5720VENDOR_A_ST_M45PE40:
14912                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14913                         break;
14914                 case FLASH_5720VENDOR_M_ST_M25PE80:
14915                 case FLASH_5720VENDOR_M_ST_M45PE80:
14916                 case FLASH_5720VENDOR_A_ST_M25PE80:
14917                 case FLASH_5720VENDOR_A_ST_M45PE80:
14918                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14919                         break;
14920                 default:
14921                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14922                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14923                         break;
14924                 }
14925                 break;
14926         default:
14927                 tg3_flag_set(tp, NO_NVRAM);
14928                 return;
14929         }
14930
14931         tg3_nvram_get_pagesize(tp, nvcfg1);
14932         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14933                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14934
14935         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14936                 u32 val;
14937
14938                 if (tg3_nvram_read(tp, 0, &val))
14939                         return;
14940
14941                 if (val != TG3_EEPROM_MAGIC &&
14942                     (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW)
14943                         tg3_flag_set(tp, NO_NVRAM);
14944         }
14945 }
14946
14947 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
14948 static void tg3_nvram_init(struct tg3 *tp)
14949 {
14950         if (tg3_flag(tp, IS_SSB_CORE)) {
14951                 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
14952                 tg3_flag_clear(tp, NVRAM);
14953                 tg3_flag_clear(tp, NVRAM_BUFFERED);
14954                 tg3_flag_set(tp, NO_NVRAM);
14955                 return;
14956         }
14957
14958         tw32_f(GRC_EEPROM_ADDR,
14959              (EEPROM_ADDR_FSM_RESET |
14960               (EEPROM_DEFAULT_CLOCK_PERIOD <<
14961                EEPROM_ADDR_CLKPERD_SHIFT)));
14962
14963         msleep(1);
14964
14965         /* Enable seeprom accesses. */
14966         tw32_f(GRC_LOCAL_CTRL,
14967              tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
14968         udelay(100);
14969
14970         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
14971             tg3_asic_rev(tp) != ASIC_REV_5701) {
14972                 tg3_flag_set(tp, NVRAM);
14973
14974                 if (tg3_nvram_lock(tp)) {
14975                         netdev_warn(tp->dev,
14976                                     "Cannot get nvram lock, %s failed\n",
14977                                     __func__);
14978                         return;
14979                 }
14980                 tg3_enable_nvram_access(tp);
14981
14982                 tp->nvram_size = 0;
14983
14984                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
14985                         tg3_get_5752_nvram_info(tp);
14986                 else if (tg3_asic_rev(tp) == ASIC_REV_5755)
14987                         tg3_get_5755_nvram_info(tp);
14988                 else if (tg3_asic_rev(tp) == ASIC_REV_5787 ||
14989                          tg3_asic_rev(tp) == ASIC_REV_5784 ||
14990                          tg3_asic_rev(tp) == ASIC_REV_5785)
14991                         tg3_get_5787_nvram_info(tp);
14992                 else if (tg3_asic_rev(tp) == ASIC_REV_5761)
14993                         tg3_get_5761_nvram_info(tp);
14994                 else if (tg3_asic_rev(tp) == ASIC_REV_5906)
14995                         tg3_get_5906_nvram_info(tp);
14996                 else if (tg3_asic_rev(tp) == ASIC_REV_57780 ||
14997                          tg3_flag(tp, 57765_CLASS))
14998                         tg3_get_57780_nvram_info(tp);
14999                 else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15000                          tg3_asic_rev(tp) == ASIC_REV_5719)
15001                         tg3_get_5717_nvram_info(tp);
15002                 else if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
15003                          tg3_asic_rev(tp) == ASIC_REV_5762)
15004                         tg3_get_5720_nvram_info(tp);
15005                 else
15006                         tg3_get_nvram_info(tp);
15007
15008                 if (tp->nvram_size == 0)
15009                         tg3_get_nvram_size(tp);
15010
15011                 tg3_disable_nvram_access(tp);
15012                 tg3_nvram_unlock(tp);
15013
15014         } else {
15015                 tg3_flag_clear(tp, NVRAM);
15016                 tg3_flag_clear(tp, NVRAM_BUFFERED);
15017
15018                 tg3_get_eeprom_size(tp);
15019         }
15020 }
15021
15022 struct subsys_tbl_ent {
15023         u16 subsys_vendor, subsys_devid;
15024         u32 phy_id;
15025 };
15026
15027 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
15028         /* Broadcom boards. */
15029         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15030           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
15031         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15032           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
15033         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15034           TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
15035         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15036           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
15037         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15038           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
15039         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15040           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
15041         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15042           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
15043         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15044           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
15045         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15046           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
15047         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15048           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
15049         { TG3PCI_SUBVENDOR_ID_BROADCOM,
15050           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
15051
15052         /* 3com boards. */
15053         { TG3PCI_SUBVENDOR_ID_3COM,
15054           TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
15055         { TG3PCI_SUBVENDOR_ID_3COM,
15056           TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
15057         { TG3PCI_SUBVENDOR_ID_3COM,
15058           TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
15059         { TG3PCI_SUBVENDOR_ID_3COM,
15060           TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
15061         { TG3PCI_SUBVENDOR_ID_3COM,
15062           TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
15063
15064         /* DELL boards. */
15065         { TG3PCI_SUBVENDOR_ID_DELL,
15066           TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
15067         { TG3PCI_SUBVENDOR_ID_DELL,
15068           TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
15069         { TG3PCI_SUBVENDOR_ID_DELL,
15070           TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
15071         { TG3PCI_SUBVENDOR_ID_DELL,
15072           TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
15073
15074         /* Compaq boards. */
15075         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15076           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
15077         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15078           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
15079         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15080           TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
15081         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15082           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
15083         { TG3PCI_SUBVENDOR_ID_COMPAQ,
15084           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
15085
15086         /* IBM boards. */
15087         { TG3PCI_SUBVENDOR_ID_IBM,
15088           TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
15089 };
15090
15091 static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
15092 {
15093         int i;
15094
15095         for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
15096                 if ((subsys_id_to_phy_id[i].subsys_vendor ==
15097                      tp->pdev->subsystem_vendor) &&
15098                     (subsys_id_to_phy_id[i].subsys_devid ==
15099                      tp->pdev->subsystem_device))
15100                         return &subsys_id_to_phy_id[i];
15101         }
15102         return NULL;
15103 }
15104
15105 static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
15106 {
15107         u32 val;
15108
15109         tp->phy_id = TG3_PHY_ID_INVALID;
15110         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15111
15112         /* Assume an onboard device and WOL capable by default.  */
15113         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15114         tg3_flag_set(tp, WOL_CAP);
15115
15116         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15117                 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
15118                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15119                         tg3_flag_set(tp, IS_NIC);
15120                 }
15121                 val = tr32(VCPU_CFGSHDW);
15122                 if (val & VCPU_CFGSHDW_ASPM_DBNC)
15123                         tg3_flag_set(tp, ASPM_WORKAROUND);
15124                 if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
15125                     (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
15126                         tg3_flag_set(tp, WOL_ENABLE);
15127                         device_set_wakeup_enable(&tp->pdev->dev, true);
15128                 }
15129                 goto done;
15130         }
15131
15132         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
15133         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
15134                 u32 nic_cfg, led_cfg;
15135                 u32 cfg2 = 0, cfg4 = 0, cfg5 = 0;
15136                 u32 nic_phy_id, ver, eeprom_phy_id;
15137                 int eeprom_phy_serdes = 0;
15138
15139                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
15140                 tp->nic_sram_data_cfg = nic_cfg;
15141
15142                 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
15143                 ver >>= NIC_SRAM_DATA_VER_SHIFT;
15144                 if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
15145                     tg3_asic_rev(tp) != ASIC_REV_5701 &&
15146                     tg3_asic_rev(tp) != ASIC_REV_5703 &&
15147                     (ver > 0) && (ver < 0x100))
15148                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
15149
15150                 if (tg3_asic_rev(tp) == ASIC_REV_5785)
15151                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
15152
15153                 if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15154                     tg3_asic_rev(tp) == ASIC_REV_5719 ||
15155                     tg3_asic_rev(tp) == ASIC_REV_5720)
15156                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_5, &cfg5);
15157
15158                 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
15159                     NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
15160                         eeprom_phy_serdes = 1;
15161
15162                 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
15163                 if (nic_phy_id != 0) {
15164                         u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
15165                         u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
15166
15167                         eeprom_phy_id  = (id1 >> 16) << 10;
15168                         eeprom_phy_id |= (id2 & 0xfc00) << 16;
15169                         eeprom_phy_id |= (id2 & 0x03ff) <<  0;
15170                 } else
15171                         eeprom_phy_id = 0;
15172
15173                 tp->phy_id = eeprom_phy_id;
15174                 if (eeprom_phy_serdes) {
15175                         if (!tg3_flag(tp, 5705_PLUS))
15176                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15177                         else
15178                                 tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
15179                 }
15180
15181                 if (tg3_flag(tp, 5750_PLUS))
15182                         led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
15183                                     SHASTA_EXT_LED_MODE_MASK);
15184                 else
15185                         led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
15186
15187                 switch (led_cfg) {
15188                 default:
15189                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
15190                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15191                         break;
15192
15193                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
15194                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15195                         break;
15196
15197                 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
15198                         tp->led_ctrl = LED_CTRL_MODE_MAC;
15199
15200                         /* Default to PHY_1_MODE if 0 (MAC_MODE) is
15201                          * read on some older 5700/5701 bootcode.
15202                          */
15203                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
15204                             tg3_asic_rev(tp) == ASIC_REV_5701)
15205                                 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15206
15207                         break;
15208
15209                 case SHASTA_EXT_LED_SHARED:
15210                         tp->led_ctrl = LED_CTRL_MODE_SHARED;
15211                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
15212                             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1)
15213                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15214                                                  LED_CTRL_MODE_PHY_2);
15215
15216                         if (tg3_flag(tp, 5717_PLUS) ||
15217                             tg3_asic_rev(tp) == ASIC_REV_5762)
15218                                 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE |
15219                                                 LED_CTRL_BLINK_RATE_MASK;
15220
15221                         break;
15222
15223                 case SHASTA_EXT_LED_MAC:
15224                         tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
15225                         break;
15226
15227                 case SHASTA_EXT_LED_COMBO:
15228                         tp->led_ctrl = LED_CTRL_MODE_COMBO;
15229                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0)
15230                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
15231                                                  LED_CTRL_MODE_PHY_2);
15232                         break;
15233
15234                 }
15235
15236                 if ((tg3_asic_rev(tp) == ASIC_REV_5700 ||
15237                      tg3_asic_rev(tp) == ASIC_REV_5701) &&
15238                     tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
15239                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
15240
15241                 if (tg3_chip_rev(tp) == CHIPREV_5784_AX)
15242                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
15243
15244                 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
15245                         tg3_flag_set(tp, EEPROM_WRITE_PROT);
15246                         if ((tp->pdev->subsystem_vendor ==
15247                              PCI_VENDOR_ID_ARIMA) &&
15248                             (tp->pdev->subsystem_device == 0x205a ||
15249                              tp->pdev->subsystem_device == 0x2063))
15250                                 tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15251                 } else {
15252                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
15253                         tg3_flag_set(tp, IS_NIC);
15254                 }
15255
15256                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
15257                         tg3_flag_set(tp, ENABLE_ASF);
15258                         if (tg3_flag(tp, 5750_PLUS))
15259                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
15260                 }
15261
15262                 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
15263                     tg3_flag(tp, 5750_PLUS))
15264                         tg3_flag_set(tp, ENABLE_APE);
15265
15266                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
15267                     !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
15268                         tg3_flag_clear(tp, WOL_CAP);
15269
15270                 if (tg3_flag(tp, WOL_CAP) &&
15271                     (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
15272                         tg3_flag_set(tp, WOL_ENABLE);
15273                         device_set_wakeup_enable(&tp->pdev->dev, true);
15274                 }
15275
15276                 if (cfg2 & (1 << 17))
15277                         tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
15278
15279                 /* serdes signal pre-emphasis in register 0x590 set by */
15280                 /* bootcode if bit 18 is set */
15281                 if (cfg2 & (1 << 18))
15282                         tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
15283
15284                 if ((tg3_flag(tp, 57765_PLUS) ||
15285                      (tg3_asic_rev(tp) == ASIC_REV_5784 &&
15286                       tg3_chip_rev(tp) != CHIPREV_5784_AX)) &&
15287                     (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
15288                         tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
15289
15290                 if (tg3_flag(tp, PCI_EXPRESS)) {
15291                         u32 cfg3;
15292
15293                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
15294                         if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
15295                             !tg3_flag(tp, 57765_PLUS) &&
15296                             (cfg3 & NIC_SRAM_ASPM_DEBOUNCE))
15297                                 tg3_flag_set(tp, ASPM_WORKAROUND);
15298                         if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID)
15299                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
15300                         if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK)
15301                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
15302                 }
15303
15304                 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
15305                         tg3_flag_set(tp, RGMII_INBAND_DISABLE);
15306                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
15307                         tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
15308                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
15309                         tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
15310
15311                 if (cfg5 & NIC_SRAM_DISABLE_1G_HALF_ADV)
15312                         tp->phy_flags |= TG3_PHYFLG_DISABLE_1G_HD_ADV;
15313         }
15314 done:
15315         if (tg3_flag(tp, WOL_CAP))
15316                 device_set_wakeup_enable(&tp->pdev->dev,
15317                                          tg3_flag(tp, WOL_ENABLE));
15318         else
15319                 device_set_wakeup_capable(&tp->pdev->dev, false);
15320 }
15321
15322 static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val)
15323 {
15324         int i, err;
15325         u32 val2, off = offset * 8;
15326
15327         err = tg3_nvram_lock(tp);
15328         if (err)
15329                 return err;
15330
15331         tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE);
15332         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN |
15333                         APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START);
15334         tg3_ape_read32(tp, TG3_APE_OTP_CTRL);
15335         udelay(10);
15336
15337         for (i = 0; i < 100; i++) {
15338                 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS);
15339                 if (val2 & APE_OTP_STATUS_CMD_DONE) {
15340                         *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA);
15341                         break;
15342                 }
15343                 udelay(10);
15344         }
15345
15346         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0);
15347
15348         tg3_nvram_unlock(tp);
15349         if (val2 & APE_OTP_STATUS_CMD_DONE)
15350                 return 0;
15351
15352         return -EBUSY;
15353 }
15354
15355 static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
15356 {
15357         int i;
15358         u32 val;
15359
15360         tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
15361         tw32(OTP_CTRL, cmd);
15362
15363         /* Wait for up to 1 ms for command to execute. */
15364         for (i = 0; i < 100; i++) {
15365                 val = tr32(OTP_STATUS);
15366                 if (val & OTP_STATUS_CMD_DONE)
15367                         break;
15368                 udelay(10);
15369         }
15370
15371         return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
15372 }
15373
15374 /* Read the gphy configuration from the OTP region of the chip.  The gphy
15375  * configuration is a 32-bit value that straddles the alignment boundary.
15376  * We do two 32-bit reads and then shift and merge the results.
15377  */
15378 static u32 tg3_read_otp_phycfg(struct tg3 *tp)
15379 {
15380         u32 bhalf_otp, thalf_otp;
15381
15382         tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
15383
15384         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
15385                 return 0;
15386
15387         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
15388
15389         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15390                 return 0;
15391
15392         thalf_otp = tr32(OTP_READ_DATA);
15393
15394         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
15395
15396         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15397                 return 0;
15398
15399         bhalf_otp = tr32(OTP_READ_DATA);
15400
15401         return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
15402 }
15403
15404 static void tg3_phy_init_link_config(struct tg3 *tp)
15405 {
15406         u32 adv = ADVERTISED_Autoneg;
15407
15408         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
15409                 if (!(tp->phy_flags & TG3_PHYFLG_DISABLE_1G_HD_ADV))
15410                         adv |= ADVERTISED_1000baseT_Half;
15411                 adv |= ADVERTISED_1000baseT_Full;
15412         }
15413
15414         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15415                 adv |= ADVERTISED_100baseT_Half |
15416                        ADVERTISED_100baseT_Full |
15417                        ADVERTISED_10baseT_Half |
15418                        ADVERTISED_10baseT_Full |
15419                        ADVERTISED_TP;
15420         else
15421                 adv |= ADVERTISED_FIBRE;
15422
15423         tp->link_config.advertising = adv;
15424         tp->link_config.speed = SPEED_UNKNOWN;
15425         tp->link_config.duplex = DUPLEX_UNKNOWN;
15426         tp->link_config.autoneg = AUTONEG_ENABLE;
15427         tp->link_config.active_speed = SPEED_UNKNOWN;
15428         tp->link_config.active_duplex = DUPLEX_UNKNOWN;
15429
15430         tp->old_link = -1;
15431 }
15432
15433 static int tg3_phy_probe(struct tg3 *tp)
15434 {
15435         u32 hw_phy_id_1, hw_phy_id_2;
15436         u32 hw_phy_id, hw_phy_id_masked;
15437         int err;
15438
15439         /* flow control autonegotiation is default behavior */
15440         tg3_flag_set(tp, PAUSE_AUTONEG);
15441         tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
15442
15443         if (tg3_flag(tp, ENABLE_APE)) {
15444                 switch (tp->pci_fn) {
15445                 case 0:
15446                         tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
15447                         break;
15448                 case 1:
15449                         tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
15450                         break;
15451                 case 2:
15452                         tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
15453                         break;
15454                 case 3:
15455                         tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
15456                         break;
15457                 }
15458         }
15459
15460         if (!tg3_flag(tp, ENABLE_ASF) &&
15461             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15462             !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15463                 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
15464                                    TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
15465
15466         if (tg3_flag(tp, USE_PHYLIB))
15467                 return tg3_phy_init(tp);
15468
15469         /* Reading the PHY ID register can conflict with ASF
15470          * firmware access to the PHY hardware.
15471          */
15472         err = 0;
15473         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
15474                 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
15475         } else {
15476                 /* Now read the physical PHY_ID from the chip and verify
15477                  * that it is sane.  If it doesn't look good, we fall back
15478                  * to either the hard-coded table based PHY_ID and failing
15479                  * that the value found in the eeprom area.
15480                  */
15481                 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
15482                 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
15483
15484                 hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
15485                 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
15486                 hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
15487
15488                 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
15489         }
15490
15491         if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
15492                 tp->phy_id = hw_phy_id;
15493                 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
15494                         tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15495                 else
15496                         tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
15497         } else {
15498                 if (tp->phy_id != TG3_PHY_ID_INVALID) {
15499                         /* Do nothing, phy ID already set up in
15500                          * tg3_get_eeprom_hw_cfg().
15501                          */
15502                 } else {
15503                         struct subsys_tbl_ent *p;
15504
15505                         /* No eeprom signature?  Try the hardcoded
15506                          * subsys device table.
15507                          */
15508                         p = tg3_lookup_by_subsys(tp);
15509                         if (p) {
15510                                 tp->phy_id = p->phy_id;
15511                         } else if (!tg3_flag(tp, IS_SSB_CORE)) {
15512                                 /* For now we saw the IDs 0xbc050cd0,
15513                                  * 0xbc050f80 and 0xbc050c30 on devices
15514                                  * connected to an BCM4785 and there are
15515                                  * probably more. Just assume that the phy is
15516                                  * supported when it is connected to a SSB core
15517                                  * for now.
15518                                  */
15519                                 return -ENODEV;
15520                         }
15521
15522                         if (!tp->phy_id ||
15523                             tp->phy_id == TG3_PHY_ID_BCM8002)
15524                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15525                 }
15526         }
15527
15528         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15529             (tg3_asic_rev(tp) == ASIC_REV_5719 ||
15530              tg3_asic_rev(tp) == ASIC_REV_5720 ||
15531              tg3_asic_rev(tp) == ASIC_REV_57766 ||
15532              tg3_asic_rev(tp) == ASIC_REV_5762 ||
15533              (tg3_asic_rev(tp) == ASIC_REV_5717 &&
15534               tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) ||
15535              (tg3_asic_rev(tp) == ASIC_REV_57765 &&
15536               tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) {
15537                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
15538
15539                 tp->eee.supported = SUPPORTED_100baseT_Full |
15540                                     SUPPORTED_1000baseT_Full;
15541                 tp->eee.advertised = ADVERTISED_100baseT_Full |
15542                                      ADVERTISED_1000baseT_Full;
15543                 tp->eee.eee_enabled = 1;
15544                 tp->eee.tx_lpi_enabled = 1;
15545                 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US;
15546         }
15547
15548         tg3_phy_init_link_config(tp);
15549
15550         if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
15551             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15552             !tg3_flag(tp, ENABLE_APE) &&
15553             !tg3_flag(tp, ENABLE_ASF)) {
15554                 u32 bmsr, dummy;
15555
15556                 tg3_readphy(tp, MII_BMSR, &bmsr);
15557                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
15558                     (bmsr & BMSR_LSTATUS))
15559                         goto skip_phy_reset;
15560
15561                 err = tg3_phy_reset(tp);
15562                 if (err)
15563                         return err;
15564
15565                 tg3_phy_set_wirespeed(tp);
15566
15567                 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
15568                         tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
15569                                             tp->link_config.flowctrl);
15570
15571                         tg3_writephy(tp, MII_BMCR,
15572                                      BMCR_ANENABLE | BMCR_ANRESTART);
15573                 }
15574         }
15575
15576 skip_phy_reset:
15577         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
15578                 err = tg3_init_5401phy_dsp(tp);
15579                 if (err)
15580                         return err;
15581
15582                 err = tg3_init_5401phy_dsp(tp);
15583         }
15584
15585         return err;
15586 }
15587
15588 static void tg3_read_vpd(struct tg3 *tp)
15589 {
15590         u8 *vpd_data;
15591         unsigned int len, vpdlen;
15592         int i;
15593
15594         vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
15595         if (!vpd_data)
15596                 goto out_no_vpd;
15597
15598         i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15599                                          PCI_VPD_RO_KEYWORD_MFR_ID, &len);
15600         if (i < 0)
15601                 goto partno;
15602
15603         if (len != 4 || memcmp(vpd_data + i, "1028", 4))
15604                 goto partno;
15605
15606         i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15607                                          PCI_VPD_RO_KEYWORD_VENDOR0, &len);
15608         if (i < 0)
15609                 goto partno;
15610
15611         memset(tp->fw_ver, 0, sizeof(tp->fw_ver));
15612         snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, vpd_data + i);
15613
15614 partno:
15615         i = pci_vpd_find_ro_info_keyword(vpd_data, vpdlen,
15616                                          PCI_VPD_RO_KEYWORD_PARTNO, &len);
15617         if (i < 0)
15618                 goto out_not_found;
15619
15620         if (len > TG3_BPN_SIZE)
15621                 goto out_not_found;
15622
15623         memcpy(tp->board_part_number, &vpd_data[i], len);
15624
15625 out_not_found:
15626         kfree(vpd_data);
15627         if (tp->board_part_number[0])
15628                 return;
15629
15630 out_no_vpd:
15631         if (tg3_asic_rev(tp) == ASIC_REV_5717) {
15632                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15633                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
15634                         strcpy(tp->board_part_number, "BCM5717");
15635                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
15636                         strcpy(tp->board_part_number, "BCM5718");
15637                 else
15638                         goto nomatch;
15639         } else if (tg3_asic_rev(tp) == ASIC_REV_57780) {
15640                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
15641                         strcpy(tp->board_part_number, "BCM57780");
15642                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
15643                         strcpy(tp->board_part_number, "BCM57760");
15644                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
15645                         strcpy(tp->board_part_number, "BCM57790");
15646                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
15647                         strcpy(tp->board_part_number, "BCM57788");
15648                 else
15649                         goto nomatch;
15650         } else if (tg3_asic_rev(tp) == ASIC_REV_57765) {
15651                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
15652                         strcpy(tp->board_part_number, "BCM57761");
15653                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
15654                         strcpy(tp->board_part_number, "BCM57765");
15655                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
15656                         strcpy(tp->board_part_number, "BCM57781");
15657                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
15658                         strcpy(tp->board_part_number, "BCM57785");
15659                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
15660                         strcpy(tp->board_part_number, "BCM57791");
15661                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
15662                         strcpy(tp->board_part_number, "BCM57795");
15663                 else
15664                         goto nomatch;
15665         } else if (tg3_asic_rev(tp) == ASIC_REV_57766) {
15666                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
15667                         strcpy(tp->board_part_number, "BCM57762");
15668                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
15669                         strcpy(tp->board_part_number, "BCM57766");
15670                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
15671                         strcpy(tp->board_part_number, "BCM57782");
15672                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15673                         strcpy(tp->board_part_number, "BCM57786");
15674                 else
15675                         goto nomatch;
15676         } else if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15677                 strcpy(tp->board_part_number, "BCM95906");
15678         } else {
15679 nomatch:
15680                 strcpy(tp->board_part_number, "none");
15681         }
15682 }
15683
15684 static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
15685 {
15686         u32 val;
15687
15688         if (tg3_nvram_read(tp, offset, &val) ||
15689             (val & 0xfc000000) != 0x0c000000 ||
15690             tg3_nvram_read(tp, offset + 4, &val) ||
15691             val != 0)
15692                 return 0;
15693
15694         return 1;
15695 }
15696
15697 static void tg3_read_bc_ver(struct tg3 *tp)
15698 {
15699         u32 val, offset, start, ver_offset;
15700         int i, dst_off;
15701         bool newver = false;
15702
15703         if (tg3_nvram_read(tp, 0xc, &offset) ||
15704             tg3_nvram_read(tp, 0x4, &start))
15705                 return;
15706
15707         offset = tg3_nvram_logical_addr(tp, offset);
15708
15709         if (tg3_nvram_read(tp, offset, &val))
15710                 return;
15711
15712         if ((val & 0xfc000000) == 0x0c000000) {
15713                 if (tg3_nvram_read(tp, offset + 4, &val))
15714                         return;
15715
15716                 if (val == 0)
15717                         newver = true;
15718         }
15719
15720         dst_off = strlen(tp->fw_ver);
15721
15722         if (newver) {
15723                 if (TG3_VER_SIZE - dst_off < 16 ||
15724                     tg3_nvram_read(tp, offset + 8, &ver_offset))
15725                         return;
15726
15727                 offset = offset + ver_offset - start;
15728                 for (i = 0; i < 16; i += 4) {
15729                         __be32 v;
15730                         if (tg3_nvram_read_be32(tp, offset + i, &v))
15731                                 return;
15732
15733                         memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
15734                 }
15735         } else {
15736                 u32 major, minor;
15737
15738                 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
15739                         return;
15740
15741                 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
15742                         TG3_NVM_BCVER_MAJSFT;
15743                 minor = ver_offset & TG3_NVM_BCVER_MINMSK;
15744                 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
15745                          "v%d.%02d", major, minor);
15746         }
15747 }
15748
15749 static void tg3_read_hwsb_ver(struct tg3 *tp)
15750 {
15751         u32 val, major, minor;
15752
15753         /* Use native endian representation */
15754         if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
15755                 return;
15756
15757         major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
15758                 TG3_NVM_HWSB_CFG1_MAJSFT;
15759         minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
15760                 TG3_NVM_HWSB_CFG1_MINSFT;
15761
15762         snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
15763 }
15764
15765 static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
15766 {
15767         u32 offset, major, minor, build;
15768
15769         strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
15770
15771         if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
15772                 return;
15773
15774         switch (val & TG3_EEPROM_SB_REVISION_MASK) {
15775         case TG3_EEPROM_SB_REVISION_0:
15776                 offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
15777                 break;
15778         case TG3_EEPROM_SB_REVISION_2:
15779                 offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
15780                 break;
15781         case TG3_EEPROM_SB_REVISION_3:
15782                 offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
15783                 break;
15784         case TG3_EEPROM_SB_REVISION_4:
15785                 offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
15786                 break;
15787         case TG3_EEPROM_SB_REVISION_5:
15788                 offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
15789                 break;
15790         case TG3_EEPROM_SB_REVISION_6:
15791                 offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
15792                 break;
15793         default:
15794                 return;
15795         }
15796
15797         if (tg3_nvram_read(tp, offset, &val))
15798                 return;
15799
15800         build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
15801                 TG3_EEPROM_SB_EDH_BLD_SHFT;
15802         major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
15803                 TG3_EEPROM_SB_EDH_MAJ_SHFT;
15804         minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
15805
15806         if (minor > 99 || build > 26)
15807                 return;
15808
15809         offset = strlen(tp->fw_ver);
15810         snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
15811                  " v%d.%02d", major, minor);
15812
15813         if (build > 0) {
15814                 offset = strlen(tp->fw_ver);
15815                 if (offset < TG3_VER_SIZE - 1)
15816                         tp->fw_ver[offset] = 'a' + build - 1;
15817         }
15818 }
15819
15820 static void tg3_read_mgmtfw_ver(struct tg3 *tp)
15821 {
15822         u32 val, offset, start;
15823         int i, vlen;
15824
15825         for (offset = TG3_NVM_DIR_START;
15826              offset < TG3_NVM_DIR_END;
15827              offset += TG3_NVM_DIRENT_SIZE) {
15828                 if (tg3_nvram_read(tp, offset, &val))
15829                         return;
15830
15831                 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
15832                         break;
15833         }
15834
15835         if (offset == TG3_NVM_DIR_END)
15836                 return;
15837
15838         if (!tg3_flag(tp, 5705_PLUS))
15839                 start = 0x08000000;
15840         else if (tg3_nvram_read(tp, offset - 4, &start))
15841                 return;
15842
15843         if (tg3_nvram_read(tp, offset + 4, &offset) ||
15844             !tg3_fw_img_is_valid(tp, offset) ||
15845             tg3_nvram_read(tp, offset + 8, &val))
15846                 return;
15847
15848         offset += val - start;
15849
15850         vlen = strlen(tp->fw_ver);
15851
15852         tp->fw_ver[vlen++] = ',';
15853         tp->fw_ver[vlen++] = ' ';
15854
15855         for (i = 0; i < 4; i++) {
15856                 __be32 v;
15857                 if (tg3_nvram_read_be32(tp, offset, &v))
15858                         return;
15859
15860                 offset += sizeof(v);
15861
15862                 if (vlen > TG3_VER_SIZE - sizeof(v)) {
15863                         memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
15864                         break;
15865                 }
15866
15867                 memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
15868                 vlen += sizeof(v);
15869         }
15870 }
15871
15872 static void tg3_probe_ncsi(struct tg3 *tp)
15873 {
15874         u32 apedata;
15875
15876         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
15877         if (apedata != APE_SEG_SIG_MAGIC)
15878                 return;
15879
15880         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
15881         if (!(apedata & APE_FW_STATUS_READY))
15882                 return;
15883
15884         if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
15885                 tg3_flag_set(tp, APE_HAS_NCSI);
15886 }
15887
15888 static void tg3_read_dash_ver(struct tg3 *tp)
15889 {
15890         int vlen;
15891         u32 apedata;
15892         char *fwtype;
15893
15894         apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
15895
15896         if (tg3_flag(tp, APE_HAS_NCSI))
15897                 fwtype = "NCSI";
15898         else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725)
15899                 fwtype = "SMASH";
15900         else
15901                 fwtype = "DASH";
15902
15903         vlen = strlen(tp->fw_ver);
15904
15905         snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
15906                  fwtype,
15907                  (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
15908                  (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
15909                  (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
15910                  (apedata & APE_FW_VERSION_BLDMSK));
15911 }
15912
15913 static void tg3_read_otp_ver(struct tg3 *tp)
15914 {
15915         u32 val, val2;
15916
15917         if (tg3_asic_rev(tp) != ASIC_REV_5762)
15918                 return;
15919
15920         if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) &&
15921             !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) &&
15922             TG3_OTP_MAGIC0_VALID(val)) {
15923                 u64 val64 = (u64) val << 32 | val2;
15924                 u32 ver = 0;
15925                 int i, vlen;
15926
15927                 for (i = 0; i < 7; i++) {
15928                         if ((val64 & 0xff) == 0)
15929                                 break;
15930                         ver = val64 & 0xff;
15931                         val64 >>= 8;
15932                 }
15933                 vlen = strlen(tp->fw_ver);
15934                 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver);
15935         }
15936 }
15937
15938 static void tg3_read_fw_ver(struct tg3 *tp)
15939 {
15940         u32 val;
15941         bool vpd_vers = false;
15942
15943         if (tp->fw_ver[0] != 0)
15944                 vpd_vers = true;
15945
15946         if (tg3_flag(tp, NO_NVRAM)) {
15947                 strcat(tp->fw_ver, "sb");
15948                 tg3_read_otp_ver(tp);
15949                 return;
15950         }
15951
15952         if (tg3_nvram_read(tp, 0, &val))
15953                 return;
15954
15955         if (val == TG3_EEPROM_MAGIC)
15956                 tg3_read_bc_ver(tp);
15957         else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
15958                 tg3_read_sb_ver(tp, val);
15959         else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
15960                 tg3_read_hwsb_ver(tp);
15961
15962         if (tg3_flag(tp, ENABLE_ASF)) {
15963                 if (tg3_flag(tp, ENABLE_APE)) {
15964                         tg3_probe_ncsi(tp);
15965                         if (!vpd_vers)
15966                                 tg3_read_dash_ver(tp);
15967                 } else if (!vpd_vers) {
15968                         tg3_read_mgmtfw_ver(tp);
15969                 }
15970         }
15971
15972         tp->fw_ver[TG3_VER_SIZE - 1] = 0;
15973 }
15974
15975 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
15976 {
15977         if (tg3_flag(tp, LRG_PROD_RING_CAP))
15978                 return TG3_RX_RET_MAX_SIZE_5717;
15979         else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
15980                 return TG3_RX_RET_MAX_SIZE_5700;
15981         else
15982                 return TG3_RX_RET_MAX_SIZE_5705;
15983 }
15984
15985 static const struct pci_device_id tg3_write_reorder_chipsets[] = {
15986         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
15987         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
15988         { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
15989         { },
15990 };
15991
15992 static struct pci_dev *tg3_find_peer(struct tg3 *tp)
15993 {
15994         struct pci_dev *peer;
15995         unsigned int func, devnr = tp->pdev->devfn & ~7;
15996
15997         for (func = 0; func < 8; func++) {
15998                 peer = pci_get_slot(tp->pdev->bus, devnr | func);
15999                 if (peer && peer != tp->pdev)
16000                         break;
16001                 pci_dev_put(peer);
16002         }
16003         /* 5704 can be configured in single-port mode, set peer to
16004          * tp->pdev in that case.
16005          */
16006         if (!peer) {
16007                 peer = tp->pdev;
16008                 return peer;
16009         }
16010
16011         /*
16012          * We don't need to keep the refcount elevated; there's no way
16013          * to remove one half of this device without removing the other
16014          */
16015         pci_dev_put(peer);
16016
16017         return peer;
16018 }
16019
16020 static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
16021 {
16022         tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
16023         if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) {
16024                 u32 reg;
16025
16026                 /* All devices that use the alternate
16027                  * ASIC REV location have a CPMU.
16028                  */
16029                 tg3_flag_set(tp, CPMU_PRESENT);
16030
16031                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16032                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
16033                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16034                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16035                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
16036                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
16037                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
16038                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
16039                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
16040                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
16041                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787)
16042                         reg = TG3PCI_GEN2_PRODID_ASICREV;
16043                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
16044                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
16045                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
16046                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
16047                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
16048                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
16049                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
16050                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
16051                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
16052                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
16053                         reg = TG3PCI_GEN15_PRODID_ASICREV;
16054                 else
16055                         reg = TG3PCI_PRODID_ASICREV;
16056
16057                 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
16058         }
16059
16060         /* Wrong chip ID in 5752 A0. This code can be removed later
16061          * as A0 is not in production.
16062          */
16063         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW)
16064                 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
16065
16066         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0)
16067                 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
16068
16069         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16070             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16071             tg3_asic_rev(tp) == ASIC_REV_5720)
16072                 tg3_flag_set(tp, 5717_PLUS);
16073
16074         if (tg3_asic_rev(tp) == ASIC_REV_57765 ||
16075             tg3_asic_rev(tp) == ASIC_REV_57766)
16076                 tg3_flag_set(tp, 57765_CLASS);
16077
16078         if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) ||
16079              tg3_asic_rev(tp) == ASIC_REV_5762)
16080                 tg3_flag_set(tp, 57765_PLUS);
16081
16082         /* Intentionally exclude ASIC_REV_5906 */
16083         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16084             tg3_asic_rev(tp) == ASIC_REV_5787 ||
16085             tg3_asic_rev(tp) == ASIC_REV_5784 ||
16086             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16087             tg3_asic_rev(tp) == ASIC_REV_5785 ||
16088             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16089             tg3_flag(tp, 57765_PLUS))
16090                 tg3_flag_set(tp, 5755_PLUS);
16091
16092         if (tg3_asic_rev(tp) == ASIC_REV_5780 ||
16093             tg3_asic_rev(tp) == ASIC_REV_5714)
16094                 tg3_flag_set(tp, 5780_CLASS);
16095
16096         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16097             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16098             tg3_asic_rev(tp) == ASIC_REV_5906 ||
16099             tg3_flag(tp, 5755_PLUS) ||
16100             tg3_flag(tp, 5780_CLASS))
16101                 tg3_flag_set(tp, 5750_PLUS);
16102
16103         if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
16104             tg3_flag(tp, 5750_PLUS))
16105                 tg3_flag_set(tp, 5705_PLUS);
16106 }
16107
16108 static bool tg3_10_100_only_device(struct tg3 *tp,
16109                                    const struct pci_device_id *ent)
16110 {
16111         u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
16112
16113         if ((tg3_asic_rev(tp) == ASIC_REV_5703 &&
16114              (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
16115             (tp->phy_flags & TG3_PHYFLG_IS_FET))
16116                 return true;
16117
16118         if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
16119                 if (tg3_asic_rev(tp) == ASIC_REV_5705) {
16120                         if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
16121                                 return true;
16122                 } else {
16123                         return true;
16124                 }
16125         }
16126
16127         return false;
16128 }
16129
16130 static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
16131 {
16132         u32 misc_ctrl_reg;
16133         u32 pci_state_reg, grc_misc_cfg;
16134         u32 val;
16135         u16 pci_cmd;
16136         int err;
16137
16138         /* Force memory write invalidate off.  If we leave it on,
16139          * then on 5700_BX chips we have to enable a workaround.
16140          * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
16141          * to match the cacheline size.  The Broadcom driver have this
16142          * workaround but turns MWI off all the times so never uses
16143          * it.  This seems to suggest that the workaround is insufficient.
16144          */
16145         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16146         pci_cmd &= ~PCI_COMMAND_INVALIDATE;
16147         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16148
16149         /* Important! -- Make sure register accesses are byteswapped
16150          * correctly.  Also, for those chips that require it, make
16151          * sure that indirect register accesses are enabled before
16152          * the first operation.
16153          */
16154         pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16155                               &misc_ctrl_reg);
16156         tp->misc_host_ctrl |= (misc_ctrl_reg &
16157                                MISC_HOST_CTRL_CHIPREV);
16158         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16159                                tp->misc_host_ctrl);
16160
16161         tg3_detect_asic_rev(tp, misc_ctrl_reg);
16162
16163         /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
16164          * we need to disable memory and use config. cycles
16165          * only to access all registers. The 5702/03 chips
16166          * can mistakenly decode the special cycles from the
16167          * ICH chipsets as memory write cycles, causing corruption
16168          * of register and memory space. Only certain ICH bridges
16169          * will drive special cycles with non-zero data during the
16170          * address phase which can fall within the 5703's address
16171          * range. This is not an ICH bug as the PCI spec allows
16172          * non-zero address during special cycles. However, only
16173          * these ICH bridges are known to drive non-zero addresses
16174          * during special cycles.
16175          *
16176          * Since special cycles do not cross PCI bridges, we only
16177          * enable this workaround if the 5703 is on the secondary
16178          * bus of these ICH bridges.
16179          */
16180         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) ||
16181             (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) {
16182                 static struct tg3_dev_id {
16183                         u32     vendor;
16184                         u32     device;
16185                         u32     rev;
16186                 } ich_chipsets[] = {
16187                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
16188                           PCI_ANY_ID },
16189                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
16190                           PCI_ANY_ID },
16191                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
16192                           0xa },
16193                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
16194                           PCI_ANY_ID },
16195                         { },
16196                 };
16197                 struct tg3_dev_id *pci_id = &ich_chipsets[0];
16198                 struct pci_dev *bridge = NULL;
16199
16200                 while (pci_id->vendor != 0) {
16201                         bridge = pci_get_device(pci_id->vendor, pci_id->device,
16202                                                 bridge);
16203                         if (!bridge) {
16204                                 pci_id++;
16205                                 continue;
16206                         }
16207                         if (pci_id->rev != PCI_ANY_ID) {
16208                                 if (bridge->revision > pci_id->rev)
16209                                         continue;
16210                         }
16211                         if (bridge->subordinate &&
16212                             (bridge->subordinate->number ==
16213                              tp->pdev->bus->number)) {
16214                                 tg3_flag_set(tp, ICH_WORKAROUND);
16215                                 pci_dev_put(bridge);
16216                                 break;
16217                         }
16218                 }
16219         }
16220
16221         if (tg3_asic_rev(tp) == ASIC_REV_5701) {
16222                 static struct tg3_dev_id {
16223                         u32     vendor;
16224                         u32     device;
16225                 } bridge_chipsets[] = {
16226                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
16227                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
16228                         { },
16229                 };
16230                 struct tg3_dev_id *pci_id = &bridge_chipsets[0];
16231                 struct pci_dev *bridge = NULL;
16232
16233                 while (pci_id->vendor != 0) {
16234                         bridge = pci_get_device(pci_id->vendor,
16235                                                 pci_id->device,
16236                                                 bridge);
16237                         if (!bridge) {
16238                                 pci_id++;
16239                                 continue;
16240                         }
16241                         if (bridge->subordinate &&
16242                             (bridge->subordinate->number <=
16243                              tp->pdev->bus->number) &&
16244                             (bridge->subordinate->busn_res.end >=
16245                              tp->pdev->bus->number)) {
16246                                 tg3_flag_set(tp, 5701_DMA_BUG);
16247                                 pci_dev_put(bridge);
16248                                 break;
16249                         }
16250                 }
16251         }
16252
16253         /* The EPB bridge inside 5714, 5715, and 5780 cannot support
16254          * DMA addresses > 40-bit. This bridge may have other additional
16255          * 57xx devices behind it in some 4-port NIC designs for example.
16256          * Any tg3 device found behind the bridge will also need the 40-bit
16257          * DMA workaround.
16258          */
16259         if (tg3_flag(tp, 5780_CLASS)) {
16260                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16261                 tp->msi_cap = tp->pdev->msi_cap;
16262         } else {
16263                 struct pci_dev *bridge = NULL;
16264
16265                 do {
16266                         bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
16267                                                 PCI_DEVICE_ID_SERVERWORKS_EPB,
16268                                                 bridge);
16269                         if (bridge && bridge->subordinate &&
16270                             (bridge->subordinate->number <=
16271                              tp->pdev->bus->number) &&
16272                             (bridge->subordinate->busn_res.end >=
16273                              tp->pdev->bus->number)) {
16274                                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16275                                 pci_dev_put(bridge);
16276                                 break;
16277                         }
16278                 } while (bridge);
16279         }
16280
16281         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16282             tg3_asic_rev(tp) == ASIC_REV_5714)
16283                 tp->pdev_peer = tg3_find_peer(tp);
16284
16285         /* Determine TSO capabilities */
16286         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0)
16287                 ; /* Do nothing. HW bug. */
16288         else if (tg3_flag(tp, 57765_PLUS))
16289                 tg3_flag_set(tp, HW_TSO_3);
16290         else if (tg3_flag(tp, 5755_PLUS) ||
16291                  tg3_asic_rev(tp) == ASIC_REV_5906)
16292                 tg3_flag_set(tp, HW_TSO_2);
16293         else if (tg3_flag(tp, 5750_PLUS)) {
16294                 tg3_flag_set(tp, HW_TSO_1);
16295                 tg3_flag_set(tp, TSO_BUG);
16296                 if (tg3_asic_rev(tp) == ASIC_REV_5750 &&
16297                     tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2)
16298                         tg3_flag_clear(tp, TSO_BUG);
16299         } else if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16300                    tg3_asic_rev(tp) != ASIC_REV_5701 &&
16301                    tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
16302                 tg3_flag_set(tp, FW_TSO);
16303                 tg3_flag_set(tp, TSO_BUG);
16304                 if (tg3_asic_rev(tp) == ASIC_REV_5705)
16305                         tp->fw_needed = FIRMWARE_TG3TSO5;
16306                 else
16307                         tp->fw_needed = FIRMWARE_TG3TSO;
16308         }
16309
16310         /* Selectively allow TSO based on operating conditions */
16311         if (tg3_flag(tp, HW_TSO_1) ||
16312             tg3_flag(tp, HW_TSO_2) ||
16313             tg3_flag(tp, HW_TSO_3) ||
16314             tg3_flag(tp, FW_TSO)) {
16315                 /* For firmware TSO, assume ASF is disabled.
16316                  * We'll disable TSO later if we discover ASF
16317                  * is enabled in tg3_get_eeprom_hw_cfg().
16318                  */
16319                 tg3_flag_set(tp, TSO_CAPABLE);
16320         } else {
16321                 tg3_flag_clear(tp, TSO_CAPABLE);
16322                 tg3_flag_clear(tp, TSO_BUG);
16323                 tp->fw_needed = NULL;
16324         }
16325
16326         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0)
16327                 tp->fw_needed = FIRMWARE_TG3;
16328
16329         if (tg3_asic_rev(tp) == ASIC_REV_57766)
16330                 tp->fw_needed = FIRMWARE_TG357766;
16331
16332         tp->irq_max = 1;
16333
16334         if (tg3_flag(tp, 5750_PLUS)) {
16335                 tg3_flag_set(tp, SUPPORT_MSI);
16336                 if (tg3_chip_rev(tp) == CHIPREV_5750_AX ||
16337                     tg3_chip_rev(tp) == CHIPREV_5750_BX ||
16338                     (tg3_asic_rev(tp) == ASIC_REV_5714 &&
16339                      tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 &&
16340                      tp->pdev_peer == tp->pdev))
16341                         tg3_flag_clear(tp, SUPPORT_MSI);
16342
16343                 if (tg3_flag(tp, 5755_PLUS) ||
16344                     tg3_asic_rev(tp) == ASIC_REV_5906) {
16345                         tg3_flag_set(tp, 1SHOT_MSI);
16346                 }
16347
16348                 if (tg3_flag(tp, 57765_PLUS)) {
16349                         tg3_flag_set(tp, SUPPORT_MSIX);
16350                         tp->irq_max = TG3_IRQ_MAX_VECS;
16351                 }
16352         }
16353
16354         tp->txq_max = 1;
16355         tp->rxq_max = 1;
16356         if (tp->irq_max > 1) {
16357                 tp->rxq_max = TG3_RSS_MAX_NUM_QS;
16358                 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
16359
16360                 if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
16361                     tg3_asic_rev(tp) == ASIC_REV_5720)
16362                         tp->txq_max = tp->irq_max - 1;
16363         }
16364
16365         if (tg3_flag(tp, 5755_PLUS) ||
16366             tg3_asic_rev(tp) == ASIC_REV_5906)
16367                 tg3_flag_set(tp, SHORT_DMA_BUG);
16368
16369         if (tg3_asic_rev(tp) == ASIC_REV_5719)
16370                 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
16371
16372         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16373             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16374             tg3_asic_rev(tp) == ASIC_REV_5720 ||
16375             tg3_asic_rev(tp) == ASIC_REV_5762)
16376                 tg3_flag_set(tp, LRG_PROD_RING_CAP);
16377
16378         if (tg3_flag(tp, 57765_PLUS) &&
16379             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0)
16380                 tg3_flag_set(tp, USE_JUMBO_BDFLAG);
16381
16382         if (!tg3_flag(tp, 5705_PLUS) ||
16383             tg3_flag(tp, 5780_CLASS) ||
16384             tg3_flag(tp, USE_JUMBO_BDFLAG))
16385                 tg3_flag_set(tp, JUMBO_CAPABLE);
16386
16387         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16388                               &pci_state_reg);
16389
16390         if (pci_is_pcie(tp->pdev)) {
16391                 u16 lnkctl;
16392
16393                 tg3_flag_set(tp, PCI_EXPRESS);
16394
16395                 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
16396                 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
16397                         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16398                                 tg3_flag_clear(tp, HW_TSO_2);
16399                                 tg3_flag_clear(tp, TSO_CAPABLE);
16400                         }
16401                         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
16402                             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16403                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 ||
16404                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1)
16405                                 tg3_flag_set(tp, CLKREQ_BUG);
16406                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) {
16407                         tg3_flag_set(tp, L1PLLPD_EN);
16408                 }
16409         } else if (tg3_asic_rev(tp) == ASIC_REV_5785) {
16410                 /* BCM5785 devices are effectively PCIe devices, and should
16411                  * follow PCIe codepaths, but do not have a PCIe capabilities
16412                  * section.
16413                  */
16414                 tg3_flag_set(tp, PCI_EXPRESS);
16415         } else if (!tg3_flag(tp, 5705_PLUS) ||
16416                    tg3_flag(tp, 5780_CLASS)) {
16417                 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
16418                 if (!tp->pcix_cap) {
16419                         dev_err(&tp->pdev->dev,
16420                                 "Cannot find PCI-X capability, aborting\n");
16421                         return -EIO;
16422                 }
16423
16424                 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
16425                         tg3_flag_set(tp, PCIX_MODE);
16426         }
16427
16428         /* If we have an AMD 762 or VIA K8T800 chipset, write
16429          * reordering to the mailbox registers done by the host
16430          * controller can cause major troubles.  We read back from
16431          * every mailbox register write to force the writes to be
16432          * posted to the chip in order.
16433          */
16434         if (pci_dev_present(tg3_write_reorder_chipsets) &&
16435             !tg3_flag(tp, PCI_EXPRESS))
16436                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
16437
16438         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
16439                              &tp->pci_cacheline_sz);
16440         pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16441                              &tp->pci_lat_timer);
16442         if (tg3_asic_rev(tp) == ASIC_REV_5703 &&
16443             tp->pci_lat_timer < 64) {
16444                 tp->pci_lat_timer = 64;
16445                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16446                                       tp->pci_lat_timer);
16447         }
16448
16449         /* Important! -- It is critical that the PCI-X hw workaround
16450          * situation is decided before the first MMIO register access.
16451          */
16452         if (tg3_chip_rev(tp) == CHIPREV_5700_BX) {
16453                 /* 5700 BX chips need to have their TX producer index
16454                  * mailboxes written twice to workaround a bug.
16455                  */
16456                 tg3_flag_set(tp, TXD_MBOX_HWBUG);
16457
16458                 /* If we are in PCI-X mode, enable register write workaround.
16459                  *
16460                  * The workaround is to use indirect register accesses
16461                  * for all chip writes not to mailbox registers.
16462                  */
16463                 if (tg3_flag(tp, PCIX_MODE)) {
16464                         u32 pm_reg;
16465
16466                         tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16467
16468                         /* The chip can have it's power management PCI config
16469                          * space registers clobbered due to this bug.
16470                          * So explicitly force the chip into D0 here.
16471                          */
16472                         pci_read_config_dword(tp->pdev,
16473                                               tp->pdev->pm_cap + PCI_PM_CTRL,
16474                                               &pm_reg);
16475                         pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
16476                         pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
16477                         pci_write_config_dword(tp->pdev,
16478                                                tp->pdev->pm_cap + PCI_PM_CTRL,
16479                                                pm_reg);
16480
16481                         /* Also, force SERR#/PERR# in PCI command. */
16482                         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16483                         pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
16484                         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16485                 }
16486         }
16487
16488         if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
16489                 tg3_flag_set(tp, PCI_HIGH_SPEED);
16490         if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
16491                 tg3_flag_set(tp, PCI_32BIT);
16492
16493         /* Chip-specific fixup from Broadcom driver */
16494         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) &&
16495             (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
16496                 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
16497                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
16498         }
16499
16500         /* Default fast path register access methods */
16501         tp->read32 = tg3_read32;
16502         tp->write32 = tg3_write32;
16503         tp->read32_mbox = tg3_read32;
16504         tp->write32_mbox = tg3_write32;
16505         tp->write32_tx_mbox = tg3_write32;
16506         tp->write32_rx_mbox = tg3_write32;
16507
16508         /* Various workaround register access methods */
16509         if (tg3_flag(tp, PCIX_TARGET_HWBUG))
16510                 tp->write32 = tg3_write_indirect_reg32;
16511         else if (tg3_asic_rev(tp) == ASIC_REV_5701 ||
16512                  (tg3_flag(tp, PCI_EXPRESS) &&
16513                   tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) {
16514                 /*
16515                  * Back to back register writes can cause problems on these
16516                  * chips, the workaround is to read back all reg writes
16517                  * except those to mailbox regs.
16518                  *
16519                  * See tg3_write_indirect_reg32().
16520                  */
16521                 tp->write32 = tg3_write_flush_reg32;
16522         }
16523
16524         if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
16525                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
16526                 if (tg3_flag(tp, MBOX_WRITE_REORDER))
16527                         tp->write32_rx_mbox = tg3_write_flush_reg32;
16528         }
16529
16530         if (tg3_flag(tp, ICH_WORKAROUND)) {
16531                 tp->read32 = tg3_read_indirect_reg32;
16532                 tp->write32 = tg3_write_indirect_reg32;
16533                 tp->read32_mbox = tg3_read_indirect_mbox;
16534                 tp->write32_mbox = tg3_write_indirect_mbox;
16535                 tp->write32_tx_mbox = tg3_write_indirect_mbox;
16536                 tp->write32_rx_mbox = tg3_write_indirect_mbox;
16537
16538                 iounmap(tp->regs);
16539                 tp->regs = NULL;
16540
16541                 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16542                 pci_cmd &= ~PCI_COMMAND_MEMORY;
16543                 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16544         }
16545         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16546                 tp->read32_mbox = tg3_read32_mbox_5906;
16547                 tp->write32_mbox = tg3_write32_mbox_5906;
16548                 tp->write32_tx_mbox = tg3_write32_mbox_5906;
16549                 tp->write32_rx_mbox = tg3_write32_mbox_5906;
16550         }
16551
16552         if (tp->write32 == tg3_write_indirect_reg32 ||
16553             (tg3_flag(tp, PCIX_MODE) &&
16554              (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16555               tg3_asic_rev(tp) == ASIC_REV_5701)))
16556                 tg3_flag_set(tp, SRAM_USE_CONFIG);
16557
16558         /* The memory arbiter has to be enabled in order for SRAM accesses
16559          * to succeed.  Normally on powerup the tg3 chip firmware will make
16560          * sure it is enabled, but other entities such as system netboot
16561          * code might disable it.
16562          */
16563         val = tr32(MEMARB_MODE);
16564         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
16565
16566         tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
16567         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16568             tg3_flag(tp, 5780_CLASS)) {
16569                 if (tg3_flag(tp, PCIX_MODE)) {
16570                         pci_read_config_dword(tp->pdev,
16571                                               tp->pcix_cap + PCI_X_STATUS,
16572                                               &val);
16573                         tp->pci_fn = val & 0x7;
16574                 }
16575         } else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16576                    tg3_asic_rev(tp) == ASIC_REV_5719 ||
16577                    tg3_asic_rev(tp) == ASIC_REV_5720) {
16578                 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
16579                 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG)
16580                         val = tr32(TG3_CPMU_STATUS);
16581
16582                 if (tg3_asic_rev(tp) == ASIC_REV_5717)
16583                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0;
16584                 else
16585                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
16586                                      TG3_CPMU_STATUS_FSHFT_5719;
16587         }
16588
16589         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
16590                 tp->write32_tx_mbox = tg3_write_flush_reg32;
16591                 tp->write32_rx_mbox = tg3_write_flush_reg32;
16592         }
16593
16594         /* Get eeprom hw config before calling tg3_set_power_state().
16595          * In particular, the TG3_FLAG_IS_NIC flag must be
16596          * determined before calling tg3_set_power_state() so that
16597          * we know whether or not to switch out of Vaux power.
16598          * When the flag is set, it means that GPIO1 is used for eeprom
16599          * write protect and also implies that it is a LOM where GPIOs
16600          * are not used to switch power.
16601          */
16602         tg3_get_eeprom_hw_cfg(tp);
16603
16604         if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) {
16605                 tg3_flag_clear(tp, TSO_CAPABLE);
16606                 tg3_flag_clear(tp, TSO_BUG);
16607                 tp->fw_needed = NULL;
16608         }
16609
16610         if (tg3_flag(tp, ENABLE_APE)) {
16611                 /* Allow reads and writes to the
16612                  * APE register and memory space.
16613                  */
16614                 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
16615                                  PCISTATE_ALLOW_APE_SHMEM_WR |
16616                                  PCISTATE_ALLOW_APE_PSPACE_WR;
16617                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
16618                                        pci_state_reg);
16619
16620                 tg3_ape_lock_init(tp);
16621                 tp->ape_hb_interval =
16622                         msecs_to_jiffies(APE_HOST_HEARTBEAT_INT_5SEC);
16623         }
16624
16625         /* Set up tp->grc_local_ctrl before calling
16626          * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
16627          * will bring 5700's external PHY out of reset.
16628          * It is also used as eeprom write protect on LOMs.
16629          */
16630         tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
16631         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16632             tg3_flag(tp, EEPROM_WRITE_PROT))
16633                 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
16634                                        GRC_LCLCTRL_GPIO_OUTPUT1);
16635         /* Unused GPIO3 must be driven as output on 5752 because there
16636          * are no pull-up resistors on unused GPIO pins.
16637          */
16638         else if (tg3_asic_rev(tp) == ASIC_REV_5752)
16639                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
16640
16641         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16642             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16643             tg3_flag(tp, 57765_CLASS))
16644                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16645
16646         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16647             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
16648                 /* Turn off the debug UART. */
16649                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16650                 if (tg3_flag(tp, IS_NIC))
16651                         /* Keep VMain power. */
16652                         tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
16653                                               GRC_LCLCTRL_GPIO_OUTPUT0;
16654         }
16655
16656         if (tg3_asic_rev(tp) == ASIC_REV_5762)
16657                 tp->grc_local_ctrl |=
16658                         tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL;
16659
16660         /* Switch out of Vaux if it is a NIC */
16661         tg3_pwrsrc_switch_to_vmain(tp);
16662
16663         /* Derive initial jumbo mode from MTU assigned in
16664          * ether_setup() via the alloc_etherdev() call
16665          */
16666         if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
16667                 tg3_flag_set(tp, JUMBO_RING_ENABLE);
16668
16669         /* Determine WakeOnLan speed to use. */
16670         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16671             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16672             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16673             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) {
16674                 tg3_flag_clear(tp, WOL_SPEED_100MB);
16675         } else {
16676                 tg3_flag_set(tp, WOL_SPEED_100MB);
16677         }
16678
16679         if (tg3_asic_rev(tp) == ASIC_REV_5906)
16680                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
16681
16682         /* A few boards don't want Ethernet@WireSpeed phy feature */
16683         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16684             (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16685              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) &&
16686              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) ||
16687             (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
16688             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
16689                 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
16690
16691         if (tg3_chip_rev(tp) == CHIPREV_5703_AX ||
16692             tg3_chip_rev(tp) == CHIPREV_5704_AX)
16693                 tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
16694         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0)
16695                 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
16696
16697         if (tg3_flag(tp, 5705_PLUS) &&
16698             !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
16699             tg3_asic_rev(tp) != ASIC_REV_5785 &&
16700             tg3_asic_rev(tp) != ASIC_REV_57780 &&
16701             !tg3_flag(tp, 57765_PLUS)) {
16702                 if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16703                     tg3_asic_rev(tp) == ASIC_REV_5787 ||
16704                     tg3_asic_rev(tp) == ASIC_REV_5784 ||
16705                     tg3_asic_rev(tp) == ASIC_REV_5761) {
16706                         if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
16707                             tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
16708                                 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
16709                         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
16710                                 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
16711                 } else
16712                         tp->phy_flags |= TG3_PHYFLG_BER_BUG;
16713         }
16714
16715         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
16716             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
16717                 tp->phy_otp = tg3_read_otp_phycfg(tp);
16718                 if (tp->phy_otp == 0)
16719                         tp->phy_otp = TG3_OTP_DEFAULT;
16720         }
16721
16722         if (tg3_flag(tp, CPMU_PRESENT))
16723                 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
16724         else
16725                 tp->mi_mode = MAC_MI_MODE_BASE;
16726
16727         tp->coalesce_mode = 0;
16728         if (tg3_chip_rev(tp) != CHIPREV_5700_AX &&
16729             tg3_chip_rev(tp) != CHIPREV_5700_BX)
16730                 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
16731
16732         /* Set these bits to enable statistics workaround. */
16733         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16734             tg3_asic_rev(tp) == ASIC_REV_5762 ||
16735             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
16736             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) {
16737                 tp->coalesce_mode |= HOSTCC_MODE_ATTN;
16738                 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
16739         }
16740
16741         if (tg3_asic_rev(tp) == ASIC_REV_5785 ||
16742             tg3_asic_rev(tp) == ASIC_REV_57780)
16743                 tg3_flag_set(tp, USE_PHYLIB);
16744
16745         err = tg3_mdio_init(tp);
16746         if (err)
16747                 return err;
16748
16749         /* Initialize data/descriptor byte/word swapping. */
16750         val = tr32(GRC_MODE);
16751         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
16752             tg3_asic_rev(tp) == ASIC_REV_5762)
16753                 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
16754                         GRC_MODE_WORD_SWAP_B2HRX_DATA |
16755                         GRC_MODE_B2HRX_ENABLE |
16756                         GRC_MODE_HTX2B_ENABLE |
16757                         GRC_MODE_HOST_STACKUP);
16758         else
16759                 val &= GRC_MODE_HOST_STACKUP;
16760
16761         tw32(GRC_MODE, val | tp->grc_mode);
16762
16763         tg3_switch_clocks(tp);
16764
16765         /* Clear this out for sanity. */
16766         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
16767
16768         /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */
16769         tw32(TG3PCI_REG_BASE_ADDR, 0);
16770
16771         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16772                               &pci_state_reg);
16773         if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
16774             !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
16775                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16776                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16777                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 ||
16778                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) {
16779                         void __iomem *sram_base;
16780
16781                         /* Write some dummy words into the SRAM status block
16782                          * area, see if it reads back correctly.  If the return
16783                          * value is bad, force enable the PCIX workaround.
16784                          */
16785                         sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
16786
16787                         writel(0x00000000, sram_base);
16788                         writel(0x00000000, sram_base + 4);
16789                         writel(0xffffffff, sram_base + 4);
16790                         if (readl(sram_base) != 0x00000000)
16791                                 tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16792                 }
16793         }
16794
16795         udelay(50);
16796         tg3_nvram_init(tp);
16797
16798         /* If the device has an NVRAM, no need to load patch firmware */
16799         if (tg3_asic_rev(tp) == ASIC_REV_57766 &&
16800             !tg3_flag(tp, NO_NVRAM))
16801                 tp->fw_needed = NULL;
16802
16803         grc_misc_cfg = tr32(GRC_MISC_CFG);
16804         grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
16805
16806         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16807             (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
16808              grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
16809                 tg3_flag_set(tp, IS_5788);
16810
16811         if (!tg3_flag(tp, IS_5788) &&
16812             tg3_asic_rev(tp) != ASIC_REV_5700)
16813                 tg3_flag_set(tp, TAGGED_STATUS);
16814         if (tg3_flag(tp, TAGGED_STATUS)) {
16815                 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
16816                                       HOSTCC_MODE_CLRTICK_TXBD);
16817
16818                 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
16819                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16820                                        tp->misc_host_ctrl);
16821         }
16822
16823         /* Preserve the APE MAC_MODE bits */
16824         if (tg3_flag(tp, ENABLE_APE))
16825                 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
16826         else
16827                 tp->mac_mode = 0;
16828
16829         if (tg3_10_100_only_device(tp, ent))
16830                 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
16831
16832         err = tg3_phy_probe(tp);
16833         if (err) {
16834                 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
16835                 /* ... but do not return immediately ... */
16836                 tg3_mdio_fini(tp);
16837         }
16838
16839         tg3_read_vpd(tp);
16840         tg3_read_fw_ver(tp);
16841
16842         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
16843                 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16844         } else {
16845                 if (tg3_asic_rev(tp) == ASIC_REV_5700)
16846                         tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16847                 else
16848                         tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16849         }
16850
16851         /* 5700 {AX,BX} chips have a broken status block link
16852          * change bit implementation, so we must use the
16853          * status register in those cases.
16854          */
16855         if (tg3_asic_rev(tp) == ASIC_REV_5700)
16856                 tg3_flag_set(tp, USE_LINKCHG_REG);
16857         else
16858                 tg3_flag_clear(tp, USE_LINKCHG_REG);
16859
16860         /* The led_ctrl is set during tg3_phy_probe, here we might
16861          * have to force the link status polling mechanism based
16862          * upon subsystem IDs.
16863          */
16864         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
16865             tg3_asic_rev(tp) == ASIC_REV_5701 &&
16866             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
16867                 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16868                 tg3_flag_set(tp, USE_LINKCHG_REG);
16869         }
16870
16871         /* For all SERDES we poll the MAC status register. */
16872         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
16873                 tg3_flag_set(tp, POLL_SERDES);
16874         else
16875                 tg3_flag_clear(tp, POLL_SERDES);
16876
16877         if (tg3_flag(tp, ENABLE_APE) && tg3_flag(tp, ENABLE_ASF))
16878                 tg3_flag_set(tp, POLL_CPMU_LINK);
16879
16880         tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
16881         tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
16882         if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
16883             tg3_flag(tp, PCIX_MODE)) {
16884                 tp->rx_offset = NET_SKB_PAD;
16885 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
16886                 tp->rx_copy_thresh = ~(u16)0;
16887 #endif
16888         }
16889
16890         tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
16891         tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
16892         tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
16893
16894         tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
16895
16896         /* Increment the rx prod index on the rx std ring by at most
16897          * 8 for these chips to workaround hw errata.
16898          */
16899         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16900             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16901             tg3_asic_rev(tp) == ASIC_REV_5755)
16902                 tp->rx_std_max_post = 8;
16903
16904         if (tg3_flag(tp, ASPM_WORKAROUND))
16905                 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
16906                                      PCIE_PWR_MGMT_L1_THRESH_MSK;
16907
16908         return err;
16909 }
16910
16911 static int tg3_get_device_address(struct tg3 *tp, u8 *addr)
16912 {
16913         u32 hi, lo, mac_offset;
16914         int addr_ok = 0;
16915         int err;
16916
16917         if (!eth_platform_get_mac_address(&tp->pdev->dev, addr))
16918                 return 0;
16919
16920         if (tg3_flag(tp, IS_SSB_CORE)) {
16921                 err = ssb_gige_get_macaddr(tp->pdev, addr);
16922                 if (!err && is_valid_ether_addr(addr))
16923                         return 0;
16924         }
16925
16926         mac_offset = 0x7c;
16927         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16928             tg3_flag(tp, 5780_CLASS)) {
16929                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
16930                         mac_offset = 0xcc;
16931                 if (tg3_nvram_lock(tp))
16932                         tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
16933                 else
16934                         tg3_nvram_unlock(tp);
16935         } else if (tg3_flag(tp, 5717_PLUS)) {
16936                 if (tp->pci_fn & 1)
16937                         mac_offset = 0xcc;
16938                 if (tp->pci_fn > 1)
16939                         mac_offset += 0x18c;
16940         } else if (tg3_asic_rev(tp) == ASIC_REV_5906)
16941                 mac_offset = 0x10;
16942
16943         /* First try to get it from MAC address mailbox. */
16944         tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
16945         if ((hi >> 16) == 0x484b) {
16946                 addr[0] = (hi >>  8) & 0xff;
16947                 addr[1] = (hi >>  0) & 0xff;
16948
16949                 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
16950                 addr[2] = (lo >> 24) & 0xff;
16951                 addr[3] = (lo >> 16) & 0xff;
16952                 addr[4] = (lo >>  8) & 0xff;
16953                 addr[5] = (lo >>  0) & 0xff;
16954
16955                 /* Some old bootcode may report a 0 MAC address in SRAM */
16956                 addr_ok = is_valid_ether_addr(addr);
16957         }
16958         if (!addr_ok) {
16959                 /* Next, try NVRAM. */
16960                 if (!tg3_flag(tp, NO_NVRAM) &&
16961                     !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
16962                     !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
16963                         memcpy(&addr[0], ((char *)&hi) + 2, 2);
16964                         memcpy(&addr[2], (char *)&lo, sizeof(lo));
16965                 }
16966                 /* Finally just fetch it out of the MAC control regs. */
16967                 else {
16968                         hi = tr32(MAC_ADDR_0_HIGH);
16969                         lo = tr32(MAC_ADDR_0_LOW);
16970
16971                         addr[5] = lo & 0xff;
16972                         addr[4] = (lo >> 8) & 0xff;
16973                         addr[3] = (lo >> 16) & 0xff;
16974                         addr[2] = (lo >> 24) & 0xff;
16975                         addr[1] = hi & 0xff;
16976                         addr[0] = (hi >> 8) & 0xff;
16977                 }
16978         }
16979
16980         if (!is_valid_ether_addr(addr))
16981                 return -EINVAL;
16982         return 0;
16983 }
16984
16985 #define BOUNDARY_SINGLE_CACHELINE       1
16986 #define BOUNDARY_MULTI_CACHELINE        2
16987
16988 static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
16989 {
16990         int cacheline_size;
16991         u8 byte;
16992         int goal;
16993
16994         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
16995         if (byte == 0)
16996                 cacheline_size = 1024;
16997         else
16998                 cacheline_size = (int) byte * 4;
16999
17000         /* On 5703 and later chips, the boundary bits have no
17001          * effect.
17002          */
17003         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17004             tg3_asic_rev(tp) != ASIC_REV_5701 &&
17005             !tg3_flag(tp, PCI_EXPRESS))
17006                 goto out;
17007
17008 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
17009         goal = BOUNDARY_MULTI_CACHELINE;
17010 #else
17011 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
17012         goal = BOUNDARY_SINGLE_CACHELINE;
17013 #else
17014         goal = 0;
17015 #endif
17016 #endif
17017
17018         if (tg3_flag(tp, 57765_PLUS)) {
17019                 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
17020                 goto out;
17021         }
17022
17023         if (!goal)
17024                 goto out;
17025
17026         /* PCI controllers on most RISC systems tend to disconnect
17027          * when a device tries to burst across a cache-line boundary.
17028          * Therefore, letting tg3 do so just wastes PCI bandwidth.
17029          *
17030          * Unfortunately, for PCI-E there are only limited
17031          * write-side controls for this, and thus for reads
17032          * we will still get the disconnects.  We'll also waste
17033          * these PCI cycles for both read and write for chips
17034          * other than 5700 and 5701 which do not implement the
17035          * boundary bits.
17036          */
17037         if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
17038                 switch (cacheline_size) {
17039                 case 16:
17040                 case 32:
17041                 case 64:
17042                 case 128:
17043                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17044                                 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
17045                                         DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
17046                         } else {
17047                                 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17048                                         DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17049                         }
17050                         break;
17051
17052                 case 256:
17053                         val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
17054                                 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
17055                         break;
17056
17057                 default:
17058                         val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
17059                                 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
17060                         break;
17061                 }
17062         } else if (tg3_flag(tp, PCI_EXPRESS)) {
17063                 switch (cacheline_size) {
17064                 case 16:
17065                 case 32:
17066                 case 64:
17067                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17068                                 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17069                                 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
17070                                 break;
17071                         }
17072                         fallthrough;
17073                 case 128:
17074                 default:
17075                         val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
17076                         val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
17077                         break;
17078                 }
17079         } else {
17080                 switch (cacheline_size) {
17081                 case 16:
17082                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17083                                 val |= (DMA_RWCTRL_READ_BNDRY_16 |
17084                                         DMA_RWCTRL_WRITE_BNDRY_16);
17085                                 break;
17086                         }
17087                         fallthrough;
17088                 case 32:
17089                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17090                                 val |= (DMA_RWCTRL_READ_BNDRY_32 |
17091                                         DMA_RWCTRL_WRITE_BNDRY_32);
17092                                 break;
17093                         }
17094                         fallthrough;
17095                 case 64:
17096                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17097                                 val |= (DMA_RWCTRL_READ_BNDRY_64 |
17098                                         DMA_RWCTRL_WRITE_BNDRY_64);
17099                                 break;
17100                         }
17101                         fallthrough;
17102                 case 128:
17103                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
17104                                 val |= (DMA_RWCTRL_READ_BNDRY_128 |
17105                                         DMA_RWCTRL_WRITE_BNDRY_128);
17106                                 break;
17107                         }
17108                         fallthrough;
17109                 case 256:
17110                         val |= (DMA_RWCTRL_READ_BNDRY_256 |
17111                                 DMA_RWCTRL_WRITE_BNDRY_256);
17112                         break;
17113                 case 512:
17114                         val |= (DMA_RWCTRL_READ_BNDRY_512 |
17115                                 DMA_RWCTRL_WRITE_BNDRY_512);
17116                         break;
17117                 case 1024:
17118                 default:
17119                         val |= (DMA_RWCTRL_READ_BNDRY_1024 |
17120                                 DMA_RWCTRL_WRITE_BNDRY_1024);
17121                         break;
17122                 }
17123         }
17124
17125 out:
17126         return val;
17127 }
17128
17129 static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
17130                            int size, bool to_device)
17131 {
17132         struct tg3_internal_buffer_desc test_desc;
17133         u32 sram_dma_descs;
17134         int i, ret;
17135
17136         sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
17137
17138         tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
17139         tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
17140         tw32(RDMAC_STATUS, 0);
17141         tw32(WDMAC_STATUS, 0);
17142
17143         tw32(BUFMGR_MODE, 0);
17144         tw32(FTQ_RESET, 0);
17145
17146         test_desc.addr_hi = ((u64) buf_dma) >> 32;
17147         test_desc.addr_lo = buf_dma & 0xffffffff;
17148         test_desc.nic_mbuf = 0x00002100;
17149         test_desc.len = size;
17150
17151         /*
17152          * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
17153          * the *second* time the tg3 driver was getting loaded after an
17154          * initial scan.
17155          *
17156          * Broadcom tells me:
17157          *   ...the DMA engine is connected to the GRC block and a DMA
17158          *   reset may affect the GRC block in some unpredictable way...
17159          *   The behavior of resets to individual blocks has not been tested.
17160          *
17161          * Broadcom noted the GRC reset will also reset all sub-components.
17162          */
17163         if (to_device) {
17164                 test_desc.cqid_sqid = (13 << 8) | 2;
17165
17166                 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
17167                 udelay(40);
17168         } else {
17169                 test_desc.cqid_sqid = (16 << 8) | 7;
17170
17171                 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
17172                 udelay(40);
17173         }
17174         test_desc.flags = 0x00000005;
17175
17176         for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
17177                 u32 val;
17178
17179                 val = *(((u32 *)&test_desc) + i);
17180                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
17181                                        sram_dma_descs + (i * sizeof(u32)));
17182                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
17183         }
17184         pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
17185
17186         if (to_device)
17187                 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
17188         else
17189                 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
17190
17191         ret = -ENODEV;
17192         for (i = 0; i < 40; i++) {
17193                 u32 val;
17194
17195                 if (to_device)
17196                         val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
17197                 else
17198                         val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
17199                 if ((val & 0xffff) == sram_dma_descs) {
17200                         ret = 0;
17201                         break;
17202                 }
17203
17204                 udelay(100);
17205         }
17206
17207         return ret;
17208 }
17209
17210 #define TEST_BUFFER_SIZE        0x2000
17211
17212 static const struct pci_device_id tg3_dma_wait_state_chipsets[] = {
17213         { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
17214         { },
17215 };
17216
17217 static int tg3_test_dma(struct tg3 *tp)
17218 {
17219         dma_addr_t buf_dma;
17220         u32 *buf, saved_dma_rwctrl;
17221         int ret = 0;
17222
17223         buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
17224                                  &buf_dma, GFP_KERNEL);
17225         if (!buf) {
17226                 ret = -ENOMEM;
17227                 goto out_nofree;
17228         }
17229
17230         tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
17231                           (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
17232
17233         tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
17234
17235         if (tg3_flag(tp, 57765_PLUS))
17236                 goto out;
17237
17238         if (tg3_flag(tp, PCI_EXPRESS)) {
17239                 /* DMA read watermark not used on PCIE */
17240                 tp->dma_rwctrl |= 0x00180000;
17241         } else if (!tg3_flag(tp, PCIX_MODE)) {
17242                 if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
17243                     tg3_asic_rev(tp) == ASIC_REV_5750)
17244                         tp->dma_rwctrl |= 0x003f0000;
17245                 else
17246                         tp->dma_rwctrl |= 0x003f000f;
17247         } else {
17248                 if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17249                     tg3_asic_rev(tp) == ASIC_REV_5704) {
17250                         u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
17251                         u32 read_water = 0x7;
17252
17253                         /* If the 5704 is behind the EPB bridge, we can
17254                          * do the less restrictive ONE_DMA workaround for
17255                          * better performance.
17256                          */
17257                         if (tg3_flag(tp, 40BIT_DMA_BUG) &&
17258                             tg3_asic_rev(tp) == ASIC_REV_5704)
17259                                 tp->dma_rwctrl |= 0x8000;
17260                         else if (ccval == 0x6 || ccval == 0x7)
17261                                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17262
17263                         if (tg3_asic_rev(tp) == ASIC_REV_5703)
17264                                 read_water = 4;
17265                         /* Set bit 23 to enable PCIX hw bug fix */
17266                         tp->dma_rwctrl |=
17267                                 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
17268                                 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
17269                                 (1 << 23);
17270                 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) {
17271                         /* 5780 always in PCIX mode */
17272                         tp->dma_rwctrl |= 0x00144000;
17273                 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) {
17274                         /* 5714 always in PCIX mode */
17275                         tp->dma_rwctrl |= 0x00148000;
17276                 } else {
17277                         tp->dma_rwctrl |= 0x001b000f;
17278                 }
17279         }
17280         if (tg3_flag(tp, ONE_DMA_AT_ONCE))
17281                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17282
17283         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17284             tg3_asic_rev(tp) == ASIC_REV_5704)
17285                 tp->dma_rwctrl &= 0xfffffff0;
17286
17287         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
17288             tg3_asic_rev(tp) == ASIC_REV_5701) {
17289                 /* Remove this if it causes problems for some boards. */
17290                 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
17291
17292                 /* On 5700/5701 chips, we need to set this bit.
17293                  * Otherwise the chip will issue cacheline transactions
17294                  * to streamable DMA memory with not all the byte
17295                  * enables turned on.  This is an error on several
17296                  * RISC PCI controllers, in particular sparc64.
17297                  *
17298                  * On 5703/5704 chips, this bit has been reassigned
17299                  * a different meaning.  In particular, it is used
17300                  * on those chips to enable a PCI-X workaround.
17301                  */
17302                 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
17303         }
17304
17305         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17306
17307
17308         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17309             tg3_asic_rev(tp) != ASIC_REV_5701)
17310                 goto out;
17311
17312         /* It is best to perform DMA test with maximum write burst size
17313          * to expose the 5700/5701 write DMA bug.
17314          */
17315         saved_dma_rwctrl = tp->dma_rwctrl;
17316         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17317         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17318
17319         while (1) {
17320                 u32 *p = buf, i;
17321
17322                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
17323                         p[i] = i;
17324
17325                 /* Send the buffer to the chip. */
17326                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true);
17327                 if (ret) {
17328                         dev_err(&tp->pdev->dev,
17329                                 "%s: Buffer write failed. err = %d\n",
17330                                 __func__, ret);
17331                         break;
17332                 }
17333
17334                 /* Now read it back. */
17335                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false);
17336                 if (ret) {
17337                         dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
17338                                 "err = %d\n", __func__, ret);
17339                         break;
17340                 }
17341
17342                 /* Verify it. */
17343                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
17344                         if (p[i] == i)
17345                                 continue;
17346
17347                         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17348                             DMA_RWCTRL_WRITE_BNDRY_16) {
17349                                 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17350                                 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17351                                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17352                                 break;
17353                         } else {
17354                                 dev_err(&tp->pdev->dev,
17355                                         "%s: Buffer corrupted on read back! "
17356                                         "(%d != %d)\n", __func__, p[i], i);
17357                                 ret = -ENODEV;
17358                                 goto out;
17359                         }
17360                 }
17361
17362                 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
17363                         /* Success. */
17364                         ret = 0;
17365                         break;
17366                 }
17367         }
17368         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17369             DMA_RWCTRL_WRITE_BNDRY_16) {
17370                 /* DMA test passed without adjusting DMA boundary,
17371                  * now look for chipsets that are known to expose the
17372                  * DMA bug without failing the test.
17373                  */
17374                 if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
17375                         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17376                         tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17377                 } else {
17378                         /* Safe to use the calculated DMA boundary. */
17379                         tp->dma_rwctrl = saved_dma_rwctrl;
17380                 }
17381
17382                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17383         }
17384
17385 out:
17386         dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
17387 out_nofree:
17388         return ret;
17389 }
17390
17391 static void tg3_init_bufmgr_config(struct tg3 *tp)
17392 {
17393         if (tg3_flag(tp, 57765_PLUS)) {
17394                 tp->bufmgr_config.mbuf_read_dma_low_water =
17395                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17396                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17397                         DEFAULT_MB_MACRX_LOW_WATER_57765;
17398                 tp->bufmgr_config.mbuf_high_water =
17399                         DEFAULT_MB_HIGH_WATER_57765;
17400
17401                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17402                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17403                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17404                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
17405                 tp->bufmgr_config.mbuf_high_water_jumbo =
17406                         DEFAULT_MB_HIGH_WATER_JUMBO_57765;
17407         } else if (tg3_flag(tp, 5705_PLUS)) {
17408                 tp->bufmgr_config.mbuf_read_dma_low_water =
17409                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17410                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17411                         DEFAULT_MB_MACRX_LOW_WATER_5705;
17412                 tp->bufmgr_config.mbuf_high_water =
17413                         DEFAULT_MB_HIGH_WATER_5705;
17414                 if (tg3_asic_rev(tp) == ASIC_REV_5906) {
17415                         tp->bufmgr_config.mbuf_mac_rx_low_water =
17416                                 DEFAULT_MB_MACRX_LOW_WATER_5906;
17417                         tp->bufmgr_config.mbuf_high_water =
17418                                 DEFAULT_MB_HIGH_WATER_5906;
17419                 }
17420
17421                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17422                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
17423                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17424                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
17425                 tp->bufmgr_config.mbuf_high_water_jumbo =
17426                         DEFAULT_MB_HIGH_WATER_JUMBO_5780;
17427         } else {
17428                 tp->bufmgr_config.mbuf_read_dma_low_water =
17429                         DEFAULT_MB_RDMA_LOW_WATER;
17430                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17431                         DEFAULT_MB_MACRX_LOW_WATER;
17432                 tp->bufmgr_config.mbuf_high_water =
17433                         DEFAULT_MB_HIGH_WATER;
17434
17435                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17436                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
17437                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17438                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
17439                 tp->bufmgr_config.mbuf_high_water_jumbo =
17440                         DEFAULT_MB_HIGH_WATER_JUMBO;
17441         }
17442
17443         tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
17444         tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
17445 }
17446
17447 static char *tg3_phy_string(struct tg3 *tp)
17448 {
17449         switch (tp->phy_id & TG3_PHY_ID_MASK) {
17450         case TG3_PHY_ID_BCM5400:        return "5400";
17451         case TG3_PHY_ID_BCM5401:        return "5401";
17452         case TG3_PHY_ID_BCM5411:        return "5411";
17453         case TG3_PHY_ID_BCM5701:        return "5701";
17454         case TG3_PHY_ID_BCM5703:        return "5703";
17455         case TG3_PHY_ID_BCM5704:        return "5704";
17456         case TG3_PHY_ID_BCM5705:        return "5705";
17457         case TG3_PHY_ID_BCM5750:        return "5750";
17458         case TG3_PHY_ID_BCM5752:        return "5752";
17459         case TG3_PHY_ID_BCM5714:        return "5714";
17460         case TG3_PHY_ID_BCM5780:        return "5780";
17461         case TG3_PHY_ID_BCM5755:        return "5755";
17462         case TG3_PHY_ID_BCM5787:        return "5787";
17463         case TG3_PHY_ID_BCM5784:        return "5784";
17464         case TG3_PHY_ID_BCM5756:        return "5722/5756";
17465         case TG3_PHY_ID_BCM5906:        return "5906";
17466         case TG3_PHY_ID_BCM5761:        return "5761";
17467         case TG3_PHY_ID_BCM5718C:       return "5718C";
17468         case TG3_PHY_ID_BCM5718S:       return "5718S";
17469         case TG3_PHY_ID_BCM57765:       return "57765";
17470         case TG3_PHY_ID_BCM5719C:       return "5719C";
17471         case TG3_PHY_ID_BCM5720C:       return "5720C";
17472         case TG3_PHY_ID_BCM5762:        return "5762C";
17473         case TG3_PHY_ID_BCM8002:        return "8002/serdes";
17474         case 0:                 return "serdes";
17475         default:                return "unknown";
17476         }
17477 }
17478
17479 static char *tg3_bus_string(struct tg3 *tp, char *str)
17480 {
17481         if (tg3_flag(tp, PCI_EXPRESS)) {
17482                 strcpy(str, "PCI Express");
17483                 return str;
17484         } else if (tg3_flag(tp, PCIX_MODE)) {
17485                 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
17486
17487                 strcpy(str, "PCIX:");
17488
17489                 if ((clock_ctrl == 7) ||
17490                     ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
17491                      GRC_MISC_CFG_BOARD_ID_5704CIOBE))
17492                         strcat(str, "133MHz");
17493                 else if (clock_ctrl == 0)
17494                         strcat(str, "33MHz");
17495                 else if (clock_ctrl == 2)
17496                         strcat(str, "50MHz");
17497                 else if (clock_ctrl == 4)
17498                         strcat(str, "66MHz");
17499                 else if (clock_ctrl == 6)
17500                         strcat(str, "100MHz");
17501         } else {
17502                 strcpy(str, "PCI:");
17503                 if (tg3_flag(tp, PCI_HIGH_SPEED))
17504                         strcat(str, "66MHz");
17505                 else
17506                         strcat(str, "33MHz");
17507         }
17508         if (tg3_flag(tp, PCI_32BIT))
17509                 strcat(str, ":32-bit");
17510         else
17511                 strcat(str, ":64-bit");
17512         return str;
17513 }
17514
17515 static void tg3_init_coal(struct tg3 *tp)
17516 {
17517         struct ethtool_coalesce *ec = &tp->coal;
17518
17519         memset(ec, 0, sizeof(*ec));
17520         ec->cmd = ETHTOOL_GCOALESCE;
17521         ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
17522         ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
17523         ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
17524         ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
17525         ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
17526         ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
17527         ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
17528         ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
17529         ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
17530
17531         if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
17532                                  HOSTCC_MODE_CLRTICK_TXBD)) {
17533                 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
17534                 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
17535                 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
17536                 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
17537         }
17538
17539         if (tg3_flag(tp, 5705_PLUS)) {
17540                 ec->rx_coalesce_usecs_irq = 0;
17541                 ec->tx_coalesce_usecs_irq = 0;
17542                 ec->stats_block_coalesce_usecs = 0;
17543         }
17544 }
17545
17546 static int tg3_init_one(struct pci_dev *pdev,
17547                                   const struct pci_device_id *ent)
17548 {
17549         struct net_device *dev;
17550         struct tg3 *tp;
17551         int i, err;
17552         u32 sndmbx, rcvmbx, intmbx;
17553         char str[40];
17554         u64 dma_mask, persist_dma_mask;
17555         netdev_features_t features = 0;
17556         u8 addr[ETH_ALEN] __aligned(2);
17557
17558         err = pci_enable_device(pdev);
17559         if (err) {
17560                 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
17561                 return err;
17562         }
17563
17564         err = pci_request_regions(pdev, DRV_MODULE_NAME);
17565         if (err) {
17566                 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
17567                 goto err_out_disable_pdev;
17568         }
17569
17570         pci_set_master(pdev);
17571
17572         dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
17573         if (!dev) {
17574                 err = -ENOMEM;
17575                 goto err_out_free_res;
17576         }
17577
17578         SET_NETDEV_DEV(dev, &pdev->dev);
17579
17580         tp = netdev_priv(dev);
17581         tp->pdev = pdev;
17582         tp->dev = dev;
17583         tp->rx_mode = TG3_DEF_RX_MODE;
17584         tp->tx_mode = TG3_DEF_TX_MODE;
17585         tp->irq_sync = 1;
17586         tp->pcierr_recovery = false;
17587
17588         if (tg3_debug > 0)
17589                 tp->msg_enable = tg3_debug;
17590         else
17591                 tp->msg_enable = TG3_DEF_MSG_ENABLE;
17592
17593         if (pdev_is_ssb_gige_core(pdev)) {
17594                 tg3_flag_set(tp, IS_SSB_CORE);
17595                 if (ssb_gige_must_flush_posted_writes(pdev))
17596                         tg3_flag_set(tp, FLUSH_POSTED_WRITES);
17597                 if (ssb_gige_one_dma_at_once(pdev))
17598                         tg3_flag_set(tp, ONE_DMA_AT_ONCE);
17599                 if (ssb_gige_have_roboswitch(pdev)) {
17600                         tg3_flag_set(tp, USE_PHYLIB);
17601                         tg3_flag_set(tp, ROBOSWITCH);
17602                 }
17603                 if (ssb_gige_is_rgmii(pdev))
17604                         tg3_flag_set(tp, RGMII_MODE);
17605         }
17606
17607         /* The word/byte swap controls here control register access byte
17608          * swapping.  DMA data byte swapping is controlled in the GRC_MODE
17609          * setting below.
17610          */
17611         tp->misc_host_ctrl =
17612                 MISC_HOST_CTRL_MASK_PCI_INT |
17613                 MISC_HOST_CTRL_WORD_SWAP |
17614                 MISC_HOST_CTRL_INDIR_ACCESS |
17615                 MISC_HOST_CTRL_PCISTATE_RW;
17616
17617         /* The NONFRM (non-frame) byte/word swap controls take effect
17618          * on descriptor entries, anything which isn't packet data.
17619          *
17620          * The StrongARM chips on the board (one for tx, one for rx)
17621          * are running in big-endian mode.
17622          */
17623         tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
17624                         GRC_MODE_WSWAP_NONFRM_DATA);
17625 #ifdef __BIG_ENDIAN
17626         tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
17627 #endif
17628         spin_lock_init(&tp->lock);
17629         spin_lock_init(&tp->indirect_lock);
17630         INIT_WORK(&tp->reset_task, tg3_reset_task);
17631
17632         tp->regs = pci_ioremap_bar(pdev, BAR_0);
17633         if (!tp->regs) {
17634                 dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
17635                 err = -ENOMEM;
17636                 goto err_out_free_dev;
17637         }
17638
17639         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
17640             tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
17641             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
17642             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
17643             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
17644             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
17645             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
17646             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
17647             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
17648             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
17649             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
17650             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
17651             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
17652             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
17653             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) {
17654                 tg3_flag_set(tp, ENABLE_APE);
17655                 tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
17656                 if (!tp->aperegs) {
17657                         dev_err(&pdev->dev,
17658                                 "Cannot map APE registers, aborting\n");
17659                         err = -ENOMEM;
17660                         goto err_out_iounmap;
17661                 }
17662         }
17663
17664         tp->rx_pending = TG3_DEF_RX_RING_PENDING;
17665         tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
17666
17667         dev->ethtool_ops = &tg3_ethtool_ops;
17668         dev->watchdog_timeo = TG3_TX_TIMEOUT;
17669         dev->netdev_ops = &tg3_netdev_ops;
17670         dev->irq = pdev->irq;
17671
17672         err = tg3_get_invariants(tp, ent);
17673         if (err) {
17674                 dev_err(&pdev->dev,
17675                         "Problem fetching invariants of chip, aborting\n");
17676                 goto err_out_apeunmap;
17677         }
17678
17679         /* The EPB bridge inside 5714, 5715, and 5780 and any
17680          * device behind the EPB cannot support DMA addresses > 40-bit.
17681          * On 64-bit systems with IOMMU, use 40-bit dma_mask.
17682          * On 64-bit systems without IOMMU, use 64-bit dma_mask and
17683          * do DMA address check in tg3_start_xmit().
17684          */
17685         if (tg3_flag(tp, IS_5788))
17686                 persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
17687         else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
17688                 persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
17689 #ifdef CONFIG_HIGHMEM
17690                 dma_mask = DMA_BIT_MASK(64);
17691 #endif
17692         } else
17693                 persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
17694
17695         /* Configure DMA attributes. */
17696         if (dma_mask > DMA_BIT_MASK(32)) {
17697                 err = dma_set_mask(&pdev->dev, dma_mask);
17698                 if (!err) {
17699                         features |= NETIF_F_HIGHDMA;
17700                         err = dma_set_coherent_mask(&pdev->dev,
17701                                                     persist_dma_mask);
17702                         if (err < 0) {
17703                                 dev_err(&pdev->dev, "Unable to obtain 64 bit "
17704                                         "DMA for consistent allocations\n");
17705                                 goto err_out_apeunmap;
17706                         }
17707                 }
17708         }
17709         if (err || dma_mask == DMA_BIT_MASK(32)) {
17710                 err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
17711                 if (err) {
17712                         dev_err(&pdev->dev,
17713                                 "No usable DMA configuration, aborting\n");
17714                         goto err_out_apeunmap;
17715                 }
17716         }
17717
17718         tg3_init_bufmgr_config(tp);
17719
17720         /* 5700 B0 chips do not support checksumming correctly due
17721          * to hardware bugs.
17722          */
17723         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) {
17724                 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
17725
17726                 if (tg3_flag(tp, 5755_PLUS))
17727                         features |= NETIF_F_IPV6_CSUM;
17728         }
17729
17730         /* TSO is on by default on chips that support hardware TSO.
17731          * Firmware TSO on older chips gives lower performance, so it
17732          * is off by default, but can be enabled using ethtool.
17733          */
17734         if ((tg3_flag(tp, HW_TSO_1) ||
17735              tg3_flag(tp, HW_TSO_2) ||
17736              tg3_flag(tp, HW_TSO_3)) &&
17737             (features & NETIF_F_IP_CSUM))
17738                 features |= NETIF_F_TSO;
17739         if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
17740                 if (features & NETIF_F_IPV6_CSUM)
17741                         features |= NETIF_F_TSO6;
17742                 if (tg3_flag(tp, HW_TSO_3) ||
17743                     tg3_asic_rev(tp) == ASIC_REV_5761 ||
17744                     (tg3_asic_rev(tp) == ASIC_REV_5784 &&
17745                      tg3_chip_rev(tp) != CHIPREV_5784_AX) ||
17746                     tg3_asic_rev(tp) == ASIC_REV_5785 ||
17747                     tg3_asic_rev(tp) == ASIC_REV_57780)
17748                         features |= NETIF_F_TSO_ECN;
17749         }
17750
17751         dev->features |= features | NETIF_F_HW_VLAN_CTAG_TX |
17752                          NETIF_F_HW_VLAN_CTAG_RX;
17753         dev->vlan_features |= features;
17754
17755         /*
17756          * Add loopback capability only for a subset of devices that support
17757          * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
17758          * loopback for the remaining devices.
17759          */
17760         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
17761             !tg3_flag(tp, CPMU_PRESENT))
17762                 /* Add the loopback capability */
17763                 features |= NETIF_F_LOOPBACK;
17764
17765         dev->hw_features |= features;
17766         dev->priv_flags |= IFF_UNICAST_FLT;
17767
17768         /* MTU range: 60 - 9000 or 1500, depending on hardware */
17769         dev->min_mtu = TG3_MIN_MTU;
17770         dev->max_mtu = TG3_MAX_MTU(tp);
17771
17772         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 &&
17773             !tg3_flag(tp, TSO_CAPABLE) &&
17774             !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
17775                 tg3_flag_set(tp, MAX_RXPEND_64);
17776                 tp->rx_pending = 63;
17777         }
17778
17779         err = tg3_get_device_address(tp, addr);
17780         if (err) {
17781                 dev_err(&pdev->dev,
17782                         "Could not obtain valid ethernet address, aborting\n");
17783                 goto err_out_apeunmap;
17784         }
17785         eth_hw_addr_set(dev, addr);
17786
17787         intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
17788         rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
17789         sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
17790         for (i = 0; i < tp->irq_max; i++) {
17791                 struct tg3_napi *tnapi = &tp->napi[i];
17792
17793                 tnapi->tp = tp;
17794                 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
17795
17796                 tnapi->int_mbox = intmbx;
17797                 intmbx += 0x8;
17798
17799                 tnapi->consmbox = rcvmbx;
17800                 tnapi->prodmbox = sndmbx;
17801
17802                 if (i)
17803                         tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
17804                 else
17805                         tnapi->coal_now = HOSTCC_MODE_NOW;
17806
17807                 if (!tg3_flag(tp, SUPPORT_MSIX))
17808                         break;
17809
17810                 /*
17811                  * If we support MSIX, we'll be using RSS.  If we're using
17812                  * RSS, the first vector only handles link interrupts and the
17813                  * remaining vectors handle rx and tx interrupts.  Reuse the
17814                  * mailbox values for the next iteration.  The values we setup
17815                  * above are still useful for the single vectored mode.
17816                  */
17817                 if (!i)
17818                         continue;
17819
17820                 rcvmbx += 0x8;
17821
17822                 if (sndmbx & 0x4)
17823                         sndmbx -= 0x4;
17824                 else
17825                         sndmbx += 0xc;
17826         }
17827
17828         /*
17829          * Reset chip in case UNDI or EFI driver did not shutdown
17830          * DMA self test will enable WDMAC and we'll see (spurious)
17831          * pending DMA on the PCI bus at that point.
17832          */
17833         if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
17834             (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
17835                 tg3_full_lock(tp, 0);
17836                 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
17837                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17838                 tg3_full_unlock(tp);
17839         }
17840
17841         err = tg3_test_dma(tp);
17842         if (err) {
17843                 dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
17844                 goto err_out_apeunmap;
17845         }
17846
17847         tg3_init_coal(tp);
17848
17849         pci_set_drvdata(pdev, dev);
17850
17851         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
17852             tg3_asic_rev(tp) == ASIC_REV_5720 ||
17853             tg3_asic_rev(tp) == ASIC_REV_5762)
17854                 tg3_flag_set(tp, PTP_CAPABLE);
17855
17856         tg3_timer_init(tp);
17857
17858         tg3_carrier_off(tp);
17859
17860         err = register_netdev(dev);
17861         if (err) {
17862                 dev_err(&pdev->dev, "Cannot register net device, aborting\n");
17863                 goto err_out_apeunmap;
17864         }
17865
17866         if (tg3_flag(tp, PTP_CAPABLE)) {
17867                 tg3_ptp_init(tp);
17868                 tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
17869                                                    &tp->pdev->dev);
17870                 if (IS_ERR(tp->ptp_clock))
17871                         tp->ptp_clock = NULL;
17872         }
17873
17874         netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
17875                     tp->board_part_number,
17876                     tg3_chip_rev_id(tp),
17877                     tg3_bus_string(tp, str),
17878                     dev->dev_addr);
17879
17880         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) {
17881                 char *ethtype;
17882
17883                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
17884                         ethtype = "10/100Base-TX";
17885                 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
17886                         ethtype = "1000Base-SX";
17887                 else
17888                         ethtype = "10/100/1000Base-T";
17889
17890                 netdev_info(dev, "attached PHY is %s (%s Ethernet) "
17891                             "(WireSpeed[%d], EEE[%d])\n",
17892                             tg3_phy_string(tp), ethtype,
17893                             (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
17894                             (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
17895         }
17896
17897         netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
17898                     (dev->features & NETIF_F_RXCSUM) != 0,
17899                     tg3_flag(tp, USE_LINKCHG_REG) != 0,
17900                     (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
17901                     tg3_flag(tp, ENABLE_ASF) != 0,
17902                     tg3_flag(tp, TSO_CAPABLE) != 0);
17903         netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
17904                     tp->dma_rwctrl,
17905                     pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
17906                     ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
17907
17908         pci_save_state(pdev);
17909
17910         return 0;
17911
17912 err_out_apeunmap:
17913         if (tp->aperegs) {
17914                 iounmap(tp->aperegs);
17915                 tp->aperegs = NULL;
17916         }
17917
17918 err_out_iounmap:
17919         if (tp->regs) {
17920                 iounmap(tp->regs);
17921                 tp->regs = NULL;
17922         }
17923
17924 err_out_free_dev:
17925         free_netdev(dev);
17926
17927 err_out_free_res:
17928         pci_release_regions(pdev);
17929
17930 err_out_disable_pdev:
17931         if (pci_is_enabled(pdev))
17932                 pci_disable_device(pdev);
17933         return err;
17934 }
17935
17936 static void tg3_remove_one(struct pci_dev *pdev)
17937 {
17938         struct net_device *dev = pci_get_drvdata(pdev);
17939
17940         if (dev) {
17941                 struct tg3 *tp = netdev_priv(dev);
17942
17943                 tg3_ptp_fini(tp);
17944
17945                 release_firmware(tp->fw);
17946
17947                 tg3_reset_task_cancel(tp);
17948
17949                 if (tg3_flag(tp, USE_PHYLIB)) {
17950                         tg3_phy_fini(tp);
17951                         tg3_mdio_fini(tp);
17952                 }
17953
17954                 unregister_netdev(dev);
17955                 if (tp->aperegs) {
17956                         iounmap(tp->aperegs);
17957                         tp->aperegs = NULL;
17958                 }
17959                 if (tp->regs) {
17960                         iounmap(tp->regs);
17961                         tp->regs = NULL;
17962                 }
17963                 free_netdev(dev);
17964                 pci_release_regions(pdev);
17965                 pci_disable_device(pdev);
17966         }
17967 }
17968
17969 #ifdef CONFIG_PM_SLEEP
17970 static int tg3_suspend(struct device *device)
17971 {
17972         struct net_device *dev = dev_get_drvdata(device);
17973         struct tg3 *tp = netdev_priv(dev);
17974         int err = 0;
17975
17976         rtnl_lock();
17977
17978         if (!netif_running(dev))
17979                 goto unlock;
17980
17981         tg3_reset_task_cancel(tp);
17982         tg3_phy_stop(tp);
17983         tg3_netif_stop(tp);
17984
17985         tg3_timer_stop(tp);
17986
17987         tg3_full_lock(tp, 1);
17988         tg3_disable_ints(tp);
17989         tg3_full_unlock(tp);
17990
17991         netif_device_detach(dev);
17992
17993         tg3_full_lock(tp, 0);
17994         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17995         tg3_flag_clear(tp, INIT_COMPLETE);
17996         tg3_full_unlock(tp);
17997
17998         err = tg3_power_down_prepare(tp);
17999         if (err) {
18000                 int err2;
18001
18002                 tg3_full_lock(tp, 0);
18003
18004                 tg3_flag_set(tp, INIT_COMPLETE);
18005                 err2 = tg3_restart_hw(tp, true);
18006                 if (err2)
18007                         goto out;
18008
18009                 tg3_timer_start(tp);
18010
18011                 netif_device_attach(dev);
18012                 tg3_netif_start(tp);
18013
18014 out:
18015                 tg3_full_unlock(tp);
18016
18017                 if (!err2)
18018                         tg3_phy_start(tp);
18019         }
18020
18021 unlock:
18022         rtnl_unlock();
18023         return err;
18024 }
18025
18026 static int tg3_resume(struct device *device)
18027 {
18028         struct net_device *dev = dev_get_drvdata(device);
18029         struct tg3 *tp = netdev_priv(dev);
18030         int err = 0;
18031
18032         rtnl_lock();
18033
18034         if (!netif_running(dev))
18035                 goto unlock;
18036
18037         netif_device_attach(dev);
18038
18039         tg3_full_lock(tp, 0);
18040
18041         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18042
18043         tg3_flag_set(tp, INIT_COMPLETE);
18044         err = tg3_restart_hw(tp,
18045                              !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
18046         if (err)
18047                 goto out;
18048
18049         tg3_timer_start(tp);
18050
18051         tg3_netif_start(tp);
18052
18053 out:
18054         tg3_full_unlock(tp);
18055
18056         if (!err)
18057                 tg3_phy_start(tp);
18058
18059 unlock:
18060         rtnl_unlock();
18061         return err;
18062 }
18063 #endif /* CONFIG_PM_SLEEP */
18064
18065 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
18066
18067 static void tg3_shutdown(struct pci_dev *pdev)
18068 {
18069         struct net_device *dev = pci_get_drvdata(pdev);
18070         struct tg3 *tp = netdev_priv(dev);
18071
18072         tg3_reset_task_cancel(tp);
18073
18074         rtnl_lock();
18075
18076         netif_device_detach(dev);
18077
18078         if (netif_running(dev))
18079                 dev_close(dev);
18080
18081         tg3_power_down(tp);
18082
18083         rtnl_unlock();
18084
18085         pci_disable_device(pdev);
18086 }
18087
18088 /**
18089  * tg3_io_error_detected - called when PCI error is detected
18090  * @pdev: Pointer to PCI device
18091  * @state: The current pci connection state
18092  *
18093  * This function is called after a PCI bus error affecting
18094  * this device has been detected.
18095  */
18096 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
18097                                               pci_channel_state_t state)
18098 {
18099         struct net_device *netdev = pci_get_drvdata(pdev);
18100         struct tg3 *tp = netdev_priv(netdev);
18101         pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
18102
18103         netdev_info(netdev, "PCI I/O error detected\n");
18104
18105         /* Want to make sure that the reset task doesn't run */
18106         tg3_reset_task_cancel(tp);
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         netif_device_detach(netdev);
18125
18126         /* Clean up software state, even if MMIO is blocked */
18127         tg3_full_lock(tp, 0);
18128         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
18129         tg3_full_unlock(tp);
18130
18131 done:
18132         if (state == pci_channel_io_perm_failure) {
18133                 if (netdev) {
18134                         tg3_napi_enable(tp);
18135                         dev_close(netdev);
18136                 }
18137                 err = PCI_ERS_RESULT_DISCONNECT;
18138         } else {
18139                 pci_disable_device(pdev);
18140         }
18141
18142         rtnl_unlock();
18143
18144         return err;
18145 }
18146
18147 /**
18148  * tg3_io_slot_reset - called after the pci bus has been reset.
18149  * @pdev: Pointer to PCI device
18150  *
18151  * Restart the card from scratch, as if from a cold-boot.
18152  * At this point, the card has exprienced a hard reset,
18153  * followed by fixups by BIOS, and has its config space
18154  * set up identically to what it was at cold boot.
18155  */
18156 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
18157 {
18158         struct net_device *netdev = pci_get_drvdata(pdev);
18159         struct tg3 *tp = netdev_priv(netdev);
18160         pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
18161         int err;
18162
18163         rtnl_lock();
18164
18165         if (pci_enable_device(pdev)) {
18166                 dev_err(&pdev->dev,
18167                         "Cannot re-enable PCI device after reset.\n");
18168                 goto done;
18169         }
18170
18171         pci_set_master(pdev);
18172         pci_restore_state(pdev);
18173         pci_save_state(pdev);
18174
18175         if (!netdev || !netif_running(netdev)) {
18176                 rc = PCI_ERS_RESULT_RECOVERED;
18177                 goto done;
18178         }
18179
18180         err = tg3_power_up(tp);
18181         if (err)
18182                 goto done;
18183
18184         rc = PCI_ERS_RESULT_RECOVERED;
18185
18186 done:
18187         if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) {
18188                 tg3_napi_enable(tp);
18189                 dev_close(netdev);
18190         }
18191         rtnl_unlock();
18192
18193         return rc;
18194 }
18195
18196 /**
18197  * tg3_io_resume - called when traffic can start flowing again.
18198  * @pdev: Pointer to PCI device
18199  *
18200  * This callback is called when the error recovery driver tells
18201  * us that its OK to resume normal operation.
18202  */
18203 static void tg3_io_resume(struct pci_dev *pdev)
18204 {
18205         struct net_device *netdev = pci_get_drvdata(pdev);
18206         struct tg3 *tp = netdev_priv(netdev);
18207         int err;
18208
18209         rtnl_lock();
18210
18211         if (!netdev || !netif_running(netdev))
18212                 goto done;
18213
18214         tg3_full_lock(tp, 0);
18215         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
18216         tg3_flag_set(tp, INIT_COMPLETE);
18217         err = tg3_restart_hw(tp, true);
18218         if (err) {
18219                 tg3_full_unlock(tp);
18220                 netdev_err(netdev, "Cannot restart hardware after reset.\n");
18221                 goto done;
18222         }
18223
18224         netif_device_attach(netdev);
18225
18226         tg3_timer_start(tp);
18227
18228         tg3_netif_start(tp);
18229
18230         tg3_full_unlock(tp);
18231
18232         tg3_phy_start(tp);
18233
18234 done:
18235         tp->pcierr_recovery = false;
18236         rtnl_unlock();
18237 }
18238
18239 static const struct pci_error_handlers tg3_err_handler = {
18240         .error_detected = tg3_io_error_detected,
18241         .slot_reset     = tg3_io_slot_reset,
18242         .resume         = tg3_io_resume
18243 };
18244
18245 static struct pci_driver tg3_driver = {
18246         .name           = DRV_MODULE_NAME,
18247         .id_table       = tg3_pci_tbl,
18248         .probe          = tg3_init_one,
18249         .remove         = tg3_remove_one,
18250         .err_handler    = &tg3_err_handler,
18251         .driver.pm      = &tg3_pm_ops,
18252         .shutdown       = tg3_shutdown,
18253 };
18254
18255 module_pci_driver(tg3_driver);