tg3: avoid double-freeing of rx data memory
[cascardo/linux.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-2013 Broadcom Corporation.
8  *
9  * Firmware is:
10  *      Derived from proprietary unpublished source code,
11  *      Copyright (C) 2000-2003 Broadcom Corporation.
12  *
13  *      Permission is hereby granted for the distribution of this firmware
14  *      data in hexadecimal or equivalent format, provided this copyright
15  *      notice is accompanying it.
16  */
17
18
19 #include <linux/module.h>
20 #include <linux/moduleparam.h>
21 #include <linux/stringify.h>
22 #include <linux/kernel.h>
23 #include <linux/types.h>
24 #include <linux/compiler.h>
25 #include <linux/slab.h>
26 #include <linux/delay.h>
27 #include <linux/in.h>
28 #include <linux/init.h>
29 #include <linux/interrupt.h>
30 #include <linux/ioport.h>
31 #include <linux/pci.h>
32 #include <linux/netdevice.h>
33 #include <linux/etherdevice.h>
34 #include <linux/skbuff.h>
35 #include <linux/ethtool.h>
36 #include <linux/mdio.h>
37 #include <linux/mii.h>
38 #include <linux/phy.h>
39 #include <linux/brcmphy.h>
40 #include <linux/if_vlan.h>
41 #include <linux/ip.h>
42 #include <linux/tcp.h>
43 #include <linux/workqueue.h>
44 #include <linux/prefetch.h>
45 #include <linux/dma-mapping.h>
46 #include <linux/firmware.h>
47 #include <linux/ssb/ssb_driver_gige.h>
48 #include <linux/hwmon.h>
49 #include <linux/hwmon-sysfs.h>
50
51 #include <net/checksum.h>
52 #include <net/ip.h>
53
54 #include <linux/io.h>
55 #include <asm/byteorder.h>
56 #include <linux/uaccess.h>
57
58 #include <uapi/linux/net_tstamp.h>
59 #include <linux/ptp_clock_kernel.h>
60
61 #ifdef CONFIG_SPARC
62 #include <asm/idprom.h>
63 #include <asm/prom.h>
64 #endif
65
66 #define BAR_0   0
67 #define BAR_2   2
68
69 #include "tg3.h"
70
71 /* Functions & macros to verify TG3_FLAGS types */
72
73 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
74 {
75         return test_bit(flag, bits);
76 }
77
78 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
79 {
80         set_bit(flag, bits);
81 }
82
83 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
84 {
85         clear_bit(flag, bits);
86 }
87
88 #define tg3_flag(tp, flag)                              \
89         _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
90 #define tg3_flag_set(tp, flag)                          \
91         _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
92 #define tg3_flag_clear(tp, flag)                        \
93         _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
94
95 #define DRV_MODULE_NAME         "tg3"
96 #define TG3_MAJ_NUM                     3
97 #define TG3_MIN_NUM                     134
98 #define DRV_MODULE_VERSION      \
99         __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
100 #define DRV_MODULE_RELDATE      "Sep 16, 2013"
101
102 #define RESET_KIND_SHUTDOWN     0
103 #define RESET_KIND_INIT         1
104 #define RESET_KIND_SUSPEND      2
105
106 #define TG3_DEF_RX_MODE         0
107 #define TG3_DEF_TX_MODE         0
108 #define TG3_DEF_MSG_ENABLE        \
109         (NETIF_MSG_DRV          | \
110          NETIF_MSG_PROBE        | \
111          NETIF_MSG_LINK         | \
112          NETIF_MSG_TIMER        | \
113          NETIF_MSG_IFDOWN       | \
114          NETIF_MSG_IFUP         | \
115          NETIF_MSG_RX_ERR       | \
116          NETIF_MSG_TX_ERR)
117
118 #define TG3_GRC_LCLCTL_PWRSW_DELAY      100
119
120 /* length of time before we decide the hardware is borked,
121  * and dev->tx_timeout() should be called to fix the problem
122  */
123
124 #define TG3_TX_TIMEOUT                  (5 * HZ)
125
126 /* hardware minimum and maximum for a single frame's data payload */
127 #define TG3_MIN_MTU                     60
128 #define TG3_MAX_MTU(tp) \
129         (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
130
131 /* These numbers seem to be hard coded in the NIC firmware somehow.
132  * You can't change the ring sizes, but you can change where you place
133  * them in the NIC onboard memory.
134  */
135 #define TG3_RX_STD_RING_SIZE(tp) \
136         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
137          TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
138 #define TG3_DEF_RX_RING_PENDING         200
139 #define TG3_RX_JMB_RING_SIZE(tp) \
140         (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
141          TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
142 #define TG3_DEF_RX_JUMBO_RING_PENDING   100
143
144 /* Do not place this n-ring entries value into the tp struct itself,
145  * we really want to expose these constants to GCC so that modulo et
146  * al.  operations are done with shifts and masks instead of with
147  * hw multiply/modulo instructions.  Another solution would be to
148  * replace things like '% foo' with '& (foo - 1)'.
149  */
150
151 #define TG3_TX_RING_SIZE                512
152 #define TG3_DEF_TX_RING_PENDING         (TG3_TX_RING_SIZE - 1)
153
154 #define TG3_RX_STD_RING_BYTES(tp) \
155         (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
156 #define TG3_RX_JMB_RING_BYTES(tp) \
157         (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
158 #define TG3_RX_RCB_RING_BYTES(tp) \
159         (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
160 #define TG3_TX_RING_BYTES       (sizeof(struct tg3_tx_buffer_desc) * \
161                                  TG3_TX_RING_SIZE)
162 #define NEXT_TX(N)              (((N) + 1) & (TG3_TX_RING_SIZE - 1))
163
164 #define TG3_DMA_BYTE_ENAB               64
165
166 #define TG3_RX_STD_DMA_SZ               1536
167 #define TG3_RX_JMB_DMA_SZ               9046
168
169 #define TG3_RX_DMA_TO_MAP_SZ(x)         ((x) + TG3_DMA_BYTE_ENAB)
170
171 #define TG3_RX_STD_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
172 #define TG3_RX_JMB_MAP_SZ               TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
173
174 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
175         (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
176
177 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
178         (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
179
180 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
181  * that are at least dword aligned when used in PCIX mode.  The driver
182  * works around this bug by double copying the packet.  This workaround
183  * is built into the normal double copy length check for efficiency.
184  *
185  * However, the double copy is only necessary on those architectures
186  * where unaligned memory accesses are inefficient.  For those architectures
187  * where unaligned memory accesses incur little penalty, we can reintegrate
188  * the 5701 in the normal rx path.  Doing so saves a device structure
189  * dereference by hardcoding the double copy threshold in place.
190  */
191 #define TG3_RX_COPY_THRESHOLD           256
192 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
193         #define TG3_RX_COPY_THRESH(tp)  TG3_RX_COPY_THRESHOLD
194 #else
195         #define TG3_RX_COPY_THRESH(tp)  ((tp)->rx_copy_thresh)
196 #endif
197
198 #if (NET_IP_ALIGN != 0)
199 #define TG3_RX_OFFSET(tp)       ((tp)->rx_offset)
200 #else
201 #define TG3_RX_OFFSET(tp)       (NET_SKB_PAD)
202 #endif
203
204 /* minimum number of free TX descriptors required to wake up TX process */
205 #define TG3_TX_WAKEUP_THRESH(tnapi)             ((tnapi)->tx_pending / 4)
206 #define TG3_TX_BD_DMA_MAX_2K            2048
207 #define TG3_TX_BD_DMA_MAX_4K            4096
208
209 #define TG3_RAW_IP_ALIGN 2
210
211 #define TG3_FW_UPDATE_TIMEOUT_SEC       5
212 #define TG3_FW_UPDATE_FREQ_SEC          (TG3_FW_UPDATE_TIMEOUT_SEC / 2)
213
214 #define FIRMWARE_TG3            "tigon/tg3.bin"
215 #define FIRMWARE_TG357766       "tigon/tg357766.bin"
216 #define FIRMWARE_TG3TSO         "tigon/tg3_tso.bin"
217 #define FIRMWARE_TG3TSO5        "tigon/tg3_tso5.bin"
218
219 static char version[] =
220         DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")";
221
222 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
223 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
224 MODULE_LICENSE("GPL");
225 MODULE_VERSION(DRV_MODULE_VERSION);
226 MODULE_FIRMWARE(FIRMWARE_TG3);
227 MODULE_FIRMWARE(FIRMWARE_TG3TSO);
228 MODULE_FIRMWARE(FIRMWARE_TG3TSO5);
229
230 static int tg3_debug = -1;      /* -1 == use TG3_DEF_MSG_ENABLE as value */
231 module_param(tg3_debug, int, 0);
232 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
233
234 #define TG3_DRV_DATA_FLAG_10_100_ONLY   0x0001
235 #define TG3_DRV_DATA_FLAG_5705_10_100   0x0002
236
237 static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
238         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
239         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
240         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
241         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
242         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
243         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
244         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
245         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
246         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
247         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
248         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
249         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
250         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
251         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
252         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
253         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
254         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
255         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
256         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
257          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
258                         TG3_DRV_DATA_FLAG_5705_10_100},
259         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2),
260          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
261                         TG3_DRV_DATA_FLAG_5705_10_100},
262         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
263         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
264          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
265                         TG3_DRV_DATA_FLAG_5705_10_100},
266         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
267         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
268         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
269         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
270         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
271         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
272          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
273         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
274         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
275         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
276         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
277         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
278          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
279         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
280         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
281         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
282         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
283         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
284         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
285         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
286         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
287                         PCI_VENDOR_ID_LENOVO,
288                         TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
289          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
290         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
291         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
292          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
293         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
294         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
295         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
296         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
297         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
298         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
299         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
300         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
301         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
302         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
303         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
304         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
305         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
306         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
307         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)},
308         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
309         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
310         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
311         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
312                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
313          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
314         {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
315                         PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
316          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
317         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
318         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
319         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
320          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
321         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
322         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
323         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
324         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)},
325         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)},
326         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
327         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
328         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
329         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
330          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
331         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
332          .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
333         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
334         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
335         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
336         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57766)},
337         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5762)},
338         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5725)},
339         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5727)},
340         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57764)},
341         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57767)},
342         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57787)},
343         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57782)},
344         {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57786)},
345         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
346         {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
347         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
348         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
349         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
350         {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
351         {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
352         {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
353         {}
354 };
355
356 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
357
358 static const struct {
359         const char string[ETH_GSTRING_LEN];
360 } ethtool_stats_keys[] = {
361         { "rx_octets" },
362         { "rx_fragments" },
363         { "rx_ucast_packets" },
364         { "rx_mcast_packets" },
365         { "rx_bcast_packets" },
366         { "rx_fcs_errors" },
367         { "rx_align_errors" },
368         { "rx_xon_pause_rcvd" },
369         { "rx_xoff_pause_rcvd" },
370         { "rx_mac_ctrl_rcvd" },
371         { "rx_xoff_entered" },
372         { "rx_frame_too_long_errors" },
373         { "rx_jabbers" },
374         { "rx_undersize_packets" },
375         { "rx_in_length_errors" },
376         { "rx_out_length_errors" },
377         { "rx_64_or_less_octet_packets" },
378         { "rx_65_to_127_octet_packets" },
379         { "rx_128_to_255_octet_packets" },
380         { "rx_256_to_511_octet_packets" },
381         { "rx_512_to_1023_octet_packets" },
382         { "rx_1024_to_1522_octet_packets" },
383         { "rx_1523_to_2047_octet_packets" },
384         { "rx_2048_to_4095_octet_packets" },
385         { "rx_4096_to_8191_octet_packets" },
386         { "rx_8192_to_9022_octet_packets" },
387
388         { "tx_octets" },
389         { "tx_collisions" },
390
391         { "tx_xon_sent" },
392         { "tx_xoff_sent" },
393         { "tx_flow_control" },
394         { "tx_mac_errors" },
395         { "tx_single_collisions" },
396         { "tx_mult_collisions" },
397         { "tx_deferred" },
398         { "tx_excessive_collisions" },
399         { "tx_late_collisions" },
400         { "tx_collide_2times" },
401         { "tx_collide_3times" },
402         { "tx_collide_4times" },
403         { "tx_collide_5times" },
404         { "tx_collide_6times" },
405         { "tx_collide_7times" },
406         { "tx_collide_8times" },
407         { "tx_collide_9times" },
408         { "tx_collide_10times" },
409         { "tx_collide_11times" },
410         { "tx_collide_12times" },
411         { "tx_collide_13times" },
412         { "tx_collide_14times" },
413         { "tx_collide_15times" },
414         { "tx_ucast_packets" },
415         { "tx_mcast_packets" },
416         { "tx_bcast_packets" },
417         { "tx_carrier_sense_errors" },
418         { "tx_discards" },
419         { "tx_errors" },
420
421         { "dma_writeq_full" },
422         { "dma_write_prioq_full" },
423         { "rxbds_empty" },
424         { "rx_discards" },
425         { "rx_errors" },
426         { "rx_threshold_hit" },
427
428         { "dma_readq_full" },
429         { "dma_read_prioq_full" },
430         { "tx_comp_queue_full" },
431
432         { "ring_set_send_prod_index" },
433         { "ring_status_update" },
434         { "nic_irqs" },
435         { "nic_avoided_irqs" },
436         { "nic_tx_threshold_hit" },
437
438         { "mbuf_lwm_thresh_hit" },
439 };
440
441 #define TG3_NUM_STATS   ARRAY_SIZE(ethtool_stats_keys)
442 #define TG3_NVRAM_TEST          0
443 #define TG3_LINK_TEST           1
444 #define TG3_REGISTER_TEST       2
445 #define TG3_MEMORY_TEST         3
446 #define TG3_MAC_LOOPB_TEST      4
447 #define TG3_PHY_LOOPB_TEST      5
448 #define TG3_EXT_LOOPB_TEST      6
449 #define TG3_INTERRUPT_TEST      7
450
451
452 static const struct {
453         const char string[ETH_GSTRING_LEN];
454 } ethtool_test_keys[] = {
455         [TG3_NVRAM_TEST]        = { "nvram test        (online) " },
456         [TG3_LINK_TEST]         = { "link test         (online) " },
457         [TG3_REGISTER_TEST]     = { "register test     (offline)" },
458         [TG3_MEMORY_TEST]       = { "memory test       (offline)" },
459         [TG3_MAC_LOOPB_TEST]    = { "mac loopback test (offline)" },
460         [TG3_PHY_LOOPB_TEST]    = { "phy loopback test (offline)" },
461         [TG3_EXT_LOOPB_TEST]    = { "ext loopback test (offline)" },
462         [TG3_INTERRUPT_TEST]    = { "interrupt test    (offline)" },
463 };
464
465 #define TG3_NUM_TEST    ARRAY_SIZE(ethtool_test_keys)
466
467
468 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
469 {
470         writel(val, tp->regs + off);
471 }
472
473 static u32 tg3_read32(struct tg3 *tp, u32 off)
474 {
475         return readl(tp->regs + off);
476 }
477
478 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
479 {
480         writel(val, tp->aperegs + off);
481 }
482
483 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
484 {
485         return readl(tp->aperegs + off);
486 }
487
488 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
489 {
490         unsigned long flags;
491
492         spin_lock_irqsave(&tp->indirect_lock, flags);
493         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
494         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
495         spin_unlock_irqrestore(&tp->indirect_lock, flags);
496 }
497
498 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
499 {
500         writel(val, tp->regs + off);
501         readl(tp->regs + off);
502 }
503
504 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
505 {
506         unsigned long flags;
507         u32 val;
508
509         spin_lock_irqsave(&tp->indirect_lock, flags);
510         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
511         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
512         spin_unlock_irqrestore(&tp->indirect_lock, flags);
513         return val;
514 }
515
516 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
517 {
518         unsigned long flags;
519
520         if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
521                 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
522                                        TG3_64BIT_REG_LOW, val);
523                 return;
524         }
525         if (off == TG3_RX_STD_PROD_IDX_REG) {
526                 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
527                                        TG3_64BIT_REG_LOW, val);
528                 return;
529         }
530
531         spin_lock_irqsave(&tp->indirect_lock, flags);
532         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
533         pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
534         spin_unlock_irqrestore(&tp->indirect_lock, flags);
535
536         /* In indirect mode when disabling interrupts, we also need
537          * to clear the interrupt bit in the GRC local ctrl register.
538          */
539         if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
540             (val == 0x1)) {
541                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
542                                        tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
543         }
544 }
545
546 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
547 {
548         unsigned long flags;
549         u32 val;
550
551         spin_lock_irqsave(&tp->indirect_lock, flags);
552         pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
553         pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
554         spin_unlock_irqrestore(&tp->indirect_lock, flags);
555         return val;
556 }
557
558 /* usec_wait specifies the wait time in usec when writing to certain registers
559  * where it is unsafe to read back the register without some delay.
560  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
561  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
562  */
563 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
564 {
565         if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
566                 /* Non-posted methods */
567                 tp->write32(tp, off, val);
568         else {
569                 /* Posted method */
570                 tg3_write32(tp, off, val);
571                 if (usec_wait)
572                         udelay(usec_wait);
573                 tp->read32(tp, off);
574         }
575         /* Wait again after the read for the posted method to guarantee that
576          * the wait time is met.
577          */
578         if (usec_wait)
579                 udelay(usec_wait);
580 }
581
582 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
583 {
584         tp->write32_mbox(tp, off, val);
585         if (tg3_flag(tp, FLUSH_POSTED_WRITES) ||
586             (!tg3_flag(tp, MBOX_WRITE_REORDER) &&
587              !tg3_flag(tp, ICH_WORKAROUND)))
588                 tp->read32_mbox(tp, off);
589 }
590
591 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
592 {
593         void __iomem *mbox = tp->regs + off;
594         writel(val, mbox);
595         if (tg3_flag(tp, TXD_MBOX_HWBUG))
596                 writel(val, mbox);
597         if (tg3_flag(tp, MBOX_WRITE_REORDER) ||
598             tg3_flag(tp, FLUSH_POSTED_WRITES))
599                 readl(mbox);
600 }
601
602 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
603 {
604         return readl(tp->regs + off + GRCMBOX_BASE);
605 }
606
607 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
608 {
609         writel(val, tp->regs + off + GRCMBOX_BASE);
610 }
611
612 #define tw32_mailbox(reg, val)          tp->write32_mbox(tp, reg, val)
613 #define tw32_mailbox_f(reg, val)        tw32_mailbox_flush(tp, (reg), (val))
614 #define tw32_rx_mbox(reg, val)          tp->write32_rx_mbox(tp, reg, val)
615 #define tw32_tx_mbox(reg, val)          tp->write32_tx_mbox(tp, reg, val)
616 #define tr32_mailbox(reg)               tp->read32_mbox(tp, reg)
617
618 #define tw32(reg, val)                  tp->write32(tp, reg, val)
619 #define tw32_f(reg, val)                _tw32_flush(tp, (reg), (val), 0)
620 #define tw32_wait_f(reg, val, us)       _tw32_flush(tp, (reg), (val), (us))
621 #define tr32(reg)                       tp->read32(tp, reg)
622
623 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
624 {
625         unsigned long flags;
626
627         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
628             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
629                 return;
630
631         spin_lock_irqsave(&tp->indirect_lock, flags);
632         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
633                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
634                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
635
636                 /* Always leave this as zero. */
637                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
638         } else {
639                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
640                 tw32_f(TG3PCI_MEM_WIN_DATA, val);
641
642                 /* Always leave this as zero. */
643                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
644         }
645         spin_unlock_irqrestore(&tp->indirect_lock, flags);
646 }
647
648 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
649 {
650         unsigned long flags;
651
652         if (tg3_asic_rev(tp) == ASIC_REV_5906 &&
653             (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
654                 *val = 0;
655                 return;
656         }
657
658         spin_lock_irqsave(&tp->indirect_lock, flags);
659         if (tg3_flag(tp, SRAM_USE_CONFIG)) {
660                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
661                 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
662
663                 /* Always leave this as zero. */
664                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
665         } else {
666                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
667                 *val = tr32(TG3PCI_MEM_WIN_DATA);
668
669                 /* Always leave this as zero. */
670                 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
671         }
672         spin_unlock_irqrestore(&tp->indirect_lock, flags);
673 }
674
675 static void tg3_ape_lock_init(struct tg3 *tp)
676 {
677         int i;
678         u32 regbase, bit;
679
680         if (tg3_asic_rev(tp) == ASIC_REV_5761)
681                 regbase = TG3_APE_LOCK_GRANT;
682         else
683                 regbase = TG3_APE_PER_LOCK_GRANT;
684
685         /* Make sure the driver hasn't any stale locks. */
686         for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
687                 switch (i) {
688                 case TG3_APE_LOCK_PHY0:
689                 case TG3_APE_LOCK_PHY1:
690                 case TG3_APE_LOCK_PHY2:
691                 case TG3_APE_LOCK_PHY3:
692                         bit = APE_LOCK_GRANT_DRIVER;
693                         break;
694                 default:
695                         if (!tp->pci_fn)
696                                 bit = APE_LOCK_GRANT_DRIVER;
697                         else
698                                 bit = 1 << tp->pci_fn;
699                 }
700                 tg3_ape_write32(tp, regbase + 4 * i, bit);
701         }
702
703 }
704
705 static int tg3_ape_lock(struct tg3 *tp, int locknum)
706 {
707         int i, off;
708         int ret = 0;
709         u32 status, req, gnt, bit;
710
711         if (!tg3_flag(tp, ENABLE_APE))
712                 return 0;
713
714         switch (locknum) {
715         case TG3_APE_LOCK_GPIO:
716                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
717                         return 0;
718         case TG3_APE_LOCK_GRC:
719         case TG3_APE_LOCK_MEM:
720                 if (!tp->pci_fn)
721                         bit = APE_LOCK_REQ_DRIVER;
722                 else
723                         bit = 1 << tp->pci_fn;
724                 break;
725         case TG3_APE_LOCK_PHY0:
726         case TG3_APE_LOCK_PHY1:
727         case TG3_APE_LOCK_PHY2:
728         case TG3_APE_LOCK_PHY3:
729                 bit = APE_LOCK_REQ_DRIVER;
730                 break;
731         default:
732                 return -EINVAL;
733         }
734
735         if (tg3_asic_rev(tp) == ASIC_REV_5761) {
736                 req = TG3_APE_LOCK_REQ;
737                 gnt = TG3_APE_LOCK_GRANT;
738         } else {
739                 req = TG3_APE_PER_LOCK_REQ;
740                 gnt = TG3_APE_PER_LOCK_GRANT;
741         }
742
743         off = 4 * locknum;
744
745         tg3_ape_write32(tp, req + off, bit);
746
747         /* Wait for up to 1 millisecond to acquire lock. */
748         for (i = 0; i < 100; i++) {
749                 status = tg3_ape_read32(tp, gnt + off);
750                 if (status == bit)
751                         break;
752                 if (pci_channel_offline(tp->pdev))
753                         break;
754
755                 udelay(10);
756         }
757
758         if (status != bit) {
759                 /* Revoke the lock request. */
760                 tg3_ape_write32(tp, gnt + off, bit);
761                 ret = -EBUSY;
762         }
763
764         return ret;
765 }
766
767 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
768 {
769         u32 gnt, bit;
770
771         if (!tg3_flag(tp, ENABLE_APE))
772                 return;
773
774         switch (locknum) {
775         case TG3_APE_LOCK_GPIO:
776                 if (tg3_asic_rev(tp) == ASIC_REV_5761)
777                         return;
778         case TG3_APE_LOCK_GRC:
779         case TG3_APE_LOCK_MEM:
780                 if (!tp->pci_fn)
781                         bit = APE_LOCK_GRANT_DRIVER;
782                 else
783                         bit = 1 << tp->pci_fn;
784                 break;
785         case TG3_APE_LOCK_PHY0:
786         case TG3_APE_LOCK_PHY1:
787         case TG3_APE_LOCK_PHY2:
788         case TG3_APE_LOCK_PHY3:
789                 bit = APE_LOCK_GRANT_DRIVER;
790                 break;
791         default:
792                 return;
793         }
794
795         if (tg3_asic_rev(tp) == ASIC_REV_5761)
796                 gnt = TG3_APE_LOCK_GRANT;
797         else
798                 gnt = TG3_APE_PER_LOCK_GRANT;
799
800         tg3_ape_write32(tp, gnt + 4 * locknum, bit);
801 }
802
803 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
804 {
805         u32 apedata;
806
807         while (timeout_us) {
808                 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
809                         return -EBUSY;
810
811                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
812                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
813                         break;
814
815                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
816
817                 udelay(10);
818                 timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
819         }
820
821         return timeout_us ? 0 : -EBUSY;
822 }
823
824 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
825 {
826         u32 i, apedata;
827
828         for (i = 0; i < timeout_us / 10; i++) {
829                 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
830
831                 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
832                         break;
833
834                 udelay(10);
835         }
836
837         return i == timeout_us / 10;
838 }
839
840 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
841                                    u32 len)
842 {
843         int err;
844         u32 i, bufoff, msgoff, maxlen, apedata;
845
846         if (!tg3_flag(tp, APE_HAS_NCSI))
847                 return 0;
848
849         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
850         if (apedata != APE_SEG_SIG_MAGIC)
851                 return -ENODEV;
852
853         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
854         if (!(apedata & APE_FW_STATUS_READY))
855                 return -EAGAIN;
856
857         bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
858                  TG3_APE_SHMEM_BASE;
859         msgoff = bufoff + 2 * sizeof(u32);
860         maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
861
862         while (len) {
863                 u32 length;
864
865                 /* Cap xfer sizes to scratchpad limits. */
866                 length = (len > maxlen) ? maxlen : len;
867                 len -= length;
868
869                 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
870                 if (!(apedata & APE_FW_STATUS_READY))
871                         return -EAGAIN;
872
873                 /* Wait for up to 1 msec for APE to service previous event. */
874                 err = tg3_ape_event_lock(tp, 1000);
875                 if (err)
876                         return err;
877
878                 apedata = APE_EVENT_STATUS_DRIVER_EVNT |
879                           APE_EVENT_STATUS_SCRTCHPD_READ |
880                           APE_EVENT_STATUS_EVENT_PENDING;
881                 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
882
883                 tg3_ape_write32(tp, bufoff, base_off);
884                 tg3_ape_write32(tp, bufoff + sizeof(u32), length);
885
886                 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
887                 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
888
889                 base_off += length;
890
891                 if (tg3_ape_wait_for_event(tp, 30000))
892                         return -EAGAIN;
893
894                 for (i = 0; length; i += 4, length -= 4) {
895                         u32 val = tg3_ape_read32(tp, msgoff + i);
896                         memcpy(data, &val, sizeof(u32));
897                         data++;
898                 }
899         }
900
901         return 0;
902 }
903
904 static int tg3_ape_send_event(struct tg3 *tp, u32 event)
905 {
906         int err;
907         u32 apedata;
908
909         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
910         if (apedata != APE_SEG_SIG_MAGIC)
911                 return -EAGAIN;
912
913         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
914         if (!(apedata & APE_FW_STATUS_READY))
915                 return -EAGAIN;
916
917         /* Wait for up to 1 millisecond for APE to service previous event. */
918         err = tg3_ape_event_lock(tp, 1000);
919         if (err)
920                 return err;
921
922         tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
923                         event | APE_EVENT_STATUS_EVENT_PENDING);
924
925         tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
926         tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
927
928         return 0;
929 }
930
931 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
932 {
933         u32 event;
934         u32 apedata;
935
936         if (!tg3_flag(tp, ENABLE_APE))
937                 return;
938
939         switch (kind) {
940         case RESET_KIND_INIT:
941                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
942                                 APE_HOST_SEG_SIG_MAGIC);
943                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
944                                 APE_HOST_SEG_LEN_MAGIC);
945                 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
946                 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
947                 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
948                         APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
949                 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
950                                 APE_HOST_BEHAV_NO_PHYLOCK);
951                 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
952                                     TG3_APE_HOST_DRVR_STATE_START);
953
954                 event = APE_EVENT_STATUS_STATE_START;
955                 break;
956         case RESET_KIND_SHUTDOWN:
957                 /* With the interface we are currently using,
958                  * APE does not track driver state.  Wiping
959                  * out the HOST SEGMENT SIGNATURE forces
960                  * the APE to assume OS absent status.
961                  */
962                 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
963
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_disable_ints(struct tg3 *tp)
986 {
987         int i;
988
989         tw32(TG3PCI_MISC_HOST_CTRL,
990              (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
991         for (i = 0; i < tp->irq_max; i++)
992                 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
993 }
994
995 static void tg3_enable_ints(struct tg3 *tp)
996 {
997         int i;
998
999         tp->irq_sync = 0;
1000         wmb();
1001
1002         tw32(TG3PCI_MISC_HOST_CTRL,
1003              (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
1004
1005         tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE;
1006         for (i = 0; i < tp->irq_cnt; i++) {
1007                 struct tg3_napi *tnapi = &tp->napi[i];
1008
1009                 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1010                 if (tg3_flag(tp, 1SHOT_MSI))
1011                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
1012
1013                 tp->coal_now |= tnapi->coal_now;
1014         }
1015
1016         /* Force an initial interrupt */
1017         if (!tg3_flag(tp, TAGGED_STATUS) &&
1018             (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
1019                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
1020         else
1021                 tw32(HOSTCC_MODE, tp->coal_now);
1022
1023         tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
1024 }
1025
1026 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
1027 {
1028         struct tg3 *tp = tnapi->tp;
1029         struct tg3_hw_status *sblk = tnapi->hw_status;
1030         unsigned int work_exists = 0;
1031
1032         /* check for phy events */
1033         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
1034                 if (sblk->status & SD_STATUS_LINK_CHG)
1035                         work_exists = 1;
1036         }
1037
1038         /* check for TX work to do */
1039         if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
1040                 work_exists = 1;
1041
1042         /* check for RX work to do */
1043         if (tnapi->rx_rcb_prod_idx &&
1044             *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
1045                 work_exists = 1;
1046
1047         return work_exists;
1048 }
1049
1050 /* tg3_int_reenable
1051  *  similar to tg3_enable_ints, but it accurately determines whether there
1052  *  is new work pending and can return without flushing the PIO write
1053  *  which reenables interrupts
1054  */
1055 static void tg3_int_reenable(struct tg3_napi *tnapi)
1056 {
1057         struct tg3 *tp = tnapi->tp;
1058
1059         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1060         mmiowb();
1061
1062         /* When doing tagged status, this work check is unnecessary.
1063          * The last_tag we write above tells the chip which piece of
1064          * work we've completed.
1065          */
1066         if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1067                 tw32(HOSTCC_MODE, tp->coalesce_mode |
1068                      HOSTCC_MODE_ENABLE | tnapi->coal_now);
1069 }
1070
1071 static void tg3_switch_clocks(struct tg3 *tp)
1072 {
1073         u32 clock_ctrl;
1074         u32 orig_clock_ctrl;
1075
1076         if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1077                 return;
1078
1079         clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1080
1081         orig_clock_ctrl = clock_ctrl;
1082         clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1083                        CLOCK_CTRL_CLKRUN_OENABLE |
1084                        0x1f);
1085         tp->pci_clock_ctrl = clock_ctrl;
1086
1087         if (tg3_flag(tp, 5705_PLUS)) {
1088                 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1089                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
1090                                     clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1091                 }
1092         } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1093                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1094                             clock_ctrl |
1095                             (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1096                             40);
1097                 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1098                             clock_ctrl | (CLOCK_CTRL_ALTCLK),
1099                             40);
1100         }
1101         tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1102 }
1103
1104 #define PHY_BUSY_LOOPS  5000
1105
1106 static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg,
1107                          u32 *val)
1108 {
1109         u32 frame_val;
1110         unsigned int loops;
1111         int ret;
1112
1113         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1114                 tw32_f(MAC_MI_MODE,
1115                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1116                 udelay(80);
1117         }
1118
1119         tg3_ape_lock(tp, tp->phy_ape_lock);
1120
1121         *val = 0x0;
1122
1123         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1124                       MI_COM_PHY_ADDR_MASK);
1125         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1126                       MI_COM_REG_ADDR_MASK);
1127         frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1128
1129         tw32_f(MAC_MI_COM, frame_val);
1130
1131         loops = PHY_BUSY_LOOPS;
1132         while (loops != 0) {
1133                 udelay(10);
1134                 frame_val = tr32(MAC_MI_COM);
1135
1136                 if ((frame_val & MI_COM_BUSY) == 0) {
1137                         udelay(5);
1138                         frame_val = tr32(MAC_MI_COM);
1139                         break;
1140                 }
1141                 loops -= 1;
1142         }
1143
1144         ret = -EBUSY;
1145         if (loops != 0) {
1146                 *val = frame_val & MI_COM_DATA_MASK;
1147                 ret = 0;
1148         }
1149
1150         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1151                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1152                 udelay(80);
1153         }
1154
1155         tg3_ape_unlock(tp, tp->phy_ape_lock);
1156
1157         return ret;
1158 }
1159
1160 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1161 {
1162         return __tg3_readphy(tp, tp->phy_addr, reg, val);
1163 }
1164
1165 static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg,
1166                           u32 val)
1167 {
1168         u32 frame_val;
1169         unsigned int loops;
1170         int ret;
1171
1172         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1173             (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1174                 return 0;
1175
1176         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1177                 tw32_f(MAC_MI_MODE,
1178                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1179                 udelay(80);
1180         }
1181
1182         tg3_ape_lock(tp, tp->phy_ape_lock);
1183
1184         frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1185                       MI_COM_PHY_ADDR_MASK);
1186         frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1187                       MI_COM_REG_ADDR_MASK);
1188         frame_val |= (val & MI_COM_DATA_MASK);
1189         frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1190
1191         tw32_f(MAC_MI_COM, frame_val);
1192
1193         loops = PHY_BUSY_LOOPS;
1194         while (loops != 0) {
1195                 udelay(10);
1196                 frame_val = tr32(MAC_MI_COM);
1197                 if ((frame_val & MI_COM_BUSY) == 0) {
1198                         udelay(5);
1199                         frame_val = tr32(MAC_MI_COM);
1200                         break;
1201                 }
1202                 loops -= 1;
1203         }
1204
1205         ret = -EBUSY;
1206         if (loops != 0)
1207                 ret = 0;
1208
1209         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1210                 tw32_f(MAC_MI_MODE, tp->mi_mode);
1211                 udelay(80);
1212         }
1213
1214         tg3_ape_unlock(tp, tp->phy_ape_lock);
1215
1216         return ret;
1217 }
1218
1219 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1220 {
1221         return __tg3_writephy(tp, tp->phy_addr, reg, val);
1222 }
1223
1224 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1225 {
1226         int err;
1227
1228         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1229         if (err)
1230                 goto done;
1231
1232         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1233         if (err)
1234                 goto done;
1235
1236         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1237                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1238         if (err)
1239                 goto done;
1240
1241         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1242
1243 done:
1244         return err;
1245 }
1246
1247 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1248 {
1249         int err;
1250
1251         err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1252         if (err)
1253                 goto done;
1254
1255         err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1256         if (err)
1257                 goto done;
1258
1259         err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1260                            MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1261         if (err)
1262                 goto done;
1263
1264         err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1265
1266 done:
1267         return err;
1268 }
1269
1270 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1271 {
1272         int err;
1273
1274         err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1275         if (!err)
1276                 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1277
1278         return err;
1279 }
1280
1281 static int tg3_phydsp_write(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_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1288
1289         return err;
1290 }
1291
1292 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1293 {
1294         int err;
1295
1296         err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1297                            (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) |
1298                            MII_TG3_AUXCTL_SHDWSEL_MISC);
1299         if (!err)
1300                 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1301
1302         return err;
1303 }
1304
1305 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1306 {
1307         if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1308                 set |= MII_TG3_AUXCTL_MISC_WREN;
1309
1310         return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1311 }
1312
1313 static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable)
1314 {
1315         u32 val;
1316         int err;
1317
1318         err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
1319
1320         if (err)
1321                 return err;
1322
1323         if (enable)
1324                 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1325         else
1326                 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA;
1327
1328         err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
1329                                    val | MII_TG3_AUXCTL_ACTL_TX_6DB);
1330
1331         return err;
1332 }
1333
1334 static int tg3_phy_shdw_write(struct tg3 *tp, int reg, u32 val)
1335 {
1336         return tg3_writephy(tp, MII_TG3_MISC_SHDW,
1337                             reg | val | MII_TG3_MISC_SHDW_WREN);
1338 }
1339
1340 static int tg3_bmcr_reset(struct tg3 *tp)
1341 {
1342         u32 phy_control;
1343         int limit, err;
1344
1345         /* OK, reset it, and poll the BMCR_RESET bit until it
1346          * clears or we time out.
1347          */
1348         phy_control = BMCR_RESET;
1349         err = tg3_writephy(tp, MII_BMCR, phy_control);
1350         if (err != 0)
1351                 return -EBUSY;
1352
1353         limit = 5000;
1354         while (limit--) {
1355                 err = tg3_readphy(tp, MII_BMCR, &phy_control);
1356                 if (err != 0)
1357                         return -EBUSY;
1358
1359                 if ((phy_control & BMCR_RESET) == 0) {
1360                         udelay(40);
1361                         break;
1362                 }
1363                 udelay(10);
1364         }
1365         if (limit < 0)
1366                 return -EBUSY;
1367
1368         return 0;
1369 }
1370
1371 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1372 {
1373         struct tg3 *tp = bp->priv;
1374         u32 val;
1375
1376         spin_lock_bh(&tp->lock);
1377
1378         if (__tg3_readphy(tp, mii_id, reg, &val))
1379                 val = -EIO;
1380
1381         spin_unlock_bh(&tp->lock);
1382
1383         return val;
1384 }
1385
1386 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1387 {
1388         struct tg3 *tp = bp->priv;
1389         u32 ret = 0;
1390
1391         spin_lock_bh(&tp->lock);
1392
1393         if (__tg3_writephy(tp, mii_id, reg, val))
1394                 ret = -EIO;
1395
1396         spin_unlock_bh(&tp->lock);
1397
1398         return ret;
1399 }
1400
1401 static int tg3_mdio_reset(struct mii_bus *bp)
1402 {
1403         return 0;
1404 }
1405
1406 static void tg3_mdio_config_5785(struct tg3 *tp)
1407 {
1408         u32 val;
1409         struct phy_device *phydev;
1410
1411         phydev = tp->mdio_bus->phy_map[tp->phy_addr];
1412         switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1413         case PHY_ID_BCM50610:
1414         case PHY_ID_BCM50610M:
1415                 val = MAC_PHYCFG2_50610_LED_MODES;
1416                 break;
1417         case PHY_ID_BCMAC131:
1418                 val = MAC_PHYCFG2_AC131_LED_MODES;
1419                 break;
1420         case PHY_ID_RTL8211C:
1421                 val = MAC_PHYCFG2_RTL8211C_LED_MODES;
1422                 break;
1423         case PHY_ID_RTL8201E:
1424                 val = MAC_PHYCFG2_RTL8201E_LED_MODES;
1425                 break;
1426         default:
1427                 return;
1428         }
1429
1430         if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1431                 tw32(MAC_PHYCFG2, val);
1432
1433                 val = tr32(MAC_PHYCFG1);
1434                 val &= ~(MAC_PHYCFG1_RGMII_INT |
1435                          MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK);
1436                 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT;
1437                 tw32(MAC_PHYCFG1, val);
1438
1439                 return;
1440         }
1441
1442         if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1443                 val |= MAC_PHYCFG2_EMODE_MASK_MASK |
1444                        MAC_PHYCFG2_FMODE_MASK_MASK |
1445                        MAC_PHYCFG2_GMODE_MASK_MASK |
1446                        MAC_PHYCFG2_ACT_MASK_MASK   |
1447                        MAC_PHYCFG2_QUAL_MASK_MASK |
1448                        MAC_PHYCFG2_INBAND_ENABLE;
1449
1450         tw32(MAC_PHYCFG2, val);
1451
1452         val = tr32(MAC_PHYCFG1);
1453         val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK |
1454                  MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN);
1455         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1456                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1457                         val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC;
1458                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1459                         val |= MAC_PHYCFG1_RGMII_SND_STAT_EN;
1460         }
1461         val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT |
1462                MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV;
1463         tw32(MAC_PHYCFG1, val);
1464
1465         val = tr32(MAC_EXT_RGMII_MODE);
1466         val &= ~(MAC_RGMII_MODE_RX_INT_B |
1467                  MAC_RGMII_MODE_RX_QUALITY |
1468                  MAC_RGMII_MODE_RX_ACTIVITY |
1469                  MAC_RGMII_MODE_RX_ENG_DET |
1470                  MAC_RGMII_MODE_TX_ENABLE |
1471                  MAC_RGMII_MODE_TX_LOWPWR |
1472                  MAC_RGMII_MODE_TX_RESET);
1473         if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1474                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1475                         val |= MAC_RGMII_MODE_RX_INT_B |
1476                                MAC_RGMII_MODE_RX_QUALITY |
1477                                MAC_RGMII_MODE_RX_ACTIVITY |
1478                                MAC_RGMII_MODE_RX_ENG_DET;
1479                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1480                         val |= MAC_RGMII_MODE_TX_ENABLE |
1481                                MAC_RGMII_MODE_TX_LOWPWR |
1482                                MAC_RGMII_MODE_TX_RESET;
1483         }
1484         tw32(MAC_EXT_RGMII_MODE, val);
1485 }
1486
1487 static void tg3_mdio_start(struct tg3 *tp)
1488 {
1489         tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
1490         tw32_f(MAC_MI_MODE, tp->mi_mode);
1491         udelay(80);
1492
1493         if (tg3_flag(tp, MDIOBUS_INITED) &&
1494             tg3_asic_rev(tp) == ASIC_REV_5785)
1495                 tg3_mdio_config_5785(tp);
1496 }
1497
1498 static int tg3_mdio_init(struct tg3 *tp)
1499 {
1500         int i;
1501         u32 reg;
1502         struct phy_device *phydev;
1503
1504         if (tg3_flag(tp, 5717_PLUS)) {
1505                 u32 is_serdes;
1506
1507                 tp->phy_addr = tp->pci_fn + 1;
1508
1509                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0)
1510                         is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1511                 else
1512                         is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1513                                     TG3_CPMU_PHY_STRAP_IS_SERDES;
1514                 if (is_serdes)
1515                         tp->phy_addr += 7;
1516         } else if (tg3_flag(tp, IS_SSB_CORE) && tg3_flag(tp, ROBOSWITCH)) {
1517                 int addr;
1518
1519                 addr = ssb_gige_get_phyaddr(tp->pdev);
1520                 if (addr < 0)
1521                         return addr;
1522                 tp->phy_addr = addr;
1523         } else
1524                 tp->phy_addr = TG3_PHY_MII_ADDR;
1525
1526         tg3_mdio_start(tp);
1527
1528         if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1529                 return 0;
1530
1531         tp->mdio_bus = mdiobus_alloc();
1532         if (tp->mdio_bus == NULL)
1533                 return -ENOMEM;
1534
1535         tp->mdio_bus->name     = "tg3 mdio bus";
1536         snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1537                  (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1538         tp->mdio_bus->priv     = tp;
1539         tp->mdio_bus->parent   = &tp->pdev->dev;
1540         tp->mdio_bus->read     = &tg3_mdio_read;
1541         tp->mdio_bus->write    = &tg3_mdio_write;
1542         tp->mdio_bus->reset    = &tg3_mdio_reset;
1543         tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
1544         tp->mdio_bus->irq      = &tp->mdio_irq[0];
1545
1546         for (i = 0; i < PHY_MAX_ADDR; i++)
1547                 tp->mdio_bus->irq[i] = PHY_POLL;
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 = tp->mdio_bus->phy_map[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                 if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1585                         phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE;
1586                 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1587                         phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE;
1588                 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1589                         phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE;
1590                 /* fallthru */
1591         case PHY_ID_RTL8211C:
1592                 phydev->interface = PHY_INTERFACE_MODE_RGMII;
1593                 break;
1594         case PHY_ID_RTL8201E:
1595         case PHY_ID_BCMAC131:
1596                 phydev->interface = PHY_INTERFACE_MODE_MII;
1597                 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE;
1598                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
1599                 break;
1600         }
1601
1602         tg3_flag_set(tp, MDIOBUS_INITED);
1603
1604         if (tg3_asic_rev(tp) == ASIC_REV_5785)
1605                 tg3_mdio_config_5785(tp);
1606
1607         return 0;
1608 }
1609
1610 static void tg3_mdio_fini(struct tg3 *tp)
1611 {
1612         if (tg3_flag(tp, MDIOBUS_INITED)) {
1613                 tg3_flag_clear(tp, MDIOBUS_INITED);
1614                 mdiobus_unregister(tp->mdio_bus);
1615                 mdiobus_free(tp->mdio_bus);
1616         }
1617 }
1618
1619 /* tp->lock is held. */
1620 static inline void tg3_generate_fw_event(struct tg3 *tp)
1621 {
1622         u32 val;
1623
1624         val = tr32(GRC_RX_CPU_EVENT);
1625         val |= GRC_RX_CPU_DRIVER_EVENT;
1626         tw32_f(GRC_RX_CPU_EVENT, val);
1627
1628         tp->last_event_jiffies = jiffies;
1629 }
1630
1631 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1632
1633 /* tp->lock is held. */
1634 static void tg3_wait_for_event_ack(struct tg3 *tp)
1635 {
1636         int i;
1637         unsigned int delay_cnt;
1638         long time_remain;
1639
1640         /* If enough time has passed, no wait is necessary. */
1641         time_remain = (long)(tp->last_event_jiffies + 1 +
1642                       usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) -
1643                       (long)jiffies;
1644         if (time_remain < 0)
1645                 return;
1646
1647         /* Check if we can shorten the wait time. */
1648         delay_cnt = jiffies_to_usecs(time_remain);
1649         if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1650                 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1651         delay_cnt = (delay_cnt >> 3) + 1;
1652
1653         for (i = 0; i < delay_cnt; i++) {
1654                 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1655                         break;
1656                 if (pci_channel_offline(tp->pdev))
1657                         break;
1658
1659                 udelay(8);
1660         }
1661 }
1662
1663 /* tp->lock is held. */
1664 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1665 {
1666         u32 reg, val;
1667
1668         val = 0;
1669         if (!tg3_readphy(tp, MII_BMCR, &reg))
1670                 val = reg << 16;
1671         if (!tg3_readphy(tp, MII_BMSR, &reg))
1672                 val |= (reg & 0xffff);
1673         *data++ = val;
1674
1675         val = 0;
1676         if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1677                 val = reg << 16;
1678         if (!tg3_readphy(tp, MII_LPA, &reg))
1679                 val |= (reg & 0xffff);
1680         *data++ = val;
1681
1682         val = 0;
1683         if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1684                 if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1685                         val = reg << 16;
1686                 if (!tg3_readphy(tp, MII_STAT1000, &reg))
1687                         val |= (reg & 0xffff);
1688         }
1689         *data++ = val;
1690
1691         if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1692                 val = reg << 16;
1693         else
1694                 val = 0;
1695         *data++ = val;
1696 }
1697
1698 /* tp->lock is held. */
1699 static void tg3_ump_link_report(struct tg3 *tp)
1700 {
1701         u32 data[4];
1702
1703         if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1704                 return;
1705
1706         tg3_phy_gather_ump_data(tp, data);
1707
1708         tg3_wait_for_event_ack(tp);
1709
1710         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1711         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1712         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1713         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1714         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1715         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1716
1717         tg3_generate_fw_event(tp);
1718 }
1719
1720 /* tp->lock is held. */
1721 static void tg3_stop_fw(struct tg3 *tp)
1722 {
1723         if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1724                 /* Wait for RX cpu to ACK the previous event. */
1725                 tg3_wait_for_event_ack(tp);
1726
1727                 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1728
1729                 tg3_generate_fw_event(tp);
1730
1731                 /* Wait for RX cpu to ACK this event. */
1732                 tg3_wait_for_event_ack(tp);
1733         }
1734 }
1735
1736 /* tp->lock is held. */
1737 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1738 {
1739         tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1740                       NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
1741
1742         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1743                 switch (kind) {
1744                 case RESET_KIND_INIT:
1745                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1746                                       DRV_STATE_START);
1747                         break;
1748
1749                 case RESET_KIND_SHUTDOWN:
1750                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1751                                       DRV_STATE_UNLOAD);
1752                         break;
1753
1754                 case RESET_KIND_SUSPEND:
1755                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1756                                       DRV_STATE_SUSPEND);
1757                         break;
1758
1759                 default:
1760                         break;
1761                 }
1762         }
1763 }
1764
1765 /* tp->lock is held. */
1766 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1767 {
1768         if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1769                 switch (kind) {
1770                 case RESET_KIND_INIT:
1771                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1772                                       DRV_STATE_START_DONE);
1773                         break;
1774
1775                 case RESET_KIND_SHUTDOWN:
1776                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1777                                       DRV_STATE_UNLOAD_DONE);
1778                         break;
1779
1780                 default:
1781                         break;
1782                 }
1783         }
1784 }
1785
1786 /* tp->lock is held. */
1787 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1788 {
1789         if (tg3_flag(tp, ENABLE_ASF)) {
1790                 switch (kind) {
1791                 case RESET_KIND_INIT:
1792                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1793                                       DRV_STATE_START);
1794                         break;
1795
1796                 case RESET_KIND_SHUTDOWN:
1797                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1798                                       DRV_STATE_UNLOAD);
1799                         break;
1800
1801                 case RESET_KIND_SUSPEND:
1802                         tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1803                                       DRV_STATE_SUSPEND);
1804                         break;
1805
1806                 default:
1807                         break;
1808                 }
1809         }
1810 }
1811
1812 static int tg3_poll_fw(struct tg3 *tp)
1813 {
1814         int i;
1815         u32 val;
1816
1817         if (tg3_flag(tp, NO_FWARE_REPORTED))
1818                 return 0;
1819
1820         if (tg3_flag(tp, IS_SSB_CORE)) {
1821                 /* We don't use firmware. */
1822                 return 0;
1823         }
1824
1825         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
1826                 /* Wait up to 20ms for init done. */
1827                 for (i = 0; i < 200; i++) {
1828                         if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
1829                                 return 0;
1830                         if (pci_channel_offline(tp->pdev))
1831                                 return -ENODEV;
1832
1833                         udelay(100);
1834                 }
1835                 return -ENODEV;
1836         }
1837
1838         /* Wait for firmware initialization to complete. */
1839         for (i = 0; i < 100000; i++) {
1840                 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1841                 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1842                         break;
1843                 if (pci_channel_offline(tp->pdev)) {
1844                         if (!tg3_flag(tp, NO_FWARE_REPORTED)) {
1845                                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1846                                 netdev_info(tp->dev, "No firmware running\n");
1847                         }
1848
1849                         break;
1850                 }
1851
1852                 udelay(10);
1853         }
1854
1855         /* Chip might not be fitted with firmware.  Some Sun onboard
1856          * parts are configured like that.  So don't signal the timeout
1857          * of the above loop as an error, but do report the lack of
1858          * running firmware once.
1859          */
1860         if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1861                 tg3_flag_set(tp, NO_FWARE_REPORTED);
1862
1863                 netdev_info(tp->dev, "No firmware running\n");
1864         }
1865
1866         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
1867                 /* The 57765 A0 needs a little more
1868                  * time to do some important work.
1869                  */
1870                 mdelay(10);
1871         }
1872
1873         return 0;
1874 }
1875
1876 static void tg3_link_report(struct tg3 *tp)
1877 {
1878         if (!netif_carrier_ok(tp->dev)) {
1879                 netif_info(tp, link, tp->dev, "Link is down\n");
1880                 tg3_ump_link_report(tp);
1881         } else if (netif_msg_link(tp)) {
1882                 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1883                             (tp->link_config.active_speed == SPEED_1000 ?
1884                              1000 :
1885                              (tp->link_config.active_speed == SPEED_100 ?
1886                               100 : 10)),
1887                             (tp->link_config.active_duplex == DUPLEX_FULL ?
1888                              "full" : "half"));
1889
1890                 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1891                             (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1892                             "on" : "off",
1893                             (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1894                             "on" : "off");
1895
1896                 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1897                         netdev_info(tp->dev, "EEE is %s\n",
1898                                     tp->setlpicnt ? "enabled" : "disabled");
1899
1900                 tg3_ump_link_report(tp);
1901         }
1902
1903         tp->link_up = netif_carrier_ok(tp->dev);
1904 }
1905
1906 static u32 tg3_decode_flowctrl_1000T(u32 adv)
1907 {
1908         u32 flowctrl = 0;
1909
1910         if (adv & ADVERTISE_PAUSE_CAP) {
1911                 flowctrl |= FLOW_CTRL_RX;
1912                 if (!(adv & ADVERTISE_PAUSE_ASYM))
1913                         flowctrl |= FLOW_CTRL_TX;
1914         } else if (adv & ADVERTISE_PAUSE_ASYM)
1915                 flowctrl |= FLOW_CTRL_TX;
1916
1917         return flowctrl;
1918 }
1919
1920 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1921 {
1922         u16 miireg;
1923
1924         if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1925                 miireg = ADVERTISE_1000XPAUSE;
1926         else if (flow_ctrl & FLOW_CTRL_TX)
1927                 miireg = ADVERTISE_1000XPSE_ASYM;
1928         else if (flow_ctrl & FLOW_CTRL_RX)
1929                 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1930         else
1931                 miireg = 0;
1932
1933         return miireg;
1934 }
1935
1936 static u32 tg3_decode_flowctrl_1000X(u32 adv)
1937 {
1938         u32 flowctrl = 0;
1939
1940         if (adv & ADVERTISE_1000XPAUSE) {
1941                 flowctrl |= FLOW_CTRL_RX;
1942                 if (!(adv & ADVERTISE_1000XPSE_ASYM))
1943                         flowctrl |= FLOW_CTRL_TX;
1944         } else if (adv & ADVERTISE_1000XPSE_ASYM)
1945                 flowctrl |= FLOW_CTRL_TX;
1946
1947         return flowctrl;
1948 }
1949
1950 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1951 {
1952         u8 cap = 0;
1953
1954         if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1955                 cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1956         } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1957                 if (lcladv & ADVERTISE_1000XPAUSE)
1958                         cap = FLOW_CTRL_RX;
1959                 if (rmtadv & ADVERTISE_1000XPAUSE)
1960                         cap = FLOW_CTRL_TX;
1961         }
1962
1963         return cap;
1964 }
1965
1966 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1967 {
1968         u8 autoneg;
1969         u8 flowctrl = 0;
1970         u32 old_rx_mode = tp->rx_mode;
1971         u32 old_tx_mode = tp->tx_mode;
1972
1973         if (tg3_flag(tp, USE_PHYLIB))
1974                 autoneg = tp->mdio_bus->phy_map[tp->phy_addr]->autoneg;
1975         else
1976                 autoneg = tp->link_config.autoneg;
1977
1978         if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1979                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1980                         flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1981                 else
1982                         flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1983         } else
1984                 flowctrl = tp->link_config.flowctrl;
1985
1986         tp->link_config.active_flowctrl = flowctrl;
1987
1988         if (flowctrl & FLOW_CTRL_RX)
1989                 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1990         else
1991                 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1992
1993         if (old_rx_mode != tp->rx_mode)
1994                 tw32_f(MAC_RX_MODE, tp->rx_mode);
1995
1996         if (flowctrl & FLOW_CTRL_TX)
1997                 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1998         else
1999                 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
2000
2001         if (old_tx_mode != tp->tx_mode)
2002                 tw32_f(MAC_TX_MODE, tp->tx_mode);
2003 }
2004
2005 static void tg3_adjust_link(struct net_device *dev)
2006 {
2007         u8 oldflowctrl, linkmesg = 0;
2008         u32 mac_mode, lcl_adv, rmt_adv;
2009         struct tg3 *tp = netdev_priv(dev);
2010         struct phy_device *phydev = tp->mdio_bus->phy_map[tp->phy_addr];
2011
2012         spin_lock_bh(&tp->lock);
2013
2014         mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
2015                                     MAC_MODE_HALF_DUPLEX);
2016
2017         oldflowctrl = tp->link_config.active_flowctrl;
2018
2019         if (phydev->link) {
2020                 lcl_adv = 0;
2021                 rmt_adv = 0;
2022
2023                 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
2024                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2025                 else if (phydev->speed == SPEED_1000 ||
2026                          tg3_asic_rev(tp) != ASIC_REV_5785)
2027                         mac_mode |= MAC_MODE_PORT_MODE_GMII;
2028                 else
2029                         mac_mode |= MAC_MODE_PORT_MODE_MII;
2030
2031                 if (phydev->duplex == DUPLEX_HALF)
2032                         mac_mode |= MAC_MODE_HALF_DUPLEX;
2033                 else {
2034                         lcl_adv = mii_advertise_flowctrl(
2035                                   tp->link_config.flowctrl);
2036
2037                         if (phydev->pause)
2038                                 rmt_adv = LPA_PAUSE_CAP;
2039                         if (phydev->asym_pause)
2040                                 rmt_adv |= LPA_PAUSE_ASYM;
2041                 }
2042
2043                 tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2044         } else
2045                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
2046
2047         if (mac_mode != tp->mac_mode) {
2048                 tp->mac_mode = mac_mode;
2049                 tw32_f(MAC_MODE, tp->mac_mode);
2050                 udelay(40);
2051         }
2052
2053         if (tg3_asic_rev(tp) == ASIC_REV_5785) {
2054                 if (phydev->speed == SPEED_10)
2055                         tw32(MAC_MI_STAT,
2056                              MAC_MI_STAT_10MBPS_MODE |
2057                              MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2058                 else
2059                         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
2060         }
2061
2062         if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
2063                 tw32(MAC_TX_LENGTHS,
2064                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2065                       (6 << TX_LENGTHS_IPG_SHIFT) |
2066                       (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
2067         else
2068                 tw32(MAC_TX_LENGTHS,
2069                      ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2070                       (6 << TX_LENGTHS_IPG_SHIFT) |
2071                       (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
2072
2073         if (phydev->link != tp->old_link ||
2074             phydev->speed != tp->link_config.active_speed ||
2075             phydev->duplex != tp->link_config.active_duplex ||
2076             oldflowctrl != tp->link_config.active_flowctrl)
2077                 linkmesg = 1;
2078
2079         tp->old_link = phydev->link;
2080         tp->link_config.active_speed = phydev->speed;
2081         tp->link_config.active_duplex = phydev->duplex;
2082
2083         spin_unlock_bh(&tp->lock);
2084
2085         if (linkmesg)
2086                 tg3_link_report(tp);
2087 }
2088
2089 static int tg3_phy_init(struct tg3 *tp)
2090 {
2091         struct phy_device *phydev;
2092
2093         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)
2094                 return 0;
2095
2096         /* Bring the PHY back to a known state. */
2097         tg3_bmcr_reset(tp);
2098
2099         phydev = tp->mdio_bus->phy_map[tp->phy_addr];
2100
2101         /* Attach the MAC to the PHY. */
2102         phydev = phy_connect(tp->dev, dev_name(&phydev->dev),
2103                              tg3_adjust_link, phydev->interface);
2104         if (IS_ERR(phydev)) {
2105                 dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
2106                 return PTR_ERR(phydev);
2107         }
2108
2109         /* Mask with MAC supported features. */
2110         switch (phydev->interface) {
2111         case PHY_INTERFACE_MODE_GMII:
2112         case PHY_INTERFACE_MODE_RGMII:
2113                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
2114                         phydev->supported &= (PHY_GBIT_FEATURES |
2115                                               SUPPORTED_Pause |
2116                                               SUPPORTED_Asym_Pause);
2117                         break;
2118                 }
2119                 /* fallthru */
2120         case PHY_INTERFACE_MODE_MII:
2121                 phydev->supported &= (PHY_BASIC_FEATURES |
2122                                       SUPPORTED_Pause |
2123                                       SUPPORTED_Asym_Pause);
2124                 break;
2125         default:
2126                 phy_disconnect(tp->mdio_bus->phy_map[tp->phy_addr]);
2127                 return -EINVAL;
2128         }
2129
2130         tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED;
2131
2132         phydev->advertising = phydev->supported;
2133
2134         return 0;
2135 }
2136
2137 static void tg3_phy_start(struct tg3 *tp)
2138 {
2139         struct phy_device *phydev;
2140
2141         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2142                 return;
2143
2144         phydev = tp->mdio_bus->phy_map[tp->phy_addr];
2145
2146         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2147                 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
2148                 phydev->speed = tp->link_config.speed;
2149                 phydev->duplex = tp->link_config.duplex;
2150                 phydev->autoneg = tp->link_config.autoneg;
2151                 phydev->advertising = tp->link_config.advertising;
2152         }
2153
2154         phy_start(phydev);
2155
2156         phy_start_aneg(phydev);
2157 }
2158
2159 static void tg3_phy_stop(struct tg3 *tp)
2160 {
2161         if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2162                 return;
2163
2164         phy_stop(tp->mdio_bus->phy_map[tp->phy_addr]);
2165 }
2166
2167 static void tg3_phy_fini(struct tg3 *tp)
2168 {
2169         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2170                 phy_disconnect(tp->mdio_bus->phy_map[tp->phy_addr]);
2171                 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
2172         }
2173 }
2174
2175 static int tg3_phy_set_extloopbk(struct tg3 *tp)
2176 {
2177         int err;
2178         u32 val;
2179
2180         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2181                 return 0;
2182
2183         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2184                 /* Cannot do read-modify-write on 5401 */
2185                 err = tg3_phy_auxctl_write(tp,
2186                                            MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2187                                            MII_TG3_AUXCTL_ACTL_EXTLOOPBK |
2188                                            0x4c20);
2189                 goto done;
2190         }
2191
2192         err = tg3_phy_auxctl_read(tp,
2193                                   MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2194         if (err)
2195                 return err;
2196
2197         val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK;
2198         err = tg3_phy_auxctl_write(tp,
2199                                    MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val);
2200
2201 done:
2202         return err;
2203 }
2204
2205 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2206 {
2207         u32 phytest;
2208
2209         if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2210                 u32 phy;
2211
2212                 tg3_writephy(tp, MII_TG3_FET_TEST,
2213                              phytest | MII_TG3_FET_SHADOW_EN);
2214                 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2215                         if (enable)
2216                                 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD;
2217                         else
2218                                 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD;
2219                         tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2220                 }
2221                 tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2222         }
2223 }
2224
2225 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2226 {
2227         u32 reg;
2228
2229         if (!tg3_flag(tp, 5705_PLUS) ||
2230             (tg3_flag(tp, 5717_PLUS) &&
2231              (tp->phy_flags & TG3_PHYFLG_MII_SERDES)))
2232                 return;
2233
2234         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2235                 tg3_phy_fet_toggle_apd(tp, enable);
2236                 return;
2237         }
2238
2239         reg = MII_TG3_MISC_SHDW_SCR5_LPED |
2240               MII_TG3_MISC_SHDW_SCR5_DLPTLM |
2241               MII_TG3_MISC_SHDW_SCR5_SDTL |
2242               MII_TG3_MISC_SHDW_SCR5_C125OE;
2243         if (tg3_asic_rev(tp) != ASIC_REV_5784 || !enable)
2244                 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD;
2245
2246         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_SCR5_SEL, reg);
2247
2248
2249         reg = MII_TG3_MISC_SHDW_APD_WKTM_84MS;
2250         if (enable)
2251                 reg |= MII_TG3_MISC_SHDW_APD_ENABLE;
2252
2253         tg3_phy_shdw_write(tp, MII_TG3_MISC_SHDW_APD_SEL, reg);
2254 }
2255
2256 static void tg3_phy_toggle_automdix(struct tg3 *tp, bool enable)
2257 {
2258         u32 phy;
2259
2260         if (!tg3_flag(tp, 5705_PLUS) ||
2261             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
2262                 return;
2263
2264         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2265                 u32 ephy;
2266
2267                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2268                         u32 reg = MII_TG3_FET_SHDW_MISCCTRL;
2269
2270                         tg3_writephy(tp, MII_TG3_FET_TEST,
2271                                      ephy | MII_TG3_FET_SHADOW_EN);
2272                         if (!tg3_readphy(tp, reg, &phy)) {
2273                                 if (enable)
2274                                         phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2275                                 else
2276                                         phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX;
2277                                 tg3_writephy(tp, reg, phy);
2278                         }
2279                         tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2280                 }
2281         } else {
2282                 int ret;
2283
2284                 ret = tg3_phy_auxctl_read(tp,
2285                                           MII_TG3_AUXCTL_SHDWSEL_MISC, &phy);
2286                 if (!ret) {
2287                         if (enable)
2288                                 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2289                         else
2290                                 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
2291                         tg3_phy_auxctl_write(tp,
2292                                              MII_TG3_AUXCTL_SHDWSEL_MISC, phy);
2293                 }
2294         }
2295 }
2296
2297 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2298 {
2299         int ret;
2300         u32 val;
2301
2302         if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED)
2303                 return;
2304
2305         ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2306         if (!ret)
2307                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2308                                      val | MII_TG3_AUXCTL_MISC_WIRESPD_EN);
2309 }
2310
2311 static void tg3_phy_apply_otp(struct tg3 *tp)
2312 {
2313         u32 otp, phy;
2314
2315         if (!tp->phy_otp)
2316                 return;
2317
2318         otp = tp->phy_otp;
2319
2320         if (tg3_phy_toggle_auxctl_smdsp(tp, true))
2321                 return;
2322
2323         phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2324         phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
2325         tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2326
2327         phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2328               ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
2329         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2330
2331         phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2332         phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
2333         tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2334
2335         phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2336         tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2337
2338         phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2339         tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2340
2341         phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2342               ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
2343         tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2344
2345         tg3_phy_toggle_auxctl_smdsp(tp, false);
2346 }
2347
2348 static void tg3_eee_pull_config(struct tg3 *tp, struct ethtool_eee *eee)
2349 {
2350         u32 val;
2351         struct ethtool_eee *dest = &tp->eee;
2352
2353         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2354                 return;
2355
2356         if (eee)
2357                 dest = eee;
2358
2359         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, TG3_CL45_D7_EEERES_STAT, &val))
2360                 return;
2361
2362         /* Pull eee_active */
2363         if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2364             val == TG3_CL45_D7_EEERES_STAT_LP_100TX) {
2365                 dest->eee_active = 1;
2366         } else
2367                 dest->eee_active = 0;
2368
2369         /* Pull lp advertised settings */
2370         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE, &val))
2371                 return;
2372         dest->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2373
2374         /* Pull advertised and eee_enabled settings */
2375         if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val))
2376                 return;
2377         dest->eee_enabled = !!val;
2378         dest->advertised = mmd_eee_adv_to_ethtool_adv_t(val);
2379
2380         /* Pull tx_lpi_enabled */
2381         val = tr32(TG3_CPMU_EEE_MODE);
2382         dest->tx_lpi_enabled = !!(val & TG3_CPMU_EEEMD_LPI_IN_TX);
2383
2384         /* Pull lpi timer value */
2385         dest->tx_lpi_timer = tr32(TG3_CPMU_EEE_DBTMR1) & 0xffff;
2386 }
2387
2388 static void tg3_phy_eee_adjust(struct tg3 *tp, bool current_link_up)
2389 {
2390         u32 val;
2391
2392         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2393                 return;
2394
2395         tp->setlpicnt = 0;
2396
2397         if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2398             current_link_up &&
2399             tp->link_config.active_duplex == DUPLEX_FULL &&
2400             (tp->link_config.active_speed == SPEED_100 ||
2401              tp->link_config.active_speed == SPEED_1000)) {
2402                 u32 eeectl;
2403
2404                 if (tp->link_config.active_speed == SPEED_1000)
2405                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US;
2406                 else
2407                         eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US;
2408
2409                 tw32(TG3_CPMU_EEE_CTRL, eeectl);
2410
2411                 tg3_eee_pull_config(tp, NULL);
2412                 if (tp->eee.eee_active)
2413                         tp->setlpicnt = 2;
2414         }
2415
2416         if (!tp->setlpicnt) {
2417                 if (current_link_up &&
2418                    !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2419                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2420                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2421                 }
2422
2423                 val = tr32(TG3_CPMU_EEE_MODE);
2424                 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE);
2425         }
2426 }
2427
2428 static void tg3_phy_eee_enable(struct tg3 *tp)
2429 {
2430         u32 val;
2431
2432         if (tp->link_config.active_speed == SPEED_1000 &&
2433             (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2434              tg3_asic_rev(tp) == ASIC_REV_5719 ||
2435              tg3_flag(tp, 57765_CLASS)) &&
2436             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2437                 val = MII_TG3_DSP_TAP26_ALNOKO |
2438                       MII_TG3_DSP_TAP26_RMRXSTO;
2439                 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2440                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2441         }
2442
2443         val = tr32(TG3_CPMU_EEE_MODE);
2444         tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE);
2445 }
2446
2447 static int tg3_wait_macro_done(struct tg3 *tp)
2448 {
2449         int limit = 100;
2450
2451         while (limit--) {
2452                 u32 tmp32;
2453
2454                 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2455                         if ((tmp32 & 0x1000) == 0)
2456                                 break;
2457                 }
2458         }
2459         if (limit < 0)
2460                 return -EBUSY;
2461
2462         return 0;
2463 }
2464
2465 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2466 {
2467         static const u32 test_pat[4][6] = {
2468         { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2469         { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2470         { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2471         { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2472         };
2473         int chan;
2474
2475         for (chan = 0; chan < 4; chan++) {
2476                 int i;
2477
2478                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2479                              (chan * 0x2000) | 0x0200);
2480                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2481
2482                 for (i = 0; i < 6; i++)
2483                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2484                                      test_pat[chan][i]);
2485
2486                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2487                 if (tg3_wait_macro_done(tp)) {
2488                         *resetp = 1;
2489                         return -EBUSY;
2490                 }
2491
2492                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2493                              (chan * 0x2000) | 0x0200);
2494                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2495                 if (tg3_wait_macro_done(tp)) {
2496                         *resetp = 1;
2497                         return -EBUSY;
2498                 }
2499
2500                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2501                 if (tg3_wait_macro_done(tp)) {
2502                         *resetp = 1;
2503                         return -EBUSY;
2504                 }
2505
2506                 for (i = 0; i < 6; i += 2) {
2507                         u32 low, high;
2508
2509                         if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2510                             tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2511                             tg3_wait_macro_done(tp)) {
2512                                 *resetp = 1;
2513                                 return -EBUSY;
2514                         }
2515                         low &= 0x7fff;
2516                         high &= 0x000f;
2517                         if (low != test_pat[chan][i] ||
2518                             high != test_pat[chan][i+1]) {
2519                                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2520                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2521                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2522
2523                                 return -EBUSY;
2524                         }
2525                 }
2526         }
2527
2528         return 0;
2529 }
2530
2531 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2532 {
2533         int chan;
2534
2535         for (chan = 0; chan < 4; chan++) {
2536                 int i;
2537
2538                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2539                              (chan * 0x2000) | 0x0200);
2540                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2541                 for (i = 0; i < 6; i++)
2542                         tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2543                 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2544                 if (tg3_wait_macro_done(tp))
2545                         return -EBUSY;
2546         }
2547
2548         return 0;
2549 }
2550
2551 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2552 {
2553         u32 reg32, phy9_orig;
2554         int retries, do_phy_reset, err;
2555
2556         retries = 10;
2557         do_phy_reset = 1;
2558         do {
2559                 if (do_phy_reset) {
2560                         err = tg3_bmcr_reset(tp);
2561                         if (err)
2562                                 return err;
2563                         do_phy_reset = 0;
2564                 }
2565
2566                 /* Disable transmitter and interrupt.  */
2567                 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2568                         continue;
2569
2570                 reg32 |= 0x3000;
2571                 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2572
2573                 /* Set full-duplex, 1000 mbps.  */
2574                 tg3_writephy(tp, MII_BMCR,
2575                              BMCR_FULLDPLX | BMCR_SPEED1000);
2576
2577                 /* Set to master mode.  */
2578                 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2579                         continue;
2580
2581                 tg3_writephy(tp, MII_CTRL1000,
2582                              CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
2583
2584                 err = tg3_phy_toggle_auxctl_smdsp(tp, true);
2585                 if (err)
2586                         return err;
2587
2588                 /* Block the PHY control access.  */
2589                 tg3_phydsp_write(tp, 0x8005, 0x0800);
2590
2591                 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2592                 if (!err)
2593                         break;
2594         } while (--retries);
2595
2596         err = tg3_phy_reset_chanpat(tp);
2597         if (err)
2598                 return err;
2599
2600         tg3_phydsp_write(tp, 0x8005, 0x0000);
2601
2602         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2603         tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2604
2605         tg3_phy_toggle_auxctl_smdsp(tp, false);
2606
2607         tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2608
2609         if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
2610                 reg32 &= ~0x3000;
2611                 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2612         } else if (!err)
2613                 err = -EBUSY;
2614
2615         return err;
2616 }
2617
2618 static void tg3_carrier_off(struct tg3 *tp)
2619 {
2620         netif_carrier_off(tp->dev);
2621         tp->link_up = false;
2622 }
2623
2624 static void tg3_warn_mgmt_link_flap(struct tg3 *tp)
2625 {
2626         if (tg3_flag(tp, ENABLE_ASF))
2627                 netdev_warn(tp->dev,
2628                             "Management side-band traffic will be interrupted during phy settings change\n");
2629 }
2630
2631 /* This will reset the tigon3 PHY if there is no valid
2632  * link unless the FORCE argument is non-zero.
2633  */
2634 static int tg3_phy_reset(struct tg3 *tp)
2635 {
2636         u32 val, cpmuctrl;
2637         int err;
2638
2639         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2640                 val = tr32(GRC_MISC_CFG);
2641                 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
2642                 udelay(40);
2643         }
2644         err  = tg3_readphy(tp, MII_BMSR, &val);
2645         err |= tg3_readphy(tp, MII_BMSR, &val);
2646         if (err != 0)
2647                 return -EBUSY;
2648
2649         if (netif_running(tp->dev) && tp->link_up) {
2650                 netif_carrier_off(tp->dev);
2651                 tg3_link_report(tp);
2652         }
2653
2654         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
2655             tg3_asic_rev(tp) == ASIC_REV_5704 ||
2656             tg3_asic_rev(tp) == ASIC_REV_5705) {
2657                 err = tg3_phy_reset_5703_4_5(tp);
2658                 if (err)
2659                         return err;
2660                 goto out;
2661         }
2662
2663         cpmuctrl = 0;
2664         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
2665             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
2666                 cpmuctrl = tr32(TG3_CPMU_CTRL);
2667                 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2668                         tw32(TG3_CPMU_CTRL,
2669                              cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2670         }
2671
2672         err = tg3_bmcr_reset(tp);
2673         if (err)
2674                 return err;
2675
2676         if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2677                 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
2678                 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2679
2680                 tw32(TG3_CPMU_CTRL, cpmuctrl);
2681         }
2682
2683         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
2684             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
2685                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
2686                 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2687                     CPMU_LSPD_1000MB_MACCLK_12_5) {
2688                         val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2689                         udelay(40);
2690                         tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
2691                 }
2692         }
2693
2694         if (tg3_flag(tp, 5717_PLUS) &&
2695             (tp->phy_flags & TG3_PHYFLG_MII_SERDES))
2696                 return 0;
2697
2698         tg3_phy_apply_otp(tp);
2699
2700         if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2701                 tg3_phy_toggle_apd(tp, true);
2702         else
2703                 tg3_phy_toggle_apd(tp, false);
2704
2705 out:
2706         if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2707             !tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2708                 tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2709                 tg3_phydsp_write(tp, 0x000a, 0x0323);
2710                 tg3_phy_toggle_auxctl_smdsp(tp, false);
2711         }
2712
2713         if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2714                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2715                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2716         }
2717
2718         if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2719                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2720                         tg3_phydsp_write(tp, 0x000a, 0x310b);
2721                         tg3_phydsp_write(tp, 0x201f, 0x9506);
2722                         tg3_phydsp_write(tp, 0x401f, 0x14e2);
2723                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2724                 }
2725         } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2726                 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) {
2727                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2728                         if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2729                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2730                                 tg3_writephy(tp, MII_TG3_TEST1,
2731                                              MII_TG3_TEST1_TRIM_EN | 0x4);
2732                         } else
2733                                 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2734
2735                         tg3_phy_toggle_auxctl_smdsp(tp, false);
2736                 }
2737         }
2738
2739         /* Set Extended packet length bit (bit 14) on all chips that */
2740         /* support jumbo frames */
2741         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2742                 /* Cannot do read-modify-write on 5401 */
2743                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2744         } else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2745                 /* Set bit 14 with read-modify-write to preserve other bits */
2746                 err = tg3_phy_auxctl_read(tp,
2747                                           MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val);
2748                 if (!err)
2749                         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2750                                            val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN);
2751         }
2752
2753         /* Set phy register 0x10 bit 0 to high fifo elasticity to support
2754          * jumbo frames transmission.
2755          */
2756         if (tg3_flag(tp, JUMBO_CAPABLE)) {
2757                 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2758                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
2759                                      val | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
2760         }
2761
2762         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
2763                 /* adjust output voltage */
2764                 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2765         }
2766
2767         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5762_A0)
2768                 tg3_phydsp_write(tp, 0xffb, 0x4000);
2769
2770         tg3_phy_toggle_automdix(tp, true);
2771         tg3_phy_set_wirespeed(tp);
2772         return 0;
2773 }
2774
2775 #define TG3_GPIO_MSG_DRVR_PRES           0x00000001
2776 #define TG3_GPIO_MSG_NEED_VAUX           0x00000002
2777 #define TG3_GPIO_MSG_MASK                (TG3_GPIO_MSG_DRVR_PRES | \
2778                                           TG3_GPIO_MSG_NEED_VAUX)
2779 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2780         ((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2781          (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2782          (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2783          (TG3_GPIO_MSG_DRVR_PRES << 12))
2784
2785 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2786         ((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2787          (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2788          (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2789          (TG3_GPIO_MSG_NEED_VAUX << 12))
2790
2791 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2792 {
2793         u32 status, shift;
2794
2795         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2796             tg3_asic_rev(tp) == ASIC_REV_5719)
2797                 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2798         else
2799                 status = tr32(TG3_CPMU_DRV_STATUS);
2800
2801         shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2802         status &= ~(TG3_GPIO_MSG_MASK << shift);
2803         status |= (newstat << shift);
2804
2805         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2806             tg3_asic_rev(tp) == ASIC_REV_5719)
2807                 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2808         else
2809                 tw32(TG3_CPMU_DRV_STATUS, status);
2810
2811         return status >> TG3_APE_GPIO_MSG_SHIFT;
2812 }
2813
2814 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2815 {
2816         if (!tg3_flag(tp, IS_NIC))
2817                 return 0;
2818
2819         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2820             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2821             tg3_asic_rev(tp) == ASIC_REV_5720) {
2822                 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2823                         return -EIO;
2824
2825                 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2826
2827                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2828                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2829
2830                 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2831         } else {
2832                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl,
2833                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2834         }
2835
2836         return 0;
2837 }
2838
2839 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2840 {
2841         u32 grc_local_ctrl;
2842
2843         if (!tg3_flag(tp, IS_NIC) ||
2844             tg3_asic_rev(tp) == ASIC_REV_5700 ||
2845             tg3_asic_rev(tp) == ASIC_REV_5701)
2846                 return;
2847
2848         grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2849
2850         tw32_wait_f(GRC_LOCAL_CTRL,
2851                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2852                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2853
2854         tw32_wait_f(GRC_LOCAL_CTRL,
2855                     grc_local_ctrl,
2856                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2857
2858         tw32_wait_f(GRC_LOCAL_CTRL,
2859                     grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2860                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2861 }
2862
2863 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2864 {
2865         if (!tg3_flag(tp, IS_NIC))
2866                 return;
2867
2868         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
2869             tg3_asic_rev(tp) == ASIC_REV_5701) {
2870                 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2871                             (GRC_LCLCTRL_GPIO_OE0 |
2872                              GRC_LCLCTRL_GPIO_OE1 |
2873                              GRC_LCLCTRL_GPIO_OE2 |
2874                              GRC_LCLCTRL_GPIO_OUTPUT0 |
2875                              GRC_LCLCTRL_GPIO_OUTPUT1),
2876                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2877         } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2878                    tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2879                 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2880                 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2881                                      GRC_LCLCTRL_GPIO_OE1 |
2882                                      GRC_LCLCTRL_GPIO_OE2 |
2883                                      GRC_LCLCTRL_GPIO_OUTPUT0 |
2884                                      GRC_LCLCTRL_GPIO_OUTPUT1 |
2885                                      tp->grc_local_ctrl;
2886                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2887                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2888
2889                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2890                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2891                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2892
2893                 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2894                 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2895                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2896         } else {
2897                 u32 no_gpio2;
2898                 u32 grc_local_ctrl = 0;
2899
2900                 /* Workaround to prevent overdrawing Amps. */
2901                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
2902                         grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2903                         tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
2904                                     grc_local_ctrl,
2905                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2906                 }
2907
2908                 /* On 5753 and variants, GPIO2 cannot be used. */
2909                 no_gpio2 = tp->nic_sram_data_cfg &
2910                            NIC_SRAM_DATA_CFG_NO_GPIO2;
2911
2912                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2913                                   GRC_LCLCTRL_GPIO_OE1 |
2914                                   GRC_LCLCTRL_GPIO_OE2 |
2915                                   GRC_LCLCTRL_GPIO_OUTPUT1 |
2916                                   GRC_LCLCTRL_GPIO_OUTPUT2;
2917                 if (no_gpio2) {
2918                         grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2919                                             GRC_LCLCTRL_GPIO_OUTPUT2);
2920                 }
2921                 tw32_wait_f(GRC_LOCAL_CTRL,
2922                             tp->grc_local_ctrl | grc_local_ctrl,
2923                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2924
2925                 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2926
2927                 tw32_wait_f(GRC_LOCAL_CTRL,
2928                             tp->grc_local_ctrl | grc_local_ctrl,
2929                             TG3_GRC_LCLCTL_PWRSW_DELAY);
2930
2931                 if (!no_gpio2) {
2932                         grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2933                         tw32_wait_f(GRC_LOCAL_CTRL,
2934                                     tp->grc_local_ctrl | grc_local_ctrl,
2935                                     TG3_GRC_LCLCTL_PWRSW_DELAY);
2936                 }
2937         }
2938 }
2939
2940 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2941 {
2942         u32 msg = 0;
2943
2944         /* Serialize power state transitions */
2945         if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2946                 return;
2947
2948         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2949                 msg = TG3_GPIO_MSG_NEED_VAUX;
2950
2951         msg = tg3_set_function_status(tp, msg);
2952
2953         if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK)
2954                 goto done;
2955
2956         if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK)
2957                 tg3_pwrsrc_switch_to_vaux(tp);
2958         else
2959                 tg3_pwrsrc_die_with_vmain(tp);
2960
2961 done:
2962         tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2963 }
2964
2965 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2966 {
2967         bool need_vaux = false;
2968
2969         /* The GPIOs do something completely different on 57765. */
2970         if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2971                 return;
2972
2973         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
2974             tg3_asic_rev(tp) == ASIC_REV_5719 ||
2975             tg3_asic_rev(tp) == ASIC_REV_5720) {
2976                 tg3_frob_aux_power_5717(tp, include_wol ?
2977                                         tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2978                 return;
2979         }
2980
2981         if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2982                 struct net_device *dev_peer;
2983
2984                 dev_peer = pci_get_drvdata(tp->pdev_peer);
2985
2986                 /* remove_one() may have been run on the peer. */
2987                 if (dev_peer) {
2988                         struct tg3 *tp_peer = netdev_priv(dev_peer);
2989
2990                         if (tg3_flag(tp_peer, INIT_COMPLETE))
2991                                 return;
2992
2993                         if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2994                             tg3_flag(tp_peer, ENABLE_ASF))
2995                                 need_vaux = true;
2996                 }
2997         }
2998
2999         if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
3000             tg3_flag(tp, ENABLE_ASF))
3001                 need_vaux = true;
3002
3003         if (need_vaux)
3004                 tg3_pwrsrc_switch_to_vaux(tp);
3005         else
3006                 tg3_pwrsrc_die_with_vmain(tp);
3007 }
3008
3009 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
3010 {
3011         if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
3012                 return 1;
3013         else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
3014                 if (speed != SPEED_10)
3015                         return 1;
3016         } else if (speed == SPEED_10)
3017                 return 1;
3018
3019         return 0;
3020 }
3021
3022 static bool tg3_phy_power_bug(struct tg3 *tp)
3023 {
3024         switch (tg3_asic_rev(tp)) {
3025         case ASIC_REV_5700:
3026         case ASIC_REV_5704:
3027                 return true;
3028         case ASIC_REV_5780:
3029                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3030                         return true;
3031                 return false;
3032         case ASIC_REV_5717:
3033                 if (!tp->pci_fn)
3034                         return true;
3035                 return false;
3036         case ASIC_REV_5719:
3037         case ASIC_REV_5720:
3038                 if ((tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
3039                     !tp->pci_fn)
3040                         return true;
3041                 return false;
3042         }
3043
3044         return false;
3045 }
3046
3047 static bool tg3_phy_led_bug(struct tg3 *tp)
3048 {
3049         switch (tg3_asic_rev(tp)) {
3050         case ASIC_REV_5719:
3051         case ASIC_REV_5720:
3052                 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
3053                     !tp->pci_fn)
3054                         return true;
3055                 return false;
3056         }
3057
3058         return false;
3059 }
3060
3061 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
3062 {
3063         u32 val;
3064
3065         if (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)
3066                 return;
3067
3068         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
3069                 if (tg3_asic_rev(tp) == ASIC_REV_5704) {
3070                         u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
3071                         u32 serdes_cfg = tr32(MAC_SERDES_CFG);
3072
3073                         sg_dig_ctrl |=
3074                                 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
3075                         tw32(SG_DIG_CTRL, sg_dig_ctrl);
3076                         tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
3077                 }
3078                 return;
3079         }
3080
3081         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3082                 tg3_bmcr_reset(tp);
3083                 val = tr32(GRC_MISC_CFG);
3084                 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
3085                 udelay(40);
3086                 return;
3087         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3088                 u32 phytest;
3089                 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
3090                         u32 phy;
3091
3092                         tg3_writephy(tp, MII_ADVERTISE, 0);
3093                         tg3_writephy(tp, MII_BMCR,
3094                                      BMCR_ANENABLE | BMCR_ANRESTART);
3095
3096                         tg3_writephy(tp, MII_TG3_FET_TEST,
3097                                      phytest | MII_TG3_FET_SHADOW_EN);
3098                         if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
3099                                 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD;
3100                                 tg3_writephy(tp,
3101                                              MII_TG3_FET_SHDW_AUXMODE4,
3102                                              phy);
3103                         }
3104                         tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
3105                 }
3106                 return;
3107         } else if (do_low_power) {
3108                 if (!tg3_phy_led_bug(tp))
3109                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
3110                                      MII_TG3_EXT_CTRL_FORCE_LED_OFF);
3111
3112                 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR |
3113                       MII_TG3_AUXCTL_PCTL_SPR_ISOLATE |
3114                       MII_TG3_AUXCTL_PCTL_VREG_11V;
3115                 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
3116         }
3117
3118         /* The PHY should not be powered down on some chips because
3119          * of bugs.
3120          */
3121         if (tg3_phy_power_bug(tp))
3122                 return;
3123
3124         if (tg3_chip_rev(tp) == CHIPREV_5784_AX ||
3125             tg3_chip_rev(tp) == CHIPREV_5761_AX) {
3126                 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
3127                 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
3128                 val |= CPMU_LSPD_1000MB_MACCLK_12_5;
3129                 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
3130         }
3131
3132         tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
3133 }
3134
3135 /* tp->lock is held. */
3136 static int tg3_nvram_lock(struct tg3 *tp)
3137 {
3138         if (tg3_flag(tp, NVRAM)) {
3139                 int i;
3140
3141                 if (tp->nvram_lock_cnt == 0) {
3142                         tw32(NVRAM_SWARB, SWARB_REQ_SET1);
3143                         for (i = 0; i < 8000; i++) {
3144                                 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
3145                                         break;
3146                                 udelay(20);
3147                         }
3148                         if (i == 8000) {
3149                                 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
3150                                 return -ENODEV;
3151                         }
3152                 }
3153                 tp->nvram_lock_cnt++;
3154         }
3155         return 0;
3156 }
3157
3158 /* tp->lock is held. */
3159 static void tg3_nvram_unlock(struct tg3 *tp)
3160 {
3161         if (tg3_flag(tp, NVRAM)) {
3162                 if (tp->nvram_lock_cnt > 0)
3163                         tp->nvram_lock_cnt--;
3164                 if (tp->nvram_lock_cnt == 0)
3165                         tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
3166         }
3167 }
3168
3169 /* tp->lock is held. */
3170 static void tg3_enable_nvram_access(struct tg3 *tp)
3171 {
3172         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3173                 u32 nvaccess = tr32(NVRAM_ACCESS);
3174
3175                 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
3176         }
3177 }
3178
3179 /* tp->lock is held. */
3180 static void tg3_disable_nvram_access(struct tg3 *tp)
3181 {
3182         if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
3183                 u32 nvaccess = tr32(NVRAM_ACCESS);
3184
3185                 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
3186         }
3187 }
3188
3189 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
3190                                         u32 offset, u32 *val)
3191 {
3192         u32 tmp;
3193         int i;
3194
3195         if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
3196                 return -EINVAL;
3197
3198         tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
3199                                         EEPROM_ADDR_DEVID_MASK |
3200                                         EEPROM_ADDR_READ);
3201         tw32(GRC_EEPROM_ADDR,
3202              tmp |
3203              (0 << EEPROM_ADDR_DEVID_SHIFT) |
3204              ((offset << EEPROM_ADDR_ADDR_SHIFT) &
3205               EEPROM_ADDR_ADDR_MASK) |
3206              EEPROM_ADDR_READ | EEPROM_ADDR_START);
3207
3208         for (i = 0; i < 1000; i++) {
3209                 tmp = tr32(GRC_EEPROM_ADDR);
3210
3211                 if (tmp & EEPROM_ADDR_COMPLETE)
3212                         break;
3213                 msleep(1);
3214         }
3215         if (!(tmp & EEPROM_ADDR_COMPLETE))
3216                 return -EBUSY;
3217
3218         tmp = tr32(GRC_EEPROM_DATA);
3219
3220         /*
3221          * The data will always be opposite the native endian
3222          * format.  Perform a blind byteswap to compensate.
3223          */
3224         *val = swab32(tmp);
3225
3226         return 0;
3227 }
3228
3229 #define NVRAM_CMD_TIMEOUT 10000
3230
3231 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3232 {
3233         int i;
3234
3235         tw32(NVRAM_CMD, nvram_cmd);
3236         for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3237                 udelay(10);
3238                 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3239                         udelay(10);
3240                         break;
3241                 }
3242         }
3243
3244         if (i == NVRAM_CMD_TIMEOUT)
3245                 return -EBUSY;
3246
3247         return 0;
3248 }
3249
3250 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3251 {
3252         if (tg3_flag(tp, NVRAM) &&
3253             tg3_flag(tp, NVRAM_BUFFERED) &&
3254             tg3_flag(tp, FLASH) &&
3255             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3256             (tp->nvram_jedecnum == JEDEC_ATMEL))
3257
3258                 addr = ((addr / tp->nvram_pagesize) <<
3259                         ATMEL_AT45DB0X1B_PAGE_POS) +
3260                        (addr % tp->nvram_pagesize);
3261
3262         return addr;
3263 }
3264
3265 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3266 {
3267         if (tg3_flag(tp, NVRAM) &&
3268             tg3_flag(tp, NVRAM_BUFFERED) &&
3269             tg3_flag(tp, FLASH) &&
3270             !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3271             (tp->nvram_jedecnum == JEDEC_ATMEL))
3272
3273                 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3274                         tp->nvram_pagesize) +
3275                        (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3276
3277         return addr;
3278 }
3279
3280 /* NOTE: Data read in from NVRAM is byteswapped according to
3281  * the byteswapping settings for all other register accesses.
3282  * tg3 devices are BE devices, so on a BE machine, the data
3283  * returned will be exactly as it is seen in NVRAM.  On a LE
3284  * machine, the 32-bit value will be byteswapped.
3285  */
3286 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3287 {
3288         int ret;
3289
3290         if (!tg3_flag(tp, NVRAM))
3291                 return tg3_nvram_read_using_eeprom(tp, offset, val);
3292
3293         offset = tg3_nvram_phys_addr(tp, offset);
3294
3295         if (offset > NVRAM_ADDR_MSK)
3296                 return -EINVAL;
3297
3298         ret = tg3_nvram_lock(tp);
3299         if (ret)
3300                 return ret;
3301
3302         tg3_enable_nvram_access(tp);
3303
3304         tw32(NVRAM_ADDR, offset);
3305         ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3306                 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
3307
3308         if (ret == 0)
3309                 *val = tr32(NVRAM_RDDATA);
3310
3311         tg3_disable_nvram_access(tp);
3312
3313         tg3_nvram_unlock(tp);
3314
3315         return ret;
3316 }
3317
3318 /* Ensures NVRAM data is in bytestream format. */
3319 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3320 {
3321         u32 v;
3322         int res = tg3_nvram_read(tp, offset, &v);
3323         if (!res)
3324                 *val = cpu_to_be32(v);
3325         return res;
3326 }
3327
3328 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3329                                     u32 offset, u32 len, u8 *buf)
3330 {
3331         int i, j, rc = 0;
3332         u32 val;
3333
3334         for (i = 0; i < len; i += 4) {
3335                 u32 addr;
3336                 __be32 data;
3337
3338                 addr = offset + i;
3339
3340                 memcpy(&data, buf + i, 4);
3341
3342                 /*
3343                  * The SEEPROM interface expects the data to always be opposite
3344                  * the native endian format.  We accomplish this by reversing
3345                  * all the operations that would have been performed on the
3346                  * data from a call to tg3_nvram_read_be32().
3347                  */
3348                 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data)));
3349
3350                 val = tr32(GRC_EEPROM_ADDR);
3351                 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
3352
3353                 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
3354                         EEPROM_ADDR_READ);
3355                 tw32(GRC_EEPROM_ADDR, val |
3356                         (0 << EEPROM_ADDR_DEVID_SHIFT) |
3357                         (addr & EEPROM_ADDR_ADDR_MASK) |
3358                         EEPROM_ADDR_START |
3359                         EEPROM_ADDR_WRITE);
3360
3361                 for (j = 0; j < 1000; j++) {
3362                         val = tr32(GRC_EEPROM_ADDR);
3363
3364                         if (val & EEPROM_ADDR_COMPLETE)
3365                                 break;
3366                         msleep(1);
3367                 }
3368                 if (!(val & EEPROM_ADDR_COMPLETE)) {
3369                         rc = -EBUSY;
3370                         break;
3371                 }
3372         }
3373
3374         return rc;
3375 }
3376
3377 /* offset and length are dword aligned */
3378 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3379                 u8 *buf)
3380 {
3381         int ret = 0;
3382         u32 pagesize = tp->nvram_pagesize;
3383         u32 pagemask = pagesize - 1;
3384         u32 nvram_cmd;
3385         u8 *tmp;
3386
3387         tmp = kmalloc(pagesize, GFP_KERNEL);
3388         if (tmp == NULL)
3389                 return -ENOMEM;
3390
3391         while (len) {
3392                 int j;
3393                 u32 phy_addr, page_off, size;
3394
3395                 phy_addr = offset & ~pagemask;
3396
3397                 for (j = 0; j < pagesize; j += 4) {
3398                         ret = tg3_nvram_read_be32(tp, phy_addr + j,
3399                                                   (__be32 *) (tmp + j));
3400                         if (ret)
3401                                 break;
3402                 }
3403                 if (ret)
3404                         break;
3405
3406                 page_off = offset & pagemask;
3407                 size = pagesize;
3408                 if (len < size)
3409                         size = len;
3410
3411                 len -= size;
3412
3413                 memcpy(tmp + page_off, buf, size);
3414
3415                 offset = offset + (pagesize - page_off);
3416
3417                 tg3_enable_nvram_access(tp);
3418
3419                 /*
3420                  * Before we can erase the flash page, we need
3421                  * to issue a special "write enable" command.
3422                  */
3423                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3424
3425                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3426                         break;
3427
3428                 /* Erase the target page */
3429                 tw32(NVRAM_ADDR, phy_addr);
3430
3431                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3432                         NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
3433
3434                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3435                         break;
3436
3437                 /* Issue another write enable to start the write. */
3438                 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3439
3440                 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3441                         break;
3442
3443                 for (j = 0; j < pagesize; j += 4) {
3444                         __be32 data;
3445
3446                         data = *((__be32 *) (tmp + j));
3447
3448                         tw32(NVRAM_WRDATA, be32_to_cpu(data));
3449
3450                         tw32(NVRAM_ADDR, phy_addr + j);
3451
3452                         nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3453                                 NVRAM_CMD_WR;
3454
3455                         if (j == 0)
3456                                 nvram_cmd |= NVRAM_CMD_FIRST;
3457                         else if (j == (pagesize - 4))
3458                                 nvram_cmd |= NVRAM_CMD_LAST;
3459
3460                         ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3461                         if (ret)
3462                                 break;
3463                 }
3464                 if (ret)
3465                         break;
3466         }
3467
3468         nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3469         tg3_nvram_exec_cmd(tp, nvram_cmd);
3470
3471         kfree(tmp);
3472
3473         return ret;
3474 }
3475
3476 /* offset and length are dword aligned */
3477 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3478                 u8 *buf)
3479 {
3480         int i, ret = 0;
3481
3482         for (i = 0; i < len; i += 4, offset += 4) {
3483                 u32 page_off, phy_addr, nvram_cmd;
3484                 __be32 data;
3485
3486                 memcpy(&data, buf + i, 4);
3487                 tw32(NVRAM_WRDATA, be32_to_cpu(data));
3488
3489                 page_off = offset % tp->nvram_pagesize;
3490
3491                 phy_addr = tg3_nvram_phys_addr(tp, offset);
3492
3493                 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3494
3495                 if (page_off == 0 || i == 0)
3496                         nvram_cmd |= NVRAM_CMD_FIRST;
3497                 if (page_off == (tp->nvram_pagesize - 4))
3498                         nvram_cmd |= NVRAM_CMD_LAST;
3499
3500                 if (i == (len - 4))
3501                         nvram_cmd |= NVRAM_CMD_LAST;
3502
3503                 if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3504                     !tg3_flag(tp, FLASH) ||
3505                     !tg3_flag(tp, 57765_PLUS))
3506                         tw32(NVRAM_ADDR, phy_addr);
3507
3508                 if (tg3_asic_rev(tp) != ASIC_REV_5752 &&
3509                     !tg3_flag(tp, 5755_PLUS) &&
3510                     (tp->nvram_jedecnum == JEDEC_ST) &&
3511                     (nvram_cmd & NVRAM_CMD_FIRST)) {
3512                         u32 cmd;
3513
3514                         cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3515                         ret = tg3_nvram_exec_cmd(tp, cmd);
3516                         if (ret)
3517                                 break;
3518                 }
3519                 if (!tg3_flag(tp, FLASH)) {
3520                         /* We always do complete word writes to eeprom. */
3521                         nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3522                 }
3523
3524                 ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3525                 if (ret)
3526                         break;
3527         }
3528         return ret;
3529 }
3530
3531 /* offset and length are dword aligned */
3532 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3533 {
3534         int ret;
3535
3536         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3537                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
3538                        ~GRC_LCLCTRL_GPIO_OUTPUT1);
3539                 udelay(40);
3540         }
3541
3542         if (!tg3_flag(tp, NVRAM)) {
3543                 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3544         } else {
3545                 u32 grc_mode;
3546
3547                 ret = tg3_nvram_lock(tp);
3548                 if (ret)
3549                         return ret;
3550
3551                 tg3_enable_nvram_access(tp);
3552                 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3553                         tw32(NVRAM_WRITE1, 0x406);
3554
3555                 grc_mode = tr32(GRC_MODE);
3556                 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3557
3558                 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3559                         ret = tg3_nvram_write_block_buffered(tp, offset, len,
3560                                 buf);
3561                 } else {
3562                         ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3563                                 buf);
3564                 }
3565
3566                 grc_mode = tr32(GRC_MODE);
3567                 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3568
3569                 tg3_disable_nvram_access(tp);
3570                 tg3_nvram_unlock(tp);
3571         }
3572
3573         if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3574                 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
3575                 udelay(40);
3576         }
3577
3578         return ret;
3579 }
3580
3581 #define RX_CPU_SCRATCH_BASE     0x30000
3582 #define RX_CPU_SCRATCH_SIZE     0x04000
3583 #define TX_CPU_SCRATCH_BASE     0x34000
3584 #define TX_CPU_SCRATCH_SIZE     0x04000
3585
3586 /* tp->lock is held. */
3587 static int tg3_pause_cpu(struct tg3 *tp, u32 cpu_base)
3588 {
3589         int i;
3590         const int iters = 10000;
3591
3592         for (i = 0; i < iters; i++) {
3593                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3594                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3595                 if (tr32(cpu_base + CPU_MODE) & CPU_MODE_HALT)
3596                         break;
3597                 if (pci_channel_offline(tp->pdev))
3598                         return -EBUSY;
3599         }
3600
3601         return (i == iters) ? -EBUSY : 0;
3602 }
3603
3604 /* tp->lock is held. */
3605 static int tg3_rxcpu_pause(struct tg3 *tp)
3606 {
3607         int rc = tg3_pause_cpu(tp, RX_CPU_BASE);
3608
3609         tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3610         tw32_f(RX_CPU_BASE + CPU_MODE,  CPU_MODE_HALT);
3611         udelay(10);
3612
3613         return rc;
3614 }
3615
3616 /* tp->lock is held. */
3617 static int tg3_txcpu_pause(struct tg3 *tp)
3618 {
3619         return tg3_pause_cpu(tp, TX_CPU_BASE);
3620 }
3621
3622 /* tp->lock is held. */
3623 static void tg3_resume_cpu(struct tg3 *tp, u32 cpu_base)
3624 {
3625         tw32(cpu_base + CPU_STATE, 0xffffffff);
3626         tw32_f(cpu_base + CPU_MODE,  0x00000000);
3627 }
3628
3629 /* tp->lock is held. */
3630 static void tg3_rxcpu_resume(struct tg3 *tp)
3631 {
3632         tg3_resume_cpu(tp, RX_CPU_BASE);
3633 }
3634
3635 /* tp->lock is held. */
3636 static int tg3_halt_cpu(struct tg3 *tp, u32 cpu_base)
3637 {
3638         int rc;
3639
3640         BUG_ON(cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3641
3642         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
3643                 u32 val = tr32(GRC_VCPU_EXT_CTRL);
3644
3645                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
3646                 return 0;
3647         }
3648         if (cpu_base == RX_CPU_BASE) {
3649                 rc = tg3_rxcpu_pause(tp);
3650         } else {
3651                 /*
3652                  * There is only an Rx CPU for the 5750 derivative in the
3653                  * BCM4785.
3654                  */
3655                 if (tg3_flag(tp, IS_SSB_CORE))
3656                         return 0;
3657
3658                 rc = tg3_txcpu_pause(tp);
3659         }
3660
3661         if (rc) {
3662                 netdev_err(tp->dev, "%s timed out, %s CPU\n",
3663                            __func__, cpu_base == RX_CPU_BASE ? "RX" : "TX");
3664                 return -ENODEV;
3665         }
3666
3667         /* Clear firmware's nvram arbitration. */
3668         if (tg3_flag(tp, NVRAM))
3669                 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
3670         return 0;
3671 }
3672
3673 static int tg3_fw_data_len(struct tg3 *tp,
3674                            const struct tg3_firmware_hdr *fw_hdr)
3675 {
3676         int fw_len;
3677
3678         /* Non fragmented firmware have one firmware header followed by a
3679          * contiguous chunk of data to be written. The length field in that
3680          * header is not the length of data to be written but the complete
3681          * length of the bss. The data length is determined based on
3682          * tp->fw->size minus headers.
3683          *
3684          * Fragmented firmware have a main header followed by multiple
3685          * fragments. Each fragment is identical to non fragmented firmware
3686          * with a firmware header followed by a contiguous chunk of data. In
3687          * the main header, the length field is unused and set to 0xffffffff.
3688          * In each fragment header the length is the entire size of that
3689          * fragment i.e. fragment data + header length. Data length is
3690          * therefore length field in the header minus TG3_FW_HDR_LEN.
3691          */
3692         if (tp->fw_len == 0xffffffff)
3693                 fw_len = be32_to_cpu(fw_hdr->len);
3694         else
3695                 fw_len = tp->fw->size;
3696
3697         return (fw_len - TG3_FW_HDR_LEN) / sizeof(u32);
3698 }
3699
3700 /* tp->lock is held. */
3701 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3702                                  u32 cpu_scratch_base, int cpu_scratch_size,
3703                                  const struct tg3_firmware_hdr *fw_hdr)
3704 {
3705         int err, i;
3706         void (*write_op)(struct tg3 *, u32, u32);
3707         int total_len = tp->fw->size;
3708
3709         if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3710                 netdev_err(tp->dev,
3711                            "%s: Trying to load TX cpu firmware which is 5705\n",
3712                            __func__);
3713                 return -EINVAL;
3714         }
3715
3716         if (tg3_flag(tp, 5705_PLUS) && tg3_asic_rev(tp) != ASIC_REV_57766)
3717                 write_op = tg3_write_mem;
3718         else
3719                 write_op = tg3_write_indirect_reg32;
3720
3721         if (tg3_asic_rev(tp) != ASIC_REV_57766) {
3722                 /* It is possible that bootcode is still loading at this point.
3723                  * Get the nvram lock first before halting the cpu.
3724                  */
3725                 int lock_err = tg3_nvram_lock(tp);
3726                 err = tg3_halt_cpu(tp, cpu_base);
3727                 if (!lock_err)
3728                         tg3_nvram_unlock(tp);
3729                 if (err)
3730                         goto out;
3731
3732                 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3733                         write_op(tp, cpu_scratch_base + i, 0);
3734                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3735                 tw32(cpu_base + CPU_MODE,
3736                      tr32(cpu_base + CPU_MODE) | CPU_MODE_HALT);
3737         } else {
3738                 /* Subtract additional main header for fragmented firmware and
3739                  * advance to the first fragment
3740                  */
3741                 total_len -= TG3_FW_HDR_LEN;
3742                 fw_hdr++;
3743         }
3744
3745         do {
3746                 u32 *fw_data = (u32 *)(fw_hdr + 1);
3747                 for (i = 0; i < tg3_fw_data_len(tp, fw_hdr); i++)
3748                         write_op(tp, cpu_scratch_base +
3749                                      (be32_to_cpu(fw_hdr->base_addr) & 0xffff) +
3750                                      (i * sizeof(u32)),
3751                                  be32_to_cpu(fw_data[i]));
3752
3753                 total_len -= be32_to_cpu(fw_hdr->len);
3754
3755                 /* Advance to next fragment */
3756                 fw_hdr = (struct tg3_firmware_hdr *)
3757                          ((void *)fw_hdr + be32_to_cpu(fw_hdr->len));
3758         } while (total_len > 0);
3759
3760         err = 0;
3761
3762 out:
3763         return err;
3764 }
3765
3766 /* tp->lock is held. */
3767 static int tg3_pause_cpu_and_set_pc(struct tg3 *tp, u32 cpu_base, u32 pc)
3768 {
3769         int i;
3770         const int iters = 5;
3771
3772         tw32(cpu_base + CPU_STATE, 0xffffffff);
3773         tw32_f(cpu_base + CPU_PC, pc);
3774
3775         for (i = 0; i < iters; i++) {
3776                 if (tr32(cpu_base + CPU_PC) == pc)
3777                         break;
3778                 tw32(cpu_base + CPU_STATE, 0xffffffff);
3779                 tw32(cpu_base + CPU_MODE,  CPU_MODE_HALT);
3780                 tw32_f(cpu_base + CPU_PC, pc);
3781                 udelay(1000);
3782         }
3783
3784         return (i == iters) ? -EBUSY : 0;
3785 }
3786
3787 /* tp->lock is held. */
3788 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3789 {
3790         const struct tg3_firmware_hdr *fw_hdr;
3791         int err;
3792
3793         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3794
3795         /* Firmware blob starts with version numbers, followed by
3796            start address and length. We are setting complete length.
3797            length = end_address_of_bss - start_address_of_text.
3798            Remainder is the blob to be loaded contiguously
3799            from start address. */
3800
3801         err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3802                                     RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
3803                                     fw_hdr);
3804         if (err)
3805                 return err;
3806
3807         err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3808                                     TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
3809                                     fw_hdr);
3810         if (err)
3811                 return err;
3812
3813         /* Now startup only the RX cpu. */
3814         err = tg3_pause_cpu_and_set_pc(tp, RX_CPU_BASE,
3815                                        be32_to_cpu(fw_hdr->base_addr));
3816         if (err) {
3817                 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3818                            "should be %08x\n", __func__,
3819                            tr32(RX_CPU_BASE + CPU_PC),
3820                                 be32_to_cpu(fw_hdr->base_addr));
3821                 return -ENODEV;
3822         }
3823
3824         tg3_rxcpu_resume(tp);
3825
3826         return 0;
3827 }
3828
3829 static int tg3_validate_rxcpu_state(struct tg3 *tp)
3830 {
3831         const int iters = 1000;
3832         int i;
3833         u32 val;
3834
3835         /* Wait for boot code to complete initialization and enter service
3836          * loop. It is then safe to download service patches
3837          */
3838         for (i = 0; i < iters; i++) {
3839                 if (tr32(RX_CPU_HWBKPT) == TG3_SBROM_IN_SERVICE_LOOP)
3840                         break;
3841
3842                 udelay(10);
3843         }
3844
3845         if (i == iters) {
3846                 netdev_err(tp->dev, "Boot code not ready for service patches\n");
3847                 return -EBUSY;
3848         }
3849
3850         val = tg3_read_indirect_reg32(tp, TG3_57766_FW_HANDSHAKE);
3851         if (val & 0xff) {
3852                 netdev_warn(tp->dev,
3853                             "Other patches exist. Not downloading EEE patch\n");
3854                 return -EEXIST;
3855         }
3856
3857         return 0;
3858 }
3859
3860 /* tp->lock is held. */
3861 static void tg3_load_57766_firmware(struct tg3 *tp)
3862 {
3863         struct tg3_firmware_hdr *fw_hdr;
3864
3865         if (!tg3_flag(tp, NO_NVRAM))
3866                 return;
3867
3868         if (tg3_validate_rxcpu_state(tp))
3869                 return;
3870
3871         if (!tp->fw)
3872                 return;
3873
3874         /* This firmware blob has a different format than older firmware
3875          * releases as given below. The main difference is we have fragmented
3876          * data to be written to non-contiguous locations.
3877          *
3878          * In the beginning we have a firmware header identical to other
3879          * firmware which consists of version, base addr and length. The length
3880          * here is unused and set to 0xffffffff.
3881          *
3882          * This is followed by a series of firmware fragments which are
3883          * individually identical to previous firmware. i.e. they have the
3884          * firmware header and followed by data for that fragment. The version
3885          * field of the individual fragment header is unused.
3886          */
3887
3888         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3889         if (be32_to_cpu(fw_hdr->base_addr) != TG3_57766_FW_BASE_ADDR)
3890                 return;
3891
3892         if (tg3_rxcpu_pause(tp))
3893                 return;
3894
3895         /* tg3_load_firmware_cpu() will always succeed for the 57766 */
3896         tg3_load_firmware_cpu(tp, 0, TG3_57766_FW_BASE_ADDR, 0, fw_hdr);
3897
3898         tg3_rxcpu_resume(tp);
3899 }
3900
3901 /* tp->lock is held. */
3902 static int tg3_load_tso_firmware(struct tg3 *tp)
3903 {
3904         const struct tg3_firmware_hdr *fw_hdr;
3905         unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3906         int err;
3907
3908         if (!tg3_flag(tp, FW_TSO))
3909                 return 0;
3910
3911         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
3912
3913         /* Firmware blob starts with version numbers, followed by
3914            start address and length. We are setting complete length.
3915            length = end_address_of_bss - start_address_of_text.
3916            Remainder is the blob to be loaded contiguously
3917            from start address. */
3918
3919         cpu_scratch_size = tp->fw_len;
3920
3921         if (tg3_asic_rev(tp) == ASIC_REV_5705) {
3922                 cpu_base = RX_CPU_BASE;
3923                 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3924         } else {
3925                 cpu_base = TX_CPU_BASE;
3926                 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3927                 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3928         }
3929
3930         err = tg3_load_firmware_cpu(tp, cpu_base,
3931                                     cpu_scratch_base, cpu_scratch_size,
3932                                     fw_hdr);
3933         if (err)
3934                 return err;
3935
3936         /* Now startup the cpu. */
3937         err = tg3_pause_cpu_and_set_pc(tp, cpu_base,
3938                                        be32_to_cpu(fw_hdr->base_addr));
3939         if (err) {
3940                 netdev_err(tp->dev,
3941                            "%s fails to set CPU PC, is %08x should be %08x\n",
3942                            __func__, tr32(cpu_base + CPU_PC),
3943                            be32_to_cpu(fw_hdr->base_addr));
3944                 return -ENODEV;
3945         }
3946
3947         tg3_resume_cpu(tp, cpu_base);
3948         return 0;
3949 }
3950
3951
3952 /* tp->lock is held. */
3953 static void __tg3_set_mac_addr(struct tg3 *tp, bool skip_mac_1)
3954 {
3955         u32 addr_high, addr_low;
3956         int i;
3957
3958         addr_high = ((tp->dev->dev_addr[0] << 8) |
3959                      tp->dev->dev_addr[1]);
3960         addr_low = ((tp->dev->dev_addr[2] << 24) |
3961                     (tp->dev->dev_addr[3] << 16) |
3962                     (tp->dev->dev_addr[4] <<  8) |
3963                     (tp->dev->dev_addr[5] <<  0));
3964         for (i = 0; i < 4; i++) {
3965                 if (i == 1 && skip_mac_1)
3966                         continue;
3967                 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
3968                 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
3969         }
3970
3971         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
3972             tg3_asic_rev(tp) == ASIC_REV_5704) {
3973                 for (i = 0; i < 12; i++) {
3974                         tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
3975                         tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
3976                 }
3977         }
3978
3979         addr_high = (tp->dev->dev_addr[0] +
3980                      tp->dev->dev_addr[1] +
3981                      tp->dev->dev_addr[2] +
3982                      tp->dev->dev_addr[3] +
3983                      tp->dev->dev_addr[4] +
3984                      tp->dev->dev_addr[5]) &
3985                 TX_BACKOFF_SEED_MASK;
3986         tw32(MAC_TX_BACKOFF_SEED, addr_high);
3987 }
3988
3989 static void tg3_enable_register_access(struct tg3 *tp)
3990 {
3991         /*
3992          * Make sure register accesses (indirect or otherwise) will function
3993          * correctly.
3994          */
3995         pci_write_config_dword(tp->pdev,
3996                                TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl);
3997 }
3998
3999 static int tg3_power_up(struct tg3 *tp)
4000 {
4001         int err;
4002
4003         tg3_enable_register_access(tp);
4004
4005         err = pci_set_power_state(tp->pdev, PCI_D0);
4006         if (!err) {
4007                 /* Switch out of Vaux if it is a NIC */
4008                 tg3_pwrsrc_switch_to_vmain(tp);
4009         } else {
4010                 netdev_err(tp->dev, "Transition to D0 failed\n");
4011         }
4012
4013         return err;
4014 }
4015
4016 static int tg3_setup_phy(struct tg3 *, bool);
4017
4018 static int tg3_power_down_prepare(struct tg3 *tp)
4019 {
4020         u32 misc_host_ctrl;
4021         bool device_should_wake, do_low_power;
4022
4023         tg3_enable_register_access(tp);
4024
4025         /* Restore the CLKREQ setting. */
4026         if (tg3_flag(tp, CLKREQ_BUG))
4027                 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4028                                          PCI_EXP_LNKCTL_CLKREQ_EN);
4029
4030         misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
4031         tw32(TG3PCI_MISC_HOST_CTRL,
4032              misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
4033
4034         device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
4035                              tg3_flag(tp, WOL_ENABLE);
4036
4037         if (tg3_flag(tp, USE_PHYLIB)) {
4038                 do_low_power = false;
4039                 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
4040                     !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4041                         struct phy_device *phydev;
4042                         u32 phyid, advertising;
4043
4044                         phydev = tp->mdio_bus->phy_map[tp->phy_addr];
4045
4046                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4047
4048                         tp->link_config.speed = phydev->speed;
4049                         tp->link_config.duplex = phydev->duplex;
4050                         tp->link_config.autoneg = phydev->autoneg;
4051                         tp->link_config.advertising = phydev->advertising;
4052
4053                         advertising = ADVERTISED_TP |
4054                                       ADVERTISED_Pause |
4055                                       ADVERTISED_Autoneg |
4056                                       ADVERTISED_10baseT_Half;
4057
4058                         if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
4059                                 if (tg3_flag(tp, WOL_SPEED_100MB))
4060                                         advertising |=
4061                                                 ADVERTISED_100baseT_Half |
4062                                                 ADVERTISED_100baseT_Full |
4063                                                 ADVERTISED_10baseT_Full;
4064                                 else
4065                                         advertising |= ADVERTISED_10baseT_Full;
4066                         }
4067
4068                         phydev->advertising = advertising;
4069
4070                         phy_start_aneg(phydev);
4071
4072                         phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
4073                         if (phyid != PHY_ID_BCMAC131) {
4074                                 phyid &= PHY_BCM_OUI_MASK;
4075                                 if (phyid == PHY_BCM_OUI_1 ||
4076                                     phyid == PHY_BCM_OUI_2 ||
4077                                     phyid == PHY_BCM_OUI_3)
4078                                         do_low_power = true;
4079                         }
4080                 }
4081         } else {
4082                 do_low_power = true;
4083
4084                 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
4085                         tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
4086
4087                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
4088                         tg3_setup_phy(tp, false);
4089         }
4090
4091         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
4092                 u32 val;
4093
4094                 val = tr32(GRC_VCPU_EXT_CTRL);
4095                 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
4096         } else if (!tg3_flag(tp, ENABLE_ASF)) {
4097                 int i;
4098                 u32 val;
4099
4100                 for (i = 0; i < 200; i++) {
4101                         tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
4102                         if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4103                                 break;
4104                         msleep(1);
4105                 }
4106         }
4107         if (tg3_flag(tp, WOL_CAP))
4108                 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
4109                                                      WOL_DRV_STATE_SHUTDOWN |
4110                                                      WOL_DRV_WOL |
4111                                                      WOL_SET_MAGIC_PKT);
4112
4113         if (device_should_wake) {
4114                 u32 mac_mode;
4115
4116                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
4117                         if (do_low_power &&
4118                             !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
4119                                 tg3_phy_auxctl_write(tp,
4120                                                MII_TG3_AUXCTL_SHDWSEL_PWRCTL,
4121                                                MII_TG3_AUXCTL_PCTL_WOL_EN |
4122                                                MII_TG3_AUXCTL_PCTL_100TX_LPWR |
4123                                                MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC);
4124                                 udelay(40);
4125                         }
4126
4127                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4128                                 mac_mode = MAC_MODE_PORT_MODE_GMII;
4129                         else if (tp->phy_flags &
4130                                  TG3_PHYFLG_KEEP_LINK_ON_PWRDN) {
4131                                 if (tp->link_config.active_speed == SPEED_1000)
4132                                         mac_mode = MAC_MODE_PORT_MODE_GMII;
4133                                 else
4134                                         mac_mode = MAC_MODE_PORT_MODE_MII;
4135                         } else
4136                                 mac_mode = MAC_MODE_PORT_MODE_MII;
4137
4138                         mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
4139                         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
4140                                 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
4141                                              SPEED_100 : SPEED_10;
4142                                 if (tg3_5700_link_polarity(tp, speed))
4143                                         mac_mode |= MAC_MODE_LINK_POLARITY;
4144                                 else
4145                                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
4146                         }
4147                 } else {
4148                         mac_mode = MAC_MODE_PORT_MODE_TBI;
4149                 }
4150
4151                 if (!tg3_flag(tp, 5750_PLUS))
4152                         tw32(MAC_LED_CTRL, tp->led_ctrl);
4153
4154                 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
4155                 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
4156                     (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
4157                         mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
4158
4159                 if (tg3_flag(tp, ENABLE_APE))
4160                         mac_mode |= MAC_MODE_APE_TX_EN |
4161                                     MAC_MODE_APE_RX_EN |
4162                                     MAC_MODE_TDE_ENABLE;
4163
4164                 tw32_f(MAC_MODE, mac_mode);
4165                 udelay(100);
4166
4167                 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
4168                 udelay(10);
4169         }
4170
4171         if (!tg3_flag(tp, WOL_SPEED_100MB) &&
4172             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4173              tg3_asic_rev(tp) == ASIC_REV_5701)) {
4174                 u32 base_val;
4175
4176                 base_val = tp->pci_clock_ctrl;
4177                 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
4178                              CLOCK_CTRL_TXCLK_DISABLE);
4179
4180                 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
4181                             CLOCK_CTRL_PWRDOWN_PLL133, 40);
4182         } else if (tg3_flag(tp, 5780_CLASS) ||
4183                    tg3_flag(tp, CPMU_PRESENT) ||
4184                    tg3_asic_rev(tp) == ASIC_REV_5906) {
4185                 /* do nothing */
4186         } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
4187                 u32 newbits1, newbits2;
4188
4189                 if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4190                     tg3_asic_rev(tp) == ASIC_REV_5701) {
4191                         newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
4192                                     CLOCK_CTRL_TXCLK_DISABLE |
4193                                     CLOCK_CTRL_ALTCLK);
4194                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4195                 } else if (tg3_flag(tp, 5705_PLUS)) {
4196                         newbits1 = CLOCK_CTRL_625_CORE;
4197                         newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
4198                 } else {
4199                         newbits1 = CLOCK_CTRL_ALTCLK;
4200                         newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
4201                 }
4202
4203                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
4204                             40);
4205
4206                 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
4207                             40);
4208
4209                 if (!tg3_flag(tp, 5705_PLUS)) {
4210                         u32 newbits3;
4211
4212                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4213                             tg3_asic_rev(tp) == ASIC_REV_5701) {
4214                                 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
4215                                             CLOCK_CTRL_TXCLK_DISABLE |
4216                                             CLOCK_CTRL_44MHZ_CORE);
4217                         } else {
4218                                 newbits3 = CLOCK_CTRL_44MHZ_CORE;
4219                         }
4220
4221                         tw32_wait_f(TG3PCI_CLOCK_CTRL,
4222                                     tp->pci_clock_ctrl | newbits3, 40);
4223                 }
4224         }
4225
4226         if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
4227                 tg3_power_down_phy(tp, do_low_power);
4228
4229         tg3_frob_aux_power(tp, true);
4230
4231         /* Workaround for unstable PLL clock */
4232         if ((!tg3_flag(tp, IS_SSB_CORE)) &&
4233             ((tg3_chip_rev(tp) == CHIPREV_5750_AX) ||
4234              (tg3_chip_rev(tp) == CHIPREV_5750_BX))) {
4235                 u32 val = tr32(0x7d00);
4236
4237                 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
4238                 tw32(0x7d00, val);
4239                 if (!tg3_flag(tp, ENABLE_ASF)) {
4240                         int err;
4241
4242                         err = tg3_nvram_lock(tp);
4243                         tg3_halt_cpu(tp, RX_CPU_BASE);
4244                         if (!err)
4245                                 tg3_nvram_unlock(tp);
4246                 }
4247         }
4248
4249         tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
4250
4251         tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
4252
4253         return 0;
4254 }
4255
4256 static void tg3_power_down(struct tg3 *tp)
4257 {
4258         pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
4259         pci_set_power_state(tp->pdev, PCI_D3hot);
4260 }
4261
4262 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
4263 {
4264         switch (val & MII_TG3_AUX_STAT_SPDMASK) {
4265         case MII_TG3_AUX_STAT_10HALF:
4266                 *speed = SPEED_10;
4267                 *duplex = DUPLEX_HALF;
4268                 break;
4269
4270         case MII_TG3_AUX_STAT_10FULL:
4271                 *speed = SPEED_10;
4272                 *duplex = DUPLEX_FULL;
4273                 break;
4274
4275         case MII_TG3_AUX_STAT_100HALF:
4276                 *speed = SPEED_100;
4277                 *duplex = DUPLEX_HALF;
4278                 break;
4279
4280         case MII_TG3_AUX_STAT_100FULL:
4281                 *speed = SPEED_100;
4282                 *duplex = DUPLEX_FULL;
4283                 break;
4284
4285         case MII_TG3_AUX_STAT_1000HALF:
4286                 *speed = SPEED_1000;
4287                 *duplex = DUPLEX_HALF;
4288                 break;
4289
4290         case MII_TG3_AUX_STAT_1000FULL:
4291                 *speed = SPEED_1000;
4292                 *duplex = DUPLEX_FULL;
4293                 break;
4294
4295         default:
4296                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4297                         *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
4298                                  SPEED_10;
4299                         *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
4300                                   DUPLEX_HALF;
4301                         break;
4302                 }
4303                 *speed = SPEED_UNKNOWN;
4304                 *duplex = DUPLEX_UNKNOWN;
4305                 break;
4306         }
4307 }
4308
4309 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
4310 {
4311         int err = 0;
4312         u32 val, new_adv;
4313
4314         new_adv = ADVERTISE_CSMA;
4315         new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
4316         new_adv |= mii_advertise_flowctrl(flowctrl);
4317
4318         err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
4319         if (err)
4320                 goto done;
4321
4322         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4323                 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
4324
4325                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4326                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)
4327                         new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4328
4329                 err = tg3_writephy(tp, MII_CTRL1000, new_adv);
4330                 if (err)
4331                         goto done;
4332         }
4333
4334         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4335                 goto done;
4336
4337         tw32(TG3_CPMU_EEE_MODE,
4338              tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE);
4339
4340         err = tg3_phy_toggle_auxctl_smdsp(tp, true);
4341         if (!err) {
4342                 u32 err2;
4343
4344                 val = 0;
4345                 /* Advertise 100-BaseTX EEE ability */
4346                 if (advertise & ADVERTISED_100baseT_Full)
4347                         val |= MDIO_AN_EEE_ADV_100TX;
4348                 /* Advertise 1000-BaseT EEE ability */
4349                 if (advertise & ADVERTISED_1000baseT_Full)
4350                         val |= MDIO_AN_EEE_ADV_1000T;
4351
4352                 if (!tp->eee.eee_enabled) {
4353                         val = 0;
4354                         tp->eee.advertised = 0;
4355                 } else {
4356                         tp->eee.advertised = advertise &
4357                                              (ADVERTISED_100baseT_Full |
4358                                               ADVERTISED_1000baseT_Full);
4359                 }
4360
4361                 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
4362                 if (err)
4363                         val = 0;
4364
4365                 switch (tg3_asic_rev(tp)) {
4366                 case ASIC_REV_5717:
4367                 case ASIC_REV_57765:
4368                 case ASIC_REV_57766:
4369                 case ASIC_REV_5719:
4370                         /* If we advertised any eee advertisements above... */
4371                         if (val)
4372                                 val = MII_TG3_DSP_TAP26_ALNOKO |
4373                                       MII_TG3_DSP_TAP26_RMRXSTO |
4374                                       MII_TG3_DSP_TAP26_OPCSINPT;
4375                         tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
4376                         /* Fall through */
4377                 case ASIC_REV_5720:
4378                 case ASIC_REV_5762:
4379                         if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
4380                                 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
4381                                                  MII_TG3_DSP_CH34TP2_HIBW01);
4382                 }
4383
4384                 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false);
4385                 if (!err)
4386                         err = err2;
4387         }
4388
4389 done:
4390         return err;
4391 }
4392
4393 static void tg3_phy_copper_begin(struct tg3 *tp)
4394 {
4395         if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4396             (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4397                 u32 adv, fc;
4398
4399                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4400                     !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4401                         adv = ADVERTISED_10baseT_Half |
4402                               ADVERTISED_10baseT_Full;
4403                         if (tg3_flag(tp, WOL_SPEED_100MB))
4404                                 adv |= ADVERTISED_100baseT_Half |
4405                                        ADVERTISED_100baseT_Full;
4406                         if (tp->phy_flags & TG3_PHYFLG_1G_ON_VAUX_OK)
4407                                 adv |= ADVERTISED_1000baseT_Half |
4408                                        ADVERTISED_1000baseT_Full;
4409
4410                         fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4411                 } else {
4412                         adv = tp->link_config.advertising;
4413                         if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
4414                                 adv &= ~(ADVERTISED_1000baseT_Half |
4415                                          ADVERTISED_1000baseT_Full);
4416
4417                         fc = tp->link_config.flowctrl;
4418                 }
4419
4420                 tg3_phy_autoneg_cfg(tp, adv, fc);
4421
4422                 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
4423                     (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)) {
4424                         /* Normally during power down we want to autonegotiate
4425                          * the lowest possible speed for WOL. However, to avoid
4426                          * link flap, we leave it untouched.
4427                          */
4428                         return;
4429                 }
4430
4431                 tg3_writephy(tp, MII_BMCR,
4432                              BMCR_ANENABLE | BMCR_ANRESTART);
4433         } else {
4434                 int i;
4435                 u32 bmcr, orig_bmcr;
4436
4437                 tp->link_config.active_speed = tp->link_config.speed;
4438                 tp->link_config.active_duplex = tp->link_config.duplex;
4439
4440                 if (tg3_asic_rev(tp) == ASIC_REV_5714) {
4441                         /* With autoneg disabled, 5715 only links up when the
4442                          * advertisement register has the configured speed
4443                          * enabled.
4444                          */
4445                         tg3_writephy(tp, MII_ADVERTISE, ADVERTISE_ALL);
4446                 }
4447
4448                 bmcr = 0;
4449                 switch (tp->link_config.speed) {
4450                 default:
4451                 case SPEED_10:
4452                         break;
4453
4454                 case SPEED_100:
4455                         bmcr |= BMCR_SPEED100;
4456                         break;
4457
4458                 case SPEED_1000:
4459                         bmcr |= BMCR_SPEED1000;
4460                         break;
4461                 }
4462
4463                 if (tp->link_config.duplex == DUPLEX_FULL)
4464                         bmcr |= BMCR_FULLDPLX;
4465
4466                 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4467                     (bmcr != orig_bmcr)) {
4468                         tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4469                         for (i = 0; i < 1500; i++) {
4470                                 u32 tmp;
4471
4472                                 udelay(10);
4473                                 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4474                                     tg3_readphy(tp, MII_BMSR, &tmp))
4475                                         continue;
4476                                 if (!(tmp & BMSR_LSTATUS)) {
4477                                         udelay(40);
4478                                         break;
4479                                 }
4480                         }
4481                         tg3_writephy(tp, MII_BMCR, bmcr);
4482                         udelay(40);
4483                 }
4484         }
4485 }
4486
4487 static int tg3_phy_pull_config(struct tg3 *tp)
4488 {
4489         int err;
4490         u32 val;
4491
4492         err = tg3_readphy(tp, MII_BMCR, &val);
4493         if (err)
4494                 goto done;
4495
4496         if (!(val & BMCR_ANENABLE)) {
4497                 tp->link_config.autoneg = AUTONEG_DISABLE;
4498                 tp->link_config.advertising = 0;
4499                 tg3_flag_clear(tp, PAUSE_AUTONEG);
4500
4501                 err = -EIO;
4502
4503                 switch (val & (BMCR_SPEED1000 | BMCR_SPEED100)) {
4504                 case 0:
4505                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4506                                 goto done;
4507
4508                         tp->link_config.speed = SPEED_10;
4509                         break;
4510                 case BMCR_SPEED100:
4511                         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
4512                                 goto done;
4513
4514                         tp->link_config.speed = SPEED_100;
4515                         break;
4516                 case BMCR_SPEED1000:
4517                         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4518                                 tp->link_config.speed = SPEED_1000;
4519                                 break;
4520                         }
4521                         /* Fall through */
4522                 default:
4523                         goto done;
4524                 }
4525
4526                 if (val & BMCR_FULLDPLX)
4527                         tp->link_config.duplex = DUPLEX_FULL;
4528                 else
4529                         tp->link_config.duplex = DUPLEX_HALF;
4530
4531                 tp->link_config.flowctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
4532
4533                 err = 0;
4534                 goto done;
4535         }
4536
4537         tp->link_config.autoneg = AUTONEG_ENABLE;
4538         tp->link_config.advertising = ADVERTISED_Autoneg;
4539         tg3_flag_set(tp, PAUSE_AUTONEG);
4540
4541         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4542                 u32 adv;
4543
4544                 err = tg3_readphy(tp, MII_ADVERTISE, &val);
4545                 if (err)
4546                         goto done;
4547
4548                 adv = mii_adv_to_ethtool_adv_t(val & ADVERTISE_ALL);
4549                 tp->link_config.advertising |= adv | ADVERTISED_TP;
4550
4551                 tp->link_config.flowctrl = tg3_decode_flowctrl_1000T(val);
4552         } else {
4553                 tp->link_config.advertising |= ADVERTISED_FIBRE;
4554         }
4555
4556         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4557                 u32 adv;
4558
4559                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
4560                         err = tg3_readphy(tp, MII_CTRL1000, &val);
4561                         if (err)
4562                                 goto done;
4563
4564                         adv = mii_ctrl1000_to_ethtool_adv_t(val);
4565                 } else {
4566                         err = tg3_readphy(tp, MII_ADVERTISE, &val);
4567                         if (err)
4568                                 goto done;
4569
4570                         adv = tg3_decode_flowctrl_1000X(val);
4571                         tp->link_config.flowctrl = adv;
4572
4573                         val &= (ADVERTISE_1000XHALF | ADVERTISE_1000XFULL);
4574                         adv = mii_adv_to_ethtool_adv_x(val);
4575                 }
4576
4577                 tp->link_config.advertising |= adv;
4578         }
4579
4580 done:
4581         return err;
4582 }
4583
4584 static int tg3_init_5401phy_dsp(struct tg3 *tp)
4585 {
4586         int err;
4587
4588         /* Turn off tap power management. */
4589         /* Set Extended packet length bit */
4590         err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4591
4592         err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4593         err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4594         err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4595         err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4596         err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4597
4598         udelay(40);
4599
4600         return err;
4601 }
4602
4603 static bool tg3_phy_eee_config_ok(struct tg3 *tp)
4604 {
4605         struct ethtool_eee eee;
4606
4607         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
4608                 return true;
4609
4610         tg3_eee_pull_config(tp, &eee);
4611
4612         if (tp->eee.eee_enabled) {
4613                 if (tp->eee.advertised != eee.advertised ||
4614                     tp->eee.tx_lpi_timer != eee.tx_lpi_timer ||
4615                     tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled)
4616                         return false;
4617         } else {
4618                 /* EEE is disabled but we're advertising */
4619                 if (eee.advertised)
4620                         return false;
4621         }
4622
4623         return true;
4624 }
4625
4626 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4627 {
4628         u32 advmsk, tgtadv, advertising;
4629
4630         advertising = tp->link_config.advertising;
4631         tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4632
4633         advmsk = ADVERTISE_ALL;
4634         if (tp->link_config.active_duplex == DUPLEX_FULL) {
4635                 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4636                 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4637         }
4638
4639         if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4640                 return false;
4641
4642         if ((*lcladv & advmsk) != tgtadv)
4643                 return false;
4644
4645         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4646                 u32 tg3_ctrl;
4647
4648                 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4649
4650                 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4651                         return false;
4652
4653                 if (tgtadv &&
4654                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4655                      tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0)) {
4656                         tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER;
4657                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4658                                      CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER);
4659                 } else {
4660                         tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4661                 }
4662
4663                 if (tg3_ctrl != tgtadv)
4664                         return false;
4665         }
4666
4667         return true;
4668 }
4669
4670 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4671 {
4672         u32 lpeth = 0;
4673
4674         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4675                 u32 val;
4676
4677                 if (tg3_readphy(tp, MII_STAT1000, &val))
4678                         return false;
4679
4680                 lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4681         }
4682
4683         if (tg3_readphy(tp, MII_LPA, rmtadv))
4684                 return false;
4685
4686         lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4687         tp->link_config.rmt_adv = lpeth;
4688
4689         return true;
4690 }
4691
4692 static bool tg3_test_and_report_link_chg(struct tg3 *tp, bool curr_link_up)
4693 {
4694         if (curr_link_up != tp->link_up) {
4695                 if (curr_link_up) {
4696                         netif_carrier_on(tp->dev);
4697                 } else {
4698                         netif_carrier_off(tp->dev);
4699                         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
4700                                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
4701                 }
4702
4703                 tg3_link_report(tp);
4704                 return true;
4705         }
4706
4707         return false;
4708 }
4709
4710 static void tg3_clear_mac_status(struct tg3 *tp)
4711 {
4712         tw32(MAC_EVENT, 0);
4713
4714         tw32_f(MAC_STATUS,
4715                MAC_STATUS_SYNC_CHANGED |
4716                MAC_STATUS_CFG_CHANGED |
4717                MAC_STATUS_MI_COMPLETION |
4718                MAC_STATUS_LNKSTATE_CHANGED);
4719         udelay(40);
4720 }
4721
4722 static void tg3_setup_eee(struct tg3 *tp)
4723 {
4724         u32 val;
4725
4726         val = TG3_CPMU_EEE_LNKIDL_PCIE_NL0 |
4727               TG3_CPMU_EEE_LNKIDL_UART_IDL;
4728         if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
4729                 val |= TG3_CPMU_EEE_LNKIDL_APE_TX_MT;
4730
4731         tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, val);
4732
4733         tw32_f(TG3_CPMU_EEE_CTRL,
4734                TG3_CPMU_EEE_CTRL_EXIT_20_1_US);
4735
4736         val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET |
4737               (tp->eee.tx_lpi_enabled ? TG3_CPMU_EEEMD_LPI_IN_TX : 0) |
4738               TG3_CPMU_EEEMD_LPI_IN_RX |
4739               TG3_CPMU_EEEMD_EEE_ENABLE;
4740
4741         if (tg3_asic_rev(tp) != ASIC_REV_5717)
4742                 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN;
4743
4744         if (tg3_flag(tp, ENABLE_APE))
4745                 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN;
4746
4747         tw32_f(TG3_CPMU_EEE_MODE, tp->eee.eee_enabled ? val : 0);
4748
4749         tw32_f(TG3_CPMU_EEE_DBTMR1,
4750                TG3_CPMU_DBTMR1_PCIEXIT_2047US |
4751                (tp->eee.tx_lpi_timer & 0xffff));
4752
4753         tw32_f(TG3_CPMU_EEE_DBTMR2,
4754                TG3_CPMU_DBTMR2_APE_TX_2047US |
4755                TG3_CPMU_DBTMR2_TXIDXEQ_2047US);
4756 }
4757
4758 static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
4759 {
4760         bool current_link_up;
4761         u32 bmsr, val;
4762         u32 lcl_adv, rmt_adv;
4763         u16 current_speed;
4764         u8 current_duplex;
4765         int i, err;
4766
4767         tg3_clear_mac_status(tp);
4768
4769         if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4770                 tw32_f(MAC_MI_MODE,
4771                      (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4772                 udelay(80);
4773         }
4774
4775         tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4776
4777         /* Some third-party PHYs need to be reset on link going
4778          * down.
4779          */
4780         if ((tg3_asic_rev(tp) == ASIC_REV_5703 ||
4781              tg3_asic_rev(tp) == ASIC_REV_5704 ||
4782              tg3_asic_rev(tp) == ASIC_REV_5705) &&
4783             tp->link_up) {
4784                 tg3_readphy(tp, MII_BMSR, &bmsr);
4785                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4786                     !(bmsr & BMSR_LSTATUS))
4787                         force_reset = true;
4788         }
4789         if (force_reset)
4790                 tg3_phy_reset(tp);
4791
4792         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4793                 tg3_readphy(tp, MII_BMSR, &bmsr);
4794                 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4795                     !tg3_flag(tp, INIT_COMPLETE))
4796                         bmsr = 0;
4797
4798                 if (!(bmsr & BMSR_LSTATUS)) {
4799                         err = tg3_init_5401phy_dsp(tp);
4800                         if (err)
4801                                 return err;
4802
4803                         tg3_readphy(tp, MII_BMSR, &bmsr);
4804                         for (i = 0; i < 1000; i++) {
4805                                 udelay(10);
4806                                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4807                                     (bmsr & BMSR_LSTATUS)) {
4808                                         udelay(40);
4809                                         break;
4810                                 }
4811                         }
4812
4813                         if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4814                             TG3_PHY_REV_BCM5401_B0 &&
4815                             !(bmsr & BMSR_LSTATUS) &&
4816                             tp->link_config.active_speed == SPEED_1000) {
4817                                 err = tg3_phy_reset(tp);
4818                                 if (!err)
4819                                         err = tg3_init_5401phy_dsp(tp);
4820                                 if (err)
4821                                         return err;
4822                         }
4823                 }
4824         } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
4825                    tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0) {
4826                 /* 5701 {A0,B0} CRC bug workaround */
4827                 tg3_writephy(tp, 0x15, 0x0a75);
4828                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4829                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4830                 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4831         }
4832
4833         /* Clear pending interrupts... */
4834         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4835         tg3_readphy(tp, MII_TG3_ISTAT, &val);
4836
4837         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT)
4838                 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4839         else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4840                 tg3_writephy(tp, MII_TG3_IMASK, ~0);
4841
4842         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
4843             tg3_asic_rev(tp) == ASIC_REV_5701) {
4844                 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4845                         tg3_writephy(tp, MII_TG3_EXT_CTRL,
4846                                      MII_TG3_EXT_CTRL_LNK3_LED_MODE);
4847                 else
4848                         tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4849         }
4850
4851         current_link_up = false;
4852         current_speed = SPEED_UNKNOWN;
4853         current_duplex = DUPLEX_UNKNOWN;
4854         tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE;
4855         tp->link_config.rmt_adv = 0;
4856
4857         if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) {
4858                 err = tg3_phy_auxctl_read(tp,
4859                                           MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4860                                           &val);
4861                 if (!err && !(val & (1 << 10))) {
4862                         tg3_phy_auxctl_write(tp,
4863                                              MII_TG3_AUXCTL_SHDWSEL_MISCTEST,
4864                                              val | (1 << 10));
4865                         goto relink;
4866                 }
4867         }
4868
4869         bmsr = 0;
4870         for (i = 0; i < 100; i++) {
4871                 tg3_readphy(tp, MII_BMSR, &bmsr);
4872                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4873                     (bmsr & BMSR_LSTATUS))
4874                         break;
4875                 udelay(40);
4876         }
4877
4878         if (bmsr & BMSR_LSTATUS) {
4879                 u32 aux_stat, bmcr;
4880
4881                 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4882                 for (i = 0; i < 2000; i++) {
4883                         udelay(10);
4884                         if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4885                             aux_stat)
4886                                 break;
4887                 }
4888
4889                 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4890                                              &current_speed,
4891                                              &current_duplex);
4892
4893                 bmcr = 0;
4894                 for (i = 0; i < 200; i++) {
4895                         tg3_readphy(tp, MII_BMCR, &bmcr);
4896                         if (tg3_readphy(tp, MII_BMCR, &bmcr))
4897                                 continue;
4898                         if (bmcr && bmcr != 0x7fff)
4899                                 break;
4900                         udelay(10);
4901                 }
4902
4903                 lcl_adv = 0;
4904                 rmt_adv = 0;
4905
4906                 tp->link_config.active_speed = current_speed;
4907                 tp->link_config.active_duplex = current_duplex;
4908
4909                 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4910                         bool eee_config_ok = tg3_phy_eee_config_ok(tp);
4911
4912                         if ((bmcr & BMCR_ANENABLE) &&
4913                             eee_config_ok &&
4914                             tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4915                             tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4916                                 current_link_up = true;
4917
4918                         /* EEE settings changes take effect only after a phy
4919                          * reset.  If we have skipped a reset due to Link Flap
4920                          * Avoidance being enabled, do it now.
4921                          */
4922                         if (!eee_config_ok &&
4923                             (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
4924                             !force_reset) {
4925                                 tg3_setup_eee(tp);
4926                                 tg3_phy_reset(tp);
4927                         }
4928                 } else {
4929                         if (!(bmcr & BMCR_ANENABLE) &&
4930                             tp->link_config.speed == current_speed &&
4931                             tp->link_config.duplex == current_duplex) {
4932                                 current_link_up = true;
4933                         }
4934                 }
4935
4936                 if (current_link_up &&
4937                     tp->link_config.active_duplex == DUPLEX_FULL) {
4938                         u32 reg, bit;
4939
4940                         if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4941                                 reg = MII_TG3_FET_GEN_STAT;
4942                                 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT;
4943                         } else {
4944                                 reg = MII_TG3_EXT_STAT;
4945                                 bit = MII_TG3_EXT_STAT_MDIX;
4946                         }
4947
4948                         if (!tg3_readphy(tp, reg, &val) && (val & bit))
4949                                 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE;
4950
4951                         tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4952                 }
4953         }
4954
4955 relink:
4956         if (!current_link_up || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4957                 tg3_phy_copper_begin(tp);
4958
4959                 if (tg3_flag(tp, ROBOSWITCH)) {
4960                         current_link_up = true;
4961                         /* FIXME: when BCM5325 switch is used use 100 MBit/s */
4962                         current_speed = SPEED_1000;
4963                         current_duplex = DUPLEX_FULL;
4964                         tp->link_config.active_speed = current_speed;
4965                         tp->link_config.active_duplex = current_duplex;
4966                 }
4967
4968                 tg3_readphy(tp, MII_BMSR, &bmsr);
4969                 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4970                     (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
4971                         current_link_up = true;
4972         }
4973
4974         tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
4975         if (current_link_up) {
4976                 if (tp->link_config.active_speed == SPEED_100 ||
4977                     tp->link_config.active_speed == SPEED_10)
4978                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4979                 else
4980                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4981         } else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4982                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
4983         else
4984                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
4985
4986         /* In order for the 5750 core in BCM4785 chip to work properly
4987          * in RGMII mode, the Led Control Register must be set up.
4988          */
4989         if (tg3_flag(tp, RGMII_MODE)) {
4990                 u32 led_ctrl = tr32(MAC_LED_CTRL);
4991                 led_ctrl &= ~(LED_CTRL_1000MBPS_ON | LED_CTRL_100MBPS_ON);
4992
4993                 if (tp->link_config.active_speed == SPEED_10)
4994                         led_ctrl |= LED_CTRL_LNKLED_OVERRIDE;
4995                 else if (tp->link_config.active_speed == SPEED_100)
4996                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
4997                                      LED_CTRL_100MBPS_ON);
4998                 else if (tp->link_config.active_speed == SPEED_1000)
4999                         led_ctrl |= (LED_CTRL_LNKLED_OVERRIDE |
5000                                      LED_CTRL_1000MBPS_ON);
5001
5002                 tw32(MAC_LED_CTRL, led_ctrl);
5003                 udelay(40);
5004         }
5005
5006         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5007         if (tp->link_config.active_duplex == DUPLEX_HALF)
5008                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5009
5010         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
5011                 if (current_link_up &&
5012                     tg3_5700_link_polarity(tp, tp->link_config.active_speed))
5013                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
5014                 else
5015                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
5016         }
5017
5018         /* ??? Without this setting Netgear GA302T PHY does not
5019          * ??? send/receive packets...
5020          */
5021         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
5022             tg3_chip_rev_id(tp) == CHIPREV_ID_5700_ALTIMA) {
5023                 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
5024                 tw32_f(MAC_MI_MODE, tp->mi_mode);
5025                 udelay(80);
5026         }
5027
5028         tw32_f(MAC_MODE, tp->mac_mode);
5029         udelay(40);
5030
5031         tg3_phy_eee_adjust(tp, current_link_up);
5032
5033         if (tg3_flag(tp, USE_LINKCHG_REG)) {
5034                 /* Polled via timer. */
5035                 tw32_f(MAC_EVENT, 0);
5036         } else {
5037                 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5038         }
5039         udelay(40);
5040
5041         if (tg3_asic_rev(tp) == ASIC_REV_5700 &&
5042             current_link_up &&
5043             tp->link_config.active_speed == SPEED_1000 &&
5044             (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
5045                 udelay(120);
5046                 tw32_f(MAC_STATUS,
5047                      (MAC_STATUS_SYNC_CHANGED |
5048                       MAC_STATUS_CFG_CHANGED));
5049                 udelay(40);
5050                 tg3_write_mem(tp,
5051                               NIC_SRAM_FIRMWARE_MBOX,
5052                               NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
5053         }
5054
5055         /* Prevent send BD corruption. */
5056         if (tg3_flag(tp, CLKREQ_BUG)) {
5057                 if (tp->link_config.active_speed == SPEED_100 ||
5058                     tp->link_config.active_speed == SPEED_10)
5059                         pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
5060                                                    PCI_EXP_LNKCTL_CLKREQ_EN);
5061                 else
5062                         pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
5063                                                  PCI_EXP_LNKCTL_CLKREQ_EN);
5064         }
5065
5066         tg3_test_and_report_link_chg(tp, current_link_up);
5067
5068         return 0;
5069 }
5070
5071 struct tg3_fiber_aneginfo {
5072         int state;
5073 #define ANEG_STATE_UNKNOWN              0
5074 #define ANEG_STATE_AN_ENABLE            1
5075 #define ANEG_STATE_RESTART_INIT         2
5076 #define ANEG_STATE_RESTART              3
5077 #define ANEG_STATE_DISABLE_LINK_OK      4
5078 #define ANEG_STATE_ABILITY_DETECT_INIT  5
5079 #define ANEG_STATE_ABILITY_DETECT       6
5080 #define ANEG_STATE_ACK_DETECT_INIT      7
5081 #define ANEG_STATE_ACK_DETECT           8
5082 #define ANEG_STATE_COMPLETE_ACK_INIT    9
5083 #define ANEG_STATE_COMPLETE_ACK         10
5084 #define ANEG_STATE_IDLE_DETECT_INIT     11
5085 #define ANEG_STATE_IDLE_DETECT          12
5086 #define ANEG_STATE_LINK_OK              13
5087 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT  14
5088 #define ANEG_STATE_NEXT_PAGE_WAIT       15
5089
5090         u32 flags;
5091 #define MR_AN_ENABLE            0x00000001
5092 #define MR_RESTART_AN           0x00000002
5093 #define MR_AN_COMPLETE          0x00000004
5094 #define MR_PAGE_RX              0x00000008
5095 #define MR_NP_LOADED            0x00000010
5096 #define MR_TOGGLE_TX            0x00000020
5097 #define MR_LP_ADV_FULL_DUPLEX   0x00000040
5098 #define MR_LP_ADV_HALF_DUPLEX   0x00000080
5099 #define MR_LP_ADV_SYM_PAUSE     0x00000100
5100 #define MR_LP_ADV_ASYM_PAUSE    0x00000200
5101 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400
5102 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800
5103 #define MR_LP_ADV_NEXT_PAGE     0x00001000
5104 #define MR_TOGGLE_RX            0x00002000
5105 #define MR_NP_RX                0x00004000
5106
5107 #define MR_LINK_OK              0x80000000
5108
5109         unsigned long link_time, cur_time;
5110
5111         u32 ability_match_cfg;
5112         int ability_match_count;
5113
5114         char ability_match, idle_match, ack_match;
5115
5116         u32 txconfig, rxconfig;
5117 #define ANEG_CFG_NP             0x00000080
5118 #define ANEG_CFG_ACK            0x00000040
5119 #define ANEG_CFG_RF2            0x00000020
5120 #define ANEG_CFG_RF1            0x00000010
5121 #define ANEG_CFG_PS2            0x00000001
5122 #define ANEG_CFG_PS1            0x00008000
5123 #define ANEG_CFG_HD             0x00004000
5124 #define ANEG_CFG_FD             0x00002000
5125 #define ANEG_CFG_INVAL          0x00001f06
5126
5127 };
5128 #define ANEG_OK         0
5129 #define ANEG_DONE       1
5130 #define ANEG_TIMER_ENAB 2
5131 #define ANEG_FAILED     -1
5132
5133 #define ANEG_STATE_SETTLE_TIME  10000
5134
5135 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
5136                                    struct tg3_fiber_aneginfo *ap)
5137 {
5138         u16 flowctrl;
5139         unsigned long delta;
5140         u32 rx_cfg_reg;
5141         int ret;
5142
5143         if (ap->state == ANEG_STATE_UNKNOWN) {
5144                 ap->rxconfig = 0;
5145                 ap->link_time = 0;
5146                 ap->cur_time = 0;
5147                 ap->ability_match_cfg = 0;
5148                 ap->ability_match_count = 0;
5149                 ap->ability_match = 0;
5150                 ap->idle_match = 0;
5151                 ap->ack_match = 0;
5152         }
5153         ap->cur_time++;
5154
5155         if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
5156                 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
5157
5158                 if (rx_cfg_reg != ap->ability_match_cfg) {
5159                         ap->ability_match_cfg = rx_cfg_reg;
5160                         ap->ability_match = 0;
5161                         ap->ability_match_count = 0;
5162                 } else {
5163                         if (++ap->ability_match_count > 1) {
5164                                 ap->ability_match = 1;
5165                                 ap->ability_match_cfg = rx_cfg_reg;
5166                         }
5167                 }
5168                 if (rx_cfg_reg & ANEG_CFG_ACK)
5169                         ap->ack_match = 1;
5170                 else
5171                         ap->ack_match = 0;
5172
5173                 ap->idle_match = 0;
5174         } else {
5175                 ap->idle_match = 1;
5176                 ap->ability_match_cfg = 0;
5177                 ap->ability_match_count = 0;
5178                 ap->ability_match = 0;
5179                 ap->ack_match = 0;
5180
5181                 rx_cfg_reg = 0;
5182         }
5183
5184         ap->rxconfig = rx_cfg_reg;
5185         ret = ANEG_OK;
5186
5187         switch (ap->state) {
5188         case ANEG_STATE_UNKNOWN:
5189                 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
5190                         ap->state = ANEG_STATE_AN_ENABLE;
5191
5192                 /* fallthru */
5193         case ANEG_STATE_AN_ENABLE:
5194                 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
5195                 if (ap->flags & MR_AN_ENABLE) {
5196                         ap->link_time = 0;
5197                         ap->cur_time = 0;
5198                         ap->ability_match_cfg = 0;
5199                         ap->ability_match_count = 0;
5200                         ap->ability_match = 0;
5201                         ap->idle_match = 0;
5202                         ap->ack_match = 0;
5203
5204                         ap->state = ANEG_STATE_RESTART_INIT;
5205                 } else {
5206                         ap->state = ANEG_STATE_DISABLE_LINK_OK;
5207                 }
5208                 break;
5209
5210         case ANEG_STATE_RESTART_INIT:
5211                 ap->link_time = ap->cur_time;
5212                 ap->flags &= ~(MR_NP_LOADED);
5213                 ap->txconfig = 0;
5214                 tw32(MAC_TX_AUTO_NEG, 0);
5215                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5216                 tw32_f(MAC_MODE, tp->mac_mode);
5217                 udelay(40);
5218
5219                 ret = ANEG_TIMER_ENAB;
5220                 ap->state = ANEG_STATE_RESTART;
5221
5222                 /* fallthru */
5223         case ANEG_STATE_RESTART:
5224                 delta = ap->cur_time - ap->link_time;
5225                 if (delta > ANEG_STATE_SETTLE_TIME)
5226                         ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
5227                 else
5228                         ret = ANEG_TIMER_ENAB;
5229                 break;
5230
5231         case ANEG_STATE_DISABLE_LINK_OK:
5232                 ret = ANEG_DONE;
5233                 break;
5234
5235         case ANEG_STATE_ABILITY_DETECT_INIT:
5236                 ap->flags &= ~(MR_TOGGLE_TX);
5237                 ap->txconfig = ANEG_CFG_FD;
5238                 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5239                 if (flowctrl & ADVERTISE_1000XPAUSE)
5240                         ap->txconfig |= ANEG_CFG_PS1;
5241                 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5242                         ap->txconfig |= ANEG_CFG_PS2;
5243                 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5244                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5245                 tw32_f(MAC_MODE, tp->mac_mode);
5246                 udelay(40);
5247
5248                 ap->state = ANEG_STATE_ABILITY_DETECT;
5249                 break;
5250
5251         case ANEG_STATE_ABILITY_DETECT:
5252                 if (ap->ability_match != 0 && ap->rxconfig != 0)
5253                         ap->state = ANEG_STATE_ACK_DETECT_INIT;
5254                 break;
5255
5256         case ANEG_STATE_ACK_DETECT_INIT:
5257                 ap->txconfig |= ANEG_CFG_ACK;
5258                 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
5259                 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
5260                 tw32_f(MAC_MODE, tp->mac_mode);
5261                 udelay(40);
5262
5263                 ap->state = ANEG_STATE_ACK_DETECT;
5264
5265                 /* fallthru */
5266         case ANEG_STATE_ACK_DETECT:
5267                 if (ap->ack_match != 0) {
5268                         if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
5269                             (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
5270                                 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
5271                         } else {
5272                                 ap->state = ANEG_STATE_AN_ENABLE;
5273                         }
5274                 } else if (ap->ability_match != 0 &&
5275                            ap->rxconfig == 0) {
5276                         ap->state = ANEG_STATE_AN_ENABLE;
5277                 }
5278                 break;
5279
5280         case ANEG_STATE_COMPLETE_ACK_INIT:
5281                 if (ap->rxconfig & ANEG_CFG_INVAL) {
5282                         ret = ANEG_FAILED;
5283                         break;
5284                 }
5285                 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
5286                                MR_LP_ADV_HALF_DUPLEX |
5287                                MR_LP_ADV_SYM_PAUSE |
5288                                MR_LP_ADV_ASYM_PAUSE |
5289                                MR_LP_ADV_REMOTE_FAULT1 |
5290                                MR_LP_ADV_REMOTE_FAULT2 |
5291                                MR_LP_ADV_NEXT_PAGE |
5292                                MR_TOGGLE_RX |
5293                                MR_NP_RX);
5294                 if (ap->rxconfig & ANEG_CFG_FD)
5295                         ap->flags |= MR_LP_ADV_FULL_DUPLEX;
5296                 if (ap->rxconfig & ANEG_CFG_HD)
5297                         ap->flags |= MR_LP_ADV_HALF_DUPLEX;
5298                 if (ap->rxconfig & ANEG_CFG_PS1)
5299                         ap->flags |= MR_LP_ADV_SYM_PAUSE;
5300                 if (ap->rxconfig & ANEG_CFG_PS2)
5301                         ap->flags |= MR_LP_ADV_ASYM_PAUSE;
5302                 if (ap->rxconfig & ANEG_CFG_RF1)
5303                         ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
5304                 if (ap->rxconfig & ANEG_CFG_RF2)
5305                         ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
5306                 if (ap->rxconfig & ANEG_CFG_NP)
5307                         ap->flags |= MR_LP_ADV_NEXT_PAGE;
5308
5309                 ap->link_time = ap->cur_time;
5310
5311                 ap->flags ^= (MR_TOGGLE_TX);
5312                 if (ap->rxconfig & 0x0008)
5313                         ap->flags |= MR_TOGGLE_RX;
5314                 if (ap->rxconfig & ANEG_CFG_NP)
5315                         ap->flags |= MR_NP_RX;
5316                 ap->flags |= MR_PAGE_RX;
5317
5318                 ap->state = ANEG_STATE_COMPLETE_ACK;
5319                 ret = ANEG_TIMER_ENAB;
5320                 break;
5321
5322         case ANEG_STATE_COMPLETE_ACK:
5323                 if (ap->ability_match != 0 &&
5324                     ap->rxconfig == 0) {
5325                         ap->state = ANEG_STATE_AN_ENABLE;
5326                         break;
5327                 }
5328                 delta = ap->cur_time - ap->link_time;
5329                 if (delta > ANEG_STATE_SETTLE_TIME) {
5330                         if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
5331                                 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5332                         } else {
5333                                 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
5334                                     !(ap->flags & MR_NP_RX)) {
5335                                         ap->state = ANEG_STATE_IDLE_DETECT_INIT;
5336                                 } else {
5337                                         ret = ANEG_FAILED;
5338                                 }
5339                         }
5340                 }
5341                 break;
5342
5343         case ANEG_STATE_IDLE_DETECT_INIT:
5344                 ap->link_time = ap->cur_time;
5345                 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5346                 tw32_f(MAC_MODE, tp->mac_mode);
5347                 udelay(40);
5348
5349                 ap->state = ANEG_STATE_IDLE_DETECT;
5350                 ret = ANEG_TIMER_ENAB;
5351                 break;
5352
5353         case ANEG_STATE_IDLE_DETECT:
5354                 if (ap->ability_match != 0 &&
5355                     ap->rxconfig == 0) {
5356                         ap->state = ANEG_STATE_AN_ENABLE;
5357                         break;
5358                 }
5359                 delta = ap->cur_time - ap->link_time;
5360                 if (delta > ANEG_STATE_SETTLE_TIME) {
5361                         /* XXX another gem from the Broadcom driver :( */
5362                         ap->state = ANEG_STATE_LINK_OK;
5363                 }
5364                 break;
5365
5366         case ANEG_STATE_LINK_OK:
5367                 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
5368                 ret = ANEG_DONE;
5369                 break;
5370
5371         case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
5372                 /* ??? unimplemented */
5373                 break;
5374
5375         case ANEG_STATE_NEXT_PAGE_WAIT:
5376                 /* ??? unimplemented */
5377                 break;
5378
5379         default:
5380                 ret = ANEG_FAILED;
5381                 break;
5382         }
5383
5384         return ret;
5385 }
5386
5387 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
5388 {
5389         int res = 0;
5390         struct tg3_fiber_aneginfo aninfo;
5391         int status = ANEG_FAILED;
5392         unsigned int tick;
5393         u32 tmp;
5394
5395         tw32_f(MAC_TX_AUTO_NEG, 0);
5396
5397         tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
5398         tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
5399         udelay(40);
5400
5401         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
5402         udelay(40);
5403
5404         memset(&aninfo, 0, sizeof(aninfo));
5405         aninfo.flags |= MR_AN_ENABLE;
5406         aninfo.state = ANEG_STATE_UNKNOWN;
5407         aninfo.cur_time = 0;
5408         tick = 0;
5409         while (++tick < 195000) {
5410                 status = tg3_fiber_aneg_smachine(tp, &aninfo);
5411                 if (status == ANEG_DONE || status == ANEG_FAILED)
5412                         break;
5413
5414                 udelay(1);
5415         }
5416
5417         tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
5418         tw32_f(MAC_MODE, tp->mac_mode);
5419         udelay(40);
5420
5421         *txflags = aninfo.txconfig;
5422         *rxflags = aninfo.flags;
5423
5424         if (status == ANEG_DONE &&
5425             (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
5426                              MR_LP_ADV_FULL_DUPLEX)))
5427                 res = 1;
5428
5429         return res;
5430 }
5431
5432 static void tg3_init_bcm8002(struct tg3 *tp)
5433 {
5434         u32 mac_status = tr32(MAC_STATUS);
5435         int i;
5436
5437         /* Reset when initting first time or we have a link. */
5438         if (tg3_flag(tp, INIT_COMPLETE) &&
5439             !(mac_status & MAC_STATUS_PCS_SYNCED))
5440                 return;
5441
5442         /* Set PLL lock range. */
5443         tg3_writephy(tp, 0x16, 0x8007);
5444
5445         /* SW reset */
5446         tg3_writephy(tp, MII_BMCR, BMCR_RESET);
5447
5448         /* Wait for reset to complete. */
5449         /* XXX schedule_timeout() ... */
5450         for (i = 0; i < 500; i++)
5451                 udelay(10);
5452
5453         /* Config mode; select PMA/Ch 1 regs. */
5454         tg3_writephy(tp, 0x10, 0x8411);
5455
5456         /* Enable auto-lock and comdet, select txclk for tx. */
5457         tg3_writephy(tp, 0x11, 0x0a10);
5458
5459         tg3_writephy(tp, 0x18, 0x00a0);
5460         tg3_writephy(tp, 0x16, 0x41ff);
5461
5462         /* Assert and deassert POR. */
5463         tg3_writephy(tp, 0x13, 0x0400);
5464         udelay(40);
5465         tg3_writephy(tp, 0x13, 0x0000);
5466
5467         tg3_writephy(tp, 0x11, 0x0a50);
5468         udelay(40);
5469         tg3_writephy(tp, 0x11, 0x0a10);
5470
5471         /* Wait for signal to stabilize */
5472         /* XXX schedule_timeout() ... */
5473         for (i = 0; i < 15000; i++)
5474                 udelay(10);
5475
5476         /* Deselect the channel register so we can read the PHYID
5477          * later.
5478          */
5479         tg3_writephy(tp, 0x10, 0x8011);
5480 }
5481
5482 static bool tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
5483 {
5484         u16 flowctrl;
5485         bool current_link_up;
5486         u32 sg_dig_ctrl, sg_dig_status;
5487         u32 serdes_cfg, expected_sg_dig_ctrl;
5488         int workaround, port_a;
5489
5490         serdes_cfg = 0;
5491         expected_sg_dig_ctrl = 0;
5492         workaround = 0;
5493         port_a = 1;
5494         current_link_up = false;
5495
5496         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A0 &&
5497             tg3_chip_rev_id(tp) != CHIPREV_ID_5704_A1) {
5498                 workaround = 1;
5499                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
5500                         port_a = 0;
5501
5502                 /* preserve bits 0-11,13,14 for signal pre-emphasis */
5503                 /* preserve bits 20-23 for voltage regulator */
5504                 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
5505         }
5506
5507         sg_dig_ctrl = tr32(SG_DIG_CTRL);
5508
5509         if (tp->link_config.autoneg != AUTONEG_ENABLE) {
5510                 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
5511                         if (workaround) {
5512                                 u32 val = serdes_cfg;
5513
5514                                 if (port_a)
5515                                         val |= 0xc010000;
5516                                 else
5517                                         val |= 0x4010000;
5518                                 tw32_f(MAC_SERDES_CFG, val);
5519                         }
5520
5521                         tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5522                 }
5523                 if (mac_status & MAC_STATUS_PCS_SYNCED) {
5524                         tg3_setup_flow_control(tp, 0, 0);
5525                         current_link_up = true;
5526                 }
5527                 goto out;
5528         }
5529
5530         /* Want auto-negotiation.  */
5531         expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
5532
5533         flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5534         if (flowctrl & ADVERTISE_1000XPAUSE)
5535                 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
5536         if (flowctrl & ADVERTISE_1000XPSE_ASYM)
5537                 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
5538
5539         if (sg_dig_ctrl != expected_sg_dig_ctrl) {
5540                 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
5541                     tp->serdes_counter &&
5542                     ((mac_status & (MAC_STATUS_PCS_SYNCED |
5543                                     MAC_STATUS_RCVD_CFG)) ==
5544                      MAC_STATUS_PCS_SYNCED)) {
5545                         tp->serdes_counter--;
5546                         current_link_up = true;
5547                         goto out;
5548                 }
5549 restart_autoneg:
5550                 if (workaround)
5551                         tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
5552                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
5553                 udelay(5);
5554                 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
5555
5556                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5557                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5558         } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
5559                                  MAC_STATUS_SIGNAL_DET)) {
5560                 sg_dig_status = tr32(SG_DIG_STATUS);
5561                 mac_status = tr32(MAC_STATUS);
5562
5563                 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
5564                     (mac_status & MAC_STATUS_PCS_SYNCED)) {
5565                         u32 local_adv = 0, remote_adv = 0;
5566
5567                         if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
5568                                 local_adv |= ADVERTISE_1000XPAUSE;
5569                         if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
5570                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5571
5572                         if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
5573                                 remote_adv |= LPA_1000XPAUSE;
5574                         if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
5575                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5576
5577                         tp->link_config.rmt_adv =
5578                                            mii_adv_to_ethtool_adv_x(remote_adv);
5579
5580                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5581                         current_link_up = true;
5582                         tp->serdes_counter = 0;
5583                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5584                 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
5585                         if (tp->serdes_counter)
5586                                 tp->serdes_counter--;
5587                         else {
5588                                 if (workaround) {
5589                                         u32 val = serdes_cfg;
5590
5591                                         if (port_a)
5592                                                 val |= 0xc010000;
5593                                         else
5594                                                 val |= 0x4010000;
5595
5596                                         tw32_f(MAC_SERDES_CFG, val);
5597                                 }
5598
5599                                 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
5600                                 udelay(40);
5601
5602                                 /* Link parallel detection - link is up */
5603                                 /* only if we have PCS_SYNC and not */
5604                                 /* receiving config code words */
5605                                 mac_status = tr32(MAC_STATUS);
5606                                 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
5607                                     !(mac_status & MAC_STATUS_RCVD_CFG)) {
5608                                         tg3_setup_flow_control(tp, 0, 0);
5609                                         current_link_up = true;
5610                                         tp->phy_flags |=
5611                                                 TG3_PHYFLG_PARALLEL_DETECT;
5612                                         tp->serdes_counter =
5613                                                 SERDES_PARALLEL_DET_TIMEOUT;
5614                                 } else
5615                                         goto restart_autoneg;
5616                         }
5617                 }
5618         } else {
5619                 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
5620                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5621         }
5622
5623 out:
5624         return current_link_up;
5625 }
5626
5627 static bool tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5628 {
5629         bool current_link_up = false;
5630
5631         if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5632                 goto out;
5633
5634         if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5635                 u32 txflags, rxflags;
5636                 int i;
5637
5638                 if (fiber_autoneg(tp, &txflags, &rxflags)) {
5639                         u32 local_adv = 0, remote_adv = 0;
5640
5641                         if (txflags & ANEG_CFG_PS1)
5642                                 local_adv |= ADVERTISE_1000XPAUSE;
5643                         if (txflags & ANEG_CFG_PS2)
5644                                 local_adv |= ADVERTISE_1000XPSE_ASYM;
5645
5646                         if (rxflags & MR_LP_ADV_SYM_PAUSE)
5647                                 remote_adv |= LPA_1000XPAUSE;
5648                         if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5649                                 remote_adv |= LPA_1000XPAUSE_ASYM;
5650
5651                         tp->link_config.rmt_adv =
5652                                            mii_adv_to_ethtool_adv_x(remote_adv);
5653
5654                         tg3_setup_flow_control(tp, local_adv, remote_adv);
5655
5656                         current_link_up = true;
5657                 }
5658                 for (i = 0; i < 30; i++) {
5659                         udelay(20);
5660                         tw32_f(MAC_STATUS,
5661                                (MAC_STATUS_SYNC_CHANGED |
5662                                 MAC_STATUS_CFG_CHANGED));
5663                         udelay(40);
5664                         if ((tr32(MAC_STATUS) &
5665                              (MAC_STATUS_SYNC_CHANGED |
5666                               MAC_STATUS_CFG_CHANGED)) == 0)
5667                                 break;
5668                 }
5669
5670                 mac_status = tr32(MAC_STATUS);
5671                 if (!current_link_up &&
5672                     (mac_status & MAC_STATUS_PCS_SYNCED) &&
5673                     !(mac_status & MAC_STATUS_RCVD_CFG))
5674                         current_link_up = true;
5675         } else {
5676                 tg3_setup_flow_control(tp, 0, 0);
5677
5678                 /* Forcing 1000FD link up. */
5679                 current_link_up = true;
5680
5681                 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
5682                 udelay(40);
5683
5684                 tw32_f(MAC_MODE, tp->mac_mode);
5685                 udelay(40);
5686         }
5687
5688 out:
5689         return current_link_up;
5690 }
5691
5692 static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset)
5693 {
5694         u32 orig_pause_cfg;
5695         u16 orig_active_speed;
5696         u8 orig_active_duplex;
5697         u32 mac_status;
5698         bool current_link_up;
5699         int i;
5700
5701         orig_pause_cfg = tp->link_config.active_flowctrl;
5702         orig_active_speed = tp->link_config.active_speed;
5703         orig_active_duplex = tp->link_config.active_duplex;
5704
5705         if (!tg3_flag(tp, HW_AUTONEG) &&
5706             tp->link_up &&
5707             tg3_flag(tp, INIT_COMPLETE)) {
5708                 mac_status = tr32(MAC_STATUS);
5709                 mac_status &= (MAC_STATUS_PCS_SYNCED |
5710                                MAC_STATUS_SIGNAL_DET |
5711                                MAC_STATUS_CFG_CHANGED |
5712                                MAC_STATUS_RCVD_CFG);
5713                 if (mac_status == (MAC_STATUS_PCS_SYNCED |
5714                                    MAC_STATUS_SIGNAL_DET)) {
5715                         tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5716                                             MAC_STATUS_CFG_CHANGED));
5717                         return 0;
5718                 }
5719         }
5720
5721         tw32_f(MAC_TX_AUTO_NEG, 0);
5722
5723         tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
5724         tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
5725         tw32_f(MAC_MODE, tp->mac_mode);
5726         udelay(40);
5727
5728         if (tp->phy_id == TG3_PHY_ID_BCM8002)
5729                 tg3_init_bcm8002(tp);
5730
5731         /* Enable link change event even when serdes polling.  */
5732         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5733         udelay(40);
5734
5735         current_link_up = false;
5736         tp->link_config.rmt_adv = 0;
5737         mac_status = tr32(MAC_STATUS);
5738
5739         if (tg3_flag(tp, HW_AUTONEG))
5740                 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5741         else
5742                 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5743
5744         tp->napi[0].hw_status->status =
5745                 (SD_STATUS_UPDATED |
5746                  (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5747
5748         for (i = 0; i < 100; i++) {
5749                 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
5750                                     MAC_STATUS_CFG_CHANGED));
5751                 udelay(5);
5752                 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
5753                                          MAC_STATUS_CFG_CHANGED |
5754                                          MAC_STATUS_LNKSTATE_CHANGED)) == 0)
5755                         break;
5756         }
5757
5758         mac_status = tr32(MAC_STATUS);
5759         if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5760                 current_link_up = false;
5761                 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5762                     tp->serdes_counter == 0) {
5763                         tw32_f(MAC_MODE, (tp->mac_mode |
5764                                           MAC_MODE_SEND_CONFIGS));
5765                         udelay(1);
5766                         tw32_f(MAC_MODE, tp->mac_mode);
5767                 }
5768         }
5769
5770         if (current_link_up) {
5771                 tp->link_config.active_speed = SPEED_1000;
5772                 tp->link_config.active_duplex = DUPLEX_FULL;
5773                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5774                                     LED_CTRL_LNKLED_OVERRIDE |
5775                                     LED_CTRL_1000MBPS_ON));
5776         } else {
5777                 tp->link_config.active_speed = SPEED_UNKNOWN;
5778                 tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5779                 tw32(MAC_LED_CTRL, (tp->led_ctrl |
5780                                     LED_CTRL_LNKLED_OVERRIDE |
5781                                     LED_CTRL_TRAFFIC_OVERRIDE));
5782         }
5783
5784         if (!tg3_test_and_report_link_chg(tp, current_link_up)) {
5785                 u32 now_pause_cfg = tp->link_config.active_flowctrl;
5786                 if (orig_pause_cfg != now_pause_cfg ||
5787                     orig_active_speed != tp->link_config.active_speed ||
5788                     orig_active_duplex != tp->link_config.active_duplex)
5789                         tg3_link_report(tp);
5790         }
5791
5792         return 0;
5793 }
5794
5795 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, bool force_reset)
5796 {
5797         int err = 0;
5798         u32 bmsr, bmcr;
5799         u16 current_speed = SPEED_UNKNOWN;
5800         u8 current_duplex = DUPLEX_UNKNOWN;
5801         bool current_link_up = false;
5802         u32 local_adv, remote_adv, sgsr;
5803
5804         if ((tg3_asic_rev(tp) == ASIC_REV_5719 ||
5805              tg3_asic_rev(tp) == ASIC_REV_5720) &&
5806              !tg3_readphy(tp, SERDES_TG3_1000X_STATUS, &sgsr) &&
5807              (sgsr & SERDES_TG3_SGMII_MODE)) {
5808
5809                 if (force_reset)
5810                         tg3_phy_reset(tp);
5811
5812                 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
5813
5814                 if (!(sgsr & SERDES_TG3_LINK_UP)) {
5815                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5816                 } else {
5817                         current_link_up = true;
5818                         if (sgsr & SERDES_TG3_SPEED_1000) {
5819                                 current_speed = SPEED_1000;
5820                                 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5821                         } else if (sgsr & SERDES_TG3_SPEED_100) {
5822                                 current_speed = SPEED_100;
5823                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5824                         } else {
5825                                 current_speed = SPEED_10;
5826                                 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
5827                         }
5828
5829                         if (sgsr & SERDES_TG3_FULL_DUPLEX)
5830                                 current_duplex = DUPLEX_FULL;
5831                         else
5832                                 current_duplex = DUPLEX_HALF;
5833                 }
5834
5835                 tw32_f(MAC_MODE, tp->mac_mode);
5836                 udelay(40);
5837
5838                 tg3_clear_mac_status(tp);
5839
5840                 goto fiber_setup_done;
5841         }
5842
5843         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
5844         tw32_f(MAC_MODE, tp->mac_mode);
5845         udelay(40);
5846
5847         tg3_clear_mac_status(tp);
5848
5849         if (force_reset)
5850                 tg3_phy_reset(tp);
5851
5852         tp->link_config.rmt_adv = 0;
5853
5854         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5855         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5856         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5857                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5858                         bmsr |= BMSR_LSTATUS;
5859                 else
5860                         bmsr &= ~BMSR_LSTATUS;
5861         }
5862
5863         err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5864
5865         if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5866             (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
5867                 /* do nothing, just check for link up at the end */
5868         } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5869                 u32 adv, newadv;
5870
5871                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5872                 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5873                                  ADVERTISE_1000XPAUSE |
5874                                  ADVERTISE_1000XPSE_ASYM |
5875                                  ADVERTISE_SLCT);
5876
5877                 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5878                 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5879
5880                 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5881                         tg3_writephy(tp, MII_ADVERTISE, newadv);
5882                         bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5883                         tg3_writephy(tp, MII_BMCR, bmcr);
5884
5885                         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5886                         tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
5887                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5888
5889                         return err;
5890                 }
5891         } else {
5892                 u32 new_bmcr;
5893
5894                 bmcr &= ~BMCR_SPEED1000;
5895                 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5896
5897                 if (tp->link_config.duplex == DUPLEX_FULL)
5898                         new_bmcr |= BMCR_FULLDPLX;
5899
5900                 if (new_bmcr != bmcr) {
5901                         /* BMCR_SPEED1000 is a reserved bit that needs
5902                          * to be set on write.
5903                          */
5904                         new_bmcr |= BMCR_SPEED1000;
5905
5906                         /* Force a linkdown */
5907                         if (tp->link_up) {
5908                                 u32 adv;
5909
5910                                 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5911                                 adv &= ~(ADVERTISE_1000XFULL |
5912                                          ADVERTISE_1000XHALF |
5913                                          ADVERTISE_SLCT);
5914                                 tg3_writephy(tp, MII_ADVERTISE, adv);
5915                                 tg3_writephy(tp, MII_BMCR, bmcr |
5916                                                            BMCR_ANRESTART |
5917                                                            BMCR_ANENABLE);
5918                                 udelay(10);
5919                                 tg3_carrier_off(tp);
5920                         }
5921                         tg3_writephy(tp, MII_BMCR, new_bmcr);
5922                         bmcr = new_bmcr;
5923                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5924                         err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5925                         if (tg3_asic_rev(tp) == ASIC_REV_5714) {
5926                                 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
5927                                         bmsr |= BMSR_LSTATUS;
5928                                 else
5929                                         bmsr &= ~BMSR_LSTATUS;
5930                         }
5931                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
5932                 }
5933         }
5934
5935         if (bmsr & BMSR_LSTATUS) {
5936                 current_speed = SPEED_1000;
5937                 current_link_up = true;
5938                 if (bmcr & BMCR_FULLDPLX)
5939                         current_duplex = DUPLEX_FULL;
5940                 else
5941                         current_duplex = DUPLEX_HALF;
5942
5943                 local_adv = 0;
5944                 remote_adv = 0;
5945
5946                 if (bmcr & BMCR_ANENABLE) {
5947                         u32 common;
5948
5949                         err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5950                         err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5951                         common = local_adv & remote_adv;
5952                         if (common & (ADVERTISE_1000XHALF |
5953                                       ADVERTISE_1000XFULL)) {
5954                                 if (common & ADVERTISE_1000XFULL)
5955                                         current_duplex = DUPLEX_FULL;
5956                                 else
5957                                         current_duplex = DUPLEX_HALF;
5958
5959                                 tp->link_config.rmt_adv =
5960                                            mii_adv_to_ethtool_adv_x(remote_adv);
5961                         } else if (!tg3_flag(tp, 5780_CLASS)) {
5962                                 /* Link is up via parallel detect */
5963                         } else {
5964                                 current_link_up = false;
5965                         }
5966                 }
5967         }
5968
5969 fiber_setup_done:
5970         if (current_link_up && current_duplex == DUPLEX_FULL)
5971                 tg3_setup_flow_control(tp, local_adv, remote_adv);
5972
5973         tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
5974         if (tp->link_config.active_duplex == DUPLEX_HALF)
5975                 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
5976
5977         tw32_f(MAC_MODE, tp->mac_mode);
5978         udelay(40);
5979
5980         tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
5981
5982         tp->link_config.active_speed = current_speed;
5983         tp->link_config.active_duplex = current_duplex;
5984
5985         tg3_test_and_report_link_chg(tp, current_link_up);
5986         return err;
5987 }
5988
5989 static void tg3_serdes_parallel_detect(struct tg3 *tp)
5990 {
5991         if (tp->serdes_counter) {
5992                 /* Give autoneg time to complete. */
5993                 tp->serdes_counter--;
5994                 return;
5995         }
5996
5997         if (!tp->link_up &&
5998             (tp->link_config.autoneg == AUTONEG_ENABLE)) {
5999                 u32 bmcr;
6000
6001                 tg3_readphy(tp, MII_BMCR, &bmcr);
6002                 if (bmcr & BMCR_ANENABLE) {
6003                         u32 phy1, phy2;
6004
6005                         /* Select shadow register 0x1f */
6006                         tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
6007                         tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
6008
6009                         /* Select expansion interrupt status register */
6010                         tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6011                                          MII_TG3_DSP_EXP1_INT_STAT);
6012                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6013                         tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6014
6015                         if ((phy1 & 0x10) && !(phy2 & 0x20)) {
6016                                 /* We have signal detect and not receiving
6017                                  * config code words, link is up by parallel
6018                                  * detection.
6019                                  */
6020
6021                                 bmcr &= ~BMCR_ANENABLE;
6022                                 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
6023                                 tg3_writephy(tp, MII_BMCR, bmcr);
6024                                 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT;
6025                         }
6026                 }
6027         } else if (tp->link_up &&
6028                    (tp->link_config.autoneg == AUTONEG_ENABLE) &&
6029                    (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) {
6030                 u32 phy2;
6031
6032                 /* Select expansion interrupt status register */
6033                 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
6034                                  MII_TG3_DSP_EXP1_INT_STAT);
6035                 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
6036                 if (phy2 & 0x20) {
6037                         u32 bmcr;
6038
6039                         /* Config code words received, turn on autoneg. */
6040                         tg3_readphy(tp, MII_BMCR, &bmcr);
6041                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
6042
6043                         tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
6044
6045                 }
6046         }
6047 }
6048
6049 static int tg3_setup_phy(struct tg3 *tp, bool force_reset)
6050 {
6051         u32 val;
6052         int err;
6053
6054         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
6055                 err = tg3_setup_fiber_phy(tp, force_reset);
6056         else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
6057                 err = tg3_setup_fiber_mii_phy(tp, force_reset);
6058         else
6059                 err = tg3_setup_copper_phy(tp, force_reset);
6060
6061         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
6062                 u32 scale;
6063
6064                 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
6065                 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
6066                         scale = 65;
6067                 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
6068                         scale = 6;
6069                 else
6070                         scale = 12;
6071
6072                 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
6073                 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
6074                 tw32(GRC_MISC_CFG, val);
6075         }
6076
6077         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6078               (6 << TX_LENGTHS_IPG_SHIFT);
6079         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
6080             tg3_asic_rev(tp) == ASIC_REV_5762)
6081                 val |= tr32(MAC_TX_LENGTHS) &
6082                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
6083                         TX_LENGTHS_CNT_DWN_VAL_MSK);
6084
6085         if (tp->link_config.active_speed == SPEED_1000 &&
6086             tp->link_config.active_duplex == DUPLEX_HALF)
6087                 tw32(MAC_TX_LENGTHS, val |
6088                      (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
6089         else
6090                 tw32(MAC_TX_LENGTHS, val |
6091                      (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6092
6093         if (!tg3_flag(tp, 5705_PLUS)) {
6094                 if (tp->link_up) {
6095                         tw32(HOSTCC_STAT_COAL_TICKS,
6096                              tp->coal.stats_block_coalesce_usecs);
6097                 } else {
6098                         tw32(HOSTCC_STAT_COAL_TICKS, 0);
6099                 }
6100         }
6101
6102         if (tg3_flag(tp, ASPM_WORKAROUND)) {
6103                 val = tr32(PCIE_PWR_MGMT_THRESH);
6104                 if (!tp->link_up)
6105                         val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
6106                               tp->pwrmgmt_thresh;
6107                 else
6108                         val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
6109                 tw32(PCIE_PWR_MGMT_THRESH, val);
6110         }
6111
6112         return err;
6113 }
6114
6115 /* tp->lock must be held */
6116 static u64 tg3_refclk_read(struct tg3 *tp)
6117 {
6118         u64 stamp = tr32(TG3_EAV_REF_CLCK_LSB);
6119         return stamp | (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32;
6120 }
6121
6122 /* tp->lock must be held */
6123 static void tg3_refclk_write(struct tg3 *tp, u64 newval)
6124 {
6125         u32 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6126
6127         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_STOP);
6128         tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff);
6129         tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32);
6130         tw32_f(TG3_EAV_REF_CLCK_CTL, clock_ctl | TG3_EAV_REF_CLCK_CTL_RESUME);
6131 }
6132
6133 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync);
6134 static inline void tg3_full_unlock(struct tg3 *tp);
6135 static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info)
6136 {
6137         struct tg3 *tp = netdev_priv(dev);
6138
6139         info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
6140                                 SOF_TIMESTAMPING_RX_SOFTWARE |
6141                                 SOF_TIMESTAMPING_SOFTWARE;
6142
6143         if (tg3_flag(tp, PTP_CAPABLE)) {
6144                 info->so_timestamping |= SOF_TIMESTAMPING_TX_HARDWARE |
6145                                         SOF_TIMESTAMPING_RX_HARDWARE |
6146                                         SOF_TIMESTAMPING_RAW_HARDWARE;
6147         }
6148
6149         if (tp->ptp_clock)
6150                 info->phc_index = ptp_clock_index(tp->ptp_clock);
6151         else
6152                 info->phc_index = -1;
6153
6154         info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
6155
6156         info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
6157                            (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
6158                            (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
6159                            (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
6160         return 0;
6161 }
6162
6163 static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
6164 {
6165         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6166         bool neg_adj = false;
6167         u32 correction = 0;
6168
6169         if (ppb < 0) {
6170                 neg_adj = true;
6171                 ppb = -ppb;
6172         }
6173
6174         /* Frequency adjustment is performed using hardware with a 24 bit
6175          * accumulator and a programmable correction value. On each clk, the
6176          * correction value gets added to the accumulator and when it
6177          * overflows, the time counter is incremented/decremented.
6178          *
6179          * So conversion from ppb to correction value is
6180          *              ppb * (1 << 24) / 1000000000
6181          */
6182         correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) &
6183                      TG3_EAV_REF_CLK_CORRECT_MASK;
6184
6185         tg3_full_lock(tp, 0);
6186
6187         if (correction)
6188                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL,
6189                      TG3_EAV_REF_CLK_CORRECT_EN |
6190                      (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction);
6191         else
6192                 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0);
6193
6194         tg3_full_unlock(tp);
6195
6196         return 0;
6197 }
6198
6199 static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
6200 {
6201         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6202
6203         tg3_full_lock(tp, 0);
6204         tp->ptp_adjust += delta;
6205         tg3_full_unlock(tp);
6206
6207         return 0;
6208 }
6209
6210 static int tg3_ptp_gettime(struct ptp_clock_info *ptp, struct timespec *ts)
6211 {
6212         u64 ns;
6213         u32 remainder;
6214         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6215
6216         tg3_full_lock(tp, 0);
6217         ns = tg3_refclk_read(tp);
6218         ns += tp->ptp_adjust;
6219         tg3_full_unlock(tp);
6220
6221         ts->tv_sec = div_u64_rem(ns, 1000000000, &remainder);
6222         ts->tv_nsec = remainder;
6223
6224         return 0;
6225 }
6226
6227 static int tg3_ptp_settime(struct ptp_clock_info *ptp,
6228                            const struct timespec *ts)
6229 {
6230         u64 ns;
6231         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6232
6233         ns = timespec_to_ns(ts);
6234
6235         tg3_full_lock(tp, 0);
6236         tg3_refclk_write(tp, ns);
6237         tp->ptp_adjust = 0;
6238         tg3_full_unlock(tp);
6239
6240         return 0;
6241 }
6242
6243 static int tg3_ptp_enable(struct ptp_clock_info *ptp,
6244                           struct ptp_clock_request *rq, int on)
6245 {
6246         struct tg3 *tp = container_of(ptp, struct tg3, ptp_info);
6247         u32 clock_ctl;
6248         int rval = 0;
6249
6250         switch (rq->type) {
6251         case PTP_CLK_REQ_PEROUT:
6252                 if (rq->perout.index != 0)
6253                         return -EINVAL;
6254
6255                 tg3_full_lock(tp, 0);
6256                 clock_ctl = tr32(TG3_EAV_REF_CLCK_CTL);
6257                 clock_ctl &= ~TG3_EAV_CTL_TSYNC_GPIO_MASK;
6258
6259                 if (on) {
6260                         u64 nsec;
6261
6262                         nsec = rq->perout.start.sec * 1000000000ULL +
6263                                rq->perout.start.nsec;
6264
6265                         if (rq->perout.period.sec || rq->perout.period.nsec) {
6266                                 netdev_warn(tp->dev,
6267                                             "Device supports only a one-shot timesync output, period must be 0\n");
6268                                 rval = -EINVAL;
6269                                 goto err_out;
6270                         }
6271
6272                         if (nsec & (1ULL << 63)) {
6273                                 netdev_warn(tp->dev,
6274                                             "Start value (nsec) is over limit. Maximum size of start is only 63 bits\n");
6275                                 rval = -EINVAL;
6276                                 goto err_out;
6277                         }
6278
6279                         tw32(TG3_EAV_WATCHDOG0_LSB, (nsec & 0xffffffff));
6280                         tw32(TG3_EAV_WATCHDOG0_MSB,
6281                              TG3_EAV_WATCHDOG0_EN |
6282                              ((nsec >> 32) & TG3_EAV_WATCHDOG_MSB_MASK));
6283
6284                         tw32(TG3_EAV_REF_CLCK_CTL,
6285                              clock_ctl | TG3_EAV_CTL_TSYNC_WDOG0);
6286                 } else {
6287                         tw32(TG3_EAV_WATCHDOG0_MSB, 0);
6288                         tw32(TG3_EAV_REF_CLCK_CTL, clock_ctl);
6289                 }
6290
6291 err_out:
6292                 tg3_full_unlock(tp);
6293                 return rval;
6294
6295         default:
6296                 break;
6297         }
6298
6299         return -EOPNOTSUPP;
6300 }
6301
6302 static const struct ptp_clock_info tg3_ptp_caps = {
6303         .owner          = THIS_MODULE,
6304         .name           = "tg3 clock",
6305         .max_adj        = 250000000,
6306         .n_alarm        = 0,
6307         .n_ext_ts       = 0,
6308         .n_per_out      = 1,
6309         .pps            = 0,
6310         .adjfreq        = tg3_ptp_adjfreq,
6311         .adjtime        = tg3_ptp_adjtime,
6312         .gettime        = tg3_ptp_gettime,
6313         .settime        = tg3_ptp_settime,
6314         .enable         = tg3_ptp_enable,
6315 };
6316
6317 static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock,
6318                                      struct skb_shared_hwtstamps *timestamp)
6319 {
6320         memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps));
6321         timestamp->hwtstamp  = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) +
6322                                            tp->ptp_adjust);
6323 }
6324
6325 /* tp->lock must be held */
6326 static void tg3_ptp_init(struct tg3 *tp)
6327 {
6328         if (!tg3_flag(tp, PTP_CAPABLE))
6329                 return;
6330
6331         /* Initialize the hardware clock to the system time. */
6332         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()));
6333         tp->ptp_adjust = 0;
6334         tp->ptp_info = tg3_ptp_caps;
6335 }
6336
6337 /* tp->lock must be held */
6338 static void tg3_ptp_resume(struct tg3 *tp)
6339 {
6340         if (!tg3_flag(tp, PTP_CAPABLE))
6341                 return;
6342
6343         tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust);
6344         tp->ptp_adjust = 0;
6345 }
6346
6347 static void tg3_ptp_fini(struct tg3 *tp)
6348 {
6349         if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock)
6350                 return;
6351
6352         ptp_clock_unregister(tp->ptp_clock);
6353         tp->ptp_clock = NULL;
6354         tp->ptp_adjust = 0;
6355 }
6356
6357 static inline int tg3_irq_sync(struct tg3 *tp)
6358 {
6359         return tp->irq_sync;
6360 }
6361
6362 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
6363 {
6364         int i;
6365
6366         dst = (u32 *)((u8 *)dst + off);
6367         for (i = 0; i < len; i += sizeof(u32))
6368                 *dst++ = tr32(off + i);
6369 }
6370
6371 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
6372 {
6373         tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
6374         tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
6375         tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
6376         tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
6377         tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
6378         tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
6379         tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
6380         tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
6381         tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
6382         tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
6383         tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
6384         tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
6385         tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
6386         tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
6387         tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
6388         tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
6389         tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
6390         tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
6391         tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
6392
6393         if (tg3_flag(tp, SUPPORT_MSIX))
6394                 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
6395
6396         tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
6397         tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
6398         tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
6399         tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
6400         tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
6401         tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
6402         tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
6403         tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
6404
6405         if (!tg3_flag(tp, 5705_PLUS)) {
6406                 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
6407                 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
6408                 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
6409         }
6410
6411         tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
6412         tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
6413         tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
6414         tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
6415         tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
6416
6417         if (tg3_flag(tp, NVRAM))
6418                 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
6419 }
6420
6421 static void tg3_dump_state(struct tg3 *tp)
6422 {
6423         int i;
6424         u32 *regs;
6425
6426         regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
6427         if (!regs)
6428                 return;
6429
6430         if (tg3_flag(tp, PCI_EXPRESS)) {
6431                 /* Read up to but not including private PCI registers */
6432                 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
6433                         regs[i / sizeof(u32)] = tr32(i);
6434         } else
6435                 tg3_dump_legacy_regs(tp, regs);
6436
6437         for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
6438                 if (!regs[i + 0] && !regs[i + 1] &&
6439                     !regs[i + 2] && !regs[i + 3])
6440                         continue;
6441
6442                 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
6443                            i * 4,
6444                            regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
6445         }
6446
6447         kfree(regs);
6448
6449         for (i = 0; i < tp->irq_cnt; i++) {
6450                 struct tg3_napi *tnapi = &tp->napi[i];
6451
6452                 /* SW status block */
6453                 netdev_err(tp->dev,
6454                          "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6455                            i,
6456                            tnapi->hw_status->status,
6457                            tnapi->hw_status->status_tag,
6458                            tnapi->hw_status->rx_jumbo_consumer,
6459                            tnapi->hw_status->rx_consumer,
6460                            tnapi->hw_status->rx_mini_consumer,
6461                            tnapi->hw_status->idx[0].rx_producer,
6462                            tnapi->hw_status->idx[0].tx_consumer);
6463
6464                 netdev_err(tp->dev,
6465                 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
6466                            i,
6467                            tnapi->last_tag, tnapi->last_irq_tag,
6468                            tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
6469                            tnapi->rx_rcb_ptr,
6470                            tnapi->prodring.rx_std_prod_idx,
6471                            tnapi->prodring.rx_std_cons_idx,
6472                            tnapi->prodring.rx_jmb_prod_idx,
6473                            tnapi->prodring.rx_jmb_cons_idx);
6474         }
6475 }
6476
6477 /* This is called whenever we suspect that the system chipset is re-
6478  * ordering the sequence of MMIO to the tx send mailbox. The symptom
6479  * is bogus tx completions. We try to recover by setting the
6480  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
6481  * in the workqueue.
6482  */
6483 static void tg3_tx_recover(struct tg3 *tp)
6484 {
6485         BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
6486                tp->write32_tx_mbox == tg3_write_indirect_mbox);
6487
6488         netdev_warn(tp->dev,
6489                     "The system may be re-ordering memory-mapped I/O "
6490                     "cycles to the network device, attempting to recover. "
6491                     "Please report the problem to the driver maintainer "
6492                     "and include system chipset information.\n");
6493
6494         tg3_flag_set(tp, TX_RECOVERY_PENDING);
6495 }
6496
6497 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
6498 {
6499         /* Tell compiler to fetch tx indices from memory. */
6500         barrier();
6501         return tnapi->tx_pending -
6502                ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
6503 }
6504
6505 /* Tigon3 never reports partial packet sends.  So we do not
6506  * need special logic to handle SKBs that have not had all
6507  * of their frags sent yet, like SunGEM does.
6508  */
6509 static void tg3_tx(struct tg3_napi *tnapi)
6510 {
6511         struct tg3 *tp = tnapi->tp;
6512         u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
6513         u32 sw_idx = tnapi->tx_cons;
6514         struct netdev_queue *txq;
6515         int index = tnapi - tp->napi;
6516         unsigned int pkts_compl = 0, bytes_compl = 0;
6517
6518         if (tg3_flag(tp, ENABLE_TSS))
6519                 index--;
6520
6521         txq = netdev_get_tx_queue(tp->dev, index);
6522
6523         while (sw_idx != hw_idx) {
6524                 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
6525                 struct sk_buff *skb = ri->skb;
6526                 int i, tx_bug = 0;
6527
6528                 if (unlikely(skb == NULL)) {
6529                         tg3_tx_recover(tp);
6530                         return;
6531                 }
6532
6533                 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) {
6534                         struct skb_shared_hwtstamps timestamp;
6535                         u64 hwclock = tr32(TG3_TX_TSTAMP_LSB);
6536                         hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32;
6537
6538                         tg3_hwclock_to_timestamp(tp, hwclock, &timestamp);
6539
6540                         skb_tstamp_tx(skb, &timestamp);
6541                 }
6542
6543                 pci_unmap_single(tp->pdev,
6544                                  dma_unmap_addr(ri, mapping),
6545                                  skb_headlen(skb),
6546                                  PCI_DMA_TODEVICE);
6547
6548                 ri->skb = NULL;
6549
6550                 while (ri->fragmented) {
6551                         ri->fragmented = false;
6552                         sw_idx = NEXT_TX(sw_idx);
6553                         ri = &tnapi->tx_buffers[sw_idx];
6554                 }
6555
6556                 sw_idx = NEXT_TX(sw_idx);
6557
6558                 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
6559                         ri = &tnapi->tx_buffers[sw_idx];
6560                         if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
6561                                 tx_bug = 1;
6562
6563                         pci_unmap_page(tp->pdev,
6564                                        dma_unmap_addr(ri, mapping),
6565                                        skb_frag_size(&skb_shinfo(skb)->frags[i]),
6566                                        PCI_DMA_TODEVICE);
6567
6568                         while (ri->fragmented) {
6569                                 ri->fragmented = false;
6570                                 sw_idx = NEXT_TX(sw_idx);
6571                                 ri = &tnapi->tx_buffers[sw_idx];
6572                         }
6573
6574                         sw_idx = NEXT_TX(sw_idx);
6575                 }
6576
6577                 pkts_compl++;
6578                 bytes_compl += skb->len;
6579
6580                 dev_kfree_skb(skb);
6581
6582                 if (unlikely(tx_bug)) {
6583                         tg3_tx_recover(tp);
6584                         return;
6585                 }
6586         }
6587
6588         netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
6589
6590         tnapi->tx_cons = sw_idx;
6591
6592         /* Need to make the tx_cons update visible to tg3_start_xmit()
6593          * before checking for netif_queue_stopped().  Without the
6594          * memory barrier, there is a small possibility that tg3_start_xmit()
6595          * will miss it and cause the queue to be stopped forever.
6596          */
6597         smp_mb();
6598
6599         if (unlikely(netif_tx_queue_stopped(txq) &&
6600                      (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
6601                 __netif_tx_lock(txq, smp_processor_id());
6602                 if (netif_tx_queue_stopped(txq) &&
6603                     (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
6604                         netif_tx_wake_queue(txq);
6605                 __netif_tx_unlock(txq);
6606         }
6607 }
6608
6609 static void tg3_frag_free(bool is_frag, void *data)
6610 {
6611         if (is_frag)
6612                 put_page(virt_to_head_page(data));
6613         else
6614                 kfree(data);
6615 }
6616
6617 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
6618 {
6619         unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
6620                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6621
6622         if (!ri->data)
6623                 return;
6624
6625         pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
6626                          map_sz, PCI_DMA_FROMDEVICE);
6627         tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
6628         ri->data = NULL;
6629 }
6630
6631
6632 /* Returns size of skb allocated or < 0 on error.
6633  *
6634  * We only need to fill in the address because the other members
6635  * of the RX descriptor are invariant, see tg3_init_rings.
6636  *
6637  * Note the purposeful assymetry of cpu vs. chip accesses.  For
6638  * posting buffers we only dirty the first cache line of the RX
6639  * descriptor (containing the address).  Whereas for the RX status
6640  * buffers the cpu only reads the last cacheline of the RX descriptor
6641  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
6642  */
6643 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
6644                              u32 opaque_key, u32 dest_idx_unmasked,
6645                              unsigned int *frag_size)
6646 {
6647         struct tg3_rx_buffer_desc *desc;
6648         struct ring_info *map;
6649         u8 *data;
6650         dma_addr_t mapping;
6651         int skb_size, data_size, dest_idx;
6652
6653         switch (opaque_key) {
6654         case RXD_OPAQUE_RING_STD:
6655                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6656                 desc = &tpr->rx_std[dest_idx];
6657                 map = &tpr->rx_std_buffers[dest_idx];
6658                 data_size = tp->rx_pkt_map_sz;
6659                 break;
6660
6661         case RXD_OPAQUE_RING_JUMBO:
6662                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6663                 desc = &tpr->rx_jmb[dest_idx].std;
6664                 map = &tpr->rx_jmb_buffers[dest_idx];
6665                 data_size = TG3_RX_JMB_MAP_SZ;
6666                 break;
6667
6668         default:
6669                 return -EINVAL;
6670         }
6671
6672         /* Do not overwrite any of the map or rp information
6673          * until we are sure we can commit to a new buffer.
6674          *
6675          * Callers depend upon this behavior and assume that
6676          * we leave everything unchanged if we fail.
6677          */
6678         skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
6679                    SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
6680         if (skb_size <= PAGE_SIZE) {
6681                 data = netdev_alloc_frag(skb_size);
6682                 *frag_size = skb_size;
6683         } else {
6684                 data = kmalloc(skb_size, GFP_ATOMIC);
6685                 *frag_size = 0;
6686         }
6687         if (!data)
6688                 return -ENOMEM;
6689
6690         mapping = pci_map_single(tp->pdev,
6691                                  data + TG3_RX_OFFSET(tp),
6692                                  data_size,
6693                                  PCI_DMA_FROMDEVICE);
6694         if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) {
6695                 tg3_frag_free(skb_size <= PAGE_SIZE, data);
6696                 return -EIO;
6697         }
6698
6699         map->data = data;
6700         dma_unmap_addr_set(map, mapping, mapping);
6701
6702         desc->addr_hi = ((u64)mapping >> 32);
6703         desc->addr_lo = ((u64)mapping & 0xffffffff);
6704
6705         return data_size;
6706 }
6707
6708 /* We only need to move over in the address because the other
6709  * members of the RX descriptor are invariant.  See notes above
6710  * tg3_alloc_rx_data for full details.
6711  */
6712 static void tg3_recycle_rx(struct tg3_napi *tnapi,
6713                            struct tg3_rx_prodring_set *dpr,
6714                            u32 opaque_key, int src_idx,
6715                            u32 dest_idx_unmasked)
6716 {
6717         struct tg3 *tp = tnapi->tp;
6718         struct tg3_rx_buffer_desc *src_desc, *dest_desc;
6719         struct ring_info *src_map, *dest_map;
6720         struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
6721         int dest_idx;
6722
6723         switch (opaque_key) {
6724         case RXD_OPAQUE_RING_STD:
6725                 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
6726                 dest_desc = &dpr->rx_std[dest_idx];
6727                 dest_map = &dpr->rx_std_buffers[dest_idx];
6728                 src_desc = &spr->rx_std[src_idx];
6729                 src_map = &spr->rx_std_buffers[src_idx];
6730                 break;
6731
6732         case RXD_OPAQUE_RING_JUMBO:
6733                 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
6734                 dest_desc = &dpr->rx_jmb[dest_idx].std;
6735                 dest_map = &dpr->rx_jmb_buffers[dest_idx];
6736                 src_desc = &spr->rx_jmb[src_idx].std;
6737                 src_map = &spr->rx_jmb_buffers[src_idx];
6738                 break;
6739
6740         default:
6741                 return;
6742         }
6743
6744         dest_map->data = src_map->data;
6745         dma_unmap_addr_set(dest_map, mapping,
6746                            dma_unmap_addr(src_map, mapping));
6747         dest_desc->addr_hi = src_desc->addr_hi;
6748         dest_desc->addr_lo = src_desc->addr_lo;
6749
6750         /* Ensure that the update to the skb happens after the physical
6751          * addresses have been transferred to the new BD location.
6752          */
6753         smp_wmb();
6754
6755         src_map->data = NULL;
6756 }
6757
6758 /* The RX ring scheme is composed of multiple rings which post fresh
6759  * buffers to the chip, and one special ring the chip uses to report
6760  * status back to the host.
6761  *
6762  * The special ring reports the status of received packets to the
6763  * host.  The chip does not write into the original descriptor the
6764  * RX buffer was obtained from.  The chip simply takes the original
6765  * descriptor as provided by the host, updates the status and length
6766  * field, then writes this into the next status ring entry.
6767  *
6768  * Each ring the host uses to post buffers to the chip is described
6769  * by a TG3_BDINFO entry in the chips SRAM area.  When a packet arrives,
6770  * it is first placed into the on-chip ram.  When the packet's length
6771  * is known, it walks down the TG3_BDINFO entries to select the ring.
6772  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
6773  * which is within the range of the new packet's length is chosen.
6774  *
6775  * The "separate ring for rx status" scheme may sound queer, but it makes
6776  * sense from a cache coherency perspective.  If only the host writes
6777  * to the buffer post rings, and only the chip writes to the rx status
6778  * rings, then cache lines never move beyond shared-modified state.
6779  * If both the host and chip were to write into the same ring, cache line
6780  * eviction could occur since both entities want it in an exclusive state.
6781  */
6782 static int tg3_rx(struct tg3_napi *tnapi, int budget)
6783 {
6784         struct tg3 *tp = tnapi->tp;
6785         u32 work_mask, rx_std_posted = 0;
6786         u32 std_prod_idx, jmb_prod_idx;
6787         u32 sw_idx = tnapi->rx_rcb_ptr;
6788         u16 hw_idx;
6789         int received;
6790         struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
6791
6792         hw_idx = *(tnapi->rx_rcb_prod_idx);
6793         /*
6794          * We need to order the read of hw_idx and the read of
6795          * the opaque cookie.
6796          */
6797         rmb();
6798         work_mask = 0;
6799         received = 0;
6800         std_prod_idx = tpr->rx_std_prod_idx;
6801         jmb_prod_idx = tpr->rx_jmb_prod_idx;
6802         while (sw_idx != hw_idx && budget > 0) {
6803                 struct ring_info *ri;
6804                 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
6805                 unsigned int len;
6806                 struct sk_buff *skb;
6807                 dma_addr_t dma_addr;
6808                 u32 opaque_key, desc_idx, *post_ptr;
6809                 u8 *data;
6810                 u64 tstamp = 0;
6811
6812                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
6813                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
6814                 if (opaque_key == RXD_OPAQUE_RING_STD) {
6815                         ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
6816                         dma_addr = dma_unmap_addr(ri, mapping);
6817                         data = ri->data;
6818                         post_ptr = &std_prod_idx;
6819                         rx_std_posted++;
6820                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
6821                         ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
6822                         dma_addr = dma_unmap_addr(ri, mapping);
6823                         data = ri->data;
6824                         post_ptr = &jmb_prod_idx;
6825                 } else
6826                         goto next_pkt_nopost;
6827
6828                 work_mask |= opaque_key;
6829
6830                 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
6831                     (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
6832                 drop_it:
6833                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6834                                        desc_idx, *post_ptr);
6835                 drop_it_no_recycle:
6836                         /* Other statistics kept track of by card. */
6837                         tp->rx_dropped++;
6838                         goto next_pkt;
6839                 }
6840
6841                 prefetch(data + TG3_RX_OFFSET(tp));
6842                 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
6843                       ETH_FCS_LEN;
6844
6845                 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6846                      RXD_FLAG_PTPSTAT_PTPV1 ||
6847                     (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) ==
6848                      RXD_FLAG_PTPSTAT_PTPV2) {
6849                         tstamp = tr32(TG3_RX_TSTAMP_LSB);
6850                         tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32;
6851                 }
6852
6853                 if (len > TG3_RX_COPY_THRESH(tp)) {
6854                         int skb_size;
6855                         unsigned int frag_size;
6856
6857                         skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
6858                                                     *post_ptr, &frag_size);
6859                         if (skb_size < 0)
6860                                 goto drop_it;
6861
6862                         pci_unmap_single(tp->pdev, dma_addr, skb_size,
6863                                          PCI_DMA_FROMDEVICE);
6864
6865                         /* Ensure that the update to the data happens
6866                          * after the usage of the old DMA mapping.
6867                          */
6868                         smp_wmb();
6869
6870                         ri->data = NULL;
6871
6872                         skb = build_skb(data, frag_size);
6873                         if (!skb) {
6874                                 tg3_frag_free(frag_size != 0, data);
6875                                 goto drop_it_no_recycle;
6876                         }
6877                         skb_reserve(skb, TG3_RX_OFFSET(tp));
6878                 } else {
6879                         tg3_recycle_rx(tnapi, tpr, opaque_key,
6880                                        desc_idx, *post_ptr);
6881
6882                         skb = netdev_alloc_skb(tp->dev,
6883                                                len + TG3_RAW_IP_ALIGN);
6884                         if (skb == NULL)
6885                                 goto drop_it_no_recycle;
6886
6887                         skb_reserve(skb, TG3_RAW_IP_ALIGN);
6888                         pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6889                         memcpy(skb->data,
6890                                data + TG3_RX_OFFSET(tp),
6891                                len);
6892                         pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
6893                 }
6894
6895                 skb_put(skb, len);
6896                 if (tstamp)
6897                         tg3_hwclock_to_timestamp(tp, tstamp,
6898                                                  skb_hwtstamps(skb));
6899
6900                 if ((tp->dev->features & NETIF_F_RXCSUM) &&
6901                     (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6902                     (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6903                       >> RXD_TCPCSUM_SHIFT) == 0xffff))
6904                         skb->ip_summed = CHECKSUM_UNNECESSARY;
6905                 else
6906                         skb_checksum_none_assert(skb);
6907
6908                 skb->protocol = eth_type_trans(skb, tp->dev);
6909
6910                 if (len > (tp->dev->mtu + ETH_HLEN) &&
6911                     skb->protocol != htons(ETH_P_8021Q)) {
6912                         dev_kfree_skb(skb);
6913                         goto drop_it_no_recycle;
6914                 }
6915
6916                 if (desc->type_flags & RXD_FLAG_VLAN &&
6917                     !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6918                         __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
6919                                                desc->err_vlan & RXD_VLAN_MASK);
6920
6921                 napi_gro_receive(&tnapi->napi, skb);
6922
6923                 received++;
6924                 budget--;
6925
6926 next_pkt:
6927                 (*post_ptr)++;
6928
6929                 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6930                         tpr->rx_std_prod_idx = std_prod_idx &
6931                                                tp->rx_std_ring_mask;
6932                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6933                                      tpr->rx_std_prod_idx);
6934                         work_mask &= ~RXD_OPAQUE_RING_STD;
6935                         rx_std_posted = 0;
6936                 }
6937 next_pkt_nopost:
6938                 sw_idx++;
6939                 sw_idx &= tp->rx_ret_ring_mask;
6940
6941                 /* Refresh hw_idx to see if there is new work */
6942                 if (sw_idx == hw_idx) {
6943                         hw_idx = *(tnapi->rx_rcb_prod_idx);
6944                         rmb();
6945                 }
6946         }
6947
6948         /* ACK the status ring. */
6949         tnapi->rx_rcb_ptr = sw_idx;
6950         tw32_rx_mbox(tnapi->consmbox, sw_idx);
6951
6952         /* Refill RX ring(s). */
6953         if (!tg3_flag(tp, ENABLE_RSS)) {
6954                 /* Sync BD data before updating mailbox */
6955                 wmb();
6956
6957                 if (work_mask & RXD_OPAQUE_RING_STD) {
6958                         tpr->rx_std_prod_idx = std_prod_idx &
6959                                                tp->rx_std_ring_mask;
6960                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
6961                                      tpr->rx_std_prod_idx);
6962                 }
6963                 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6964                         tpr->rx_jmb_prod_idx = jmb_prod_idx &
6965                                                tp->rx_jmb_ring_mask;
6966                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
6967                                      tpr->rx_jmb_prod_idx);
6968                 }
6969                 mmiowb();
6970         } else if (work_mask) {
6971                 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6972                  * updated before the producer indices can be updated.
6973                  */
6974                 smp_wmb();
6975
6976                 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6977                 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6978
6979                 if (tnapi != &tp->napi[1]) {
6980                         tp->rx_refill = true;
6981                         napi_schedule(&tp->napi[1].napi);
6982                 }
6983         }
6984
6985         return received;
6986 }
6987
6988 static void tg3_poll_link(struct tg3 *tp)
6989 {
6990         /* handle link change and other phy events */
6991         if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
6992                 struct tg3_hw_status *sblk = tp->napi[0].hw_status;
6993
6994                 if (sblk->status & SD_STATUS_LINK_CHG) {
6995                         sblk->status = SD_STATUS_UPDATED |
6996                                        (sblk->status & ~SD_STATUS_LINK_CHG);
6997                         spin_lock(&tp->lock);
6998                         if (tg3_flag(tp, USE_PHYLIB)) {
6999                                 tw32_f(MAC_STATUS,
7000                                      (MAC_STATUS_SYNC_CHANGED |
7001                                       MAC_STATUS_CFG_CHANGED |
7002                                       MAC_STATUS_MI_COMPLETION |
7003                                       MAC_STATUS_LNKSTATE_CHANGED));
7004                                 udelay(40);
7005                         } else
7006                                 tg3_setup_phy(tp, false);
7007                         spin_unlock(&tp->lock);
7008                 }
7009         }
7010 }
7011
7012 static int tg3_rx_prodring_xfer(struct tg3 *tp,
7013                                 struct tg3_rx_prodring_set *dpr,
7014                                 struct tg3_rx_prodring_set *spr)
7015 {
7016         u32 si, di, cpycnt, src_prod_idx;
7017         int i, err = 0;
7018
7019         while (1) {
7020                 src_prod_idx = spr->rx_std_prod_idx;
7021
7022                 /* Make sure updates to the rx_std_buffers[] entries and the
7023                  * standard producer index are seen in the correct order.
7024                  */
7025                 smp_rmb();
7026
7027                 if (spr->rx_std_cons_idx == src_prod_idx)
7028                         break;
7029
7030                 if (spr->rx_std_cons_idx < src_prod_idx)
7031                         cpycnt = src_prod_idx - spr->rx_std_cons_idx;
7032                 else
7033                         cpycnt = tp->rx_std_ring_mask + 1 -
7034                                  spr->rx_std_cons_idx;
7035
7036                 cpycnt = min(cpycnt,
7037                              tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
7038
7039                 si = spr->rx_std_cons_idx;
7040                 di = dpr->rx_std_prod_idx;
7041
7042                 for (i = di; i < di + cpycnt; i++) {
7043                         if (dpr->rx_std_buffers[i].data) {
7044                                 cpycnt = i - di;
7045                                 err = -ENOSPC;
7046                                 break;
7047                         }
7048                 }
7049
7050                 if (!cpycnt)
7051                         break;
7052
7053                 /* Ensure that updates to the rx_std_buffers ring and the
7054                  * shadowed hardware producer ring from tg3_recycle_skb() are
7055                  * ordered correctly WRT the skb check above.
7056                  */
7057                 smp_rmb();
7058
7059                 memcpy(&dpr->rx_std_buffers[di],
7060                        &spr->rx_std_buffers[si],
7061                        cpycnt * sizeof(struct ring_info));
7062
7063                 for (i = 0; i < cpycnt; i++, di++, si++) {
7064                         struct tg3_rx_buffer_desc *sbd, *dbd;
7065                         sbd = &spr->rx_std[si];
7066                         dbd = &dpr->rx_std[di];
7067                         dbd->addr_hi = sbd->addr_hi;
7068                         dbd->addr_lo = sbd->addr_lo;
7069                 }
7070
7071                 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
7072                                        tp->rx_std_ring_mask;
7073                 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
7074                                        tp->rx_std_ring_mask;
7075         }
7076
7077         while (1) {
7078                 src_prod_idx = spr->rx_jmb_prod_idx;
7079
7080                 /* Make sure updates to the rx_jmb_buffers[] entries and
7081                  * the jumbo producer index are seen in the correct order.
7082                  */
7083                 smp_rmb();
7084
7085                 if (spr->rx_jmb_cons_idx == src_prod_idx)
7086                         break;
7087
7088                 if (spr->rx_jmb_cons_idx < src_prod_idx)
7089                         cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
7090                 else
7091                         cpycnt = tp->rx_jmb_ring_mask + 1 -
7092                                  spr->rx_jmb_cons_idx;
7093
7094                 cpycnt = min(cpycnt,
7095                              tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
7096
7097                 si = spr->rx_jmb_cons_idx;
7098                 di = dpr->rx_jmb_prod_idx;
7099
7100                 for (i = di; i < di + cpycnt; i++) {
7101                         if (dpr->rx_jmb_buffers[i].data) {
7102                                 cpycnt = i - di;
7103                                 err = -ENOSPC;
7104                                 break;
7105                         }
7106                 }
7107
7108                 if (!cpycnt)
7109                         break;
7110
7111                 /* Ensure that updates to the rx_jmb_buffers ring and the
7112                  * shadowed hardware producer ring from tg3_recycle_skb() are
7113                  * ordered correctly WRT the skb check above.
7114                  */
7115                 smp_rmb();
7116
7117                 memcpy(&dpr->rx_jmb_buffers[di],
7118                        &spr->rx_jmb_buffers[si],
7119                        cpycnt * sizeof(struct ring_info));
7120
7121                 for (i = 0; i < cpycnt; i++, di++, si++) {
7122                         struct tg3_rx_buffer_desc *sbd, *dbd;
7123                         sbd = &spr->rx_jmb[si].std;
7124                         dbd = &dpr->rx_jmb[di].std;
7125                         dbd->addr_hi = sbd->addr_hi;
7126                         dbd->addr_lo = sbd->addr_lo;
7127                 }
7128
7129                 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
7130                                        tp->rx_jmb_ring_mask;
7131                 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
7132                                        tp->rx_jmb_ring_mask;
7133         }
7134
7135         return err;
7136 }
7137
7138 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
7139 {
7140         struct tg3 *tp = tnapi->tp;
7141
7142         /* run TX completion thread */
7143         if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
7144                 tg3_tx(tnapi);
7145                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7146                         return work_done;
7147         }
7148
7149         if (!tnapi->rx_rcb_prod_idx)
7150                 return work_done;
7151
7152         /* run RX thread, within the bounds set by NAPI.
7153          * All RX "locking" is done by ensuring outside
7154          * code synchronizes with tg3->napi.poll()
7155          */
7156         if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
7157                 work_done += tg3_rx(tnapi, budget - work_done);
7158
7159         if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
7160                 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
7161                 int i, err = 0;
7162                 u32 std_prod_idx = dpr->rx_std_prod_idx;
7163                 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
7164
7165                 tp->rx_refill = false;
7166                 for (i = 1; i <= tp->rxq_cnt; i++)
7167                         err |= tg3_rx_prodring_xfer(tp, dpr,
7168                                                     &tp->napi[i].prodring);
7169
7170                 wmb();
7171
7172                 if (std_prod_idx != dpr->rx_std_prod_idx)
7173                         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
7174                                      dpr->rx_std_prod_idx);
7175
7176                 if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
7177                         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG,
7178                                      dpr->rx_jmb_prod_idx);
7179
7180                 mmiowb();
7181
7182                 if (err)
7183                         tw32_f(HOSTCC_MODE, tp->coal_now);
7184         }
7185
7186         return work_done;
7187 }
7188
7189 static inline void tg3_reset_task_schedule(struct tg3 *tp)
7190 {
7191         if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
7192                 schedule_work(&tp->reset_task);
7193 }
7194
7195 static inline void tg3_reset_task_cancel(struct tg3 *tp)
7196 {
7197         cancel_work_sync(&tp->reset_task);
7198         tg3_flag_clear(tp, RESET_TASK_PENDING);
7199         tg3_flag_clear(tp, TX_RECOVERY_PENDING);
7200 }
7201
7202 static int tg3_poll_msix(struct napi_struct *napi, int budget)
7203 {
7204         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7205         struct tg3 *tp = tnapi->tp;
7206         int work_done = 0;
7207         struct tg3_hw_status *sblk = tnapi->hw_status;
7208
7209         while (1) {
7210                 work_done = tg3_poll_work(tnapi, work_done, budget);
7211
7212                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7213                         goto tx_recovery;
7214
7215                 if (unlikely(work_done >= budget))
7216                         break;
7217
7218                 /* tp->last_tag is used in tg3_int_reenable() below
7219                  * to tell the hw how much work has been processed,
7220                  * so we must read it before checking for more work.
7221                  */
7222                 tnapi->last_tag = sblk->status_tag;
7223                 tnapi->last_irq_tag = tnapi->last_tag;
7224                 rmb();
7225
7226                 /* check for RX/TX work to do */
7227                 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
7228                            *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
7229
7230                         /* This test here is not race free, but will reduce
7231                          * the number of interrupts by looping again.
7232                          */
7233                         if (tnapi == &tp->napi[1] && tp->rx_refill)
7234                                 continue;
7235
7236                         napi_complete(napi);
7237                         /* Reenable interrupts. */
7238                         tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
7239
7240                         /* This test here is synchronized by napi_schedule()
7241                          * and napi_complete() to close the race condition.
7242                          */
7243                         if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
7244                                 tw32(HOSTCC_MODE, tp->coalesce_mode |
7245                                                   HOSTCC_MODE_ENABLE |
7246                                                   tnapi->coal_now);
7247                         }
7248                         mmiowb();
7249                         break;
7250                 }
7251         }
7252
7253         return work_done;
7254
7255 tx_recovery:
7256         /* work_done is guaranteed to be less than budget. */
7257         napi_complete(napi);
7258         tg3_reset_task_schedule(tp);
7259         return work_done;
7260 }
7261
7262 static void tg3_process_error(struct tg3 *tp)
7263 {
7264         u32 val;
7265         bool real_error = false;
7266
7267         if (tg3_flag(tp, ERROR_PROCESSED))
7268                 return;
7269
7270         /* Check Flow Attention register */
7271         val = tr32(HOSTCC_FLOW_ATTN);
7272         if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
7273                 netdev_err(tp->dev, "FLOW Attention error.  Resetting chip.\n");
7274                 real_error = true;
7275         }
7276
7277         if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) {
7278                 netdev_err(tp->dev, "MSI Status error.  Resetting chip.\n");
7279                 real_error = true;
7280         }
7281
7282         if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
7283                 netdev_err(tp->dev, "DMA Status error.  Resetting chip.\n");
7284                 real_error = true;
7285         }
7286
7287         if (!real_error)
7288                 return;
7289
7290         tg3_dump_state(tp);
7291
7292         tg3_flag_set(tp, ERROR_PROCESSED);
7293         tg3_reset_task_schedule(tp);
7294 }
7295
7296 static int tg3_poll(struct napi_struct *napi, int budget)
7297 {
7298         struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
7299         struct tg3 *tp = tnapi->tp;
7300         int work_done = 0;
7301         struct tg3_hw_status *sblk = tnapi->hw_status;
7302
7303         while (1) {
7304                 if (sblk->status & SD_STATUS_ERROR)
7305                         tg3_process_error(tp);
7306
7307                 tg3_poll_link(tp);
7308
7309                 work_done = tg3_poll_work(tnapi, work_done, budget);
7310
7311                 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
7312                         goto tx_recovery;
7313
7314                 if (unlikely(work_done >= budget))
7315                         break;
7316
7317                 if (tg3_flag(tp, TAGGED_STATUS)) {
7318                         /* tp->last_tag is used in tg3_int_reenable() below
7319                          * to tell the hw how much work has been processed,
7320                          * so we must read it before checking for more work.
7321                          */
7322                         tnapi->last_tag = sblk->status_tag;
7323                         tnapi->last_irq_tag = tnapi->last_tag;
7324                         rmb();
7325                 } else
7326                         sblk->status &= ~SD_STATUS_UPDATED;
7327
7328                 if (likely(!tg3_has_work(tnapi))) {
7329                         napi_complete(napi);
7330                         tg3_int_reenable(tnapi);
7331                         break;
7332                 }
7333         }
7334
7335         return work_done;
7336
7337 tx_recovery:
7338         /* work_done is guaranteed to be less than budget. */
7339         napi_complete(napi);
7340         tg3_reset_task_schedule(tp);
7341         return work_done;
7342 }
7343
7344 static void tg3_napi_disable(struct tg3 *tp)
7345 {
7346         int i;
7347
7348         for (i = tp->irq_cnt - 1; i >= 0; i--)
7349                 napi_disable(&tp->napi[i].napi);
7350 }
7351
7352 static void tg3_napi_enable(struct tg3 *tp)
7353 {
7354         int i;
7355
7356         for (i = 0; i < tp->irq_cnt; i++)
7357                 napi_enable(&tp->napi[i].napi);
7358 }
7359
7360 static void tg3_napi_init(struct tg3 *tp)
7361 {
7362         int i;
7363
7364         netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
7365         for (i = 1; i < tp->irq_cnt; i++)
7366                 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
7367 }
7368
7369 static void tg3_napi_fini(struct tg3 *tp)
7370 {
7371         int i;
7372
7373         for (i = 0; i < tp->irq_cnt; i++)
7374                 netif_napi_del(&tp->napi[i].napi);
7375 }
7376
7377 static inline void tg3_netif_stop(struct tg3 *tp)
7378 {
7379         tp->dev->trans_start = jiffies; /* prevent tx timeout */
7380         tg3_napi_disable(tp);
7381         netif_carrier_off(tp->dev);
7382         netif_tx_disable(tp->dev);
7383 }
7384
7385 /* tp->lock must be held */
7386 static inline void tg3_netif_start(struct tg3 *tp)
7387 {
7388         tg3_ptp_resume(tp);
7389
7390         /* NOTE: unconditional netif_tx_wake_all_queues is only
7391          * appropriate so long as all callers are assured to
7392          * have free tx slots (such as after tg3_init_hw)
7393          */
7394         netif_tx_wake_all_queues(tp->dev);
7395
7396         if (tp->link_up)
7397                 netif_carrier_on(tp->dev);
7398
7399         tg3_napi_enable(tp);
7400         tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
7401         tg3_enable_ints(tp);
7402 }
7403
7404 static void tg3_irq_quiesce(struct tg3 *tp)
7405 {
7406         int i;
7407
7408         BUG_ON(tp->irq_sync);
7409
7410         tp->irq_sync = 1;
7411         smp_mb();
7412
7413         for (i = 0; i < tp->irq_cnt; i++)
7414                 synchronize_irq(tp->napi[i].irq_vec);
7415 }
7416
7417 /* Fully shutdown all tg3 driver activity elsewhere in the system.
7418  * If irq_sync is non-zero, then the IRQ handler must be synchronized
7419  * with as well.  Most of the time, this is not necessary except when
7420  * shutting down the device.
7421  */
7422 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
7423 {
7424         spin_lock_bh(&tp->lock);
7425         if (irq_sync)
7426                 tg3_irq_quiesce(tp);
7427 }
7428
7429 static inline void tg3_full_unlock(struct tg3 *tp)
7430 {
7431         spin_unlock_bh(&tp->lock);
7432 }
7433
7434 /* One-shot MSI handler - Chip automatically disables interrupt
7435  * after sending MSI so driver doesn't have to do it.
7436  */
7437 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
7438 {
7439         struct tg3_napi *tnapi = dev_id;
7440         struct tg3 *tp = tnapi->tp;
7441
7442         prefetch(tnapi->hw_status);
7443         if (tnapi->rx_rcb)
7444                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7445
7446         if (likely(!tg3_irq_sync(tp)))
7447                 napi_schedule(&tnapi->napi);
7448
7449         return IRQ_HANDLED;
7450 }
7451
7452 /* MSI ISR - No need to check for interrupt sharing and no need to
7453  * flush status block and interrupt mailbox. PCI ordering rules
7454  * guarantee that MSI will arrive after the status block.
7455  */
7456 static irqreturn_t tg3_msi(int irq, void *dev_id)
7457 {
7458         struct tg3_napi *tnapi = dev_id;
7459         struct tg3 *tp = tnapi->tp;
7460
7461         prefetch(tnapi->hw_status);
7462         if (tnapi->rx_rcb)
7463                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7464         /*
7465          * Writing any value to intr-mbox-0 clears PCI INTA# and
7466          * chip-internal interrupt pending events.
7467          * Writing non-zero to intr-mbox-0 additional tells the
7468          * NIC to stop sending us irqs, engaging "in-intr-handler"
7469          * event coalescing.
7470          */
7471         tw32_mailbox(tnapi->int_mbox, 0x00000001);
7472         if (likely(!tg3_irq_sync(tp)))
7473                 napi_schedule(&tnapi->napi);
7474
7475         return IRQ_RETVAL(1);
7476 }
7477
7478 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
7479 {
7480         struct tg3_napi *tnapi = dev_id;
7481         struct tg3 *tp = tnapi->tp;
7482         struct tg3_hw_status *sblk = tnapi->hw_status;
7483         unsigned int handled = 1;
7484
7485         /* In INTx mode, it is possible for the interrupt to arrive at
7486          * the CPU before the status block posted prior to the interrupt.
7487          * Reading the PCI State register will confirm whether the
7488          * interrupt is ours and will flush the status block.
7489          */
7490         if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
7491                 if (tg3_flag(tp, CHIP_RESETTING) ||
7492                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7493                         handled = 0;
7494                         goto out;
7495                 }
7496         }
7497
7498         /*
7499          * Writing any value to intr-mbox-0 clears PCI INTA# and
7500          * chip-internal interrupt pending events.
7501          * Writing non-zero to intr-mbox-0 additional tells the
7502          * NIC to stop sending us irqs, engaging "in-intr-handler"
7503          * event coalescing.
7504          *
7505          * Flush the mailbox to de-assert the IRQ immediately to prevent
7506          * spurious interrupts.  The flush impacts performance but
7507          * excessive spurious interrupts can be worse in some cases.
7508          */
7509         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7510         if (tg3_irq_sync(tp))
7511                 goto out;
7512         sblk->status &= ~SD_STATUS_UPDATED;
7513         if (likely(tg3_has_work(tnapi))) {
7514                 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7515                 napi_schedule(&tnapi->napi);
7516         } else {
7517                 /* No work, shared interrupt perhaps?  re-enable
7518                  * interrupts, and flush that PCI write
7519                  */
7520                 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
7521                                0x00000000);
7522         }
7523 out:
7524         return IRQ_RETVAL(handled);
7525 }
7526
7527 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
7528 {
7529         struct tg3_napi *tnapi = dev_id;
7530         struct tg3 *tp = tnapi->tp;
7531         struct tg3_hw_status *sblk = tnapi->hw_status;
7532         unsigned int handled = 1;
7533
7534         /* In INTx mode, it is possible for the interrupt to arrive at
7535          * the CPU before the status block posted prior to the interrupt.
7536          * Reading the PCI State register will confirm whether the
7537          * interrupt is ours and will flush the status block.
7538          */
7539         if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
7540                 if (tg3_flag(tp, CHIP_RESETTING) ||
7541                     (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7542                         handled = 0;
7543                         goto out;
7544                 }
7545         }
7546
7547         /*
7548          * writing any value to intr-mbox-0 clears PCI INTA# and
7549          * chip-internal interrupt pending events.
7550          * writing non-zero to intr-mbox-0 additional tells the
7551          * NIC to stop sending us irqs, engaging "in-intr-handler"
7552          * event coalescing.
7553          *
7554          * Flush the mailbox to de-assert the IRQ immediately to prevent
7555          * spurious interrupts.  The flush impacts performance but
7556          * excessive spurious interrupts can be worse in some cases.
7557          */
7558         tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
7559
7560         /*
7561          * In a shared interrupt configuration, sometimes other devices'
7562          * interrupts will scream.  We record the current status tag here
7563          * so that the above check can report that the screaming interrupts
7564          * are unhandled.  Eventually they will be silenced.
7565          */
7566         tnapi->last_irq_tag = sblk->status_tag;
7567
7568         if (tg3_irq_sync(tp))
7569                 goto out;
7570
7571         prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
7572
7573         napi_schedule(&tnapi->napi);
7574
7575 out:
7576         return IRQ_RETVAL(handled);
7577 }
7578
7579 /* ISR for interrupt test */
7580 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
7581 {
7582         struct tg3_napi *tnapi = dev_id;
7583         struct tg3 *tp = tnapi->tp;
7584         struct tg3_hw_status *sblk = tnapi->hw_status;
7585
7586         if ((sblk->status & SD_STATUS_UPDATED) ||
7587             !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7588                 tg3_disable_ints(tp);
7589                 return IRQ_RETVAL(1);
7590         }
7591         return IRQ_RETVAL(0);
7592 }
7593
7594 #ifdef CONFIG_NET_POLL_CONTROLLER
7595 static void tg3_poll_controller(struct net_device *dev)
7596 {
7597         int i;
7598         struct tg3 *tp = netdev_priv(dev);
7599
7600         if (tg3_irq_sync(tp))
7601                 return;
7602
7603         for (i = 0; i < tp->irq_cnt; i++)
7604                 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
7605 }
7606 #endif
7607
7608 static void tg3_tx_timeout(struct net_device *dev)
7609 {
7610         struct tg3 *tp = netdev_priv(dev);
7611
7612         if (netif_msg_tx_err(tp)) {
7613                 netdev_err(dev, "transmit timed out, resetting\n");
7614                 tg3_dump_state(tp);
7615         }
7616
7617         tg3_reset_task_schedule(tp);
7618 }
7619
7620 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
7621 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
7622 {
7623         u32 base = (u32) mapping & 0xffffffff;
7624
7625         return (base > 0xffffdcc0) && (base + len + 8 < base);
7626 }
7627
7628 /* Test for TSO DMA buffers that cross into regions which are within MSS bytes
7629  * of any 4GB boundaries: 4G, 8G, etc
7630  */
7631 static inline int tg3_4g_tso_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7632                                            u32 len, u32 mss)
7633 {
7634         if (tg3_asic_rev(tp) == ASIC_REV_5762 && mss) {
7635                 u32 base = (u32) mapping & 0xffffffff;
7636
7637                 return ((base + len + (mss & 0x3fff)) < base);
7638         }
7639         return 0;
7640 }
7641
7642 /* Test for DMA addresses > 40-bit */
7643 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
7644                                           int len)
7645 {
7646 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
7647         if (tg3_flag(tp, 40BIT_DMA_BUG))
7648                 return ((u64) mapping + len) > DMA_BIT_MASK(40);
7649         return 0;
7650 #else
7651         return 0;
7652 #endif
7653 }
7654
7655 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
7656                                  dma_addr_t mapping, u32 len, u32 flags,
7657                                  u32 mss, u32 vlan)
7658 {
7659         txbd->addr_hi = ((u64) mapping >> 32);
7660         txbd->addr_lo = ((u64) mapping & 0xffffffff);
7661         txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
7662         txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
7663 }
7664
7665 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
7666                             dma_addr_t map, u32 len, u32 flags,
7667                             u32 mss, u32 vlan)
7668 {
7669         struct tg3 *tp = tnapi->tp;
7670         bool hwbug = false;
7671
7672         if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
7673                 hwbug = true;
7674
7675         if (tg3_4g_overflow_test(map, len))
7676                 hwbug = true;
7677
7678         if (tg3_4g_tso_overflow_test(tp, map, len, mss))
7679                 hwbug = true;
7680
7681         if (tg3_40bit_overflow_test(tp, map, len))
7682                 hwbug = true;
7683
7684         if (tp->dma_limit) {
7685                 u32 prvidx = *entry;
7686                 u32 tmp_flag = flags & ~TXD_FLAG_END;
7687                 while (len > tp->dma_limit && *budget) {
7688                         u32 frag_len = tp->dma_limit;
7689                         len -= tp->dma_limit;
7690
7691                         /* Avoid the 8byte DMA problem */
7692                         if (len <= 8) {
7693                                 len += tp->dma_limit / 2;
7694                                 frag_len = tp->dma_limit / 2;
7695                         }
7696
7697                         tnapi->tx_buffers[*entry].fragmented = true;
7698
7699                         tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7700                                       frag_len, tmp_flag, mss, vlan);
7701                         *budget -= 1;
7702                         prvidx = *entry;
7703                         *entry = NEXT_TX(*entry);
7704
7705                         map += frag_len;
7706                 }
7707
7708                 if (len) {
7709                         if (*budget) {
7710                                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7711                                               len, flags, mss, vlan);
7712                                 *budget -= 1;
7713                                 *entry = NEXT_TX(*entry);
7714                         } else {
7715                                 hwbug = true;
7716                                 tnapi->tx_buffers[prvidx].fragmented = false;
7717                         }
7718                 }
7719         } else {
7720                 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
7721                               len, flags, mss, vlan);
7722                 *entry = NEXT_TX(*entry);
7723         }
7724
7725         return hwbug;
7726 }
7727
7728 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
7729 {
7730         int i;
7731         struct sk_buff *skb;
7732         struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
7733
7734         skb = txb->skb;
7735         txb->skb = NULL;
7736
7737         pci_unmap_single(tnapi->tp->pdev,
7738                          dma_unmap_addr(txb, mapping),
7739                          skb_headlen(skb),
7740                          PCI_DMA_TODEVICE);
7741
7742         while (txb->fragmented) {
7743                 txb->fragmented = false;
7744                 entry = NEXT_TX(entry);
7745                 txb = &tnapi->tx_buffers[entry];
7746         }
7747
7748         for (i = 0; i <= last; i++) {
7749                 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7750
7751                 entry = NEXT_TX(entry);
7752                 txb = &tnapi->tx_buffers[entry];
7753
7754                 pci_unmap_page(tnapi->tp->pdev,
7755                                dma_unmap_addr(txb, mapping),
7756                                skb_frag_size(frag), PCI_DMA_TODEVICE);
7757
7758                 while (txb->fragmented) {
7759                         txb->fragmented = false;
7760                         entry = NEXT_TX(entry);
7761                         txb = &tnapi->tx_buffers[entry];
7762                 }
7763         }
7764 }
7765
7766 /* Workaround 4GB and 40-bit hardware DMA bugs. */
7767 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
7768                                        struct sk_buff **pskb,
7769                                        u32 *entry, u32 *budget,
7770                                        u32 base_flags, u32 mss, u32 vlan)
7771 {
7772         struct tg3 *tp = tnapi->tp;
7773         struct sk_buff *new_skb, *skb = *pskb;
7774         dma_addr_t new_addr = 0;
7775         int ret = 0;
7776
7777         if (tg3_asic_rev(tp) != ASIC_REV_5701)
7778                 new_skb = skb_copy(skb, GFP_ATOMIC);
7779         else {
7780                 int more_headroom = 4 - ((unsigned long)skb->data & 3);
7781
7782                 new_skb = skb_copy_expand(skb,
7783                                           skb_headroom(skb) + more_headroom,
7784                                           skb_tailroom(skb), GFP_ATOMIC);
7785         }
7786
7787         if (!new_skb) {
7788                 ret = -1;
7789         } else {
7790                 /* New SKB is guaranteed to be linear. */
7791                 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
7792                                           PCI_DMA_TODEVICE);
7793                 /* Make sure the mapping succeeded */
7794                 if (pci_dma_mapping_error(tp->pdev, new_addr)) {
7795                         dev_kfree_skb(new_skb);
7796                         ret = -1;
7797                 } else {
7798                         u32 save_entry = *entry;
7799
7800                         base_flags |= TXD_FLAG_END;
7801
7802                         tnapi->tx_buffers[*entry].skb = new_skb;
7803                         dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
7804                                            mapping, new_addr);
7805
7806                         if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
7807                                             new_skb->len, base_flags,
7808                                             mss, vlan)) {
7809                                 tg3_tx_skb_unmap(tnapi, save_entry, -1);
7810                                 dev_kfree_skb(new_skb);
7811                                 ret = -1;
7812                         }
7813                 }
7814         }
7815
7816         dev_kfree_skb(skb);
7817         *pskb = new_skb;
7818         return ret;
7819 }
7820
7821 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
7822
7823 /* Use GSO to workaround a rare TSO bug that may be triggered when the
7824  * TSO header is greater than 80 bytes.
7825  */
7826 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
7827 {
7828         struct sk_buff *segs, *nskb;
7829         u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
7830
7831         /* Estimate the number of fragments in the worst case */
7832         if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) {
7833                 netif_stop_queue(tp->dev);
7834
7835                 /* netif_tx_stop_queue() must be done before checking
7836                  * checking tx index in tg3_tx_avail() below, because in
7837                  * tg3_tx(), we update tx index before checking for
7838                  * netif_tx_queue_stopped().
7839                  */
7840                 smp_mb();
7841                 if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)
7842                         return NETDEV_TX_BUSY;
7843
7844                 netif_wake_queue(tp->dev);
7845         }
7846
7847         segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
7848         if (IS_ERR(segs))
7849                 goto tg3_tso_bug_end;
7850
7851         do {
7852                 nskb = segs;
7853                 segs = segs->next;
7854                 nskb->next = NULL;
7855                 tg3_start_xmit(nskb, tp->dev);
7856         } while (segs);
7857
7858 tg3_tso_bug_end:
7859         dev_kfree_skb(skb);
7860
7861         return NETDEV_TX_OK;
7862 }
7863
7864 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
7865  * support TG3_FLAG_HW_TSO_1 or firmware TSO only.
7866  */
7867 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
7868 {
7869         struct tg3 *tp = netdev_priv(dev);
7870         u32 len, entry, base_flags, mss, vlan = 0;
7871         u32 budget;
7872         int i = -1, would_hit_hwbug;
7873         dma_addr_t mapping;
7874         struct tg3_napi *tnapi;
7875         struct netdev_queue *txq;
7876         unsigned int last;
7877
7878         txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
7879         tnapi = &tp->napi[skb_get_queue_mapping(skb)];
7880         if (tg3_flag(tp, ENABLE_TSS))
7881                 tnapi++;
7882
7883         budget = tg3_tx_avail(tnapi);
7884
7885         /* We are running in BH disabled context with netif_tx_lock
7886          * and TX reclaim runs via tp->napi.poll inside of a software
7887          * interrupt.  Furthermore, IRQ processing runs lockless so we have
7888          * no IRQ context deadlocks to worry about either.  Rejoice!
7889          */
7890         if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
7891                 if (!netif_tx_queue_stopped(txq)) {
7892                         netif_tx_stop_queue(txq);
7893
7894                         /* This is a hard error, log it. */
7895                         netdev_err(dev,
7896                                    "BUG! Tx Ring full when queue awake!\n");
7897                 }
7898                 return NETDEV_TX_BUSY;
7899         }
7900
7901         entry = tnapi->tx_prod;
7902         base_flags = 0;
7903         if (skb->ip_summed == CHECKSUM_PARTIAL)
7904                 base_flags |= TXD_FLAG_TCPUDP_CSUM;
7905
7906         mss = skb_shinfo(skb)->gso_size;
7907         if (mss) {
7908                 struct iphdr *iph;
7909                 u32 tcp_opt_len, hdr_len;
7910
7911                 if (skb_header_cloned(skb) &&
7912                     pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
7913                         goto drop;
7914
7915                 iph = ip_hdr(skb);
7916                 tcp_opt_len = tcp_optlen(skb);
7917
7918                 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
7919
7920                 if (!skb_is_gso_v6(skb)) {
7921                         iph->check = 0;
7922                         iph->tot_len = htons(mss + hdr_len);
7923                 }
7924
7925                 if (unlikely((ETH_HLEN + hdr_len) > 80) &&
7926                     tg3_flag(tp, TSO_BUG))
7927                         return tg3_tso_bug(tp, skb);
7928
7929                 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7930                                TXD_FLAG_CPU_POST_DMA);
7931
7932                 if (tg3_flag(tp, HW_TSO_1) ||
7933                     tg3_flag(tp, HW_TSO_2) ||
7934                     tg3_flag(tp, HW_TSO_3)) {
7935                         tcp_hdr(skb)->check = 0;
7936                         base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7937                 } else
7938                         tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
7939                                                                  iph->daddr, 0,
7940                                                                  IPPROTO_TCP,
7941                                                                  0);
7942
7943                 if (tg3_flag(tp, HW_TSO_3)) {
7944                         mss |= (hdr_len & 0xc) << 12;
7945                         if (hdr_len & 0x10)
7946                                 base_flags |= 0x00000010;
7947                         base_flags |= (hdr_len & 0x3e0) << 5;
7948                 } else if (tg3_flag(tp, HW_TSO_2))
7949                         mss |= hdr_len << 9;
7950                 else if (tg3_flag(tp, HW_TSO_1) ||
7951                          tg3_asic_rev(tp) == ASIC_REV_5705) {
7952                         if (tcp_opt_len || iph->ihl > 5) {
7953                                 int tsflags;
7954
7955                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7956                                 mss |= (tsflags << 11);
7957                         }
7958                 } else {
7959                         if (tcp_opt_len || iph->ihl > 5) {
7960                                 int tsflags;
7961
7962                                 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7963                                 base_flags |= tsflags << 12;
7964                         }
7965                 }
7966         }
7967
7968         if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
7969             !mss && skb->len > VLAN_ETH_FRAME_LEN)
7970                 base_flags |= TXD_FLAG_JMB_PKT;
7971
7972         if (vlan_tx_tag_present(skb)) {
7973                 base_flags |= TXD_FLAG_VLAN;
7974                 vlan = vlan_tx_tag_get(skb);
7975         }
7976
7977         if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) &&
7978             tg3_flag(tp, TX_TSTAMP_EN)) {
7979                 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
7980                 base_flags |= TXD_FLAG_HWTSTAMP;
7981         }
7982
7983         len = skb_headlen(skb);
7984
7985         mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
7986         if (pci_dma_mapping_error(tp->pdev, mapping))
7987                 goto drop;
7988
7989
7990         tnapi->tx_buffers[entry].skb = skb;
7991         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
7992
7993         would_hit_hwbug = 0;
7994
7995         if (tg3_flag(tp, 5701_DMA_BUG))
7996                 would_hit_hwbug = 1;
7997
7998         if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
7999                           ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
8000                             mss, vlan)) {
8001                 would_hit_hwbug = 1;
8002         } else if (skb_shinfo(skb)->nr_frags > 0) {
8003                 u32 tmp_mss = mss;
8004
8005                 if (!tg3_flag(tp, HW_TSO_1) &&
8006                     !tg3_flag(tp, HW_TSO_2) &&
8007                     !tg3_flag(tp, HW_TSO_3))
8008                         tmp_mss = 0;
8009
8010                 /* Now loop through additional data
8011                  * fragments, and queue them.
8012                  */
8013                 last = skb_shinfo(skb)->nr_frags - 1;
8014                 for (i = 0; i <= last; i++) {
8015                         skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
8016
8017                         len = skb_frag_size(frag);
8018                         mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
8019                                                    len, DMA_TO_DEVICE);
8020
8021                         tnapi->tx_buffers[entry].skb = NULL;
8022                         dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
8023                                            mapping);
8024                         if (dma_mapping_error(&tp->pdev->dev, mapping))
8025                                 goto dma_error;
8026
8027                         if (!budget ||
8028                             tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
8029                                             len, base_flags |
8030                                             ((i == last) ? TXD_FLAG_END : 0),
8031                                             tmp_mss, vlan)) {
8032                                 would_hit_hwbug = 1;
8033                                 break;
8034                         }
8035                 }
8036         }
8037
8038         if (would_hit_hwbug) {
8039                 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
8040
8041                 /* If the workaround fails due to memory/mapping
8042                  * failure, silently drop this packet.
8043                  */
8044                 entry = tnapi->tx_prod;
8045                 budget = tg3_tx_avail(tnapi);
8046                 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
8047                                                 base_flags, mss, vlan))
8048                         goto drop_nofree;
8049         }
8050
8051         skb_tx_timestamp(skb);
8052         netdev_tx_sent_queue(txq, skb->len);
8053
8054         /* Sync BD data before updating mailbox */
8055         wmb();
8056
8057         /* Packets are ready, update Tx producer idx local and on card. */
8058         tw32_tx_mbox(tnapi->prodmbox, entry);
8059
8060         tnapi->tx_prod = entry;
8061         if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
8062                 netif_tx_stop_queue(txq);
8063
8064                 /* netif_tx_stop_queue() must be done before checking
8065                  * checking tx index in tg3_tx_avail() below, because in
8066                  * tg3_tx(), we update tx index before checking for
8067                  * netif_tx_queue_stopped().
8068                  */
8069                 smp_mb();
8070                 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
8071                         netif_tx_wake_queue(txq);
8072         }
8073
8074         mmiowb();
8075         return NETDEV_TX_OK;
8076
8077 dma_error:
8078         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
8079         tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
8080 drop:
8081         dev_kfree_skb(skb);
8082 drop_nofree:
8083         tp->tx_dropped++;
8084         return NETDEV_TX_OK;
8085 }
8086
8087 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
8088 {
8089         if (enable) {
8090                 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
8091                                   MAC_MODE_PORT_MODE_MASK);
8092
8093                 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK;
8094
8095                 if (!tg3_flag(tp, 5705_PLUS))
8096                         tp->mac_mode |= MAC_MODE_LINK_POLARITY;
8097
8098                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
8099                         tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
8100                 else
8101                         tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
8102         } else {
8103                 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK;
8104
8105                 if (tg3_flag(tp, 5705_PLUS) ||
8106                     (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
8107                     tg3_asic_rev(tp) == ASIC_REV_5700)
8108                         tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
8109         }
8110
8111         tw32(MAC_MODE, tp->mac_mode);
8112         udelay(40);
8113 }
8114
8115 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
8116 {
8117         u32 val, bmcr, mac_mode, ptest = 0;
8118
8119         tg3_phy_toggle_apd(tp, false);
8120         tg3_phy_toggle_automdix(tp, false);
8121
8122         if (extlpbk && tg3_phy_set_extloopbk(tp))
8123                 return -EIO;
8124
8125         bmcr = BMCR_FULLDPLX;
8126         switch (speed) {
8127         case SPEED_10:
8128                 break;
8129         case SPEED_100:
8130                 bmcr |= BMCR_SPEED100;
8131                 break;
8132         case SPEED_1000:
8133         default:
8134                 if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
8135                         speed = SPEED_100;
8136                         bmcr |= BMCR_SPEED100;
8137                 } else {
8138                         speed = SPEED_1000;
8139                         bmcr |= BMCR_SPEED1000;
8140                 }
8141         }
8142
8143         if (extlpbk) {
8144                 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
8145                         tg3_readphy(tp, MII_CTRL1000, &val);
8146                         val |= CTL1000_AS_MASTER |
8147                                CTL1000_ENABLE_MASTER;
8148                         tg3_writephy(tp, MII_CTRL1000, val);
8149                 } else {
8150                         ptest = MII_TG3_FET_PTEST_TRIM_SEL |
8151                                 MII_TG3_FET_PTEST_TRIM_2;
8152                         tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
8153                 }
8154         } else
8155                 bmcr |= BMCR_LOOPBACK;
8156
8157         tg3_writephy(tp, MII_BMCR, bmcr);
8158
8159         /* The write needs to be flushed for the FETs */
8160         if (tp->phy_flags & TG3_PHYFLG_IS_FET)
8161                 tg3_readphy(tp, MII_BMCR, &bmcr);
8162
8163         udelay(40);
8164
8165         if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
8166             tg3_asic_rev(tp) == ASIC_REV_5785) {
8167                 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
8168                              MII_TG3_FET_PTEST_FRC_TX_LINK |
8169                              MII_TG3_FET_PTEST_FRC_TX_LOCK);
8170
8171                 /* The write needs to be flushed for the AC131 */
8172                 tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
8173         }
8174
8175         /* Reset to prevent losing 1st rx packet intermittently */
8176         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
8177             tg3_flag(tp, 5780_CLASS)) {
8178                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8179                 udelay(10);
8180                 tw32_f(MAC_RX_MODE, tp->rx_mode);
8181         }
8182
8183         mac_mode = tp->mac_mode &
8184                    ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
8185         if (speed == SPEED_1000)
8186                 mac_mode |= MAC_MODE_PORT_MODE_GMII;
8187         else
8188                 mac_mode |= MAC_MODE_PORT_MODE_MII;
8189
8190         if (tg3_asic_rev(tp) == ASIC_REV_5700) {
8191                 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
8192
8193                 if (masked_phy_id == TG3_PHY_ID_BCM5401)
8194                         mac_mode &= ~MAC_MODE_LINK_POLARITY;
8195                 else if (masked_phy_id == TG3_PHY_ID_BCM5411)
8196                         mac_mode |= MAC_MODE_LINK_POLARITY;
8197
8198                 tg3_writephy(tp, MII_TG3_EXT_CTRL,
8199                              MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8200         }
8201
8202         tw32(MAC_MODE, mac_mode);
8203         udelay(40);
8204
8205         return 0;
8206 }
8207
8208 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
8209 {
8210         struct tg3 *tp = netdev_priv(dev);
8211
8212         if (features & NETIF_F_LOOPBACK) {
8213                 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)
8214                         return;
8215
8216                 spin_lock_bh(&tp->lock);
8217                 tg3_mac_loopback(tp, true);
8218                 netif_carrier_on(tp->dev);
8219                 spin_unlock_bh(&tp->lock);
8220                 netdev_info(dev, "Internal MAC loopback mode enabled.\n");
8221         } else {
8222                 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
8223                         return;
8224
8225                 spin_lock_bh(&tp->lock);
8226                 tg3_mac_loopback(tp, false);
8227                 /* Force link status check */
8228                 tg3_setup_phy(tp, true);
8229                 spin_unlock_bh(&tp->lock);
8230                 netdev_info(dev, "Internal MAC loopback mode disabled.\n");
8231         }
8232 }
8233
8234 static netdev_features_t tg3_fix_features(struct net_device *dev,
8235         netdev_features_t features)
8236 {
8237         struct tg3 *tp = netdev_priv(dev);
8238
8239         if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
8240                 features &= ~NETIF_F_ALL_TSO;
8241
8242         return features;
8243 }
8244
8245 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
8246 {
8247         netdev_features_t changed = dev->features ^ features;
8248
8249         if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
8250                 tg3_set_loopback(dev, features);
8251
8252         return 0;
8253 }
8254
8255 static void tg3_rx_prodring_free(struct tg3 *tp,
8256                                  struct tg3_rx_prodring_set *tpr)
8257 {
8258         int i;
8259
8260         if (tpr != &tp->napi[0].prodring) {
8261                 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
8262                      i = (i + 1) & tp->rx_std_ring_mask)
8263                         tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8264                                         tp->rx_pkt_map_sz);
8265
8266                 if (tg3_flag(tp, JUMBO_CAPABLE)) {
8267                         for (i = tpr->rx_jmb_cons_idx;
8268                              i != tpr->rx_jmb_prod_idx;
8269                              i = (i + 1) & tp->rx_jmb_ring_mask) {
8270                                 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8271                                                 TG3_RX_JMB_MAP_SZ);
8272                         }
8273                 }
8274
8275                 return;
8276         }
8277
8278         for (i = 0; i <= tp->rx_std_ring_mask; i++)
8279                 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
8280                                 tp->rx_pkt_map_sz);
8281
8282         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8283                 for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
8284                         tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
8285                                         TG3_RX_JMB_MAP_SZ);
8286         }
8287 }
8288
8289 /* Initialize rx rings for packet processing.
8290  *
8291  * The chip has been shut down and the driver detached from
8292  * the networking, so no interrupts or new tx packets will
8293  * end up in the driver.  tp->{tx,}lock are held and thus
8294  * we may not sleep.
8295  */
8296 static int tg3_rx_prodring_alloc(struct tg3 *tp,
8297                                  struct tg3_rx_prodring_set *tpr)
8298 {
8299         u32 i, rx_pkt_dma_sz;
8300
8301         tpr->rx_std_cons_idx = 0;
8302         tpr->rx_std_prod_idx = 0;
8303         tpr->rx_jmb_cons_idx = 0;
8304         tpr->rx_jmb_prod_idx = 0;
8305
8306         if (tpr != &tp->napi[0].prodring) {
8307                 memset(&tpr->rx_std_buffers[0], 0,
8308                        TG3_RX_STD_BUFF_RING_SIZE(tp));
8309                 if (tpr->rx_jmb_buffers)
8310                         memset(&tpr->rx_jmb_buffers[0], 0,
8311                                TG3_RX_JMB_BUFF_RING_SIZE(tp));
8312                 goto done;
8313         }
8314
8315         /* Zero out all descriptors. */
8316         memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
8317
8318         rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
8319         if (tg3_flag(tp, 5780_CLASS) &&
8320             tp->dev->mtu > ETH_DATA_LEN)
8321                 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
8322         tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
8323
8324         /* Initialize invariants of the rings, we only set this
8325          * stuff once.  This works because the card does not
8326          * write into the rx buffer posting rings.
8327          */
8328         for (i = 0; i <= tp->rx_std_ring_mask; i++) {
8329                 struct tg3_rx_buffer_desc *rxd;
8330
8331                 rxd = &tpr->rx_std[i];
8332                 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
8333                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
8334                 rxd->opaque = (RXD_OPAQUE_RING_STD |
8335                                (i << RXD_OPAQUE_INDEX_SHIFT));
8336         }
8337
8338         /* Now allocate fresh SKBs for each rx ring. */
8339         for (i = 0; i < tp->rx_pending; i++) {
8340                 unsigned int frag_size;
8341
8342                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
8343                                       &frag_size) < 0) {
8344                         netdev_warn(tp->dev,
8345                                     "Using a smaller RX standard ring. Only "
8346                                     "%d out of %d buffers were allocated "
8347                                     "successfully\n", i, tp->rx_pending);
8348                         if (i == 0)
8349                                 goto initfail;
8350                         tp->rx_pending = i;
8351                         break;
8352                 }
8353         }
8354
8355         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8356                 goto done;
8357
8358         memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
8359
8360         if (!tg3_flag(tp, JUMBO_RING_ENABLE))
8361                 goto done;
8362
8363         for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
8364                 struct tg3_rx_buffer_desc *rxd;
8365
8366                 rxd = &tpr->rx_jmb[i].std;
8367                 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT;
8368                 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
8369                                   RXD_FLAG_JUMBO;
8370                 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
8371                        (i << RXD_OPAQUE_INDEX_SHIFT));
8372         }
8373
8374         for (i = 0; i < tp->rx_jumbo_pending; i++) {
8375                 unsigned int frag_size;
8376
8377                 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
8378                                       &frag_size) < 0) {
8379                         netdev_warn(tp->dev,
8380                                     "Using a smaller RX jumbo ring. Only %d "
8381                                     "out of %d buffers were allocated "
8382                                     "successfully\n", i, tp->rx_jumbo_pending);
8383                         if (i == 0)
8384                                 goto initfail;
8385                         tp->rx_jumbo_pending = i;
8386                         break;
8387                 }
8388         }
8389
8390 done:
8391         return 0;
8392
8393 initfail:
8394         tg3_rx_prodring_free(tp, tpr);
8395         return -ENOMEM;
8396 }
8397
8398 static void tg3_rx_prodring_fini(struct tg3 *tp,
8399                                  struct tg3_rx_prodring_set *tpr)
8400 {
8401         kfree(tpr->rx_std_buffers);
8402         tpr->rx_std_buffers = NULL;
8403         kfree(tpr->rx_jmb_buffers);
8404         tpr->rx_jmb_buffers = NULL;
8405         if (tpr->rx_std) {
8406                 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp),
8407                                   tpr->rx_std, tpr->rx_std_mapping);
8408                 tpr->rx_std = NULL;
8409         }
8410         if (tpr->rx_jmb) {
8411                 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp),
8412                                   tpr->rx_jmb, tpr->rx_jmb_mapping);
8413                 tpr->rx_jmb = NULL;
8414         }
8415 }
8416
8417 static int tg3_rx_prodring_init(struct tg3 *tp,
8418                                 struct tg3_rx_prodring_set *tpr)
8419 {
8420         tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
8421                                       GFP_KERNEL);
8422         if (!tpr->rx_std_buffers)
8423                 return -ENOMEM;
8424
8425         tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
8426                                          TG3_RX_STD_RING_BYTES(tp),
8427                                          &tpr->rx_std_mapping,
8428                                          GFP_KERNEL);
8429         if (!tpr->rx_std)
8430                 goto err_out;
8431
8432         if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
8433                 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
8434                                               GFP_KERNEL);
8435                 if (!tpr->rx_jmb_buffers)
8436                         goto err_out;
8437
8438                 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
8439                                                  TG3_RX_JMB_RING_BYTES(tp),
8440                                                  &tpr->rx_jmb_mapping,
8441                                                  GFP_KERNEL);
8442                 if (!tpr->rx_jmb)
8443                         goto err_out;
8444         }
8445
8446         return 0;
8447
8448 err_out:
8449         tg3_rx_prodring_fini(tp, tpr);
8450         return -ENOMEM;
8451 }
8452
8453 /* Free up pending packets in all rx/tx rings.
8454  *
8455  * The chip has been shut down and the driver detached from
8456  * the networking, so no interrupts or new tx packets will
8457  * end up in the driver.  tp->{tx,}lock is not held and we are not
8458  * in an interrupt context and thus may sleep.
8459  */
8460 static void tg3_free_rings(struct tg3 *tp)
8461 {
8462         int i, j;
8463
8464         for (j = 0; j < tp->irq_cnt; j++) {
8465                 struct tg3_napi *tnapi = &tp->napi[j];
8466
8467                 tg3_rx_prodring_free(tp, &tnapi->prodring);
8468
8469                 if (!tnapi->tx_buffers)
8470                         continue;
8471
8472                 for (i = 0; i < TG3_TX_RING_SIZE; i++) {
8473                         struct sk_buff *skb = tnapi->tx_buffers[i].skb;
8474
8475                         if (!skb)
8476                                 continue;
8477
8478                         tg3_tx_skb_unmap(tnapi, i,
8479                                          skb_shinfo(skb)->nr_frags - 1);
8480
8481                         dev_kfree_skb_any(skb);
8482                 }
8483                 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
8484         }
8485 }
8486
8487 /* Initialize tx/rx rings for packet processing.
8488  *
8489  * The chip has been shut down and the driver detached from
8490  * the networking, so no interrupts or new tx packets will
8491  * end up in the driver.  tp->{tx,}lock are held and thus
8492  * we may not sleep.
8493  */
8494 static int tg3_init_rings(struct tg3 *tp)
8495 {
8496         int i;
8497
8498         /* Free up all the SKBs. */
8499         tg3_free_rings(tp);
8500
8501         for (i = 0; i < tp->irq_cnt; i++) {
8502                 struct tg3_napi *tnapi = &tp->napi[i];
8503
8504                 tnapi->last_tag = 0;
8505                 tnapi->last_irq_tag = 0;
8506                 tnapi->hw_status->status = 0;
8507                 tnapi->hw_status->status_tag = 0;
8508                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8509
8510                 tnapi->tx_prod = 0;
8511                 tnapi->tx_cons = 0;
8512                 if (tnapi->tx_ring)
8513                         memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
8514
8515                 tnapi->rx_rcb_ptr = 0;
8516                 if (tnapi->rx_rcb)
8517                         memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
8518
8519                 if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
8520                         tg3_free_rings(tp);
8521                         return -ENOMEM;
8522                 }
8523         }
8524
8525         return 0;
8526 }
8527
8528 static void tg3_mem_tx_release(struct tg3 *tp)
8529 {
8530         int i;
8531
8532         for (i = 0; i < tp->irq_max; i++) {
8533                 struct tg3_napi *tnapi = &tp->napi[i];
8534
8535                 if (tnapi->tx_ring) {
8536                         dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES,
8537                                 tnapi->tx_ring, tnapi->tx_desc_mapping);
8538                         tnapi->tx_ring = NULL;
8539                 }
8540
8541                 kfree(tnapi->tx_buffers);
8542                 tnapi->tx_buffers = NULL;
8543         }
8544 }
8545
8546 static int tg3_mem_tx_acquire(struct tg3 *tp)
8547 {
8548         int i;
8549         struct tg3_napi *tnapi = &tp->napi[0];
8550
8551         /* If multivector TSS is enabled, vector 0 does not handle
8552          * tx interrupts.  Don't allocate any resources for it.
8553          */
8554         if (tg3_flag(tp, ENABLE_TSS))
8555                 tnapi++;
8556
8557         for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
8558                 tnapi->tx_buffers = kzalloc(sizeof(struct tg3_tx_ring_info) *
8559                                             TG3_TX_RING_SIZE, GFP_KERNEL);
8560                 if (!tnapi->tx_buffers)
8561                         goto err_out;
8562
8563                 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
8564                                                     TG3_TX_RING_BYTES,
8565                                                     &tnapi->tx_desc_mapping,
8566                                                     GFP_KERNEL);
8567                 if (!tnapi->tx_ring)
8568                         goto err_out;
8569         }
8570
8571         return 0;
8572
8573 err_out:
8574         tg3_mem_tx_release(tp);
8575         return -ENOMEM;
8576 }
8577
8578 static void tg3_mem_rx_release(struct tg3 *tp)
8579 {
8580         int i;
8581
8582         for (i = 0; i < tp->irq_max; i++) {
8583                 struct tg3_napi *tnapi = &tp->napi[i];
8584
8585                 tg3_rx_prodring_fini(tp, &tnapi->prodring);
8586
8587                 if (!tnapi->rx_rcb)
8588                         continue;
8589
8590                 dma_free_coherent(&tp->pdev->dev,
8591                                   TG3_RX_RCB_RING_BYTES(tp),
8592                                   tnapi->rx_rcb,
8593                                   tnapi->rx_rcb_mapping);
8594                 tnapi->rx_rcb = NULL;
8595         }
8596 }
8597
8598 static int tg3_mem_rx_acquire(struct tg3 *tp)
8599 {
8600         unsigned int i, limit;
8601
8602         limit = tp->rxq_cnt;
8603
8604         /* If RSS is enabled, we need a (dummy) producer ring
8605          * set on vector zero.  This is the true hw prodring.
8606          */
8607         if (tg3_flag(tp, ENABLE_RSS))
8608                 limit++;
8609
8610         for (i = 0; i < limit; i++) {
8611                 struct tg3_napi *tnapi = &tp->napi[i];
8612
8613                 if (tg3_rx_prodring_init(tp, &tnapi->prodring))
8614                         goto err_out;
8615
8616                 /* If multivector RSS is enabled, vector 0
8617                  * does not handle rx or tx interrupts.
8618                  * Don't allocate any resources for it.
8619                  */
8620                 if (!i && tg3_flag(tp, ENABLE_RSS))
8621                         continue;
8622
8623                 tnapi->rx_rcb = dma_zalloc_coherent(&tp->pdev->dev,
8624                                                     TG3_RX_RCB_RING_BYTES(tp),
8625                                                     &tnapi->rx_rcb_mapping,
8626                                                     GFP_KERNEL);
8627                 if (!tnapi->rx_rcb)
8628                         goto err_out;
8629         }
8630
8631         return 0;
8632
8633 err_out:
8634         tg3_mem_rx_release(tp);
8635         return -ENOMEM;
8636 }
8637
8638 /*
8639  * Must not be invoked with interrupt sources disabled and
8640  * the hardware shutdown down.
8641  */
8642 static void tg3_free_consistent(struct tg3 *tp)
8643 {
8644         int i;
8645
8646         for (i = 0; i < tp->irq_cnt; i++) {
8647                 struct tg3_napi *tnapi = &tp->napi[i];
8648
8649                 if (tnapi->hw_status) {
8650                         dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE,
8651                                           tnapi->hw_status,
8652                                           tnapi->status_mapping);
8653                         tnapi->hw_status = NULL;
8654                 }
8655         }
8656
8657         tg3_mem_rx_release(tp);
8658         tg3_mem_tx_release(tp);
8659
8660         if (tp->hw_stats) {
8661                 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
8662                                   tp->hw_stats, tp->stats_mapping);
8663                 tp->hw_stats = NULL;
8664         }
8665 }
8666
8667 /*
8668  * Must not be invoked with interrupt sources disabled and
8669  * the hardware shutdown down.  Can sleep.
8670  */
8671 static int tg3_alloc_consistent(struct tg3 *tp)
8672 {
8673         int i;
8674
8675         tp->hw_stats = dma_zalloc_coherent(&tp->pdev->dev,
8676                                            sizeof(struct tg3_hw_stats),
8677                                            &tp->stats_mapping, GFP_KERNEL);
8678         if (!tp->hw_stats)
8679                 goto err_out;
8680
8681         for (i = 0; i < tp->irq_cnt; i++) {
8682                 struct tg3_napi *tnapi = &tp->napi[i];
8683                 struct tg3_hw_status *sblk;
8684
8685                 tnapi->hw_status = dma_zalloc_coherent(&tp->pdev->dev,
8686                                                        TG3_HW_STATUS_SIZE,
8687                                                        &tnapi->status_mapping,
8688                                                        GFP_KERNEL);
8689                 if (!tnapi->hw_status)
8690                         goto err_out;
8691
8692                 sblk = tnapi->hw_status;
8693
8694                 if (tg3_flag(tp, ENABLE_RSS)) {
8695                         u16 *prodptr = NULL;
8696
8697                         /*
8698                          * When RSS is enabled, the status block format changes
8699                          * slightly.  The "rx_jumbo_consumer", "reserved",
8700                          * and "rx_mini_consumer" members get mapped to the
8701                          * other three rx return ring producer indexes.
8702                          */
8703                         switch (i) {
8704                         case 1:
8705                                 prodptr = &sblk->idx[0].rx_producer;
8706                                 break;
8707                         case 2:
8708                                 prodptr = &sblk->rx_jumbo_consumer;
8709                                 break;
8710                         case 3:
8711                                 prodptr = &sblk->reserved;
8712                                 break;
8713                         case 4:
8714                                 prodptr = &sblk->rx_mini_consumer;
8715                                 break;
8716                         }
8717                         tnapi->rx_rcb_prod_idx = prodptr;
8718                 } else {
8719                         tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
8720                 }
8721         }
8722
8723         if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
8724                 goto err_out;
8725
8726         return 0;
8727
8728 err_out:
8729         tg3_free_consistent(tp);
8730         return -ENOMEM;
8731 }
8732
8733 #define MAX_WAIT_CNT 1000
8734
8735 /* To stop a block, clear the enable bit and poll till it
8736  * clears.  tp->lock is held.
8737  */
8738 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, bool silent)
8739 {
8740         unsigned int i;
8741         u32 val;
8742
8743         if (tg3_flag(tp, 5705_PLUS)) {
8744                 switch (ofs) {
8745                 case RCVLSC_MODE:
8746                 case DMAC_MODE:
8747                 case MBFREE_MODE:
8748                 case BUFMGR_MODE:
8749                 case MEMARB_MODE:
8750                         /* We can't enable/disable these bits of the
8751                          * 5705/5750, just say success.
8752                          */
8753                         return 0;
8754
8755                 default:
8756                         break;
8757                 }
8758         }
8759
8760         val = tr32(ofs);
8761         val &= ~enable_bit;
8762         tw32_f(ofs, val);
8763
8764         for (i = 0; i < MAX_WAIT_CNT; i++) {
8765                 if (pci_channel_offline(tp->pdev)) {
8766                         dev_err(&tp->pdev->dev,
8767                                 "tg3_stop_block device offline, "
8768                                 "ofs=%lx enable_bit=%x\n",
8769                                 ofs, enable_bit);
8770                         return -ENODEV;
8771                 }
8772
8773                 udelay(100);
8774                 val = tr32(ofs);
8775                 if ((val & enable_bit) == 0)
8776                         break;
8777         }
8778
8779         if (i == MAX_WAIT_CNT && !silent) {
8780                 dev_err(&tp->pdev->dev,
8781                         "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
8782                         ofs, enable_bit);
8783                 return -ENODEV;
8784         }
8785
8786         return 0;
8787 }
8788
8789 /* tp->lock is held. */
8790 static int tg3_abort_hw(struct tg3 *tp, bool silent)
8791 {
8792         int i, err;
8793
8794         tg3_disable_ints(tp);
8795
8796         if (pci_channel_offline(tp->pdev)) {
8797                 tp->rx_mode &= ~(RX_MODE_ENABLE | TX_MODE_ENABLE);
8798                 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8799                 err = -ENODEV;
8800                 goto err_no_dev;
8801         }
8802
8803         tp->rx_mode &= ~RX_MODE_ENABLE;
8804         tw32_f(MAC_RX_MODE, tp->rx_mode);
8805         udelay(10);
8806
8807         err  = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
8808         err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
8809         err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
8810         err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
8811         err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
8812         err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
8813
8814         err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
8815         err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
8816         err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
8817         err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
8818         err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
8819         err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
8820         err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
8821
8822         tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
8823         tw32_f(MAC_MODE, tp->mac_mode);
8824         udelay(40);
8825
8826         tp->tx_mode &= ~TX_MODE_ENABLE;
8827         tw32_f(MAC_TX_MODE, tp->tx_mode);
8828
8829         for (i = 0; i < MAX_WAIT_CNT; i++) {
8830                 udelay(100);
8831                 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
8832                         break;
8833         }
8834         if (i >= MAX_WAIT_CNT) {
8835                 dev_err(&tp->pdev->dev,
8836                         "%s timed out, TX_MODE_ENABLE will not clear "
8837                         "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
8838                 err |= -ENODEV;
8839         }
8840
8841         err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
8842         err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
8843         err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
8844
8845         tw32(FTQ_RESET, 0xffffffff);
8846         tw32(FTQ_RESET, 0x00000000);
8847
8848         err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
8849         err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
8850
8851 err_no_dev:
8852         for (i = 0; i < tp->irq_cnt; i++) {
8853                 struct tg3_napi *tnapi = &tp->napi[i];
8854                 if (tnapi->hw_status)
8855                         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8856         }
8857
8858         return err;
8859 }
8860
8861 /* Save PCI command register before chip reset */
8862 static void tg3_save_pci_state(struct tg3 *tp)
8863 {
8864         pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
8865 }
8866
8867 /* Restore PCI state after chip reset */
8868 static void tg3_restore_pci_state(struct tg3 *tp)
8869 {
8870         u32 val;
8871
8872         /* Re-enable indirect register accesses. */
8873         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
8874                                tp->misc_host_ctrl);
8875
8876         /* Set MAX PCI retry to zero. */
8877         val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
8878         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
8879             tg3_flag(tp, PCIX_MODE))
8880                 val |= PCISTATE_RETRY_SAME_DMA;
8881         /* Allow reads and writes to the APE register and memory space. */
8882         if (tg3_flag(tp, ENABLE_APE))
8883                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
8884                        PCISTATE_ALLOW_APE_SHMEM_WR |
8885                        PCISTATE_ALLOW_APE_PSPACE_WR;
8886         pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
8887
8888         pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
8889
8890         if (!tg3_flag(tp, PCI_EXPRESS)) {
8891                 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
8892                                       tp->pci_cacheline_sz);
8893                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
8894                                       tp->pci_lat_timer);
8895         }
8896
8897         /* Make sure PCI-X relaxed ordering bit is clear. */
8898         if (tg3_flag(tp, PCIX_MODE)) {
8899                 u16 pcix_cmd;
8900
8901                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8902                                      &pcix_cmd);
8903                 pcix_cmd &= ~PCI_X_CMD_ERO;
8904                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
8905                                       pcix_cmd);
8906         }
8907
8908         if (tg3_flag(tp, 5780_CLASS)) {
8909
8910                 /* Chip reset on 5780 will reset MSI enable bit,
8911                  * so need to restore it.
8912                  */
8913                 if (tg3_flag(tp, USING_MSI)) {
8914                         u16 ctrl;
8915
8916                         pci_read_config_word(tp->pdev,
8917                                              tp->msi_cap + PCI_MSI_FLAGS,
8918                                              &ctrl);
8919                         pci_write_config_word(tp->pdev,
8920                                               tp->msi_cap + PCI_MSI_FLAGS,
8921                                               ctrl | PCI_MSI_FLAGS_ENABLE);
8922                         val = tr32(MSGINT_MODE);
8923                         tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
8924                 }
8925         }
8926 }
8927
8928 /* tp->lock is held. */
8929 static int tg3_chip_reset(struct tg3 *tp)
8930 {
8931         u32 val;
8932         void (*write_op)(struct tg3 *, u32, u32);
8933         int i, err;
8934
8935         tg3_nvram_lock(tp);
8936
8937         tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
8938
8939         /* No matching tg3_nvram_unlock() after this because
8940          * chip reset below will undo the nvram lock.
8941          */
8942         tp->nvram_lock_cnt = 0;
8943
8944         /* GRC_MISC_CFG core clock reset will clear the memory
8945          * enable bit in PCI register 4 and the MSI enable bit
8946          * on some chips, so we save relevant registers here.
8947          */
8948         tg3_save_pci_state(tp);
8949
8950         if (tg3_asic_rev(tp) == ASIC_REV_5752 ||
8951             tg3_flag(tp, 5755_PLUS))
8952                 tw32(GRC_FASTBOOT_PC, 0);
8953
8954         /*
8955          * We must avoid the readl() that normally takes place.
8956          * It locks machines, causes machine checks, and other
8957          * fun things.  So, temporarily disable the 5701
8958          * hardware workaround, while we do the reset.
8959          */
8960         write_op = tp->write32;
8961         if (write_op == tg3_write_flush_reg32)
8962                 tp->write32 = tg3_write32;
8963
8964         /* Prevent the irq handler from reading or writing PCI registers
8965          * during chip reset when the memory enable bit in the PCI command
8966          * register may be cleared.  The chip does not generate interrupt
8967          * at this time, but the irq handler may still be called due to irq
8968          * sharing or irqpoll.
8969          */
8970         tg3_flag_set(tp, CHIP_RESETTING);
8971         for (i = 0; i < tp->irq_cnt; i++) {
8972                 struct tg3_napi *tnapi = &tp->napi[i];
8973                 if (tnapi->hw_status) {
8974                         tnapi->hw_status->status = 0;
8975                         tnapi->hw_status->status_tag = 0;
8976                 }
8977                 tnapi->last_tag = 0;
8978                 tnapi->last_irq_tag = 0;
8979         }
8980         smp_mb();
8981
8982         for (i = 0; i < tp->irq_cnt; i++)
8983                 synchronize_irq(tp->napi[i].irq_vec);
8984
8985         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
8986                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
8987                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
8988         }
8989
8990         /* do the reset */
8991         val = GRC_MISC_CFG_CORECLK_RESET;
8992
8993         if (tg3_flag(tp, PCI_EXPRESS)) {
8994                 /* Force PCIe 1.0a mode */
8995                 if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
8996                     !tg3_flag(tp, 57765_PLUS) &&
8997                     tr32(TG3_PCIE_PHY_TSTCTL) ==
8998                     (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM))
8999                         tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM);
9000
9001                 if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0) {
9002                         tw32(GRC_MISC_CFG, (1 << 29));
9003                         val |= (1 << 29);
9004                 }
9005         }
9006
9007         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
9008                 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
9009                 tw32(GRC_VCPU_EXT_CTRL,
9010                      tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
9011         }
9012
9013         /* Manage gphy power for all CPMU absent PCIe devices. */
9014         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
9015                 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
9016
9017         tw32(GRC_MISC_CFG, val);
9018
9019         /* restore 5701 hardware bug workaround write method */
9020         tp->write32 = write_op;
9021
9022         /* Unfortunately, we have to delay before the PCI read back.
9023          * Some 575X chips even will not respond to a PCI cfg access
9024          * when the reset command is given to the chip.
9025          *
9026          * How do these hardware designers expect things to work
9027          * properly if the PCI write is posted for a long period
9028          * of time?  It is always necessary to have some method by
9029          * which a register read back can occur to push the write
9030          * out which does the reset.
9031          *
9032          * For most tg3 variants the trick below was working.
9033          * Ho hum...
9034          */
9035         udelay(120);
9036
9037         /* Flush PCI posted writes.  The normal MMIO registers
9038          * are inaccessible at this time so this is the only
9039          * way to make this reliably (actually, this is no longer
9040          * the case, see above).  I tried to use indirect
9041          * register read/write but this upset some 5701 variants.
9042          */
9043         pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
9044
9045         udelay(120);
9046
9047         if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
9048                 u16 val16;
9049
9050                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0) {
9051                         int j;
9052                         u32 cfg_val;
9053
9054                         /* Wait for link training to complete.  */
9055                         for (j = 0; j < 5000; j++)
9056                                 udelay(100);
9057
9058                         pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
9059                         pci_write_config_dword(tp->pdev, 0xc4,
9060                                                cfg_val | (1 << 15));
9061                 }
9062
9063                 /* Clear the "no snoop" and "relaxed ordering" bits. */
9064                 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN;
9065                 /*
9066                  * Older PCIe devices only support the 128 byte
9067                  * MPS setting.  Enforce the restriction.
9068                  */
9069                 if (!tg3_flag(tp, CPMU_PRESENT))
9070                         val16 |= PCI_EXP_DEVCTL_PAYLOAD;
9071                 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
9072
9073                 /* Clear error status */
9074                 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA,
9075                                       PCI_EXP_DEVSTA_CED |
9076                                       PCI_EXP_DEVSTA_NFED |
9077                                       PCI_EXP_DEVSTA_FED |
9078                                       PCI_EXP_DEVSTA_URD);
9079         }
9080
9081         tg3_restore_pci_state(tp);
9082
9083         tg3_flag_clear(tp, CHIP_RESETTING);
9084         tg3_flag_clear(tp, ERROR_PROCESSED);
9085
9086         val = 0;
9087         if (tg3_flag(tp, 5780_CLASS))
9088                 val = tr32(MEMARB_MODE);
9089         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9090
9091         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A3) {
9092                 tg3_stop_fw(tp);
9093                 tw32(0x5000, 0x400);
9094         }
9095
9096         if (tg3_flag(tp, IS_SSB_CORE)) {
9097                 /*
9098                  * BCM4785: In order to avoid repercussions from using
9099                  * potentially defective internal ROM, stop the Rx RISC CPU,
9100                  * which is not required.
9101                  */
9102                 tg3_stop_fw(tp);
9103                 tg3_halt_cpu(tp, RX_CPU_BASE);
9104         }
9105
9106         err = tg3_poll_fw(tp);
9107         if (err)
9108                 return err;
9109
9110         tw32(GRC_MODE, tp->grc_mode);
9111
9112         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0) {
9113                 val = tr32(0xc4);
9114
9115                 tw32(0xc4, val | (1 << 15));
9116         }
9117
9118         if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
9119             tg3_asic_rev(tp) == ASIC_REV_5705) {
9120                 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
9121                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A0)
9122                         tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
9123                 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9124         }
9125
9126         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9127                 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
9128                 val = tp->mac_mode;
9129         } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9130                 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
9131                 val = tp->mac_mode;
9132         } else
9133                 val = 0;
9134
9135         tw32_f(MAC_MODE, val);
9136         udelay(40);
9137
9138         tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
9139
9140         tg3_mdio_start(tp);
9141
9142         if (tg3_flag(tp, PCI_EXPRESS) &&
9143             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
9144             tg3_asic_rev(tp) != ASIC_REV_5785 &&
9145             !tg3_flag(tp, 57765_PLUS)) {
9146                 val = tr32(0x7c00);
9147
9148                 tw32(0x7c00, val | (1 << 25));
9149         }
9150
9151         if (tg3_asic_rev(tp) == ASIC_REV_5720) {
9152                 val = tr32(TG3_CPMU_CLCK_ORIDE);
9153                 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN);
9154         }
9155
9156         /* Reprobe ASF enable state.  */
9157         tg3_flag_clear(tp, ENABLE_ASF);
9158         tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
9159                            TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
9160
9161         tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
9162         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9163         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9164                 u32 nic_cfg;
9165
9166                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9167                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9168                         tg3_flag_set(tp, ENABLE_ASF);
9169                         tp->last_event_jiffies = jiffies;
9170                         if (tg3_flag(tp, 5750_PLUS))
9171                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
9172
9173                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &nic_cfg);
9174                         if (nic_cfg & NIC_SRAM_1G_ON_VAUX_OK)
9175                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
9176                         if (nic_cfg & NIC_SRAM_LNK_FLAP_AVOID)
9177                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
9178                 }
9179         }
9180
9181         return 0;
9182 }
9183
9184 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
9185 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
9186
9187 /* tp->lock is held. */
9188 static int tg3_halt(struct tg3 *tp, int kind, bool silent)
9189 {
9190         int err;
9191
9192         tg3_stop_fw(tp);
9193
9194         tg3_write_sig_pre_reset(tp, kind);
9195
9196         tg3_abort_hw(tp, silent);
9197         err = tg3_chip_reset(tp);
9198
9199         __tg3_set_mac_addr(tp, false);
9200
9201         tg3_write_sig_legacy(tp, kind);
9202         tg3_write_sig_post_reset(tp, kind);
9203
9204         if (tp->hw_stats) {
9205                 /* Save the stats across chip resets... */
9206                 tg3_get_nstats(tp, &tp->net_stats_prev);
9207                 tg3_get_estats(tp, &tp->estats_prev);
9208
9209                 /* And make sure the next sample is new data */
9210                 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
9211         }
9212
9213         return err;
9214 }
9215
9216 static int tg3_set_mac_addr(struct net_device *dev, void *p)
9217 {
9218         struct tg3 *tp = netdev_priv(dev);
9219         struct sockaddr *addr = p;
9220         int err = 0;
9221         bool skip_mac_1 = false;
9222
9223         if (!is_valid_ether_addr(addr->sa_data))
9224                 return -EADDRNOTAVAIL;
9225
9226         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
9227
9228         if (!netif_running(dev))
9229                 return 0;
9230
9231         if (tg3_flag(tp, ENABLE_ASF)) {
9232                 u32 addr0_high, addr0_low, addr1_high, addr1_low;
9233
9234                 addr0_high = tr32(MAC_ADDR_0_HIGH);
9235                 addr0_low = tr32(MAC_ADDR_0_LOW);
9236                 addr1_high = tr32(MAC_ADDR_1_HIGH);
9237                 addr1_low = tr32(MAC_ADDR_1_LOW);
9238
9239                 /* Skip MAC addr 1 if ASF is using it. */
9240                 if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
9241                     !(addr1_high == 0 && addr1_low == 0))
9242                         skip_mac_1 = true;
9243         }
9244         spin_lock_bh(&tp->lock);
9245         __tg3_set_mac_addr(tp, skip_mac_1);
9246         spin_unlock_bh(&tp->lock);
9247
9248         return err;
9249 }
9250
9251 /* tp->lock is held. */
9252 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
9253                            dma_addr_t mapping, u32 maxlen_flags,
9254                            u32 nic_addr)
9255 {
9256         tg3_write_mem(tp,
9257                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
9258                       ((u64) mapping >> 32));
9259         tg3_write_mem(tp,
9260                       (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
9261                       ((u64) mapping & 0xffffffff));
9262         tg3_write_mem(tp,
9263                       (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
9264                        maxlen_flags);
9265
9266         if (!tg3_flag(tp, 5705_PLUS))
9267                 tg3_write_mem(tp,
9268                               (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
9269                               nic_addr);
9270 }
9271
9272
9273 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9274 {
9275         int i = 0;
9276
9277         if (!tg3_flag(tp, ENABLE_TSS)) {
9278                 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
9279                 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
9280                 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
9281         } else {
9282                 tw32(HOSTCC_TXCOL_TICKS, 0);
9283                 tw32(HOSTCC_TXMAX_FRAMES, 0);
9284                 tw32(HOSTCC_TXCOAL_MAXF_INT, 0);
9285
9286                 for (; i < tp->txq_cnt; i++) {
9287                         u32 reg;
9288
9289                         reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
9290                         tw32(reg, ec->tx_coalesce_usecs);
9291                         reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
9292                         tw32(reg, ec->tx_max_coalesced_frames);
9293                         reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
9294                         tw32(reg, ec->tx_max_coalesced_frames_irq);
9295                 }
9296         }
9297
9298         for (; i < tp->irq_max - 1; i++) {
9299                 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
9300                 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
9301                 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9302         }
9303 }
9304
9305 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
9306 {
9307         int i = 0;
9308         u32 limit = tp->rxq_cnt;
9309
9310         if (!tg3_flag(tp, ENABLE_RSS)) {
9311                 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
9312                 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
9313                 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
9314                 limit--;
9315         } else {
9316                 tw32(HOSTCC_RXCOL_TICKS, 0);
9317                 tw32(HOSTCC_RXMAX_FRAMES, 0);
9318                 tw32(HOSTCC_RXCOAL_MAXF_INT, 0);
9319         }
9320
9321         for (; i < limit; i++) {
9322                 u32 reg;
9323
9324                 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
9325                 tw32(reg, ec->rx_coalesce_usecs);
9326                 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
9327                 tw32(reg, ec->rx_max_coalesced_frames);
9328                 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
9329                 tw32(reg, ec->rx_max_coalesced_frames_irq);
9330         }
9331
9332         for (; i < tp->irq_max - 1; i++) {
9333                 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
9334                 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
9335                 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
9336         }
9337 }
9338
9339 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
9340 {
9341         tg3_coal_tx_init(tp, ec);
9342         tg3_coal_rx_init(tp, ec);
9343
9344         if (!tg3_flag(tp, 5705_PLUS)) {
9345                 u32 val = ec->stats_block_coalesce_usecs;
9346
9347                 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
9348                 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
9349
9350                 if (!tp->link_up)
9351                         val = 0;
9352
9353                 tw32(HOSTCC_STAT_COAL_TICKS, val);
9354         }
9355 }
9356
9357 /* tp->lock is held. */
9358 static void tg3_tx_rcbs_disable(struct tg3 *tp)
9359 {
9360         u32 txrcb, limit;
9361
9362         /* Disable all transmit rings but the first. */
9363         if (!tg3_flag(tp, 5705_PLUS))
9364                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
9365         else if (tg3_flag(tp, 5717_PLUS))
9366                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
9367         else if (tg3_flag(tp, 57765_CLASS) ||
9368                  tg3_asic_rev(tp) == ASIC_REV_5762)
9369                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
9370         else
9371                 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9372
9373         for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
9374              txrcb < limit; txrcb += TG3_BDINFO_SIZE)
9375                 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
9376                               BDINFO_FLAGS_DISABLED);
9377 }
9378
9379 /* tp->lock is held. */
9380 static void tg3_tx_rcbs_init(struct tg3 *tp)
9381 {
9382         int i = 0;
9383         u32 txrcb = NIC_SRAM_SEND_RCB;
9384
9385         if (tg3_flag(tp, ENABLE_TSS))
9386                 i++;
9387
9388         for (; i < tp->irq_max; i++, txrcb += TG3_BDINFO_SIZE) {
9389                 struct tg3_napi *tnapi = &tp->napi[i];
9390
9391                 if (!tnapi->tx_ring)
9392                         continue;
9393
9394                 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
9395                                (TG3_TX_RING_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT),
9396                                NIC_SRAM_TX_BUFFER_DESC);
9397         }
9398 }
9399
9400 /* tp->lock is held. */
9401 static void tg3_rx_ret_rcbs_disable(struct tg3 *tp)
9402 {
9403         u32 rxrcb, limit;
9404
9405         /* Disable all receive return rings but the first. */
9406         if (tg3_flag(tp, 5717_PLUS))
9407                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
9408         else if (!tg3_flag(tp, 5705_PLUS))
9409                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
9410         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9411                  tg3_asic_rev(tp) == ASIC_REV_5762 ||
9412                  tg3_flag(tp, 57765_CLASS))
9413                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
9414         else
9415                 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9416
9417         for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
9418              rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
9419                 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
9420                               BDINFO_FLAGS_DISABLED);
9421 }
9422
9423 /* tp->lock is held. */
9424 static void tg3_rx_ret_rcbs_init(struct tg3 *tp)
9425 {
9426         int i = 0;
9427         u32 rxrcb = NIC_SRAM_RCV_RET_RCB;
9428
9429         if (tg3_flag(tp, ENABLE_RSS))
9430                 i++;
9431
9432         for (; i < tp->irq_max; i++, rxrcb += TG3_BDINFO_SIZE) {
9433                 struct tg3_napi *tnapi = &tp->napi[i];
9434
9435                 if (!tnapi->rx_rcb)
9436                         continue;
9437
9438                 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
9439                                (tp->rx_ret_ring_mask + 1) <<
9440                                 BDINFO_FLAGS_MAXLEN_SHIFT, 0);
9441         }
9442 }
9443
9444 /* tp->lock is held. */
9445 static void tg3_rings_reset(struct tg3 *tp)
9446 {
9447         int i;
9448         u32 stblk;
9449         struct tg3_napi *tnapi = &tp->napi[0];
9450
9451         tg3_tx_rcbs_disable(tp);
9452
9453         tg3_rx_ret_rcbs_disable(tp);
9454
9455         /* Disable interrupts */
9456         tw32_mailbox_f(tp->napi[0].int_mbox, 1);
9457         tp->napi[0].chk_msi_cnt = 0;
9458         tp->napi[0].last_rx_cons = 0;
9459         tp->napi[0].last_tx_cons = 0;
9460
9461         /* Zero mailbox registers. */
9462         if (tg3_flag(tp, SUPPORT_MSIX)) {
9463                 for (i = 1; i < tp->irq_max; i++) {
9464                         tp->napi[i].tx_prod = 0;
9465                         tp->napi[i].tx_cons = 0;
9466                         if (tg3_flag(tp, ENABLE_TSS))
9467                                 tw32_mailbox(tp->napi[i].prodmbox, 0);
9468                         tw32_rx_mbox(tp->napi[i].consmbox, 0);
9469                         tw32_mailbox_f(tp->napi[i].int_mbox, 1);
9470                         tp->napi[i].chk_msi_cnt = 0;
9471                         tp->napi[i].last_rx_cons = 0;
9472                         tp->napi[i].last_tx_cons = 0;
9473                 }
9474                 if (!tg3_flag(tp, ENABLE_TSS))
9475                         tw32_mailbox(tp->napi[0].prodmbox, 0);
9476         } else {
9477                 tp->napi[0].tx_prod = 0;
9478                 tp->napi[0].tx_cons = 0;
9479                 tw32_mailbox(tp->napi[0].prodmbox, 0);
9480                 tw32_rx_mbox(tp->napi[0].consmbox, 0);
9481         }
9482
9483         /* Make sure the NIC-based send BD rings are disabled. */
9484         if (!tg3_flag(tp, 5705_PLUS)) {
9485                 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW;
9486                 for (i = 0; i < 16; i++)
9487                         tw32_tx_mbox(mbox + i * 8, 0);
9488         }
9489
9490         /* Clear status block in ram. */
9491         memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9492
9493         /* Set status block DMA address */
9494         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
9495              ((u64) tnapi->status_mapping >> 32));
9496         tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9497              ((u64) tnapi->status_mapping & 0xffffffff));
9498
9499         stblk = HOSTCC_STATBLCK_RING1;
9500
9501         for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
9502                 u64 mapping = (u64)tnapi->status_mapping;
9503                 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
9504                 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
9505                 stblk += 8;
9506
9507                 /* Clear status block in ram. */
9508                 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
9509         }
9510
9511         tg3_tx_rcbs_init(tp);
9512         tg3_rx_ret_rcbs_init(tp);
9513 }
9514
9515 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
9516 {
9517         u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
9518
9519         if (!tg3_flag(tp, 5750_PLUS) ||
9520             tg3_flag(tp, 5780_CLASS) ||
9521             tg3_asic_rev(tp) == ASIC_REV_5750 ||
9522             tg3_asic_rev(tp) == ASIC_REV_5752 ||
9523             tg3_flag(tp, 57765_PLUS))
9524                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
9525         else if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
9526                  tg3_asic_rev(tp) == ASIC_REV_5787)
9527                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
9528         else
9529                 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
9530
9531         nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
9532         host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
9533
9534         val = min(nic_rep_thresh, host_rep_thresh);
9535         tw32(RCVBDI_STD_THRESH, val);
9536
9537         if (tg3_flag(tp, 57765_PLUS))
9538                 tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
9539
9540         if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
9541                 return;
9542
9543         bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
9544
9545         host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
9546
9547         val = min(bdcache_maxcnt / 2, host_rep_thresh);
9548         tw32(RCVBDI_JUMBO_THRESH, val);
9549
9550         if (tg3_flag(tp, 57765_PLUS))
9551                 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
9552 }
9553
9554 static inline u32 calc_crc(unsigned char *buf, int len)
9555 {
9556         u32 reg;
9557         u32 tmp;
9558         int j, k;
9559
9560         reg = 0xffffffff;
9561
9562         for (j = 0; j < len; j++) {
9563                 reg ^= buf[j];
9564
9565                 for (k = 0; k < 8; k++) {
9566                         tmp = reg & 0x01;
9567
9568                         reg >>= 1;
9569
9570                         if (tmp)
9571                                 reg ^= 0xedb88320;
9572                 }
9573         }
9574
9575         return ~reg;
9576 }
9577
9578 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
9579 {
9580         /* accept or reject all multicast frames */
9581         tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
9582         tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
9583         tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
9584         tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
9585 }
9586
9587 static void __tg3_set_rx_mode(struct net_device *dev)
9588 {
9589         struct tg3 *tp = netdev_priv(dev);
9590         u32 rx_mode;
9591
9592         rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
9593                                   RX_MODE_KEEP_VLAN_TAG);
9594
9595 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
9596         /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
9597          * flag clear.
9598          */
9599         if (!tg3_flag(tp, ENABLE_ASF))
9600                 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
9601 #endif
9602
9603         if (dev->flags & IFF_PROMISC) {
9604                 /* Promiscuous mode. */
9605                 rx_mode |= RX_MODE_PROMISC;
9606         } else if (dev->flags & IFF_ALLMULTI) {
9607                 /* Accept all multicast. */
9608                 tg3_set_multi(tp, 1);
9609         } else if (netdev_mc_empty(dev)) {
9610                 /* Reject all multicast. */
9611                 tg3_set_multi(tp, 0);
9612         } else {
9613                 /* Accept one or more multicast(s). */
9614                 struct netdev_hw_addr *ha;
9615                 u32 mc_filter[4] = { 0, };
9616                 u32 regidx;
9617                 u32 bit;
9618                 u32 crc;
9619
9620                 netdev_for_each_mc_addr(ha, dev) {
9621                         crc = calc_crc(ha->addr, ETH_ALEN);
9622                         bit = ~crc & 0x7f;
9623                         regidx = (bit & 0x60) >> 5;
9624                         bit &= 0x1f;
9625                         mc_filter[regidx] |= (1 << bit);
9626                 }
9627
9628                 tw32(MAC_HASH_REG_0, mc_filter[0]);
9629                 tw32(MAC_HASH_REG_1, mc_filter[1]);
9630                 tw32(MAC_HASH_REG_2, mc_filter[2]);
9631                 tw32(MAC_HASH_REG_3, mc_filter[3]);
9632         }
9633
9634         if (rx_mode != tp->rx_mode) {
9635                 tp->rx_mode = rx_mode;
9636                 tw32_f(MAC_RX_MODE, rx_mode);
9637                 udelay(10);
9638         }
9639 }
9640
9641 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
9642 {
9643         int i;
9644
9645         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
9646                 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
9647 }
9648
9649 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
9650 {
9651         int i;
9652
9653         if (!tg3_flag(tp, SUPPORT_MSIX))
9654                 return;
9655
9656         if (tp->rxq_cnt == 1) {
9657                 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
9658                 return;
9659         }
9660
9661         /* Validate table against current IRQ count */
9662         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
9663                 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt)
9664                         break;
9665         }
9666
9667         if (i != TG3_RSS_INDIR_TBL_SIZE)
9668                 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
9669 }
9670
9671 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
9672 {
9673         int i = 0;
9674         u32 reg = MAC_RSS_INDIR_TBL_0;
9675
9676         while (i < TG3_RSS_INDIR_TBL_SIZE) {
9677                 u32 val = tp->rss_ind_tbl[i];
9678                 i++;
9679                 for (; i % 8; i++) {
9680                         val <<= 4;
9681                         val |= tp->rss_ind_tbl[i];
9682                 }
9683                 tw32(reg, val);
9684                 reg += 4;
9685         }
9686 }
9687
9688 static inline u32 tg3_lso_rd_dma_workaround_bit(struct tg3 *tp)
9689 {
9690         if (tg3_asic_rev(tp) == ASIC_REV_5719)
9691                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5719;
9692         else
9693                 return TG3_LSO_RD_DMA_TX_LENGTH_WA_5720;
9694 }
9695
9696 /* tp->lock is held. */
9697 static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
9698 {
9699         u32 val, rdmac_mode;
9700         int i, err, limit;
9701         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
9702
9703         tg3_disable_ints(tp);
9704
9705         tg3_stop_fw(tp);
9706
9707         tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
9708
9709         if (tg3_flag(tp, INIT_COMPLETE))
9710                 tg3_abort_hw(tp, 1);
9711
9712         if ((tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
9713             !(tp->phy_flags & TG3_PHYFLG_USER_CONFIGURED)) {
9714                 tg3_phy_pull_config(tp);
9715                 tg3_eee_pull_config(tp, NULL);
9716                 tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
9717         }
9718
9719         /* Enable MAC control of LPI */
9720         if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
9721                 tg3_setup_eee(tp);
9722
9723         if (reset_phy)
9724                 tg3_phy_reset(tp);
9725
9726         err = tg3_chip_reset(tp);
9727         if (err)
9728                 return err;
9729
9730         tg3_write_sig_legacy(tp, RESET_KIND_INIT);
9731
9732         if (tg3_chip_rev(tp) == CHIPREV_5784_AX) {
9733                 val = tr32(TG3_CPMU_CTRL);
9734                 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
9735                 tw32(TG3_CPMU_CTRL, val);
9736
9737                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9738                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9739                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9740                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9741
9742                 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
9743                 val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
9744                 val |= CPMU_LNK_AWARE_MACCLK_6_25;
9745                 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
9746
9747                 val = tr32(TG3_CPMU_HST_ACC);
9748                 val &= ~CPMU_HST_ACC_MACCLK_MASK;
9749                 val |= CPMU_HST_ACC_MACCLK_6_25;
9750                 tw32(TG3_CPMU_HST_ACC, val);
9751         }
9752
9753         if (tg3_asic_rev(tp) == ASIC_REV_57780) {
9754                 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK;
9755                 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN |
9756                        PCIE_PWR_MGMT_L1_THRESH_4MS;
9757                 tw32(PCIE_PWR_MGMT_THRESH, val);
9758
9759                 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK;
9760                 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS);
9761
9762                 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR);
9763
9764                 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN;
9765                 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS);
9766         }
9767
9768         if (tg3_flag(tp, L1PLLPD_EN)) {
9769                 u32 grc_mode = tr32(GRC_MODE);
9770
9771                 /* Access the lower 1K of PL PCIE block registers. */
9772                 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9773                 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9774
9775                 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1);
9776                 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1,
9777                      val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN);
9778
9779                 tw32(GRC_MODE, grc_mode);
9780         }
9781
9782         if (tg3_flag(tp, 57765_CLASS)) {
9783                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0) {
9784                         u32 grc_mode = tr32(GRC_MODE);
9785
9786                         /* Access the lower 1K of PL PCIE block registers. */
9787                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9788                         tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL);
9789
9790                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9791                                    TG3_PCIE_PL_LO_PHYCTL5);
9792                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5,
9793                              val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ);
9794
9795                         tw32(GRC_MODE, grc_mode);
9796                 }
9797
9798                 if (tg3_chip_rev(tp) != CHIPREV_57765_AX) {
9799                         u32 grc_mode;
9800
9801                         /* Fix transmit hangs */
9802                         val = tr32(TG3_CPMU_PADRNG_CTL);
9803                         val |= TG3_CPMU_PADRNG_CTL_RDIV2;
9804                         tw32(TG3_CPMU_PADRNG_CTL, val);
9805
9806                         grc_mode = tr32(GRC_MODE);
9807
9808                         /* Access the lower 1K of DL PCIE block registers. */
9809                         val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
9810                         tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL);
9811
9812                         val = tr32(TG3_PCIE_TLDLPL_PORT +
9813                                    TG3_PCIE_DL_LO_FTSMAX);
9814                         val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
9815                         tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX,
9816                              val | TG3_PCIE_DL_LO_FTSMAX_VAL);
9817
9818                         tw32(GRC_MODE, grc_mode);
9819                 }
9820
9821                 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
9822                 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
9823                 val |= CPMU_LSPD_10MB_MACCLK_6_25;
9824                 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
9825         }
9826
9827         /* This works around an issue with Athlon chipsets on
9828          * B3 tigon3 silicon.  This bit has no effect on any
9829          * other revision.  But do not set this on PCI Express
9830          * chips and don't even touch the clocks if the CPMU is present.
9831          */
9832         if (!tg3_flag(tp, CPMU_PRESENT)) {
9833                 if (!tg3_flag(tp, PCI_EXPRESS))
9834                         tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
9835                 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
9836         }
9837
9838         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0 &&
9839             tg3_flag(tp, PCIX_MODE)) {
9840                 val = tr32(TG3PCI_PCISTATE);
9841                 val |= PCISTATE_RETRY_SAME_DMA;
9842                 tw32(TG3PCI_PCISTATE, val);
9843         }
9844
9845         if (tg3_flag(tp, ENABLE_APE)) {
9846                 /* Allow reads and writes to the
9847                  * APE register and memory space.
9848                  */
9849                 val = tr32(TG3PCI_PCISTATE);
9850                 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
9851                        PCISTATE_ALLOW_APE_SHMEM_WR |
9852                        PCISTATE_ALLOW_APE_PSPACE_WR;
9853                 tw32(TG3PCI_PCISTATE, val);
9854         }
9855
9856         if (tg3_chip_rev(tp) == CHIPREV_5704_BX) {
9857                 /* Enable some hw fixes.  */
9858                 val = tr32(TG3PCI_MSI_DATA);
9859                 val |= (1 << 26) | (1 << 28) | (1 << 29);
9860                 tw32(TG3PCI_MSI_DATA, val);
9861         }
9862
9863         /* Descriptor ring init may make accesses to the
9864          * NIC SRAM area to setup the TX descriptors, so we
9865          * can only do this after the hardware has been
9866          * successfully reset.
9867          */
9868         err = tg3_init_rings(tp);
9869         if (err)
9870                 return err;
9871
9872         if (tg3_flag(tp, 57765_PLUS)) {
9873                 val = tr32(TG3PCI_DMA_RW_CTRL) &
9874                       ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
9875                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_57765_A0)
9876                         val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK;
9877                 if (!tg3_flag(tp, 57765_CLASS) &&
9878                     tg3_asic_rev(tp) != ASIC_REV_5717 &&
9879                     tg3_asic_rev(tp) != ASIC_REV_5762)
9880                         val |= DMA_RWCTRL_TAGGED_STAT_WA;
9881                 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
9882         } else if (tg3_asic_rev(tp) != ASIC_REV_5784 &&
9883                    tg3_asic_rev(tp) != ASIC_REV_5761) {
9884                 /* This value is determined during the probe time DMA
9885                  * engine test, tg3_test_dma.
9886                  */
9887                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
9888         }
9889
9890         tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
9891                           GRC_MODE_4X_NIC_SEND_RINGS |
9892                           GRC_MODE_NO_TX_PHDR_CSUM |
9893                           GRC_MODE_NO_RX_PHDR_CSUM);
9894         tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
9895
9896         /* Pseudo-header checksum is done by hardware logic and not
9897          * the offload processers, so make the chip do the pseudo-
9898          * header checksums on receive.  For transmit it is more
9899          * convenient to do the pseudo-header checksum in software
9900          * as Linux does that on transmit for us in all cases.
9901          */
9902         tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
9903
9904         val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP;
9905         if (tp->rxptpctl)
9906                 tw32(TG3_RX_PTP_CTL,
9907                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
9908
9909         if (tg3_flag(tp, PTP_CAPABLE))
9910                 val |= GRC_MODE_TIME_SYNC_ENABLE;
9911
9912         tw32(GRC_MODE, tp->grc_mode | val);
9913
9914         /* Setup the timer prescalar register.  Clock is always 66Mhz. */
9915         val = tr32(GRC_MISC_CFG);
9916         val &= ~0xff;
9917         val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
9918         tw32(GRC_MISC_CFG, val);
9919
9920         /* Initialize MBUF/DESC pool. */
9921         if (tg3_flag(tp, 5750_PLUS)) {
9922                 /* Do nothing.  */
9923         } else if (tg3_asic_rev(tp) != ASIC_REV_5705) {
9924                 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
9925                 if (tg3_asic_rev(tp) == ASIC_REV_5704)
9926                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
9927                 else
9928                         tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
9929                 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
9930                 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
9931         } else if (tg3_flag(tp, TSO_CAPABLE)) {
9932                 int fw_len;
9933
9934                 fw_len = tp->fw_len;
9935                 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
9936                 tw32(BUFMGR_MB_POOL_ADDR,
9937                      NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
9938                 tw32(BUFMGR_MB_POOL_SIZE,
9939                      NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
9940         }
9941
9942         if (tp->dev->mtu <= ETH_DATA_LEN) {
9943                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
9944                      tp->bufmgr_config.mbuf_read_dma_low_water);
9945                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
9946                      tp->bufmgr_config.mbuf_mac_rx_low_water);
9947                 tw32(BUFMGR_MB_HIGH_WATER,
9948                      tp->bufmgr_config.mbuf_high_water);
9949         } else {
9950                 tw32(BUFMGR_MB_RDMA_LOW_WATER,
9951                      tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
9952                 tw32(BUFMGR_MB_MACRX_LOW_WATER,
9953                      tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
9954                 tw32(BUFMGR_MB_HIGH_WATER,
9955                      tp->bufmgr_config.mbuf_high_water_jumbo);
9956         }
9957         tw32(BUFMGR_DMA_LOW_WATER,
9958              tp->bufmgr_config.dma_low_water);
9959         tw32(BUFMGR_DMA_HIGH_WATER,
9960              tp->bufmgr_config.dma_high_water);
9961
9962         val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE;
9963         if (tg3_asic_rev(tp) == ASIC_REV_5719)
9964                 val |= BUFMGR_MODE_NO_TX_UNDERRUN;
9965         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
9966             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
9967             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0)
9968                 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB;
9969         tw32(BUFMGR_MODE, val);
9970         for (i = 0; i < 2000; i++) {
9971                 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
9972                         break;
9973                 udelay(10);
9974         }
9975         if (i >= 2000) {
9976                 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
9977                 return -ENODEV;
9978         }
9979
9980         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5906_A1)
9981                 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
9982
9983         tg3_setup_rxbd_thresholds(tp);
9984
9985         /* Initialize TG3_BDINFO's at:
9986          *  RCVDBDI_STD_BD:     standard eth size rx ring
9987          *  RCVDBDI_JUMBO_BD:   jumbo frame rx ring
9988          *  RCVDBDI_MINI_BD:    small frame rx ring (??? does not work)
9989          *
9990          * like so:
9991          *  TG3_BDINFO_HOST_ADDR:       high/low parts of DMA address of ring
9992          *  TG3_BDINFO_MAXLEN_FLAGS:    (rx max buffer size << 16) |
9993          *                              ring attribute flags
9994          *  TG3_BDINFO_NIC_ADDR:        location of descriptors in nic SRAM
9995          *
9996          * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
9997          * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
9998          *
9999          * The size of each ring is fixed in the firmware, but the location is
10000          * configurable.
10001          */
10002         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10003              ((u64) tpr->rx_std_mapping >> 32));
10004         tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10005              ((u64) tpr->rx_std_mapping & 0xffffffff));
10006         if (!tg3_flag(tp, 5717_PLUS))
10007                 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
10008                      NIC_SRAM_RX_BUFFER_DESC);
10009
10010         /* Disable the mini ring */
10011         if (!tg3_flag(tp, 5705_PLUS))
10012                 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
10013                      BDINFO_FLAGS_DISABLED);
10014
10015         /* Program the jumbo buffer descriptor ring control
10016          * blocks on those devices that have them.
10017          */
10018         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10019             (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
10020
10021                 if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
10022                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
10023                              ((u64) tpr->rx_jmb_mapping >> 32));
10024                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
10025                              ((u64) tpr->rx_jmb_mapping & 0xffffffff));
10026                         val = TG3_RX_JMB_RING_SIZE(tp) <<
10027                               BDINFO_FLAGS_MAXLEN_SHIFT;
10028                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10029                              val | BDINFO_FLAGS_USE_EXT_RECV);
10030                         if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
10031                             tg3_flag(tp, 57765_CLASS) ||
10032                             tg3_asic_rev(tp) == ASIC_REV_5762)
10033                                 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
10034                                      NIC_SRAM_RX_JUMBO_BUFFER_DESC);
10035                 } else {
10036                         tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
10037                              BDINFO_FLAGS_DISABLED);
10038                 }
10039
10040                 if (tg3_flag(tp, 57765_PLUS)) {
10041                         val = TG3_RX_STD_RING_SIZE(tp);
10042                         val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
10043                         val |= (TG3_RX_STD_DMA_SZ << 2);
10044                 } else
10045                         val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT;
10046         } else
10047                 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT;
10048
10049         tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val);
10050
10051         tpr->rx_std_prod_idx = tp->rx_pending;
10052         tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx);
10053
10054         tpr->rx_jmb_prod_idx =
10055                 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
10056         tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx);
10057
10058         tg3_rings_reset(tp);
10059
10060         /* Initialize MAC address and backoff seed. */
10061         __tg3_set_mac_addr(tp, false);
10062
10063         /* MTU + ethernet header + FCS + optional VLAN tag */
10064         tw32(MAC_RX_MTU_SIZE,
10065              tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
10066
10067         /* The slot time is changed by tg3_setup_phy if we
10068          * run at gigabit with half duplex.
10069          */
10070         val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
10071               (6 << TX_LENGTHS_IPG_SHIFT) |
10072               (32 << TX_LENGTHS_SLOT_TIME_SHIFT);
10073
10074         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10075             tg3_asic_rev(tp) == ASIC_REV_5762)
10076                 val |= tr32(MAC_TX_LENGTHS) &
10077                        (TX_LENGTHS_JMB_FRM_LEN_MSK |
10078                         TX_LENGTHS_CNT_DWN_VAL_MSK);
10079
10080         tw32(MAC_TX_LENGTHS, val);
10081
10082         /* Receive rules. */
10083         tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
10084         tw32(RCVLPC_CONFIG, 0x0181);
10085
10086         /* Calculate RDMAC_MODE setting early, we need it to determine
10087          * the RCVLPC_STATE_ENABLE mask.
10088          */
10089         rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
10090                       RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
10091                       RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
10092                       RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
10093                       RDMAC_MODE_LNGREAD_ENAB);
10094
10095         if (tg3_asic_rev(tp) == ASIC_REV_5717)
10096                 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
10097
10098         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
10099             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10100             tg3_asic_rev(tp) == ASIC_REV_57780)
10101                 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
10102                               RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
10103                               RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
10104
10105         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10106             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10107                 if (tg3_flag(tp, TSO_CAPABLE) &&
10108                     tg3_asic_rev(tp) == ASIC_REV_5705) {
10109                         rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
10110                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10111                            !tg3_flag(tp, IS_5788)) {
10112                         rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10113                 }
10114         }
10115
10116         if (tg3_flag(tp, PCI_EXPRESS))
10117                 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
10118
10119         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10120                 tp->dma_limit = 0;
10121                 if (tp->dev->mtu <= ETH_DATA_LEN) {
10122                         rdmac_mode |= RDMAC_MODE_JMB_2K_MMRR;
10123                         tp->dma_limit = TG3_TX_BD_DMA_MAX_2K;
10124                 }
10125         }
10126
10127         if (tg3_flag(tp, HW_TSO_1) ||
10128             tg3_flag(tp, HW_TSO_2) ||
10129             tg3_flag(tp, HW_TSO_3))
10130                 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
10131
10132         if (tg3_flag(tp, 57765_PLUS) ||
10133             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10134             tg3_asic_rev(tp) == ASIC_REV_57780)
10135                 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
10136
10137         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10138             tg3_asic_rev(tp) == ASIC_REV_5762)
10139                 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
10140
10141         if (tg3_asic_rev(tp) == ASIC_REV_5761 ||
10142             tg3_asic_rev(tp) == ASIC_REV_5784 ||
10143             tg3_asic_rev(tp) == ASIC_REV_5785 ||
10144             tg3_asic_rev(tp) == ASIC_REV_57780 ||
10145             tg3_flag(tp, 57765_PLUS)) {
10146                 u32 tgtreg;
10147
10148                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10149                         tgtreg = TG3_RDMA_RSRVCTRL_REG2;
10150                 else
10151                         tgtreg = TG3_RDMA_RSRVCTRL_REG;
10152
10153                 val = tr32(tgtreg);
10154                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
10155                     tg3_asic_rev(tp) == ASIC_REV_5762) {
10156                         val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK |
10157                                  TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK |
10158                                  TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK);
10159                         val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B |
10160                                TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K |
10161                                TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K;
10162                 }
10163                 tw32(tgtreg, val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX);
10164         }
10165
10166         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10167             tg3_asic_rev(tp) == ASIC_REV_5720 ||
10168             tg3_asic_rev(tp) == ASIC_REV_5762) {
10169                 u32 tgtreg;
10170
10171                 if (tg3_asic_rev(tp) == ASIC_REV_5762)
10172                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL2;
10173                 else
10174                         tgtreg = TG3_LSO_RD_DMA_CRPTEN_CTRL;
10175
10176                 val = tr32(tgtreg);
10177                 tw32(tgtreg, val |
10178                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K |
10179                      TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K);
10180         }
10181
10182         /* Receive/send statistics. */
10183         if (tg3_flag(tp, 5750_PLUS)) {
10184                 val = tr32(RCVLPC_STATS_ENABLE);
10185                 val &= ~RCVLPC_STATSENAB_DACK_FIX;
10186                 tw32(RCVLPC_STATS_ENABLE, val);
10187         } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
10188                    tg3_flag(tp, TSO_CAPABLE)) {
10189                 val = tr32(RCVLPC_STATS_ENABLE);
10190                 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
10191                 tw32(RCVLPC_STATS_ENABLE, val);
10192         } else {
10193                 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
10194         }
10195         tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
10196         tw32(SNDDATAI_STATSENAB, 0xffffff);
10197         tw32(SNDDATAI_STATSCTRL,
10198              (SNDDATAI_SCTRL_ENABLE |
10199               SNDDATAI_SCTRL_FASTUPD));
10200
10201         /* Setup host coalescing engine. */
10202         tw32(HOSTCC_MODE, 0);
10203         for (i = 0; i < 2000; i++) {
10204                 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
10205                         break;
10206                 udelay(10);
10207         }
10208
10209         __tg3_set_coalesce(tp, &tp->coal);
10210
10211         if (!tg3_flag(tp, 5705_PLUS)) {
10212                 /* Status/statistics block address.  See tg3_timer,
10213                  * the tg3_periodic_fetch_stats call there, and
10214                  * tg3_get_stats to see how this works for 5705/5750 chips.
10215                  */
10216                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
10217                      ((u64) tp->stats_mapping >> 32));
10218                 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
10219                      ((u64) tp->stats_mapping & 0xffffffff));
10220                 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
10221
10222                 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
10223
10224                 /* Clear statistics and status block memory areas */
10225                 for (i = NIC_SRAM_STATS_BLK;
10226                      i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
10227                      i += sizeof(u32)) {
10228                         tg3_write_mem(tp, i, 0);
10229                         udelay(40);
10230                 }
10231         }
10232
10233         tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
10234
10235         tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
10236         tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
10237         if (!tg3_flag(tp, 5705_PLUS))
10238                 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
10239
10240         if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
10241                 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT;
10242                 /* reset to prevent losing 1st rx packet intermittently */
10243                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10244                 udelay(10);
10245         }
10246
10247         tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
10248                         MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE |
10249                         MAC_MODE_FHDE_ENABLE;
10250         if (tg3_flag(tp, ENABLE_APE))
10251                 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
10252         if (!tg3_flag(tp, 5705_PLUS) &&
10253             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10254             tg3_asic_rev(tp) != ASIC_REV_5700)
10255                 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
10256         tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
10257         udelay(40);
10258
10259         /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
10260          * If TG3_FLAG_IS_NIC is zero, we should read the
10261          * register to preserve the GPIO settings for LOMs. The GPIOs,
10262          * whether used as inputs or outputs, are set by boot code after
10263          * reset.
10264          */
10265         if (!tg3_flag(tp, IS_NIC)) {
10266                 u32 gpio_mask;
10267
10268                 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
10269                             GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
10270                             GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
10271
10272                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
10273                         gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
10274                                      GRC_LCLCTRL_GPIO_OUTPUT3;
10275
10276                 if (tg3_asic_rev(tp) == ASIC_REV_5755)
10277                         gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
10278
10279                 tp->grc_local_ctrl &= ~gpio_mask;
10280                 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
10281
10282                 /* GPIO1 must be driven high for eeprom write protect */
10283                 if (tg3_flag(tp, EEPROM_WRITE_PROT))
10284                         tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10285                                                GRC_LCLCTRL_GPIO_OUTPUT1);
10286         }
10287         tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10288         udelay(100);
10289
10290         if (tg3_flag(tp, USING_MSIX)) {
10291                 val = tr32(MSGINT_MODE);
10292                 val |= MSGINT_MODE_ENABLE;
10293                 if (tp->irq_cnt > 1)
10294                         val |= MSGINT_MODE_MULTIVEC_EN;
10295                 if (!tg3_flag(tp, 1SHOT_MSI))
10296                         val |= MSGINT_MODE_ONE_SHOT_DISABLE;
10297                 tw32(MSGINT_MODE, val);
10298         }
10299
10300         if (!tg3_flag(tp, 5705_PLUS)) {
10301                 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
10302                 udelay(40);
10303         }
10304
10305         val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
10306                WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
10307                WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
10308                WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
10309                WDMAC_MODE_LNGREAD_ENAB);
10310
10311         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
10312             tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
10313                 if (tg3_flag(tp, TSO_CAPABLE) &&
10314                     (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 ||
10315                      tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A2)) {
10316                         /* nothing */
10317                 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
10318                            !tg3_flag(tp, IS_5788)) {
10319                         val |= WDMAC_MODE_RX_ACCEL;
10320                 }
10321         }
10322
10323         /* Enable host coalescing bug fix */
10324         if (tg3_flag(tp, 5755_PLUS))
10325                 val |= WDMAC_MODE_STATUS_TAG_FIX;
10326
10327         if (tg3_asic_rev(tp) == ASIC_REV_5785)
10328                 val |= WDMAC_MODE_BURST_ALL_DATA;
10329
10330         tw32_f(WDMAC_MODE, val);
10331         udelay(40);
10332
10333         if (tg3_flag(tp, PCIX_MODE)) {
10334                 u16 pcix_cmd;
10335
10336                 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10337                                      &pcix_cmd);
10338                 if (tg3_asic_rev(tp) == ASIC_REV_5703) {
10339                         pcix_cmd &= ~PCI_X_CMD_MAX_READ;
10340                         pcix_cmd |= PCI_X_CMD_READ_2K;
10341                 } else if (tg3_asic_rev(tp) == ASIC_REV_5704) {
10342                         pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
10343                         pcix_cmd |= PCI_X_CMD_READ_2K;
10344                 }
10345                 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
10346                                       pcix_cmd);
10347         }
10348
10349         tw32_f(RDMAC_MODE, rdmac_mode);
10350         udelay(40);
10351
10352         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
10353             tg3_asic_rev(tp) == ASIC_REV_5720) {
10354                 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
10355                         if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
10356                                 break;
10357                 }
10358                 if (i < TG3_NUM_RDMA_CHANNELS) {
10359                         val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10360                         val |= tg3_lso_rd_dma_workaround_bit(tp);
10361                         tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10362                         tg3_flag_set(tp, 5719_5720_RDMA_BUG);
10363                 }
10364         }
10365
10366         tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
10367         if (!tg3_flag(tp, 5705_PLUS))
10368                 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
10369
10370         if (tg3_asic_rev(tp) == ASIC_REV_5761)
10371                 tw32(SNDDATAC_MODE,
10372                      SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
10373         else
10374                 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
10375
10376         tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
10377         tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
10378         val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ;
10379         if (tg3_flag(tp, LRG_PROD_RING_CAP))
10380                 val |= RCVDBDI_MODE_LRG_RING_SZ;
10381         tw32(RCVDBDI_MODE, val);
10382         tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
10383         if (tg3_flag(tp, HW_TSO_1) ||
10384             tg3_flag(tp, HW_TSO_2) ||
10385             tg3_flag(tp, HW_TSO_3))
10386                 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
10387         val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE;
10388         if (tg3_flag(tp, ENABLE_TSS))
10389                 val |= SNDBDI_MODE_MULTI_TXQ_EN;
10390         tw32(SNDBDI_MODE, val);
10391         tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
10392
10393         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
10394                 err = tg3_load_5701_a0_firmware_fix(tp);
10395                 if (err)
10396                         return err;
10397         }
10398
10399         if (tg3_asic_rev(tp) == ASIC_REV_57766) {
10400                 /* Ignore any errors for the firmware download. If download
10401                  * fails, the device will operate with EEE disabled
10402                  */
10403                 tg3_load_57766_firmware(tp);
10404         }
10405
10406         if (tg3_flag(tp, TSO_CAPABLE)) {
10407                 err = tg3_load_tso_firmware(tp);
10408                 if (err)
10409                         return err;
10410         }
10411
10412         tp->tx_mode = TX_MODE_ENABLE;
10413
10414         if (tg3_flag(tp, 5755_PLUS) ||
10415             tg3_asic_rev(tp) == ASIC_REV_5906)
10416                 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX;
10417
10418         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
10419             tg3_asic_rev(tp) == ASIC_REV_5762) {
10420                 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE;
10421                 tp->tx_mode &= ~val;
10422                 tp->tx_mode |= tr32(MAC_TX_MODE) & val;
10423         }
10424
10425         tw32_f(MAC_TX_MODE, tp->tx_mode);
10426         udelay(100);
10427
10428         if (tg3_flag(tp, ENABLE_RSS)) {
10429                 tg3_rss_write_indir_tbl(tp);
10430
10431                 /* Setup the "secret" hash key. */
10432                 tw32(MAC_RSS_HASH_KEY_0, 0x5f865437);
10433                 tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc);
10434                 tw32(MAC_RSS_HASH_KEY_2, 0x50103a45);
10435                 tw32(MAC_RSS_HASH_KEY_3, 0x36621985);
10436                 tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8);
10437                 tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e);
10438                 tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556);
10439                 tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe);
10440                 tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7);
10441                 tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481);
10442         }
10443
10444         tp->rx_mode = RX_MODE_ENABLE;
10445         if (tg3_flag(tp, 5755_PLUS))
10446                 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
10447
10448         if (tg3_asic_rev(tp) == ASIC_REV_5762)
10449                 tp->rx_mode |= RX_MODE_IPV4_FRAG_FIX;
10450
10451         if (tg3_flag(tp, ENABLE_RSS))
10452                 tp->rx_mode |= RX_MODE_RSS_ENABLE |
10453                                RX_MODE_RSS_ITBL_HASH_BITS_7 |
10454                                RX_MODE_RSS_IPV6_HASH_EN |
10455                                RX_MODE_RSS_TCP_IPV6_HASH_EN |
10456                                RX_MODE_RSS_IPV4_HASH_EN |
10457                                RX_MODE_RSS_TCP_IPV4_HASH_EN;
10458
10459         tw32_f(MAC_RX_MODE, tp->rx_mode);
10460         udelay(10);
10461
10462         tw32(MAC_LED_CTRL, tp->led_ctrl);
10463
10464         tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
10465         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10466                 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
10467                 udelay(10);
10468         }
10469         tw32_f(MAC_RX_MODE, tp->rx_mode);
10470         udelay(10);
10471
10472         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
10473                 if ((tg3_asic_rev(tp) == ASIC_REV_5704) &&
10474                     !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) {
10475                         /* Set drive transmission level to 1.2V  */
10476                         /* only if the signal pre-emphasis bit is not set  */
10477                         val = tr32(MAC_SERDES_CFG);
10478                         val &= 0xfffff000;
10479                         val |= 0x880;
10480                         tw32(MAC_SERDES_CFG, val);
10481                 }
10482                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1)
10483                         tw32(MAC_SERDES_CFG, 0x616000);
10484         }
10485
10486         /* Prevent chip from dropping frames when flow control
10487          * is enabled.
10488          */
10489         if (tg3_flag(tp, 57765_CLASS))
10490                 val = 1;
10491         else
10492                 val = 2;
10493         tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val);
10494
10495         if (tg3_asic_rev(tp) == ASIC_REV_5704 &&
10496             (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
10497                 /* Use hardware link auto-negotiation */
10498                 tg3_flag_set(tp, HW_AUTONEG);
10499         }
10500
10501         if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10502             tg3_asic_rev(tp) == ASIC_REV_5714) {
10503                 u32 tmp;
10504
10505                 tmp = tr32(SERDES_RX_CTRL);
10506                 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
10507                 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
10508                 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
10509                 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10510         }
10511
10512         if (!tg3_flag(tp, USE_PHYLIB)) {
10513                 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
10514                         tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
10515
10516                 err = tg3_setup_phy(tp, false);
10517                 if (err)
10518                         return err;
10519
10520                 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10521                     !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
10522                         u32 tmp;
10523
10524                         /* Clear CRC stats. */
10525                         if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
10526                                 tg3_writephy(tp, MII_TG3_TEST1,
10527                                              tmp | MII_TG3_TEST1_CRC_EN);
10528                                 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
10529                         }
10530                 }
10531         }
10532
10533         __tg3_set_rx_mode(tp->dev);
10534
10535         /* Initialize receive rules. */
10536         tw32(MAC_RCV_RULE_0,  0xc2000000 & RCV_RULE_DISABLE_MASK);
10537         tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
10538         tw32(MAC_RCV_RULE_1,  0x86000004 & RCV_RULE_DISABLE_MASK);
10539         tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
10540
10541         if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
10542                 limit = 8;
10543         else
10544                 limit = 16;
10545         if (tg3_flag(tp, ENABLE_ASF))
10546                 limit -= 4;
10547         switch (limit) {
10548         case 16:
10549                 tw32(MAC_RCV_RULE_15,  0); tw32(MAC_RCV_VALUE_15,  0);
10550         case 15:
10551                 tw32(MAC_RCV_RULE_14,  0); tw32(MAC_RCV_VALUE_14,  0);
10552         case 14:
10553                 tw32(MAC_RCV_RULE_13,  0); tw32(MAC_RCV_VALUE_13,  0);
10554         case 13:
10555                 tw32(MAC_RCV_RULE_12,  0); tw32(MAC_RCV_VALUE_12,  0);
10556         case 12:
10557                 tw32(MAC_RCV_RULE_11,  0); tw32(MAC_RCV_VALUE_11,  0);
10558         case 11:
10559                 tw32(MAC_RCV_RULE_10,  0); tw32(MAC_RCV_VALUE_10,  0);
10560         case 10:
10561                 tw32(MAC_RCV_RULE_9,  0); tw32(MAC_RCV_VALUE_9,  0);
10562         case 9:
10563                 tw32(MAC_RCV_RULE_8,  0); tw32(MAC_RCV_VALUE_8,  0);
10564         case 8:
10565                 tw32(MAC_RCV_RULE_7,  0); tw32(MAC_RCV_VALUE_7,  0);
10566         case 7:
10567                 tw32(MAC_RCV_RULE_6,  0); tw32(MAC_RCV_VALUE_6,  0);
10568         case 6:
10569                 tw32(MAC_RCV_RULE_5,  0); tw32(MAC_RCV_VALUE_5,  0);
10570         case 5:
10571                 tw32(MAC_RCV_RULE_4,  0); tw32(MAC_RCV_VALUE_4,  0);
10572         case 4:
10573                 /* tw32(MAC_RCV_RULE_3,  0); tw32(MAC_RCV_VALUE_3,  0); */
10574         case 3:
10575                 /* tw32(MAC_RCV_RULE_2,  0); tw32(MAC_RCV_VALUE_2,  0); */
10576         case 2:
10577         case 1:
10578
10579         default:
10580                 break;
10581         }
10582
10583         if (tg3_flag(tp, ENABLE_APE))
10584                 /* Write our heartbeat update interval to APE. */
10585                 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
10586                                 APE_HOST_HEARTBEAT_INT_DISABLE);
10587
10588         tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
10589
10590         return 0;
10591 }
10592
10593 /* Called at device open time to get the chip ready for
10594  * packet processing.  Invoked with tp->lock held.
10595  */
10596 static int tg3_init_hw(struct tg3 *tp, bool reset_phy)
10597 {
10598         /* Chip may have been just powered on. If so, the boot code may still
10599          * be running initialization. Wait for it to finish to avoid races in
10600          * accessing the hardware.
10601          */
10602         tg3_enable_register_access(tp);
10603         tg3_poll_fw(tp);
10604
10605         tg3_switch_clocks(tp);
10606
10607         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10608
10609         return tg3_reset_hw(tp, reset_phy);
10610 }
10611
10612 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
10613 {
10614         int i;
10615
10616         for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) {
10617                 u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN;
10618
10619                 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
10620                 off += len;
10621
10622                 if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
10623                     !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE))
10624                         memset(ocir, 0, TG3_OCIR_LEN);
10625         }
10626 }
10627
10628 /* sysfs attributes for hwmon */
10629 static ssize_t tg3_show_temp(struct device *dev,
10630                              struct device_attribute *devattr, char *buf)
10631 {
10632         struct pci_dev *pdev = to_pci_dev(dev);
10633         struct net_device *netdev = pci_get_drvdata(pdev);
10634         struct tg3 *tp = netdev_priv(netdev);
10635         struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
10636         u32 temperature;
10637
10638         spin_lock_bh(&tp->lock);
10639         tg3_ape_scratchpad_read(tp, &temperature, attr->index,
10640                                 sizeof(temperature));
10641         spin_unlock_bh(&tp->lock);
10642         return sprintf(buf, "%u\n", temperature);
10643 }
10644
10645
10646 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tg3_show_temp, NULL,
10647                           TG3_TEMP_SENSOR_OFFSET);
10648 static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL,
10649                           TG3_TEMP_CAUTION_OFFSET);
10650 static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL,
10651                           TG3_TEMP_MAX_OFFSET);
10652
10653 static struct attribute *tg3_attributes[] = {
10654         &sensor_dev_attr_temp1_input.dev_attr.attr,
10655         &sensor_dev_attr_temp1_crit.dev_attr.attr,
10656         &sensor_dev_attr_temp1_max.dev_attr.attr,
10657         NULL
10658 };
10659
10660 static const struct attribute_group tg3_group = {
10661         .attrs = tg3_attributes,
10662 };
10663
10664 static void tg3_hwmon_close(struct tg3 *tp)
10665 {
10666         if (tp->hwmon_dev) {
10667                 hwmon_device_unregister(tp->hwmon_dev);
10668                 tp->hwmon_dev = NULL;
10669                 sysfs_remove_group(&tp->pdev->dev.kobj, &tg3_group);
10670         }
10671 }
10672
10673 static void tg3_hwmon_open(struct tg3 *tp)
10674 {
10675         int i, err;
10676         u32 size = 0;
10677         struct pci_dev *pdev = tp->pdev;
10678         struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
10679
10680         tg3_sd_scan_scratchpad(tp, ocirs);
10681
10682         for (i = 0; i < TG3_SD_NUM_RECS; i++) {
10683                 if (!ocirs[i].src_data_length)
10684                         continue;
10685
10686                 size += ocirs[i].src_hdr_length;
10687                 size += ocirs[i].src_data_length;
10688         }
10689
10690         if (!size)
10691                 return;
10692
10693         /* Register hwmon sysfs hooks */
10694         err = sysfs_create_group(&pdev->dev.kobj, &tg3_group);
10695         if (err) {
10696                 dev_err(&pdev->dev, "Cannot create sysfs group, aborting\n");
10697                 return;
10698         }
10699
10700         tp->hwmon_dev = hwmon_device_register(&pdev->dev);
10701         if (IS_ERR(tp->hwmon_dev)) {
10702                 tp->hwmon_dev = NULL;
10703                 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
10704                 sysfs_remove_group(&pdev->dev.kobj, &tg3_group);
10705         }
10706 }
10707
10708
10709 #define TG3_STAT_ADD32(PSTAT, REG) \
10710 do {    u32 __val = tr32(REG); \
10711         (PSTAT)->low += __val; \
10712         if ((PSTAT)->low < __val) \
10713                 (PSTAT)->high += 1; \
10714 } while (0)
10715
10716 static void tg3_periodic_fetch_stats(struct tg3 *tp)
10717 {
10718         struct tg3_hw_stats *sp = tp->hw_stats;
10719
10720         if (!tp->link_up)
10721                 return;
10722
10723         TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
10724         TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
10725         TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
10726         TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
10727         TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
10728         TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
10729         TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
10730         TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
10731         TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
10732         TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
10733         TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
10734         TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
10735         TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
10736         if (unlikely(tg3_flag(tp, 5719_5720_RDMA_BUG) &&
10737                      (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low +
10738                       sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
10739                 u32 val;
10740
10741                 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL);
10742                 val &= ~tg3_lso_rd_dma_workaround_bit(tp);
10743                 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val);
10744                 tg3_flag_clear(tp, 5719_5720_RDMA_BUG);
10745         }
10746
10747         TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
10748         TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
10749         TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
10750         TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
10751         TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
10752         TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
10753         TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
10754         TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
10755         TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
10756         TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
10757         TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
10758         TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
10759         TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
10760         TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
10761
10762         TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
10763         if (tg3_asic_rev(tp) != ASIC_REV_5717 &&
10764             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0 &&
10765             tg3_chip_rev_id(tp) != CHIPREV_ID_5720_A0) {
10766                 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
10767         } else {
10768                 u32 val = tr32(HOSTCC_FLOW_ATTN);
10769                 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
10770                 if (val) {
10771                         tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM);
10772                         sp->rx_discards.low += val;
10773                         if (sp->rx_discards.low < val)
10774                                 sp->rx_discards.high += 1;
10775                 }
10776                 sp->mbuf_lwm_thresh_hit = sp->rx_discards;
10777         }
10778         TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
10779 }
10780
10781 static void tg3_chk_missed_msi(struct tg3 *tp)
10782 {
10783         u32 i;
10784
10785         for (i = 0; i < tp->irq_cnt; i++) {
10786                 struct tg3_napi *tnapi = &tp->napi[i];
10787
10788                 if (tg3_has_work(tnapi)) {
10789                         if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
10790                             tnapi->last_tx_cons == tnapi->tx_cons) {
10791                                 if (tnapi->chk_msi_cnt < 1) {
10792                                         tnapi->chk_msi_cnt++;
10793                                         return;
10794                                 }
10795                                 tg3_msi(0, tnapi);
10796                         }
10797                 }
10798                 tnapi->chk_msi_cnt = 0;
10799                 tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
10800                 tnapi->last_tx_cons = tnapi->tx_cons;
10801         }
10802 }
10803
10804 static void tg3_timer(unsigned long __opaque)
10805 {
10806         struct tg3 *tp = (struct tg3 *) __opaque;
10807
10808         if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING))
10809                 goto restart_timer;
10810
10811         spin_lock(&tp->lock);
10812
10813         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
10814             tg3_flag(tp, 57765_CLASS))
10815                 tg3_chk_missed_msi(tp);
10816
10817         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
10818                 /* BCM4785: Flush posted writes from GbE to host memory. */
10819                 tr32(HOSTCC_MODE);
10820         }
10821
10822         if (!tg3_flag(tp, TAGGED_STATUS)) {
10823                 /* All of this garbage is because when using non-tagged
10824                  * IRQ status the mailbox/status_block protocol the chip
10825                  * uses with the cpu is race prone.
10826                  */
10827                 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
10828                         tw32(GRC_LOCAL_CTRL,
10829                              tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
10830                 } else {
10831                         tw32(HOSTCC_MODE, tp->coalesce_mode |
10832                              HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW);
10833                 }
10834
10835                 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
10836                         spin_unlock(&tp->lock);
10837                         tg3_reset_task_schedule(tp);
10838                         goto restart_timer;
10839                 }
10840         }
10841
10842         /* This part only runs once per second. */
10843         if (!--tp->timer_counter) {
10844                 if (tg3_flag(tp, 5705_PLUS))
10845                         tg3_periodic_fetch_stats(tp);
10846
10847                 if (tp->setlpicnt && !--tp->setlpicnt)
10848                         tg3_phy_eee_enable(tp);
10849
10850                 if (tg3_flag(tp, USE_LINKCHG_REG)) {
10851                         u32 mac_stat;
10852                         int phy_event;
10853
10854                         mac_stat = tr32(MAC_STATUS);
10855
10856                         phy_event = 0;
10857                         if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) {
10858                                 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
10859                                         phy_event = 1;
10860                         } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
10861                                 phy_event = 1;
10862
10863                         if (phy_event)
10864                                 tg3_setup_phy(tp, false);
10865                 } else if (tg3_flag(tp, POLL_SERDES)) {
10866                         u32 mac_stat = tr32(MAC_STATUS);
10867                         int need_setup = 0;
10868
10869                         if (tp->link_up &&
10870                             (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
10871                                 need_setup = 1;
10872                         }
10873                         if (!tp->link_up &&
10874                             (mac_stat & (MAC_STATUS_PCS_SYNCED |
10875                                          MAC_STATUS_SIGNAL_DET))) {
10876                                 need_setup = 1;
10877                         }
10878                         if (need_setup) {
10879                                 if (!tp->serdes_counter) {
10880                                         tw32_f(MAC_MODE,
10881                                              (tp->mac_mode &
10882                                               ~MAC_MODE_PORT_MODE_MASK));
10883                                         udelay(40);
10884                                         tw32_f(MAC_MODE, tp->mac_mode);
10885                                         udelay(40);
10886                                 }
10887                                 tg3_setup_phy(tp, false);
10888                         }
10889                 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
10890                            tg3_flag(tp, 5780_CLASS)) {
10891                         tg3_serdes_parallel_detect(tp);
10892                 }
10893
10894                 tp->timer_counter = tp->timer_multiplier;
10895         }
10896
10897         /* Heartbeat is only sent once every 2 seconds.
10898          *
10899          * The heartbeat is to tell the ASF firmware that the host
10900          * driver is still alive.  In the event that the OS crashes,
10901          * ASF needs to reset the hardware to free up the FIFO space
10902          * that may be filled with rx packets destined for the host.
10903          * If the FIFO is full, ASF will no longer function properly.
10904          *
10905          * Unintended resets have been reported on real time kernels
10906          * where the timer doesn't run on time.  Netpoll will also have
10907          * same problem.
10908          *
10909          * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
10910          * to check the ring condition when the heartbeat is expiring
10911          * before doing the reset.  This will prevent most unintended
10912          * resets.
10913          */
10914         if (!--tp->asf_counter) {
10915                 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
10916                         tg3_wait_for_event_ack(tp);
10917
10918                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
10919                                       FWCMD_NICDRV_ALIVE3);
10920                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
10921                         tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
10922                                       TG3_FW_UPDATE_TIMEOUT_SEC);
10923
10924                         tg3_generate_fw_event(tp);
10925                 }
10926                 tp->asf_counter = tp->asf_multiplier;
10927         }
10928
10929         spin_unlock(&tp->lock);
10930
10931 restart_timer:
10932         tp->timer.expires = jiffies + tp->timer_offset;
10933         add_timer(&tp->timer);
10934 }
10935
10936 static void tg3_timer_init(struct tg3 *tp)
10937 {
10938         if (tg3_flag(tp, TAGGED_STATUS) &&
10939             tg3_asic_rev(tp) != ASIC_REV_5717 &&
10940             !tg3_flag(tp, 57765_CLASS))
10941                 tp->timer_offset = HZ;
10942         else
10943                 tp->timer_offset = HZ / 10;
10944
10945         BUG_ON(tp->timer_offset > HZ);
10946
10947         tp->timer_multiplier = (HZ / tp->timer_offset);
10948         tp->asf_multiplier = (HZ / tp->timer_offset) *
10949                              TG3_FW_UPDATE_FREQ_SEC;
10950
10951         init_timer(&tp->timer);
10952         tp->timer.data = (unsigned long) tp;
10953         tp->timer.function = tg3_timer;
10954 }
10955
10956 static void tg3_timer_start(struct tg3 *tp)
10957 {
10958         tp->asf_counter   = tp->asf_multiplier;
10959         tp->timer_counter = tp->timer_multiplier;
10960
10961         tp->timer.expires = jiffies + tp->timer_offset;
10962         add_timer(&tp->timer);
10963 }
10964
10965 static void tg3_timer_stop(struct tg3 *tp)
10966 {
10967         del_timer_sync(&tp->timer);
10968 }
10969
10970 /* Restart hardware after configuration changes, self-test, etc.
10971  * Invoked with tp->lock held.
10972  */
10973 static int tg3_restart_hw(struct tg3 *tp, bool reset_phy)
10974         __releases(tp->lock)
10975         __acquires(tp->lock)
10976 {
10977         int err;
10978
10979         err = tg3_init_hw(tp, reset_phy);
10980         if (err) {
10981                 netdev_err(tp->dev,
10982                            "Failed to re-initialize device, aborting\n");
10983                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10984                 tg3_full_unlock(tp);
10985                 tg3_timer_stop(tp);
10986                 tp->irq_sync = 0;
10987                 tg3_napi_enable(tp);
10988                 dev_close(tp->dev);
10989                 tg3_full_lock(tp, 0);
10990         }
10991         return err;
10992 }
10993
10994 static void tg3_reset_task(struct work_struct *work)
10995 {
10996         struct tg3 *tp = container_of(work, struct tg3, reset_task);
10997         int err;
10998
10999         tg3_full_lock(tp, 0);
11000
11001         if (!netif_running(tp->dev)) {
11002                 tg3_flag_clear(tp, RESET_TASK_PENDING);
11003                 tg3_full_unlock(tp);
11004                 return;
11005         }
11006
11007         tg3_full_unlock(tp);
11008
11009         tg3_phy_stop(tp);
11010
11011         tg3_netif_stop(tp);
11012
11013         tg3_full_lock(tp, 1);
11014
11015         if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
11016                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
11017                 tp->write32_rx_mbox = tg3_write_flush_reg32;
11018                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
11019                 tg3_flag_clear(tp, TX_RECOVERY_PENDING);
11020         }
11021
11022         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
11023         err = tg3_init_hw(tp, true);
11024         if (err)
11025                 goto out;
11026
11027         tg3_netif_start(tp);
11028
11029 out:
11030         tg3_full_unlock(tp);
11031
11032         if (!err)
11033                 tg3_phy_start(tp);
11034
11035         tg3_flag_clear(tp, RESET_TASK_PENDING);
11036 }
11037
11038 static int tg3_request_irq(struct tg3 *tp, int irq_num)
11039 {
11040         irq_handler_t fn;
11041         unsigned long flags;
11042         char *name;
11043         struct tg3_napi *tnapi = &tp->napi[irq_num];
11044
11045         if (tp->irq_cnt == 1)
11046                 name = tp->dev->name;
11047         else {
11048                 name = &tnapi->irq_lbl[0];
11049                 if (tnapi->tx_buffers && tnapi->rx_rcb)
11050                         snprintf(name, IFNAMSIZ,
11051                                  "%s-txrx-%d", tp->dev->name, irq_num);
11052                 else if (tnapi->tx_buffers)
11053                         snprintf(name, IFNAMSIZ,
11054                                  "%s-tx-%d", tp->dev->name, irq_num);
11055                 else if (tnapi->rx_rcb)
11056                         snprintf(name, IFNAMSIZ,
11057                                  "%s-rx-%d", tp->dev->name, irq_num);
11058                 else
11059                         snprintf(name, IFNAMSIZ,
11060                                  "%s-%d", tp->dev->name, irq_num);
11061                 name[IFNAMSIZ-1] = 0;
11062         }
11063
11064         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11065                 fn = tg3_msi;
11066                 if (tg3_flag(tp, 1SHOT_MSI))
11067                         fn = tg3_msi_1shot;
11068                 flags = 0;
11069         } else {
11070                 fn = tg3_interrupt;
11071                 if (tg3_flag(tp, TAGGED_STATUS))
11072                         fn = tg3_interrupt_tagged;
11073                 flags = IRQF_SHARED;
11074         }
11075
11076         return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
11077 }
11078
11079 static int tg3_test_interrupt(struct tg3 *tp)
11080 {
11081         struct tg3_napi *tnapi = &tp->napi[0];
11082         struct net_device *dev = tp->dev;
11083         int err, i, intr_ok = 0;
11084         u32 val;
11085
11086         if (!netif_running(dev))
11087                 return -ENODEV;
11088
11089         tg3_disable_ints(tp);
11090
11091         free_irq(tnapi->irq_vec, tnapi);
11092
11093         /*
11094          * Turn off MSI one shot mode.  Otherwise this test has no
11095          * observable way to know whether the interrupt was delivered.
11096          */
11097         if (tg3_flag(tp, 57765_PLUS)) {
11098                 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE;
11099                 tw32(MSGINT_MODE, val);
11100         }
11101
11102         err = request_irq(tnapi->irq_vec, tg3_test_isr,
11103                           IRQF_SHARED, dev->name, tnapi);
11104         if (err)
11105                 return err;
11106
11107         tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
11108         tg3_enable_ints(tp);
11109
11110         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
11111                tnapi->coal_now);
11112
11113         for (i = 0; i < 5; i++) {
11114                 u32 int_mbox, misc_host_ctrl;
11115
11116                 int_mbox = tr32_mailbox(tnapi->int_mbox);
11117                 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
11118
11119                 if ((int_mbox != 0) ||
11120                     (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
11121                         intr_ok = 1;
11122                         break;
11123                 }
11124
11125                 if (tg3_flag(tp, 57765_PLUS) &&
11126                     tnapi->hw_status->status_tag != tnapi->last_tag)
11127                         tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
11128
11129                 msleep(10);
11130         }
11131
11132         tg3_disable_ints(tp);
11133
11134         free_irq(tnapi->irq_vec, tnapi);
11135
11136         err = tg3_request_irq(tp, 0);
11137
11138         if (err)
11139                 return err;
11140
11141         if (intr_ok) {
11142                 /* Reenable MSI one shot mode. */
11143                 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
11144                         val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE;
11145                         tw32(MSGINT_MODE, val);
11146                 }
11147                 return 0;
11148         }
11149
11150         return -EIO;
11151 }
11152
11153 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
11154  * successfully restored
11155  */
11156 static int tg3_test_msi(struct tg3 *tp)
11157 {
11158         int err;
11159         u16 pci_cmd;
11160
11161         if (!tg3_flag(tp, USING_MSI))
11162                 return 0;
11163
11164         /* Turn off SERR reporting in case MSI terminates with Master
11165          * Abort.
11166          */
11167         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11168         pci_write_config_word(tp->pdev, PCI_COMMAND,
11169                               pci_cmd & ~PCI_COMMAND_SERR);
11170
11171         err = tg3_test_interrupt(tp);
11172
11173         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11174
11175         if (!err)
11176                 return 0;
11177
11178         /* other failures */
11179         if (err != -EIO)
11180                 return err;
11181
11182         /* MSI test failed, go back to INTx mode */
11183         netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
11184                     "to INTx mode. Please report this failure to the PCI "
11185                     "maintainer and include system chipset information\n");
11186
11187         free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11188
11189         pci_disable_msi(tp->pdev);
11190
11191         tg3_flag_clear(tp, USING_MSI);
11192         tp->napi[0].irq_vec = tp->pdev->irq;
11193
11194         err = tg3_request_irq(tp, 0);
11195         if (err)
11196                 return err;
11197
11198         /* Need to reset the chip because the MSI cycle may have terminated
11199          * with Master Abort.
11200          */
11201         tg3_full_lock(tp, 1);
11202
11203         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11204         err = tg3_init_hw(tp, true);
11205
11206         tg3_full_unlock(tp);
11207
11208         if (err)
11209                 free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
11210
11211         return err;
11212 }
11213
11214 static int tg3_request_firmware(struct tg3 *tp)
11215 {
11216         const struct tg3_firmware_hdr *fw_hdr;
11217
11218         if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
11219                 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
11220                            tp->fw_needed);
11221                 return -ENOENT;
11222         }
11223
11224         fw_hdr = (struct tg3_firmware_hdr *)tp->fw->data;
11225
11226         /* Firmware blob starts with version numbers, followed by
11227          * start address and _full_ length including BSS sections
11228          * (which must be longer than the actual data, of course
11229          */
11230
11231         tp->fw_len = be32_to_cpu(fw_hdr->len);  /* includes bss */
11232         if (tp->fw_len < (tp->fw->size - TG3_FW_HDR_LEN)) {
11233                 netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
11234                            tp->fw_len, tp->fw_needed);
11235                 release_firmware(tp->fw);
11236                 tp->fw = NULL;
11237                 return -EINVAL;
11238         }
11239
11240         /* We no longer need firmware; we have it. */
11241         tp->fw_needed = NULL;
11242         return 0;
11243 }
11244
11245 static u32 tg3_irq_count(struct tg3 *tp)
11246 {
11247         u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
11248
11249         if (irq_cnt > 1) {
11250                 /* We want as many rx rings enabled as there are cpus.
11251                  * In multiqueue MSI-X mode, the first MSI-X vector
11252                  * only deals with link interrupts, etc, so we add
11253                  * one to the number of vectors we are requesting.
11254                  */
11255                 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
11256         }
11257
11258         return irq_cnt;
11259 }
11260
11261 static bool tg3_enable_msix(struct tg3 *tp)
11262 {
11263         int i, rc;
11264         struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
11265
11266         tp->txq_cnt = tp->txq_req;
11267         tp->rxq_cnt = tp->rxq_req;
11268         if (!tp->rxq_cnt)
11269                 tp->rxq_cnt = netif_get_num_default_rss_queues();
11270         if (tp->rxq_cnt > tp->rxq_max)
11271                 tp->rxq_cnt = tp->rxq_max;
11272
11273         /* Disable multiple TX rings by default.  Simple round-robin hardware
11274          * scheduling of the TX rings can cause starvation of rings with
11275          * small packets when other rings have TSO or jumbo packets.
11276          */
11277         if (!tp->txq_req)
11278                 tp->txq_cnt = 1;
11279
11280         tp->irq_cnt = tg3_irq_count(tp);
11281
11282         for (i = 0; i < tp->irq_max; i++) {
11283                 msix_ent[i].entry  = i;
11284                 msix_ent[i].vector = 0;
11285         }
11286
11287         rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt);
11288         if (rc < 0) {
11289                 return false;
11290         } else if (rc != 0) {
11291                 if (pci_enable_msix(tp->pdev, msix_ent, rc))
11292                         return false;
11293                 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
11294                               tp->irq_cnt, rc);
11295                 tp->irq_cnt = rc;
11296                 tp->rxq_cnt = max(rc - 1, 1);
11297                 if (tp->txq_cnt)
11298                         tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
11299         }
11300
11301         for (i = 0; i < tp->irq_max; i++)
11302                 tp->napi[i].irq_vec = msix_ent[i].vector;
11303
11304         if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
11305                 pci_disable_msix(tp->pdev);
11306                 return false;
11307         }
11308
11309         if (tp->irq_cnt == 1)
11310                 return true;
11311
11312         tg3_flag_set(tp, ENABLE_RSS);
11313
11314         if (tp->txq_cnt > 1)
11315                 tg3_flag_set(tp, ENABLE_TSS);
11316
11317         netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt);
11318
11319         return true;
11320 }
11321
11322 static void tg3_ints_init(struct tg3 *tp)
11323 {
11324         if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
11325             !tg3_flag(tp, TAGGED_STATUS)) {
11326                 /* All MSI supporting chips should support tagged
11327                  * status.  Assert that this is the case.
11328                  */
11329                 netdev_warn(tp->dev,
11330                             "MSI without TAGGED_STATUS? Not using MSI\n");
11331                 goto defcfg;
11332         }
11333
11334         if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
11335                 tg3_flag_set(tp, USING_MSIX);
11336         else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
11337                 tg3_flag_set(tp, USING_MSI);
11338
11339         if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
11340                 u32 msi_mode = tr32(MSGINT_MODE);
11341                 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
11342                         msi_mode |= MSGINT_MODE_MULTIVEC_EN;
11343                 if (!tg3_flag(tp, 1SHOT_MSI))
11344                         msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
11345                 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
11346         }
11347 defcfg:
11348         if (!tg3_flag(tp, USING_MSIX)) {
11349                 tp->irq_cnt = 1;
11350                 tp->napi[0].irq_vec = tp->pdev->irq;
11351         }
11352
11353         if (tp->irq_cnt == 1) {
11354                 tp->txq_cnt = 1;
11355                 tp->rxq_cnt = 1;
11356                 netif_set_real_num_tx_queues(tp->dev, 1);
11357                 netif_set_real_num_rx_queues(tp->dev, 1);
11358         }
11359 }
11360
11361 static void tg3_ints_fini(struct tg3 *tp)
11362 {
11363         if (tg3_flag(tp, USING_MSIX))
11364                 pci_disable_msix(tp->pdev);
11365         else if (tg3_flag(tp, USING_MSI))
11366                 pci_disable_msi(tp->pdev);
11367         tg3_flag_clear(tp, USING_MSI);
11368         tg3_flag_clear(tp, USING_MSIX);
11369         tg3_flag_clear(tp, ENABLE_RSS);
11370         tg3_flag_clear(tp, ENABLE_TSS);
11371 }
11372
11373 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
11374                      bool init)
11375 {
11376         struct net_device *dev = tp->dev;
11377         int i, err;
11378
11379         /*
11380          * Setup interrupts first so we know how
11381          * many NAPI resources to allocate
11382          */
11383         tg3_ints_init(tp);
11384
11385         tg3_rss_check_indir_tbl(tp);
11386
11387         /* The placement of this call is tied
11388          * to the setup and use of Host TX descriptors.
11389          */
11390         err = tg3_alloc_consistent(tp);
11391         if (err)
11392                 goto out_ints_fini;
11393
11394         tg3_napi_init(tp);
11395
11396         tg3_napi_enable(tp);
11397
11398         for (i = 0; i < tp->irq_cnt; i++) {
11399                 struct tg3_napi *tnapi = &tp->napi[i];
11400                 err = tg3_request_irq(tp, i);
11401                 if (err) {
11402                         for (i--; i >= 0; i--) {
11403                                 tnapi = &tp->napi[i];
11404                                 free_irq(tnapi->irq_vec, tnapi);
11405                         }
11406                         goto out_napi_fini;
11407                 }
11408         }
11409
11410         tg3_full_lock(tp, 0);
11411
11412         if (init)
11413                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
11414
11415         err = tg3_init_hw(tp, reset_phy);
11416         if (err) {
11417                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11418                 tg3_free_rings(tp);
11419         }
11420
11421         tg3_full_unlock(tp);
11422
11423         if (err)
11424                 goto out_free_irq;
11425
11426         if (test_irq && tg3_flag(tp, USING_MSI)) {
11427                 err = tg3_test_msi(tp);
11428
11429                 if (err) {
11430                         tg3_full_lock(tp, 0);
11431                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11432                         tg3_free_rings(tp);
11433                         tg3_full_unlock(tp);
11434
11435                         goto out_napi_fini;
11436                 }
11437
11438                 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
11439                         u32 val = tr32(PCIE_TRANSACTION_CFG);
11440
11441                         tw32(PCIE_TRANSACTION_CFG,
11442                              val | PCIE_TRANS_CFG_1SHOT_MSI);
11443                 }
11444         }
11445
11446         tg3_phy_start(tp);
11447
11448         tg3_hwmon_open(tp);
11449
11450         tg3_full_lock(tp, 0);
11451
11452         tg3_timer_start(tp);
11453         tg3_flag_set(tp, INIT_COMPLETE);
11454         tg3_enable_ints(tp);
11455
11456         if (init)
11457                 tg3_ptp_init(tp);
11458         else
11459                 tg3_ptp_resume(tp);
11460
11461
11462         tg3_full_unlock(tp);
11463
11464         netif_tx_start_all_queues(dev);
11465
11466         /*
11467          * Reset loopback feature if it was turned on while the device was down
11468          * make sure that it's installed properly now.
11469          */
11470         if (dev->features & NETIF_F_LOOPBACK)
11471                 tg3_set_loopback(dev, dev->features);
11472
11473         return 0;
11474
11475 out_free_irq:
11476         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11477                 struct tg3_napi *tnapi = &tp->napi[i];
11478                 free_irq(tnapi->irq_vec, tnapi);
11479         }
11480
11481 out_napi_fini:
11482         tg3_napi_disable(tp);
11483         tg3_napi_fini(tp);
11484         tg3_free_consistent(tp);
11485
11486 out_ints_fini:
11487         tg3_ints_fini(tp);
11488
11489         return err;
11490 }
11491
11492 static void tg3_stop(struct tg3 *tp)
11493 {
11494         int i;
11495
11496         tg3_reset_task_cancel(tp);
11497         tg3_netif_stop(tp);
11498
11499         tg3_timer_stop(tp);
11500
11501         tg3_hwmon_close(tp);
11502
11503         tg3_phy_stop(tp);
11504
11505         tg3_full_lock(tp, 1);
11506
11507         tg3_disable_ints(tp);
11508
11509         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11510         tg3_free_rings(tp);
11511         tg3_flag_clear(tp, INIT_COMPLETE);
11512
11513         tg3_full_unlock(tp);
11514
11515         for (i = tp->irq_cnt - 1; i >= 0; i--) {
11516                 struct tg3_napi *tnapi = &tp->napi[i];
11517                 free_irq(tnapi->irq_vec, tnapi);
11518         }
11519
11520         tg3_ints_fini(tp);
11521
11522         tg3_napi_fini(tp);
11523
11524         tg3_free_consistent(tp);
11525 }
11526
11527 static int tg3_open(struct net_device *dev)
11528 {
11529         struct tg3 *tp = netdev_priv(dev);
11530         int err;
11531
11532         if (tp->fw_needed) {
11533                 err = tg3_request_firmware(tp);
11534                 if (tg3_asic_rev(tp) == ASIC_REV_57766) {
11535                         if (err) {
11536                                 netdev_warn(tp->dev, "EEE capability disabled\n");
11537                                 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
11538                         } else if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
11539                                 netdev_warn(tp->dev, "EEE capability restored\n");
11540                                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
11541                         }
11542                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0) {
11543                         if (err)
11544                                 return err;
11545                 } else if (err) {
11546                         netdev_warn(tp->dev, "TSO capability disabled\n");
11547                         tg3_flag_clear(tp, TSO_CAPABLE);
11548                 } else if (!tg3_flag(tp, TSO_CAPABLE)) {
11549                         netdev_notice(tp->dev, "TSO capability restored\n");
11550                         tg3_flag_set(tp, TSO_CAPABLE);
11551                 }
11552         }
11553
11554         tg3_carrier_off(tp);
11555
11556         err = tg3_power_up(tp);
11557         if (err)
11558                 return err;
11559
11560         tg3_full_lock(tp, 0);
11561
11562         tg3_disable_ints(tp);
11563         tg3_flag_clear(tp, INIT_COMPLETE);
11564
11565         tg3_full_unlock(tp);
11566
11567         err = tg3_start(tp,
11568                         !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN),
11569                         true, true);
11570         if (err) {
11571                 tg3_frob_aux_power(tp, false);
11572                 pci_set_power_state(tp->pdev, PCI_D3hot);
11573         }
11574
11575         if (tg3_flag(tp, PTP_CAPABLE)) {
11576                 tp->ptp_clock = ptp_clock_register(&tp->ptp_info,
11577                                                    &tp->pdev->dev);
11578                 if (IS_ERR(tp->ptp_clock))
11579                         tp->ptp_clock = NULL;
11580         }
11581
11582         return err;
11583 }
11584
11585 static int tg3_close(struct net_device *dev)
11586 {
11587         struct tg3 *tp = netdev_priv(dev);
11588
11589         tg3_ptp_fini(tp);
11590
11591         tg3_stop(tp);
11592
11593         /* Clear stats across close / open calls */
11594         memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev));
11595         memset(&tp->estats_prev, 0, sizeof(tp->estats_prev));
11596
11597         tg3_power_down_prepare(tp);
11598
11599         tg3_carrier_off(tp);
11600
11601         return 0;
11602 }
11603
11604 static inline u64 get_stat64(tg3_stat64_t *val)
11605 {
11606        return ((u64)val->high << 32) | ((u64)val->low);
11607 }
11608
11609 static u64 tg3_calc_crc_errors(struct tg3 *tp)
11610 {
11611         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11612
11613         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
11614             (tg3_asic_rev(tp) == ASIC_REV_5700 ||
11615              tg3_asic_rev(tp) == ASIC_REV_5701)) {
11616                 u32 val;
11617
11618                 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
11619                         tg3_writephy(tp, MII_TG3_TEST1,
11620                                      val | MII_TG3_TEST1_CRC_EN);
11621                         tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
11622                 } else
11623                         val = 0;
11624
11625                 tp->phy_crc_errors += val;
11626
11627                 return tp->phy_crc_errors;
11628         }
11629
11630         return get_stat64(&hw_stats->rx_fcs_errors);
11631 }
11632
11633 #define ESTAT_ADD(member) \
11634         estats->member =        old_estats->member + \
11635                                 get_stat64(&hw_stats->member)
11636
11637 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
11638 {
11639         struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
11640         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11641
11642         ESTAT_ADD(rx_octets);
11643         ESTAT_ADD(rx_fragments);
11644         ESTAT_ADD(rx_ucast_packets);
11645         ESTAT_ADD(rx_mcast_packets);
11646         ESTAT_ADD(rx_bcast_packets);
11647         ESTAT_ADD(rx_fcs_errors);
11648         ESTAT_ADD(rx_align_errors);
11649         ESTAT_ADD(rx_xon_pause_rcvd);
11650         ESTAT_ADD(rx_xoff_pause_rcvd);
11651         ESTAT_ADD(rx_mac_ctrl_rcvd);
11652         ESTAT_ADD(rx_xoff_entered);
11653         ESTAT_ADD(rx_frame_too_long_errors);
11654         ESTAT_ADD(rx_jabbers);
11655         ESTAT_ADD(rx_undersize_packets);
11656         ESTAT_ADD(rx_in_length_errors);
11657         ESTAT_ADD(rx_out_length_errors);
11658         ESTAT_ADD(rx_64_or_less_octet_packets);
11659         ESTAT_ADD(rx_65_to_127_octet_packets);
11660         ESTAT_ADD(rx_128_to_255_octet_packets);
11661         ESTAT_ADD(rx_256_to_511_octet_packets);
11662         ESTAT_ADD(rx_512_to_1023_octet_packets);
11663         ESTAT_ADD(rx_1024_to_1522_octet_packets);
11664         ESTAT_ADD(rx_1523_to_2047_octet_packets);
11665         ESTAT_ADD(rx_2048_to_4095_octet_packets);
11666         ESTAT_ADD(rx_4096_to_8191_octet_packets);
11667         ESTAT_ADD(rx_8192_to_9022_octet_packets);
11668
11669         ESTAT_ADD(tx_octets);
11670         ESTAT_ADD(tx_collisions);
11671         ESTAT_ADD(tx_xon_sent);
11672         ESTAT_ADD(tx_xoff_sent);
11673         ESTAT_ADD(tx_flow_control);
11674         ESTAT_ADD(tx_mac_errors);
11675         ESTAT_ADD(tx_single_collisions);
11676         ESTAT_ADD(tx_mult_collisions);
11677         ESTAT_ADD(tx_deferred);
11678         ESTAT_ADD(tx_excessive_collisions);
11679         ESTAT_ADD(tx_late_collisions);
11680         ESTAT_ADD(tx_collide_2times);
11681         ESTAT_ADD(tx_collide_3times);
11682         ESTAT_ADD(tx_collide_4times);
11683         ESTAT_ADD(tx_collide_5times);
11684         ESTAT_ADD(tx_collide_6times);
11685         ESTAT_ADD(tx_collide_7times);
11686         ESTAT_ADD(tx_collide_8times);
11687         ESTAT_ADD(tx_collide_9times);
11688         ESTAT_ADD(tx_collide_10times);
11689         ESTAT_ADD(tx_collide_11times);
11690         ESTAT_ADD(tx_collide_12times);
11691         ESTAT_ADD(tx_collide_13times);
11692         ESTAT_ADD(tx_collide_14times);
11693         ESTAT_ADD(tx_collide_15times);
11694         ESTAT_ADD(tx_ucast_packets);
11695         ESTAT_ADD(tx_mcast_packets);
11696         ESTAT_ADD(tx_bcast_packets);
11697         ESTAT_ADD(tx_carrier_sense_errors);
11698         ESTAT_ADD(tx_discards);
11699         ESTAT_ADD(tx_errors);
11700
11701         ESTAT_ADD(dma_writeq_full);
11702         ESTAT_ADD(dma_write_prioq_full);
11703         ESTAT_ADD(rxbds_empty);
11704         ESTAT_ADD(rx_discards);
11705         ESTAT_ADD(rx_errors);
11706         ESTAT_ADD(rx_threshold_hit);
11707
11708         ESTAT_ADD(dma_readq_full);
11709         ESTAT_ADD(dma_read_prioq_full);
11710         ESTAT_ADD(tx_comp_queue_full);
11711
11712         ESTAT_ADD(ring_set_send_prod_index);
11713         ESTAT_ADD(ring_status_update);
11714         ESTAT_ADD(nic_irqs);
11715         ESTAT_ADD(nic_avoided_irqs);
11716         ESTAT_ADD(nic_tx_threshold_hit);
11717
11718         ESTAT_ADD(mbuf_lwm_thresh_hit);
11719 }
11720
11721 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
11722 {
11723         struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
11724         struct tg3_hw_stats *hw_stats = tp->hw_stats;
11725
11726         stats->rx_packets = old_stats->rx_packets +
11727                 get_stat64(&hw_stats->rx_ucast_packets) +
11728                 get_stat64(&hw_stats->rx_mcast_packets) +
11729                 get_stat64(&hw_stats->rx_bcast_packets);
11730
11731         stats->tx_packets = old_stats->tx_packets +
11732                 get_stat64(&hw_stats->tx_ucast_packets) +
11733                 get_stat64(&hw_stats->tx_mcast_packets) +
11734                 get_stat64(&hw_stats->tx_bcast_packets);
11735
11736         stats->rx_bytes = old_stats->rx_bytes +
11737                 get_stat64(&hw_stats->rx_octets);
11738         stats->tx_bytes = old_stats->tx_bytes +
11739                 get_stat64(&hw_stats->tx_octets);
11740
11741         stats->rx_errors = old_stats->rx_errors +
11742                 get_stat64(&hw_stats->rx_errors);
11743         stats->tx_errors = old_stats->tx_errors +
11744                 get_stat64(&hw_stats->tx_errors) +
11745                 get_stat64(&hw_stats->tx_mac_errors) +
11746                 get_stat64(&hw_stats->tx_carrier_sense_errors) +
11747                 get_stat64(&hw_stats->tx_discards);
11748
11749         stats->multicast = old_stats->multicast +
11750                 get_stat64(&hw_stats->rx_mcast_packets);
11751         stats->collisions = old_stats->collisions +
11752                 get_stat64(&hw_stats->tx_collisions);
11753
11754         stats->rx_length_errors = old_stats->rx_length_errors +
11755                 get_stat64(&hw_stats->rx_frame_too_long_errors) +
11756                 get_stat64(&hw_stats->rx_undersize_packets);
11757
11758         stats->rx_over_errors = old_stats->rx_over_errors +
11759                 get_stat64(&hw_stats->rxbds_empty);
11760         stats->rx_frame_errors = old_stats->rx_frame_errors +
11761                 get_stat64(&hw_stats->rx_align_errors);
11762         stats->tx_aborted_errors = old_stats->tx_aborted_errors +
11763                 get_stat64(&hw_stats->tx_discards);
11764         stats->tx_carrier_errors = old_stats->tx_carrier_errors +
11765                 get_stat64(&hw_stats->tx_carrier_sense_errors);
11766
11767         stats->rx_crc_errors = old_stats->rx_crc_errors +
11768                 tg3_calc_crc_errors(tp);
11769
11770         stats->rx_missed_errors = old_stats->rx_missed_errors +
11771                 get_stat64(&hw_stats->rx_discards);
11772
11773         stats->rx_dropped = tp->rx_dropped;
11774         stats->tx_dropped = tp->tx_dropped;
11775 }
11776
11777 static int tg3_get_regs_len(struct net_device *dev)
11778 {
11779         return TG3_REG_BLK_SIZE;
11780 }
11781
11782 static void tg3_get_regs(struct net_device *dev,
11783                 struct ethtool_regs *regs, void *_p)
11784 {
11785         struct tg3 *tp = netdev_priv(dev);
11786
11787         regs->version = 0;
11788
11789         memset(_p, 0, TG3_REG_BLK_SIZE);
11790
11791         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
11792                 return;
11793
11794         tg3_full_lock(tp, 0);
11795
11796         tg3_dump_legacy_regs(tp, (u32 *)_p);
11797
11798         tg3_full_unlock(tp);
11799 }
11800
11801 static int tg3_get_eeprom_len(struct net_device *dev)
11802 {
11803         struct tg3 *tp = netdev_priv(dev);
11804
11805         return tp->nvram_size;
11806 }
11807
11808 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11809 {
11810         struct tg3 *tp = netdev_priv(dev);
11811         int ret;
11812         u8  *pd;
11813         u32 i, offset, len, b_offset, b_count;
11814         __be32 val;
11815
11816         if (tg3_flag(tp, NO_NVRAM))
11817                 return -EINVAL;
11818
11819         offset = eeprom->offset;
11820         len = eeprom->len;
11821         eeprom->len = 0;
11822
11823         eeprom->magic = TG3_EEPROM_MAGIC;
11824
11825         if (offset & 3) {
11826                 /* adjustments to start on required 4 byte boundary */
11827                 b_offset = offset & 3;
11828                 b_count = 4 - b_offset;
11829                 if (b_count > len) {
11830                         /* i.e. offset=1 len=2 */
11831                         b_count = len;
11832                 }
11833                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
11834                 if (ret)
11835                         return ret;
11836                 memcpy(data, ((char *)&val) + b_offset, b_count);
11837                 len -= b_count;
11838                 offset += b_count;
11839                 eeprom->len += b_count;
11840         }
11841
11842         /* read bytes up to the last 4 byte boundary */
11843         pd = &data[eeprom->len];
11844         for (i = 0; i < (len - (len & 3)); i += 4) {
11845                 ret = tg3_nvram_read_be32(tp, offset + i, &val);
11846                 if (ret) {
11847                         eeprom->len += i;
11848                         return ret;
11849                 }
11850                 memcpy(pd + i, &val, 4);
11851         }
11852         eeprom->len += i;
11853
11854         if (len & 3) {
11855                 /* read last bytes not ending on 4 byte boundary */
11856                 pd = &data[eeprom->len];
11857                 b_count = len & 3;
11858                 b_offset = offset + len - b_count;
11859                 ret = tg3_nvram_read_be32(tp, b_offset, &val);
11860                 if (ret)
11861                         return ret;
11862                 memcpy(pd, &val, b_count);
11863                 eeprom->len += b_count;
11864         }
11865         return 0;
11866 }
11867
11868 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
11869 {
11870         struct tg3 *tp = netdev_priv(dev);
11871         int ret;
11872         u32 offset, len, b_offset, odd_len;
11873         u8 *buf;
11874         __be32 start, end;
11875
11876         if (tg3_flag(tp, NO_NVRAM) ||
11877             eeprom->magic != TG3_EEPROM_MAGIC)
11878                 return -EINVAL;
11879
11880         offset = eeprom->offset;
11881         len = eeprom->len;
11882
11883         if ((b_offset = (offset & 3))) {
11884                 /* adjustments to start on required 4 byte boundary */
11885                 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
11886                 if (ret)
11887                         return ret;
11888                 len += b_offset;
11889                 offset &= ~3;
11890                 if (len < 4)
11891                         len = 4;
11892         }
11893
11894         odd_len = 0;
11895         if (len & 3) {
11896                 /* adjustments to end on required 4 byte boundary */
11897                 odd_len = 1;
11898                 len = (len + 3) & ~3;
11899                 ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
11900                 if (ret)
11901                         return ret;
11902         }
11903
11904         buf = data;
11905         if (b_offset || odd_len) {
11906                 buf = kmalloc(len, GFP_KERNEL);
11907                 if (!buf)
11908                         return -ENOMEM;
11909                 if (b_offset)
11910                         memcpy(buf, &start, 4);
11911                 if (odd_len)
11912                         memcpy(buf+len-4, &end, 4);
11913                 memcpy(buf + b_offset, data, eeprom->len);
11914         }
11915
11916         ret = tg3_nvram_write_block(tp, offset, len, buf);
11917
11918         if (buf != data)
11919                 kfree(buf);
11920
11921         return ret;
11922 }
11923
11924 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
11925 {
11926         struct tg3 *tp = netdev_priv(dev);
11927
11928         if (tg3_flag(tp, USE_PHYLIB)) {
11929                 struct phy_device *phydev;
11930                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
11931                         return -EAGAIN;
11932                 phydev = tp->mdio_bus->phy_map[tp->phy_addr];
11933                 return phy_ethtool_gset(phydev, cmd);
11934         }
11935
11936         cmd->supported = (SUPPORTED_Autoneg);
11937
11938         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
11939                 cmd->supported |= (SUPPORTED_1000baseT_Half |
11940                                    SUPPORTED_1000baseT_Full);
11941
11942         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
11943                 cmd->supported |= (SUPPORTED_100baseT_Half |
11944                                   SUPPORTED_100baseT_Full |
11945                                   SUPPORTED_10baseT_Half |
11946                                   SUPPORTED_10baseT_Full |
11947                                   SUPPORTED_TP);
11948                 cmd->port = PORT_TP;
11949         } else {
11950                 cmd->supported |= SUPPORTED_FIBRE;
11951                 cmd->port = PORT_FIBRE;
11952         }
11953
11954         cmd->advertising = tp->link_config.advertising;
11955         if (tg3_flag(tp, PAUSE_AUTONEG)) {
11956                 if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
11957                         if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
11958                                 cmd->advertising |= ADVERTISED_Pause;
11959                         } else {
11960                                 cmd->advertising |= ADVERTISED_Pause |
11961                                                     ADVERTISED_Asym_Pause;
11962                         }
11963                 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
11964                         cmd->advertising |= ADVERTISED_Asym_Pause;
11965                 }
11966         }
11967         if (netif_running(dev) && tp->link_up) {
11968                 ethtool_cmd_speed_set(cmd, tp->link_config.active_speed);
11969                 cmd->duplex = tp->link_config.active_duplex;
11970                 cmd->lp_advertising = tp->link_config.rmt_adv;
11971                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
11972                         if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
11973                                 cmd->eth_tp_mdix = ETH_TP_MDI_X;
11974                         else
11975                                 cmd->eth_tp_mdix = ETH_TP_MDI;
11976                 }
11977         } else {
11978                 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN);
11979                 cmd->duplex = DUPLEX_UNKNOWN;
11980                 cmd->eth_tp_mdix = ETH_TP_MDI_INVALID;
11981         }
11982         cmd->phy_address = tp->phy_addr;
11983         cmd->transceiver = XCVR_INTERNAL;
11984         cmd->autoneg = tp->link_config.autoneg;
11985         cmd->maxtxpkt = 0;
11986         cmd->maxrxpkt = 0;
11987         return 0;
11988 }
11989
11990 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
11991 {
11992         struct tg3 *tp = netdev_priv(dev);
11993         u32 speed = ethtool_cmd_speed(cmd);
11994
11995         if (tg3_flag(tp, USE_PHYLIB)) {
11996                 struct phy_device *phydev;
11997                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
11998                         return -EAGAIN;
11999                 phydev = tp->mdio_bus->phy_map[tp->phy_addr];
12000                 return phy_ethtool_sset(phydev, cmd);
12001         }
12002
12003         if (cmd->autoneg != AUTONEG_ENABLE &&
12004             cmd->autoneg != AUTONEG_DISABLE)
12005                 return -EINVAL;
12006
12007         if (cmd->autoneg == AUTONEG_DISABLE &&
12008             cmd->duplex != DUPLEX_FULL &&
12009             cmd->duplex != DUPLEX_HALF)
12010                 return -EINVAL;
12011
12012         if (cmd->autoneg == AUTONEG_ENABLE) {
12013                 u32 mask = ADVERTISED_Autoneg |
12014                            ADVERTISED_Pause |
12015                            ADVERTISED_Asym_Pause;
12016
12017                 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
12018                         mask |= ADVERTISED_1000baseT_Half |
12019                                 ADVERTISED_1000baseT_Full;
12020
12021                 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
12022                         mask |= ADVERTISED_100baseT_Half |
12023                                 ADVERTISED_100baseT_Full |
12024                                 ADVERTISED_10baseT_Half |
12025                                 ADVERTISED_10baseT_Full |
12026                                 ADVERTISED_TP;
12027                 else
12028                         mask |= ADVERTISED_FIBRE;
12029
12030                 if (cmd->advertising & ~mask)
12031                         return -EINVAL;
12032
12033                 mask &= (ADVERTISED_1000baseT_Half |
12034                          ADVERTISED_1000baseT_Full |
12035                          ADVERTISED_100baseT_Half |
12036                          ADVERTISED_100baseT_Full |
12037                          ADVERTISED_10baseT_Half |
12038                          ADVERTISED_10baseT_Full);
12039
12040                 cmd->advertising &= mask;
12041         } else {
12042                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
12043                         if (speed != SPEED_1000)
12044                                 return -EINVAL;
12045
12046                         if (cmd->duplex != DUPLEX_FULL)
12047                                 return -EINVAL;
12048                 } else {
12049                         if (speed != SPEED_100 &&
12050                             speed != SPEED_10)
12051                                 return -EINVAL;
12052                 }
12053         }
12054
12055         tg3_full_lock(tp, 0);
12056
12057         tp->link_config.autoneg = cmd->autoneg;
12058         if (cmd->autoneg == AUTONEG_ENABLE) {
12059                 tp->link_config.advertising = (cmd->advertising |
12060                                               ADVERTISED_Autoneg);
12061                 tp->link_config.speed = SPEED_UNKNOWN;
12062                 tp->link_config.duplex = DUPLEX_UNKNOWN;
12063         } else {
12064                 tp->link_config.advertising = 0;
12065                 tp->link_config.speed = speed;
12066                 tp->link_config.duplex = cmd->duplex;
12067         }
12068
12069         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12070
12071         tg3_warn_mgmt_link_flap(tp);
12072
12073         if (netif_running(dev))
12074                 tg3_setup_phy(tp, true);
12075
12076         tg3_full_unlock(tp);
12077
12078         return 0;
12079 }
12080
12081 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
12082 {
12083         struct tg3 *tp = netdev_priv(dev);
12084
12085         strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
12086         strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
12087         strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
12088         strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
12089 }
12090
12091 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12092 {
12093         struct tg3 *tp = netdev_priv(dev);
12094
12095         if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
12096                 wol->supported = WAKE_MAGIC;
12097         else
12098                 wol->supported = 0;
12099         wol->wolopts = 0;
12100         if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
12101                 wol->wolopts = WAKE_MAGIC;
12102         memset(&wol->sopass, 0, sizeof(wol->sopass));
12103 }
12104
12105 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
12106 {
12107         struct tg3 *tp = netdev_priv(dev);
12108         struct device *dp = &tp->pdev->dev;
12109
12110         if (wol->wolopts & ~WAKE_MAGIC)
12111                 return -EINVAL;
12112         if ((wol->wolopts & WAKE_MAGIC) &&
12113             !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
12114                 return -EINVAL;
12115
12116         device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC);
12117
12118         if (device_may_wakeup(dp))
12119                 tg3_flag_set(tp, WOL_ENABLE);
12120         else
12121                 tg3_flag_clear(tp, WOL_ENABLE);
12122
12123         return 0;
12124 }
12125
12126 static u32 tg3_get_msglevel(struct net_device *dev)
12127 {
12128         struct tg3 *tp = netdev_priv(dev);
12129         return tp->msg_enable;
12130 }
12131
12132 static void tg3_set_msglevel(struct net_device *dev, u32 value)
12133 {
12134         struct tg3 *tp = netdev_priv(dev);
12135         tp->msg_enable = value;
12136 }
12137
12138 static int tg3_nway_reset(struct net_device *dev)
12139 {
12140         struct tg3 *tp = netdev_priv(dev);
12141         int r;
12142
12143         if (!netif_running(dev))
12144                 return -EAGAIN;
12145
12146         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12147                 return -EINVAL;
12148
12149         tg3_warn_mgmt_link_flap(tp);
12150
12151         if (tg3_flag(tp, USE_PHYLIB)) {
12152                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12153                         return -EAGAIN;
12154                 r = phy_start_aneg(tp->mdio_bus->phy_map[tp->phy_addr]);
12155         } else {
12156                 u32 bmcr;
12157
12158                 spin_lock_bh(&tp->lock);
12159                 r = -EINVAL;
12160                 tg3_readphy(tp, MII_BMCR, &bmcr);
12161                 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
12162                     ((bmcr & BMCR_ANENABLE) ||
12163                      (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) {
12164                         tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
12165                                                    BMCR_ANENABLE);
12166                         r = 0;
12167                 }
12168                 spin_unlock_bh(&tp->lock);
12169         }
12170
12171         return r;
12172 }
12173
12174 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12175 {
12176         struct tg3 *tp = netdev_priv(dev);
12177
12178         ering->rx_max_pending = tp->rx_std_ring_mask;
12179         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12180                 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask;
12181         else
12182                 ering->rx_jumbo_max_pending = 0;
12183
12184         ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
12185
12186         ering->rx_pending = tp->rx_pending;
12187         if (tg3_flag(tp, JUMBO_RING_ENABLE))
12188                 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
12189         else
12190                 ering->rx_jumbo_pending = 0;
12191
12192         ering->tx_pending = tp->napi[0].tx_pending;
12193 }
12194
12195 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
12196 {
12197         struct tg3 *tp = netdev_priv(dev);
12198         int i, irq_sync = 0, err = 0;
12199
12200         if ((ering->rx_pending > tp->rx_std_ring_mask) ||
12201             (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
12202             (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
12203             (ering->tx_pending <= MAX_SKB_FRAGS) ||
12204             (tg3_flag(tp, TSO_BUG) &&
12205              (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
12206                 return -EINVAL;
12207
12208         if (netif_running(dev)) {
12209                 tg3_phy_stop(tp);
12210                 tg3_netif_stop(tp);
12211                 irq_sync = 1;
12212         }
12213
12214         tg3_full_lock(tp, irq_sync);
12215
12216         tp->rx_pending = ering->rx_pending;
12217
12218         if (tg3_flag(tp, MAX_RXPEND_64) &&
12219             tp->rx_pending > 63)
12220                 tp->rx_pending = 63;
12221         tp->rx_jumbo_pending = ering->rx_jumbo_pending;
12222
12223         for (i = 0; i < tp->irq_max; i++)
12224                 tp->napi[i].tx_pending = ering->tx_pending;
12225
12226         if (netif_running(dev)) {
12227                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12228                 err = tg3_restart_hw(tp, false);
12229                 if (!err)
12230                         tg3_netif_start(tp);
12231         }
12232
12233         tg3_full_unlock(tp);
12234
12235         if (irq_sync && !err)
12236                 tg3_phy_start(tp);
12237
12238         return err;
12239 }
12240
12241 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12242 {
12243         struct tg3 *tp = netdev_priv(dev);
12244
12245         epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
12246
12247         if (tp->link_config.flowctrl & FLOW_CTRL_RX)
12248                 epause->rx_pause = 1;
12249         else
12250                 epause->rx_pause = 0;
12251
12252         if (tp->link_config.flowctrl & FLOW_CTRL_TX)
12253                 epause->tx_pause = 1;
12254         else
12255                 epause->tx_pause = 0;
12256 }
12257
12258 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
12259 {
12260         struct tg3 *tp = netdev_priv(dev);
12261         int err = 0;
12262
12263         if (tp->link_config.autoneg == AUTONEG_ENABLE)
12264                 tg3_warn_mgmt_link_flap(tp);
12265
12266         if (tg3_flag(tp, USE_PHYLIB)) {
12267                 u32 newadv;
12268                 struct phy_device *phydev;
12269
12270                 phydev = tp->mdio_bus->phy_map[tp->phy_addr];
12271
12272                 if (!(phydev->supported & SUPPORTED_Pause) ||
12273                     (!(phydev->supported & SUPPORTED_Asym_Pause) &&
12274                      (epause->rx_pause != epause->tx_pause)))
12275                         return -EINVAL;
12276
12277                 tp->link_config.flowctrl = 0;
12278                 if (epause->rx_pause) {
12279                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12280
12281                         if (epause->tx_pause) {
12282                                 tp->link_config.flowctrl |= FLOW_CTRL_TX;
12283                                 newadv = ADVERTISED_Pause;
12284                         } else
12285                                 newadv = ADVERTISED_Pause |
12286                                          ADVERTISED_Asym_Pause;
12287                 } else if (epause->tx_pause) {
12288                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12289                         newadv = ADVERTISED_Asym_Pause;
12290                 } else
12291                         newadv = 0;
12292
12293                 if (epause->autoneg)
12294                         tg3_flag_set(tp, PAUSE_AUTONEG);
12295                 else
12296                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12297
12298                 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
12299                         u32 oldadv = phydev->advertising &
12300                                      (ADVERTISED_Pause | ADVERTISED_Asym_Pause);
12301                         if (oldadv != newadv) {
12302                                 phydev->advertising &=
12303                                         ~(ADVERTISED_Pause |
12304                                           ADVERTISED_Asym_Pause);
12305                                 phydev->advertising |= newadv;
12306                                 if (phydev->autoneg) {
12307                                         /*
12308                                          * Always renegotiate the link to
12309                                          * inform our link partner of our
12310                                          * flow control settings, even if the
12311                                          * flow control is forced.  Let
12312                                          * tg3_adjust_link() do the final
12313                                          * flow control setup.
12314                                          */
12315                                         return phy_start_aneg(phydev);
12316                                 }
12317                         }
12318
12319                         if (!epause->autoneg)
12320                                 tg3_setup_flow_control(tp, 0, 0);
12321                 } else {
12322                         tp->link_config.advertising &=
12323                                         ~(ADVERTISED_Pause |
12324                                           ADVERTISED_Asym_Pause);
12325                         tp->link_config.advertising |= newadv;
12326                 }
12327         } else {
12328                 int irq_sync = 0;
12329
12330                 if (netif_running(dev)) {
12331                         tg3_netif_stop(tp);
12332                         irq_sync = 1;
12333                 }
12334
12335                 tg3_full_lock(tp, irq_sync);
12336
12337                 if (epause->autoneg)
12338                         tg3_flag_set(tp, PAUSE_AUTONEG);
12339                 else
12340                         tg3_flag_clear(tp, PAUSE_AUTONEG);
12341                 if (epause->rx_pause)
12342                         tp->link_config.flowctrl |= FLOW_CTRL_RX;
12343                 else
12344                         tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
12345                 if (epause->tx_pause)
12346                         tp->link_config.flowctrl |= FLOW_CTRL_TX;
12347                 else
12348                         tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
12349
12350                 if (netif_running(dev)) {
12351                         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12352                         err = tg3_restart_hw(tp, false);
12353                         if (!err)
12354                                 tg3_netif_start(tp);
12355                 }
12356
12357                 tg3_full_unlock(tp);
12358         }
12359
12360         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
12361
12362         return err;
12363 }
12364
12365 static int tg3_get_sset_count(struct net_device *dev, int sset)
12366 {
12367         switch (sset) {
12368         case ETH_SS_TEST:
12369                 return TG3_NUM_TEST;
12370         case ETH_SS_STATS:
12371                 return TG3_NUM_STATS;
12372         default:
12373                 return -EOPNOTSUPP;
12374         }
12375 }
12376
12377 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
12378                          u32 *rules __always_unused)
12379 {
12380         struct tg3 *tp = netdev_priv(dev);
12381
12382         if (!tg3_flag(tp, SUPPORT_MSIX))
12383                 return -EOPNOTSUPP;
12384
12385         switch (info->cmd) {
12386         case ETHTOOL_GRXRINGS:
12387                 if (netif_running(tp->dev))
12388                         info->data = tp->rxq_cnt;
12389                 else {
12390                         info->data = num_online_cpus();
12391                         if (info->data > TG3_RSS_MAX_NUM_QS)
12392                                 info->data = TG3_RSS_MAX_NUM_QS;
12393                 }
12394
12395                 /* The first interrupt vector only
12396                  * handles link interrupts.
12397                  */
12398                 info->data -= 1;
12399                 return 0;
12400
12401         default:
12402                 return -EOPNOTSUPP;
12403         }
12404 }
12405
12406 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
12407 {
12408         u32 size = 0;
12409         struct tg3 *tp = netdev_priv(dev);
12410
12411         if (tg3_flag(tp, SUPPORT_MSIX))
12412                 size = TG3_RSS_INDIR_TBL_SIZE;
12413
12414         return size;
12415 }
12416
12417 static int tg3_get_rxfh_indir(struct net_device *dev, u32 *indir)
12418 {
12419         struct tg3 *tp = netdev_priv(dev);
12420         int i;
12421
12422         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12423                 indir[i] = tp->rss_ind_tbl[i];
12424
12425         return 0;
12426 }
12427
12428 static int tg3_set_rxfh_indir(struct net_device *dev, const u32 *indir)
12429 {
12430         struct tg3 *tp = netdev_priv(dev);
12431         size_t i;
12432
12433         for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
12434                 tp->rss_ind_tbl[i] = indir[i];
12435
12436         if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
12437                 return 0;
12438
12439         /* It is legal to write the indirection
12440          * table while the device is running.
12441          */
12442         tg3_full_lock(tp, 0);
12443         tg3_rss_write_indir_tbl(tp);
12444         tg3_full_unlock(tp);
12445
12446         return 0;
12447 }
12448
12449 static void tg3_get_channels(struct net_device *dev,
12450                              struct ethtool_channels *channel)
12451 {
12452         struct tg3 *tp = netdev_priv(dev);
12453         u32 deflt_qs = netif_get_num_default_rss_queues();
12454
12455         channel->max_rx = tp->rxq_max;
12456         channel->max_tx = tp->txq_max;
12457
12458         if (netif_running(dev)) {
12459                 channel->rx_count = tp->rxq_cnt;
12460                 channel->tx_count = tp->txq_cnt;
12461         } else {
12462                 if (tp->rxq_req)
12463                         channel->rx_count = tp->rxq_req;
12464                 else
12465                         channel->rx_count = min(deflt_qs, tp->rxq_max);
12466
12467                 if (tp->txq_req)
12468                         channel->tx_count = tp->txq_req;
12469                 else
12470                         channel->tx_count = min(deflt_qs, tp->txq_max);
12471         }
12472 }
12473
12474 static int tg3_set_channels(struct net_device *dev,
12475                             struct ethtool_channels *channel)
12476 {
12477         struct tg3 *tp = netdev_priv(dev);
12478
12479         if (!tg3_flag(tp, SUPPORT_MSIX))
12480                 return -EOPNOTSUPP;
12481
12482         if (channel->rx_count > tp->rxq_max ||
12483             channel->tx_count > tp->txq_max)
12484                 return -EINVAL;
12485
12486         tp->rxq_req = channel->rx_count;
12487         tp->txq_req = channel->tx_count;
12488
12489         if (!netif_running(dev))
12490                 return 0;
12491
12492         tg3_stop(tp);
12493
12494         tg3_carrier_off(tp);
12495
12496         tg3_start(tp, true, false, false);
12497
12498         return 0;
12499 }
12500
12501 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
12502 {
12503         switch (stringset) {
12504         case ETH_SS_STATS:
12505                 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
12506                 break;
12507         case ETH_SS_TEST:
12508                 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
12509                 break;
12510         default:
12511                 WARN_ON(1);     /* we need a WARN() */
12512                 break;
12513         }
12514 }
12515
12516 static int tg3_set_phys_id(struct net_device *dev,
12517                             enum ethtool_phys_id_state state)
12518 {
12519         struct tg3 *tp = netdev_priv(dev);
12520
12521         if (!netif_running(tp->dev))
12522                 return -EAGAIN;
12523
12524         switch (state) {
12525         case ETHTOOL_ID_ACTIVE:
12526                 return 1;       /* cycle on/off once per second */
12527
12528         case ETHTOOL_ID_ON:
12529                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12530                      LED_CTRL_1000MBPS_ON |
12531                      LED_CTRL_100MBPS_ON |
12532                      LED_CTRL_10MBPS_ON |
12533                      LED_CTRL_TRAFFIC_OVERRIDE |
12534                      LED_CTRL_TRAFFIC_BLINK |
12535                      LED_CTRL_TRAFFIC_LED);
12536                 break;
12537
12538         case ETHTOOL_ID_OFF:
12539                 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
12540                      LED_CTRL_TRAFFIC_OVERRIDE);
12541                 break;
12542
12543         case ETHTOOL_ID_INACTIVE:
12544                 tw32(MAC_LED_CTRL, tp->led_ctrl);
12545                 break;
12546         }
12547
12548         return 0;
12549 }
12550
12551 static void tg3_get_ethtool_stats(struct net_device *dev,
12552                                    struct ethtool_stats *estats, u64 *tmp_stats)
12553 {
12554         struct tg3 *tp = netdev_priv(dev);
12555
12556         if (tp->hw_stats)
12557                 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
12558         else
12559                 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
12560 }
12561
12562 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
12563 {
12564         int i;
12565         __be32 *buf;
12566         u32 offset = 0, len = 0;
12567         u32 magic, val;
12568
12569         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
12570                 return NULL;
12571
12572         if (magic == TG3_EEPROM_MAGIC) {
12573                 for (offset = TG3_NVM_DIR_START;
12574                      offset < TG3_NVM_DIR_END;
12575                      offset += TG3_NVM_DIRENT_SIZE) {
12576                         if (tg3_nvram_read(tp, offset, &val))
12577                                 return NULL;
12578
12579                         if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
12580                             TG3_NVM_DIRTYPE_EXTVPD)
12581                                 break;
12582                 }
12583
12584                 if (offset != TG3_NVM_DIR_END) {
12585                         len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
12586                         if (tg3_nvram_read(tp, offset + 4, &offset))
12587                                 return NULL;
12588
12589                         offset = tg3_nvram_logical_addr(tp, offset);
12590                 }
12591         }
12592
12593         if (!offset || !len) {
12594                 offset = TG3_NVM_VPD_OFF;
12595                 len = TG3_NVM_VPD_LEN;
12596         }
12597
12598         buf = kmalloc(len, GFP_KERNEL);
12599         if (buf == NULL)
12600                 return NULL;
12601
12602         if (magic == TG3_EEPROM_MAGIC) {
12603                 for (i = 0; i < len; i += 4) {
12604                         /* The data is in little-endian format in NVRAM.
12605                          * Use the big-endian read routines to preserve
12606                          * the byte order as it exists in NVRAM.
12607                          */
12608                         if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
12609                                 goto error;
12610                 }
12611         } else {
12612                 u8 *ptr;
12613                 ssize_t cnt;
12614                 unsigned int pos = 0;
12615
12616                 ptr = (u8 *)&buf[0];
12617                 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
12618                         cnt = pci_read_vpd(tp->pdev, pos,
12619                                            len - pos, ptr);
12620                         if (cnt == -ETIMEDOUT || cnt == -EINTR)
12621                                 cnt = 0;
12622                         else if (cnt < 0)
12623                                 goto error;
12624                 }
12625                 if (pos != len)
12626                         goto error;
12627         }
12628
12629         *vpdlen = len;
12630
12631         return buf;
12632
12633 error:
12634         kfree(buf);
12635         return NULL;
12636 }
12637
12638 #define NVRAM_TEST_SIZE 0x100
12639 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE   0x14
12640 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE   0x18
12641 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE   0x1c
12642 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE   0x20
12643 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE   0x24
12644 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE   0x50
12645 #define NVRAM_SELFBOOT_HW_SIZE 0x20
12646 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
12647
12648 static int tg3_test_nvram(struct tg3 *tp)
12649 {
12650         u32 csum, magic, len;
12651         __be32 *buf;
12652         int i, j, k, err = 0, size;
12653
12654         if (tg3_flag(tp, NO_NVRAM))
12655                 return 0;
12656
12657         if (tg3_nvram_read(tp, 0, &magic) != 0)
12658                 return -EIO;
12659
12660         if (magic == TG3_EEPROM_MAGIC)
12661                 size = NVRAM_TEST_SIZE;
12662         else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
12663                 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
12664                     TG3_EEPROM_SB_FORMAT_1) {
12665                         switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
12666                         case TG3_EEPROM_SB_REVISION_0:
12667                                 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
12668                                 break;
12669                         case TG3_EEPROM_SB_REVISION_2:
12670                                 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
12671                                 break;
12672                         case TG3_EEPROM_SB_REVISION_3:
12673                                 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
12674                                 break;
12675                         case TG3_EEPROM_SB_REVISION_4:
12676                                 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE;
12677                                 break;
12678                         case TG3_EEPROM_SB_REVISION_5:
12679                                 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE;
12680                                 break;
12681                         case TG3_EEPROM_SB_REVISION_6:
12682                                 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE;
12683                                 break;
12684                         default:
12685                                 return -EIO;
12686                         }
12687                 } else
12688                         return 0;
12689         } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
12690                 size = NVRAM_SELFBOOT_HW_SIZE;
12691         else
12692                 return -EIO;
12693
12694         buf = kmalloc(size, GFP_KERNEL);
12695         if (buf == NULL)
12696                 return -ENOMEM;
12697
12698         err = -EIO;
12699         for (i = 0, j = 0; i < size; i += 4, j++) {
12700                 err = tg3_nvram_read_be32(tp, i, &buf[j]);
12701                 if (err)
12702                         break;
12703         }
12704         if (i < size)
12705                 goto out;
12706
12707         /* Selfboot format */
12708         magic = be32_to_cpu(buf[0]);
12709         if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
12710             TG3_EEPROM_MAGIC_FW) {
12711                 u8 *buf8 = (u8 *) buf, csum8 = 0;
12712
12713                 if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
12714                     TG3_EEPROM_SB_REVISION_2) {
12715                         /* For rev 2, the csum doesn't include the MBA. */
12716                         for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
12717                                 csum8 += buf8[i];
12718                         for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
12719                                 csum8 += buf8[i];
12720                 } else {
12721                         for (i = 0; i < size; i++)
12722                                 csum8 += buf8[i];
12723                 }
12724
12725                 if (csum8 == 0) {
12726                         err = 0;
12727                         goto out;
12728                 }
12729
12730                 err = -EIO;
12731                 goto out;
12732         }
12733
12734         if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
12735             TG3_EEPROM_MAGIC_HW) {
12736                 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
12737                 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
12738                 u8 *buf8 = (u8 *) buf;
12739
12740                 /* Separate the parity bits and the data bytes.  */
12741                 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
12742                         if ((i == 0) || (i == 8)) {
12743                                 int l;
12744                                 u8 msk;
12745
12746                                 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
12747                                         parity[k++] = buf8[i] & msk;
12748                                 i++;
12749                         } else if (i == 16) {
12750                                 int l;
12751                                 u8 msk;
12752
12753                                 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
12754                                         parity[k++] = buf8[i] & msk;
12755                                 i++;
12756
12757                                 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
12758                                         parity[k++] = buf8[i] & msk;
12759                                 i++;
12760                         }
12761                         data[j++] = buf8[i];
12762                 }
12763
12764                 err = -EIO;
12765                 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
12766                         u8 hw8 = hweight8(data[i]);
12767
12768                         if ((hw8 & 0x1) && parity[i])
12769                                 goto out;
12770                         else if (!(hw8 & 0x1) && !parity[i])
12771                                 goto out;
12772                 }
12773                 err = 0;
12774                 goto out;
12775         }
12776
12777         err = -EIO;
12778
12779         /* Bootstrap checksum at offset 0x10 */
12780         csum = calc_crc((unsigned char *) buf, 0x10);
12781         if (csum != le32_to_cpu(buf[0x10/4]))
12782                 goto out;
12783
12784         /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
12785         csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
12786         if (csum != le32_to_cpu(buf[0xfc/4]))
12787                 goto out;
12788
12789         kfree(buf);
12790
12791         buf = tg3_vpd_readblock(tp, &len);
12792         if (!buf)
12793                 return -ENOMEM;
12794
12795         i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
12796         if (i > 0) {
12797                 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
12798                 if (j < 0)
12799                         goto out;
12800
12801                 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
12802                         goto out;
12803
12804                 i += PCI_VPD_LRDT_TAG_SIZE;
12805                 j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
12806                                               PCI_VPD_RO_KEYWORD_CHKSUM);
12807                 if (j > 0) {
12808                         u8 csum8 = 0;
12809
12810                         j += PCI_VPD_INFO_FLD_HDR_SIZE;
12811
12812                         for (i = 0; i <= j; i++)
12813                                 csum8 += ((u8 *)buf)[i];
12814
12815                         if (csum8)
12816                                 goto out;
12817                 }
12818         }
12819
12820         err = 0;
12821
12822 out:
12823         kfree(buf);
12824         return err;
12825 }
12826
12827 #define TG3_SERDES_TIMEOUT_SEC  2
12828 #define TG3_COPPER_TIMEOUT_SEC  6
12829
12830 static int tg3_test_link(struct tg3 *tp)
12831 {
12832         int i, max;
12833
12834         if (!netif_running(tp->dev))
12835                 return -ENODEV;
12836
12837         if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
12838                 max = TG3_SERDES_TIMEOUT_SEC;
12839         else
12840                 max = TG3_COPPER_TIMEOUT_SEC;
12841
12842         for (i = 0; i < max; i++) {
12843                 if (tp->link_up)
12844                         return 0;
12845
12846                 if (msleep_interruptible(1000))
12847                         break;
12848         }
12849
12850         return -EIO;
12851 }
12852
12853 /* Only test the commonly used registers */
12854 static int tg3_test_registers(struct tg3 *tp)
12855 {
12856         int i, is_5705, is_5750;
12857         u32 offset, read_mask, write_mask, val, save_val, read_val;
12858         static struct {
12859                 u16 offset;
12860                 u16 flags;
12861 #define TG3_FL_5705     0x1
12862 #define TG3_FL_NOT_5705 0x2
12863 #define TG3_FL_NOT_5788 0x4
12864 #define TG3_FL_NOT_5750 0x8
12865                 u32 read_mask;
12866                 u32 write_mask;
12867         } reg_tbl[] = {
12868                 /* MAC Control Registers */
12869                 { MAC_MODE, TG3_FL_NOT_5705,
12870                         0x00000000, 0x00ef6f8c },
12871                 { MAC_MODE, TG3_FL_5705,
12872                         0x00000000, 0x01ef6b8c },
12873                 { MAC_STATUS, TG3_FL_NOT_5705,
12874                         0x03800107, 0x00000000 },
12875                 { MAC_STATUS, TG3_FL_5705,
12876                         0x03800100, 0x00000000 },
12877                 { MAC_ADDR_0_HIGH, 0x0000,
12878                         0x00000000, 0x0000ffff },
12879                 { MAC_ADDR_0_LOW, 0x0000,
12880                         0x00000000, 0xffffffff },
12881                 { MAC_RX_MTU_SIZE, 0x0000,
12882                         0x00000000, 0x0000ffff },
12883                 { MAC_TX_MODE, 0x0000,
12884                         0x00000000, 0x00000070 },
12885                 { MAC_TX_LENGTHS, 0x0000,
12886                         0x00000000, 0x00003fff },
12887                 { MAC_RX_MODE, TG3_FL_NOT_5705,
12888                         0x00000000, 0x000007fc },
12889                 { MAC_RX_MODE, TG3_FL_5705,
12890                         0x00000000, 0x000007dc },
12891                 { MAC_HASH_REG_0, 0x0000,
12892                         0x00000000, 0xffffffff },
12893                 { MAC_HASH_REG_1, 0x0000,
12894                         0x00000000, 0xffffffff },
12895                 { MAC_HASH_REG_2, 0x0000,
12896                         0x00000000, 0xffffffff },
12897                 { MAC_HASH_REG_3, 0x0000,
12898                         0x00000000, 0xffffffff },
12899
12900                 /* Receive Data and Receive BD Initiator Control Registers. */
12901                 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
12902                         0x00000000, 0xffffffff },
12903                 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
12904                         0x00000000, 0xffffffff },
12905                 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
12906                         0x00000000, 0x00000003 },
12907                 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
12908                         0x00000000, 0xffffffff },
12909                 { RCVDBDI_STD_BD+0, 0x0000,
12910                         0x00000000, 0xffffffff },
12911                 { RCVDBDI_STD_BD+4, 0x0000,
12912                         0x00000000, 0xffffffff },
12913                 { RCVDBDI_STD_BD+8, 0x0000,
12914                         0x00000000, 0xffff0002 },
12915                 { RCVDBDI_STD_BD+0xc, 0x0000,
12916                         0x00000000, 0xffffffff },
12917
12918                 /* Receive BD Initiator Control Registers. */
12919                 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
12920                         0x00000000, 0xffffffff },
12921                 { RCVBDI_STD_THRESH, TG3_FL_5705,
12922                         0x00000000, 0x000003ff },
12923                 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
12924                         0x00000000, 0xffffffff },
12925
12926                 /* Host Coalescing Control Registers. */
12927                 { HOSTCC_MODE, TG3_FL_NOT_5705,
12928                         0x00000000, 0x00000004 },
12929                 { HOSTCC_MODE, TG3_FL_5705,
12930                         0x00000000, 0x000000f6 },
12931                 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
12932                         0x00000000, 0xffffffff },
12933                 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
12934                         0x00000000, 0x000003ff },
12935                 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
12936                         0x00000000, 0xffffffff },
12937                 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
12938                         0x00000000, 0x000003ff },
12939                 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
12940                         0x00000000, 0xffffffff },
12941                 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
12942                         0x00000000, 0x000000ff },
12943                 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
12944                         0x00000000, 0xffffffff },
12945                 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
12946                         0x00000000, 0x000000ff },
12947                 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
12948                         0x00000000, 0xffffffff },
12949                 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
12950                         0x00000000, 0xffffffff },
12951                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
12952                         0x00000000, 0xffffffff },
12953                 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
12954                         0x00000000, 0x000000ff },
12955                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
12956                         0x00000000, 0xffffffff },
12957                 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
12958                         0x00000000, 0x000000ff },
12959                 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
12960                         0x00000000, 0xffffffff },
12961                 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
12962                         0x00000000, 0xffffffff },
12963                 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
12964                         0x00000000, 0xffffffff },
12965                 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
12966                         0x00000000, 0xffffffff },
12967                 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
12968                         0x00000000, 0xffffffff },
12969                 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
12970                         0xffffffff, 0x00000000 },
12971                 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
12972                         0xffffffff, 0x00000000 },
12973
12974                 /* Buffer Manager Control Registers. */
12975                 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
12976                         0x00000000, 0x007fff80 },
12977                 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
12978                         0x00000000, 0x007fffff },
12979                 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
12980                         0x00000000, 0x0000003f },
12981                 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
12982                         0x00000000, 0x000001ff },
12983                 { BUFMGR_MB_HIGH_WATER, 0x0000,
12984                         0x00000000, 0x000001ff },
12985                 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
12986                         0xffffffff, 0x00000000 },
12987                 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
12988                         0xffffffff, 0x00000000 },
12989
12990                 /* Mailbox Registers */
12991                 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
12992                         0x00000000, 0x000001ff },
12993                 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
12994                         0x00000000, 0x000001ff },
12995                 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
12996                         0x00000000, 0x000007ff },
12997                 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
12998                         0x00000000, 0x000001ff },
12999
13000                 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
13001         };
13002
13003         is_5705 = is_5750 = 0;
13004         if (tg3_flag(tp, 5705_PLUS)) {
13005                 is_5705 = 1;
13006                 if (tg3_flag(tp, 5750_PLUS))
13007                         is_5750 = 1;
13008         }
13009
13010         for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
13011                 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
13012                         continue;
13013
13014                 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
13015                         continue;
13016
13017                 if (tg3_flag(tp, IS_5788) &&
13018                     (reg_tbl[i].flags & TG3_FL_NOT_5788))
13019                         continue;
13020
13021                 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
13022                         continue;
13023
13024                 offset = (u32) reg_tbl[i].offset;
13025                 read_mask = reg_tbl[i].read_mask;
13026                 write_mask = reg_tbl[i].write_mask;
13027
13028                 /* Save the original register content */
13029                 save_val = tr32(offset);
13030
13031                 /* Determine the read-only value. */
13032                 read_val = save_val & read_mask;
13033
13034                 /* Write zero to the register, then make sure the read-only bits
13035                  * are not changed and the read/write bits are all zeros.
13036                  */
13037                 tw32(offset, 0);
13038
13039                 val = tr32(offset);
13040
13041                 /* Test the read-only and read/write bits. */
13042                 if (((val & read_mask) != read_val) || (val & write_mask))
13043                         goto out;
13044
13045                 /* Write ones to all the bits defined by RdMask and WrMask, then
13046                  * make sure the read-only bits are not changed and the
13047                  * read/write bits are all ones.
13048                  */
13049                 tw32(offset, read_mask | write_mask);
13050
13051                 val = tr32(offset);
13052
13053                 /* Test the read-only bits. */
13054                 if ((val & read_mask) != read_val)
13055                         goto out;
13056
13057                 /* Test the read/write bits. */
13058                 if ((val & write_mask) != write_mask)
13059                         goto out;
13060
13061                 tw32(offset, save_val);
13062         }
13063
13064         return 0;
13065
13066 out:
13067         if (netif_msg_hw(tp))
13068                 netdev_err(tp->dev,
13069                            "Register test failed at offset %x\n", offset);
13070         tw32(offset, save_val);
13071         return -EIO;
13072 }
13073
13074 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
13075 {
13076         static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
13077         int i;
13078         u32 j;
13079
13080         for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
13081                 for (j = 0; j < len; j += 4) {
13082                         u32 val;
13083
13084                         tg3_write_mem(tp, offset + j, test_pattern[i]);
13085                         tg3_read_mem(tp, offset + j, &val);
13086                         if (val != test_pattern[i])
13087                                 return -EIO;
13088                 }
13089         }
13090         return 0;
13091 }
13092
13093 static int tg3_test_memory(struct tg3 *tp)
13094 {
13095         static struct mem_entry {
13096                 u32 offset;
13097                 u32 len;
13098         } mem_tbl_570x[] = {
13099                 { 0x00000000, 0x00b50},
13100                 { 0x00002000, 0x1c000},
13101                 { 0xffffffff, 0x00000}
13102         }, mem_tbl_5705[] = {
13103                 { 0x00000100, 0x0000c},
13104                 { 0x00000200, 0x00008},
13105                 { 0x00004000, 0x00800},
13106                 { 0x00006000, 0x01000},
13107                 { 0x00008000, 0x02000},
13108                 { 0x00010000, 0x0e000},
13109                 { 0xffffffff, 0x00000}
13110         }, mem_tbl_5755[] = {
13111                 { 0x00000200, 0x00008},
13112                 { 0x00004000, 0x00800},
13113                 { 0x00006000, 0x00800},
13114                 { 0x00008000, 0x02000},
13115                 { 0x00010000, 0x0c000},
13116                 { 0xffffffff, 0x00000}
13117         }, mem_tbl_5906[] = {
13118                 { 0x00000200, 0x00008},
13119                 { 0x00004000, 0x00400},
13120                 { 0x00006000, 0x00400},
13121                 { 0x00008000, 0x01000},
13122                 { 0x00010000, 0x01000},
13123                 { 0xffffffff, 0x00000}
13124         }, mem_tbl_5717[] = {
13125                 { 0x00000200, 0x00008},
13126                 { 0x00010000, 0x0a000},
13127                 { 0x00020000, 0x13c00},
13128                 { 0xffffffff, 0x00000}
13129         }, mem_tbl_57765[] = {
13130                 { 0x00000200, 0x00008},
13131                 { 0x00004000, 0x00800},
13132                 { 0x00006000, 0x09800},
13133                 { 0x00010000, 0x0a000},
13134                 { 0xffffffff, 0x00000}
13135         };
13136         struct mem_entry *mem_tbl;
13137         int err = 0;
13138         int i;
13139
13140         if (tg3_flag(tp, 5717_PLUS))
13141                 mem_tbl = mem_tbl_5717;
13142         else if (tg3_flag(tp, 57765_CLASS) ||
13143                  tg3_asic_rev(tp) == ASIC_REV_5762)
13144                 mem_tbl = mem_tbl_57765;
13145         else if (tg3_flag(tp, 5755_PLUS))
13146                 mem_tbl = mem_tbl_5755;
13147         else if (tg3_asic_rev(tp) == ASIC_REV_5906)
13148                 mem_tbl = mem_tbl_5906;
13149         else if (tg3_flag(tp, 5705_PLUS))
13150                 mem_tbl = mem_tbl_5705;
13151         else
13152                 mem_tbl = mem_tbl_570x;
13153
13154         for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
13155                 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
13156                 if (err)
13157                         break;
13158         }
13159
13160         return err;
13161 }
13162
13163 #define TG3_TSO_MSS             500
13164
13165 #define TG3_TSO_IP_HDR_LEN      20
13166 #define TG3_TSO_TCP_HDR_LEN     20
13167 #define TG3_TSO_TCP_OPT_LEN     12
13168
13169 static const u8 tg3_tso_header[] = {
13170 0x08, 0x00,
13171 0x45, 0x00, 0x00, 0x00,
13172 0x00, 0x00, 0x40, 0x00,
13173 0x40, 0x06, 0x00, 0x00,
13174 0x0a, 0x00, 0x00, 0x01,
13175 0x0a, 0x00, 0x00, 0x02,
13176 0x0d, 0x00, 0xe0, 0x00,
13177 0x00, 0x00, 0x01, 0x00,
13178 0x00, 0x00, 0x02, 0x00,
13179 0x80, 0x10, 0x10, 0x00,
13180 0x14, 0x09, 0x00, 0x00,
13181 0x01, 0x01, 0x08, 0x0a,
13182 0x11, 0x11, 0x11, 0x11,
13183 0x11, 0x11, 0x11, 0x11,
13184 };
13185
13186 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
13187 {
13188         u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
13189         u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
13190         u32 budget;
13191         struct sk_buff *skb;
13192         u8 *tx_data, *rx_data;
13193         dma_addr_t map;
13194         int num_pkts, tx_len, rx_len, i, err;
13195         struct tg3_rx_buffer_desc *desc;
13196         struct tg3_napi *tnapi, *rnapi;
13197         struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
13198
13199         tnapi = &tp->napi[0];
13200         rnapi = &tp->napi[0];
13201         if (tp->irq_cnt > 1) {
13202                 if (tg3_flag(tp, ENABLE_RSS))
13203                         rnapi = &tp->napi[1];
13204                 if (tg3_flag(tp, ENABLE_TSS))
13205                         tnapi = &tp->napi[1];
13206         }
13207         coal_now = tnapi->coal_now | rnapi->coal_now;
13208
13209         err = -EIO;
13210
13211         tx_len = pktsz;
13212         skb = netdev_alloc_skb(tp->dev, tx_len);
13213         if (!skb)
13214                 return -ENOMEM;
13215
13216         tx_data = skb_put(skb, tx_len);
13217         memcpy(tx_data, tp->dev->dev_addr, ETH_ALEN);
13218         memset(tx_data + ETH_ALEN, 0x0, 8);
13219
13220         tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
13221
13222         if (tso_loopback) {
13223                 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
13224
13225                 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
13226                               TG3_TSO_TCP_OPT_LEN;
13227
13228                 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
13229                        sizeof(tg3_tso_header));
13230                 mss = TG3_TSO_MSS;
13231
13232                 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
13233                 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
13234
13235                 /* Set the total length field in the IP header */
13236                 iph->tot_len = htons((u16)(mss + hdr_len));
13237
13238                 base_flags = (TXD_FLAG_CPU_PRE_DMA |
13239                               TXD_FLAG_CPU_POST_DMA);
13240
13241                 if (tg3_flag(tp, HW_TSO_1) ||
13242                     tg3_flag(tp, HW_TSO_2) ||
13243                     tg3_flag(tp, HW_TSO_3)) {
13244                         struct tcphdr *th;
13245                         val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
13246                         th = (struct tcphdr *)&tx_data[val];
13247                         th->check = 0;
13248                 } else
13249                         base_flags |= TXD_FLAG_TCPUDP_CSUM;
13250
13251                 if (tg3_flag(tp, HW_TSO_3)) {
13252                         mss |= (hdr_len & 0xc) << 12;
13253                         if (hdr_len & 0x10)
13254                                 base_flags |= 0x00000010;
13255                         base_flags |= (hdr_len & 0x3e0) << 5;
13256                 } else if (tg3_flag(tp, HW_TSO_2))
13257                         mss |= hdr_len << 9;
13258                 else if (tg3_flag(tp, HW_TSO_1) ||
13259                          tg3_asic_rev(tp) == ASIC_REV_5705) {
13260                         mss |= (TG3_TSO_TCP_OPT_LEN << 9);
13261                 } else {
13262                         base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
13263                 }
13264
13265                 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
13266         } else {
13267                 num_pkts = 1;
13268                 data_off = ETH_HLEN;
13269
13270                 if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
13271                     tx_len > VLAN_ETH_FRAME_LEN)
13272                         base_flags |= TXD_FLAG_JMB_PKT;
13273         }
13274
13275         for (i = data_off; i < tx_len; i++)
13276                 tx_data[i] = (u8) (i & 0xff);
13277
13278         map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
13279         if (pci_dma_mapping_error(tp->pdev, map)) {
13280                 dev_kfree_skb(skb);
13281                 return -EIO;
13282         }
13283
13284         val = tnapi->tx_prod;
13285         tnapi->tx_buffers[val].skb = skb;
13286         dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
13287
13288         tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13289                rnapi->coal_now);
13290
13291         udelay(10);
13292
13293         rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
13294
13295         budget = tg3_tx_avail(tnapi);
13296         if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
13297                             base_flags | TXD_FLAG_END, mss, 0)) {
13298                 tnapi->tx_buffers[val].skb = NULL;
13299                 dev_kfree_skb(skb);
13300                 return -EIO;
13301         }
13302
13303         tnapi->tx_prod++;
13304
13305         /* Sync BD data before updating mailbox */
13306         wmb();
13307
13308         tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
13309         tr32_mailbox(tnapi->prodmbox);
13310
13311         udelay(10);
13312
13313         /* 350 usec to allow enough time on some 10/100 Mbps devices.  */
13314         for (i = 0; i < 35; i++) {
13315                 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
13316                        coal_now);
13317
13318                 udelay(10);
13319
13320                 tx_idx = tnapi->hw_status->idx[0].tx_consumer;
13321                 rx_idx = rnapi->hw_status->idx[0].rx_producer;
13322                 if ((tx_idx == tnapi->tx_prod) &&
13323                     (rx_idx == (rx_start_idx + num_pkts)))
13324                         break;
13325         }
13326
13327         tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
13328         dev_kfree_skb(skb);
13329
13330         if (tx_idx != tnapi->tx_prod)
13331                 goto out;
13332
13333         if (rx_idx != rx_start_idx + num_pkts)
13334                 goto out;
13335
13336         val = data_off;
13337         while (rx_idx != rx_start_idx) {
13338                 desc = &rnapi->rx_rcb[rx_start_idx++];
13339                 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
13340                 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
13341
13342                 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
13343                     (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
13344                         goto out;
13345
13346                 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
13347                          - ETH_FCS_LEN;
13348
13349                 if (!tso_loopback) {
13350                         if (rx_len != tx_len)
13351                                 goto out;
13352
13353                         if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
13354                                 if (opaque_key != RXD_OPAQUE_RING_STD)
13355                                         goto out;
13356                         } else {
13357                                 if (opaque_key != RXD_OPAQUE_RING_JUMBO)
13358                                         goto out;
13359                         }
13360                 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
13361                            (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
13362                             >> RXD_TCPCSUM_SHIFT != 0xffff) {
13363                         goto out;
13364                 }
13365
13366                 if (opaque_key == RXD_OPAQUE_RING_STD) {
13367                         rx_data = tpr->rx_std_buffers[desc_idx].data;
13368                         map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
13369                                              mapping);
13370                 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
13371                         rx_data = tpr->rx_jmb_buffers[desc_idx].data;
13372                         map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
13373                                              mapping);
13374                 } else
13375                         goto out;
13376
13377                 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
13378                                             PCI_DMA_FROMDEVICE);
13379
13380                 rx_data += TG3_RX_OFFSET(tp);
13381                 for (i = data_off; i < rx_len; i++, val++) {
13382                         if (*(rx_data + i) != (u8) (val & 0xff))
13383                                 goto out;
13384                 }
13385         }
13386
13387         err = 0;
13388
13389         /* tg3_free_rings will unmap and free the rx_data */
13390 out:
13391         return err;
13392 }
13393
13394 #define TG3_STD_LOOPBACK_FAILED         1
13395 #define TG3_JMB_LOOPBACK_FAILED         2
13396 #define TG3_TSO_LOOPBACK_FAILED         4
13397 #define TG3_LOOPBACK_FAILED \
13398         (TG3_STD_LOOPBACK_FAILED | \
13399          TG3_JMB_LOOPBACK_FAILED | \
13400          TG3_TSO_LOOPBACK_FAILED)
13401
13402 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
13403 {
13404         int err = -EIO;
13405         u32 eee_cap;
13406         u32 jmb_pkt_sz = 9000;
13407
13408         if (tp->dma_limit)
13409                 jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
13410
13411         eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
13412         tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
13413
13414         if (!netif_running(tp->dev)) {
13415                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13416                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13417                 if (do_extlpbk)
13418                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13419                 goto done;
13420         }
13421
13422         err = tg3_reset_hw(tp, true);
13423         if (err) {
13424                 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13425                 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13426                 if (do_extlpbk)
13427                         data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED;
13428                 goto done;
13429         }
13430
13431         if (tg3_flag(tp, ENABLE_RSS)) {
13432                 int i;
13433
13434                 /* Reroute all rx packets to the 1st queue */
13435                 for (i = MAC_RSS_INDIR_TBL_0;
13436                      i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4)
13437                         tw32(i, 0x0);
13438         }
13439
13440         /* HW errata - mac loopback fails in some cases on 5780.
13441          * Normal traffic and PHY loopback are not affected by
13442          * errata.  Also, the MAC loopback test is deprecated for
13443          * all newer ASIC revisions.
13444          */
13445         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
13446             !tg3_flag(tp, CPMU_PRESENT)) {
13447                 tg3_mac_loopback(tp, true);
13448
13449                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13450                         data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13451
13452                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13453                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13454                         data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13455
13456                 tg3_mac_loopback(tp, false);
13457         }
13458
13459         if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
13460             !tg3_flag(tp, USE_PHYLIB)) {
13461                 int i;
13462
13463                 tg3_phy_lpbk_set(tp, 0, false);
13464
13465                 /* Wait for link */
13466                 for (i = 0; i < 100; i++) {
13467                         if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
13468                                 break;
13469                         mdelay(1);
13470                 }
13471
13472                 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13473                         data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED;
13474                 if (tg3_flag(tp, TSO_CAPABLE) &&
13475                     tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13476                         data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED;
13477                 if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13478                     tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13479                         data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED;
13480
13481                 if (do_extlpbk) {
13482                         tg3_phy_lpbk_set(tp, 0, true);
13483
13484                         /* All link indications report up, but the hardware
13485                          * isn't really ready for about 20 msec.  Double it
13486                          * to be sure.
13487                          */
13488                         mdelay(40);
13489
13490                         if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
13491                                 data[TG3_EXT_LOOPB_TEST] |=
13492                                                         TG3_STD_LOOPBACK_FAILED;
13493                         if (tg3_flag(tp, TSO_CAPABLE) &&
13494                             tg3_run_loopback(tp, ETH_FRAME_LEN, true))
13495                                 data[TG3_EXT_LOOPB_TEST] |=
13496                                                         TG3_TSO_LOOPBACK_FAILED;
13497                         if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
13498                             tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
13499                                 data[TG3_EXT_LOOPB_TEST] |=
13500                                                         TG3_JMB_LOOPBACK_FAILED;
13501                 }
13502
13503                 /* Re-enable gphy autopowerdown. */
13504                 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
13505                         tg3_phy_toggle_apd(tp, true);
13506         }
13507
13508         err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] |
13509                data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0;
13510
13511 done:
13512         tp->phy_flags |= eee_cap;
13513
13514         return err;
13515 }
13516
13517 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
13518                           u64 *data)
13519 {
13520         struct tg3 *tp = netdev_priv(dev);
13521         bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
13522
13523         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
13524                 if (tg3_power_up(tp)) {
13525                         etest->flags |= ETH_TEST_FL_FAILED;
13526                         memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
13527                         return;
13528                 }
13529                 tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
13530         }
13531
13532         memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
13533
13534         if (tg3_test_nvram(tp) != 0) {
13535                 etest->flags |= ETH_TEST_FL_FAILED;
13536                 data[TG3_NVRAM_TEST] = 1;
13537         }
13538         if (!doextlpbk && tg3_test_link(tp)) {
13539                 etest->flags |= ETH_TEST_FL_FAILED;
13540                 data[TG3_LINK_TEST] = 1;
13541         }
13542         if (etest->flags & ETH_TEST_FL_OFFLINE) {
13543                 int err, err2 = 0, irq_sync = 0;
13544
13545                 if (netif_running(dev)) {
13546                         tg3_phy_stop(tp);
13547                         tg3_netif_stop(tp);
13548                         irq_sync = 1;
13549                 }
13550
13551                 tg3_full_lock(tp, irq_sync);
13552                 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
13553                 err = tg3_nvram_lock(tp);
13554                 tg3_halt_cpu(tp, RX_CPU_BASE);
13555                 if (!tg3_flag(tp, 5705_PLUS))
13556                         tg3_halt_cpu(tp, TX_CPU_BASE);
13557                 if (!err)
13558                         tg3_nvram_unlock(tp);
13559
13560                 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
13561                         tg3_phy_reset(tp);
13562
13563                 if (tg3_test_registers(tp) != 0) {
13564                         etest->flags |= ETH_TEST_FL_FAILED;
13565                         data[TG3_REGISTER_TEST] = 1;
13566                 }
13567
13568                 if (tg3_test_memory(tp) != 0) {
13569                         etest->flags |= ETH_TEST_FL_FAILED;
13570                         data[TG3_MEMORY_TEST] = 1;
13571                 }
13572
13573                 if (doextlpbk)
13574                         etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE;
13575
13576                 if (tg3_test_loopback(tp, data, doextlpbk))
13577                         etest->flags |= ETH_TEST_FL_FAILED;
13578
13579                 tg3_full_unlock(tp);
13580
13581                 if (tg3_test_interrupt(tp) != 0) {
13582                         etest->flags |= ETH_TEST_FL_FAILED;
13583                         data[TG3_INTERRUPT_TEST] = 1;
13584                 }
13585
13586                 tg3_full_lock(tp, 0);
13587
13588                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13589                 if (netif_running(dev)) {
13590                         tg3_flag_set(tp, INIT_COMPLETE);
13591                         err2 = tg3_restart_hw(tp, true);
13592                         if (!err2)
13593                                 tg3_netif_start(tp);
13594                 }
13595
13596                 tg3_full_unlock(tp);
13597
13598                 if (irq_sync && !err2)
13599                         tg3_phy_start(tp);
13600         }
13601         if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)
13602                 tg3_power_down_prepare(tp);
13603
13604 }
13605
13606 static int tg3_hwtstamp_ioctl(struct net_device *dev,
13607                               struct ifreq *ifr, int cmd)
13608 {
13609         struct tg3 *tp = netdev_priv(dev);
13610         struct hwtstamp_config stmpconf;
13611
13612         if (!tg3_flag(tp, PTP_CAPABLE))
13613                 return -EINVAL;
13614
13615         if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf)))
13616                 return -EFAULT;
13617
13618         if (stmpconf.flags)
13619                 return -EINVAL;
13620
13621         switch (stmpconf.tx_type) {
13622         case HWTSTAMP_TX_ON:
13623                 tg3_flag_set(tp, TX_TSTAMP_EN);
13624                 break;
13625         case HWTSTAMP_TX_OFF:
13626                 tg3_flag_clear(tp, TX_TSTAMP_EN);
13627                 break;
13628         default:
13629                 return -ERANGE;
13630         }
13631
13632         switch (stmpconf.rx_filter) {
13633         case HWTSTAMP_FILTER_NONE:
13634                 tp->rxptpctl = 0;
13635                 break;
13636         case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
13637                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13638                                TG3_RX_PTP_CTL_ALL_V1_EVENTS;
13639                 break;
13640         case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
13641                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13642                                TG3_RX_PTP_CTL_SYNC_EVNT;
13643                 break;
13644         case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
13645                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN |
13646                                TG3_RX_PTP_CTL_DELAY_REQ;
13647                 break;
13648         case HWTSTAMP_FILTER_PTP_V2_EVENT:
13649                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13650                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13651                 break;
13652         case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
13653                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13654                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13655                 break;
13656         case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
13657                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13658                                TG3_RX_PTP_CTL_ALL_V2_EVENTS;
13659                 break;
13660         case HWTSTAMP_FILTER_PTP_V2_SYNC:
13661                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13662                                TG3_RX_PTP_CTL_SYNC_EVNT;
13663                 break;
13664         case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
13665                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13666                                TG3_RX_PTP_CTL_SYNC_EVNT;
13667                 break;
13668         case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
13669                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13670                                TG3_RX_PTP_CTL_SYNC_EVNT;
13671                 break;
13672         case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
13673                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN |
13674                                TG3_RX_PTP_CTL_DELAY_REQ;
13675                 break;
13676         case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
13677                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN |
13678                                TG3_RX_PTP_CTL_DELAY_REQ;
13679                 break;
13680         case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
13681                 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN |
13682                                TG3_RX_PTP_CTL_DELAY_REQ;
13683                 break;
13684         default:
13685                 return -ERANGE;
13686         }
13687
13688         if (netif_running(dev) && tp->rxptpctl)
13689                 tw32(TG3_RX_PTP_CTL,
13690                      tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK);
13691
13692         return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ?
13693                 -EFAULT : 0;
13694 }
13695
13696 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
13697 {
13698         struct mii_ioctl_data *data = if_mii(ifr);
13699         struct tg3 *tp = netdev_priv(dev);
13700         int err;
13701
13702         if (tg3_flag(tp, USE_PHYLIB)) {
13703                 struct phy_device *phydev;
13704                 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
13705                         return -EAGAIN;
13706                 phydev = tp->mdio_bus->phy_map[tp->phy_addr];
13707                 return phy_mii_ioctl(phydev, ifr, cmd);
13708         }
13709
13710         switch (cmd) {
13711         case SIOCGMIIPHY:
13712                 data->phy_id = tp->phy_addr;
13713
13714                 /* fallthru */
13715         case SIOCGMIIREG: {
13716                 u32 mii_regval;
13717
13718                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13719                         break;                  /* We have no PHY */
13720
13721                 if (!netif_running(dev))
13722                         return -EAGAIN;
13723
13724                 spin_lock_bh(&tp->lock);
13725                 err = __tg3_readphy(tp, data->phy_id & 0x1f,
13726                                     data->reg_num & 0x1f, &mii_regval);
13727                 spin_unlock_bh(&tp->lock);
13728
13729                 data->val_out = mii_regval;
13730
13731                 return err;
13732         }
13733
13734         case SIOCSMIIREG:
13735                 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
13736                         break;                  /* We have no PHY */
13737
13738                 if (!netif_running(dev))
13739                         return -EAGAIN;
13740
13741                 spin_lock_bh(&tp->lock);
13742                 err = __tg3_writephy(tp, data->phy_id & 0x1f,
13743                                      data->reg_num & 0x1f, data->val_in);
13744                 spin_unlock_bh(&tp->lock);
13745
13746                 return err;
13747
13748         case SIOCSHWTSTAMP:
13749                 return tg3_hwtstamp_ioctl(dev, ifr, cmd);
13750
13751         default:
13752                 /* do nothing */
13753                 break;
13754         }
13755         return -EOPNOTSUPP;
13756 }
13757
13758 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
13759 {
13760         struct tg3 *tp = netdev_priv(dev);
13761
13762         memcpy(ec, &tp->coal, sizeof(*ec));
13763         return 0;
13764 }
13765
13766 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
13767 {
13768         struct tg3 *tp = netdev_priv(dev);
13769         u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
13770         u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
13771
13772         if (!tg3_flag(tp, 5705_PLUS)) {
13773                 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
13774                 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
13775                 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
13776                 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
13777         }
13778
13779         if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
13780             (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
13781             (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
13782             (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
13783             (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
13784             (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
13785             (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
13786             (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
13787             (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
13788             (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
13789                 return -EINVAL;
13790
13791         /* No rx interrupts will be generated if both are zero */
13792         if ((ec->rx_coalesce_usecs == 0) &&
13793             (ec->rx_max_coalesced_frames == 0))
13794                 return -EINVAL;
13795
13796         /* No tx interrupts will be generated if both are zero */
13797         if ((ec->tx_coalesce_usecs == 0) &&
13798             (ec->tx_max_coalesced_frames == 0))
13799                 return -EINVAL;
13800
13801         /* Only copy relevant parameters, ignore all others. */
13802         tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
13803         tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
13804         tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
13805         tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
13806         tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
13807         tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
13808         tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
13809         tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
13810         tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
13811
13812         if (netif_running(dev)) {
13813                 tg3_full_lock(tp, 0);
13814                 __tg3_set_coalesce(tp, &tp->coal);
13815                 tg3_full_unlock(tp);
13816         }
13817         return 0;
13818 }
13819
13820 static int tg3_set_eee(struct net_device *dev, struct ethtool_eee *edata)
13821 {
13822         struct tg3 *tp = netdev_priv(dev);
13823
13824         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
13825                 netdev_warn(tp->dev, "Board does not support EEE!\n");
13826                 return -EOPNOTSUPP;
13827         }
13828
13829         if (edata->advertised != tp->eee.advertised) {
13830                 netdev_warn(tp->dev,
13831                             "Direct manipulation of EEE advertisement is not supported\n");
13832                 return -EINVAL;
13833         }
13834
13835         if (edata->tx_lpi_timer > TG3_CPMU_DBTMR1_LNKIDLE_MAX) {
13836                 netdev_warn(tp->dev,
13837                             "Maximal Tx Lpi timer supported is %#x(u)\n",
13838                             TG3_CPMU_DBTMR1_LNKIDLE_MAX);
13839                 return -EINVAL;
13840         }
13841
13842         tp->eee = *edata;
13843
13844         tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED;
13845         tg3_warn_mgmt_link_flap(tp);
13846
13847         if (netif_running(tp->dev)) {
13848                 tg3_full_lock(tp, 0);
13849                 tg3_setup_eee(tp);
13850                 tg3_phy_reset(tp);
13851                 tg3_full_unlock(tp);
13852         }
13853
13854         return 0;
13855 }
13856
13857 static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata)
13858 {
13859         struct tg3 *tp = netdev_priv(dev);
13860
13861         if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) {
13862                 netdev_warn(tp->dev,
13863                             "Board does not support EEE!\n");
13864                 return -EOPNOTSUPP;
13865         }
13866
13867         *edata = tp->eee;
13868         return 0;
13869 }
13870
13871 static const struct ethtool_ops tg3_ethtool_ops = {
13872         .get_settings           = tg3_get_settings,
13873         .set_settings           = tg3_set_settings,
13874         .get_drvinfo            = tg3_get_drvinfo,
13875         .get_regs_len           = tg3_get_regs_len,
13876         .get_regs               = tg3_get_regs,
13877         .get_wol                = tg3_get_wol,
13878         .set_wol                = tg3_set_wol,
13879         .get_msglevel           = tg3_get_msglevel,
13880         .set_msglevel           = tg3_set_msglevel,
13881         .nway_reset             = tg3_nway_reset,
13882         .get_link               = ethtool_op_get_link,
13883         .get_eeprom_len         = tg3_get_eeprom_len,
13884         .get_eeprom             = tg3_get_eeprom,
13885         .set_eeprom             = tg3_set_eeprom,
13886         .get_ringparam          = tg3_get_ringparam,
13887         .set_ringparam          = tg3_set_ringparam,
13888         .get_pauseparam         = tg3_get_pauseparam,
13889         .set_pauseparam         = tg3_set_pauseparam,
13890         .self_test              = tg3_self_test,
13891         .get_strings            = tg3_get_strings,
13892         .set_phys_id            = tg3_set_phys_id,
13893         .get_ethtool_stats      = tg3_get_ethtool_stats,
13894         .get_coalesce           = tg3_get_coalesce,
13895         .set_coalesce           = tg3_set_coalesce,
13896         .get_sset_count         = tg3_get_sset_count,
13897         .get_rxnfc              = tg3_get_rxnfc,
13898         .get_rxfh_indir_size    = tg3_get_rxfh_indir_size,
13899         .get_rxfh_indir         = tg3_get_rxfh_indir,
13900         .set_rxfh_indir         = tg3_set_rxfh_indir,
13901         .get_channels           = tg3_get_channels,
13902         .set_channels           = tg3_set_channels,
13903         .get_ts_info            = tg3_get_ts_info,
13904         .get_eee                = tg3_get_eee,
13905         .set_eee                = tg3_set_eee,
13906 };
13907
13908 static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
13909                                                 struct rtnl_link_stats64 *stats)
13910 {
13911         struct tg3 *tp = netdev_priv(dev);
13912
13913         spin_lock_bh(&tp->lock);
13914         if (!tp->hw_stats) {
13915                 spin_unlock_bh(&tp->lock);
13916                 return &tp->net_stats_prev;
13917         }
13918
13919         tg3_get_nstats(tp, stats);
13920         spin_unlock_bh(&tp->lock);
13921
13922         return stats;
13923 }
13924
13925 static void tg3_set_rx_mode(struct net_device *dev)
13926 {
13927         struct tg3 *tp = netdev_priv(dev);
13928
13929         if (!netif_running(dev))
13930                 return;
13931
13932         tg3_full_lock(tp, 0);
13933         __tg3_set_rx_mode(dev);
13934         tg3_full_unlock(tp);
13935 }
13936
13937 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
13938                                int new_mtu)
13939 {
13940         dev->mtu = new_mtu;
13941
13942         if (new_mtu > ETH_DATA_LEN) {
13943                 if (tg3_flag(tp, 5780_CLASS)) {
13944                         netdev_update_features(dev);
13945                         tg3_flag_clear(tp, TSO_CAPABLE);
13946                 } else {
13947                         tg3_flag_set(tp, JUMBO_RING_ENABLE);
13948                 }
13949         } else {
13950                 if (tg3_flag(tp, 5780_CLASS)) {
13951                         tg3_flag_set(tp, TSO_CAPABLE);
13952                         netdev_update_features(dev);
13953                 }
13954                 tg3_flag_clear(tp, JUMBO_RING_ENABLE);
13955         }
13956 }
13957
13958 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
13959 {
13960         struct tg3 *tp = netdev_priv(dev);
13961         int err;
13962         bool reset_phy = false;
13963
13964         if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
13965                 return -EINVAL;
13966
13967         if (!netif_running(dev)) {
13968                 /* We'll just catch it later when the
13969                  * device is up'd.
13970                  */
13971                 tg3_set_mtu(dev, tp, new_mtu);
13972                 return 0;
13973         }
13974
13975         tg3_phy_stop(tp);
13976
13977         tg3_netif_stop(tp);
13978
13979         tg3_full_lock(tp, 1);
13980
13981         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13982
13983         tg3_set_mtu(dev, tp, new_mtu);
13984
13985         /* Reset PHY, otherwise the read DMA engine will be in a mode that
13986          * breaks all requests to 256 bytes.
13987          */
13988         if (tg3_asic_rev(tp) == ASIC_REV_57766)
13989                 reset_phy = true;
13990
13991         err = tg3_restart_hw(tp, reset_phy);
13992
13993         if (!err)
13994                 tg3_netif_start(tp);
13995
13996         tg3_full_unlock(tp);
13997
13998         if (!err)
13999                 tg3_phy_start(tp);
14000
14001         return err;
14002 }
14003
14004 static const struct net_device_ops tg3_netdev_ops = {
14005         .ndo_open               = tg3_open,
14006         .ndo_stop               = tg3_close,
14007         .ndo_start_xmit         = tg3_start_xmit,
14008         .ndo_get_stats64        = tg3_get_stats64,
14009         .ndo_validate_addr      = eth_validate_addr,
14010         .ndo_set_rx_mode        = tg3_set_rx_mode,
14011         .ndo_set_mac_address    = tg3_set_mac_addr,
14012         .ndo_do_ioctl           = tg3_ioctl,
14013         .ndo_tx_timeout         = tg3_tx_timeout,
14014         .ndo_change_mtu         = tg3_change_mtu,
14015         .ndo_fix_features       = tg3_fix_features,
14016         .ndo_set_features       = tg3_set_features,
14017 #ifdef CONFIG_NET_POLL_CONTROLLER
14018         .ndo_poll_controller    = tg3_poll_controller,
14019 #endif
14020 };
14021
14022 static void tg3_get_eeprom_size(struct tg3 *tp)
14023 {
14024         u32 cursize, val, magic;
14025
14026         tp->nvram_size = EEPROM_CHIP_SIZE;
14027
14028         if (tg3_nvram_read(tp, 0, &magic) != 0)
14029                 return;
14030
14031         if ((magic != TG3_EEPROM_MAGIC) &&
14032             ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
14033             ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
14034                 return;
14035
14036         /*
14037          * Size the chip by reading offsets at increasing powers of two.
14038          * When we encounter our validation signature, we know the addressing
14039          * has wrapped around, and thus have our chip size.
14040          */
14041         cursize = 0x10;
14042
14043         while (cursize < tp->nvram_size) {
14044                 if (tg3_nvram_read(tp, cursize, &val) != 0)
14045                         return;
14046
14047                 if (val == magic)
14048                         break;
14049
14050                 cursize <<= 1;
14051         }
14052
14053         tp->nvram_size = cursize;
14054 }
14055
14056 static void tg3_get_nvram_size(struct tg3 *tp)
14057 {
14058         u32 val;
14059
14060         if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
14061                 return;
14062
14063         /* Selfboot format */
14064         if (val != TG3_EEPROM_MAGIC) {
14065                 tg3_get_eeprom_size(tp);
14066                 return;
14067         }
14068
14069         if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
14070                 if (val != 0) {
14071                         /* This is confusing.  We want to operate on the
14072                          * 16-bit value at offset 0xf2.  The tg3_nvram_read()
14073                          * call will read from NVRAM and byteswap the data
14074                          * according to the byteswapping settings for all
14075                          * other register accesses.  This ensures the data we
14076                          * want will always reside in the lower 16-bits.
14077                          * However, the data in NVRAM is in LE format, which
14078                          * means the data from the NVRAM read will always be
14079                          * opposite the endianness of the CPU.  The 16-bit
14080                          * byteswap then brings the data to CPU endianness.
14081                          */
14082                         tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
14083                         return;
14084                 }
14085         }
14086         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14087 }
14088
14089 static void tg3_get_nvram_info(struct tg3 *tp)
14090 {
14091         u32 nvcfg1;
14092
14093         nvcfg1 = tr32(NVRAM_CFG1);
14094         if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
14095                 tg3_flag_set(tp, FLASH);
14096         } else {
14097                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14098                 tw32(NVRAM_CFG1, nvcfg1);
14099         }
14100
14101         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
14102             tg3_flag(tp, 5780_CLASS)) {
14103                 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
14104                 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
14105                         tp->nvram_jedecnum = JEDEC_ATMEL;
14106                         tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14107                         tg3_flag_set(tp, NVRAM_BUFFERED);
14108                         break;
14109                 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
14110                         tp->nvram_jedecnum = JEDEC_ATMEL;
14111                         tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
14112                         break;
14113                 case FLASH_VENDOR_ATMEL_EEPROM:
14114                         tp->nvram_jedecnum = JEDEC_ATMEL;
14115                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14116                         tg3_flag_set(tp, NVRAM_BUFFERED);
14117                         break;
14118                 case FLASH_VENDOR_ST:
14119                         tp->nvram_jedecnum = JEDEC_ST;
14120                         tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
14121                         tg3_flag_set(tp, NVRAM_BUFFERED);
14122                         break;
14123                 case FLASH_VENDOR_SAIFUN:
14124                         tp->nvram_jedecnum = JEDEC_SAIFUN;
14125                         tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
14126                         break;
14127                 case FLASH_VENDOR_SST_SMALL:
14128                 case FLASH_VENDOR_SST_LARGE:
14129                         tp->nvram_jedecnum = JEDEC_SST;
14130                         tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
14131                         break;
14132                 }
14133         } else {
14134                 tp->nvram_jedecnum = JEDEC_ATMEL;
14135                 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
14136                 tg3_flag_set(tp, NVRAM_BUFFERED);
14137         }
14138 }
14139
14140 static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
14141 {
14142         switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
14143         case FLASH_5752PAGE_SIZE_256:
14144                 tp->nvram_pagesize = 256;
14145                 break;
14146         case FLASH_5752PAGE_SIZE_512:
14147                 tp->nvram_pagesize = 512;
14148                 break;
14149         case FLASH_5752PAGE_SIZE_1K:
14150                 tp->nvram_pagesize = 1024;
14151                 break;
14152         case FLASH_5752PAGE_SIZE_2K:
14153                 tp->nvram_pagesize = 2048;
14154                 break;
14155         case FLASH_5752PAGE_SIZE_4K:
14156                 tp->nvram_pagesize = 4096;
14157                 break;
14158         case FLASH_5752PAGE_SIZE_264:
14159                 tp->nvram_pagesize = 264;
14160                 break;
14161         case FLASH_5752PAGE_SIZE_528:
14162                 tp->nvram_pagesize = 528;
14163                 break;
14164         }
14165 }
14166
14167 static void tg3_get_5752_nvram_info(struct tg3 *tp)
14168 {
14169         u32 nvcfg1;
14170
14171         nvcfg1 = tr32(NVRAM_CFG1);
14172
14173         /* NVRAM protection for TPM */
14174         if (nvcfg1 & (1 << 27))
14175                 tg3_flag_set(tp, PROTECTED_NVRAM);
14176
14177         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14178         case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
14179         case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
14180                 tp->nvram_jedecnum = JEDEC_ATMEL;
14181                 tg3_flag_set(tp, NVRAM_BUFFERED);
14182                 break;
14183         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14184                 tp->nvram_jedecnum = JEDEC_ATMEL;
14185                 tg3_flag_set(tp, NVRAM_BUFFERED);
14186                 tg3_flag_set(tp, FLASH);
14187                 break;
14188         case FLASH_5752VENDOR_ST_M45PE10:
14189         case FLASH_5752VENDOR_ST_M45PE20:
14190         case FLASH_5752VENDOR_ST_M45PE40:
14191                 tp->nvram_jedecnum = JEDEC_ST;
14192                 tg3_flag_set(tp, NVRAM_BUFFERED);
14193                 tg3_flag_set(tp, FLASH);
14194                 break;
14195         }
14196
14197         if (tg3_flag(tp, FLASH)) {
14198                 tg3_nvram_get_pagesize(tp, nvcfg1);
14199         } else {
14200                 /* For eeprom, set pagesize to maximum eeprom size */
14201                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14202
14203                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14204                 tw32(NVRAM_CFG1, nvcfg1);
14205         }
14206 }
14207
14208 static void tg3_get_5755_nvram_info(struct tg3 *tp)
14209 {
14210         u32 nvcfg1, protect = 0;
14211
14212         nvcfg1 = tr32(NVRAM_CFG1);
14213
14214         /* NVRAM protection for TPM */
14215         if (nvcfg1 & (1 << 27)) {
14216                 tg3_flag_set(tp, PROTECTED_NVRAM);
14217                 protect = 1;
14218         }
14219
14220         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14221         switch (nvcfg1) {
14222         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14223         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14224         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14225         case FLASH_5755VENDOR_ATMEL_FLASH_5:
14226                 tp->nvram_jedecnum = JEDEC_ATMEL;
14227                 tg3_flag_set(tp, NVRAM_BUFFERED);
14228                 tg3_flag_set(tp, FLASH);
14229                 tp->nvram_pagesize = 264;
14230                 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
14231                     nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
14232                         tp->nvram_size = (protect ? 0x3e200 :
14233                                           TG3_NVRAM_SIZE_512KB);
14234                 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
14235                         tp->nvram_size = (protect ? 0x1f200 :
14236                                           TG3_NVRAM_SIZE_256KB);
14237                 else
14238                         tp->nvram_size = (protect ? 0x1f200 :
14239                                           TG3_NVRAM_SIZE_128KB);
14240                 break;
14241         case FLASH_5752VENDOR_ST_M45PE10:
14242         case FLASH_5752VENDOR_ST_M45PE20:
14243         case FLASH_5752VENDOR_ST_M45PE40:
14244                 tp->nvram_jedecnum = JEDEC_ST;
14245                 tg3_flag_set(tp, NVRAM_BUFFERED);
14246                 tg3_flag_set(tp, FLASH);
14247                 tp->nvram_pagesize = 256;
14248                 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
14249                         tp->nvram_size = (protect ?
14250                                           TG3_NVRAM_SIZE_64KB :
14251                                           TG3_NVRAM_SIZE_128KB);
14252                 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
14253                         tp->nvram_size = (protect ?
14254                                           TG3_NVRAM_SIZE_64KB :
14255                                           TG3_NVRAM_SIZE_256KB);
14256                 else
14257                         tp->nvram_size = (protect ?
14258                                           TG3_NVRAM_SIZE_128KB :
14259                                           TG3_NVRAM_SIZE_512KB);
14260                 break;
14261         }
14262 }
14263
14264 static void tg3_get_5787_nvram_info(struct tg3 *tp)
14265 {
14266         u32 nvcfg1;
14267
14268         nvcfg1 = tr32(NVRAM_CFG1);
14269
14270         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14271         case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
14272         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14273         case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
14274         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14275                 tp->nvram_jedecnum = JEDEC_ATMEL;
14276                 tg3_flag_set(tp, NVRAM_BUFFERED);
14277                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14278
14279                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14280                 tw32(NVRAM_CFG1, nvcfg1);
14281                 break;
14282         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14283         case FLASH_5755VENDOR_ATMEL_FLASH_1:
14284         case FLASH_5755VENDOR_ATMEL_FLASH_2:
14285         case FLASH_5755VENDOR_ATMEL_FLASH_3:
14286                 tp->nvram_jedecnum = JEDEC_ATMEL;
14287                 tg3_flag_set(tp, NVRAM_BUFFERED);
14288                 tg3_flag_set(tp, FLASH);
14289                 tp->nvram_pagesize = 264;
14290                 break;
14291         case FLASH_5752VENDOR_ST_M45PE10:
14292         case FLASH_5752VENDOR_ST_M45PE20:
14293         case FLASH_5752VENDOR_ST_M45PE40:
14294                 tp->nvram_jedecnum = JEDEC_ST;
14295                 tg3_flag_set(tp, NVRAM_BUFFERED);
14296                 tg3_flag_set(tp, FLASH);
14297                 tp->nvram_pagesize = 256;
14298                 break;
14299         }
14300 }
14301
14302 static void tg3_get_5761_nvram_info(struct tg3 *tp)
14303 {
14304         u32 nvcfg1, protect = 0;
14305
14306         nvcfg1 = tr32(NVRAM_CFG1);
14307
14308         /* NVRAM protection for TPM */
14309         if (nvcfg1 & (1 << 27)) {
14310                 tg3_flag_set(tp, PROTECTED_NVRAM);
14311                 protect = 1;
14312         }
14313
14314         nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
14315         switch (nvcfg1) {
14316         case FLASH_5761VENDOR_ATMEL_ADB021D:
14317         case FLASH_5761VENDOR_ATMEL_ADB041D:
14318         case FLASH_5761VENDOR_ATMEL_ADB081D:
14319         case FLASH_5761VENDOR_ATMEL_ADB161D:
14320         case FLASH_5761VENDOR_ATMEL_MDB021D:
14321         case FLASH_5761VENDOR_ATMEL_MDB041D:
14322         case FLASH_5761VENDOR_ATMEL_MDB081D:
14323         case FLASH_5761VENDOR_ATMEL_MDB161D:
14324                 tp->nvram_jedecnum = JEDEC_ATMEL;
14325                 tg3_flag_set(tp, NVRAM_BUFFERED);
14326                 tg3_flag_set(tp, FLASH);
14327                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14328                 tp->nvram_pagesize = 256;
14329                 break;
14330         case FLASH_5761VENDOR_ST_A_M45PE20:
14331         case FLASH_5761VENDOR_ST_A_M45PE40:
14332         case FLASH_5761VENDOR_ST_A_M45PE80:
14333         case FLASH_5761VENDOR_ST_A_M45PE16:
14334         case FLASH_5761VENDOR_ST_M_M45PE20:
14335         case FLASH_5761VENDOR_ST_M_M45PE40:
14336         case FLASH_5761VENDOR_ST_M_M45PE80:
14337         case FLASH_5761VENDOR_ST_M_M45PE16:
14338                 tp->nvram_jedecnum = JEDEC_ST;
14339                 tg3_flag_set(tp, NVRAM_BUFFERED);
14340                 tg3_flag_set(tp, FLASH);
14341                 tp->nvram_pagesize = 256;
14342                 break;
14343         }
14344
14345         if (protect) {
14346                 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
14347         } else {
14348                 switch (nvcfg1) {
14349                 case FLASH_5761VENDOR_ATMEL_ADB161D:
14350                 case FLASH_5761VENDOR_ATMEL_MDB161D:
14351                 case FLASH_5761VENDOR_ST_A_M45PE16:
14352                 case FLASH_5761VENDOR_ST_M_M45PE16:
14353                         tp->nvram_size = TG3_NVRAM_SIZE_2MB;
14354                         break;
14355                 case FLASH_5761VENDOR_ATMEL_ADB081D:
14356                 case FLASH_5761VENDOR_ATMEL_MDB081D:
14357                 case FLASH_5761VENDOR_ST_A_M45PE80:
14358                 case FLASH_5761VENDOR_ST_M_M45PE80:
14359                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14360                         break;
14361                 case FLASH_5761VENDOR_ATMEL_ADB041D:
14362                 case FLASH_5761VENDOR_ATMEL_MDB041D:
14363                 case FLASH_5761VENDOR_ST_A_M45PE40:
14364                 case FLASH_5761VENDOR_ST_M_M45PE40:
14365                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14366                         break;
14367                 case FLASH_5761VENDOR_ATMEL_ADB021D:
14368                 case FLASH_5761VENDOR_ATMEL_MDB021D:
14369                 case FLASH_5761VENDOR_ST_A_M45PE20:
14370                 case FLASH_5761VENDOR_ST_M_M45PE20:
14371                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14372                         break;
14373                 }
14374         }
14375 }
14376
14377 static void tg3_get_5906_nvram_info(struct tg3 *tp)
14378 {
14379         tp->nvram_jedecnum = JEDEC_ATMEL;
14380         tg3_flag_set(tp, NVRAM_BUFFERED);
14381         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14382 }
14383
14384 static void tg3_get_57780_nvram_info(struct tg3 *tp)
14385 {
14386         u32 nvcfg1;
14387
14388         nvcfg1 = tr32(NVRAM_CFG1);
14389
14390         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14391         case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
14392         case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
14393                 tp->nvram_jedecnum = JEDEC_ATMEL;
14394                 tg3_flag_set(tp, NVRAM_BUFFERED);
14395                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14396
14397                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14398                 tw32(NVRAM_CFG1, nvcfg1);
14399                 return;
14400         case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14401         case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14402         case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14403         case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14404         case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14405         case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14406         case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14407                 tp->nvram_jedecnum = JEDEC_ATMEL;
14408                 tg3_flag_set(tp, NVRAM_BUFFERED);
14409                 tg3_flag_set(tp, FLASH);
14410
14411                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14412                 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
14413                 case FLASH_57780VENDOR_ATMEL_AT45DB011D:
14414                 case FLASH_57780VENDOR_ATMEL_AT45DB011B:
14415                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14416                         break;
14417                 case FLASH_57780VENDOR_ATMEL_AT45DB021D:
14418                 case FLASH_57780VENDOR_ATMEL_AT45DB021B:
14419                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14420                         break;
14421                 case FLASH_57780VENDOR_ATMEL_AT45DB041D:
14422                 case FLASH_57780VENDOR_ATMEL_AT45DB041B:
14423                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14424                         break;
14425                 }
14426                 break;
14427         case FLASH_5752VENDOR_ST_M45PE10:
14428         case FLASH_5752VENDOR_ST_M45PE20:
14429         case FLASH_5752VENDOR_ST_M45PE40:
14430                 tp->nvram_jedecnum = JEDEC_ST;
14431                 tg3_flag_set(tp, NVRAM_BUFFERED);
14432                 tg3_flag_set(tp, FLASH);
14433
14434                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14435                 case FLASH_5752VENDOR_ST_M45PE10:
14436                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14437                         break;
14438                 case FLASH_5752VENDOR_ST_M45PE20:
14439                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14440                         break;
14441                 case FLASH_5752VENDOR_ST_M45PE40:
14442                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14443                         break;
14444                 }
14445                 break;
14446         default:
14447                 tg3_flag_set(tp, NO_NVRAM);
14448                 return;
14449         }
14450
14451         tg3_nvram_get_pagesize(tp, nvcfg1);
14452         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14453                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14454 }
14455
14456
14457 static void tg3_get_5717_nvram_info(struct tg3 *tp)
14458 {
14459         u32 nvcfg1;
14460
14461         nvcfg1 = tr32(NVRAM_CFG1);
14462
14463         switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14464         case FLASH_5717VENDOR_ATMEL_EEPROM:
14465         case FLASH_5717VENDOR_MICRO_EEPROM:
14466                 tp->nvram_jedecnum = JEDEC_ATMEL;
14467                 tg3_flag_set(tp, NVRAM_BUFFERED);
14468                 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14469
14470                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14471                 tw32(NVRAM_CFG1, nvcfg1);
14472                 return;
14473         case FLASH_5717VENDOR_ATMEL_MDB011D:
14474         case FLASH_5717VENDOR_ATMEL_ADB011B:
14475         case FLASH_5717VENDOR_ATMEL_ADB011D:
14476         case FLASH_5717VENDOR_ATMEL_MDB021D:
14477         case FLASH_5717VENDOR_ATMEL_ADB021B:
14478         case FLASH_5717VENDOR_ATMEL_ADB021D:
14479         case FLASH_5717VENDOR_ATMEL_45USPT:
14480                 tp->nvram_jedecnum = JEDEC_ATMEL;
14481                 tg3_flag_set(tp, NVRAM_BUFFERED);
14482                 tg3_flag_set(tp, FLASH);
14483
14484                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14485                 case FLASH_5717VENDOR_ATMEL_MDB021D:
14486                         /* Detect size with tg3_nvram_get_size() */
14487                         break;
14488                 case FLASH_5717VENDOR_ATMEL_ADB021B:
14489                 case FLASH_5717VENDOR_ATMEL_ADB021D:
14490                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14491                         break;
14492                 default:
14493                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14494                         break;
14495                 }
14496                 break;
14497         case FLASH_5717VENDOR_ST_M_M25PE10:
14498         case FLASH_5717VENDOR_ST_A_M25PE10:
14499         case FLASH_5717VENDOR_ST_M_M45PE10:
14500         case FLASH_5717VENDOR_ST_A_M45PE10:
14501         case FLASH_5717VENDOR_ST_M_M25PE20:
14502         case FLASH_5717VENDOR_ST_A_M25PE20:
14503         case FLASH_5717VENDOR_ST_M_M45PE20:
14504         case FLASH_5717VENDOR_ST_A_M45PE20:
14505         case FLASH_5717VENDOR_ST_25USPT:
14506         case FLASH_5717VENDOR_ST_45USPT:
14507                 tp->nvram_jedecnum = JEDEC_ST;
14508                 tg3_flag_set(tp, NVRAM_BUFFERED);
14509                 tg3_flag_set(tp, FLASH);
14510
14511                 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
14512                 case FLASH_5717VENDOR_ST_M_M25PE20:
14513                 case FLASH_5717VENDOR_ST_M_M45PE20:
14514                         /* Detect size with tg3_nvram_get_size() */
14515                         break;
14516                 case FLASH_5717VENDOR_ST_A_M25PE20:
14517                 case FLASH_5717VENDOR_ST_A_M45PE20:
14518                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14519                         break;
14520                 default:
14521                         tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14522                         break;
14523                 }
14524                 break;
14525         default:
14526                 tg3_flag_set(tp, NO_NVRAM);
14527                 return;
14528         }
14529
14530         tg3_nvram_get_pagesize(tp, nvcfg1);
14531         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14532                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14533 }
14534
14535 static void tg3_get_5720_nvram_info(struct tg3 *tp)
14536 {
14537         u32 nvcfg1, nvmpinstrp;
14538
14539         nvcfg1 = tr32(NVRAM_CFG1);
14540         nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
14541
14542         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14543                 if (!(nvcfg1 & NVRAM_CFG1_5762VENDOR_MASK)) {
14544                         tg3_flag_set(tp, NO_NVRAM);
14545                         return;
14546                 }
14547
14548                 switch (nvmpinstrp) {
14549                 case FLASH_5762_EEPROM_HD:
14550                         nvmpinstrp = FLASH_5720_EEPROM_HD;
14551                         break;
14552                 case FLASH_5762_EEPROM_LD:
14553                         nvmpinstrp = FLASH_5720_EEPROM_LD;
14554                         break;
14555                 case FLASH_5720VENDOR_M_ST_M45PE20:
14556                         /* This pinstrap supports multiple sizes, so force it
14557                          * to read the actual size from location 0xf0.
14558                          */
14559                         nvmpinstrp = FLASH_5720VENDOR_ST_45USPT;
14560                         break;
14561                 }
14562         }
14563
14564         switch (nvmpinstrp) {
14565         case FLASH_5720_EEPROM_HD:
14566         case FLASH_5720_EEPROM_LD:
14567                 tp->nvram_jedecnum = JEDEC_ATMEL;
14568                 tg3_flag_set(tp, NVRAM_BUFFERED);
14569
14570                 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
14571                 tw32(NVRAM_CFG1, nvcfg1);
14572                 if (nvmpinstrp == FLASH_5720_EEPROM_HD)
14573                         tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
14574                 else
14575                         tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE;
14576                 return;
14577         case FLASH_5720VENDOR_M_ATMEL_DB011D:
14578         case FLASH_5720VENDOR_A_ATMEL_DB011B:
14579         case FLASH_5720VENDOR_A_ATMEL_DB011D:
14580         case FLASH_5720VENDOR_M_ATMEL_DB021D:
14581         case FLASH_5720VENDOR_A_ATMEL_DB021B:
14582         case FLASH_5720VENDOR_A_ATMEL_DB021D:
14583         case FLASH_5720VENDOR_M_ATMEL_DB041D:
14584         case FLASH_5720VENDOR_A_ATMEL_DB041B:
14585         case FLASH_5720VENDOR_A_ATMEL_DB041D:
14586         case FLASH_5720VENDOR_M_ATMEL_DB081D:
14587         case FLASH_5720VENDOR_A_ATMEL_DB081D:
14588         case FLASH_5720VENDOR_ATMEL_45USPT:
14589                 tp->nvram_jedecnum = JEDEC_ATMEL;
14590                 tg3_flag_set(tp, NVRAM_BUFFERED);
14591                 tg3_flag_set(tp, FLASH);
14592
14593                 switch (nvmpinstrp) {
14594                 case FLASH_5720VENDOR_M_ATMEL_DB021D:
14595                 case FLASH_5720VENDOR_A_ATMEL_DB021B:
14596                 case FLASH_5720VENDOR_A_ATMEL_DB021D:
14597                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14598                         break;
14599                 case FLASH_5720VENDOR_M_ATMEL_DB041D:
14600                 case FLASH_5720VENDOR_A_ATMEL_DB041B:
14601                 case FLASH_5720VENDOR_A_ATMEL_DB041D:
14602                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14603                         break;
14604                 case FLASH_5720VENDOR_M_ATMEL_DB081D:
14605                 case FLASH_5720VENDOR_A_ATMEL_DB081D:
14606                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14607                         break;
14608                 default:
14609                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14610                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14611                         break;
14612                 }
14613                 break;
14614         case FLASH_5720VENDOR_M_ST_M25PE10:
14615         case FLASH_5720VENDOR_M_ST_M45PE10:
14616         case FLASH_5720VENDOR_A_ST_M25PE10:
14617         case FLASH_5720VENDOR_A_ST_M45PE10:
14618         case FLASH_5720VENDOR_M_ST_M25PE20:
14619         case FLASH_5720VENDOR_M_ST_M45PE20:
14620         case FLASH_5720VENDOR_A_ST_M25PE20:
14621         case FLASH_5720VENDOR_A_ST_M45PE20:
14622         case FLASH_5720VENDOR_M_ST_M25PE40:
14623         case FLASH_5720VENDOR_M_ST_M45PE40:
14624         case FLASH_5720VENDOR_A_ST_M25PE40:
14625         case FLASH_5720VENDOR_A_ST_M45PE40:
14626         case FLASH_5720VENDOR_M_ST_M25PE80:
14627         case FLASH_5720VENDOR_M_ST_M45PE80:
14628         case FLASH_5720VENDOR_A_ST_M25PE80:
14629         case FLASH_5720VENDOR_A_ST_M45PE80:
14630         case FLASH_5720VENDOR_ST_25USPT:
14631         case FLASH_5720VENDOR_ST_45USPT:
14632                 tp->nvram_jedecnum = JEDEC_ST;
14633                 tg3_flag_set(tp, NVRAM_BUFFERED);
14634                 tg3_flag_set(tp, FLASH);
14635
14636                 switch (nvmpinstrp) {
14637                 case FLASH_5720VENDOR_M_ST_M25PE20:
14638                 case FLASH_5720VENDOR_M_ST_M45PE20:
14639                 case FLASH_5720VENDOR_A_ST_M25PE20:
14640                 case FLASH_5720VENDOR_A_ST_M45PE20:
14641                         tp->nvram_size = TG3_NVRAM_SIZE_256KB;
14642                         break;
14643                 case FLASH_5720VENDOR_M_ST_M25PE40:
14644                 case FLASH_5720VENDOR_M_ST_M45PE40:
14645                 case FLASH_5720VENDOR_A_ST_M25PE40:
14646                 case FLASH_5720VENDOR_A_ST_M45PE40:
14647                         tp->nvram_size = TG3_NVRAM_SIZE_512KB;
14648                         break;
14649                 case FLASH_5720VENDOR_M_ST_M25PE80:
14650                 case FLASH_5720VENDOR_M_ST_M45PE80:
14651                 case FLASH_5720VENDOR_A_ST_M25PE80:
14652                 case FLASH_5720VENDOR_A_ST_M45PE80:
14653                         tp->nvram_size = TG3_NVRAM_SIZE_1MB;
14654                         break;
14655                 default:
14656                         if (tg3_asic_rev(tp) != ASIC_REV_5762)
14657                                 tp->nvram_size = TG3_NVRAM_SIZE_128KB;
14658                         break;
14659                 }
14660                 break;
14661         default:
14662                 tg3_flag_set(tp, NO_NVRAM);
14663                 return;
14664         }
14665
14666         tg3_nvram_get_pagesize(tp, nvcfg1);
14667         if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
14668                 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
14669
14670         if (tg3_asic_rev(tp) == ASIC_REV_5762) {
14671                 u32 val;
14672
14673                 if (tg3_nvram_read(tp, 0, &val))
14674                         return;
14675
14676                 if (val != TG3_EEPROM_MAGIC &&
14677                     (val & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW)
14678                         tg3_flag_set(tp, NO_NVRAM);
14679         }
14680 }
14681
14682 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
14683 static void tg3_nvram_init(struct tg3 *tp)
14684 {
14685         if (tg3_flag(tp, IS_SSB_CORE)) {
14686                 /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
14687                 tg3_flag_clear(tp, NVRAM);
14688                 tg3_flag_clear(tp, NVRAM_BUFFERED);
14689                 tg3_flag_set(tp, NO_NVRAM);
14690                 return;
14691         }
14692
14693         tw32_f(GRC_EEPROM_ADDR,
14694              (EEPROM_ADDR_FSM_RESET |
14695               (EEPROM_DEFAULT_CLOCK_PERIOD <<
14696                EEPROM_ADDR_CLKPERD_SHIFT)));
14697
14698         msleep(1);
14699
14700         /* Enable seeprom accesses. */
14701         tw32_f(GRC_LOCAL_CTRL,
14702              tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
14703         udelay(100);
14704
14705         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
14706             tg3_asic_rev(tp) != ASIC_REV_5701) {
14707                 tg3_flag_set(tp, NVRAM);
14708
14709                 if (tg3_nvram_lock(tp)) {
14710                         netdev_warn(tp->dev,
14711                                     "Cannot get nvram lock, %s failed\n",
14712                                     __func__);
14713                         return;
14714                 }
14715                 tg3_enable_nvram_access(tp);
14716
14717                 tp->nvram_size = 0;
14718
14719                 if (tg3_asic_rev(tp) == ASIC_REV_5752)
14720                         tg3_get_5752_nvram_info(tp);
14721                 else if (tg3_asic_rev(tp) == ASIC_REV_5755)
14722                         tg3_get_5755_nvram_info(tp);
14723                 else if (tg3_asic_rev(tp) == ASIC_REV_5787 ||
14724                          tg3_asic_rev(tp) == ASIC_REV_5784 ||
14725                          tg3_asic_rev(tp) == ASIC_REV_5785)
14726                         tg3_get_5787_nvram_info(tp);
14727                 else if (tg3_asic_rev(tp) == ASIC_REV_5761)
14728                         tg3_get_5761_nvram_info(tp);
14729                 else if (tg3_asic_rev(tp) == ASIC_REV_5906)
14730                         tg3_get_5906_nvram_info(tp);
14731                 else if (tg3_asic_rev(tp) == ASIC_REV_57780 ||
14732                          tg3_flag(tp, 57765_CLASS))
14733                         tg3_get_57780_nvram_info(tp);
14734                 else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
14735                          tg3_asic_rev(tp) == ASIC_REV_5719)
14736                         tg3_get_5717_nvram_info(tp);
14737                 else if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
14738                          tg3_asic_rev(tp) == ASIC_REV_5762)
14739                         tg3_get_5720_nvram_info(tp);
14740                 else
14741                         tg3_get_nvram_info(tp);
14742
14743                 if (tp->nvram_size == 0)
14744                         tg3_get_nvram_size(tp);
14745
14746                 tg3_disable_nvram_access(tp);
14747                 tg3_nvram_unlock(tp);
14748
14749         } else {
14750                 tg3_flag_clear(tp, NVRAM);
14751                 tg3_flag_clear(tp, NVRAM_BUFFERED);
14752
14753                 tg3_get_eeprom_size(tp);
14754         }
14755 }
14756
14757 struct subsys_tbl_ent {
14758         u16 subsys_vendor, subsys_devid;
14759         u32 phy_id;
14760 };
14761
14762 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
14763         /* Broadcom boards. */
14764         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14765           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 },
14766         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14767           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 },
14768         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14769           TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 },
14770         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14771           TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 },
14772         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14773           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 },
14774         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14775           TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 },
14776         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14777           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 },
14778         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14779           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 },
14780         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14781           TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 },
14782         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14783           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 },
14784         { TG3PCI_SUBVENDOR_ID_BROADCOM,
14785           TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 },
14786
14787         /* 3com boards. */
14788         { TG3PCI_SUBVENDOR_ID_3COM,
14789           TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 },
14790         { TG3PCI_SUBVENDOR_ID_3COM,
14791           TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 },
14792         { TG3PCI_SUBVENDOR_ID_3COM,
14793           TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 },
14794         { TG3PCI_SUBVENDOR_ID_3COM,
14795           TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 },
14796         { TG3PCI_SUBVENDOR_ID_3COM,
14797           TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 },
14798
14799         /* DELL boards. */
14800         { TG3PCI_SUBVENDOR_ID_DELL,
14801           TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 },
14802         { TG3PCI_SUBVENDOR_ID_DELL,
14803           TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 },
14804         { TG3PCI_SUBVENDOR_ID_DELL,
14805           TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 },
14806         { TG3PCI_SUBVENDOR_ID_DELL,
14807           TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 },
14808
14809         /* Compaq boards. */
14810         { TG3PCI_SUBVENDOR_ID_COMPAQ,
14811           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 },
14812         { TG3PCI_SUBVENDOR_ID_COMPAQ,
14813           TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 },
14814         { TG3PCI_SUBVENDOR_ID_COMPAQ,
14815           TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 },
14816         { TG3PCI_SUBVENDOR_ID_COMPAQ,
14817           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 },
14818         { TG3PCI_SUBVENDOR_ID_COMPAQ,
14819           TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 },
14820
14821         /* IBM boards. */
14822         { TG3PCI_SUBVENDOR_ID_IBM,
14823           TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 }
14824 };
14825
14826 static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp)
14827 {
14828         int i;
14829
14830         for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
14831                 if ((subsys_id_to_phy_id[i].subsys_vendor ==
14832                      tp->pdev->subsystem_vendor) &&
14833                     (subsys_id_to_phy_id[i].subsys_devid ==
14834                      tp->pdev->subsystem_device))
14835                         return &subsys_id_to_phy_id[i];
14836         }
14837         return NULL;
14838 }
14839
14840 static void tg3_get_eeprom_hw_cfg(struct tg3 *tp)
14841 {
14842         u32 val;
14843
14844         tp->phy_id = TG3_PHY_ID_INVALID;
14845         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
14846
14847         /* Assume an onboard device and WOL capable by default.  */
14848         tg3_flag_set(tp, EEPROM_WRITE_PROT);
14849         tg3_flag_set(tp, WOL_CAP);
14850
14851         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
14852                 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
14853                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
14854                         tg3_flag_set(tp, IS_NIC);
14855                 }
14856                 val = tr32(VCPU_CFGSHDW);
14857                 if (val & VCPU_CFGSHDW_ASPM_DBNC)
14858                         tg3_flag_set(tp, ASPM_WORKAROUND);
14859                 if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
14860                     (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
14861                         tg3_flag_set(tp, WOL_ENABLE);
14862                         device_set_wakeup_enable(&tp->pdev->dev, true);
14863                 }
14864                 goto done;
14865         }
14866
14867         tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
14868         if (val == NIC_SRAM_DATA_SIG_MAGIC) {
14869                 u32 nic_cfg, led_cfg;
14870                 u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id;
14871                 int eeprom_phy_serdes = 0;
14872
14873                 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
14874                 tp->nic_sram_data_cfg = nic_cfg;
14875
14876                 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
14877                 ver >>= NIC_SRAM_DATA_VER_SHIFT;
14878                 if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
14879                     tg3_asic_rev(tp) != ASIC_REV_5701 &&
14880                     tg3_asic_rev(tp) != ASIC_REV_5703 &&
14881                     (ver > 0) && (ver < 0x100))
14882                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
14883
14884                 if (tg3_asic_rev(tp) == ASIC_REV_5785)
14885                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
14886
14887                 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
14888                     NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
14889                         eeprom_phy_serdes = 1;
14890
14891                 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
14892                 if (nic_phy_id != 0) {
14893                         u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
14894                         u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
14895
14896                         eeprom_phy_id  = (id1 >> 16) << 10;
14897                         eeprom_phy_id |= (id2 & 0xfc00) << 16;
14898                         eeprom_phy_id |= (id2 & 0x03ff) <<  0;
14899                 } else
14900                         eeprom_phy_id = 0;
14901
14902                 tp->phy_id = eeprom_phy_id;
14903                 if (eeprom_phy_serdes) {
14904                         if (!tg3_flag(tp, 5705_PLUS))
14905                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
14906                         else
14907                                 tp->phy_flags |= TG3_PHYFLG_MII_SERDES;
14908                 }
14909
14910                 if (tg3_flag(tp, 5750_PLUS))
14911                         led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
14912                                     SHASTA_EXT_LED_MODE_MASK);
14913                 else
14914                         led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
14915
14916                 switch (led_cfg) {
14917                 default:
14918                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
14919                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
14920                         break;
14921
14922                 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
14923                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
14924                         break;
14925
14926                 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
14927                         tp->led_ctrl = LED_CTRL_MODE_MAC;
14928
14929                         /* Default to PHY_1_MODE if 0 (MAC_MODE) is
14930                          * read on some older 5700/5701 bootcode.
14931                          */
14932                         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
14933                             tg3_asic_rev(tp) == ASIC_REV_5701)
14934                                 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
14935
14936                         break;
14937
14938                 case SHASTA_EXT_LED_SHARED:
14939                         tp->led_ctrl = LED_CTRL_MODE_SHARED;
14940                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0 &&
14941                             tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A1)
14942                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
14943                                                  LED_CTRL_MODE_PHY_2);
14944
14945                         if (tg3_flag(tp, 5717_PLUS) ||
14946                             tg3_asic_rev(tp) == ASIC_REV_5762)
14947                                 tp->led_ctrl |= LED_CTRL_BLINK_RATE_OVERRIDE |
14948                                                 LED_CTRL_BLINK_RATE_MASK;
14949
14950                         break;
14951
14952                 case SHASTA_EXT_LED_MAC:
14953                         tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
14954                         break;
14955
14956                 case SHASTA_EXT_LED_COMBO:
14957                         tp->led_ctrl = LED_CTRL_MODE_COMBO;
14958                         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5750_A0)
14959                                 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
14960                                                  LED_CTRL_MODE_PHY_2);
14961                         break;
14962
14963                 }
14964
14965                 if ((tg3_asic_rev(tp) == ASIC_REV_5700 ||
14966                      tg3_asic_rev(tp) == ASIC_REV_5701) &&
14967                     tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
14968                         tp->led_ctrl = LED_CTRL_MODE_PHY_2;
14969
14970                 if (tg3_chip_rev(tp) == CHIPREV_5784_AX)
14971                         tp->led_ctrl = LED_CTRL_MODE_PHY_1;
14972
14973                 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
14974                         tg3_flag_set(tp, EEPROM_WRITE_PROT);
14975                         if ((tp->pdev->subsystem_vendor ==
14976                              PCI_VENDOR_ID_ARIMA) &&
14977                             (tp->pdev->subsystem_device == 0x205a ||
14978                              tp->pdev->subsystem_device == 0x2063))
14979                                 tg3_flag_clear(tp, EEPROM_WRITE_PROT);
14980                 } else {
14981                         tg3_flag_clear(tp, EEPROM_WRITE_PROT);
14982                         tg3_flag_set(tp, IS_NIC);
14983                 }
14984
14985                 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
14986                         tg3_flag_set(tp, ENABLE_ASF);
14987                         if (tg3_flag(tp, 5750_PLUS))
14988                                 tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
14989                 }
14990
14991                 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
14992                     tg3_flag(tp, 5750_PLUS))
14993                         tg3_flag_set(tp, ENABLE_APE);
14994
14995                 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
14996                     !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
14997                         tg3_flag_clear(tp, WOL_CAP);
14998
14999                 if (tg3_flag(tp, WOL_CAP) &&
15000                     (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
15001                         tg3_flag_set(tp, WOL_ENABLE);
15002                         device_set_wakeup_enable(&tp->pdev->dev, true);
15003                 }
15004
15005                 if (cfg2 & (1 << 17))
15006                         tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING;
15007
15008                 /* serdes signal pre-emphasis in register 0x590 set by */
15009                 /* bootcode if bit 18 is set */
15010                 if (cfg2 & (1 << 18))
15011                         tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS;
15012
15013                 if ((tg3_flag(tp, 57765_PLUS) ||
15014                      (tg3_asic_rev(tp) == ASIC_REV_5784 &&
15015                       tg3_chip_rev(tp) != CHIPREV_5784_AX)) &&
15016                     (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
15017                         tp->phy_flags |= TG3_PHYFLG_ENABLE_APD;
15018
15019                 if (tg3_flag(tp, PCI_EXPRESS)) {
15020                         u32 cfg3;
15021
15022                         tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
15023                         if (tg3_asic_rev(tp) != ASIC_REV_5785 &&
15024                             !tg3_flag(tp, 57765_PLUS) &&
15025                             (cfg3 & NIC_SRAM_ASPM_DEBOUNCE))
15026                                 tg3_flag_set(tp, ASPM_WORKAROUND);
15027                         if (cfg3 & NIC_SRAM_LNK_FLAP_AVOID)
15028                                 tp->phy_flags |= TG3_PHYFLG_KEEP_LINK_ON_PWRDN;
15029                         if (cfg3 & NIC_SRAM_1G_ON_VAUX_OK)
15030                                 tp->phy_flags |= TG3_PHYFLG_1G_ON_VAUX_OK;
15031                 }
15032
15033                 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
15034                         tg3_flag_set(tp, RGMII_INBAND_DISABLE);
15035                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
15036                         tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
15037                 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
15038                         tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
15039         }
15040 done:
15041         if (tg3_flag(tp, WOL_CAP))
15042                 device_set_wakeup_enable(&tp->pdev->dev,
15043                                          tg3_flag(tp, WOL_ENABLE));
15044         else
15045                 device_set_wakeup_capable(&tp->pdev->dev, false);
15046 }
15047
15048 static int tg3_ape_otp_read(struct tg3 *tp, u32 offset, u32 *val)
15049 {
15050         int i, err;
15051         u32 val2, off = offset * 8;
15052
15053         err = tg3_nvram_lock(tp);
15054         if (err)
15055                 return err;
15056
15057         tg3_ape_write32(tp, TG3_APE_OTP_ADDR, off | APE_OTP_ADDR_CPU_ENABLE);
15058         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, APE_OTP_CTRL_PROG_EN |
15059                         APE_OTP_CTRL_CMD_RD | APE_OTP_CTRL_START);
15060         tg3_ape_read32(tp, TG3_APE_OTP_CTRL);
15061         udelay(10);
15062
15063         for (i = 0; i < 100; i++) {
15064                 val2 = tg3_ape_read32(tp, TG3_APE_OTP_STATUS);
15065                 if (val2 & APE_OTP_STATUS_CMD_DONE) {
15066                         *val = tg3_ape_read32(tp, TG3_APE_OTP_RD_DATA);
15067                         break;
15068                 }
15069                 udelay(10);
15070         }
15071
15072         tg3_ape_write32(tp, TG3_APE_OTP_CTRL, 0);
15073
15074         tg3_nvram_unlock(tp);
15075         if (val2 & APE_OTP_STATUS_CMD_DONE)
15076                 return 0;
15077
15078         return -EBUSY;
15079 }
15080
15081 static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
15082 {
15083         int i;
15084         u32 val;
15085
15086         tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
15087         tw32(OTP_CTRL, cmd);
15088
15089         /* Wait for up to 1 ms for command to execute. */
15090         for (i = 0; i < 100; i++) {
15091                 val = tr32(OTP_STATUS);
15092                 if (val & OTP_STATUS_CMD_DONE)
15093                         break;
15094                 udelay(10);
15095         }
15096
15097         return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
15098 }
15099
15100 /* Read the gphy configuration from the OTP region of the chip.  The gphy
15101  * configuration is a 32-bit value that straddles the alignment boundary.
15102  * We do two 32-bit reads and then shift and merge the results.
15103  */
15104 static u32 tg3_read_otp_phycfg(struct tg3 *tp)
15105 {
15106         u32 bhalf_otp, thalf_otp;
15107
15108         tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
15109
15110         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
15111                 return 0;
15112
15113         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
15114
15115         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15116                 return 0;
15117
15118         thalf_otp = tr32(OTP_READ_DATA);
15119
15120         tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
15121
15122         if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
15123                 return 0;
15124
15125         bhalf_otp = tr32(OTP_READ_DATA);
15126
15127         return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
15128 }
15129
15130 static void tg3_phy_init_link_config(struct tg3 *tp)
15131 {
15132         u32 adv = ADVERTISED_Autoneg;
15133
15134         if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15135                 adv |= ADVERTISED_1000baseT_Half |
15136                        ADVERTISED_1000baseT_Full;
15137
15138         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
15139                 adv |= ADVERTISED_100baseT_Half |
15140                        ADVERTISED_100baseT_Full |
15141                        ADVERTISED_10baseT_Half |
15142                        ADVERTISED_10baseT_Full |
15143                        ADVERTISED_TP;
15144         else
15145                 adv |= ADVERTISED_FIBRE;
15146
15147         tp->link_config.advertising = adv;
15148         tp->link_config.speed = SPEED_UNKNOWN;
15149         tp->link_config.duplex = DUPLEX_UNKNOWN;
15150         tp->link_config.autoneg = AUTONEG_ENABLE;
15151         tp->link_config.active_speed = SPEED_UNKNOWN;
15152         tp->link_config.active_duplex = DUPLEX_UNKNOWN;
15153
15154         tp->old_link = -1;
15155 }
15156
15157 static int tg3_phy_probe(struct tg3 *tp)
15158 {
15159         u32 hw_phy_id_1, hw_phy_id_2;
15160         u32 hw_phy_id, hw_phy_id_masked;
15161         int err;
15162
15163         /* flow control autonegotiation is default behavior */
15164         tg3_flag_set(tp, PAUSE_AUTONEG);
15165         tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
15166
15167         if (tg3_flag(tp, ENABLE_APE)) {
15168                 switch (tp->pci_fn) {
15169                 case 0:
15170                         tp->phy_ape_lock = TG3_APE_LOCK_PHY0;
15171                         break;
15172                 case 1:
15173                         tp->phy_ape_lock = TG3_APE_LOCK_PHY1;
15174                         break;
15175                 case 2:
15176                         tp->phy_ape_lock = TG3_APE_LOCK_PHY2;
15177                         break;
15178                 case 3:
15179                         tp->phy_ape_lock = TG3_APE_LOCK_PHY3;
15180                         break;
15181                 }
15182         }
15183
15184         if (!tg3_flag(tp, ENABLE_ASF) &&
15185             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15186             !(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
15187                 tp->phy_flags &= ~(TG3_PHYFLG_1G_ON_VAUX_OK |
15188                                    TG3_PHYFLG_KEEP_LINK_ON_PWRDN);
15189
15190         if (tg3_flag(tp, USE_PHYLIB))
15191                 return tg3_phy_init(tp);
15192
15193         /* Reading the PHY ID register can conflict with ASF
15194          * firmware access to the PHY hardware.
15195          */
15196         err = 0;
15197         if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
15198                 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
15199         } else {
15200                 /* Now read the physical PHY_ID from the chip and verify
15201                  * that it is sane.  If it doesn't look good, we fall back
15202                  * to either the hard-coded table based PHY_ID and failing
15203                  * that the value found in the eeprom area.
15204                  */
15205                 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
15206                 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
15207
15208                 hw_phy_id  = (hw_phy_id_1 & 0xffff) << 10;
15209                 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
15210                 hw_phy_id |= (hw_phy_id_2 & 0x03ff) <<  0;
15211
15212                 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
15213         }
15214
15215         if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
15216                 tp->phy_id = hw_phy_id;
15217                 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
15218                         tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15219                 else
15220                         tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES;
15221         } else {
15222                 if (tp->phy_id != TG3_PHY_ID_INVALID) {
15223                         /* Do nothing, phy ID already set up in
15224                          * tg3_get_eeprom_hw_cfg().
15225                          */
15226                 } else {
15227                         struct subsys_tbl_ent *p;
15228
15229                         /* No eeprom signature?  Try the hardcoded
15230                          * subsys device table.
15231                          */
15232                         p = tg3_lookup_by_subsys(tp);
15233                         if (p) {
15234                                 tp->phy_id = p->phy_id;
15235                         } else if (!tg3_flag(tp, IS_SSB_CORE)) {
15236                                 /* For now we saw the IDs 0xbc050cd0,
15237                                  * 0xbc050f80 and 0xbc050c30 on devices
15238                                  * connected to an BCM4785 and there are
15239                                  * probably more. Just assume that the phy is
15240                                  * supported when it is connected to a SSB core
15241                                  * for now.
15242                                  */
15243                                 return -ENODEV;
15244                         }
15245
15246                         if (!tp->phy_id ||
15247                             tp->phy_id == TG3_PHY_ID_BCM8002)
15248                                 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES;
15249                 }
15250         }
15251
15252         if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15253             (tg3_asic_rev(tp) == ASIC_REV_5719 ||
15254              tg3_asic_rev(tp) == ASIC_REV_5720 ||
15255              tg3_asic_rev(tp) == ASIC_REV_57766 ||
15256              tg3_asic_rev(tp) == ASIC_REV_5762 ||
15257              (tg3_asic_rev(tp) == ASIC_REV_5717 &&
15258               tg3_chip_rev_id(tp) != CHIPREV_ID_5717_A0) ||
15259              (tg3_asic_rev(tp) == ASIC_REV_57765 &&
15260               tg3_chip_rev_id(tp) != CHIPREV_ID_57765_A0))) {
15261                 tp->phy_flags |= TG3_PHYFLG_EEE_CAP;
15262
15263                 tp->eee.supported = SUPPORTED_100baseT_Full |
15264                                     SUPPORTED_1000baseT_Full;
15265                 tp->eee.advertised = ADVERTISED_100baseT_Full |
15266                                      ADVERTISED_1000baseT_Full;
15267                 tp->eee.eee_enabled = 1;
15268                 tp->eee.tx_lpi_enabled = 1;
15269                 tp->eee.tx_lpi_timer = TG3_CPMU_DBTMR1_LNKIDLE_2047US;
15270         }
15271
15272         tg3_phy_init_link_config(tp);
15273
15274         if (!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
15275             !(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
15276             !tg3_flag(tp, ENABLE_APE) &&
15277             !tg3_flag(tp, ENABLE_ASF)) {
15278                 u32 bmsr, dummy;
15279
15280                 tg3_readphy(tp, MII_BMSR, &bmsr);
15281                 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
15282                     (bmsr & BMSR_LSTATUS))
15283                         goto skip_phy_reset;
15284
15285                 err = tg3_phy_reset(tp);
15286                 if (err)
15287                         return err;
15288
15289                 tg3_phy_set_wirespeed(tp);
15290
15291                 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
15292                         tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
15293                                             tp->link_config.flowctrl);
15294
15295                         tg3_writephy(tp, MII_BMCR,
15296                                      BMCR_ANENABLE | BMCR_ANRESTART);
15297                 }
15298         }
15299
15300 skip_phy_reset:
15301         if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
15302                 err = tg3_init_5401phy_dsp(tp);
15303                 if (err)
15304                         return err;
15305
15306                 err = tg3_init_5401phy_dsp(tp);
15307         }
15308
15309         return err;
15310 }
15311
15312 static void tg3_read_vpd(struct tg3 *tp)
15313 {
15314         u8 *vpd_data;
15315         unsigned int block_end, rosize, len;
15316         u32 vpdlen;
15317         int j, i = 0;
15318
15319         vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
15320         if (!vpd_data)
15321                 goto out_no_vpd;
15322
15323         i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
15324         if (i < 0)
15325                 goto out_not_found;
15326
15327         rosize = pci_vpd_lrdt_size(&vpd_data[i]);
15328         block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
15329         i += PCI_VPD_LRDT_TAG_SIZE;
15330
15331         if (block_end > vpdlen)
15332                 goto out_not_found;
15333
15334         j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15335                                       PCI_VPD_RO_KEYWORD_MFR_ID);
15336         if (j > 0) {
15337                 len = pci_vpd_info_field_size(&vpd_data[j]);
15338
15339                 j += PCI_VPD_INFO_FLD_HDR_SIZE;
15340                 if (j + len > block_end || len != 4 ||
15341                     memcmp(&vpd_data[j], "1028", 4))
15342                         goto partno;
15343
15344                 j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15345                                               PCI_VPD_RO_KEYWORD_VENDOR0);
15346                 if (j < 0)
15347                         goto partno;
15348
15349                 len = pci_vpd_info_field_size(&vpd_data[j]);
15350
15351                 j += PCI_VPD_INFO_FLD_HDR_SIZE;
15352                 if (j + len > block_end)
15353                         goto partno;
15354
15355                 if (len >= sizeof(tp->fw_ver))
15356                         len = sizeof(tp->fw_ver) - 1;
15357                 memset(tp->fw_ver, 0, sizeof(tp->fw_ver));
15358                 snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len,
15359                          &vpd_data[j]);
15360         }
15361
15362 partno:
15363         i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
15364                                       PCI_VPD_RO_KEYWORD_PARTNO);
15365         if (i < 0)
15366                 goto out_not_found;
15367
15368         len = pci_vpd_info_field_size(&vpd_data[i]);
15369
15370         i += PCI_VPD_INFO_FLD_HDR_SIZE;
15371         if (len > TG3_BPN_SIZE ||
15372             (len + i) > vpdlen)
15373                 goto out_not_found;
15374
15375         memcpy(tp->board_part_number, &vpd_data[i], len);
15376
15377 out_not_found:
15378         kfree(vpd_data);
15379         if (tp->board_part_number[0])
15380                 return;
15381
15382 out_no_vpd:
15383         if (tg3_asic_rev(tp) == ASIC_REV_5717) {
15384                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15385                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C)
15386                         strcpy(tp->board_part_number, "BCM5717");
15387                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
15388                         strcpy(tp->board_part_number, "BCM5718");
15389                 else
15390                         goto nomatch;
15391         } else if (tg3_asic_rev(tp) == ASIC_REV_57780) {
15392                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
15393                         strcpy(tp->board_part_number, "BCM57780");
15394                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
15395                         strcpy(tp->board_part_number, "BCM57760");
15396                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
15397                         strcpy(tp->board_part_number, "BCM57790");
15398                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
15399                         strcpy(tp->board_part_number, "BCM57788");
15400                 else
15401                         goto nomatch;
15402         } else if (tg3_asic_rev(tp) == ASIC_REV_57765) {
15403                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
15404                         strcpy(tp->board_part_number, "BCM57761");
15405                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
15406                         strcpy(tp->board_part_number, "BCM57765");
15407                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
15408                         strcpy(tp->board_part_number, "BCM57781");
15409                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
15410                         strcpy(tp->board_part_number, "BCM57785");
15411                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
15412                         strcpy(tp->board_part_number, "BCM57791");
15413                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
15414                         strcpy(tp->board_part_number, "BCM57795");
15415                 else
15416                         goto nomatch;
15417         } else if (tg3_asic_rev(tp) == ASIC_REV_57766) {
15418                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
15419                         strcpy(tp->board_part_number, "BCM57762");
15420                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
15421                         strcpy(tp->board_part_number, "BCM57766");
15422                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
15423                         strcpy(tp->board_part_number, "BCM57782");
15424                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15425                         strcpy(tp->board_part_number, "BCM57786");
15426                 else
15427                         goto nomatch;
15428         } else if (tg3_asic_rev(tp) == ASIC_REV_5906) {
15429                 strcpy(tp->board_part_number, "BCM95906");
15430         } else {
15431 nomatch:
15432                 strcpy(tp->board_part_number, "none");
15433         }
15434 }
15435
15436 static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
15437 {
15438         u32 val;
15439
15440         if (tg3_nvram_read(tp, offset, &val) ||
15441             (val & 0xfc000000) != 0x0c000000 ||
15442             tg3_nvram_read(tp, offset + 4, &val) ||
15443             val != 0)
15444                 return 0;
15445
15446         return 1;
15447 }
15448
15449 static void tg3_read_bc_ver(struct tg3 *tp)
15450 {
15451         u32 val, offset, start, ver_offset;
15452         int i, dst_off;
15453         bool newver = false;
15454
15455         if (tg3_nvram_read(tp, 0xc, &offset) ||
15456             tg3_nvram_read(tp, 0x4, &start))
15457                 return;
15458
15459         offset = tg3_nvram_logical_addr(tp, offset);
15460
15461         if (tg3_nvram_read(tp, offset, &val))
15462                 return;
15463
15464         if ((val & 0xfc000000) == 0x0c000000) {
15465                 if (tg3_nvram_read(tp, offset + 4, &val))
15466                         return;
15467
15468                 if (val == 0)
15469                         newver = true;
15470         }
15471
15472         dst_off = strlen(tp->fw_ver);
15473
15474         if (newver) {
15475                 if (TG3_VER_SIZE - dst_off < 16 ||
15476                     tg3_nvram_read(tp, offset + 8, &ver_offset))
15477                         return;
15478
15479                 offset = offset + ver_offset - start;
15480                 for (i = 0; i < 16; i += 4) {
15481                         __be32 v;
15482                         if (tg3_nvram_read_be32(tp, offset + i, &v))
15483                                 return;
15484
15485                         memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
15486                 }
15487         } else {
15488                 u32 major, minor;
15489
15490                 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
15491                         return;
15492
15493                 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
15494                         TG3_NVM_BCVER_MAJSFT;
15495                 minor = ver_offset & TG3_NVM_BCVER_MINMSK;
15496                 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
15497                          "v%d.%02d", major, minor);
15498         }
15499 }
15500
15501 static void tg3_read_hwsb_ver(struct tg3 *tp)
15502 {
15503         u32 val, major, minor;
15504
15505         /* Use native endian representation */
15506         if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
15507                 return;
15508
15509         major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
15510                 TG3_NVM_HWSB_CFG1_MAJSFT;
15511         minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
15512                 TG3_NVM_HWSB_CFG1_MINSFT;
15513
15514         snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
15515 }
15516
15517 static void tg3_read_sb_ver(struct tg3 *tp, u32 val)
15518 {
15519         u32 offset, major, minor, build;
15520
15521         strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
15522
15523         if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1)
15524                 return;
15525
15526         switch (val & TG3_EEPROM_SB_REVISION_MASK) {
15527         case TG3_EEPROM_SB_REVISION_0:
15528                 offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
15529                 break;
15530         case TG3_EEPROM_SB_REVISION_2:
15531                 offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
15532                 break;
15533         case TG3_EEPROM_SB_REVISION_3:
15534                 offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
15535                 break;
15536         case TG3_EEPROM_SB_REVISION_4:
15537                 offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
15538                 break;
15539         case TG3_EEPROM_SB_REVISION_5:
15540                 offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
15541                 break;
15542         case TG3_EEPROM_SB_REVISION_6:
15543                 offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
15544                 break;
15545         default:
15546                 return;
15547         }
15548
15549         if (tg3_nvram_read(tp, offset, &val))
15550                 return;
15551
15552         build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
15553                 TG3_EEPROM_SB_EDH_BLD_SHFT;
15554         major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
15555                 TG3_EEPROM_SB_EDH_MAJ_SHFT;
15556         minor =  val & TG3_EEPROM_SB_EDH_MIN_MASK;
15557
15558         if (minor > 99 || build > 26)
15559                 return;
15560
15561         offset = strlen(tp->fw_ver);
15562         snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
15563                  " v%d.%02d", major, minor);
15564
15565         if (build > 0) {
15566                 offset = strlen(tp->fw_ver);
15567                 if (offset < TG3_VER_SIZE - 1)
15568                         tp->fw_ver[offset] = 'a' + build - 1;
15569         }
15570 }
15571
15572 static void tg3_read_mgmtfw_ver(struct tg3 *tp)
15573 {
15574         u32 val, offset, start;
15575         int i, vlen;
15576
15577         for (offset = TG3_NVM_DIR_START;
15578              offset < TG3_NVM_DIR_END;
15579              offset += TG3_NVM_DIRENT_SIZE) {
15580                 if (tg3_nvram_read(tp, offset, &val))
15581                         return;
15582
15583                 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
15584                         break;
15585         }
15586
15587         if (offset == TG3_NVM_DIR_END)
15588                 return;
15589
15590         if (!tg3_flag(tp, 5705_PLUS))
15591                 start = 0x08000000;
15592         else if (tg3_nvram_read(tp, offset - 4, &start))
15593                 return;
15594
15595         if (tg3_nvram_read(tp, offset + 4, &offset) ||
15596             !tg3_fw_img_is_valid(tp, offset) ||
15597             tg3_nvram_read(tp, offset + 8, &val))
15598                 return;
15599
15600         offset += val - start;
15601
15602         vlen = strlen(tp->fw_ver);
15603
15604         tp->fw_ver[vlen++] = ',';
15605         tp->fw_ver[vlen++] = ' ';
15606
15607         for (i = 0; i < 4; i++) {
15608                 __be32 v;
15609                 if (tg3_nvram_read_be32(tp, offset, &v))
15610                         return;
15611
15612                 offset += sizeof(v);
15613
15614                 if (vlen > TG3_VER_SIZE - sizeof(v)) {
15615                         memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
15616                         break;
15617                 }
15618
15619                 memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
15620                 vlen += sizeof(v);
15621         }
15622 }
15623
15624 static void tg3_probe_ncsi(struct tg3 *tp)
15625 {
15626         u32 apedata;
15627
15628         apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
15629         if (apedata != APE_SEG_SIG_MAGIC)
15630                 return;
15631
15632         apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
15633         if (!(apedata & APE_FW_STATUS_READY))
15634                 return;
15635
15636         if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
15637                 tg3_flag_set(tp, APE_HAS_NCSI);
15638 }
15639
15640 static void tg3_read_dash_ver(struct tg3 *tp)
15641 {
15642         int vlen;
15643         u32 apedata;
15644         char *fwtype;
15645
15646         apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
15647
15648         if (tg3_flag(tp, APE_HAS_NCSI))
15649                 fwtype = "NCSI";
15650         else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725)
15651                 fwtype = "SMASH";
15652         else
15653                 fwtype = "DASH";
15654
15655         vlen = strlen(tp->fw_ver);
15656
15657         snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
15658                  fwtype,
15659                  (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT,
15660                  (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT,
15661                  (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT,
15662                  (apedata & APE_FW_VERSION_BLDMSK));
15663 }
15664
15665 static void tg3_read_otp_ver(struct tg3 *tp)
15666 {
15667         u32 val, val2;
15668
15669         if (tg3_asic_rev(tp) != ASIC_REV_5762)
15670                 return;
15671
15672         if (!tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0, &val) &&
15673             !tg3_ape_otp_read(tp, OTP_ADDRESS_MAGIC0 + 4, &val2) &&
15674             TG3_OTP_MAGIC0_VALID(val)) {
15675                 u64 val64 = (u64) val << 32 | val2;
15676                 u32 ver = 0;
15677                 int i, vlen;
15678
15679                 for (i = 0; i < 7; i++) {
15680                         if ((val64 & 0xff) == 0)
15681                                 break;
15682                         ver = val64 & 0xff;
15683                         val64 >>= 8;
15684                 }
15685                 vlen = strlen(tp->fw_ver);
15686                 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " .%02d", ver);
15687         }
15688 }
15689
15690 static void tg3_read_fw_ver(struct tg3 *tp)
15691 {
15692         u32 val;
15693         bool vpd_vers = false;
15694
15695         if (tp->fw_ver[0] != 0)
15696                 vpd_vers = true;
15697
15698         if (tg3_flag(tp, NO_NVRAM)) {
15699                 strcat(tp->fw_ver, "sb");
15700                 tg3_read_otp_ver(tp);
15701                 return;
15702         }
15703
15704         if (tg3_nvram_read(tp, 0, &val))
15705                 return;
15706
15707         if (val == TG3_EEPROM_MAGIC)
15708                 tg3_read_bc_ver(tp);
15709         else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
15710                 tg3_read_sb_ver(tp, val);
15711         else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
15712                 tg3_read_hwsb_ver(tp);
15713
15714         if (tg3_flag(tp, ENABLE_ASF)) {
15715                 if (tg3_flag(tp, ENABLE_APE)) {
15716                         tg3_probe_ncsi(tp);
15717                         if (!vpd_vers)
15718                                 tg3_read_dash_ver(tp);
15719                 } else if (!vpd_vers) {
15720                         tg3_read_mgmtfw_ver(tp);
15721                 }
15722         }
15723
15724         tp->fw_ver[TG3_VER_SIZE - 1] = 0;
15725 }
15726
15727 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
15728 {
15729         if (tg3_flag(tp, LRG_PROD_RING_CAP))
15730                 return TG3_RX_RET_MAX_SIZE_5717;
15731         else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
15732                 return TG3_RX_RET_MAX_SIZE_5700;
15733         else
15734                 return TG3_RX_RET_MAX_SIZE_5705;
15735 }
15736
15737 static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = {
15738         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) },
15739         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) },
15740         { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) },
15741         { },
15742 };
15743
15744 static struct pci_dev *tg3_find_peer(struct tg3 *tp)
15745 {
15746         struct pci_dev *peer;
15747         unsigned int func, devnr = tp->pdev->devfn & ~7;
15748
15749         for (func = 0; func < 8; func++) {
15750                 peer = pci_get_slot(tp->pdev->bus, devnr | func);
15751                 if (peer && peer != tp->pdev)
15752                         break;
15753                 pci_dev_put(peer);
15754         }
15755         /* 5704 can be configured in single-port mode, set peer to
15756          * tp->pdev in that case.
15757          */
15758         if (!peer) {
15759                 peer = tp->pdev;
15760                 return peer;
15761         }
15762
15763         /*
15764          * We don't need to keep the refcount elevated; there's no way
15765          * to remove one half of this device without removing the other
15766          */
15767         pci_dev_put(peer);
15768
15769         return peer;
15770 }
15771
15772 static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
15773 {
15774         tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
15775         if (tg3_asic_rev(tp) == ASIC_REV_USE_PROD_ID_REG) {
15776                 u32 reg;
15777
15778                 /* All devices that use the alternate
15779                  * ASIC REV location have a CPMU.
15780                  */
15781                 tg3_flag_set(tp, CPMU_PRESENT);
15782
15783                 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
15784                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
15785                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
15786                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
15787                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
15788                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
15789                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
15790                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
15791                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
15792                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
15793                     tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787)
15794                         reg = TG3PCI_GEN2_PRODID_ASICREV;
15795                 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
15796                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
15797                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
15798                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
15799                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
15800                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
15801                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
15802                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
15803                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
15804                          tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
15805                         reg = TG3PCI_GEN15_PRODID_ASICREV;
15806                 else
15807                         reg = TG3PCI_PRODID_ASICREV;
15808
15809                 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
15810         }
15811
15812         /* Wrong chip ID in 5752 A0. This code can be removed later
15813          * as A0 is not in production.
15814          */
15815         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5752_A0_HW)
15816                 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
15817
15818         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_C0)
15819                 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0;
15820
15821         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
15822             tg3_asic_rev(tp) == ASIC_REV_5719 ||
15823             tg3_asic_rev(tp) == ASIC_REV_5720)
15824                 tg3_flag_set(tp, 5717_PLUS);
15825
15826         if (tg3_asic_rev(tp) == ASIC_REV_57765 ||
15827             tg3_asic_rev(tp) == ASIC_REV_57766)
15828                 tg3_flag_set(tp, 57765_CLASS);
15829
15830         if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS) ||
15831              tg3_asic_rev(tp) == ASIC_REV_5762)
15832                 tg3_flag_set(tp, 57765_PLUS);
15833
15834         /* Intentionally exclude ASIC_REV_5906 */
15835         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
15836             tg3_asic_rev(tp) == ASIC_REV_5787 ||
15837             tg3_asic_rev(tp) == ASIC_REV_5784 ||
15838             tg3_asic_rev(tp) == ASIC_REV_5761 ||
15839             tg3_asic_rev(tp) == ASIC_REV_5785 ||
15840             tg3_asic_rev(tp) == ASIC_REV_57780 ||
15841             tg3_flag(tp, 57765_PLUS))
15842                 tg3_flag_set(tp, 5755_PLUS);
15843
15844         if (tg3_asic_rev(tp) == ASIC_REV_5780 ||
15845             tg3_asic_rev(tp) == ASIC_REV_5714)
15846                 tg3_flag_set(tp, 5780_CLASS);
15847
15848         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
15849             tg3_asic_rev(tp) == ASIC_REV_5752 ||
15850             tg3_asic_rev(tp) == ASIC_REV_5906 ||
15851             tg3_flag(tp, 5755_PLUS) ||
15852             tg3_flag(tp, 5780_CLASS))
15853                 tg3_flag_set(tp, 5750_PLUS);
15854
15855         if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
15856             tg3_flag(tp, 5750_PLUS))
15857                 tg3_flag_set(tp, 5705_PLUS);
15858 }
15859
15860 static bool tg3_10_100_only_device(struct tg3 *tp,
15861                                    const struct pci_device_id *ent)
15862 {
15863         u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
15864
15865         if ((tg3_asic_rev(tp) == ASIC_REV_5703 &&
15866              (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
15867             (tp->phy_flags & TG3_PHYFLG_IS_FET))
15868                 return true;
15869
15870         if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
15871                 if (tg3_asic_rev(tp) == ASIC_REV_5705) {
15872                         if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
15873                                 return true;
15874                 } else {
15875                         return true;
15876                 }
15877         }
15878
15879         return false;
15880 }
15881
15882 static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent)
15883 {
15884         u32 misc_ctrl_reg;
15885         u32 pci_state_reg, grc_misc_cfg;
15886         u32 val;
15887         u16 pci_cmd;
15888         int err;
15889
15890         /* Force memory write invalidate off.  If we leave it on,
15891          * then on 5700_BX chips we have to enable a workaround.
15892          * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
15893          * to match the cacheline size.  The Broadcom driver have this
15894          * workaround but turns MWI off all the times so never uses
15895          * it.  This seems to suggest that the workaround is insufficient.
15896          */
15897         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
15898         pci_cmd &= ~PCI_COMMAND_INVALIDATE;
15899         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
15900
15901         /* Important! -- Make sure register accesses are byteswapped
15902          * correctly.  Also, for those chips that require it, make
15903          * sure that indirect register accesses are enabled before
15904          * the first operation.
15905          */
15906         pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
15907                               &misc_ctrl_reg);
15908         tp->misc_host_ctrl |= (misc_ctrl_reg &
15909                                MISC_HOST_CTRL_CHIPREV);
15910         pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
15911                                tp->misc_host_ctrl);
15912
15913         tg3_detect_asic_rev(tp, misc_ctrl_reg);
15914
15915         /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
15916          * we need to disable memory and use config. cycles
15917          * only to access all registers. The 5702/03 chips
15918          * can mistakenly decode the special cycles from the
15919          * ICH chipsets as memory write cycles, causing corruption
15920          * of register and memory space. Only certain ICH bridges
15921          * will drive special cycles with non-zero data during the
15922          * address phase which can fall within the 5703's address
15923          * range. This is not an ICH bug as the PCI spec allows
15924          * non-zero address during special cycles. However, only
15925          * these ICH bridges are known to drive non-zero addresses
15926          * during special cycles.
15927          *
15928          * Since special cycles do not cross PCI bridges, we only
15929          * enable this workaround if the 5703 is on the secondary
15930          * bus of these ICH bridges.
15931          */
15932         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A1) ||
15933             (tg3_chip_rev_id(tp) == CHIPREV_ID_5703_A2)) {
15934                 static struct tg3_dev_id {
15935                         u32     vendor;
15936                         u32     device;
15937                         u32     rev;
15938                 } ich_chipsets[] = {
15939                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
15940                           PCI_ANY_ID },
15941                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
15942                           PCI_ANY_ID },
15943                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
15944                           0xa },
15945                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
15946                           PCI_ANY_ID },
15947                         { },
15948                 };
15949                 struct tg3_dev_id *pci_id = &ich_chipsets[0];
15950                 struct pci_dev *bridge = NULL;
15951
15952                 while (pci_id->vendor != 0) {
15953                         bridge = pci_get_device(pci_id->vendor, pci_id->device,
15954                                                 bridge);
15955                         if (!bridge) {
15956                                 pci_id++;
15957                                 continue;
15958                         }
15959                         if (pci_id->rev != PCI_ANY_ID) {
15960                                 if (bridge->revision > pci_id->rev)
15961                                         continue;
15962                         }
15963                         if (bridge->subordinate &&
15964                             (bridge->subordinate->number ==
15965                              tp->pdev->bus->number)) {
15966                                 tg3_flag_set(tp, ICH_WORKAROUND);
15967                                 pci_dev_put(bridge);
15968                                 break;
15969                         }
15970                 }
15971         }
15972
15973         if (tg3_asic_rev(tp) == ASIC_REV_5701) {
15974                 static struct tg3_dev_id {
15975                         u32     vendor;
15976                         u32     device;
15977                 } bridge_chipsets[] = {
15978                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
15979                         { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
15980                         { },
15981                 };
15982                 struct tg3_dev_id *pci_id = &bridge_chipsets[0];
15983                 struct pci_dev *bridge = NULL;
15984
15985                 while (pci_id->vendor != 0) {
15986                         bridge = pci_get_device(pci_id->vendor,
15987                                                 pci_id->device,
15988                                                 bridge);
15989                         if (!bridge) {
15990                                 pci_id++;
15991                                 continue;
15992                         }
15993                         if (bridge->subordinate &&
15994                             (bridge->subordinate->number <=
15995                              tp->pdev->bus->number) &&
15996                             (bridge->subordinate->busn_res.end >=
15997                              tp->pdev->bus->number)) {
15998                                 tg3_flag_set(tp, 5701_DMA_BUG);
15999                                 pci_dev_put(bridge);
16000                                 break;
16001                         }
16002                 }
16003         }
16004
16005         /* The EPB bridge inside 5714, 5715, and 5780 cannot support
16006          * DMA addresses > 40-bit. This bridge may have other additional
16007          * 57xx devices behind it in some 4-port NIC designs for example.
16008          * Any tg3 device found behind the bridge will also need the 40-bit
16009          * DMA workaround.
16010          */
16011         if (tg3_flag(tp, 5780_CLASS)) {
16012                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16013                 tp->msi_cap = tp->pdev->msi_cap;
16014         } else {
16015                 struct pci_dev *bridge = NULL;
16016
16017                 do {
16018                         bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
16019                                                 PCI_DEVICE_ID_SERVERWORKS_EPB,
16020                                                 bridge);
16021                         if (bridge && bridge->subordinate &&
16022                             (bridge->subordinate->number <=
16023                              tp->pdev->bus->number) &&
16024                             (bridge->subordinate->busn_res.end >=
16025                              tp->pdev->bus->number)) {
16026                                 tg3_flag_set(tp, 40BIT_DMA_BUG);
16027                                 pci_dev_put(bridge);
16028                                 break;
16029                         }
16030                 } while (bridge);
16031         }
16032
16033         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16034             tg3_asic_rev(tp) == ASIC_REV_5714)
16035                 tp->pdev_peer = tg3_find_peer(tp);
16036
16037         /* Determine TSO capabilities */
16038         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0)
16039                 ; /* Do nothing. HW bug. */
16040         else if (tg3_flag(tp, 57765_PLUS))
16041                 tg3_flag_set(tp, HW_TSO_3);
16042         else if (tg3_flag(tp, 5755_PLUS) ||
16043                  tg3_asic_rev(tp) == ASIC_REV_5906)
16044                 tg3_flag_set(tp, HW_TSO_2);
16045         else if (tg3_flag(tp, 5750_PLUS)) {
16046                 tg3_flag_set(tp, HW_TSO_1);
16047                 tg3_flag_set(tp, TSO_BUG);
16048                 if (tg3_asic_rev(tp) == ASIC_REV_5750 &&
16049                     tg3_chip_rev_id(tp) >= CHIPREV_ID_5750_C2)
16050                         tg3_flag_clear(tp, TSO_BUG);
16051         } else if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16052                    tg3_asic_rev(tp) != ASIC_REV_5701 &&
16053                    tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) {
16054                 tg3_flag_set(tp, FW_TSO);
16055                 tg3_flag_set(tp, TSO_BUG);
16056                 if (tg3_asic_rev(tp) == ASIC_REV_5705)
16057                         tp->fw_needed = FIRMWARE_TG3TSO5;
16058                 else
16059                         tp->fw_needed = FIRMWARE_TG3TSO;
16060         }
16061
16062         /* Selectively allow TSO based on operating conditions */
16063         if (tg3_flag(tp, HW_TSO_1) ||
16064             tg3_flag(tp, HW_TSO_2) ||
16065             tg3_flag(tp, HW_TSO_3) ||
16066             tg3_flag(tp, FW_TSO)) {
16067                 /* For firmware TSO, assume ASF is disabled.
16068                  * We'll disable TSO later if we discover ASF
16069                  * is enabled in tg3_get_eeprom_hw_cfg().
16070                  */
16071                 tg3_flag_set(tp, TSO_CAPABLE);
16072         } else {
16073                 tg3_flag_clear(tp, TSO_CAPABLE);
16074                 tg3_flag_clear(tp, TSO_BUG);
16075                 tp->fw_needed = NULL;
16076         }
16077
16078         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0)
16079                 tp->fw_needed = FIRMWARE_TG3;
16080
16081         if (tg3_asic_rev(tp) == ASIC_REV_57766)
16082                 tp->fw_needed = FIRMWARE_TG357766;
16083
16084         tp->irq_max = 1;
16085
16086         if (tg3_flag(tp, 5750_PLUS)) {
16087                 tg3_flag_set(tp, SUPPORT_MSI);
16088                 if (tg3_chip_rev(tp) == CHIPREV_5750_AX ||
16089                     tg3_chip_rev(tp) == CHIPREV_5750_BX ||
16090                     (tg3_asic_rev(tp) == ASIC_REV_5714 &&
16091                      tg3_chip_rev_id(tp) <= CHIPREV_ID_5714_A2 &&
16092                      tp->pdev_peer == tp->pdev))
16093                         tg3_flag_clear(tp, SUPPORT_MSI);
16094
16095                 if (tg3_flag(tp, 5755_PLUS) ||
16096                     tg3_asic_rev(tp) == ASIC_REV_5906) {
16097                         tg3_flag_set(tp, 1SHOT_MSI);
16098                 }
16099
16100                 if (tg3_flag(tp, 57765_PLUS)) {
16101                         tg3_flag_set(tp, SUPPORT_MSIX);
16102                         tp->irq_max = TG3_IRQ_MAX_VECS;
16103                 }
16104         }
16105
16106         tp->txq_max = 1;
16107         tp->rxq_max = 1;
16108         if (tp->irq_max > 1) {
16109                 tp->rxq_max = TG3_RSS_MAX_NUM_QS;
16110                 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
16111
16112                 if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
16113                     tg3_asic_rev(tp) == ASIC_REV_5720)
16114                         tp->txq_max = tp->irq_max - 1;
16115         }
16116
16117         if (tg3_flag(tp, 5755_PLUS) ||
16118             tg3_asic_rev(tp) == ASIC_REV_5906)
16119                 tg3_flag_set(tp, SHORT_DMA_BUG);
16120
16121         if (tg3_asic_rev(tp) == ASIC_REV_5719)
16122                 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K;
16123
16124         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16125             tg3_asic_rev(tp) == ASIC_REV_5719 ||
16126             tg3_asic_rev(tp) == ASIC_REV_5720 ||
16127             tg3_asic_rev(tp) == ASIC_REV_5762)
16128                 tg3_flag_set(tp, LRG_PROD_RING_CAP);
16129
16130         if (tg3_flag(tp, 57765_PLUS) &&
16131             tg3_chip_rev_id(tp) != CHIPREV_ID_5719_A0)
16132                 tg3_flag_set(tp, USE_JUMBO_BDFLAG);
16133
16134         if (!tg3_flag(tp, 5705_PLUS) ||
16135             tg3_flag(tp, 5780_CLASS) ||
16136             tg3_flag(tp, USE_JUMBO_BDFLAG))
16137                 tg3_flag_set(tp, JUMBO_CAPABLE);
16138
16139         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16140                               &pci_state_reg);
16141
16142         if (pci_is_pcie(tp->pdev)) {
16143                 u16 lnkctl;
16144
16145                 tg3_flag_set(tp, PCI_EXPRESS);
16146
16147                 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl);
16148                 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
16149                         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16150                                 tg3_flag_clear(tp, HW_TSO_2);
16151                                 tg3_flag_clear(tp, TSO_CAPABLE);
16152                         }
16153                         if (tg3_asic_rev(tp) == ASIC_REV_5784 ||
16154                             tg3_asic_rev(tp) == ASIC_REV_5761 ||
16155                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A0 ||
16156                             tg3_chip_rev_id(tp) == CHIPREV_ID_57780_A1)
16157                                 tg3_flag_set(tp, CLKREQ_BUG);
16158                 } else if (tg3_chip_rev_id(tp) == CHIPREV_ID_5717_A0) {
16159                         tg3_flag_set(tp, L1PLLPD_EN);
16160                 }
16161         } else if (tg3_asic_rev(tp) == ASIC_REV_5785) {
16162                 /* BCM5785 devices are effectively PCIe devices, and should
16163                  * follow PCIe codepaths, but do not have a PCIe capabilities
16164                  * section.
16165                  */
16166                 tg3_flag_set(tp, PCI_EXPRESS);
16167         } else if (!tg3_flag(tp, 5705_PLUS) ||
16168                    tg3_flag(tp, 5780_CLASS)) {
16169                 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
16170                 if (!tp->pcix_cap) {
16171                         dev_err(&tp->pdev->dev,
16172                                 "Cannot find PCI-X capability, aborting\n");
16173                         return -EIO;
16174                 }
16175
16176                 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
16177                         tg3_flag_set(tp, PCIX_MODE);
16178         }
16179
16180         /* If we have an AMD 762 or VIA K8T800 chipset, write
16181          * reordering to the mailbox registers done by the host
16182          * controller can cause major troubles.  We read back from
16183          * every mailbox register write to force the writes to be
16184          * posted to the chip in order.
16185          */
16186         if (pci_dev_present(tg3_write_reorder_chipsets) &&
16187             !tg3_flag(tp, PCI_EXPRESS))
16188                 tg3_flag_set(tp, MBOX_WRITE_REORDER);
16189
16190         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
16191                              &tp->pci_cacheline_sz);
16192         pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16193                              &tp->pci_lat_timer);
16194         if (tg3_asic_rev(tp) == ASIC_REV_5703 &&
16195             tp->pci_lat_timer < 64) {
16196                 tp->pci_lat_timer = 64;
16197                 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
16198                                       tp->pci_lat_timer);
16199         }
16200
16201         /* Important! -- It is critical that the PCI-X hw workaround
16202          * situation is decided before the first MMIO register access.
16203          */
16204         if (tg3_chip_rev(tp) == CHIPREV_5700_BX) {
16205                 /* 5700 BX chips need to have their TX producer index
16206                  * mailboxes written twice to workaround a bug.
16207                  */
16208                 tg3_flag_set(tp, TXD_MBOX_HWBUG);
16209
16210                 /* If we are in PCI-X mode, enable register write workaround.
16211                  *
16212                  * The workaround is to use indirect register accesses
16213                  * for all chip writes not to mailbox registers.
16214                  */
16215                 if (tg3_flag(tp, PCIX_MODE)) {
16216                         u32 pm_reg;
16217
16218                         tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16219
16220                         /* The chip can have it's power management PCI config
16221                          * space registers clobbered due to this bug.
16222                          * So explicitly force the chip into D0 here.
16223                          */
16224                         pci_read_config_dword(tp->pdev,
16225                                               tp->pdev->pm_cap + PCI_PM_CTRL,
16226                                               &pm_reg);
16227                         pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
16228                         pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
16229                         pci_write_config_dword(tp->pdev,
16230                                                tp->pdev->pm_cap + PCI_PM_CTRL,
16231                                                pm_reg);
16232
16233                         /* Also, force SERR#/PERR# in PCI command. */
16234                         pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16235                         pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
16236                         pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16237                 }
16238         }
16239
16240         if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
16241                 tg3_flag_set(tp, PCI_HIGH_SPEED);
16242         if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
16243                 tg3_flag_set(tp, PCI_32BIT);
16244
16245         /* Chip-specific fixup from Broadcom driver */
16246         if ((tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0) &&
16247             (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
16248                 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
16249                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
16250         }
16251
16252         /* Default fast path register access methods */
16253         tp->read32 = tg3_read32;
16254         tp->write32 = tg3_write32;
16255         tp->read32_mbox = tg3_read32;
16256         tp->write32_mbox = tg3_write32;
16257         tp->write32_tx_mbox = tg3_write32;
16258         tp->write32_rx_mbox = tg3_write32;
16259
16260         /* Various workaround register access methods */
16261         if (tg3_flag(tp, PCIX_TARGET_HWBUG))
16262                 tp->write32 = tg3_write_indirect_reg32;
16263         else if (tg3_asic_rev(tp) == ASIC_REV_5701 ||
16264                  (tg3_flag(tp, PCI_EXPRESS) &&
16265                   tg3_chip_rev_id(tp) == CHIPREV_ID_5750_A0)) {
16266                 /*
16267                  * Back to back register writes can cause problems on these
16268                  * chips, the workaround is to read back all reg writes
16269                  * except those to mailbox regs.
16270                  *
16271                  * See tg3_write_indirect_reg32().
16272                  */
16273                 tp->write32 = tg3_write_flush_reg32;
16274         }
16275
16276         if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
16277                 tp->write32_tx_mbox = tg3_write32_tx_mbox;
16278                 if (tg3_flag(tp, MBOX_WRITE_REORDER))
16279                         tp->write32_rx_mbox = tg3_write_flush_reg32;
16280         }
16281
16282         if (tg3_flag(tp, ICH_WORKAROUND)) {
16283                 tp->read32 = tg3_read_indirect_reg32;
16284                 tp->write32 = tg3_write_indirect_reg32;
16285                 tp->read32_mbox = tg3_read_indirect_mbox;
16286                 tp->write32_mbox = tg3_write_indirect_mbox;
16287                 tp->write32_tx_mbox = tg3_write_indirect_mbox;
16288                 tp->write32_rx_mbox = tg3_write_indirect_mbox;
16289
16290                 iounmap(tp->regs);
16291                 tp->regs = NULL;
16292
16293                 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
16294                 pci_cmd &= ~PCI_COMMAND_MEMORY;
16295                 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
16296         }
16297         if (tg3_asic_rev(tp) == ASIC_REV_5906) {
16298                 tp->read32_mbox = tg3_read32_mbox_5906;
16299                 tp->write32_mbox = tg3_write32_mbox_5906;
16300                 tp->write32_tx_mbox = tg3_write32_mbox_5906;
16301                 tp->write32_rx_mbox = tg3_write32_mbox_5906;
16302         }
16303
16304         if (tp->write32 == tg3_write_indirect_reg32 ||
16305             (tg3_flag(tp, PCIX_MODE) &&
16306              (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16307               tg3_asic_rev(tp) == ASIC_REV_5701)))
16308                 tg3_flag_set(tp, SRAM_USE_CONFIG);
16309
16310         /* The memory arbiter has to be enabled in order for SRAM accesses
16311          * to succeed.  Normally on powerup the tg3 chip firmware will make
16312          * sure it is enabled, but other entities such as system netboot
16313          * code might disable it.
16314          */
16315         val = tr32(MEMARB_MODE);
16316         tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
16317
16318         tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
16319         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16320             tg3_flag(tp, 5780_CLASS)) {
16321                 if (tg3_flag(tp, PCIX_MODE)) {
16322                         pci_read_config_dword(tp->pdev,
16323                                               tp->pcix_cap + PCI_X_STATUS,
16324                                               &val);
16325                         tp->pci_fn = val & 0x7;
16326                 }
16327         } else if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16328                    tg3_asic_rev(tp) == ASIC_REV_5719 ||
16329                    tg3_asic_rev(tp) == ASIC_REV_5720) {
16330                 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
16331                 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) != NIC_SRAM_CPMUSTAT_SIG)
16332                         val = tr32(TG3_CPMU_STATUS);
16333
16334                 if (tg3_asic_rev(tp) == ASIC_REV_5717)
16335                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5717) ? 1 : 0;
16336                 else
16337                         tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
16338                                      TG3_CPMU_STATUS_FSHFT_5719;
16339         }
16340
16341         if (tg3_flag(tp, FLUSH_POSTED_WRITES)) {
16342                 tp->write32_tx_mbox = tg3_write_flush_reg32;
16343                 tp->write32_rx_mbox = tg3_write_flush_reg32;
16344         }
16345
16346         /* Get eeprom hw config before calling tg3_set_power_state().
16347          * In particular, the TG3_FLAG_IS_NIC flag must be
16348          * determined before calling tg3_set_power_state() so that
16349          * we know whether or not to switch out of Vaux power.
16350          * When the flag is set, it means that GPIO1 is used for eeprom
16351          * write protect and also implies that it is a LOM where GPIOs
16352          * are not used to switch power.
16353          */
16354         tg3_get_eeprom_hw_cfg(tp);
16355
16356         if (tg3_flag(tp, FW_TSO) && tg3_flag(tp, ENABLE_ASF)) {
16357                 tg3_flag_clear(tp, TSO_CAPABLE);
16358                 tg3_flag_clear(tp, TSO_BUG);
16359                 tp->fw_needed = NULL;
16360         }
16361
16362         if (tg3_flag(tp, ENABLE_APE)) {
16363                 /* Allow reads and writes to the
16364                  * APE register and memory space.
16365                  */
16366                 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
16367                                  PCISTATE_ALLOW_APE_SHMEM_WR |
16368                                  PCISTATE_ALLOW_APE_PSPACE_WR;
16369                 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
16370                                        pci_state_reg);
16371
16372                 tg3_ape_lock_init(tp);
16373         }
16374
16375         /* Set up tp->grc_local_ctrl before calling
16376          * tg3_pwrsrc_switch_to_vmain().  GPIO1 driven high
16377          * will bring 5700's external PHY out of reset.
16378          * It is also used as eeprom write protect on LOMs.
16379          */
16380         tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
16381         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16382             tg3_flag(tp, EEPROM_WRITE_PROT))
16383                 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
16384                                        GRC_LCLCTRL_GPIO_OUTPUT1);
16385         /* Unused GPIO3 must be driven as output on 5752 because there
16386          * are no pull-up resistors on unused GPIO pins.
16387          */
16388         else if (tg3_asic_rev(tp) == ASIC_REV_5752)
16389                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
16390
16391         if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16392             tg3_asic_rev(tp) == ASIC_REV_57780 ||
16393             tg3_flag(tp, 57765_CLASS))
16394                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16395
16396         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16397             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
16398                 /* Turn off the debug UART. */
16399                 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
16400                 if (tg3_flag(tp, IS_NIC))
16401                         /* Keep VMain power. */
16402                         tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
16403                                               GRC_LCLCTRL_GPIO_OUTPUT0;
16404         }
16405
16406         if (tg3_asic_rev(tp) == ASIC_REV_5762)
16407                 tp->grc_local_ctrl |=
16408                         tr32(GRC_LOCAL_CTRL) & GRC_LCLCTRL_GPIO_UART_SEL;
16409
16410         /* Switch out of Vaux if it is a NIC */
16411         tg3_pwrsrc_switch_to_vmain(tp);
16412
16413         /* Derive initial jumbo mode from MTU assigned in
16414          * ether_setup() via the alloc_etherdev() call
16415          */
16416         if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
16417                 tg3_flag_set(tp, JUMBO_RING_ENABLE);
16418
16419         /* Determine WakeOnLan speed to use. */
16420         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16421             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16422             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16423             tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2) {
16424                 tg3_flag_clear(tp, WOL_SPEED_100MB);
16425         } else {
16426                 tg3_flag_set(tp, WOL_SPEED_100MB);
16427         }
16428
16429         if (tg3_asic_rev(tp) == ASIC_REV_5906)
16430                 tp->phy_flags |= TG3_PHYFLG_IS_FET;
16431
16432         /* A few boards don't want Ethernet@WireSpeed phy feature */
16433         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
16434             (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16435              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A0) &&
16436              (tg3_chip_rev_id(tp) != CHIPREV_ID_5705_A1)) ||
16437             (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
16438             (tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
16439                 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED;
16440
16441         if (tg3_chip_rev(tp) == CHIPREV_5703_AX ||
16442             tg3_chip_rev(tp) == CHIPREV_5704_AX)
16443                 tp->phy_flags |= TG3_PHYFLG_ADC_BUG;
16444         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5704_A0)
16445                 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG;
16446
16447         if (tg3_flag(tp, 5705_PLUS) &&
16448             !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
16449             tg3_asic_rev(tp) != ASIC_REV_5785 &&
16450             tg3_asic_rev(tp) != ASIC_REV_57780 &&
16451             !tg3_flag(tp, 57765_PLUS)) {
16452                 if (tg3_asic_rev(tp) == ASIC_REV_5755 ||
16453                     tg3_asic_rev(tp) == ASIC_REV_5787 ||
16454                     tg3_asic_rev(tp) == ASIC_REV_5784 ||
16455                     tg3_asic_rev(tp) == ASIC_REV_5761) {
16456                         if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
16457                             tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
16458                                 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG;
16459                         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
16460                                 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM;
16461                 } else
16462                         tp->phy_flags |= TG3_PHYFLG_BER_BUG;
16463         }
16464
16465         if (tg3_asic_rev(tp) == ASIC_REV_5784 &&
16466             tg3_chip_rev(tp) != CHIPREV_5784_AX) {
16467                 tp->phy_otp = tg3_read_otp_phycfg(tp);
16468                 if (tp->phy_otp == 0)
16469                         tp->phy_otp = TG3_OTP_DEFAULT;
16470         }
16471
16472         if (tg3_flag(tp, CPMU_PRESENT))
16473                 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
16474         else
16475                 tp->mi_mode = MAC_MI_MODE_BASE;
16476
16477         tp->coalesce_mode = 0;
16478         if (tg3_chip_rev(tp) != CHIPREV_5700_AX &&
16479             tg3_chip_rev(tp) != CHIPREV_5700_BX)
16480                 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
16481
16482         /* Set these bits to enable statistics workaround. */
16483         if (tg3_asic_rev(tp) == ASIC_REV_5717 ||
16484             tg3_chip_rev_id(tp) == CHIPREV_ID_5719_A0 ||
16485             tg3_chip_rev_id(tp) == CHIPREV_ID_5720_A0) {
16486                 tp->coalesce_mode |= HOSTCC_MODE_ATTN;
16487                 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN;
16488         }
16489
16490         if (tg3_asic_rev(tp) == ASIC_REV_5785 ||
16491             tg3_asic_rev(tp) == ASIC_REV_57780)
16492                 tg3_flag_set(tp, USE_PHYLIB);
16493
16494         err = tg3_mdio_init(tp);
16495         if (err)
16496                 return err;
16497
16498         /* Initialize data/descriptor byte/word swapping. */
16499         val = tr32(GRC_MODE);
16500         if (tg3_asic_rev(tp) == ASIC_REV_5720 ||
16501             tg3_asic_rev(tp) == ASIC_REV_5762)
16502                 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA |
16503                         GRC_MODE_WORD_SWAP_B2HRX_DATA |
16504                         GRC_MODE_B2HRX_ENABLE |
16505                         GRC_MODE_HTX2B_ENABLE |
16506                         GRC_MODE_HOST_STACKUP);
16507         else
16508                 val &= GRC_MODE_HOST_STACKUP;
16509
16510         tw32(GRC_MODE, val | tp->grc_mode);
16511
16512         tg3_switch_clocks(tp);
16513
16514         /* Clear this out for sanity. */
16515         tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
16516
16517         pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
16518                               &pci_state_reg);
16519         if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
16520             !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
16521                 if (tg3_chip_rev_id(tp) == CHIPREV_ID_5701_A0 ||
16522                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B0 ||
16523                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B2 ||
16524                     tg3_chip_rev_id(tp) == CHIPREV_ID_5701_B5) {
16525                         void __iomem *sram_base;
16526
16527                         /* Write some dummy words into the SRAM status block
16528                          * area, see if it reads back correctly.  If the return
16529                          * value is bad, force enable the PCIX workaround.
16530                          */
16531                         sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
16532
16533                         writel(0x00000000, sram_base);
16534                         writel(0x00000000, sram_base + 4);
16535                         writel(0xffffffff, sram_base + 4);
16536                         if (readl(sram_base) != 0x00000000)
16537                                 tg3_flag_set(tp, PCIX_TARGET_HWBUG);
16538                 }
16539         }
16540
16541         udelay(50);
16542         tg3_nvram_init(tp);
16543
16544         /* If the device has an NVRAM, no need to load patch firmware */
16545         if (tg3_asic_rev(tp) == ASIC_REV_57766 &&
16546             !tg3_flag(tp, NO_NVRAM))
16547                 tp->fw_needed = NULL;
16548
16549         grc_misc_cfg = tr32(GRC_MISC_CFG);
16550         grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
16551
16552         if (tg3_asic_rev(tp) == ASIC_REV_5705 &&
16553             (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
16554              grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
16555                 tg3_flag_set(tp, IS_5788);
16556
16557         if (!tg3_flag(tp, IS_5788) &&
16558             tg3_asic_rev(tp) != ASIC_REV_5700)
16559                 tg3_flag_set(tp, TAGGED_STATUS);
16560         if (tg3_flag(tp, TAGGED_STATUS)) {
16561                 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
16562                                       HOSTCC_MODE_CLRTICK_TXBD);
16563
16564                 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
16565                 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
16566                                        tp->misc_host_ctrl);
16567         }
16568
16569         /* Preserve the APE MAC_MODE bits */
16570         if (tg3_flag(tp, ENABLE_APE))
16571                 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN;
16572         else
16573                 tp->mac_mode = 0;
16574
16575         if (tg3_10_100_only_device(tp, ent))
16576                 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
16577
16578         err = tg3_phy_probe(tp);
16579         if (err) {
16580                 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
16581                 /* ... but do not return immediately ... */
16582                 tg3_mdio_fini(tp);
16583         }
16584
16585         tg3_read_vpd(tp);
16586         tg3_read_fw_ver(tp);
16587
16588         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
16589                 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16590         } else {
16591                 if (tg3_asic_rev(tp) == ASIC_REV_5700)
16592                         tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16593                 else
16594                         tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT;
16595         }
16596
16597         /* 5700 {AX,BX} chips have a broken status block link
16598          * change bit implementation, so we must use the
16599          * status register in those cases.
16600          */
16601         if (tg3_asic_rev(tp) == ASIC_REV_5700)
16602                 tg3_flag_set(tp, USE_LINKCHG_REG);
16603         else
16604                 tg3_flag_clear(tp, USE_LINKCHG_REG);
16605
16606         /* The led_ctrl is set during tg3_phy_probe, here we might
16607          * have to force the link status polling mechanism based
16608          * upon subsystem IDs.
16609          */
16610         if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
16611             tg3_asic_rev(tp) == ASIC_REV_5701 &&
16612             !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
16613                 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT;
16614                 tg3_flag_set(tp, USE_LINKCHG_REG);
16615         }
16616
16617         /* For all SERDES we poll the MAC status register. */
16618         if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
16619                 tg3_flag_set(tp, POLL_SERDES);
16620         else
16621                 tg3_flag_clear(tp, POLL_SERDES);
16622
16623         tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN;
16624         tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD;
16625         if (tg3_asic_rev(tp) == ASIC_REV_5701 &&
16626             tg3_flag(tp, PCIX_MODE)) {
16627                 tp->rx_offset = NET_SKB_PAD;
16628 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
16629                 tp->rx_copy_thresh = ~(u16)0;
16630 #endif
16631         }
16632
16633         tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
16634         tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
16635         tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
16636
16637         tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
16638
16639         /* Increment the rx prod index on the rx std ring by at most
16640          * 8 for these chips to workaround hw errata.
16641          */
16642         if (tg3_asic_rev(tp) == ASIC_REV_5750 ||
16643             tg3_asic_rev(tp) == ASIC_REV_5752 ||
16644             tg3_asic_rev(tp) == ASIC_REV_5755)
16645                 tp->rx_std_max_post = 8;
16646
16647         if (tg3_flag(tp, ASPM_WORKAROUND))
16648                 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
16649                                      PCIE_PWR_MGMT_L1_THRESH_MSK;
16650
16651         return err;
16652 }
16653
16654 #ifdef CONFIG_SPARC
16655 static int tg3_get_macaddr_sparc(struct tg3 *tp)
16656 {
16657         struct net_device *dev = tp->dev;
16658         struct pci_dev *pdev = tp->pdev;
16659         struct device_node *dp = pci_device_to_OF_node(pdev);
16660         const unsigned char *addr;
16661         int len;
16662
16663         addr = of_get_property(dp, "local-mac-address", &len);
16664         if (addr && len == ETH_ALEN) {
16665                 memcpy(dev->dev_addr, addr, ETH_ALEN);
16666                 return 0;
16667         }
16668         return -ENODEV;
16669 }
16670
16671 static int tg3_get_default_macaddr_sparc(struct tg3 *tp)
16672 {
16673         struct net_device *dev = tp->dev;
16674
16675         memcpy(dev->dev_addr, idprom->id_ethaddr, ETH_ALEN);
16676         return 0;
16677 }
16678 #endif
16679
16680 static int tg3_get_device_address(struct tg3 *tp)
16681 {
16682         struct net_device *dev = tp->dev;
16683         u32 hi, lo, mac_offset;
16684         int addr_ok = 0;
16685         int err;
16686
16687 #ifdef CONFIG_SPARC
16688         if (!tg3_get_macaddr_sparc(tp))
16689                 return 0;
16690 #endif
16691
16692         if (tg3_flag(tp, IS_SSB_CORE)) {
16693                 err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
16694                 if (!err && is_valid_ether_addr(&dev->dev_addr[0]))
16695                         return 0;
16696         }
16697
16698         mac_offset = 0x7c;
16699         if (tg3_asic_rev(tp) == ASIC_REV_5704 ||
16700             tg3_flag(tp, 5780_CLASS)) {
16701                 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
16702                         mac_offset = 0xcc;
16703                 if (tg3_nvram_lock(tp))
16704                         tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
16705                 else
16706                         tg3_nvram_unlock(tp);
16707         } else if (tg3_flag(tp, 5717_PLUS)) {
16708                 if (tp->pci_fn & 1)
16709                         mac_offset = 0xcc;
16710                 if (tp->pci_fn > 1)
16711                         mac_offset += 0x18c;
16712         } else if (tg3_asic_rev(tp) == ASIC_REV_5906)
16713                 mac_offset = 0x10;
16714
16715         /* First try to get it from MAC address mailbox. */
16716         tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
16717         if ((hi >> 16) == 0x484b) {
16718                 dev->dev_addr[0] = (hi >>  8) & 0xff;
16719                 dev->dev_addr[1] = (hi >>  0) & 0xff;
16720
16721                 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
16722                 dev->dev_addr[2] = (lo >> 24) & 0xff;
16723                 dev->dev_addr[3] = (lo >> 16) & 0xff;
16724                 dev->dev_addr[4] = (lo >>  8) & 0xff;
16725                 dev->dev_addr[5] = (lo >>  0) & 0xff;
16726
16727                 /* Some old bootcode may report a 0 MAC address in SRAM */
16728                 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
16729         }
16730         if (!addr_ok) {
16731                 /* Next, try NVRAM. */
16732                 if (!tg3_flag(tp, NO_NVRAM) &&
16733                     !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
16734                     !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
16735                         memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
16736                         memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
16737                 }
16738                 /* Finally just fetch it out of the MAC control regs. */
16739                 else {
16740                         hi = tr32(MAC_ADDR_0_HIGH);
16741                         lo = tr32(MAC_ADDR_0_LOW);
16742
16743                         dev->dev_addr[5] = lo & 0xff;
16744                         dev->dev_addr[4] = (lo >> 8) & 0xff;
16745                         dev->dev_addr[3] = (lo >> 16) & 0xff;
16746                         dev->dev_addr[2] = (lo >> 24) & 0xff;
16747                         dev->dev_addr[1] = hi & 0xff;
16748                         dev->dev_addr[0] = (hi >> 8) & 0xff;
16749                 }
16750         }
16751
16752         if (!is_valid_ether_addr(&dev->dev_addr[0])) {
16753 #ifdef CONFIG_SPARC
16754                 if (!tg3_get_default_macaddr_sparc(tp))
16755                         return 0;
16756 #endif
16757                 return -EINVAL;
16758         }
16759         return 0;
16760 }
16761
16762 #define BOUNDARY_SINGLE_CACHELINE       1
16763 #define BOUNDARY_MULTI_CACHELINE        2
16764
16765 static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
16766 {
16767         int cacheline_size;
16768         u8 byte;
16769         int goal;
16770
16771         pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
16772         if (byte == 0)
16773                 cacheline_size = 1024;
16774         else
16775                 cacheline_size = (int) byte * 4;
16776
16777         /* On 5703 and later chips, the boundary bits have no
16778          * effect.
16779          */
16780         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
16781             tg3_asic_rev(tp) != ASIC_REV_5701 &&
16782             !tg3_flag(tp, PCI_EXPRESS))
16783                 goto out;
16784
16785 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
16786         goal = BOUNDARY_MULTI_CACHELINE;
16787 #else
16788 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
16789         goal = BOUNDARY_SINGLE_CACHELINE;
16790 #else
16791         goal = 0;
16792 #endif
16793 #endif
16794
16795         if (tg3_flag(tp, 57765_PLUS)) {
16796                 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
16797                 goto out;
16798         }
16799
16800         if (!goal)
16801                 goto out;
16802
16803         /* PCI controllers on most RISC systems tend to disconnect
16804          * when a device tries to burst across a cache-line boundary.
16805          * Therefore, letting tg3 do so just wastes PCI bandwidth.
16806          *
16807          * Unfortunately, for PCI-E there are only limited
16808          * write-side controls for this, and thus for reads
16809          * we will still get the disconnects.  We'll also waste
16810          * these PCI cycles for both read and write for chips
16811          * other than 5700 and 5701 which do not implement the
16812          * boundary bits.
16813          */
16814         if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
16815                 switch (cacheline_size) {
16816                 case 16:
16817                 case 32:
16818                 case 64:
16819                 case 128:
16820                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
16821                                 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
16822                                         DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
16823                         } else {
16824                                 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
16825                                         DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
16826                         }
16827                         break;
16828
16829                 case 256:
16830                         val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
16831                                 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
16832                         break;
16833
16834                 default:
16835                         val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
16836                                 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
16837                         break;
16838                 }
16839         } else if (tg3_flag(tp, PCI_EXPRESS)) {
16840                 switch (cacheline_size) {
16841                 case 16:
16842                 case 32:
16843                 case 64:
16844                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
16845                                 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
16846                                 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
16847                                 break;
16848                         }
16849                         /* fallthrough */
16850                 case 128:
16851                 default:
16852                         val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
16853                         val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
16854                         break;
16855                 }
16856         } else {
16857                 switch (cacheline_size) {
16858                 case 16:
16859                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
16860                                 val |= (DMA_RWCTRL_READ_BNDRY_16 |
16861                                         DMA_RWCTRL_WRITE_BNDRY_16);
16862                                 break;
16863                         }
16864                         /* fallthrough */
16865                 case 32:
16866                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
16867                                 val |= (DMA_RWCTRL_READ_BNDRY_32 |
16868                                         DMA_RWCTRL_WRITE_BNDRY_32);
16869                                 break;
16870                         }
16871                         /* fallthrough */
16872                 case 64:
16873                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
16874                                 val |= (DMA_RWCTRL_READ_BNDRY_64 |
16875                                         DMA_RWCTRL_WRITE_BNDRY_64);
16876                                 break;
16877                         }
16878                         /* fallthrough */
16879                 case 128:
16880                         if (goal == BOUNDARY_SINGLE_CACHELINE) {
16881                                 val |= (DMA_RWCTRL_READ_BNDRY_128 |
16882                                         DMA_RWCTRL_WRITE_BNDRY_128);
16883                                 break;
16884                         }
16885                         /* fallthrough */
16886                 case 256:
16887                         val |= (DMA_RWCTRL_READ_BNDRY_256 |
16888                                 DMA_RWCTRL_WRITE_BNDRY_256);
16889                         break;
16890                 case 512:
16891                         val |= (DMA_RWCTRL_READ_BNDRY_512 |
16892                                 DMA_RWCTRL_WRITE_BNDRY_512);
16893                         break;
16894                 case 1024:
16895                 default:
16896                         val |= (DMA_RWCTRL_READ_BNDRY_1024 |
16897                                 DMA_RWCTRL_WRITE_BNDRY_1024);
16898                         break;
16899                 }
16900         }
16901
16902 out:
16903         return val;
16904 }
16905
16906 static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma,
16907                            int size, bool to_device)
16908 {
16909         struct tg3_internal_buffer_desc test_desc;
16910         u32 sram_dma_descs;
16911         int i, ret;
16912
16913         sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
16914
16915         tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
16916         tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
16917         tw32(RDMAC_STATUS, 0);
16918         tw32(WDMAC_STATUS, 0);
16919
16920         tw32(BUFMGR_MODE, 0);
16921         tw32(FTQ_RESET, 0);
16922
16923         test_desc.addr_hi = ((u64) buf_dma) >> 32;
16924         test_desc.addr_lo = buf_dma & 0xffffffff;
16925         test_desc.nic_mbuf = 0x00002100;
16926         test_desc.len = size;
16927
16928         /*
16929          * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
16930          * the *second* time the tg3 driver was getting loaded after an
16931          * initial scan.
16932          *
16933          * Broadcom tells me:
16934          *   ...the DMA engine is connected to the GRC block and a DMA
16935          *   reset may affect the GRC block in some unpredictable way...
16936          *   The behavior of resets to individual blocks has not been tested.
16937          *
16938          * Broadcom noted the GRC reset will also reset all sub-components.
16939          */
16940         if (to_device) {
16941                 test_desc.cqid_sqid = (13 << 8) | 2;
16942
16943                 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
16944                 udelay(40);
16945         } else {
16946                 test_desc.cqid_sqid = (16 << 8) | 7;
16947
16948                 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
16949                 udelay(40);
16950         }
16951         test_desc.flags = 0x00000005;
16952
16953         for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
16954                 u32 val;
16955
16956                 val = *(((u32 *)&test_desc) + i);
16957                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
16958                                        sram_dma_descs + (i * sizeof(u32)));
16959                 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
16960         }
16961         pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
16962
16963         if (to_device)
16964                 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
16965         else
16966                 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
16967
16968         ret = -ENODEV;
16969         for (i = 0; i < 40; i++) {
16970                 u32 val;
16971
16972                 if (to_device)
16973                         val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
16974                 else
16975                         val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
16976                 if ((val & 0xffff) == sram_dma_descs) {
16977                         ret = 0;
16978                         break;
16979                 }
16980
16981                 udelay(100);
16982         }
16983
16984         return ret;
16985 }
16986
16987 #define TEST_BUFFER_SIZE        0x2000
16988
16989 static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = {
16990         { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
16991         { },
16992 };
16993
16994 static int tg3_test_dma(struct tg3 *tp)
16995 {
16996         dma_addr_t buf_dma;
16997         u32 *buf, saved_dma_rwctrl;
16998         int ret = 0;
16999
17000         buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
17001                                  &buf_dma, GFP_KERNEL);
17002         if (!buf) {
17003                 ret = -ENOMEM;
17004                 goto out_nofree;
17005         }
17006
17007         tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
17008                           (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
17009
17010         tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
17011
17012         if (tg3_flag(tp, 57765_PLUS))
17013                 goto out;
17014
17015         if (tg3_flag(tp, PCI_EXPRESS)) {
17016                 /* DMA read watermark not used on PCIE */
17017                 tp->dma_rwctrl |= 0x00180000;
17018         } else if (!tg3_flag(tp, PCIX_MODE)) {
17019                 if (tg3_asic_rev(tp) == ASIC_REV_5705 ||
17020                     tg3_asic_rev(tp) == ASIC_REV_5750)
17021                         tp->dma_rwctrl |= 0x003f0000;
17022                 else
17023                         tp->dma_rwctrl |= 0x003f000f;
17024         } else {
17025                 if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17026                     tg3_asic_rev(tp) == ASIC_REV_5704) {
17027                         u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
17028                         u32 read_water = 0x7;
17029
17030                         /* If the 5704 is behind the EPB bridge, we can
17031                          * do the less restrictive ONE_DMA workaround for
17032                          * better performance.
17033                          */
17034                         if (tg3_flag(tp, 40BIT_DMA_BUG) &&
17035                             tg3_asic_rev(tp) == ASIC_REV_5704)
17036                                 tp->dma_rwctrl |= 0x8000;
17037                         else if (ccval == 0x6 || ccval == 0x7)
17038                                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17039
17040                         if (tg3_asic_rev(tp) == ASIC_REV_5703)
17041                                 read_water = 4;
17042                         /* Set bit 23 to enable PCIX hw bug fix */
17043                         tp->dma_rwctrl |=
17044                                 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
17045                                 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
17046                                 (1 << 23);
17047                 } else if (tg3_asic_rev(tp) == ASIC_REV_5780) {
17048                         /* 5780 always in PCIX mode */
17049                         tp->dma_rwctrl |= 0x00144000;
17050                 } else if (tg3_asic_rev(tp) == ASIC_REV_5714) {
17051                         /* 5714 always in PCIX mode */
17052                         tp->dma_rwctrl |= 0x00148000;
17053                 } else {
17054                         tp->dma_rwctrl |= 0x001b000f;
17055                 }
17056         }
17057         if (tg3_flag(tp, ONE_DMA_AT_ONCE))
17058                 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
17059
17060         if (tg3_asic_rev(tp) == ASIC_REV_5703 ||
17061             tg3_asic_rev(tp) == ASIC_REV_5704)
17062                 tp->dma_rwctrl &= 0xfffffff0;
17063
17064         if (tg3_asic_rev(tp) == ASIC_REV_5700 ||
17065             tg3_asic_rev(tp) == ASIC_REV_5701) {
17066                 /* Remove this if it causes problems for some boards. */
17067                 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
17068
17069                 /* On 5700/5701 chips, we need to set this bit.
17070                  * Otherwise the chip will issue cacheline transactions
17071                  * to streamable DMA memory with not all the byte
17072                  * enables turned on.  This is an error on several
17073                  * RISC PCI controllers, in particular sparc64.
17074                  *
17075                  * On 5703/5704 chips, this bit has been reassigned
17076                  * a different meaning.  In particular, it is used
17077                  * on those chips to enable a PCI-X workaround.
17078                  */
17079                 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
17080         }
17081
17082         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17083
17084
17085         if (tg3_asic_rev(tp) != ASIC_REV_5700 &&
17086             tg3_asic_rev(tp) != ASIC_REV_5701)
17087                 goto out;
17088
17089         /* It is best to perform DMA test with maximum write burst size
17090          * to expose the 5700/5701 write DMA bug.
17091          */
17092         saved_dma_rwctrl = tp->dma_rwctrl;
17093         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17094         tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17095
17096         while (1) {
17097                 u32 *p = buf, i;
17098
17099                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
17100                         p[i] = i;
17101
17102                 /* Send the buffer to the chip. */
17103                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, true);
17104                 if (ret) {
17105                         dev_err(&tp->pdev->dev,
17106                                 "%s: Buffer write failed. err = %d\n",
17107                                 __func__, ret);
17108                         break;
17109                 }
17110
17111                 /* Now read it back. */
17112                 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, false);
17113                 if (ret) {
17114                         dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
17115                                 "err = %d\n", __func__, ret);
17116                         break;
17117                 }
17118
17119                 /* Verify it. */
17120                 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
17121                         if (p[i] == i)
17122                                 continue;
17123
17124                         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17125                             DMA_RWCTRL_WRITE_BNDRY_16) {
17126                                 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17127                                 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17128                                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17129                                 break;
17130                         } else {
17131                                 dev_err(&tp->pdev->dev,
17132                                         "%s: Buffer corrupted on read back! "
17133                                         "(%d != %d)\n", __func__, p[i], i);
17134                                 ret = -ENODEV;
17135                                 goto out;
17136                         }
17137                 }
17138
17139                 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
17140                         /* Success. */
17141                         ret = 0;
17142                         break;
17143                 }
17144         }
17145         if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
17146             DMA_RWCTRL_WRITE_BNDRY_16) {
17147                 /* DMA test passed without adjusting DMA boundary,
17148                  * now look for chipsets that are known to expose the
17149                  * DMA bug without failing the test.
17150                  */
17151                 if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
17152                         tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
17153                         tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
17154                 } else {
17155                         /* Safe to use the calculated DMA boundary. */
17156                         tp->dma_rwctrl = saved_dma_rwctrl;
17157                 }
17158
17159                 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
17160         }
17161
17162 out:
17163         dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
17164 out_nofree:
17165         return ret;
17166 }
17167
17168 static void tg3_init_bufmgr_config(struct tg3 *tp)
17169 {
17170         if (tg3_flag(tp, 57765_PLUS)) {
17171                 tp->bufmgr_config.mbuf_read_dma_low_water =
17172                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17173                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17174                         DEFAULT_MB_MACRX_LOW_WATER_57765;
17175                 tp->bufmgr_config.mbuf_high_water =
17176                         DEFAULT_MB_HIGH_WATER_57765;
17177
17178                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17179                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17180                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17181                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765;
17182                 tp->bufmgr_config.mbuf_high_water_jumbo =
17183                         DEFAULT_MB_HIGH_WATER_JUMBO_57765;
17184         } else if (tg3_flag(tp, 5705_PLUS)) {
17185                 tp->bufmgr_config.mbuf_read_dma_low_water =
17186                         DEFAULT_MB_RDMA_LOW_WATER_5705;
17187                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17188                         DEFAULT_MB_MACRX_LOW_WATER_5705;
17189                 tp->bufmgr_config.mbuf_high_water =
17190                         DEFAULT_MB_HIGH_WATER_5705;
17191                 if (tg3_asic_rev(tp) == ASIC_REV_5906) {
17192                         tp->bufmgr_config.mbuf_mac_rx_low_water =
17193                                 DEFAULT_MB_MACRX_LOW_WATER_5906;
17194                         tp->bufmgr_config.mbuf_high_water =
17195                                 DEFAULT_MB_HIGH_WATER_5906;
17196                 }
17197
17198                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17199                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
17200                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17201                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
17202                 tp->bufmgr_config.mbuf_high_water_jumbo =
17203                         DEFAULT_MB_HIGH_WATER_JUMBO_5780;
17204         } else {
17205                 tp->bufmgr_config.mbuf_read_dma_low_water =
17206                         DEFAULT_MB_RDMA_LOW_WATER;
17207                 tp->bufmgr_config.mbuf_mac_rx_low_water =
17208                         DEFAULT_MB_MACRX_LOW_WATER;
17209                 tp->bufmgr_config.mbuf_high_water =
17210                         DEFAULT_MB_HIGH_WATER;
17211
17212                 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
17213                         DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
17214                 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
17215                         DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
17216                 tp->bufmgr_config.mbuf_high_water_jumbo =
17217                         DEFAULT_MB_HIGH_WATER_JUMBO;
17218         }
17219
17220         tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
17221         tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
17222 }
17223
17224 static char *tg3_phy_string(struct tg3 *tp)
17225 {
17226         switch (tp->phy_id & TG3_PHY_ID_MASK) {
17227         case TG3_PHY_ID_BCM5400:        return "5400";
17228         case TG3_PHY_ID_BCM5401:        return "5401";
17229         case TG3_PHY_ID_BCM5411:        return "5411";
17230         case TG3_PHY_ID_BCM5701:        return "5701";
17231         case TG3_PHY_ID_BCM5703:        return "5703";
17232         case TG3_PHY_ID_BCM5704:        return "5704";
17233         case TG3_PHY_ID_BCM5705:        return "5705";
17234         case TG3_PHY_ID_BCM5750:        return "5750";
17235         case TG3_PHY_ID_BCM5752:        return "5752";
17236         case TG3_PHY_ID_BCM5714:        return "5714";
17237         case TG3_PHY_ID_BCM5780:        return "5780";
17238         case TG3_PHY_ID_BCM5755:        return "5755";
17239         case TG3_PHY_ID_BCM5787:        return "5787";
17240         case TG3_PHY_ID_BCM5784:        return "5784";
17241         case TG3_PHY_ID_BCM5756:        return "5722/5756";
17242         case TG3_PHY_ID_BCM5906:        return "5906";
17243         case TG3_PHY_ID_BCM5761:        return "5761";
17244         case TG3_PHY_ID_BCM5718C:       return "5718C";
17245         case TG3_PHY_ID_BCM5718S:       return "5718S";
17246         case TG3_PHY_ID_BCM57765:       return "57765";
17247         case TG3_PHY_ID_BCM5719C:       return "5719C";
17248         case TG3_PHY_ID_BCM5720C:       return "5720C";
17249         case TG3_PHY_ID_BCM5762:        return "5762C";
17250         case TG3_PHY_ID_BCM8002:        return "8002/serdes";
17251         case 0:                 return "serdes";
17252         default:                return "unknown";
17253         }
17254 }
17255
17256 static char *tg3_bus_string(struct tg3 *tp, char *str)
17257 {
17258         if (tg3_flag(tp, PCI_EXPRESS)) {
17259                 strcpy(str, "PCI Express");
17260                 return str;
17261         } else if (tg3_flag(tp, PCIX_MODE)) {
17262                 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
17263
17264                 strcpy(str, "PCIX:");
17265
17266                 if ((clock_ctrl == 7) ||
17267                     ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
17268                      GRC_MISC_CFG_BOARD_ID_5704CIOBE))
17269                         strcat(str, "133MHz");
17270                 else if (clock_ctrl == 0)
17271                         strcat(str, "33MHz");
17272                 else if (clock_ctrl == 2)
17273                         strcat(str, "50MHz");
17274                 else if (clock_ctrl == 4)
17275                         strcat(str, "66MHz");
17276                 else if (clock_ctrl == 6)
17277                         strcat(str, "100MHz");
17278         } else {
17279                 strcpy(str, "PCI:");
17280                 if (tg3_flag(tp, PCI_HIGH_SPEED))
17281                         strcat(str, "66MHz");
17282                 else
17283                         strcat(str, "33MHz");
17284         }
17285         if (tg3_flag(tp, PCI_32BIT))
17286                 strcat(str, ":32-bit");
17287         else
17288                 strcat(str, ":64-bit");
17289         return str;
17290 }
17291
17292 static void tg3_init_coal(struct tg3 *tp)
17293 {
17294         struct ethtool_coalesce *ec = &tp->coal;
17295
17296         memset(ec, 0, sizeof(*ec));
17297         ec->cmd = ETHTOOL_GCOALESCE;
17298         ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
17299         ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
17300         ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
17301         ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
17302         ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
17303         ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
17304         ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
17305         ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
17306         ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
17307
17308         if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
17309                                  HOSTCC_MODE_CLRTICK_TXBD)) {
17310                 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
17311                 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
17312                 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
17313                 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
17314         }
17315
17316         if (tg3_flag(tp, 5705_PLUS)) {
17317                 ec->rx_coalesce_usecs_irq = 0;
17318                 ec->tx_coalesce_usecs_irq = 0;
17319                 ec->stats_block_coalesce_usecs = 0;
17320         }
17321 }
17322
17323 static int tg3_init_one(struct pci_dev *pdev,
17324                                   const struct pci_device_id *ent)
17325 {
17326         struct net_device *dev;
17327         struct tg3 *tp;
17328         int i, err;
17329         u32 sndmbx, rcvmbx, intmbx;
17330         char str[40];
17331         u64 dma_mask, persist_dma_mask;
17332         netdev_features_t features = 0;
17333
17334         printk_once(KERN_INFO "%s\n", version);
17335
17336         err = pci_enable_device(pdev);
17337         if (err) {
17338                 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
17339                 return err;
17340         }
17341
17342         err = pci_request_regions(pdev, DRV_MODULE_NAME);
17343         if (err) {
17344                 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
17345                 goto err_out_disable_pdev;
17346         }
17347
17348         pci_set_master(pdev);
17349
17350         dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
17351         if (!dev) {
17352                 err = -ENOMEM;
17353                 goto err_out_free_res;
17354         }
17355
17356         SET_NETDEV_DEV(dev, &pdev->dev);
17357
17358         tp = netdev_priv(dev);
17359         tp->pdev = pdev;
17360         tp->dev = dev;
17361         tp->rx_mode = TG3_DEF_RX_MODE;
17362         tp->tx_mode = TG3_DEF_TX_MODE;
17363         tp->irq_sync = 1;
17364
17365         if (tg3_debug > 0)
17366                 tp->msg_enable = tg3_debug;
17367         else
17368                 tp->msg_enable = TG3_DEF_MSG_ENABLE;
17369
17370         if (pdev_is_ssb_gige_core(pdev)) {
17371                 tg3_flag_set(tp, IS_SSB_CORE);
17372                 if (ssb_gige_must_flush_posted_writes(pdev))
17373                         tg3_flag_set(tp, FLUSH_POSTED_WRITES);
17374                 if (ssb_gige_one_dma_at_once(pdev))
17375                         tg3_flag_set(tp, ONE_DMA_AT_ONCE);
17376                 if (ssb_gige_have_roboswitch(pdev)) {
17377                         tg3_flag_set(tp, USE_PHYLIB);
17378                         tg3_flag_set(tp, ROBOSWITCH);
17379                 }
17380                 if (ssb_gige_is_rgmii(pdev))
17381                         tg3_flag_set(tp, RGMII_MODE);
17382         }
17383
17384         /* The word/byte swap controls here control register access byte
17385          * swapping.  DMA data byte swapping is controlled in the GRC_MODE
17386          * setting below.
17387          */
17388         tp->misc_host_ctrl =
17389                 MISC_HOST_CTRL_MASK_PCI_INT |
17390                 MISC_HOST_CTRL_WORD_SWAP |
17391                 MISC_HOST_CTRL_INDIR_ACCESS |
17392                 MISC_HOST_CTRL_PCISTATE_RW;
17393
17394         /* The NONFRM (non-frame) byte/word swap controls take effect
17395          * on descriptor entries, anything which isn't packet data.
17396          *
17397          * The StrongARM chips on the board (one for tx, one for rx)
17398          * are running in big-endian mode.
17399          */
17400         tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
17401                         GRC_MODE_WSWAP_NONFRM_DATA);
17402 #ifdef __BIG_ENDIAN
17403         tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
17404 #endif
17405         spin_lock_init(&tp->lock);
17406         spin_lock_init(&tp->indirect_lock);
17407         INIT_WORK(&tp->reset_task, tg3_reset_task);
17408
17409         tp->regs = pci_ioremap_bar(pdev, BAR_0);
17410         if (!tp->regs) {
17411                 dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
17412                 err = -ENOMEM;
17413                 goto err_out_free_dev;
17414         }
17415
17416         if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
17417             tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
17418             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
17419             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
17420             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
17421             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C ||
17422             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
17423             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
17424             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720 ||
17425             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57767 ||
17426             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57764 ||
17427             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5762 ||
17428             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5725 ||
17429             tp->pdev->device == TG3PCI_DEVICE_TIGON3_5727 ||
17430             tp->pdev->device == TG3PCI_DEVICE_TIGON3_57787) {
17431                 tg3_flag_set(tp, ENABLE_APE);
17432                 tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
17433                 if (!tp->aperegs) {
17434                         dev_err(&pdev->dev,
17435                                 "Cannot map APE registers, aborting\n");
17436                         err = -ENOMEM;
17437                         goto err_out_iounmap;
17438                 }
17439         }
17440
17441         tp->rx_pending = TG3_DEF_RX_RING_PENDING;
17442         tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
17443
17444         dev->ethtool_ops = &tg3_ethtool_ops;
17445         dev->watchdog_timeo = TG3_TX_TIMEOUT;
17446         dev->netdev_ops = &tg3_netdev_ops;
17447         dev->irq = pdev->irq;
17448
17449         err = tg3_get_invariants(tp, ent);
17450         if (err) {
17451                 dev_err(&pdev->dev,
17452                         "Problem fetching invariants of chip, aborting\n");
17453                 goto err_out_apeunmap;
17454         }
17455
17456         /* The EPB bridge inside 5714, 5715, and 5780 and any
17457          * device behind the EPB cannot support DMA addresses > 40-bit.
17458          * On 64-bit systems with IOMMU, use 40-bit dma_mask.
17459          * On 64-bit systems without IOMMU, use 64-bit dma_mask and
17460          * do DMA address check in tg3_start_xmit().
17461          */
17462         if (tg3_flag(tp, IS_5788))
17463                 persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
17464         else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
17465                 persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
17466 #ifdef CONFIG_HIGHMEM
17467                 dma_mask = DMA_BIT_MASK(64);
17468 #endif
17469         } else
17470                 persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
17471
17472         /* Configure DMA attributes. */
17473         if (dma_mask > DMA_BIT_MASK(32)) {
17474                 err = pci_set_dma_mask(pdev, dma_mask);
17475                 if (!err) {
17476                         features |= NETIF_F_HIGHDMA;
17477                         err = pci_set_consistent_dma_mask(pdev,
17478                                                           persist_dma_mask);
17479                         if (err < 0) {
17480                                 dev_err(&pdev->dev, "Unable to obtain 64 bit "
17481                                         "DMA for consistent allocations\n");
17482                                 goto err_out_apeunmap;
17483                         }
17484                 }
17485         }
17486         if (err || dma_mask == DMA_BIT_MASK(32)) {
17487                 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
17488                 if (err) {
17489                         dev_err(&pdev->dev,
17490                                 "No usable DMA configuration, aborting\n");
17491                         goto err_out_apeunmap;
17492                 }
17493         }
17494
17495         tg3_init_bufmgr_config(tp);
17496
17497         features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
17498
17499         /* 5700 B0 chips do not support checksumming correctly due
17500          * to hardware bugs.
17501          */
17502         if (tg3_chip_rev_id(tp) != CHIPREV_ID_5700_B0) {
17503                 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
17504
17505                 if (tg3_flag(tp, 5755_PLUS))
17506                         features |= NETIF_F_IPV6_CSUM;
17507         }
17508
17509         /* TSO is on by default on chips that support hardware TSO.
17510          * Firmware TSO on older chips gives lower performance, so it
17511          * is off by default, but can be enabled using ethtool.
17512          */
17513         if ((tg3_flag(tp, HW_TSO_1) ||
17514              tg3_flag(tp, HW_TSO_2) ||
17515              tg3_flag(tp, HW_TSO_3)) &&
17516             (features & NETIF_F_IP_CSUM))
17517                 features |= NETIF_F_TSO;
17518         if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
17519                 if (features & NETIF_F_IPV6_CSUM)
17520                         features |= NETIF_F_TSO6;
17521                 if (tg3_flag(tp, HW_TSO_3) ||
17522                     tg3_asic_rev(tp) == ASIC_REV_5761 ||
17523                     (tg3_asic_rev(tp) == ASIC_REV_5784 &&
17524                      tg3_chip_rev(tp) != CHIPREV_5784_AX) ||
17525                     tg3_asic_rev(tp) == ASIC_REV_5785 ||
17526                     tg3_asic_rev(tp) == ASIC_REV_57780)
17527                         features |= NETIF_F_TSO_ECN;
17528         }
17529
17530         dev->features |= features;
17531         dev->vlan_features |= features;
17532
17533         /*
17534          * Add loopback capability only for a subset of devices that support
17535          * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
17536          * loopback for the remaining devices.
17537          */
17538         if (tg3_asic_rev(tp) != ASIC_REV_5780 &&
17539             !tg3_flag(tp, CPMU_PRESENT))
17540                 /* Add the loopback capability */
17541                 features |= NETIF_F_LOOPBACK;
17542
17543         dev->hw_features |= features;
17544
17545         if (tg3_chip_rev_id(tp) == CHIPREV_ID_5705_A1 &&
17546             !tg3_flag(tp, TSO_CAPABLE) &&
17547             !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
17548                 tg3_flag_set(tp, MAX_RXPEND_64);
17549                 tp->rx_pending = 63;
17550         }
17551
17552         err = tg3_get_device_address(tp);
17553         if (err) {
17554                 dev_err(&pdev->dev,
17555                         "Could not obtain valid ethernet address, aborting\n");
17556                 goto err_out_apeunmap;
17557         }
17558
17559         /*
17560          * Reset chip in case UNDI or EFI driver did not shutdown
17561          * DMA self test will enable WDMAC and we'll see (spurious)
17562          * pending DMA on the PCI bus at that point.
17563          */
17564         if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
17565             (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
17566                 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
17567                 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17568         }
17569
17570         err = tg3_test_dma(tp);
17571         if (err) {
17572                 dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
17573                 goto err_out_apeunmap;
17574         }
17575
17576         intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW;
17577         rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW;
17578         sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW;
17579         for (i = 0; i < tp->irq_max; i++) {
17580                 struct tg3_napi *tnapi = &tp->napi[i];
17581
17582                 tnapi->tp = tp;
17583                 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING;
17584
17585                 tnapi->int_mbox = intmbx;
17586                 if (i <= 4)
17587                         intmbx += 0x8;
17588                 else
17589                         intmbx += 0x4;
17590
17591                 tnapi->consmbox = rcvmbx;
17592                 tnapi->prodmbox = sndmbx;
17593
17594                 if (i)
17595                         tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
17596                 else
17597                         tnapi->coal_now = HOSTCC_MODE_NOW;
17598
17599                 if (!tg3_flag(tp, SUPPORT_MSIX))
17600                         break;
17601
17602                 /*
17603                  * If we support MSIX, we'll be using RSS.  If we're using
17604                  * RSS, the first vector only handles link interrupts and the
17605                  * remaining vectors handle rx and tx interrupts.  Reuse the
17606                  * mailbox values for the next iteration.  The values we setup
17607                  * above are still useful for the single vectored mode.
17608                  */
17609                 if (!i)
17610                         continue;
17611
17612                 rcvmbx += 0x8;
17613
17614                 if (sndmbx & 0x4)
17615                         sndmbx -= 0x4;
17616                 else
17617                         sndmbx += 0xc;
17618         }
17619
17620         tg3_init_coal(tp);
17621
17622         pci_set_drvdata(pdev, dev);
17623
17624         if (tg3_asic_rev(tp) == ASIC_REV_5719 ||
17625             tg3_asic_rev(tp) == ASIC_REV_5720 ||
17626             tg3_asic_rev(tp) == ASIC_REV_5762)
17627                 tg3_flag_set(tp, PTP_CAPABLE);
17628
17629         tg3_timer_init(tp);
17630
17631         tg3_carrier_off(tp);
17632
17633         err = register_netdev(dev);
17634         if (err) {
17635                 dev_err(&pdev->dev, "Cannot register net device, aborting\n");
17636                 goto err_out_apeunmap;
17637         }
17638
17639         netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
17640                     tp->board_part_number,
17641                     tg3_chip_rev_id(tp),
17642                     tg3_bus_string(tp, str),
17643                     dev->dev_addr);
17644
17645         if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
17646                 struct phy_device *phydev;
17647                 phydev = tp->mdio_bus->phy_map[tp->phy_addr];
17648                 netdev_info(dev,
17649                             "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n",
17650                             phydev->drv->name, dev_name(&phydev->dev));
17651         } else {
17652                 char *ethtype;
17653
17654                 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY)
17655                         ethtype = "10/100Base-TX";
17656                 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
17657                         ethtype = "1000Base-SX";
17658                 else
17659                         ethtype = "10/100/1000Base-T";
17660
17661                 netdev_info(dev, "attached PHY is %s (%s Ethernet) "
17662                             "(WireSpeed[%d], EEE[%d])\n",
17663                             tg3_phy_string(tp), ethtype,
17664                             (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0,
17665                             (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
17666         }
17667
17668         netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
17669                     (dev->features & NETIF_F_RXCSUM) != 0,
17670                     tg3_flag(tp, USE_LINKCHG_REG) != 0,
17671                     (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0,
17672                     tg3_flag(tp, ENABLE_ASF) != 0,
17673                     tg3_flag(tp, TSO_CAPABLE) != 0);
17674         netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
17675                     tp->dma_rwctrl,
17676                     pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
17677                     ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
17678
17679         pci_save_state(pdev);
17680
17681         return 0;
17682
17683 err_out_apeunmap:
17684         if (tp->aperegs) {
17685                 iounmap(tp->aperegs);
17686                 tp->aperegs = NULL;
17687         }
17688
17689 err_out_iounmap:
17690         if (tp->regs) {
17691                 iounmap(tp->regs);
17692                 tp->regs = NULL;
17693         }
17694
17695 err_out_free_dev:
17696         free_netdev(dev);
17697
17698 err_out_free_res:
17699         pci_release_regions(pdev);
17700
17701 err_out_disable_pdev:
17702         if (pci_is_enabled(pdev))
17703                 pci_disable_device(pdev);
17704         return err;
17705 }
17706
17707 static void tg3_remove_one(struct pci_dev *pdev)
17708 {
17709         struct net_device *dev = pci_get_drvdata(pdev);
17710
17711         if (dev) {
17712                 struct tg3 *tp = netdev_priv(dev);
17713
17714                 release_firmware(tp->fw);
17715
17716                 tg3_reset_task_cancel(tp);
17717
17718                 if (tg3_flag(tp, USE_PHYLIB)) {
17719                         tg3_phy_fini(tp);
17720                         tg3_mdio_fini(tp);
17721                 }
17722
17723                 unregister_netdev(dev);
17724                 if (tp->aperegs) {
17725                         iounmap(tp->aperegs);
17726                         tp->aperegs = NULL;
17727                 }
17728                 if (tp->regs) {
17729                         iounmap(tp->regs);
17730                         tp->regs = NULL;
17731                 }
17732                 free_netdev(dev);
17733                 pci_release_regions(pdev);
17734                 pci_disable_device(pdev);
17735         }
17736 }
17737
17738 #ifdef CONFIG_PM_SLEEP
17739 static int tg3_suspend(struct device *device)
17740 {
17741         struct pci_dev *pdev = to_pci_dev(device);
17742         struct net_device *dev = pci_get_drvdata(pdev);
17743         struct tg3 *tp = netdev_priv(dev);
17744         int err;
17745
17746         if (!netif_running(dev))
17747                 return 0;
17748
17749         tg3_reset_task_cancel(tp);
17750         tg3_phy_stop(tp);
17751         tg3_netif_stop(tp);
17752
17753         tg3_timer_stop(tp);
17754
17755         tg3_full_lock(tp, 1);
17756         tg3_disable_ints(tp);
17757         tg3_full_unlock(tp);
17758
17759         netif_device_detach(dev);
17760
17761         tg3_full_lock(tp, 0);
17762         tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
17763         tg3_flag_clear(tp, INIT_COMPLETE);
17764         tg3_full_unlock(tp);
17765
17766         err = tg3_power_down_prepare(tp);
17767         if (err) {
17768                 int err2;
17769
17770                 tg3_full_lock(tp, 0);
17771
17772                 tg3_flag_set(tp, INIT_COMPLETE);
17773                 err2 = tg3_restart_hw(tp, true);
17774                 if (err2)
17775                         goto out;
17776
17777                 tg3_timer_start(tp);
17778
17779                 netif_device_attach(dev);
17780                 tg3_netif_start(tp);
17781
17782 out:
17783                 tg3_full_unlock(tp);
17784
17785                 if (!err2)
17786                         tg3_phy_start(tp);
17787         }
17788
17789         return err;
17790 }
17791
17792 static int tg3_resume(struct device *device)
17793 {
17794         struct pci_dev *pdev = to_pci_dev(device);
17795         struct net_device *dev = pci_get_drvdata(pdev);
17796         struct tg3 *tp = netdev_priv(dev);
17797         int err;
17798
17799         if (!netif_running(dev))
17800                 return 0;
17801
17802         netif_device_attach(dev);
17803
17804         tg3_full_lock(tp, 0);
17805
17806         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
17807
17808         tg3_flag_set(tp, INIT_COMPLETE);
17809         err = tg3_restart_hw(tp,
17810                              !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
17811         if (err)
17812                 goto out;
17813
17814         tg3_timer_start(tp);
17815
17816         tg3_netif_start(tp);
17817
17818 out:
17819         tg3_full_unlock(tp);
17820
17821         if (!err)
17822                 tg3_phy_start(tp);
17823
17824         return err;
17825 }
17826 #endif /* CONFIG_PM_SLEEP */
17827
17828 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
17829
17830 static void tg3_shutdown(struct pci_dev *pdev)
17831 {
17832         struct net_device *dev = pci_get_drvdata(pdev);
17833         struct tg3 *tp = netdev_priv(dev);
17834
17835         rtnl_lock();
17836         netif_device_detach(dev);
17837
17838         if (netif_running(dev))
17839                 dev_close(dev);
17840
17841         if (system_state == SYSTEM_POWER_OFF)
17842                 tg3_power_down(tp);
17843
17844         rtnl_unlock();
17845 }
17846
17847 /**
17848  * tg3_io_error_detected - called when PCI error is detected
17849  * @pdev: Pointer to PCI device
17850  * @state: The current pci connection state
17851  *
17852  * This function is called after a PCI bus error affecting
17853  * this device has been detected.
17854  */
17855 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
17856                                               pci_channel_state_t state)
17857 {
17858         struct net_device *netdev = pci_get_drvdata(pdev);
17859         struct tg3 *tp = netdev_priv(netdev);
17860         pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET;
17861
17862         netdev_info(netdev, "PCI I/O error detected\n");
17863
17864         rtnl_lock();
17865
17866         /* We probably don't have netdev yet */
17867         if (!netdev || !netif_running(netdev))
17868                 goto done;
17869
17870         tg3_phy_stop(tp);
17871
17872         tg3_netif_stop(tp);
17873
17874         tg3_timer_stop(tp);
17875
17876         /* Want to make sure that the reset task doesn't run */
17877         tg3_reset_task_cancel(tp);
17878
17879         netif_device_detach(netdev);
17880
17881         /* Clean up software state, even if MMIO is blocked */
17882         tg3_full_lock(tp, 0);
17883         tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
17884         tg3_full_unlock(tp);
17885
17886 done:
17887         if (state == pci_channel_io_perm_failure) {
17888                 if (netdev) {
17889                         tg3_napi_enable(tp);
17890                         dev_close(netdev);
17891                 }
17892                 err = PCI_ERS_RESULT_DISCONNECT;
17893         } else {
17894                 pci_disable_device(pdev);
17895         }
17896
17897         rtnl_unlock();
17898
17899         return err;
17900 }
17901
17902 /**
17903  * tg3_io_slot_reset - called after the pci bus has been reset.
17904  * @pdev: Pointer to PCI device
17905  *
17906  * Restart the card from scratch, as if from a cold-boot.
17907  * At this point, the card has exprienced a hard reset,
17908  * followed by fixups by BIOS, and has its config space
17909  * set up identically to what it was at cold boot.
17910  */
17911 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
17912 {
17913         struct net_device *netdev = pci_get_drvdata(pdev);
17914         struct tg3 *tp = netdev_priv(netdev);
17915         pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT;
17916         int err;
17917
17918         rtnl_lock();
17919
17920         if (pci_enable_device(pdev)) {
17921                 dev_err(&pdev->dev,
17922                         "Cannot re-enable PCI device after reset.\n");
17923                 goto done;
17924         }
17925
17926         pci_set_master(pdev);
17927         pci_restore_state(pdev);
17928         pci_save_state(pdev);
17929
17930         if (!netdev || !netif_running(netdev)) {
17931                 rc = PCI_ERS_RESULT_RECOVERED;
17932                 goto done;
17933         }
17934
17935         err = tg3_power_up(tp);
17936         if (err)
17937                 goto done;
17938
17939         rc = PCI_ERS_RESULT_RECOVERED;
17940
17941 done:
17942         if (rc != PCI_ERS_RESULT_RECOVERED && netdev && netif_running(netdev)) {
17943                 tg3_napi_enable(tp);
17944                 dev_close(netdev);
17945         }
17946         rtnl_unlock();
17947
17948         return rc;
17949 }
17950
17951 /**
17952  * tg3_io_resume - called when traffic can start flowing again.
17953  * @pdev: Pointer to PCI device
17954  *
17955  * This callback is called when the error recovery driver tells
17956  * us that its OK to resume normal operation.
17957  */
17958 static void tg3_io_resume(struct pci_dev *pdev)
17959 {
17960         struct net_device *netdev = pci_get_drvdata(pdev);
17961         struct tg3 *tp = netdev_priv(netdev);
17962         int err;
17963
17964         rtnl_lock();
17965
17966         if (!netif_running(netdev))
17967                 goto done;
17968
17969         tg3_full_lock(tp, 0);
17970         tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
17971         tg3_flag_set(tp, INIT_COMPLETE);
17972         err = tg3_restart_hw(tp, true);
17973         if (err) {
17974                 tg3_full_unlock(tp);
17975                 netdev_err(netdev, "Cannot restart hardware after reset.\n");
17976                 goto done;
17977         }
17978
17979         netif_device_attach(netdev);
17980
17981         tg3_timer_start(tp);
17982
17983         tg3_netif_start(tp);
17984
17985         tg3_full_unlock(tp);
17986
17987         tg3_phy_start(tp);
17988
17989 done:
17990         rtnl_unlock();
17991 }
17992
17993 static const struct pci_error_handlers tg3_err_handler = {
17994         .error_detected = tg3_io_error_detected,
17995         .slot_reset     = tg3_io_slot_reset,
17996         .resume         = tg3_io_resume
17997 };
17998
17999 static struct pci_driver tg3_driver = {
18000         .name           = DRV_MODULE_NAME,
18001         .id_table       = tg3_pci_tbl,
18002         .probe          = tg3_init_one,
18003         .remove         = tg3_remove_one,
18004         .err_handler    = &tg3_err_handler,
18005         .driver.pm      = &tg3_pm_ops,
18006         .shutdown       = tg3_shutdown,
18007 };
18008
18009 module_pci_driver(tg3_driver);