]> bbs.cooldavid.org Git - net-next-2.6.git/blame - drivers/net/tg3.c
[TG3]: Add new hard_start_xmit
[net-next-2.6.git] / drivers / net / tg3.c
CommitLineData
1da177e4
LT
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 Broadcom Corporation.
8 *
9 * Firmware is:
49cabf49
MC
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.
1da177e4
LT
16 */
17
18#include <linux/config.h>
19
20#include <linux/module.h>
21#include <linux/moduleparam.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>
14c85021 27#include <linux/in.h>
1da177e4
LT
28#include <linux/init.h>
29#include <linux/ioport.h>
30#include <linux/pci.h>
31#include <linux/netdevice.h>
32#include <linux/etherdevice.h>
33#include <linux/skbuff.h>
34#include <linux/ethtool.h>
35#include <linux/mii.h>
36#include <linux/if_vlan.h>
37#include <linux/ip.h>
38#include <linux/tcp.h>
39#include <linux/workqueue.h>
61487480 40#include <linux/prefetch.h>
f9a5f7d3 41#include <linux/dma-mapping.h>
1da177e4
LT
42
43#include <net/checksum.h>
44
45#include <asm/system.h>
46#include <asm/io.h>
47#include <asm/byteorder.h>
48#include <asm/uaccess.h>
49
50#ifdef CONFIG_SPARC64
51#include <asm/idprom.h>
52#include <asm/oplib.h>
53#include <asm/pbm.h>
54#endif
55
56#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
57#define TG3_VLAN_TAG_USED 1
58#else
59#define TG3_VLAN_TAG_USED 0
60#endif
61
62#ifdef NETIF_F_TSO
63#define TG3_TSO_SUPPORT 1
64#else
65#define TG3_TSO_SUPPORT 0
66#endif
67
68#include "tg3.h"
69
70#define DRV_MODULE_NAME "tg3"
71#define PFX DRV_MODULE_NAME ": "
4f81c32b
MC
72#define DRV_MODULE_VERSION "3.51"
73#define DRV_MODULE_RELDATE "Feb 21, 2006"
1da177e4
LT
74
75#define TG3_DEF_MAC_MODE 0
76#define TG3_DEF_RX_MODE 0
77#define TG3_DEF_TX_MODE 0
78#define TG3_DEF_MSG_ENABLE \
79 (NETIF_MSG_DRV | \
80 NETIF_MSG_PROBE | \
81 NETIF_MSG_LINK | \
82 NETIF_MSG_TIMER | \
83 NETIF_MSG_IFDOWN | \
84 NETIF_MSG_IFUP | \
85 NETIF_MSG_RX_ERR | \
86 NETIF_MSG_TX_ERR)
87
88/* length of time before we decide the hardware is borked,
89 * and dev->tx_timeout() should be called to fix the problem
90 */
91#define TG3_TX_TIMEOUT (5 * HZ)
92
93/* hardware minimum and maximum for a single frame's data payload */
94#define TG3_MIN_MTU 60
95#define TG3_MAX_MTU(tp) \
0f893dc6 96 ((tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) ? 9000 : 1500)
1da177e4
LT
97
98/* These numbers seem to be hard coded in the NIC firmware somehow.
99 * You can't change the ring sizes, but you can change where you place
100 * them in the NIC onboard memory.
101 */
102#define TG3_RX_RING_SIZE 512
103#define TG3_DEF_RX_RING_PENDING 200
104#define TG3_RX_JUMBO_RING_SIZE 256
105#define TG3_DEF_RX_JUMBO_RING_PENDING 100
106
107/* Do not place this n-ring entries value into the tp struct itself,
108 * we really want to expose these constants to GCC so that modulo et
109 * al. operations are done with shifts and masks instead of with
110 * hw multiply/modulo instructions. Another solution would be to
111 * replace things like '% foo' with '& (foo - 1)'.
112 */
113#define TG3_RX_RCB_RING_SIZE(tp) \
114 ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ? 512 : 1024)
115
116#define TG3_TX_RING_SIZE 512
117#define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1)
118
119#define TG3_RX_RING_BYTES (sizeof(struct tg3_rx_buffer_desc) * \
120 TG3_RX_RING_SIZE)
121#define TG3_RX_JUMBO_RING_BYTES (sizeof(struct tg3_rx_buffer_desc) * \
122 TG3_RX_JUMBO_RING_SIZE)
123#define TG3_RX_RCB_RING_BYTES(tp) (sizeof(struct tg3_rx_buffer_desc) * \
124 TG3_RX_RCB_RING_SIZE(tp))
125#define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \
126 TG3_TX_RING_SIZE)
1da177e4 127#define TX_BUFFS_AVAIL(TP) \
51b91468
MC
128 ((TP)->tx_pending - \
129 (((TP)->tx_prod - (TP)->tx_cons) & (TG3_TX_RING_SIZE - 1)))
1da177e4
LT
130#define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1))
131
132#define RX_PKT_BUF_SZ (1536 + tp->rx_offset + 64)
133#define RX_JUMBO_PKT_BUF_SZ (9046 + tp->rx_offset + 64)
134
135/* minimum number of free TX descriptors required to wake up TX process */
136#define TG3_TX_WAKEUP_THRESH (TG3_TX_RING_SIZE / 4)
137
138/* number of ETHTOOL_GSTATS u64's */
139#define TG3_NUM_STATS (sizeof(struct tg3_ethtool_stats)/sizeof(u64))
140
4cafd3f5
MC
141#define TG3_NUM_TEST 6
142
1da177e4
LT
143static char version[] __devinitdata =
144 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
145
146MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
147MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
148MODULE_LICENSE("GPL");
149MODULE_VERSION(DRV_MODULE_VERSION);
150
151static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */
152module_param(tg3_debug, int, 0);
153MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
154
155static struct pci_device_id tg3_pci_tbl[] = {
156 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700,
157 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
158 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701,
159 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
160 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702,
161 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
162 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703,
163 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
164 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704,
165 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
166 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE,
167 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
168 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705,
169 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
170 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2,
171 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
172 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M,
173 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
174 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2,
175 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
176 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X,
177 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
178 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X,
179 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
180 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S,
181 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
182 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3,
183 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
184 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3,
185 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
186 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782,
187 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
188 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788,
189 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
190 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789,
191 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
192 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901,
193 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
194 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2,
195 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
196 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2,
197 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
198 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F,
199 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
200 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5720,
201 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
202 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721,
203 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
204 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750,
205 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
206 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751,
207 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
208 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750M,
209 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
210 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M,
211 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
212 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F,
213 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
6e9017a7 214 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752,
af2bcd97 215 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
d8659255
XVP
216 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M,
217 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
1da177e4
LT
218 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753,
219 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
220 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M,
221 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
222 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F,
223 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
d9ab5ad1
MC
224 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754,
225 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
226 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M,
227 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
228 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787,
229 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
230 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M,
231 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
a4e2b347
MC
232 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714,
233 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
d4d2c558
MC
234 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S,
235 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
a4e2b347
MC
236 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715,
237 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
d4d2c558
MC
238 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S,
239 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
4cf78e4f
MC
240 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780,
241 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
242 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S,
243 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
1da177e4
LT
244 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781,
245 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
246 { PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX,
247 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
248 { PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX,
249 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
250 { PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000,
251 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
252 { PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001,
253 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
254 { PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003,
255 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
256 { PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100,
257 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
258 { PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3,
259 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
260 { 0, }
261};
262
263MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
264
265static struct {
266 const char string[ETH_GSTRING_LEN];
267} ethtool_stats_keys[TG3_NUM_STATS] = {
268 { "rx_octets" },
269 { "rx_fragments" },
270 { "rx_ucast_packets" },
271 { "rx_mcast_packets" },
272 { "rx_bcast_packets" },
273 { "rx_fcs_errors" },
274 { "rx_align_errors" },
275 { "rx_xon_pause_rcvd" },
276 { "rx_xoff_pause_rcvd" },
277 { "rx_mac_ctrl_rcvd" },
278 { "rx_xoff_entered" },
279 { "rx_frame_too_long_errors" },
280 { "rx_jabbers" },
281 { "rx_undersize_packets" },
282 { "rx_in_length_errors" },
283 { "rx_out_length_errors" },
284 { "rx_64_or_less_octet_packets" },
285 { "rx_65_to_127_octet_packets" },
286 { "rx_128_to_255_octet_packets" },
287 { "rx_256_to_511_octet_packets" },
288 { "rx_512_to_1023_octet_packets" },
289 { "rx_1024_to_1522_octet_packets" },
290 { "rx_1523_to_2047_octet_packets" },
291 { "rx_2048_to_4095_octet_packets" },
292 { "rx_4096_to_8191_octet_packets" },
293 { "rx_8192_to_9022_octet_packets" },
294
295 { "tx_octets" },
296 { "tx_collisions" },
297
298 { "tx_xon_sent" },
299 { "tx_xoff_sent" },
300 { "tx_flow_control" },
301 { "tx_mac_errors" },
302 { "tx_single_collisions" },
303 { "tx_mult_collisions" },
304 { "tx_deferred" },
305 { "tx_excessive_collisions" },
306 { "tx_late_collisions" },
307 { "tx_collide_2times" },
308 { "tx_collide_3times" },
309 { "tx_collide_4times" },
310 { "tx_collide_5times" },
311 { "tx_collide_6times" },
312 { "tx_collide_7times" },
313 { "tx_collide_8times" },
314 { "tx_collide_9times" },
315 { "tx_collide_10times" },
316 { "tx_collide_11times" },
317 { "tx_collide_12times" },
318 { "tx_collide_13times" },
319 { "tx_collide_14times" },
320 { "tx_collide_15times" },
321 { "tx_ucast_packets" },
322 { "tx_mcast_packets" },
323 { "tx_bcast_packets" },
324 { "tx_carrier_sense_errors" },
325 { "tx_discards" },
326 { "tx_errors" },
327
328 { "dma_writeq_full" },
329 { "dma_write_prioq_full" },
330 { "rxbds_empty" },
331 { "rx_discards" },
332 { "rx_errors" },
333 { "rx_threshold_hit" },
334
335 { "dma_readq_full" },
336 { "dma_read_prioq_full" },
337 { "tx_comp_queue_full" },
338
339 { "ring_set_send_prod_index" },
340 { "ring_status_update" },
341 { "nic_irqs" },
342 { "nic_avoided_irqs" },
343 { "nic_tx_threshold_hit" }
344};
345
4cafd3f5
MC
346static struct {
347 const char string[ETH_GSTRING_LEN];
348} ethtool_test_keys[TG3_NUM_TEST] = {
349 { "nvram test (online) " },
350 { "link test (online) " },
351 { "register test (offline)" },
352 { "memory test (offline)" },
353 { "loopback test (offline)" },
354 { "interrupt test (offline)" },
355};
356
b401e9e2
MC
357static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
358{
359 writel(val, tp->regs + off);
360}
361
362static u32 tg3_read32(struct tg3 *tp, u32 off)
363{
364 return (readl(tp->regs + off));
365}
366
1da177e4
LT
367static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
368{
6892914f
MC
369 unsigned long flags;
370
371 spin_lock_irqsave(&tp->indirect_lock, flags);
1ee582d8
MC
372 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
373 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
6892914f 374 spin_unlock_irqrestore(&tp->indirect_lock, flags);
1ee582d8
MC
375}
376
377static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
378{
379 writel(val, tp->regs + off);
380 readl(tp->regs + off);
1da177e4
LT
381}
382
6892914f 383static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
1da177e4 384{
6892914f
MC
385 unsigned long flags;
386 u32 val;
387
388 spin_lock_irqsave(&tp->indirect_lock, flags);
389 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
390 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
391 spin_unlock_irqrestore(&tp->indirect_lock, flags);
392 return val;
393}
394
395static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
396{
397 unsigned long flags;
398
399 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
400 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
401 TG3_64BIT_REG_LOW, val);
402 return;
403 }
404 if (off == (MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW)) {
405 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
406 TG3_64BIT_REG_LOW, val);
407 return;
1da177e4 408 }
6892914f
MC
409
410 spin_lock_irqsave(&tp->indirect_lock, flags);
411 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
412 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
413 spin_unlock_irqrestore(&tp->indirect_lock, flags);
414
415 /* In indirect mode when disabling interrupts, we also need
416 * to clear the interrupt bit in the GRC local ctrl register.
417 */
418 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
419 (val == 0x1)) {
420 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
421 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
422 }
423}
424
425static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
426{
427 unsigned long flags;
428 u32 val;
429
430 spin_lock_irqsave(&tp->indirect_lock, flags);
431 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
432 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
433 spin_unlock_irqrestore(&tp->indirect_lock, flags);
434 return val;
435}
436
b401e9e2
MC
437/* usec_wait specifies the wait time in usec when writing to certain registers
438 * where it is unsafe to read back the register without some delay.
439 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
440 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
441 */
442static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
6892914f 443{
b401e9e2
MC
444 if ((tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) ||
445 (tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
446 /* Non-posted methods */
447 tp->write32(tp, off, val);
448 else {
449 /* Posted method */
450 tg3_write32(tp, off, val);
451 if (usec_wait)
452 udelay(usec_wait);
453 tp->read32(tp, off);
454 }
455 /* Wait again after the read for the posted method to guarantee that
456 * the wait time is met.
457 */
458 if (usec_wait)
459 udelay(usec_wait);
1da177e4
LT
460}
461
09ee929c
MC
462static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
463{
464 tp->write32_mbox(tp, off, val);
6892914f
MC
465 if (!(tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) &&
466 !(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
467 tp->read32_mbox(tp, off);
09ee929c
MC
468}
469
20094930 470static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
1da177e4
LT
471{
472 void __iomem *mbox = tp->regs + off;
473 writel(val, mbox);
474 if (tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG)
475 writel(val, mbox);
476 if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
477 readl(mbox);
478}
479
20094930 480#define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val)
09ee929c 481#define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val))
20094930
MC
482#define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val)
483#define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val)
09ee929c 484#define tr32_mailbox(reg) tp->read32_mbox(tp, reg)
20094930
MC
485
486#define tw32(reg,val) tp->write32(tp, reg, val)
b401e9e2
MC
487#define tw32_f(reg,val) _tw32_flush(tp,(reg),(val), 0)
488#define tw32_wait_f(reg,val,us) _tw32_flush(tp,(reg),(val), (us))
20094930 489#define tr32(reg) tp->read32(tp, reg)
1da177e4
LT
490
491static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
492{
6892914f
MC
493 unsigned long flags;
494
495 spin_lock_irqsave(&tp->indirect_lock, flags);
1da177e4
LT
496 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
497 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
498
499 /* Always leave this as zero. */
500 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
6892914f 501 spin_unlock_irqrestore(&tp->indirect_lock, flags);
1da177e4
LT
502}
503
28fbef78
MC
504static void tg3_write_mem_fast(struct tg3 *tp, u32 off, u32 val)
505{
506 /* If no workaround is needed, write to mem space directly */
507 if (tp->write32 != tg3_write_indirect_reg32)
508 tw32(NIC_SRAM_WIN_BASE + off, val);
509 else
510 tg3_write_mem(tp, off, val);
511}
512
1da177e4
LT
513static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
514{
6892914f
MC
515 unsigned long flags;
516
517 spin_lock_irqsave(&tp->indirect_lock, flags);
1da177e4
LT
518 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
519 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
520
521 /* Always leave this as zero. */
522 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
6892914f 523 spin_unlock_irqrestore(&tp->indirect_lock, flags);
1da177e4
LT
524}
525
526static void tg3_disable_ints(struct tg3 *tp)
527{
528 tw32(TG3PCI_MISC_HOST_CTRL,
529 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
09ee929c 530 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
1da177e4
LT
531}
532
533static inline void tg3_cond_int(struct tg3 *tp)
534{
38f3843e
MC
535 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) &&
536 (tp->hw_status->status & SD_STATUS_UPDATED))
1da177e4
LT
537 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
538}
539
540static void tg3_enable_ints(struct tg3 *tp)
541{
bbe832c0
MC
542 tp->irq_sync = 0;
543 wmb();
544
1da177e4
LT
545 tw32(TG3PCI_MISC_HOST_CTRL,
546 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
09ee929c
MC
547 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
548 (tp->last_tag << 24));
1da177e4
LT
549 tg3_cond_int(tp);
550}
551
04237ddd
MC
552static inline unsigned int tg3_has_work(struct tg3 *tp)
553{
554 struct tg3_hw_status *sblk = tp->hw_status;
555 unsigned int work_exists = 0;
556
557 /* check for phy events */
558 if (!(tp->tg3_flags &
559 (TG3_FLAG_USE_LINKCHG_REG |
560 TG3_FLAG_POLL_SERDES))) {
561 if (sblk->status & SD_STATUS_LINK_CHG)
562 work_exists = 1;
563 }
564 /* check for RX/TX work to do */
565 if (sblk->idx[0].tx_consumer != tp->tx_cons ||
566 sblk->idx[0].rx_producer != tp->rx_rcb_ptr)
567 work_exists = 1;
568
569 return work_exists;
570}
571
1da177e4 572/* tg3_restart_ints
04237ddd
MC
573 * similar to tg3_enable_ints, but it accurately determines whether there
574 * is new work pending and can return without flushing the PIO write
575 * which reenables interrupts
1da177e4
LT
576 */
577static void tg3_restart_ints(struct tg3 *tp)
578{
fac9b83e
DM
579 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
580 tp->last_tag << 24);
1da177e4
LT
581 mmiowb();
582
fac9b83e
DM
583 /* When doing tagged status, this work check is unnecessary.
584 * The last_tag we write above tells the chip which piece of
585 * work we've completed.
586 */
587 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) &&
588 tg3_has_work(tp))
04237ddd
MC
589 tw32(HOSTCC_MODE, tp->coalesce_mode |
590 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
1da177e4
LT
591}
592
593static inline void tg3_netif_stop(struct tg3 *tp)
594{
bbe832c0 595 tp->dev->trans_start = jiffies; /* prevent tx timeout */
1da177e4
LT
596 netif_poll_disable(tp->dev);
597 netif_tx_disable(tp->dev);
598}
599
600static inline void tg3_netif_start(struct tg3 *tp)
601{
602 netif_wake_queue(tp->dev);
603 /* NOTE: unconditional netif_wake_queue is only appropriate
604 * so long as all callers are assured to have free tx slots
605 * (such as after tg3_init_hw)
606 */
607 netif_poll_enable(tp->dev);
f47c11ee
DM
608 tp->hw_status->status |= SD_STATUS_UPDATED;
609 tg3_enable_ints(tp);
1da177e4
LT
610}
611
612static void tg3_switch_clocks(struct tg3 *tp)
613{
614 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
615 u32 orig_clock_ctrl;
616
a4e2b347 617 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
4cf78e4f
MC
618 return;
619
1da177e4
LT
620 orig_clock_ctrl = clock_ctrl;
621 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
622 CLOCK_CTRL_CLKRUN_OENABLE |
623 0x1f);
624 tp->pci_clock_ctrl = clock_ctrl;
625
626 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
627 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
b401e9e2
MC
628 tw32_wait_f(TG3PCI_CLOCK_CTRL,
629 clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1da177e4
LT
630 }
631 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
b401e9e2
MC
632 tw32_wait_f(TG3PCI_CLOCK_CTRL,
633 clock_ctrl |
634 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
635 40);
636 tw32_wait_f(TG3PCI_CLOCK_CTRL,
637 clock_ctrl | (CLOCK_CTRL_ALTCLK),
638 40);
1da177e4 639 }
b401e9e2 640 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1da177e4
LT
641}
642
643#define PHY_BUSY_LOOPS 5000
644
645static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
646{
647 u32 frame_val;
648 unsigned int loops;
649 int ret;
650
651 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
652 tw32_f(MAC_MI_MODE,
653 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
654 udelay(80);
655 }
656
657 *val = 0x0;
658
659 frame_val = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) &
660 MI_COM_PHY_ADDR_MASK);
661 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
662 MI_COM_REG_ADDR_MASK);
663 frame_val |= (MI_COM_CMD_READ | MI_COM_START);
664
665 tw32_f(MAC_MI_COM, frame_val);
666
667 loops = PHY_BUSY_LOOPS;
668 while (loops != 0) {
669 udelay(10);
670 frame_val = tr32(MAC_MI_COM);
671
672 if ((frame_val & MI_COM_BUSY) == 0) {
673 udelay(5);
674 frame_val = tr32(MAC_MI_COM);
675 break;
676 }
677 loops -= 1;
678 }
679
680 ret = -EBUSY;
681 if (loops != 0) {
682 *val = frame_val & MI_COM_DATA_MASK;
683 ret = 0;
684 }
685
686 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
687 tw32_f(MAC_MI_MODE, tp->mi_mode);
688 udelay(80);
689 }
690
691 return ret;
692}
693
694static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
695{
696 u32 frame_val;
697 unsigned int loops;
698 int ret;
699
700 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
701 tw32_f(MAC_MI_MODE,
702 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
703 udelay(80);
704 }
705
706 frame_val = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) &
707 MI_COM_PHY_ADDR_MASK);
708 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
709 MI_COM_REG_ADDR_MASK);
710 frame_val |= (val & MI_COM_DATA_MASK);
711 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
712
713 tw32_f(MAC_MI_COM, frame_val);
714
715 loops = PHY_BUSY_LOOPS;
716 while (loops != 0) {
717 udelay(10);
718 frame_val = tr32(MAC_MI_COM);
719 if ((frame_val & MI_COM_BUSY) == 0) {
720 udelay(5);
721 frame_val = tr32(MAC_MI_COM);
722 break;
723 }
724 loops -= 1;
725 }
726
727 ret = -EBUSY;
728 if (loops != 0)
729 ret = 0;
730
731 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
732 tw32_f(MAC_MI_MODE, tp->mi_mode);
733 udelay(80);
734 }
735
736 return ret;
737}
738
739static void tg3_phy_set_wirespeed(struct tg3 *tp)
740{
741 u32 val;
742
743 if (tp->tg3_flags2 & TG3_FLG2_NO_ETH_WIRE_SPEED)
744 return;
745
746 if (!tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x7007) &&
747 !tg3_readphy(tp, MII_TG3_AUX_CTRL, &val))
748 tg3_writephy(tp, MII_TG3_AUX_CTRL,
749 (val | (1 << 15) | (1 << 4)));
750}
751
752static int tg3_bmcr_reset(struct tg3 *tp)
753{
754 u32 phy_control;
755 int limit, err;
756
757 /* OK, reset it, and poll the BMCR_RESET bit until it
758 * clears or we time out.
759 */
760 phy_control = BMCR_RESET;
761 err = tg3_writephy(tp, MII_BMCR, phy_control);
762 if (err != 0)
763 return -EBUSY;
764
765 limit = 5000;
766 while (limit--) {
767 err = tg3_readphy(tp, MII_BMCR, &phy_control);
768 if (err != 0)
769 return -EBUSY;
770
771 if ((phy_control & BMCR_RESET) == 0) {
772 udelay(40);
773 break;
774 }
775 udelay(10);
776 }
777 if (limit <= 0)
778 return -EBUSY;
779
780 return 0;
781}
782
783static int tg3_wait_macro_done(struct tg3 *tp)
784{
785 int limit = 100;
786
787 while (limit--) {
788 u32 tmp32;
789
790 if (!tg3_readphy(tp, 0x16, &tmp32)) {
791 if ((tmp32 & 0x1000) == 0)
792 break;
793 }
794 }
795 if (limit <= 0)
796 return -EBUSY;
797
798 return 0;
799}
800
801static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
802{
803 static const u32 test_pat[4][6] = {
804 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
805 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
806 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
807 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
808 };
809 int chan;
810
811 for (chan = 0; chan < 4; chan++) {
812 int i;
813
814 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
815 (chan * 0x2000) | 0x0200);
816 tg3_writephy(tp, 0x16, 0x0002);
817
818 for (i = 0; i < 6; i++)
819 tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
820 test_pat[chan][i]);
821
822 tg3_writephy(tp, 0x16, 0x0202);
823 if (tg3_wait_macro_done(tp)) {
824 *resetp = 1;
825 return -EBUSY;
826 }
827
828 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
829 (chan * 0x2000) | 0x0200);
830 tg3_writephy(tp, 0x16, 0x0082);
831 if (tg3_wait_macro_done(tp)) {
832 *resetp = 1;
833 return -EBUSY;
834 }
835
836 tg3_writephy(tp, 0x16, 0x0802);
837 if (tg3_wait_macro_done(tp)) {
838 *resetp = 1;
839 return -EBUSY;
840 }
841
842 for (i = 0; i < 6; i += 2) {
843 u32 low, high;
844
845 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
846 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
847 tg3_wait_macro_done(tp)) {
848 *resetp = 1;
849 return -EBUSY;
850 }
851 low &= 0x7fff;
852 high &= 0x000f;
853 if (low != test_pat[chan][i] ||
854 high != test_pat[chan][i+1]) {
855 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
856 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
857 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
858
859 return -EBUSY;
860 }
861 }
862 }
863
864 return 0;
865}
866
867static int tg3_phy_reset_chanpat(struct tg3 *tp)
868{
869 int chan;
870
871 for (chan = 0; chan < 4; chan++) {
872 int i;
873
874 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
875 (chan * 0x2000) | 0x0200);
876 tg3_writephy(tp, 0x16, 0x0002);
877 for (i = 0; i < 6; i++)
878 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
879 tg3_writephy(tp, 0x16, 0x0202);
880 if (tg3_wait_macro_done(tp))
881 return -EBUSY;
882 }
883
884 return 0;
885}
886
887static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
888{
889 u32 reg32, phy9_orig;
890 int retries, do_phy_reset, err;
891
892 retries = 10;
893 do_phy_reset = 1;
894 do {
895 if (do_phy_reset) {
896 err = tg3_bmcr_reset(tp);
897 if (err)
898 return err;
899 do_phy_reset = 0;
900 }
901
902 /* Disable transmitter and interrupt. */
903 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
904 continue;
905
906 reg32 |= 0x3000;
907 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
908
909 /* Set full-duplex, 1000 mbps. */
910 tg3_writephy(tp, MII_BMCR,
911 BMCR_FULLDPLX | TG3_BMCR_SPEED1000);
912
913 /* Set to master mode. */
914 if (tg3_readphy(tp, MII_TG3_CTRL, &phy9_orig))
915 continue;
916
917 tg3_writephy(tp, MII_TG3_CTRL,
918 (MII_TG3_CTRL_AS_MASTER |
919 MII_TG3_CTRL_ENABLE_AS_MASTER));
920
921 /* Enable SM_DSP_CLOCK and 6dB. */
922 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
923
924 /* Block the PHY control access. */
925 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8005);
926 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0800);
927
928 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
929 if (!err)
930 break;
931 } while (--retries);
932
933 err = tg3_phy_reset_chanpat(tp);
934 if (err)
935 return err;
936
937 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8005);
938 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0000);
939
940 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
941 tg3_writephy(tp, 0x16, 0x0000);
942
943 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
944 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
945 /* Set Extended packet length bit for jumbo frames */
946 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4400);
947 }
948 else {
949 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
950 }
951
952 tg3_writephy(tp, MII_TG3_CTRL, phy9_orig);
953
954 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
955 reg32 &= ~0x3000;
956 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
957 } else if (!err)
958 err = -EBUSY;
959
960 return err;
961}
962
963/* This will reset the tigon3 PHY if there is no valid
964 * link unless the FORCE argument is non-zero.
965 */
966static int tg3_phy_reset(struct tg3 *tp)
967{
968 u32 phy_status;
969 int err;
970
971 err = tg3_readphy(tp, MII_BMSR, &phy_status);
972 err |= tg3_readphy(tp, MII_BMSR, &phy_status);
973 if (err != 0)
974 return -EBUSY;
975
976 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
977 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
978 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
979 err = tg3_phy_reset_5703_4_5(tp);
980 if (err)
981 return err;
982 goto out;
983 }
984
985 err = tg3_bmcr_reset(tp);
986 if (err)
987 return err;
988
989out:
990 if (tp->tg3_flags2 & TG3_FLG2_PHY_ADC_BUG) {
991 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
992 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
993 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x2aaa);
994 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
995 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0323);
996 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
997 }
998 if (tp->tg3_flags2 & TG3_FLG2_PHY_5704_A0_BUG) {
999 tg3_writephy(tp, 0x1c, 0x8d68);
1000 tg3_writephy(tp, 0x1c, 0x8d68);
1001 }
1002 if (tp->tg3_flags2 & TG3_FLG2_PHY_BER_BUG) {
1003 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
1004 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
1005 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x310b);
1006 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
1007 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x9506);
1008 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x401f);
1009 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x14e2);
1010 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
1011 }
1012 /* Set Extended packet length bit (bit 14) on all chips that */
1013 /* support jumbo frames */
1014 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
1015 /* Cannot do read-modify-write on 5401 */
1016 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20);
0f893dc6 1017 } else if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) {
1da177e4
LT
1018 u32 phy_reg;
1019
1020 /* Set bit 14 with read-modify-write to preserve other bits */
1021 if (!tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0007) &&
1022 !tg3_readphy(tp, MII_TG3_AUX_CTRL, &phy_reg))
1023 tg3_writephy(tp, MII_TG3_AUX_CTRL, phy_reg | 0x4000);
1024 }
1025
1026 /* Set phy register 0x10 bit 0 to high fifo elasticity to support
1027 * jumbo frames transmission.
1028 */
0f893dc6 1029 if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) {
1da177e4
LT
1030 u32 phy_reg;
1031
1032 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &phy_reg))
1033 tg3_writephy(tp, MII_TG3_EXT_CTRL,
1034 phy_reg | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
1035 }
1036
1037 tg3_phy_set_wirespeed(tp);
1038 return 0;
1039}
1040
1041static void tg3_frob_aux_power(struct tg3 *tp)
1042{
1043 struct tg3 *tp_peer = tp;
1044
1045 if ((tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) != 0)
1046 return;
1047
8c2dc7e1
MC
1048 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
1049 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
1050 struct net_device *dev_peer;
1051
1052 dev_peer = pci_get_drvdata(tp->pdev_peer);
bc1c7567 1053 /* remove_one() may have been run on the peer. */
8c2dc7e1 1054 if (!dev_peer)
bc1c7567
MC
1055 tp_peer = tp;
1056 else
1057 tp_peer = netdev_priv(dev_peer);
1da177e4
LT
1058 }
1059
1da177e4 1060 if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
6921d201
MC
1061 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 ||
1062 (tp_peer->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
1063 (tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
1da177e4
LT
1064 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1065 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
b401e9e2
MC
1066 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1067 (GRC_LCLCTRL_GPIO_OE0 |
1068 GRC_LCLCTRL_GPIO_OE1 |
1069 GRC_LCLCTRL_GPIO_OE2 |
1070 GRC_LCLCTRL_GPIO_OUTPUT0 |
1071 GRC_LCLCTRL_GPIO_OUTPUT1),
1072 100);
1da177e4
LT
1073 } else {
1074 u32 no_gpio2;
dc56b7d4 1075 u32 grc_local_ctrl = 0;
1da177e4
LT
1076
1077 if (tp_peer != tp &&
1078 (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
1079 return;
1080
dc56b7d4
MC
1081 /* Workaround to prevent overdrawing Amps. */
1082 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
1083 ASIC_REV_5714) {
1084 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
b401e9e2
MC
1085 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1086 grc_local_ctrl, 100);
dc56b7d4
MC
1087 }
1088
1da177e4
LT
1089 /* On 5753 and variants, GPIO2 cannot be used. */
1090 no_gpio2 = tp->nic_sram_data_cfg &
1091 NIC_SRAM_DATA_CFG_NO_GPIO2;
1092
dc56b7d4 1093 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
1da177e4
LT
1094 GRC_LCLCTRL_GPIO_OE1 |
1095 GRC_LCLCTRL_GPIO_OE2 |
1096 GRC_LCLCTRL_GPIO_OUTPUT1 |
1097 GRC_LCLCTRL_GPIO_OUTPUT2;
1098 if (no_gpio2) {
1099 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
1100 GRC_LCLCTRL_GPIO_OUTPUT2);
1101 }
b401e9e2
MC
1102 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1103 grc_local_ctrl, 100);
1da177e4
LT
1104
1105 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
1106
b401e9e2
MC
1107 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1108 grc_local_ctrl, 100);
1da177e4
LT
1109
1110 if (!no_gpio2) {
1111 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
b401e9e2
MC
1112 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1113 grc_local_ctrl, 100);
1da177e4
LT
1114 }
1115 }
1116 } else {
1117 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
1118 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
1119 if (tp_peer != tp &&
1120 (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
1121 return;
1122
b401e9e2
MC
1123 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1124 (GRC_LCLCTRL_GPIO_OE1 |
1125 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1da177e4 1126
b401e9e2
MC
1127 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1128 GRC_LCLCTRL_GPIO_OE1, 100);
1da177e4 1129
b401e9e2
MC
1130 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1131 (GRC_LCLCTRL_GPIO_OE1 |
1132 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1da177e4
LT
1133 }
1134 }
1135}
1136
1137static int tg3_setup_phy(struct tg3 *, int);
1138
1139#define RESET_KIND_SHUTDOWN 0
1140#define RESET_KIND_INIT 1
1141#define RESET_KIND_SUSPEND 2
1142
1143static void tg3_write_sig_post_reset(struct tg3 *, int);
1144static int tg3_halt_cpu(struct tg3 *, u32);
6921d201
MC
1145static int tg3_nvram_lock(struct tg3 *);
1146static void tg3_nvram_unlock(struct tg3 *);
1da177e4 1147
bc1c7567 1148static int tg3_set_power_state(struct tg3 *tp, pci_power_t state)
1da177e4
LT
1149{
1150 u32 misc_host_ctrl;
1151 u16 power_control, power_caps;
1152 int pm = tp->pm_cap;
1153
1154 /* Make sure register accesses (indirect or otherwise)
1155 * will function correctly.
1156 */
1157 pci_write_config_dword(tp->pdev,
1158 TG3PCI_MISC_HOST_CTRL,
1159 tp->misc_host_ctrl);
1160
1161 pci_read_config_word(tp->pdev,
1162 pm + PCI_PM_CTRL,
1163 &power_control);
1164 power_control |= PCI_PM_CTRL_PME_STATUS;
1165 power_control &= ~(PCI_PM_CTRL_STATE_MASK);
1166 switch (state) {
bc1c7567 1167 case PCI_D0:
1da177e4
LT
1168 power_control |= 0;
1169 pci_write_config_word(tp->pdev,
1170 pm + PCI_PM_CTRL,
1171 power_control);
8c6bda1a
MC
1172 udelay(100); /* Delay after power state change */
1173
1174 /* Switch out of Vaux if it is not a LOM */
b401e9e2
MC
1175 if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
1176 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100);
1da177e4
LT
1177
1178 return 0;
1179
bc1c7567 1180 case PCI_D1:
1da177e4
LT
1181 power_control |= 1;
1182 break;
1183
bc1c7567 1184 case PCI_D2:
1da177e4
LT
1185 power_control |= 2;
1186 break;
1187
bc1c7567 1188 case PCI_D3hot:
1da177e4
LT
1189 power_control |= 3;
1190 break;
1191
1192 default:
1193 printk(KERN_WARNING PFX "%s: Invalid power state (%d) "
1194 "requested.\n",
1195 tp->dev->name, state);
1196 return -EINVAL;
1197 };
1198
1199 power_control |= PCI_PM_CTRL_PME_ENABLE;
1200
1201 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
1202 tw32(TG3PCI_MISC_HOST_CTRL,
1203 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
1204
1205 if (tp->link_config.phy_is_low_power == 0) {
1206 tp->link_config.phy_is_low_power = 1;
1207 tp->link_config.orig_speed = tp->link_config.speed;
1208 tp->link_config.orig_duplex = tp->link_config.duplex;
1209 tp->link_config.orig_autoneg = tp->link_config.autoneg;
1210 }
1211
747e8f8b 1212 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) {
1da177e4
LT
1213 tp->link_config.speed = SPEED_10;
1214 tp->link_config.duplex = DUPLEX_HALF;
1215 tp->link_config.autoneg = AUTONEG_ENABLE;
1216 tg3_setup_phy(tp, 0);
1217 }
1218
6921d201
MC
1219 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1220 int i;
1221 u32 val;
1222
1223 for (i = 0; i < 200; i++) {
1224 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
1225 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1226 break;
1227 msleep(1);
1228 }
1229 }
1230 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
1231 WOL_DRV_STATE_SHUTDOWN |
1232 WOL_DRV_WOL | WOL_SET_MAGIC_PKT);
1233
1da177e4
LT
1234 pci_read_config_word(tp->pdev, pm + PCI_PM_PMC, &power_caps);
1235
1236 if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE) {
1237 u32 mac_mode;
1238
1239 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
1240 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x5a);
1241 udelay(40);
1242
1243 mac_mode = MAC_MODE_PORT_MODE_MII;
1244
1245 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 ||
1246 !(tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB))
1247 mac_mode |= MAC_MODE_LINK_POLARITY;
1248 } else {
1249 mac_mode = MAC_MODE_PORT_MODE_TBI;
1250 }
1251
cbf46853 1252 if (!(tp->tg3_flags2 & TG3_FLG2_5750_PLUS))
1da177e4
LT
1253 tw32(MAC_LED_CTRL, tp->led_ctrl);
1254
1255 if (((power_caps & PCI_PM_CAP_PME_D3cold) &&
1256 (tp->tg3_flags & TG3_FLAG_WOL_ENABLE)))
1257 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
1258
1259 tw32_f(MAC_MODE, mac_mode);
1260 udelay(100);
1261
1262 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
1263 udelay(10);
1264 }
1265
1266 if (!(tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB) &&
1267 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1268 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
1269 u32 base_val;
1270
1271 base_val = tp->pci_clock_ctrl;
1272 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
1273 CLOCK_CTRL_TXCLK_DISABLE);
1274
b401e9e2
MC
1275 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
1276 CLOCK_CTRL_PWRDOWN_PLL133, 40);
a4e2b347 1277 } else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
4cf78e4f 1278 /* do nothing */
85e94ced 1279 } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
1da177e4
LT
1280 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) {
1281 u32 newbits1, newbits2;
1282
1283 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1284 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1285 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
1286 CLOCK_CTRL_TXCLK_DISABLE |
1287 CLOCK_CTRL_ALTCLK);
1288 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
1289 } else if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
1290 newbits1 = CLOCK_CTRL_625_CORE;
1291 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
1292 } else {
1293 newbits1 = CLOCK_CTRL_ALTCLK;
1294 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
1295 }
1296
b401e9e2
MC
1297 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
1298 40);
1da177e4 1299
b401e9e2
MC
1300 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
1301 40);
1da177e4
LT
1302
1303 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
1304 u32 newbits3;
1305
1306 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1307 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1308 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
1309 CLOCK_CTRL_TXCLK_DISABLE |
1310 CLOCK_CTRL_44MHZ_CORE);
1311 } else {
1312 newbits3 = CLOCK_CTRL_44MHZ_CORE;
1313 }
1314
b401e9e2
MC
1315 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1316 tp->pci_clock_ctrl | newbits3, 40);
1da177e4
LT
1317 }
1318 }
1319
6921d201
MC
1320 if (!(tp->tg3_flags & TG3_FLAG_WOL_ENABLE) &&
1321 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1322 /* Turn off the PHY */
1323 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
1324 tg3_writephy(tp, MII_TG3_EXT_CTRL,
1325 MII_TG3_EXT_CTRL_FORCE_LED_OFF);
1326 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2);
dc56b7d4
MC
1327 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
1328 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
6921d201
MC
1329 }
1330 }
1331
1da177e4
LT
1332 tg3_frob_aux_power(tp);
1333
1334 /* Workaround for unstable PLL clock */
1335 if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
1336 (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
1337 u32 val = tr32(0x7d00);
1338
1339 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
1340 tw32(0x7d00, val);
6921d201 1341 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
ec41c7df
MC
1342 int err;
1343
1344 err = tg3_nvram_lock(tp);
1da177e4 1345 tg3_halt_cpu(tp, RX_CPU_BASE);
ec41c7df
MC
1346 if (!err)
1347 tg3_nvram_unlock(tp);
6921d201 1348 }
1da177e4
LT
1349 }
1350
1351 /* Finally, set the new power state. */
1352 pci_write_config_word(tp->pdev, pm + PCI_PM_CTRL, power_control);
8c6bda1a 1353 udelay(100); /* Delay after power state change */
1da177e4
LT
1354
1355 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
1356
1357 return 0;
1358}
1359
1360static void tg3_link_report(struct tg3 *tp)
1361{
1362 if (!netif_carrier_ok(tp->dev)) {
1363 printk(KERN_INFO PFX "%s: Link is down.\n", tp->dev->name);
1364 } else {
1365 printk(KERN_INFO PFX "%s: Link is up at %d Mbps, %s duplex.\n",
1366 tp->dev->name,
1367 (tp->link_config.active_speed == SPEED_1000 ?
1368 1000 :
1369 (tp->link_config.active_speed == SPEED_100 ?
1370 100 : 10)),
1371 (tp->link_config.active_duplex == DUPLEX_FULL ?
1372 "full" : "half"));
1373
1374 printk(KERN_INFO PFX "%s: Flow control is %s for TX and "
1375 "%s for RX.\n",
1376 tp->dev->name,
1377 (tp->tg3_flags & TG3_FLAG_TX_PAUSE) ? "on" : "off",
1378 (tp->tg3_flags & TG3_FLAG_RX_PAUSE) ? "on" : "off");
1379 }
1380}
1381
1382static void tg3_setup_flow_control(struct tg3 *tp, u32 local_adv, u32 remote_adv)
1383{
1384 u32 new_tg3_flags = 0;
1385 u32 old_rx_mode = tp->rx_mode;
1386 u32 old_tx_mode = tp->tx_mode;
1387
1388 if (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) {
747e8f8b
MC
1389
1390 /* Convert 1000BaseX flow control bits to 1000BaseT
1391 * bits before resolving flow control.
1392 */
1393 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
1394 local_adv &= ~(ADVERTISE_PAUSE_CAP |
1395 ADVERTISE_PAUSE_ASYM);
1396 remote_adv &= ~(LPA_PAUSE_CAP | LPA_PAUSE_ASYM);
1397
1398 if (local_adv & ADVERTISE_1000XPAUSE)
1399 local_adv |= ADVERTISE_PAUSE_CAP;
1400 if (local_adv & ADVERTISE_1000XPSE_ASYM)
1401 local_adv |= ADVERTISE_PAUSE_ASYM;
1402 if (remote_adv & LPA_1000XPAUSE)
1403 remote_adv |= LPA_PAUSE_CAP;
1404 if (remote_adv & LPA_1000XPAUSE_ASYM)
1405 remote_adv |= LPA_PAUSE_ASYM;
1406 }
1407
1da177e4
LT
1408 if (local_adv & ADVERTISE_PAUSE_CAP) {
1409 if (local_adv & ADVERTISE_PAUSE_ASYM) {
1410 if (remote_adv & LPA_PAUSE_CAP)
1411 new_tg3_flags |=
1412 (TG3_FLAG_RX_PAUSE |
1413 TG3_FLAG_TX_PAUSE);
1414 else if (remote_adv & LPA_PAUSE_ASYM)
1415 new_tg3_flags |=
1416 (TG3_FLAG_RX_PAUSE);
1417 } else {
1418 if (remote_adv & LPA_PAUSE_CAP)
1419 new_tg3_flags |=
1420 (TG3_FLAG_RX_PAUSE |
1421 TG3_FLAG_TX_PAUSE);
1422 }
1423 } else if (local_adv & ADVERTISE_PAUSE_ASYM) {
1424 if ((remote_adv & LPA_PAUSE_CAP) &&
1425 (remote_adv & LPA_PAUSE_ASYM))
1426 new_tg3_flags |= TG3_FLAG_TX_PAUSE;
1427 }
1428
1429 tp->tg3_flags &= ~(TG3_FLAG_RX_PAUSE | TG3_FLAG_TX_PAUSE);
1430 tp->tg3_flags |= new_tg3_flags;
1431 } else {
1432 new_tg3_flags = tp->tg3_flags;
1433 }
1434
1435 if (new_tg3_flags & TG3_FLAG_RX_PAUSE)
1436 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1437 else
1438 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1439
1440 if (old_rx_mode != tp->rx_mode) {
1441 tw32_f(MAC_RX_MODE, tp->rx_mode);
1442 }
1443
1444 if (new_tg3_flags & TG3_FLAG_TX_PAUSE)
1445 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1446 else
1447 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1448
1449 if (old_tx_mode != tp->tx_mode) {
1450 tw32_f(MAC_TX_MODE, tp->tx_mode);
1451 }
1452}
1453
1454static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
1455{
1456 switch (val & MII_TG3_AUX_STAT_SPDMASK) {
1457 case MII_TG3_AUX_STAT_10HALF:
1458 *speed = SPEED_10;
1459 *duplex = DUPLEX_HALF;
1460 break;
1461
1462 case MII_TG3_AUX_STAT_10FULL:
1463 *speed = SPEED_10;
1464 *duplex = DUPLEX_FULL;
1465 break;
1466
1467 case MII_TG3_AUX_STAT_100HALF:
1468 *speed = SPEED_100;
1469 *duplex = DUPLEX_HALF;
1470 break;
1471
1472 case MII_TG3_AUX_STAT_100FULL:
1473 *speed = SPEED_100;
1474 *duplex = DUPLEX_FULL;
1475 break;
1476
1477 case MII_TG3_AUX_STAT_1000HALF:
1478 *speed = SPEED_1000;
1479 *duplex = DUPLEX_HALF;
1480 break;
1481
1482 case MII_TG3_AUX_STAT_1000FULL:
1483 *speed = SPEED_1000;
1484 *duplex = DUPLEX_FULL;
1485 break;
1486
1487 default:
1488 *speed = SPEED_INVALID;
1489 *duplex = DUPLEX_INVALID;
1490 break;
1491 };
1492}
1493
1494static void tg3_phy_copper_begin(struct tg3 *tp)
1495{
1496 u32 new_adv;
1497 int i;
1498
1499 if (tp->link_config.phy_is_low_power) {
1500 /* Entering low power mode. Disable gigabit and
1501 * 100baseT advertisements.
1502 */
1503 tg3_writephy(tp, MII_TG3_CTRL, 0);
1504
1505 new_adv = (ADVERTISE_10HALF | ADVERTISE_10FULL |
1506 ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
1507 if (tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB)
1508 new_adv |= (ADVERTISE_100HALF | ADVERTISE_100FULL);
1509
1510 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1511 } else if (tp->link_config.speed == SPEED_INVALID) {
1512 tp->link_config.advertising =
1513 (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
1514 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
1515 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full |
1516 ADVERTISED_Autoneg | ADVERTISED_MII);
1517
1518 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
1519 tp->link_config.advertising &=
1520 ~(ADVERTISED_1000baseT_Half |
1521 ADVERTISED_1000baseT_Full);
1522
1523 new_adv = (ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
1524 if (tp->link_config.advertising & ADVERTISED_10baseT_Half)
1525 new_adv |= ADVERTISE_10HALF;
1526 if (tp->link_config.advertising & ADVERTISED_10baseT_Full)
1527 new_adv |= ADVERTISE_10FULL;
1528 if (tp->link_config.advertising & ADVERTISED_100baseT_Half)
1529 new_adv |= ADVERTISE_100HALF;
1530 if (tp->link_config.advertising & ADVERTISED_100baseT_Full)
1531 new_adv |= ADVERTISE_100FULL;
1532 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1533
1534 if (tp->link_config.advertising &
1535 (ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full)) {
1536 new_adv = 0;
1537 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half)
1538 new_adv |= MII_TG3_CTRL_ADV_1000_HALF;
1539 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full)
1540 new_adv |= MII_TG3_CTRL_ADV_1000_FULL;
1541 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY) &&
1542 (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1543 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0))
1544 new_adv |= (MII_TG3_CTRL_AS_MASTER |
1545 MII_TG3_CTRL_ENABLE_AS_MASTER);
1546 tg3_writephy(tp, MII_TG3_CTRL, new_adv);
1547 } else {
1548 tg3_writephy(tp, MII_TG3_CTRL, 0);
1549 }
1550 } else {
1551 /* Asking for a specific link mode. */
1552 if (tp->link_config.speed == SPEED_1000) {
1553 new_adv = ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP;
1554 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1555
1556 if (tp->link_config.duplex == DUPLEX_FULL)
1557 new_adv = MII_TG3_CTRL_ADV_1000_FULL;
1558 else
1559 new_adv = MII_TG3_CTRL_ADV_1000_HALF;
1560 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1561 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
1562 new_adv |= (MII_TG3_CTRL_AS_MASTER |
1563 MII_TG3_CTRL_ENABLE_AS_MASTER);
1564 tg3_writephy(tp, MII_TG3_CTRL, new_adv);
1565 } else {
1566 tg3_writephy(tp, MII_TG3_CTRL, 0);
1567
1568 new_adv = ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP;
1569 if (tp->link_config.speed == SPEED_100) {
1570 if (tp->link_config.duplex == DUPLEX_FULL)
1571 new_adv |= ADVERTISE_100FULL;
1572 else
1573 new_adv |= ADVERTISE_100HALF;
1574 } else {
1575 if (tp->link_config.duplex == DUPLEX_FULL)
1576 new_adv |= ADVERTISE_10FULL;
1577 else
1578 new_adv |= ADVERTISE_10HALF;
1579 }
1580 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1581 }
1582 }
1583
1584 if (tp->link_config.autoneg == AUTONEG_DISABLE &&
1585 tp->link_config.speed != SPEED_INVALID) {
1586 u32 bmcr, orig_bmcr;
1587
1588 tp->link_config.active_speed = tp->link_config.speed;
1589 tp->link_config.active_duplex = tp->link_config.duplex;
1590
1591 bmcr = 0;
1592 switch (tp->link_config.speed) {
1593 default:
1594 case SPEED_10:
1595 break;
1596
1597 case SPEED_100:
1598 bmcr |= BMCR_SPEED100;
1599 break;
1600
1601 case SPEED_1000:
1602 bmcr |= TG3_BMCR_SPEED1000;
1603 break;
1604 };
1605
1606 if (tp->link_config.duplex == DUPLEX_FULL)
1607 bmcr |= BMCR_FULLDPLX;
1608
1609 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
1610 (bmcr != orig_bmcr)) {
1611 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
1612 for (i = 0; i < 1500; i++) {
1613 u32 tmp;
1614
1615 udelay(10);
1616 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
1617 tg3_readphy(tp, MII_BMSR, &tmp))
1618 continue;
1619 if (!(tmp & BMSR_LSTATUS)) {
1620 udelay(40);
1621 break;
1622 }
1623 }
1624 tg3_writephy(tp, MII_BMCR, bmcr);
1625 udelay(40);
1626 }
1627 } else {
1628 tg3_writephy(tp, MII_BMCR,
1629 BMCR_ANENABLE | BMCR_ANRESTART);
1630 }
1631}
1632
1633static int tg3_init_5401phy_dsp(struct tg3 *tp)
1634{
1635 int err;
1636
1637 /* Turn off tap power management. */
1638 /* Set Extended packet length bit */
1639 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20);
1640
1641 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0012);
1642 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1804);
1643
1644 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0013);
1645 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1204);
1646
1647 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
1648 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0132);
1649
1650 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
1651 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0232);
1652
1653 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
1654 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0a20);
1655
1656 udelay(40);
1657
1658 return err;
1659}
1660
1661static int tg3_copper_is_advertising_all(struct tg3 *tp)
1662{
1663 u32 adv_reg, all_mask;
1664
1665 if (tg3_readphy(tp, MII_ADVERTISE, &adv_reg))
1666 return 0;
1667
1668 all_mask = (ADVERTISE_10HALF | ADVERTISE_10FULL |
1669 ADVERTISE_100HALF | ADVERTISE_100FULL);
1670 if ((adv_reg & all_mask) != all_mask)
1671 return 0;
1672 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY)) {
1673 u32 tg3_ctrl;
1674
1675 if (tg3_readphy(tp, MII_TG3_CTRL, &tg3_ctrl))
1676 return 0;
1677
1678 all_mask = (MII_TG3_CTRL_ADV_1000_HALF |
1679 MII_TG3_CTRL_ADV_1000_FULL);
1680 if ((tg3_ctrl & all_mask) != all_mask)
1681 return 0;
1682 }
1683 return 1;
1684}
1685
1686static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
1687{
1688 int current_link_up;
1689 u32 bmsr, dummy;
1690 u16 current_speed;
1691 u8 current_duplex;
1692 int i, err;
1693
1694 tw32(MAC_EVENT, 0);
1695
1696 tw32_f(MAC_STATUS,
1697 (MAC_STATUS_SYNC_CHANGED |
1698 MAC_STATUS_CFG_CHANGED |
1699 MAC_STATUS_MI_COMPLETION |
1700 MAC_STATUS_LNKSTATE_CHANGED));
1701 udelay(40);
1702
1703 tp->mi_mode = MAC_MI_MODE_BASE;
1704 tw32_f(MAC_MI_MODE, tp->mi_mode);
1705 udelay(80);
1706
1707 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x02);
1708
1709 /* Some third-party PHYs need to be reset on link going
1710 * down.
1711 */
1712 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
1713 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
1714 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
1715 netif_carrier_ok(tp->dev)) {
1716 tg3_readphy(tp, MII_BMSR, &bmsr);
1717 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
1718 !(bmsr & BMSR_LSTATUS))
1719 force_reset = 1;
1720 }
1721 if (force_reset)
1722 tg3_phy_reset(tp);
1723
1724 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
1725 tg3_readphy(tp, MII_BMSR, &bmsr);
1726 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
1727 !(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE))
1728 bmsr = 0;
1729
1730 if (!(bmsr & BMSR_LSTATUS)) {
1731 err = tg3_init_5401phy_dsp(tp);
1732 if (err)
1733 return err;
1734
1735 tg3_readphy(tp, MII_BMSR, &bmsr);
1736 for (i = 0; i < 1000; i++) {
1737 udelay(10);
1738 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
1739 (bmsr & BMSR_LSTATUS)) {
1740 udelay(40);
1741 break;
1742 }
1743 }
1744
1745 if ((tp->phy_id & PHY_ID_REV_MASK) == PHY_REV_BCM5401_B0 &&
1746 !(bmsr & BMSR_LSTATUS) &&
1747 tp->link_config.active_speed == SPEED_1000) {
1748 err = tg3_phy_reset(tp);
1749 if (!err)
1750 err = tg3_init_5401phy_dsp(tp);
1751 if (err)
1752 return err;
1753 }
1754 }
1755 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1756 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
1757 /* 5701 {A0,B0} CRC bug workaround */
1758 tg3_writephy(tp, 0x15, 0x0a75);
1759 tg3_writephy(tp, 0x1c, 0x8c68);
1760 tg3_writephy(tp, 0x1c, 0x8d68);
1761 tg3_writephy(tp, 0x1c, 0x8c68);
1762 }
1763
1764 /* Clear pending interrupts... */
1765 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
1766 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
1767
1768 if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT)
1769 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
1770 else
1771 tg3_writephy(tp, MII_TG3_IMASK, ~0);
1772
1773 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1774 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1775 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
1776 tg3_writephy(tp, MII_TG3_EXT_CTRL,
1777 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
1778 else
1779 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
1780 }
1781
1782 current_link_up = 0;
1783 current_speed = SPEED_INVALID;
1784 current_duplex = DUPLEX_INVALID;
1785
1786 if (tp->tg3_flags2 & TG3_FLG2_CAPACITIVE_COUPLING) {
1787 u32 val;
1788
1789 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4007);
1790 tg3_readphy(tp, MII_TG3_AUX_CTRL, &val);
1791 if (!(val & (1 << 10))) {
1792 val |= (1 << 10);
1793 tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
1794 goto relink;
1795 }
1796 }
1797
1798 bmsr = 0;
1799 for (i = 0; i < 100; i++) {
1800 tg3_readphy(tp, MII_BMSR, &bmsr);
1801 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
1802 (bmsr & BMSR_LSTATUS))
1803 break;
1804 udelay(40);
1805 }
1806
1807 if (bmsr & BMSR_LSTATUS) {
1808 u32 aux_stat, bmcr;
1809
1810 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
1811 for (i = 0; i < 2000; i++) {
1812 udelay(10);
1813 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
1814 aux_stat)
1815 break;
1816 }
1817
1818 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
1819 &current_speed,
1820 &current_duplex);
1821
1822 bmcr = 0;
1823 for (i = 0; i < 200; i++) {
1824 tg3_readphy(tp, MII_BMCR, &bmcr);
1825 if (tg3_readphy(tp, MII_BMCR, &bmcr))
1826 continue;
1827 if (bmcr && bmcr != 0x7fff)
1828 break;
1829 udelay(10);
1830 }
1831
1832 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
1833 if (bmcr & BMCR_ANENABLE) {
1834 current_link_up = 1;
1835
1836 /* Force autoneg restart if we are exiting
1837 * low power mode.
1838 */
1839 if (!tg3_copper_is_advertising_all(tp))
1840 current_link_up = 0;
1841 } else {
1842 current_link_up = 0;
1843 }
1844 } else {
1845 if (!(bmcr & BMCR_ANENABLE) &&
1846 tp->link_config.speed == current_speed &&
1847 tp->link_config.duplex == current_duplex) {
1848 current_link_up = 1;
1849 } else {
1850 current_link_up = 0;
1851 }
1852 }
1853
1854 tp->link_config.active_speed = current_speed;
1855 tp->link_config.active_duplex = current_duplex;
1856 }
1857
1858 if (current_link_up == 1 &&
1859 (tp->link_config.active_duplex == DUPLEX_FULL) &&
1860 (tp->link_config.autoneg == AUTONEG_ENABLE)) {
1861 u32 local_adv, remote_adv;
1862
1863 if (tg3_readphy(tp, MII_ADVERTISE, &local_adv))
1864 local_adv = 0;
1865 local_adv &= (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
1866
1867 if (tg3_readphy(tp, MII_LPA, &remote_adv))
1868 remote_adv = 0;
1869
1870 remote_adv &= (LPA_PAUSE_CAP | LPA_PAUSE_ASYM);
1871
1872 /* If we are not advertising full pause capability,
1873 * something is wrong. Bring the link down and reconfigure.
1874 */
1875 if (local_adv != ADVERTISE_PAUSE_CAP) {
1876 current_link_up = 0;
1877 } else {
1878 tg3_setup_flow_control(tp, local_adv, remote_adv);
1879 }
1880 }
1881relink:
6921d201 1882 if (current_link_up == 0 || tp->link_config.phy_is_low_power) {
1da177e4
LT
1883 u32 tmp;
1884
1885 tg3_phy_copper_begin(tp);
1886
1887 tg3_readphy(tp, MII_BMSR, &tmp);
1888 if (!tg3_readphy(tp, MII_BMSR, &tmp) &&
1889 (tmp & BMSR_LSTATUS))
1890 current_link_up = 1;
1891 }
1892
1893 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
1894 if (current_link_up == 1) {
1895 if (tp->link_config.active_speed == SPEED_100 ||
1896 tp->link_config.active_speed == SPEED_10)
1897 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
1898 else
1899 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
1900 } else
1901 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
1902
1903 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
1904 if (tp->link_config.active_duplex == DUPLEX_HALF)
1905 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
1906
1907 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
1908 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
1909 if ((tp->led_ctrl == LED_CTRL_MODE_PHY_2) ||
1910 (current_link_up == 1 &&
1911 tp->link_config.active_speed == SPEED_10))
1912 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
1913 } else {
1914 if (current_link_up == 1)
1915 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
1916 }
1917
1918 /* ??? Without this setting Netgear GA302T PHY does not
1919 * ??? send/receive packets...
1920 */
1921 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5411 &&
1922 tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
1923 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
1924 tw32_f(MAC_MI_MODE, tp->mi_mode);
1925 udelay(80);
1926 }
1927
1928 tw32_f(MAC_MODE, tp->mac_mode);
1929 udelay(40);
1930
1931 if (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) {
1932 /* Polled via timer. */
1933 tw32_f(MAC_EVENT, 0);
1934 } else {
1935 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
1936 }
1937 udelay(40);
1938
1939 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
1940 current_link_up == 1 &&
1941 tp->link_config.active_speed == SPEED_1000 &&
1942 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ||
1943 (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED))) {
1944 udelay(120);
1945 tw32_f(MAC_STATUS,
1946 (MAC_STATUS_SYNC_CHANGED |
1947 MAC_STATUS_CFG_CHANGED));
1948 udelay(40);
1949 tg3_write_mem(tp,
1950 NIC_SRAM_FIRMWARE_MBOX,
1951 NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
1952 }
1953
1954 if (current_link_up != netif_carrier_ok(tp->dev)) {
1955 if (current_link_up)
1956 netif_carrier_on(tp->dev);
1957 else
1958 netif_carrier_off(tp->dev);
1959 tg3_link_report(tp);
1960 }
1961
1962 return 0;
1963}
1964
1965struct tg3_fiber_aneginfo {
1966 int state;
1967#define ANEG_STATE_UNKNOWN 0
1968#define ANEG_STATE_AN_ENABLE 1
1969#define ANEG_STATE_RESTART_INIT 2
1970#define ANEG_STATE_RESTART 3
1971#define ANEG_STATE_DISABLE_LINK_OK 4
1972#define ANEG_STATE_ABILITY_DETECT_INIT 5
1973#define ANEG_STATE_ABILITY_DETECT 6
1974#define ANEG_STATE_ACK_DETECT_INIT 7
1975#define ANEG_STATE_ACK_DETECT 8
1976#define ANEG_STATE_COMPLETE_ACK_INIT 9
1977#define ANEG_STATE_COMPLETE_ACK 10
1978#define ANEG_STATE_IDLE_DETECT_INIT 11
1979#define ANEG_STATE_IDLE_DETECT 12
1980#define ANEG_STATE_LINK_OK 13
1981#define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14
1982#define ANEG_STATE_NEXT_PAGE_WAIT 15
1983
1984 u32 flags;
1985#define MR_AN_ENABLE 0x00000001
1986#define MR_RESTART_AN 0x00000002
1987#define MR_AN_COMPLETE 0x00000004
1988#define MR_PAGE_RX 0x00000008
1989#define MR_NP_LOADED 0x00000010
1990#define MR_TOGGLE_TX 0x00000020
1991#define MR_LP_ADV_FULL_DUPLEX 0x00000040
1992#define MR_LP_ADV_HALF_DUPLEX 0x00000080
1993#define MR_LP_ADV_SYM_PAUSE 0x00000100
1994#define MR_LP_ADV_ASYM_PAUSE 0x00000200
1995#define MR_LP_ADV_REMOTE_FAULT1 0x00000400
1996#define MR_LP_ADV_REMOTE_FAULT2 0x00000800
1997#define MR_LP_ADV_NEXT_PAGE 0x00001000
1998#define MR_TOGGLE_RX 0x00002000
1999#define MR_NP_RX 0x00004000
2000
2001#define MR_LINK_OK 0x80000000
2002
2003 unsigned long link_time, cur_time;
2004
2005 u32 ability_match_cfg;
2006 int ability_match_count;
2007
2008 char ability_match, idle_match, ack_match;
2009
2010 u32 txconfig, rxconfig;
2011#define ANEG_CFG_NP 0x00000080
2012#define ANEG_CFG_ACK 0x00000040
2013#define ANEG_CFG_RF2 0x00000020
2014#define ANEG_CFG_RF1 0x00000010
2015#define ANEG_CFG_PS2 0x00000001
2016#define ANEG_CFG_PS1 0x00008000
2017#define ANEG_CFG_HD 0x00004000
2018#define ANEG_CFG_FD 0x00002000
2019#define ANEG_CFG_INVAL 0x00001f06
2020
2021};
2022#define ANEG_OK 0
2023#define ANEG_DONE 1
2024#define ANEG_TIMER_ENAB 2
2025#define ANEG_FAILED -1
2026
2027#define ANEG_STATE_SETTLE_TIME 10000
2028
2029static int tg3_fiber_aneg_smachine(struct tg3 *tp,
2030 struct tg3_fiber_aneginfo *ap)
2031{
2032 unsigned long delta;
2033 u32 rx_cfg_reg;
2034 int ret;
2035
2036 if (ap->state == ANEG_STATE_UNKNOWN) {
2037 ap->rxconfig = 0;
2038 ap->link_time = 0;
2039 ap->cur_time = 0;
2040 ap->ability_match_cfg = 0;
2041 ap->ability_match_count = 0;
2042 ap->ability_match = 0;
2043 ap->idle_match = 0;
2044 ap->ack_match = 0;
2045 }
2046 ap->cur_time++;
2047
2048 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
2049 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
2050
2051 if (rx_cfg_reg != ap->ability_match_cfg) {
2052 ap->ability_match_cfg = rx_cfg_reg;
2053 ap->ability_match = 0;
2054 ap->ability_match_count = 0;
2055 } else {
2056 if (++ap->ability_match_count > 1) {
2057 ap->ability_match = 1;
2058 ap->ability_match_cfg = rx_cfg_reg;
2059 }
2060 }
2061 if (rx_cfg_reg & ANEG_CFG_ACK)
2062 ap->ack_match = 1;
2063 else
2064 ap->ack_match = 0;
2065
2066 ap->idle_match = 0;
2067 } else {
2068 ap->idle_match = 1;
2069 ap->ability_match_cfg = 0;
2070 ap->ability_match_count = 0;
2071 ap->ability_match = 0;
2072 ap->ack_match = 0;
2073
2074 rx_cfg_reg = 0;
2075 }
2076
2077 ap->rxconfig = rx_cfg_reg;
2078 ret = ANEG_OK;
2079
2080 switch(ap->state) {
2081 case ANEG_STATE_UNKNOWN:
2082 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
2083 ap->state = ANEG_STATE_AN_ENABLE;
2084
2085 /* fallthru */
2086 case ANEG_STATE_AN_ENABLE:
2087 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
2088 if (ap->flags & MR_AN_ENABLE) {
2089 ap->link_time = 0;
2090 ap->cur_time = 0;
2091 ap->ability_match_cfg = 0;
2092 ap->ability_match_count = 0;
2093 ap->ability_match = 0;
2094 ap->idle_match = 0;
2095 ap->ack_match = 0;
2096
2097 ap->state = ANEG_STATE_RESTART_INIT;
2098 } else {
2099 ap->state = ANEG_STATE_DISABLE_LINK_OK;
2100 }
2101 break;
2102
2103 case ANEG_STATE_RESTART_INIT:
2104 ap->link_time = ap->cur_time;
2105 ap->flags &= ~(MR_NP_LOADED);
2106 ap->txconfig = 0;
2107 tw32(MAC_TX_AUTO_NEG, 0);
2108 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2109 tw32_f(MAC_MODE, tp->mac_mode);
2110 udelay(40);
2111
2112 ret = ANEG_TIMER_ENAB;
2113 ap->state = ANEG_STATE_RESTART;
2114
2115 /* fallthru */
2116 case ANEG_STATE_RESTART:
2117 delta = ap->cur_time - ap->link_time;
2118 if (delta > ANEG_STATE_SETTLE_TIME) {
2119 ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
2120 } else {
2121 ret = ANEG_TIMER_ENAB;
2122 }
2123 break;
2124
2125 case ANEG_STATE_DISABLE_LINK_OK:
2126 ret = ANEG_DONE;
2127 break;
2128
2129 case ANEG_STATE_ABILITY_DETECT_INIT:
2130 ap->flags &= ~(MR_TOGGLE_TX);
2131 ap->txconfig = (ANEG_CFG_FD | ANEG_CFG_PS1);
2132 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
2133 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2134 tw32_f(MAC_MODE, tp->mac_mode);
2135 udelay(40);
2136
2137 ap->state = ANEG_STATE_ABILITY_DETECT;
2138 break;
2139
2140 case ANEG_STATE_ABILITY_DETECT:
2141 if (ap->ability_match != 0 && ap->rxconfig != 0) {
2142 ap->state = ANEG_STATE_ACK_DETECT_INIT;
2143 }
2144 break;
2145
2146 case ANEG_STATE_ACK_DETECT_INIT:
2147 ap->txconfig |= ANEG_CFG_ACK;
2148 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
2149 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2150 tw32_f(MAC_MODE, tp->mac_mode);
2151 udelay(40);
2152
2153 ap->state = ANEG_STATE_ACK_DETECT;
2154
2155 /* fallthru */
2156 case ANEG_STATE_ACK_DETECT:
2157 if (ap->ack_match != 0) {
2158 if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
2159 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
2160 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
2161 } else {
2162 ap->state = ANEG_STATE_AN_ENABLE;
2163 }
2164 } else if (ap->ability_match != 0 &&
2165 ap->rxconfig == 0) {
2166 ap->state = ANEG_STATE_AN_ENABLE;
2167 }
2168 break;
2169
2170 case ANEG_STATE_COMPLETE_ACK_INIT:
2171 if (ap->rxconfig & ANEG_CFG_INVAL) {
2172 ret = ANEG_FAILED;
2173 break;
2174 }
2175 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
2176 MR_LP_ADV_HALF_DUPLEX |
2177 MR_LP_ADV_SYM_PAUSE |
2178 MR_LP_ADV_ASYM_PAUSE |
2179 MR_LP_ADV_REMOTE_FAULT1 |
2180 MR_LP_ADV_REMOTE_FAULT2 |
2181 MR_LP_ADV_NEXT_PAGE |
2182 MR_TOGGLE_RX |
2183 MR_NP_RX);
2184 if (ap->rxconfig & ANEG_CFG_FD)
2185 ap->flags |= MR_LP_ADV_FULL_DUPLEX;
2186 if (ap->rxconfig & ANEG_CFG_HD)
2187 ap->flags |= MR_LP_ADV_HALF_DUPLEX;
2188 if (ap->rxconfig & ANEG_CFG_PS1)
2189 ap->flags |= MR_LP_ADV_SYM_PAUSE;
2190 if (ap->rxconfig & ANEG_CFG_PS2)
2191 ap->flags |= MR_LP_ADV_ASYM_PAUSE;
2192 if (ap->rxconfig & ANEG_CFG_RF1)
2193 ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
2194 if (ap->rxconfig & ANEG_CFG_RF2)
2195 ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
2196 if (ap->rxconfig & ANEG_CFG_NP)
2197 ap->flags |= MR_LP_ADV_NEXT_PAGE;
2198
2199 ap->link_time = ap->cur_time;
2200
2201 ap->flags ^= (MR_TOGGLE_TX);
2202 if (ap->rxconfig & 0x0008)
2203 ap->flags |= MR_TOGGLE_RX;
2204 if (ap->rxconfig & ANEG_CFG_NP)
2205 ap->flags |= MR_NP_RX;
2206 ap->flags |= MR_PAGE_RX;
2207
2208 ap->state = ANEG_STATE_COMPLETE_ACK;
2209 ret = ANEG_TIMER_ENAB;
2210 break;
2211
2212 case ANEG_STATE_COMPLETE_ACK:
2213 if (ap->ability_match != 0 &&
2214 ap->rxconfig == 0) {
2215 ap->state = ANEG_STATE_AN_ENABLE;
2216 break;
2217 }
2218 delta = ap->cur_time - ap->link_time;
2219 if (delta > ANEG_STATE_SETTLE_TIME) {
2220 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
2221 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
2222 } else {
2223 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
2224 !(ap->flags & MR_NP_RX)) {
2225 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
2226 } else {
2227 ret = ANEG_FAILED;
2228 }
2229 }
2230 }
2231 break;
2232
2233 case ANEG_STATE_IDLE_DETECT_INIT:
2234 ap->link_time = ap->cur_time;
2235 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
2236 tw32_f(MAC_MODE, tp->mac_mode);
2237 udelay(40);
2238
2239 ap->state = ANEG_STATE_IDLE_DETECT;
2240 ret = ANEG_TIMER_ENAB;
2241 break;
2242
2243 case ANEG_STATE_IDLE_DETECT:
2244 if (ap->ability_match != 0 &&
2245 ap->rxconfig == 0) {
2246 ap->state = ANEG_STATE_AN_ENABLE;
2247 break;
2248 }
2249 delta = ap->cur_time - ap->link_time;
2250 if (delta > ANEG_STATE_SETTLE_TIME) {
2251 /* XXX another gem from the Broadcom driver :( */
2252 ap->state = ANEG_STATE_LINK_OK;
2253 }
2254 break;
2255
2256 case ANEG_STATE_LINK_OK:
2257 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
2258 ret = ANEG_DONE;
2259 break;
2260
2261 case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
2262 /* ??? unimplemented */
2263 break;
2264
2265 case ANEG_STATE_NEXT_PAGE_WAIT:
2266 /* ??? unimplemented */
2267 break;
2268
2269 default:
2270 ret = ANEG_FAILED;
2271 break;
2272 };
2273
2274 return ret;
2275}
2276
2277static int fiber_autoneg(struct tg3 *tp, u32 *flags)
2278{
2279 int res = 0;
2280 struct tg3_fiber_aneginfo aninfo;
2281 int status = ANEG_FAILED;
2282 unsigned int tick;
2283 u32 tmp;
2284
2285 tw32_f(MAC_TX_AUTO_NEG, 0);
2286
2287 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
2288 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
2289 udelay(40);
2290
2291 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
2292 udelay(40);
2293
2294 memset(&aninfo, 0, sizeof(aninfo));
2295 aninfo.flags |= MR_AN_ENABLE;
2296 aninfo.state = ANEG_STATE_UNKNOWN;
2297 aninfo.cur_time = 0;
2298 tick = 0;
2299 while (++tick < 195000) {
2300 status = tg3_fiber_aneg_smachine(tp, &aninfo);
2301 if (status == ANEG_DONE || status == ANEG_FAILED)
2302 break;
2303
2304 udelay(1);
2305 }
2306
2307 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
2308 tw32_f(MAC_MODE, tp->mac_mode);
2309 udelay(40);
2310
2311 *flags = aninfo.flags;
2312
2313 if (status == ANEG_DONE &&
2314 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
2315 MR_LP_ADV_FULL_DUPLEX)))
2316 res = 1;
2317
2318 return res;
2319}
2320
2321static void tg3_init_bcm8002(struct tg3 *tp)
2322{
2323 u32 mac_status = tr32(MAC_STATUS);
2324 int i;
2325
2326 /* Reset when initting first time or we have a link. */
2327 if ((tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) &&
2328 !(mac_status & MAC_STATUS_PCS_SYNCED))
2329 return;
2330
2331 /* Set PLL lock range. */
2332 tg3_writephy(tp, 0x16, 0x8007);
2333
2334 /* SW reset */
2335 tg3_writephy(tp, MII_BMCR, BMCR_RESET);
2336
2337 /* Wait for reset to complete. */
2338 /* XXX schedule_timeout() ... */
2339 for (i = 0; i < 500; i++)
2340 udelay(10);
2341
2342 /* Config mode; select PMA/Ch 1 regs. */
2343 tg3_writephy(tp, 0x10, 0x8411);
2344
2345 /* Enable auto-lock and comdet, select txclk for tx. */
2346 tg3_writephy(tp, 0x11, 0x0a10);
2347
2348 tg3_writephy(tp, 0x18, 0x00a0);
2349 tg3_writephy(tp, 0x16, 0x41ff);
2350
2351 /* Assert and deassert POR. */
2352 tg3_writephy(tp, 0x13, 0x0400);
2353 udelay(40);
2354 tg3_writephy(tp, 0x13, 0x0000);
2355
2356 tg3_writephy(tp, 0x11, 0x0a50);
2357 udelay(40);
2358 tg3_writephy(tp, 0x11, 0x0a10);
2359
2360 /* Wait for signal to stabilize */
2361 /* XXX schedule_timeout() ... */
2362 for (i = 0; i < 15000; i++)
2363 udelay(10);
2364
2365 /* Deselect the channel register so we can read the PHYID
2366 * later.
2367 */
2368 tg3_writephy(tp, 0x10, 0x8011);
2369}
2370
2371static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
2372{
2373 u32 sg_dig_ctrl, sg_dig_status;
2374 u32 serdes_cfg, expected_sg_dig_ctrl;
2375 int workaround, port_a;
2376 int current_link_up;
2377
2378 serdes_cfg = 0;
2379 expected_sg_dig_ctrl = 0;
2380 workaround = 0;
2381 port_a = 1;
2382 current_link_up = 0;
2383
2384 if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
2385 tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) {
2386 workaround = 1;
2387 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
2388 port_a = 0;
2389
2390 /* preserve bits 0-11,13,14 for signal pre-emphasis */
2391 /* preserve bits 20-23 for voltage regulator */
2392 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
2393 }
2394
2395 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2396
2397 if (tp->link_config.autoneg != AUTONEG_ENABLE) {
2398 if (sg_dig_ctrl & (1 << 31)) {
2399 if (workaround) {
2400 u32 val = serdes_cfg;
2401
2402 if (port_a)
2403 val |= 0xc010000;
2404 else
2405 val |= 0x4010000;
2406 tw32_f(MAC_SERDES_CFG, val);
2407 }
2408 tw32_f(SG_DIG_CTRL, 0x01388400);
2409 }
2410 if (mac_status & MAC_STATUS_PCS_SYNCED) {
2411 tg3_setup_flow_control(tp, 0, 0);
2412 current_link_up = 1;
2413 }
2414 goto out;
2415 }
2416
2417 /* Want auto-negotiation. */
2418 expected_sg_dig_ctrl = 0x81388400;
2419
2420 /* Pause capability */
2421 expected_sg_dig_ctrl |= (1 << 11);
2422
2423 /* Asymettric pause */
2424 expected_sg_dig_ctrl |= (1 << 12);
2425
2426 if (sg_dig_ctrl != expected_sg_dig_ctrl) {
2427 if (workaround)
2428 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
2429 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | (1 << 30));
2430 udelay(5);
2431 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
2432
2433 tp->tg3_flags2 |= TG3_FLG2_PHY_JUST_INITTED;
2434 } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
2435 MAC_STATUS_SIGNAL_DET)) {
2436 int i;
2437
2438 /* Giver time to negotiate (~200ms) */
2439 for (i = 0; i < 40000; i++) {
2440 sg_dig_status = tr32(SG_DIG_STATUS);
2441 if (sg_dig_status & (0x3))
2442 break;
2443 udelay(5);
2444 }
2445 mac_status = tr32(MAC_STATUS);
2446
2447 if ((sg_dig_status & (1 << 1)) &&
2448 (mac_status & MAC_STATUS_PCS_SYNCED)) {
2449 u32 local_adv, remote_adv;
2450
2451 local_adv = ADVERTISE_PAUSE_CAP;
2452 remote_adv = 0;
2453 if (sg_dig_status & (1 << 19))
2454 remote_adv |= LPA_PAUSE_CAP;
2455 if (sg_dig_status & (1 << 20))
2456 remote_adv |= LPA_PAUSE_ASYM;
2457
2458 tg3_setup_flow_control(tp, local_adv, remote_adv);
2459 current_link_up = 1;
2460 tp->tg3_flags2 &= ~TG3_FLG2_PHY_JUST_INITTED;
2461 } else if (!(sg_dig_status & (1 << 1))) {
2462 if (tp->tg3_flags2 & TG3_FLG2_PHY_JUST_INITTED)
2463 tp->tg3_flags2 &= ~TG3_FLG2_PHY_JUST_INITTED;
2464 else {
2465 if (workaround) {
2466 u32 val = serdes_cfg;
2467
2468 if (port_a)
2469 val |= 0xc010000;
2470 else
2471 val |= 0x4010000;
2472
2473 tw32_f(MAC_SERDES_CFG, val);
2474 }
2475
2476 tw32_f(SG_DIG_CTRL, 0x01388400);
2477 udelay(40);
2478
2479 /* Link parallel detection - link is up */
2480 /* only if we have PCS_SYNC and not */
2481 /* receiving config code words */
2482 mac_status = tr32(MAC_STATUS);
2483 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
2484 !(mac_status & MAC_STATUS_RCVD_CFG)) {
2485 tg3_setup_flow_control(tp, 0, 0);
2486 current_link_up = 1;
2487 }
2488 }
2489 }
2490 }
2491
2492out:
2493 return current_link_up;
2494}
2495
2496static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
2497{
2498 int current_link_up = 0;
2499
2500 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) {
2501 tp->tg3_flags &= ~TG3_FLAG_GOT_SERDES_FLOWCTL;
2502 goto out;
2503 }
2504
2505 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2506 u32 flags;
2507 int i;
2508
2509 if (fiber_autoneg(tp, &flags)) {
2510 u32 local_adv, remote_adv;
2511
2512 local_adv = ADVERTISE_PAUSE_CAP;
2513 remote_adv = 0;
2514 if (flags & MR_LP_ADV_SYM_PAUSE)
2515 remote_adv |= LPA_PAUSE_CAP;
2516 if (flags & MR_LP_ADV_ASYM_PAUSE)
2517 remote_adv |= LPA_PAUSE_ASYM;
2518
2519 tg3_setup_flow_control(tp, local_adv, remote_adv);
2520
2521 tp->tg3_flags |= TG3_FLAG_GOT_SERDES_FLOWCTL;
2522 current_link_up = 1;
2523 }
2524 for (i = 0; i < 30; i++) {
2525 udelay(20);
2526 tw32_f(MAC_STATUS,
2527 (MAC_STATUS_SYNC_CHANGED |
2528 MAC_STATUS_CFG_CHANGED));
2529 udelay(40);
2530 if ((tr32(MAC_STATUS) &
2531 (MAC_STATUS_SYNC_CHANGED |
2532 MAC_STATUS_CFG_CHANGED)) == 0)
2533 break;
2534 }
2535
2536 mac_status = tr32(MAC_STATUS);
2537 if (current_link_up == 0 &&
2538 (mac_status & MAC_STATUS_PCS_SYNCED) &&
2539 !(mac_status & MAC_STATUS_RCVD_CFG))
2540 current_link_up = 1;
2541 } else {
2542 /* Forcing 1000FD link up. */
2543 current_link_up = 1;
2544 tp->tg3_flags |= TG3_FLAG_GOT_SERDES_FLOWCTL;
2545
2546 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
2547 udelay(40);
2548 }
2549
2550out:
2551 return current_link_up;
2552}
2553
2554static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
2555{
2556 u32 orig_pause_cfg;
2557 u16 orig_active_speed;
2558 u8 orig_active_duplex;
2559 u32 mac_status;
2560 int current_link_up;
2561 int i;
2562
2563 orig_pause_cfg =
2564 (tp->tg3_flags & (TG3_FLAG_RX_PAUSE |
2565 TG3_FLAG_TX_PAUSE));
2566 orig_active_speed = tp->link_config.active_speed;
2567 orig_active_duplex = tp->link_config.active_duplex;
2568
2569 if (!(tp->tg3_flags2 & TG3_FLG2_HW_AUTONEG) &&
2570 netif_carrier_ok(tp->dev) &&
2571 (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE)) {
2572 mac_status = tr32(MAC_STATUS);
2573 mac_status &= (MAC_STATUS_PCS_SYNCED |
2574 MAC_STATUS_SIGNAL_DET |
2575 MAC_STATUS_CFG_CHANGED |
2576 MAC_STATUS_RCVD_CFG);
2577 if (mac_status == (MAC_STATUS_PCS_SYNCED |
2578 MAC_STATUS_SIGNAL_DET)) {
2579 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
2580 MAC_STATUS_CFG_CHANGED));
2581 return 0;
2582 }
2583 }
2584
2585 tw32_f(MAC_TX_AUTO_NEG, 0);
2586
2587 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
2588 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
2589 tw32_f(MAC_MODE, tp->mac_mode);
2590 udelay(40);
2591
2592 if (tp->phy_id == PHY_ID_BCM8002)
2593 tg3_init_bcm8002(tp);
2594
2595 /* Enable link change event even when serdes polling. */
2596 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2597 udelay(40);
2598
2599 current_link_up = 0;
2600 mac_status = tr32(MAC_STATUS);
2601
2602 if (tp->tg3_flags2 & TG3_FLG2_HW_AUTONEG)
2603 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
2604 else
2605 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
2606
2607 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
2608 tw32_f(MAC_MODE, tp->mac_mode);
2609 udelay(40);
2610
2611 tp->hw_status->status =
2612 (SD_STATUS_UPDATED |
2613 (tp->hw_status->status & ~SD_STATUS_LINK_CHG));
2614
2615 for (i = 0; i < 100; i++) {
2616 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
2617 MAC_STATUS_CFG_CHANGED));
2618 udelay(5);
2619 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
2620 MAC_STATUS_CFG_CHANGED)) == 0)
2621 break;
2622 }
2623
2624 mac_status = tr32(MAC_STATUS);
2625 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
2626 current_link_up = 0;
2627 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2628 tw32_f(MAC_MODE, (tp->mac_mode |
2629 MAC_MODE_SEND_CONFIGS));
2630 udelay(1);
2631 tw32_f(MAC_MODE, tp->mac_mode);
2632 }
2633 }
2634
2635 if (current_link_up == 1) {
2636 tp->link_config.active_speed = SPEED_1000;
2637 tp->link_config.active_duplex = DUPLEX_FULL;
2638 tw32(MAC_LED_CTRL, (tp->led_ctrl |
2639 LED_CTRL_LNKLED_OVERRIDE |
2640 LED_CTRL_1000MBPS_ON));
2641 } else {
2642 tp->link_config.active_speed = SPEED_INVALID;
2643 tp->link_config.active_duplex = DUPLEX_INVALID;
2644 tw32(MAC_LED_CTRL, (tp->led_ctrl |
2645 LED_CTRL_LNKLED_OVERRIDE |
2646 LED_CTRL_TRAFFIC_OVERRIDE));
2647 }
2648
2649 if (current_link_up != netif_carrier_ok(tp->dev)) {
2650 if (current_link_up)
2651 netif_carrier_on(tp->dev);
2652 else
2653 netif_carrier_off(tp->dev);
2654 tg3_link_report(tp);
2655 } else {
2656 u32 now_pause_cfg =
2657 tp->tg3_flags & (TG3_FLAG_RX_PAUSE |
2658 TG3_FLAG_TX_PAUSE);
2659 if (orig_pause_cfg != now_pause_cfg ||
2660 orig_active_speed != tp->link_config.active_speed ||
2661 orig_active_duplex != tp->link_config.active_duplex)
2662 tg3_link_report(tp);
2663 }
2664
2665 return 0;
2666}
2667
747e8f8b
MC
2668static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
2669{
2670 int current_link_up, err = 0;
2671 u32 bmsr, bmcr;
2672 u16 current_speed;
2673 u8 current_duplex;
2674
2675 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
2676 tw32_f(MAC_MODE, tp->mac_mode);
2677 udelay(40);
2678
2679 tw32(MAC_EVENT, 0);
2680
2681 tw32_f(MAC_STATUS,
2682 (MAC_STATUS_SYNC_CHANGED |
2683 MAC_STATUS_CFG_CHANGED |
2684 MAC_STATUS_MI_COMPLETION |
2685 MAC_STATUS_LNKSTATE_CHANGED));
2686 udelay(40);
2687
2688 if (force_reset)
2689 tg3_phy_reset(tp);
2690
2691 current_link_up = 0;
2692 current_speed = SPEED_INVALID;
2693 current_duplex = DUPLEX_INVALID;
2694
2695 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
2696 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
d4d2c558
MC
2697 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
2698 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
2699 bmsr |= BMSR_LSTATUS;
2700 else
2701 bmsr &= ~BMSR_LSTATUS;
2702 }
747e8f8b
MC
2703
2704 err |= tg3_readphy(tp, MII_BMCR, &bmcr);
2705
2706 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
2707 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) {
2708 /* do nothing, just check for link up at the end */
2709 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2710 u32 adv, new_adv;
2711
2712 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
2713 new_adv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
2714 ADVERTISE_1000XPAUSE |
2715 ADVERTISE_1000XPSE_ASYM |
2716 ADVERTISE_SLCT);
2717
2718 /* Always advertise symmetric PAUSE just like copper */
2719 new_adv |= ADVERTISE_1000XPAUSE;
2720
2721 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half)
2722 new_adv |= ADVERTISE_1000XHALF;
2723 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full)
2724 new_adv |= ADVERTISE_1000XFULL;
2725
2726 if ((new_adv != adv) || !(bmcr & BMCR_ANENABLE)) {
2727 tg3_writephy(tp, MII_ADVERTISE, new_adv);
2728 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
2729 tg3_writephy(tp, MII_BMCR, bmcr);
2730
2731 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2732 tp->tg3_flags2 |= TG3_FLG2_PHY_JUST_INITTED;
2733 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2734
2735 return err;
2736 }
2737 } else {
2738 u32 new_bmcr;
2739
2740 bmcr &= ~BMCR_SPEED1000;
2741 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
2742
2743 if (tp->link_config.duplex == DUPLEX_FULL)
2744 new_bmcr |= BMCR_FULLDPLX;
2745
2746 if (new_bmcr != bmcr) {
2747 /* BMCR_SPEED1000 is a reserved bit that needs
2748 * to be set on write.
2749 */
2750 new_bmcr |= BMCR_SPEED1000;
2751
2752 /* Force a linkdown */
2753 if (netif_carrier_ok(tp->dev)) {
2754 u32 adv;
2755
2756 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
2757 adv &= ~(ADVERTISE_1000XFULL |
2758 ADVERTISE_1000XHALF |
2759 ADVERTISE_SLCT);
2760 tg3_writephy(tp, MII_ADVERTISE, adv);
2761 tg3_writephy(tp, MII_BMCR, bmcr |
2762 BMCR_ANRESTART |
2763 BMCR_ANENABLE);
2764 udelay(10);
2765 netif_carrier_off(tp->dev);
2766 }
2767 tg3_writephy(tp, MII_BMCR, new_bmcr);
2768 bmcr = new_bmcr;
2769 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
2770 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
d4d2c558
MC
2771 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
2772 ASIC_REV_5714) {
2773 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
2774 bmsr |= BMSR_LSTATUS;
2775 else
2776 bmsr &= ~BMSR_LSTATUS;
2777 }
747e8f8b
MC
2778 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2779 }
2780 }
2781
2782 if (bmsr & BMSR_LSTATUS) {
2783 current_speed = SPEED_1000;
2784 current_link_up = 1;
2785 if (bmcr & BMCR_FULLDPLX)
2786 current_duplex = DUPLEX_FULL;
2787 else
2788 current_duplex = DUPLEX_HALF;
2789
2790 if (bmcr & BMCR_ANENABLE) {
2791 u32 local_adv, remote_adv, common;
2792
2793 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
2794 err |= tg3_readphy(tp, MII_LPA, &remote_adv);
2795 common = local_adv & remote_adv;
2796 if (common & (ADVERTISE_1000XHALF |
2797 ADVERTISE_1000XFULL)) {
2798 if (common & ADVERTISE_1000XFULL)
2799 current_duplex = DUPLEX_FULL;
2800 else
2801 current_duplex = DUPLEX_HALF;
2802
2803 tg3_setup_flow_control(tp, local_adv,
2804 remote_adv);
2805 }
2806 else
2807 current_link_up = 0;
2808 }
2809 }
2810
2811 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
2812 if (tp->link_config.active_duplex == DUPLEX_HALF)
2813 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
2814
2815 tw32_f(MAC_MODE, tp->mac_mode);
2816 udelay(40);
2817
2818 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2819
2820 tp->link_config.active_speed = current_speed;
2821 tp->link_config.active_duplex = current_duplex;
2822
2823 if (current_link_up != netif_carrier_ok(tp->dev)) {
2824 if (current_link_up)
2825 netif_carrier_on(tp->dev);
2826 else {
2827 netif_carrier_off(tp->dev);
2828 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2829 }
2830 tg3_link_report(tp);
2831 }
2832 return err;
2833}
2834
2835static void tg3_serdes_parallel_detect(struct tg3 *tp)
2836{
2837 if (tp->tg3_flags2 & TG3_FLG2_PHY_JUST_INITTED) {
2838 /* Give autoneg time to complete. */
2839 tp->tg3_flags2 &= ~TG3_FLG2_PHY_JUST_INITTED;
2840 return;
2841 }
2842 if (!netif_carrier_ok(tp->dev) &&
2843 (tp->link_config.autoneg == AUTONEG_ENABLE)) {
2844 u32 bmcr;
2845
2846 tg3_readphy(tp, MII_BMCR, &bmcr);
2847 if (bmcr & BMCR_ANENABLE) {
2848 u32 phy1, phy2;
2849
2850 /* Select shadow register 0x1f */
2851 tg3_writephy(tp, 0x1c, 0x7c00);
2852 tg3_readphy(tp, 0x1c, &phy1);
2853
2854 /* Select expansion interrupt status register */
2855 tg3_writephy(tp, 0x17, 0x0f01);
2856 tg3_readphy(tp, 0x15, &phy2);
2857 tg3_readphy(tp, 0x15, &phy2);
2858
2859 if ((phy1 & 0x10) && !(phy2 & 0x20)) {
2860 /* We have signal detect and not receiving
2861 * config code words, link is up by parallel
2862 * detection.
2863 */
2864
2865 bmcr &= ~BMCR_ANENABLE;
2866 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
2867 tg3_writephy(tp, MII_BMCR, bmcr);
2868 tp->tg3_flags2 |= TG3_FLG2_PARALLEL_DETECT;
2869 }
2870 }
2871 }
2872 else if (netif_carrier_ok(tp->dev) &&
2873 (tp->link_config.autoneg == AUTONEG_ENABLE) &&
2874 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) {
2875 u32 phy2;
2876
2877 /* Select expansion interrupt status register */
2878 tg3_writephy(tp, 0x17, 0x0f01);
2879 tg3_readphy(tp, 0x15, &phy2);
2880 if (phy2 & 0x20) {
2881 u32 bmcr;
2882
2883 /* Config code words received, turn on autoneg. */
2884 tg3_readphy(tp, MII_BMCR, &bmcr);
2885 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
2886
2887 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2888
2889 }
2890 }
2891}
2892
1da177e4
LT
2893static int tg3_setup_phy(struct tg3 *tp, int force_reset)
2894{
2895 int err;
2896
2897 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
2898 err = tg3_setup_fiber_phy(tp, force_reset);
747e8f8b
MC
2899 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
2900 err = tg3_setup_fiber_mii_phy(tp, force_reset);
1da177e4
LT
2901 } else {
2902 err = tg3_setup_copper_phy(tp, force_reset);
2903 }
2904
2905 if (tp->link_config.active_speed == SPEED_1000 &&
2906 tp->link_config.active_duplex == DUPLEX_HALF)
2907 tw32(MAC_TX_LENGTHS,
2908 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2909 (6 << TX_LENGTHS_IPG_SHIFT) |
2910 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
2911 else
2912 tw32(MAC_TX_LENGTHS,
2913 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
2914 (6 << TX_LENGTHS_IPG_SHIFT) |
2915 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
2916
2917 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
2918 if (netif_carrier_ok(tp->dev)) {
2919 tw32(HOSTCC_STAT_COAL_TICKS,
15f9850d 2920 tp->coal.stats_block_coalesce_usecs);
1da177e4
LT
2921 } else {
2922 tw32(HOSTCC_STAT_COAL_TICKS, 0);
2923 }
2924 }
2925
2926 return err;
2927}
2928
2929/* Tigon3 never reports partial packet sends. So we do not
2930 * need special logic to handle SKBs that have not had all
2931 * of their frags sent yet, like SunGEM does.
2932 */
2933static void tg3_tx(struct tg3 *tp)
2934{
2935 u32 hw_idx = tp->hw_status->idx[0].tx_consumer;
2936 u32 sw_idx = tp->tx_cons;
2937
2938 while (sw_idx != hw_idx) {
2939 struct tx_ring_info *ri = &tp->tx_buffers[sw_idx];
2940 struct sk_buff *skb = ri->skb;
2941 int i;
2942
2943 if (unlikely(skb == NULL))
2944 BUG();
2945
2946 pci_unmap_single(tp->pdev,
2947 pci_unmap_addr(ri, mapping),
2948 skb_headlen(skb),
2949 PCI_DMA_TODEVICE);
2950
2951 ri->skb = NULL;
2952
2953 sw_idx = NEXT_TX(sw_idx);
2954
2955 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2956 if (unlikely(sw_idx == hw_idx))
2957 BUG();
2958
2959 ri = &tp->tx_buffers[sw_idx];
2960 if (unlikely(ri->skb != NULL))
2961 BUG();
2962
2963 pci_unmap_page(tp->pdev,
2964 pci_unmap_addr(ri, mapping),
2965 skb_shinfo(skb)->frags[i].size,
2966 PCI_DMA_TODEVICE);
2967
2968 sw_idx = NEXT_TX(sw_idx);
2969 }
2970
f47c11ee 2971 dev_kfree_skb(skb);
1da177e4
LT
2972 }
2973
2974 tp->tx_cons = sw_idx;
2975
51b91468
MC
2976 if (unlikely(netif_queue_stopped(tp->dev))) {
2977 spin_lock(&tp->tx_lock);
2978 if (netif_queue_stopped(tp->dev) &&
2979 (TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH))
2980 netif_wake_queue(tp->dev);
2981 spin_unlock(&tp->tx_lock);
2982 }
1da177e4
LT
2983}
2984
2985/* Returns size of skb allocated or < 0 on error.
2986 *
2987 * We only need to fill in the address because the other members
2988 * of the RX descriptor are invariant, see tg3_init_rings.
2989 *
2990 * Note the purposeful assymetry of cpu vs. chip accesses. For
2991 * posting buffers we only dirty the first cache line of the RX
2992 * descriptor (containing the address). Whereas for the RX status
2993 * buffers the cpu only reads the last cacheline of the RX descriptor
2994 * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
2995 */
2996static int tg3_alloc_rx_skb(struct tg3 *tp, u32 opaque_key,
2997 int src_idx, u32 dest_idx_unmasked)
2998{
2999 struct tg3_rx_buffer_desc *desc;
3000 struct ring_info *map, *src_map;
3001 struct sk_buff *skb;
3002 dma_addr_t mapping;
3003 int skb_size, dest_idx;
3004
3005 src_map = NULL;
3006 switch (opaque_key) {
3007 case RXD_OPAQUE_RING_STD:
3008 dest_idx = dest_idx_unmasked % TG3_RX_RING_SIZE;
3009 desc = &tp->rx_std[dest_idx];
3010 map = &tp->rx_std_buffers[dest_idx];
3011 if (src_idx >= 0)
3012 src_map = &tp->rx_std_buffers[src_idx];
7e72aad4 3013 skb_size = tp->rx_pkt_buf_sz;
1da177e4
LT
3014 break;
3015
3016 case RXD_OPAQUE_RING_JUMBO:
3017 dest_idx = dest_idx_unmasked % TG3_RX_JUMBO_RING_SIZE;
3018 desc = &tp->rx_jumbo[dest_idx];
3019 map = &tp->rx_jumbo_buffers[dest_idx];
3020 if (src_idx >= 0)
3021 src_map = &tp->rx_jumbo_buffers[src_idx];
3022 skb_size = RX_JUMBO_PKT_BUF_SZ;
3023 break;
3024
3025 default:
3026 return -EINVAL;
3027 };
3028
3029 /* Do not overwrite any of the map or rp information
3030 * until we are sure we can commit to a new buffer.
3031 *
3032 * Callers depend upon this behavior and assume that
3033 * we leave everything unchanged if we fail.
3034 */
3035 skb = dev_alloc_skb(skb_size);
3036 if (skb == NULL)
3037 return -ENOMEM;
3038
3039 skb->dev = tp->dev;
3040 skb_reserve(skb, tp->rx_offset);
3041
3042 mapping = pci_map_single(tp->pdev, skb->data,
3043 skb_size - tp->rx_offset,
3044 PCI_DMA_FROMDEVICE);
3045
3046 map->skb = skb;
3047 pci_unmap_addr_set(map, mapping, mapping);
3048
3049 if (src_map != NULL)
3050 src_map->skb = NULL;
3051
3052 desc->addr_hi = ((u64)mapping >> 32);
3053 desc->addr_lo = ((u64)mapping & 0xffffffff);
3054
3055 return skb_size;
3056}
3057
3058/* We only need to move over in the address because the other
3059 * members of the RX descriptor are invariant. See notes above
3060 * tg3_alloc_rx_skb for full details.
3061 */
3062static void tg3_recycle_rx(struct tg3 *tp, u32 opaque_key,
3063 int src_idx, u32 dest_idx_unmasked)
3064{
3065 struct tg3_rx_buffer_desc *src_desc, *dest_desc;
3066 struct ring_info *src_map, *dest_map;
3067 int dest_idx;
3068
3069 switch (opaque_key) {
3070 case RXD_OPAQUE_RING_STD:
3071 dest_idx = dest_idx_unmasked % TG3_RX_RING_SIZE;
3072 dest_desc = &tp->rx_std[dest_idx];
3073 dest_map = &tp->rx_std_buffers[dest_idx];
3074 src_desc = &tp->rx_std[src_idx];
3075 src_map = &tp->rx_std_buffers[src_idx];
3076 break;
3077
3078 case RXD_OPAQUE_RING_JUMBO:
3079 dest_idx = dest_idx_unmasked % TG3_RX_JUMBO_RING_SIZE;
3080 dest_desc = &tp->rx_jumbo[dest_idx];
3081 dest_map = &tp->rx_jumbo_buffers[dest_idx];
3082 src_desc = &tp->rx_jumbo[src_idx];
3083 src_map = &tp->rx_jumbo_buffers[src_idx];
3084 break;
3085
3086 default:
3087 return;
3088 };
3089
3090 dest_map->skb = src_map->skb;
3091 pci_unmap_addr_set(dest_map, mapping,
3092 pci_unmap_addr(src_map, mapping));
3093 dest_desc->addr_hi = src_desc->addr_hi;
3094 dest_desc->addr_lo = src_desc->addr_lo;
3095
3096 src_map->skb = NULL;
3097}
3098
3099#if TG3_VLAN_TAG_USED
3100static int tg3_vlan_rx(struct tg3 *tp, struct sk_buff *skb, u16 vlan_tag)
3101{
3102 return vlan_hwaccel_receive_skb(skb, tp->vlgrp, vlan_tag);
3103}
3104#endif
3105
3106/* The RX ring scheme is composed of multiple rings which post fresh
3107 * buffers to the chip, and one special ring the chip uses to report
3108 * status back to the host.
3109 *
3110 * The special ring reports the status of received packets to the
3111 * host. The chip does not write into the original descriptor the
3112 * RX buffer was obtained from. The chip simply takes the original
3113 * descriptor as provided by the host, updates the status and length
3114 * field, then writes this into the next status ring entry.
3115 *
3116 * Each ring the host uses to post buffers to the chip is described
3117 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives,
3118 * it is first placed into the on-chip ram. When the packet's length
3119 * is known, it walks down the TG3_BDINFO entries to select the ring.
3120 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
3121 * which is within the range of the new packet's length is chosen.
3122 *
3123 * The "separate ring for rx status" scheme may sound queer, but it makes
3124 * sense from a cache coherency perspective. If only the host writes
3125 * to the buffer post rings, and only the chip writes to the rx status
3126 * rings, then cache lines never move beyond shared-modified state.
3127 * If both the host and chip were to write into the same ring, cache line
3128 * eviction could occur since both entities want it in an exclusive state.
3129 */
3130static int tg3_rx(struct tg3 *tp, int budget)
3131{
3132 u32 work_mask;
483ba50b
MC
3133 u32 sw_idx = tp->rx_rcb_ptr;
3134 u16 hw_idx;
1da177e4
LT
3135 int received;
3136
3137 hw_idx = tp->hw_status->idx[0].rx_producer;
3138 /*
3139 * We need to order the read of hw_idx and the read of
3140 * the opaque cookie.
3141 */
3142 rmb();
1da177e4
LT
3143 work_mask = 0;
3144 received = 0;
3145 while (sw_idx != hw_idx && budget > 0) {
3146 struct tg3_rx_buffer_desc *desc = &tp->rx_rcb[sw_idx];
3147 unsigned int len;
3148 struct sk_buff *skb;
3149 dma_addr_t dma_addr;
3150 u32 opaque_key, desc_idx, *post_ptr;
3151
3152 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
3153 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
3154 if (opaque_key == RXD_OPAQUE_RING_STD) {
3155 dma_addr = pci_unmap_addr(&tp->rx_std_buffers[desc_idx],
3156 mapping);
3157 skb = tp->rx_std_buffers[desc_idx].skb;
3158 post_ptr = &tp->rx_std_ptr;
3159 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
3160 dma_addr = pci_unmap_addr(&tp->rx_jumbo_buffers[desc_idx],
3161 mapping);
3162 skb = tp->rx_jumbo_buffers[desc_idx].skb;
3163 post_ptr = &tp->rx_jumbo_ptr;
3164 }
3165 else {
3166 goto next_pkt_nopost;
3167 }
3168
3169 work_mask |= opaque_key;
3170
3171 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
3172 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
3173 drop_it:
3174 tg3_recycle_rx(tp, opaque_key,
3175 desc_idx, *post_ptr);
3176 drop_it_no_recycle:
3177 /* Other statistics kept track of by card. */
3178 tp->net_stats.rx_dropped++;
3179 goto next_pkt;
3180 }
3181
3182 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4; /* omit crc */
3183
3184 if (len > RX_COPY_THRESHOLD
3185 && tp->rx_offset == 2
3186 /* rx_offset != 2 iff this is a 5701 card running
3187 * in PCI-X mode [see tg3_get_invariants()] */
3188 ) {
3189 int skb_size;
3190
3191 skb_size = tg3_alloc_rx_skb(tp, opaque_key,
3192 desc_idx, *post_ptr);
3193 if (skb_size < 0)
3194 goto drop_it;
3195
3196 pci_unmap_single(tp->pdev, dma_addr,
3197 skb_size - tp->rx_offset,
3198 PCI_DMA_FROMDEVICE);
3199
3200 skb_put(skb, len);
3201 } else {
3202 struct sk_buff *copy_skb;
3203
3204 tg3_recycle_rx(tp, opaque_key,
3205 desc_idx, *post_ptr);
3206
3207 copy_skb = dev_alloc_skb(len + 2);
3208 if (copy_skb == NULL)
3209 goto drop_it_no_recycle;
3210
3211 copy_skb->dev = tp->dev;
3212 skb_reserve(copy_skb, 2);
3213 skb_put(copy_skb, len);
3214 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
3215 memcpy(copy_skb->data, skb->data, len);
3216 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
3217
3218 /* We'll reuse the original ring buffer. */
3219 skb = copy_skb;
3220 }
3221
3222 if ((tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) &&
3223 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
3224 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
3225 >> RXD_TCPCSUM_SHIFT) == 0xffff))
3226 skb->ip_summed = CHECKSUM_UNNECESSARY;
3227 else
3228 skb->ip_summed = CHECKSUM_NONE;
3229
3230 skb->protocol = eth_type_trans(skb, tp->dev);
3231#if TG3_VLAN_TAG_USED
3232 if (tp->vlgrp != NULL &&
3233 desc->type_flags & RXD_FLAG_VLAN) {
3234 tg3_vlan_rx(tp, skb,
3235 desc->err_vlan & RXD_VLAN_MASK);
3236 } else
3237#endif
3238 netif_receive_skb(skb);
3239
3240 tp->dev->last_rx = jiffies;
3241 received++;
3242 budget--;
3243
3244next_pkt:
3245 (*post_ptr)++;
3246next_pkt_nopost:
483ba50b
MC
3247 sw_idx++;
3248 sw_idx %= TG3_RX_RCB_RING_SIZE(tp);
52f6d697
MC
3249
3250 /* Refresh hw_idx to see if there is new work */
3251 if (sw_idx == hw_idx) {
3252 hw_idx = tp->hw_status->idx[0].rx_producer;
3253 rmb();
3254 }
1da177e4
LT
3255 }
3256
3257 /* ACK the status ring. */
483ba50b
MC
3258 tp->rx_rcb_ptr = sw_idx;
3259 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, sw_idx);
1da177e4
LT
3260
3261 /* Refill RX ring(s). */
3262 if (work_mask & RXD_OPAQUE_RING_STD) {
3263 sw_idx = tp->rx_std_ptr % TG3_RX_RING_SIZE;
3264 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW,
3265 sw_idx);
3266 }
3267 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
3268 sw_idx = tp->rx_jumbo_ptr % TG3_RX_JUMBO_RING_SIZE;
3269 tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW,
3270 sw_idx);
3271 }
3272 mmiowb();
3273
3274 return received;
3275}
3276
3277static int tg3_poll(struct net_device *netdev, int *budget)
3278{
3279 struct tg3 *tp = netdev_priv(netdev);
3280 struct tg3_hw_status *sblk = tp->hw_status;
1da177e4
LT
3281 int done;
3282
1da177e4
LT
3283 /* handle link change and other phy events */
3284 if (!(tp->tg3_flags &
3285 (TG3_FLAG_USE_LINKCHG_REG |
3286 TG3_FLAG_POLL_SERDES))) {
3287 if (sblk->status & SD_STATUS_LINK_CHG) {
3288 sblk->status = SD_STATUS_UPDATED |
3289 (sblk->status & ~SD_STATUS_LINK_CHG);
f47c11ee 3290 spin_lock(&tp->lock);
1da177e4 3291 tg3_setup_phy(tp, 0);
f47c11ee 3292 spin_unlock(&tp->lock);
1da177e4
LT
3293 }
3294 }
3295
3296 /* run TX completion thread */
3297 if (sblk->idx[0].tx_consumer != tp->tx_cons) {
1da177e4 3298 tg3_tx(tp);
1da177e4
LT
3299 }
3300
1da177e4
LT
3301 /* run RX thread, within the bounds set by NAPI.
3302 * All RX "locking" is done by ensuring outside
3303 * code synchronizes with dev->poll()
3304 */
1da177e4
LT
3305 if (sblk->idx[0].rx_producer != tp->rx_rcb_ptr) {
3306 int orig_budget = *budget;
3307 int work_done;
3308
3309 if (orig_budget > netdev->quota)
3310 orig_budget = netdev->quota;
3311
3312 work_done = tg3_rx(tp, orig_budget);
3313
3314 *budget -= work_done;
3315 netdev->quota -= work_done;
1da177e4
LT
3316 }
3317
38f3843e 3318 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) {
f7383c22 3319 tp->last_tag = sblk->status_tag;
38f3843e
MC
3320 rmb();
3321 } else
3322 sblk->status &= ~SD_STATUS_UPDATED;
f7383c22 3323
1da177e4 3324 /* if no more work, tell net stack and NIC we're done */
f7383c22 3325 done = !tg3_has_work(tp);
1da177e4 3326 if (done) {
f47c11ee 3327 netif_rx_complete(netdev);
1da177e4 3328 tg3_restart_ints(tp);
1da177e4
LT
3329 }
3330
3331 return (done ? 0 : 1);
3332}
3333
f47c11ee
DM
3334static void tg3_irq_quiesce(struct tg3 *tp)
3335{
3336 BUG_ON(tp->irq_sync);
3337
3338 tp->irq_sync = 1;
3339 smp_mb();
3340
3341 synchronize_irq(tp->pdev->irq);
3342}
3343
3344static inline int tg3_irq_sync(struct tg3 *tp)
3345{
3346 return tp->irq_sync;
3347}
3348
3349/* Fully shutdown all tg3 driver activity elsewhere in the system.
3350 * If irq_sync is non-zero, then the IRQ handler must be synchronized
3351 * with as well. Most of the time, this is not necessary except when
3352 * shutting down the device.
3353 */
3354static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
3355{
3356 if (irq_sync)
3357 tg3_irq_quiesce(tp);
3358 spin_lock_bh(&tp->lock);
3359 spin_lock(&tp->tx_lock);
3360}
3361
3362static inline void tg3_full_unlock(struct tg3 *tp)
3363{
3364 spin_unlock(&tp->tx_lock);
3365 spin_unlock_bh(&tp->lock);
3366}
3367
88b06bc2
MC
3368/* MSI ISR - No need to check for interrupt sharing and no need to
3369 * flush status block and interrupt mailbox. PCI ordering rules
3370 * guarantee that MSI will arrive after the status block.
3371 */
3372static irqreturn_t tg3_msi(int irq, void *dev_id, struct pt_regs *regs)
3373{
3374 struct net_device *dev = dev_id;
3375 struct tg3 *tp = netdev_priv(dev);
88b06bc2 3376
61487480
MC
3377 prefetch(tp->hw_status);
3378 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
88b06bc2 3379 /*
fac9b83e 3380 * Writing any value to intr-mbox-0 clears PCI INTA# and
88b06bc2 3381 * chip-internal interrupt pending events.
fac9b83e 3382 * Writing non-zero to intr-mbox-0 additional tells the
88b06bc2
MC
3383 * NIC to stop sending us irqs, engaging "in-intr-handler"
3384 * event coalescing.
3385 */
3386 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
61487480 3387 if (likely(!tg3_irq_sync(tp)))
88b06bc2 3388 netif_rx_schedule(dev); /* schedule NAPI poll */
61487480 3389
88b06bc2
MC
3390 return IRQ_RETVAL(1);
3391}
3392
1da177e4
LT
3393static irqreturn_t tg3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
3394{
3395 struct net_device *dev = dev_id;
3396 struct tg3 *tp = netdev_priv(dev);
3397 struct tg3_hw_status *sblk = tp->hw_status;
1da177e4
LT
3398 unsigned int handled = 1;
3399
1da177e4
LT
3400 /* In INTx mode, it is possible for the interrupt to arrive at
3401 * the CPU before the status block posted prior to the interrupt.
3402 * Reading the PCI State register will confirm whether the
3403 * interrupt is ours and will flush the status block.
3404 */
3405 if ((sblk->status & SD_STATUS_UPDATED) ||
3406 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3407 /*
fac9b83e 3408 * Writing any value to intr-mbox-0 clears PCI INTA# and
1da177e4 3409 * chip-internal interrupt pending events.
fac9b83e 3410 * Writing non-zero to intr-mbox-0 additional tells the
1da177e4
LT
3411 * NIC to stop sending us irqs, engaging "in-intr-handler"
3412 * event coalescing.
3413 */
3414 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3415 0x00000001);
f47c11ee
DM
3416 if (tg3_irq_sync(tp))
3417 goto out;
fac9b83e 3418 sblk->status &= ~SD_STATUS_UPDATED;
61487480
MC
3419 if (likely(tg3_has_work(tp))) {
3420 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
fac9b83e 3421 netif_rx_schedule(dev); /* schedule NAPI poll */
61487480 3422 } else {
fac9b83e
DM
3423 /* No work, shared interrupt perhaps? re-enable
3424 * interrupts, and flush that PCI write
3425 */
09ee929c 3426 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
fac9b83e 3427 0x00000000);
fac9b83e
DM
3428 }
3429 } else { /* shared interrupt */
3430 handled = 0;
3431 }
f47c11ee 3432out:
fac9b83e
DM
3433 return IRQ_RETVAL(handled);
3434}
3435
3436static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id, struct pt_regs *regs)
3437{
3438 struct net_device *dev = dev_id;
3439 struct tg3 *tp = netdev_priv(dev);
3440 struct tg3_hw_status *sblk = tp->hw_status;
fac9b83e
DM
3441 unsigned int handled = 1;
3442
fac9b83e
DM
3443 /* In INTx mode, it is possible for the interrupt to arrive at
3444 * the CPU before the status block posted prior to the interrupt.
3445 * Reading the PCI State register will confirm whether the
3446 * interrupt is ours and will flush the status block.
3447 */
38f3843e 3448 if ((sblk->status_tag != tp->last_tag) ||
fac9b83e 3449 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
1da177e4 3450 /*
fac9b83e
DM
3451 * writing any value to intr-mbox-0 clears PCI INTA# and
3452 * chip-internal interrupt pending events.
3453 * writing non-zero to intr-mbox-0 additional tells the
3454 * NIC to stop sending us irqs, engaging "in-intr-handler"
3455 * event coalescing.
1da177e4 3456 */
fac9b83e
DM
3457 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3458 0x00000001);
f47c11ee
DM
3459 if (tg3_irq_sync(tp))
3460 goto out;
38f3843e 3461 if (netif_rx_schedule_prep(dev)) {
61487480 3462 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
38f3843e
MC
3463 /* Update last_tag to mark that this status has been
3464 * seen. Because interrupt may be shared, we may be
3465 * racing with tg3_poll(), so only update last_tag
3466 * if tg3_poll() is not scheduled.
1da177e4 3467 */
38f3843e
MC
3468 tp->last_tag = sblk->status_tag;
3469 __netif_rx_schedule(dev);
1da177e4
LT
3470 }
3471 } else { /* shared interrupt */
3472 handled = 0;
3473 }
f47c11ee 3474out:
1da177e4
LT
3475 return IRQ_RETVAL(handled);
3476}
3477
7938109f
MC
3478/* ISR for interrupt test */
3479static irqreturn_t tg3_test_isr(int irq, void *dev_id,
3480 struct pt_regs *regs)
3481{
3482 struct net_device *dev = dev_id;
3483 struct tg3 *tp = netdev_priv(dev);
3484 struct tg3_hw_status *sblk = tp->hw_status;
3485
f9804ddb
MC
3486 if ((sblk->status & SD_STATUS_UPDATED) ||
3487 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
7938109f
MC
3488 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3489 0x00000001);
3490 return IRQ_RETVAL(1);
3491 }
3492 return IRQ_RETVAL(0);
3493}
3494
1da177e4 3495static int tg3_init_hw(struct tg3 *);
944d980e 3496static int tg3_halt(struct tg3 *, int, int);
1da177e4
LT
3497
3498#ifdef CONFIG_NET_POLL_CONTROLLER
3499static void tg3_poll_controller(struct net_device *dev)
3500{
88b06bc2
MC
3501 struct tg3 *tp = netdev_priv(dev);
3502
3503 tg3_interrupt(tp->pdev->irq, dev, NULL);
1da177e4
LT
3504}
3505#endif
3506
3507static void tg3_reset_task(void *_data)
3508{
3509 struct tg3 *tp = _data;
3510 unsigned int restart_timer;
3511
7faa006f
MC
3512 tg3_full_lock(tp, 0);
3513 tp->tg3_flags |= TG3_FLAG_IN_RESET_TASK;
3514
3515 if (!netif_running(tp->dev)) {
3516 tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK;
3517 tg3_full_unlock(tp);
3518 return;
3519 }
3520
3521 tg3_full_unlock(tp);
3522
1da177e4
LT
3523 tg3_netif_stop(tp);
3524
f47c11ee 3525 tg3_full_lock(tp, 1);
1da177e4
LT
3526
3527 restart_timer = tp->tg3_flags2 & TG3_FLG2_RESTART_TIMER;
3528 tp->tg3_flags2 &= ~TG3_FLG2_RESTART_TIMER;
3529
944d980e 3530 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
1da177e4
LT
3531 tg3_init_hw(tp);
3532
3533 tg3_netif_start(tp);
3534
1da177e4
LT
3535 if (restart_timer)
3536 mod_timer(&tp->timer, jiffies + 1);
7faa006f
MC
3537
3538 tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK;
3539
3540 tg3_full_unlock(tp);
1da177e4
LT
3541}
3542
3543static void tg3_tx_timeout(struct net_device *dev)
3544{
3545 struct tg3 *tp = netdev_priv(dev);
3546
3547 printk(KERN_ERR PFX "%s: transmit timed out, resetting\n",
3548 dev->name);
3549
3550 schedule_work(&tp->reset_task);
3551}
3552
c58ec932
MC
3553/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
3554static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
3555{
3556 u32 base = (u32) mapping & 0xffffffff;
3557
3558 return ((base > 0xffffdcc0) &&
3559 (base + len + 8 < base));
3560}
3561
72f2afb8
MC
3562/* Test for DMA addresses > 40-bit */
3563static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
3564 int len)
3565{
3566#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
3567 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
3568 return (((u64) mapping + len) > DMA_40BIT_MASK);
3569 return 0;
3570#else
3571 return 0;
3572#endif
3573}
3574
1da177e4
LT
3575static void tg3_set_txd(struct tg3 *, int, dma_addr_t, int, u32, u32);
3576
72f2afb8
MC
3577/* Workaround 4GB and 40-bit hardware DMA bugs. */
3578static int tigon3_dma_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb,
c58ec932
MC
3579 u32 last_plus_one, u32 *start,
3580 u32 base_flags, u32 mss)
1da177e4
LT
3581{
3582 struct sk_buff *new_skb = skb_copy(skb, GFP_ATOMIC);
c58ec932 3583 dma_addr_t new_addr = 0;
1da177e4 3584 u32 entry = *start;
c58ec932 3585 int i, ret = 0;
1da177e4
LT
3586
3587 if (!new_skb) {
c58ec932
MC
3588 ret = -1;
3589 } else {
3590 /* New SKB is guaranteed to be linear. */
3591 entry = *start;
3592 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
3593 PCI_DMA_TODEVICE);
3594 /* Make sure new skb does not cross any 4G boundaries.
3595 * Drop the packet if it does.
3596 */
3597 if (tg3_4g_overflow_test(new_addr, new_skb->len)) {
3598 ret = -1;
3599 dev_kfree_skb(new_skb);
3600 new_skb = NULL;
3601 } else {
3602 tg3_set_txd(tp, entry, new_addr, new_skb->len,
3603 base_flags, 1 | (mss << 1));
3604 *start = NEXT_TX(entry);
3605 }
1da177e4
LT
3606 }
3607
1da177e4
LT
3608 /* Now clean up the sw ring entries. */
3609 i = 0;
3610 while (entry != last_plus_one) {
3611 int len;
3612
3613 if (i == 0)
3614 len = skb_headlen(skb);
3615 else
3616 len = skb_shinfo(skb)->frags[i-1].size;
3617 pci_unmap_single(tp->pdev,
3618 pci_unmap_addr(&tp->tx_buffers[entry], mapping),
3619 len, PCI_DMA_TODEVICE);
3620 if (i == 0) {
3621 tp->tx_buffers[entry].skb = new_skb;
3622 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, new_addr);
3623 } else {
3624 tp->tx_buffers[entry].skb = NULL;
3625 }
3626 entry = NEXT_TX(entry);
3627 i++;
3628 }
3629
3630 dev_kfree_skb(skb);
3631
c58ec932 3632 return ret;
1da177e4
LT
3633}
3634
3635static void tg3_set_txd(struct tg3 *tp, int entry,
3636 dma_addr_t mapping, int len, u32 flags,
3637 u32 mss_and_is_end)
3638{
3639 struct tg3_tx_buffer_desc *txd = &tp->tx_ring[entry];
3640 int is_end = (mss_and_is_end & 0x1);
3641 u32 mss = (mss_and_is_end >> 1);
3642 u32 vlan_tag = 0;
3643
3644 if (is_end)
3645 flags |= TXD_FLAG_END;
3646 if (flags & TXD_FLAG_VLAN) {
3647 vlan_tag = flags >> 16;
3648 flags &= 0xffff;
3649 }
3650 vlan_tag |= (mss << TXD_MSS_SHIFT);
3651
3652 txd->addr_hi = ((u64) mapping >> 32);
3653 txd->addr_lo = ((u64) mapping & 0xffffffff);
3654 txd->len_flags = (len << TXD_LEN_SHIFT) | flags;
3655 txd->vlan_tag = vlan_tag << TXD_VLAN_TAG_SHIFT;
3656}
3657
5a6f3074
MC
3658/* hard_start_xmit for devices that don't have any bugs and
3659 * support TG3_FLG2_HW_TSO_2 only.
3660 */
1da177e4 3661static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
5a6f3074
MC
3662{
3663 struct tg3 *tp = netdev_priv(dev);
3664 dma_addr_t mapping;
3665 u32 len, entry, base_flags, mss;
3666
3667 len = skb_headlen(skb);
3668
3669 /* No BH disabling for tx_lock here. We are running in BH disabled
3670 * context and TX reclaim runs via tp->poll inside of a software
3671 * interrupt. Furthermore, IRQ processing runs lockless so we have
3672 * no IRQ context deadlocks to worry about either. Rejoice!
3673 */
3674 if (!spin_trylock(&tp->tx_lock))
3675 return NETDEV_TX_LOCKED;
3676
3677 if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
3678 if (!netif_queue_stopped(dev)) {
3679 netif_stop_queue(dev);
3680
3681 /* This is a hard error, log it. */
3682 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when "
3683 "queue awake!\n", dev->name);
3684 }
3685 spin_unlock(&tp->tx_lock);
3686 return NETDEV_TX_BUSY;
3687 }
3688
3689 entry = tp->tx_prod;
3690 base_flags = 0;
3691#if TG3_TSO_SUPPORT != 0
3692 mss = 0;
3693 if (skb->len > (tp->dev->mtu + ETH_HLEN) &&
3694 (mss = skb_shinfo(skb)->tso_size) != 0) {
3695 int tcp_opt_len, ip_tcp_len;
3696
3697 if (skb_header_cloned(skb) &&
3698 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
3699 dev_kfree_skb(skb);
3700 goto out_unlock;
3701 }
3702
3703 tcp_opt_len = ((skb->h.th->doff - 5) * 4);
3704 ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr);
3705
3706 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
3707 TXD_FLAG_CPU_POST_DMA);
3708
3709 skb->nh.iph->check = 0;
3710 skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len);
3711
3712 skb->h.th->check = 0;
3713
3714 mss |= (ip_tcp_len + tcp_opt_len) << 9;
3715 }
3716 else if (skb->ip_summed == CHECKSUM_HW)
3717 base_flags |= TXD_FLAG_TCPUDP_CSUM;
3718#else
3719 mss = 0;
3720 if (skb->ip_summed == CHECKSUM_HW)
3721 base_flags |= TXD_FLAG_TCPUDP_CSUM;
3722#endif
3723#if TG3_VLAN_TAG_USED
3724 if (tp->vlgrp != NULL && vlan_tx_tag_present(skb))
3725 base_flags |= (TXD_FLAG_VLAN |
3726 (vlan_tx_tag_get(skb) << 16));
3727#endif
3728
3729 /* Queue skb data, a.k.a. the main skb fragment. */
3730 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
3731
3732 tp->tx_buffers[entry].skb = skb;
3733 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3734
3735 tg3_set_txd(tp, entry, mapping, len, base_flags,
3736 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
3737
3738 entry = NEXT_TX(entry);
3739
3740 /* Now loop through additional data fragments, and queue them. */
3741 if (skb_shinfo(skb)->nr_frags > 0) {
3742 unsigned int i, last;
3743
3744 last = skb_shinfo(skb)->nr_frags - 1;
3745 for (i = 0; i <= last; i++) {
3746 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
3747
3748 len = frag->size;
3749 mapping = pci_map_page(tp->pdev,
3750 frag->page,
3751 frag->page_offset,
3752 len, PCI_DMA_TODEVICE);
3753
3754 tp->tx_buffers[entry].skb = NULL;
3755 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3756
3757 tg3_set_txd(tp, entry, mapping, len,
3758 base_flags, (i == last) | (mss << 1));
3759
3760 entry = NEXT_TX(entry);
3761 }
3762 }
3763
3764 /* Packets are ready, update Tx producer idx local and on card. */
3765 tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
3766
3767 tp->tx_prod = entry;
3768 if (TX_BUFFS_AVAIL(tp) <= (MAX_SKB_FRAGS + 1)) {
3769 netif_stop_queue(dev);
3770 if (TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH)
3771 netif_wake_queue(tp->dev);
3772 }
3773
3774out_unlock:
3775 mmiowb();
3776 spin_unlock(&tp->tx_lock);
3777
3778 dev->trans_start = jiffies;
3779
3780 return NETDEV_TX_OK;
3781}
3782
3783/* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
3784 * support TG3_FLG2_HW_TSO_1 or firmware TSO only.
3785 */
3786static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
1da177e4
LT
3787{
3788 struct tg3 *tp = netdev_priv(dev);
3789 dma_addr_t mapping;
1da177e4
LT
3790 u32 len, entry, base_flags, mss;
3791 int would_hit_hwbug;
1da177e4
LT
3792
3793 len = skb_headlen(skb);
3794
3795 /* No BH disabling for tx_lock here. We are running in BH disabled
3796 * context and TX reclaim runs via tp->poll inside of a software
f47c11ee
DM
3797 * interrupt. Furthermore, IRQ processing runs lockless so we have
3798 * no IRQ context deadlocks to worry about either. Rejoice!
1da177e4 3799 */
f47c11ee 3800 if (!spin_trylock(&tp->tx_lock))
1da177e4 3801 return NETDEV_TX_LOCKED;
1da177e4 3802
1da177e4 3803 if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
1f064a87
SH
3804 if (!netif_queue_stopped(dev)) {
3805 netif_stop_queue(dev);
3806
3807 /* This is a hard error, log it. */
3808 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when "
3809 "queue awake!\n", dev->name);
3810 }
f47c11ee 3811 spin_unlock(&tp->tx_lock);
1da177e4
LT
3812 return NETDEV_TX_BUSY;
3813 }
3814
3815 entry = tp->tx_prod;
3816 base_flags = 0;
3817 if (skb->ip_summed == CHECKSUM_HW)
3818 base_flags |= TXD_FLAG_TCPUDP_CSUM;
3819#if TG3_TSO_SUPPORT != 0
3820 mss = 0;
3821 if (skb->len > (tp->dev->mtu + ETH_HLEN) &&
3822 (mss = skb_shinfo(skb)->tso_size) != 0) {
3823 int tcp_opt_len, ip_tcp_len;
3824
3825 if (skb_header_cloned(skb) &&
3826 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
3827 dev_kfree_skb(skb);
3828 goto out_unlock;
3829 }
3830
3831 tcp_opt_len = ((skb->h.th->doff - 5) * 4);
3832 ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr);
3833
3834 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
3835 TXD_FLAG_CPU_POST_DMA);
3836
3837 skb->nh.iph->check = 0;
fd30333d 3838 skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len);
1da177e4
LT
3839 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
3840 skb->h.th->check = 0;
3841 base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
3842 }
3843 else {
3844 skb->h.th->check =
3845 ~csum_tcpudp_magic(skb->nh.iph->saddr,
3846 skb->nh.iph->daddr,
3847 0, IPPROTO_TCP, 0);
3848 }
3849
3850 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO) ||
3851 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) {
3852 if (tcp_opt_len || skb->nh.iph->ihl > 5) {
3853 int tsflags;
3854
3855 tsflags = ((skb->nh.iph->ihl - 5) +
3856 (tcp_opt_len >> 2));
3857 mss |= (tsflags << 11);
3858 }
3859 } else {
3860 if (tcp_opt_len || skb->nh.iph->ihl > 5) {
3861 int tsflags;
3862
3863 tsflags = ((skb->nh.iph->ihl - 5) +
3864 (tcp_opt_len >> 2));
3865 base_flags |= tsflags << 12;
3866 }
3867 }
3868 }
3869#else
3870 mss = 0;
3871#endif
3872#if TG3_VLAN_TAG_USED
3873 if (tp->vlgrp != NULL && vlan_tx_tag_present(skb))
3874 base_flags |= (TXD_FLAG_VLAN |
3875 (vlan_tx_tag_get(skb) << 16));
3876#endif
3877
3878 /* Queue skb data, a.k.a. the main skb fragment. */
3879 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
3880
3881 tp->tx_buffers[entry].skb = skb;
3882 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3883
3884 would_hit_hwbug = 0;
3885
3886 if (tg3_4g_overflow_test(mapping, len))
c58ec932 3887 would_hit_hwbug = 1;
1da177e4
LT
3888
3889 tg3_set_txd(tp, entry, mapping, len, base_flags,
3890 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
3891
3892 entry = NEXT_TX(entry);
3893
3894 /* Now loop through additional data fragments, and queue them. */
3895 if (skb_shinfo(skb)->nr_frags > 0) {
3896 unsigned int i, last;
3897
3898 last = skb_shinfo(skb)->nr_frags - 1;
3899 for (i = 0; i <= last; i++) {
3900 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
3901
3902 len = frag->size;
3903 mapping = pci_map_page(tp->pdev,
3904 frag->page,
3905 frag->page_offset,
3906 len, PCI_DMA_TODEVICE);
3907
3908 tp->tx_buffers[entry].skb = NULL;
3909 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3910
c58ec932
MC
3911 if (tg3_4g_overflow_test(mapping, len))
3912 would_hit_hwbug = 1;
1da177e4 3913
72f2afb8
MC
3914 if (tg3_40bit_overflow_test(tp, mapping, len))
3915 would_hit_hwbug = 1;
3916
1da177e4
LT
3917 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
3918 tg3_set_txd(tp, entry, mapping, len,
3919 base_flags, (i == last)|(mss << 1));
3920 else
3921 tg3_set_txd(tp, entry, mapping, len,
3922 base_flags, (i == last));
3923
3924 entry = NEXT_TX(entry);
3925 }
3926 }
3927
3928 if (would_hit_hwbug) {
3929 u32 last_plus_one = entry;
3930 u32 start;
1da177e4 3931
c58ec932
MC
3932 start = entry - 1 - skb_shinfo(skb)->nr_frags;
3933 start &= (TG3_TX_RING_SIZE - 1);
1da177e4
LT
3934
3935 /* If the workaround fails due to memory/mapping
3936 * failure, silently drop this packet.
3937 */
72f2afb8 3938 if (tigon3_dma_hwbug_workaround(tp, skb, last_plus_one,
c58ec932 3939 &start, base_flags, mss))
1da177e4
LT
3940 goto out_unlock;
3941
3942 entry = start;
3943 }
3944
3945 /* Packets are ready, update Tx producer idx local and on card. */
3946 tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
3947
3948 tp->tx_prod = entry;
51b91468 3949 if (TX_BUFFS_AVAIL(tp) <= (MAX_SKB_FRAGS + 1)) {
1da177e4 3950 netif_stop_queue(dev);
51b91468
MC
3951 if (TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH)
3952 netif_wake_queue(tp->dev);
3953 }
1da177e4
LT
3954
3955out_unlock:
3956 mmiowb();
f47c11ee 3957 spin_unlock(&tp->tx_lock);
1da177e4
LT
3958
3959 dev->trans_start = jiffies;
3960
3961 return NETDEV_TX_OK;
3962}
3963
3964static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
3965 int new_mtu)
3966{
3967 dev->mtu = new_mtu;
3968
ef7f5ec0 3969 if (new_mtu > ETH_DATA_LEN) {
a4e2b347 3970 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
ef7f5ec0
MC
3971 tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE;
3972 ethtool_op_set_tso(dev, 0);
3973 }
3974 else
3975 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
3976 } else {
a4e2b347 3977 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
ef7f5ec0 3978 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
0f893dc6 3979 tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE;
ef7f5ec0 3980 }
1da177e4
LT
3981}
3982
3983static int tg3_change_mtu(struct net_device *dev, int new_mtu)
3984{
3985 struct tg3 *tp = netdev_priv(dev);
3986
3987 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
3988 return -EINVAL;
3989
3990 if (!netif_running(dev)) {
3991 /* We'll just catch it later when the
3992 * device is up'd.
3993 */
3994 tg3_set_mtu(dev, tp, new_mtu);
3995 return 0;
3996 }
3997
3998 tg3_netif_stop(tp);
f47c11ee
DM
3999
4000 tg3_full_lock(tp, 1);
1da177e4 4001
944d980e 4002 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4
LT
4003
4004 tg3_set_mtu(dev, tp, new_mtu);
4005
4006 tg3_init_hw(tp);
4007
4008 tg3_netif_start(tp);
4009
f47c11ee 4010 tg3_full_unlock(tp);
1da177e4
LT
4011
4012 return 0;
4013}
4014
4015/* Free up pending packets in all rx/tx rings.
4016 *
4017 * The chip has been shut down and the driver detached from
4018 * the networking, so no interrupts or new tx packets will
4019 * end up in the driver. tp->{tx,}lock is not held and we are not
4020 * in an interrupt context and thus may sleep.
4021 */
4022static void tg3_free_rings(struct tg3 *tp)
4023{
4024 struct ring_info *rxp;
4025 int i;
4026
4027 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4028 rxp = &tp->rx_std_buffers[i];
4029
4030 if (rxp->skb == NULL)
4031 continue;
4032 pci_unmap_single(tp->pdev,
4033 pci_unmap_addr(rxp, mapping),
7e72aad4 4034 tp->rx_pkt_buf_sz - tp->rx_offset,
1da177e4
LT
4035 PCI_DMA_FROMDEVICE);
4036 dev_kfree_skb_any(rxp->skb);
4037 rxp->skb = NULL;
4038 }
4039
4040 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4041 rxp = &tp->rx_jumbo_buffers[i];
4042
4043 if (rxp->skb == NULL)
4044 continue;
4045 pci_unmap_single(tp->pdev,
4046 pci_unmap_addr(rxp, mapping),
4047 RX_JUMBO_PKT_BUF_SZ - tp->rx_offset,
4048 PCI_DMA_FROMDEVICE);
4049 dev_kfree_skb_any(rxp->skb);
4050 rxp->skb = NULL;
4051 }
4052
4053 for (i = 0; i < TG3_TX_RING_SIZE; ) {
4054 struct tx_ring_info *txp;
4055 struct sk_buff *skb;
4056 int j;
4057
4058 txp = &tp->tx_buffers[i];
4059 skb = txp->skb;
4060
4061 if (skb == NULL) {
4062 i++;
4063 continue;
4064 }
4065
4066 pci_unmap_single(tp->pdev,
4067 pci_unmap_addr(txp, mapping),
4068 skb_headlen(skb),
4069 PCI_DMA_TODEVICE);
4070 txp->skb = NULL;
4071
4072 i++;
4073
4074 for (j = 0; j < skb_shinfo(skb)->nr_frags; j++) {
4075 txp = &tp->tx_buffers[i & (TG3_TX_RING_SIZE - 1)];
4076 pci_unmap_page(tp->pdev,
4077 pci_unmap_addr(txp, mapping),
4078 skb_shinfo(skb)->frags[j].size,
4079 PCI_DMA_TODEVICE);
4080 i++;
4081 }
4082
4083 dev_kfree_skb_any(skb);
4084 }
4085}
4086
4087/* Initialize tx/rx rings for packet processing.
4088 *
4089 * The chip has been shut down and the driver detached from
4090 * the networking, so no interrupts or new tx packets will
4091 * end up in the driver. tp->{tx,}lock are held and thus
4092 * we may not sleep.
4093 */
4094static void tg3_init_rings(struct tg3 *tp)
4095{
4096 u32 i;
4097
4098 /* Free up all the SKBs. */
4099 tg3_free_rings(tp);
4100
4101 /* Zero out all descriptors. */
4102 memset(tp->rx_std, 0, TG3_RX_RING_BYTES);
4103 memset(tp->rx_jumbo, 0, TG3_RX_JUMBO_RING_BYTES);
4104 memset(tp->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
4105 memset(tp->tx_ring, 0, TG3_TX_RING_BYTES);
4106
7e72aad4 4107 tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ;
a4e2b347 4108 if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) &&
7e72aad4
MC
4109 (tp->dev->mtu > ETH_DATA_LEN))
4110 tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ;
4111
1da177e4
LT
4112 /* Initialize invariants of the rings, we only set this
4113 * stuff once. This works because the card does not
4114 * write into the rx buffer posting rings.
4115 */
4116 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4117 struct tg3_rx_buffer_desc *rxd;
4118
4119 rxd = &tp->rx_std[i];
7e72aad4 4120 rxd->idx_len = (tp->rx_pkt_buf_sz - tp->rx_offset - 64)
1da177e4
LT
4121 << RXD_LEN_SHIFT;
4122 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
4123 rxd->opaque = (RXD_OPAQUE_RING_STD |
4124 (i << RXD_OPAQUE_INDEX_SHIFT));
4125 }
4126
0f893dc6 4127 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
1da177e4
LT
4128 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4129 struct tg3_rx_buffer_desc *rxd;
4130
4131 rxd = &tp->rx_jumbo[i];
4132 rxd->idx_len = (RX_JUMBO_PKT_BUF_SZ - tp->rx_offset - 64)
4133 << RXD_LEN_SHIFT;
4134 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
4135 RXD_FLAG_JUMBO;
4136 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
4137 (i << RXD_OPAQUE_INDEX_SHIFT));
4138 }
4139 }
4140
4141 /* Now allocate fresh SKBs for each rx ring. */
4142 for (i = 0; i < tp->rx_pending; i++) {
4143 if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_STD,
4144 -1, i) < 0)
4145 break;
4146 }
4147
0f893dc6 4148 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
1da177e4
LT
4149 for (i = 0; i < tp->rx_jumbo_pending; i++) {
4150 if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_JUMBO,
4151 -1, i) < 0)
4152 break;
4153 }
4154 }
4155}
4156
4157/*
4158 * Must not be invoked with interrupt sources disabled and
4159 * the hardware shutdown down.
4160 */
4161static void tg3_free_consistent(struct tg3 *tp)
4162{
b4558ea9
JJ
4163 kfree(tp->rx_std_buffers);
4164 tp->rx_std_buffers = NULL;
1da177e4
LT
4165 if (tp->rx_std) {
4166 pci_free_consistent(tp->pdev, TG3_RX_RING_BYTES,
4167 tp->rx_std, tp->rx_std_mapping);
4168 tp->rx_std = NULL;
4169 }
4170 if (tp->rx_jumbo) {
4171 pci_free_consistent(tp->pdev, TG3_RX_JUMBO_RING_BYTES,
4172 tp->rx_jumbo, tp->rx_jumbo_mapping);
4173 tp->rx_jumbo = NULL;
4174 }
4175 if (tp->rx_rcb) {
4176 pci_free_consistent(tp->pdev, TG3_RX_RCB_RING_BYTES(tp),
4177 tp->rx_rcb, tp->rx_rcb_mapping);
4178 tp->rx_rcb = NULL;
4179 }
4180 if (tp->tx_ring) {
4181 pci_free_consistent(tp->pdev, TG3_TX_RING_BYTES,
4182 tp->tx_ring, tp->tx_desc_mapping);
4183 tp->tx_ring = NULL;
4184 }
4185 if (tp->hw_status) {
4186 pci_free_consistent(tp->pdev, TG3_HW_STATUS_SIZE,
4187 tp->hw_status, tp->status_mapping);
4188 tp->hw_status = NULL;
4189 }
4190 if (tp->hw_stats) {
4191 pci_free_consistent(tp->pdev, sizeof(struct tg3_hw_stats),
4192 tp->hw_stats, tp->stats_mapping);
4193 tp->hw_stats = NULL;
4194 }
4195}
4196
4197/*
4198 * Must not be invoked with interrupt sources disabled and
4199 * the hardware shutdown down. Can sleep.
4200 */
4201static int tg3_alloc_consistent(struct tg3 *tp)
4202{
4203 tp->rx_std_buffers = kmalloc((sizeof(struct ring_info) *
4204 (TG3_RX_RING_SIZE +
4205 TG3_RX_JUMBO_RING_SIZE)) +
4206 (sizeof(struct tx_ring_info) *
4207 TG3_TX_RING_SIZE),
4208 GFP_KERNEL);
4209 if (!tp->rx_std_buffers)
4210 return -ENOMEM;
4211
4212 memset(tp->rx_std_buffers, 0,
4213 (sizeof(struct ring_info) *
4214 (TG3_RX_RING_SIZE +
4215 TG3_RX_JUMBO_RING_SIZE)) +
4216 (sizeof(struct tx_ring_info) *
4217 TG3_TX_RING_SIZE));
4218
4219 tp->rx_jumbo_buffers = &tp->rx_std_buffers[TG3_RX_RING_SIZE];
4220 tp->tx_buffers = (struct tx_ring_info *)
4221 &tp->rx_jumbo_buffers[TG3_RX_JUMBO_RING_SIZE];
4222
4223 tp->rx_std = pci_alloc_consistent(tp->pdev, TG3_RX_RING_BYTES,
4224 &tp->rx_std_mapping);
4225 if (!tp->rx_std)
4226 goto err_out;
4227
4228 tp->rx_jumbo = pci_alloc_consistent(tp->pdev, TG3_RX_JUMBO_RING_BYTES,
4229 &tp->rx_jumbo_mapping);
4230
4231 if (!tp->rx_jumbo)
4232 goto err_out;
4233
4234 tp->rx_rcb = pci_alloc_consistent(tp->pdev, TG3_RX_RCB_RING_BYTES(tp),
4235 &tp->rx_rcb_mapping);
4236 if (!tp->rx_rcb)
4237 goto err_out;
4238
4239 tp->tx_ring = pci_alloc_consistent(tp->pdev, TG3_TX_RING_BYTES,
4240 &tp->tx_desc_mapping);
4241 if (!tp->tx_ring)
4242 goto err_out;
4243
4244 tp->hw_status = pci_alloc_consistent(tp->pdev,
4245 TG3_HW_STATUS_SIZE,
4246 &tp->status_mapping);
4247 if (!tp->hw_status)
4248 goto err_out;
4249
4250 tp->hw_stats = pci_alloc_consistent(tp->pdev,
4251 sizeof(struct tg3_hw_stats),
4252 &tp->stats_mapping);
4253 if (!tp->hw_stats)
4254 goto err_out;
4255
4256 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
4257 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
4258
4259 return 0;
4260
4261err_out:
4262 tg3_free_consistent(tp);
4263 return -ENOMEM;
4264}
4265
4266#define MAX_WAIT_CNT 1000
4267
4268/* To stop a block, clear the enable bit and poll till it
4269 * clears. tp->lock is held.
4270 */
b3b7d6be 4271static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
1da177e4
LT
4272{
4273 unsigned int i;
4274 u32 val;
4275
4276 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
4277 switch (ofs) {
4278 case RCVLSC_MODE:
4279 case DMAC_MODE:
4280 case MBFREE_MODE:
4281 case BUFMGR_MODE:
4282 case MEMARB_MODE:
4283 /* We can't enable/disable these bits of the
4284 * 5705/5750, just say success.
4285 */
4286 return 0;
4287
4288 default:
4289 break;
4290 };
4291 }
4292
4293 val = tr32(ofs);
4294 val &= ~enable_bit;
4295 tw32_f(ofs, val);
4296
4297 for (i = 0; i < MAX_WAIT_CNT; i++) {
4298 udelay(100);
4299 val = tr32(ofs);
4300 if ((val & enable_bit) == 0)
4301 break;
4302 }
4303
b3b7d6be 4304 if (i == MAX_WAIT_CNT && !silent) {
1da177e4
LT
4305 printk(KERN_ERR PFX "tg3_stop_block timed out, "
4306 "ofs=%lx enable_bit=%x\n",
4307 ofs, enable_bit);
4308 return -ENODEV;
4309 }
4310
4311 return 0;
4312}
4313
4314/* tp->lock is held. */
b3b7d6be 4315static int tg3_abort_hw(struct tg3 *tp, int silent)
1da177e4
LT
4316{
4317 int i, err;
4318
4319 tg3_disable_ints(tp);
4320
4321 tp->rx_mode &= ~RX_MODE_ENABLE;
4322 tw32_f(MAC_RX_MODE, tp->rx_mode);
4323 udelay(10);
4324
b3b7d6be
DM
4325 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
4326 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
4327 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
4328 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
4329 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
4330 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
4331
4332 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
4333 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
4334 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
4335 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
4336 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
4337 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
4338 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
1da177e4
LT
4339
4340 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
4341 tw32_f(MAC_MODE, tp->mac_mode);
4342 udelay(40);
4343
4344 tp->tx_mode &= ~TX_MODE_ENABLE;
4345 tw32_f(MAC_TX_MODE, tp->tx_mode);
4346
4347 for (i = 0; i < MAX_WAIT_CNT; i++) {
4348 udelay(100);
4349 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
4350 break;
4351 }
4352 if (i >= MAX_WAIT_CNT) {
4353 printk(KERN_ERR PFX "tg3_abort_hw timed out for %s, "
4354 "TX_MODE_ENABLE will not clear MAC_TX_MODE=%08x\n",
4355 tp->dev->name, tr32(MAC_TX_MODE));
e6de8ad1 4356 err |= -ENODEV;
1da177e4
LT
4357 }
4358
e6de8ad1 4359 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
b3b7d6be
DM
4360 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
4361 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
1da177e4
LT
4362
4363 tw32(FTQ_RESET, 0xffffffff);
4364 tw32(FTQ_RESET, 0x00000000);
4365
b3b7d6be
DM
4366 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
4367 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
1da177e4
LT
4368
4369 if (tp->hw_status)
4370 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
4371 if (tp->hw_stats)
4372 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
4373
1da177e4
LT
4374 return err;
4375}
4376
4377/* tp->lock is held. */
4378static int tg3_nvram_lock(struct tg3 *tp)
4379{
4380 if (tp->tg3_flags & TG3_FLAG_NVRAM) {
4381 int i;
4382
ec41c7df
MC
4383 if (tp->nvram_lock_cnt == 0) {
4384 tw32(NVRAM_SWARB, SWARB_REQ_SET1);
4385 for (i = 0; i < 8000; i++) {
4386 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
4387 break;
4388 udelay(20);
4389 }
4390 if (i == 8000) {
4391 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
4392 return -ENODEV;
4393 }
1da177e4 4394 }
ec41c7df 4395 tp->nvram_lock_cnt++;
1da177e4
LT
4396 }
4397 return 0;
4398}
4399
4400/* tp->lock is held. */
4401static void tg3_nvram_unlock(struct tg3 *tp)
4402{
ec41c7df
MC
4403 if (tp->tg3_flags & TG3_FLAG_NVRAM) {
4404 if (tp->nvram_lock_cnt > 0)
4405 tp->nvram_lock_cnt--;
4406 if (tp->nvram_lock_cnt == 0)
4407 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
4408 }
1da177e4
LT
4409}
4410
e6af301b
MC
4411/* tp->lock is held. */
4412static void tg3_enable_nvram_access(struct tg3 *tp)
4413{
4414 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
4415 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
4416 u32 nvaccess = tr32(NVRAM_ACCESS);
4417
4418 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
4419 }
4420}
4421
4422/* tp->lock is held. */
4423static void tg3_disable_nvram_access(struct tg3 *tp)
4424{
4425 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
4426 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
4427 u32 nvaccess = tr32(NVRAM_ACCESS);
4428
4429 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
4430 }
4431}
4432
1da177e4
LT
4433/* tp->lock is held. */
4434static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
4435{
4436 if (!(tp->tg3_flags2 & TG3_FLG2_SUN_570X))
4437 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
4438 NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
4439
4440 if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) {
4441 switch (kind) {
4442 case RESET_KIND_INIT:
4443 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4444 DRV_STATE_START);
4445 break;
4446
4447 case RESET_KIND_SHUTDOWN:
4448 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4449 DRV_STATE_UNLOAD);
4450 break;
4451
4452 case RESET_KIND_SUSPEND:
4453 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4454 DRV_STATE_SUSPEND);
4455 break;
4456
4457 default:
4458 break;
4459 };
4460 }
4461}
4462
4463/* tp->lock is held. */
4464static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
4465{
4466 if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) {
4467 switch (kind) {
4468 case RESET_KIND_INIT:
4469 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4470 DRV_STATE_START_DONE);
4471 break;
4472
4473 case RESET_KIND_SHUTDOWN:
4474 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4475 DRV_STATE_UNLOAD_DONE);
4476 break;
4477
4478 default:
4479 break;
4480 };
4481 }
4482}
4483
4484/* tp->lock is held. */
4485static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
4486{
4487 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
4488 switch (kind) {
4489 case RESET_KIND_INIT:
4490 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4491 DRV_STATE_START);
4492 break;
4493
4494 case RESET_KIND_SHUTDOWN:
4495 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4496 DRV_STATE_UNLOAD);
4497 break;
4498
4499 case RESET_KIND_SUSPEND:
4500 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4501 DRV_STATE_SUSPEND);
4502 break;
4503
4504 default:
4505 break;
4506 };
4507 }
4508}
4509
4510static void tg3_stop_fw(struct tg3 *);
4511
4512/* tp->lock is held. */
4513static int tg3_chip_reset(struct tg3 *tp)
4514{
4515 u32 val;
1ee582d8 4516 void (*write_op)(struct tg3 *, u32, u32);
1da177e4
LT
4517 int i;
4518
ec41c7df 4519 if (!(tp->tg3_flags2 & TG3_FLG2_SUN_570X)) {
1da177e4 4520 tg3_nvram_lock(tp);
ec41c7df
MC
4521 /* No matching tg3_nvram_unlock() after this because
4522 * chip reset below will undo the nvram lock.
4523 */
4524 tp->nvram_lock_cnt = 0;
4525 }
1da177e4 4526
d9ab5ad1
MC
4527 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
4528 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
4529 tw32(GRC_FASTBOOT_PC, 0);
4530
1da177e4
LT
4531 /*
4532 * We must avoid the readl() that normally takes place.
4533 * It locks machines, causes machine checks, and other
4534 * fun things. So, temporarily disable the 5701
4535 * hardware workaround, while we do the reset.
4536 */
1ee582d8
MC
4537 write_op = tp->write32;
4538 if (write_op == tg3_write_flush_reg32)
4539 tp->write32 = tg3_write32;
1da177e4
LT
4540
4541 /* do the reset */
4542 val = GRC_MISC_CFG_CORECLK_RESET;
4543
4544 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
4545 if (tr32(0x7e2c) == 0x60) {
4546 tw32(0x7e2c, 0x20);
4547 }
4548 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
4549 tw32(GRC_MISC_CFG, (1 << 29));
4550 val |= (1 << 29);
4551 }
4552 }
4553
4554 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
4555 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
4556 tw32(GRC_MISC_CFG, val);
4557
1ee582d8
MC
4558 /* restore 5701 hardware bug workaround write method */
4559 tp->write32 = write_op;
1da177e4
LT
4560
4561 /* Unfortunately, we have to delay before the PCI read back.
4562 * Some 575X chips even will not respond to a PCI cfg access
4563 * when the reset command is given to the chip.
4564 *
4565 * How do these hardware designers expect things to work
4566 * properly if the PCI write is posted for a long period
4567 * of time? It is always necessary to have some method by
4568 * which a register read back can occur to push the write
4569 * out which does the reset.
4570 *
4571 * For most tg3 variants the trick below was working.
4572 * Ho hum...
4573 */
4574 udelay(120);
4575
4576 /* Flush PCI posted writes. The normal MMIO registers
4577 * are inaccessible at this time so this is the only
4578 * way to make this reliably (actually, this is no longer
4579 * the case, see above). I tried to use indirect
4580 * register read/write but this upset some 5701 variants.
4581 */
4582 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
4583
4584 udelay(120);
4585
4586 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
4587 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
4588 int i;
4589 u32 cfg_val;
4590
4591 /* Wait for link training to complete. */
4592 for (i = 0; i < 5000; i++)
4593 udelay(100);
4594
4595 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
4596 pci_write_config_dword(tp->pdev, 0xc4,
4597 cfg_val | (1 << 15));
4598 }
4599 /* Set PCIE max payload size and clear error status. */
4600 pci_write_config_dword(tp->pdev, 0xd8, 0xf5000);
4601 }
4602
4603 /* Re-enable indirect register accesses. */
4604 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
4605 tp->misc_host_ctrl);
4606
4607 /* Set MAX PCI retry to zero. */
4608 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
4609 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
4610 (tp->tg3_flags & TG3_FLAG_PCIX_MODE))
4611 val |= PCISTATE_RETRY_SAME_DMA;
4612 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
4613
4614 pci_restore_state(tp->pdev);
4615
4616 /* Make sure PCI-X relaxed ordering bit is clear. */
4617 pci_read_config_dword(tp->pdev, TG3PCI_X_CAPS, &val);
4618 val &= ~PCIX_CAPS_RELAXED_ORDERING;
4619 pci_write_config_dword(tp->pdev, TG3PCI_X_CAPS, val);
4620
a4e2b347 4621 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
4cf78e4f
MC
4622 u32 val;
4623
4624 /* Chip reset on 5780 will reset MSI enable bit,
4625 * so need to restore it.
4626 */
4627 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
4628 u16 ctrl;
4629
4630 pci_read_config_word(tp->pdev,
4631 tp->msi_cap + PCI_MSI_FLAGS,
4632 &ctrl);
4633 pci_write_config_word(tp->pdev,
4634 tp->msi_cap + PCI_MSI_FLAGS,
4635 ctrl | PCI_MSI_FLAGS_ENABLE);
4636 val = tr32(MSGINT_MODE);
4637 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
4638 }
4639
4640 val = tr32(MEMARB_MODE);
4641 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
4642
4643 } else
4644 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
1da177e4
LT
4645
4646 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
4647 tg3_stop_fw(tp);
4648 tw32(0x5000, 0x400);
4649 }
4650
4651 tw32(GRC_MODE, tp->grc_mode);
4652
4653 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
4654 u32 val = tr32(0xc4);
4655
4656 tw32(0xc4, val | (1 << 15));
4657 }
4658
4659 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
4660 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
4661 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
4662 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)
4663 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
4664 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
4665 }
4666
4667 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
4668 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
4669 tw32_f(MAC_MODE, tp->mac_mode);
747e8f8b
MC
4670 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
4671 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
4672 tw32_f(MAC_MODE, tp->mac_mode);
1da177e4
LT
4673 } else
4674 tw32_f(MAC_MODE, 0);
4675 udelay(40);
4676
4677 if (!(tp->tg3_flags2 & TG3_FLG2_SUN_570X)) {
4678 /* Wait for firmware initialization to complete. */
4679 for (i = 0; i < 100000; i++) {
4680 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
4681 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4682 break;
4683 udelay(10);
4684 }
4685 if (i >= 100000) {
4686 printk(KERN_ERR PFX "tg3_reset_hw timed out for %s, "
4687 "firmware will not restart magic=%08x\n",
4688 tp->dev->name, val);
4689 return -ENODEV;
4690 }
4691 }
4692
4693 if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
4694 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
4695 u32 val = tr32(0x7c00);
4696
4697 tw32(0x7c00, val | (1 << 25));
4698 }
4699
4700 /* Reprobe ASF enable state. */
4701 tp->tg3_flags &= ~TG3_FLAG_ENABLE_ASF;
4702 tp->tg3_flags2 &= ~TG3_FLG2_ASF_NEW_HANDSHAKE;
4703 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
4704 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
4705 u32 nic_cfg;
4706
4707 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
4708 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
4709 tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
cbf46853 4710 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
1da177e4
LT
4711 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
4712 }
4713 }
4714
4715 return 0;
4716}
4717
4718/* tp->lock is held. */
4719static void tg3_stop_fw(struct tg3 *tp)
4720{
4721 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
4722 u32 val;
4723 int i;
4724
4725 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
4726 val = tr32(GRC_RX_CPU_EVENT);
4727 val |= (1 << 14);
4728 tw32(GRC_RX_CPU_EVENT, val);
4729
4730 /* Wait for RX cpu to ACK the event. */
4731 for (i = 0; i < 100; i++) {
4732 if (!(tr32(GRC_RX_CPU_EVENT) & (1 << 14)))
4733 break;
4734 udelay(1);
4735 }
4736 }
4737}
4738
4739/* tp->lock is held. */
944d980e 4740static int tg3_halt(struct tg3 *tp, int kind, int silent)
1da177e4
LT
4741{
4742 int err;
4743
4744 tg3_stop_fw(tp);
4745
944d980e 4746 tg3_write_sig_pre_reset(tp, kind);
1da177e4 4747
b3b7d6be 4748 tg3_abort_hw(tp, silent);
1da177e4
LT
4749 err = tg3_chip_reset(tp);
4750
944d980e
MC
4751 tg3_write_sig_legacy(tp, kind);
4752 tg3_write_sig_post_reset(tp, kind);
1da177e4
LT
4753
4754 if (err)
4755 return err;
4756
4757 return 0;
4758}
4759
4760#define TG3_FW_RELEASE_MAJOR 0x0
4761#define TG3_FW_RELASE_MINOR 0x0
4762#define TG3_FW_RELEASE_FIX 0x0
4763#define TG3_FW_START_ADDR 0x08000000
4764#define TG3_FW_TEXT_ADDR 0x08000000
4765#define TG3_FW_TEXT_LEN 0x9c0
4766#define TG3_FW_RODATA_ADDR 0x080009c0
4767#define TG3_FW_RODATA_LEN 0x60
4768#define TG3_FW_DATA_ADDR 0x08000a40
4769#define TG3_FW_DATA_LEN 0x20
4770#define TG3_FW_SBSS_ADDR 0x08000a60
4771#define TG3_FW_SBSS_LEN 0xc
4772#define TG3_FW_BSS_ADDR 0x08000a70
4773#define TG3_FW_BSS_LEN 0x10
4774
4775static u32 tg3FwText[(TG3_FW_TEXT_LEN / sizeof(u32)) + 1] = {
4776 0x00000000, 0x10000003, 0x00000000, 0x0000000d, 0x0000000d, 0x3c1d0800,
4777 0x37bd3ffc, 0x03a0f021, 0x3c100800, 0x26100000, 0x0e000018, 0x00000000,
4778 0x0000000d, 0x3c1d0800, 0x37bd3ffc, 0x03a0f021, 0x3c100800, 0x26100034,
4779 0x0e00021c, 0x00000000, 0x0000000d, 0x00000000, 0x00000000, 0x00000000,
4780 0x27bdffe0, 0x3c1cc000, 0xafbf0018, 0xaf80680c, 0x0e00004c, 0x241b2105,
4781 0x97850000, 0x97870002, 0x9782002c, 0x9783002e, 0x3c040800, 0x248409c0,
4782 0xafa00014, 0x00021400, 0x00621825, 0x00052c00, 0xafa30010, 0x8f860010,
4783 0x00e52825, 0x0e000060, 0x24070102, 0x3c02ac00, 0x34420100, 0x3c03ac01,
4784 0x34630100, 0xaf820490, 0x3c02ffff, 0xaf820494, 0xaf830498, 0xaf82049c,
4785 0x24020001, 0xaf825ce0, 0x0e00003f, 0xaf825d00, 0x0e000140, 0x00000000,
4786 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x2402ffff, 0xaf825404, 0x8f835400,
4787 0x34630400, 0xaf835400, 0xaf825404, 0x3c020800, 0x24420034, 0xaf82541c,
4788 0x03e00008, 0xaf805400, 0x00000000, 0x00000000, 0x3c020800, 0x34423000,
4789 0x3c030800, 0x34633000, 0x3c040800, 0x348437ff, 0x3c010800, 0xac220a64,
4790 0x24020040, 0x3c010800, 0xac220a68, 0x3c010800, 0xac200a60, 0xac600000,
4791 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000,
4792 0x00804821, 0x8faa0010, 0x3c020800, 0x8c420a60, 0x3c040800, 0x8c840a68,
4793 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010800, 0xac230a60, 0x14400003,
4794 0x00004021, 0x3c010800, 0xac200a60, 0x3c020800, 0x8c420a60, 0x3c030800,
4795 0x8c630a64, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001,
4796 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020800, 0x8c420a60,
4797 0x3c030800, 0x8c630a64, 0x8f84680c, 0x00021140, 0x00431021, 0xac440008,
4798 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c,
4799 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4800 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4801 0, 0, 0, 0, 0, 0,
4802 0x02000008, 0x00000000, 0x0a0001e3, 0x3c0a0001, 0x0a0001e3, 0x3c0a0002,
4803 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
4804 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
4805 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
4806 0x0a0001e3, 0x3c0a0007, 0x0a0001e3, 0x3c0a0008, 0x0a0001e3, 0x3c0a0009,
4807 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a000b,
4808 0x0a0001e3, 0x3c0a000c, 0x0a0001e3, 0x3c0a000d, 0x0a0001e3, 0x00000000,
4809 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a000e, 0x0a0001e3, 0x00000000,
4810 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
4811 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
4812 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a0013, 0x0a0001e3, 0x3c0a0014,
4813 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4814 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4815 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4816 0x27bdffe0, 0x00001821, 0x00001021, 0xafbf0018, 0xafb10014, 0xafb00010,
4817 0x3c010800, 0x00220821, 0xac200a70, 0x3c010800, 0x00220821, 0xac200a74,
4818 0x3c010800, 0x00220821, 0xac200a78, 0x24630001, 0x1860fff5, 0x2442000c,
4819 0x24110001, 0x8f906810, 0x32020004, 0x14400005, 0x24040001, 0x3c020800,
4820 0x8c420a78, 0x18400003, 0x00002021, 0x0e000182, 0x00000000, 0x32020001,
4821 0x10400003, 0x00000000, 0x0e000169, 0x00000000, 0x0a000153, 0xaf915028,
4822 0x8fbf0018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020, 0x3c050800,
4823 0x8ca50a70, 0x3c060800, 0x8cc60a80, 0x3c070800, 0x8ce70a78, 0x27bdffe0,
4824 0x3c040800, 0x248409d0, 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014,
4825 0x0e00017b, 0x00002021, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x24020001,
4826 0x8f836810, 0x00821004, 0x00021027, 0x00621824, 0x03e00008, 0xaf836810,
4827 0x27bdffd8, 0xafbf0024, 0x1080002e, 0xafb00020, 0x8f825cec, 0xafa20018,
4828 0x8f825cec, 0x3c100800, 0x26100a78, 0xafa2001c, 0x34028000, 0xaf825cec,
4829 0x8e020000, 0x18400016, 0x00000000, 0x3c020800, 0x94420a74, 0x8fa3001c,
4830 0x000221c0, 0xac830004, 0x8fa2001c, 0x3c010800, 0x0e000201, 0xac220a74,
4831 0x10400005, 0x00000000, 0x8e020000, 0x24420001, 0x0a0001df, 0xae020000,
4832 0x3c020800, 0x8c420a70, 0x00021c02, 0x000321c0, 0x0a0001c5, 0xafa2001c,
4833 0x0e000201, 0x00000000, 0x1040001f, 0x00000000, 0x8e020000, 0x8fa3001c,
4834 0x24420001, 0x3c010800, 0xac230a70, 0x3c010800, 0xac230a74, 0x0a0001df,
4835 0xae020000, 0x3c100800, 0x26100a78, 0x8e020000, 0x18400028, 0x00000000,
4836 0x0e000201, 0x00000000, 0x14400024, 0x00000000, 0x8e020000, 0x3c030800,
4837 0x8c630a70, 0x2442ffff, 0xafa3001c, 0x18400006, 0xae020000, 0x00031402,
4838 0x000221c0, 0x8c820004, 0x3c010800, 0xac220a70, 0x97a2001e, 0x2442ff00,
4839 0x2c420300, 0x1440000b, 0x24024000, 0x3c040800, 0x248409dc, 0xafa00010,
4840 0xafa00014, 0x8fa6001c, 0x24050008, 0x0e000060, 0x00003821, 0x0a0001df,
4841 0x00000000, 0xaf825cf8, 0x3c020800, 0x8c420a40, 0x8fa3001c, 0x24420001,
4842 0xaf835cf8, 0x3c010800, 0xac220a40, 0x8fbf0024, 0x8fb00020, 0x03e00008,
4843 0x27bd0028, 0x27bdffe0, 0x3c040800, 0x248409e8, 0x00002821, 0x00003021,
4844 0x00003821, 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014, 0x8fbf0018,
4845 0x03e00008, 0x27bd0020, 0x8f82680c, 0x8f85680c, 0x00021827, 0x0003182b,
4846 0x00031823, 0x00431024, 0x00441021, 0x00a2282b, 0x10a00006, 0x00000000,
4847 0x00401821, 0x8f82680c, 0x0043102b, 0x1440fffd, 0x00000000, 0x03e00008,
4848 0x00000000, 0x3c040800, 0x8c840000, 0x3c030800, 0x8c630a40, 0x0064102b,
4849 0x54400002, 0x00831023, 0x00641023, 0x2c420008, 0x03e00008, 0x38420001,
4850 0x27bdffe0, 0x00802821, 0x3c040800, 0x24840a00, 0x00003021, 0x00003821,
4851 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014, 0x0a000216, 0x00000000,
4852 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000, 0x27bdffe0, 0x3c1cc000,
4853 0xafbf0018, 0x0e00004c, 0xaf80680c, 0x3c040800, 0x24840a10, 0x03802821,
4854 0x00003021, 0x00003821, 0xafa00010, 0x0e000060, 0xafa00014, 0x2402ffff,
4855 0xaf825404, 0x3c0200aa, 0x0e000234, 0xaf825434, 0x8fbf0018, 0x03e00008,
4856 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe8, 0xafb00010,
4857 0x24100001, 0xafbf0014, 0x3c01c003, 0xac200000, 0x8f826810, 0x30422000,
4858 0x10400003, 0x00000000, 0x0e000246, 0x00000000, 0x0a00023a, 0xaf905428,
4859 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x27bdfff8, 0x8f845d0c,
4860 0x3c0200ff, 0x3c030800, 0x8c630a50, 0x3442fff8, 0x00821024, 0x1043001e,
4861 0x3c0500ff, 0x34a5fff8, 0x3c06c003, 0x3c074000, 0x00851824, 0x8c620010,
4862 0x3c010800, 0xac230a50, 0x30420008, 0x10400005, 0x00871025, 0x8cc20000,
4863 0x24420001, 0xacc20000, 0x00871025, 0xaf825d0c, 0x8fa20000, 0x24420001,
4864 0xafa20000, 0x8fa20000, 0x8fa20000, 0x24420001, 0xafa20000, 0x8fa20000,
4865 0x8f845d0c, 0x3c030800, 0x8c630a50, 0x00851024, 0x1443ffe8, 0x00851824,
4866 0x27bd0008, 0x03e00008, 0x00000000, 0x00000000, 0x00000000
4867};
4868
4869static u32 tg3FwRodata[(TG3_FW_RODATA_LEN / sizeof(u32)) + 1] = {
4870 0x35373031, 0x726c7341, 0x00000000, 0x00000000, 0x53774576, 0x656e7430,
4871 0x00000000, 0x726c7045, 0x76656e74, 0x31000000, 0x556e6b6e, 0x45766e74,
4872 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66617461, 0x6c457272,
4873 0x00000000, 0x00000000, 0x4d61696e, 0x43707542, 0x00000000, 0x00000000,
4874 0x00000000
4875};
4876
4877#if 0 /* All zeros, don't eat up space with it. */
4878u32 tg3FwData[(TG3_FW_DATA_LEN / sizeof(u32)) + 1] = {
4879 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4880 0x00000000, 0x00000000, 0x00000000, 0x00000000
4881};
4882#endif
4883
4884#define RX_CPU_SCRATCH_BASE 0x30000
4885#define RX_CPU_SCRATCH_SIZE 0x04000
4886#define TX_CPU_SCRATCH_BASE 0x34000
4887#define TX_CPU_SCRATCH_SIZE 0x04000
4888
4889/* tp->lock is held. */
4890static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
4891{
4892 int i;
4893
4894 if (offset == TX_CPU_BASE &&
4895 (tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
4896 BUG();
4897
4898 if (offset == RX_CPU_BASE) {
4899 for (i = 0; i < 10000; i++) {
4900 tw32(offset + CPU_STATE, 0xffffffff);
4901 tw32(offset + CPU_MODE, CPU_MODE_HALT);
4902 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
4903 break;
4904 }
4905
4906 tw32(offset + CPU_STATE, 0xffffffff);
4907 tw32_f(offset + CPU_MODE, CPU_MODE_HALT);
4908 udelay(10);
4909 } else {
4910 for (i = 0; i < 10000; i++) {
4911 tw32(offset + CPU_STATE, 0xffffffff);
4912 tw32(offset + CPU_MODE, CPU_MODE_HALT);
4913 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
4914 break;
4915 }
4916 }
4917
4918 if (i >= 10000) {
4919 printk(KERN_ERR PFX "tg3_reset_cpu timed out for %s, "
4920 "and %s CPU\n",
4921 tp->dev->name,
4922 (offset == RX_CPU_BASE ? "RX" : "TX"));
4923 return -ENODEV;
4924 }
ec41c7df
MC
4925
4926 /* Clear firmware's nvram arbitration. */
4927 if (tp->tg3_flags & TG3_FLAG_NVRAM)
4928 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
1da177e4
LT
4929 return 0;
4930}
4931
4932struct fw_info {
4933 unsigned int text_base;
4934 unsigned int text_len;
4935 u32 *text_data;
4936 unsigned int rodata_base;
4937 unsigned int rodata_len;
4938 u32 *rodata_data;
4939 unsigned int data_base;
4940 unsigned int data_len;
4941 u32 *data_data;
4942};
4943
4944/* tp->lock is held. */
4945static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, u32 cpu_scratch_base,
4946 int cpu_scratch_size, struct fw_info *info)
4947{
ec41c7df 4948 int err, lock_err, i;
1da177e4
LT
4949 void (*write_op)(struct tg3 *, u32, u32);
4950
4951 if (cpu_base == TX_CPU_BASE &&
4952 (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
4953 printk(KERN_ERR PFX "tg3_load_firmware_cpu: Trying to load "
4954 "TX cpu firmware on %s which is 5705.\n",
4955 tp->dev->name);
4956 return -EINVAL;
4957 }
4958
4959 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
4960 write_op = tg3_write_mem;
4961 else
4962 write_op = tg3_write_indirect_reg32;
4963
1b628151
MC
4964 /* It is possible that bootcode is still loading at this point.
4965 * Get the nvram lock first before halting the cpu.
4966 */
ec41c7df 4967 lock_err = tg3_nvram_lock(tp);
1da177e4 4968 err = tg3_halt_cpu(tp, cpu_base);
ec41c7df
MC
4969 if (!lock_err)
4970 tg3_nvram_unlock(tp);
1da177e4
LT
4971 if (err)
4972 goto out;
4973
4974 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
4975 write_op(tp, cpu_scratch_base + i, 0);
4976 tw32(cpu_base + CPU_STATE, 0xffffffff);
4977 tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
4978 for (i = 0; i < (info->text_len / sizeof(u32)); i++)
4979 write_op(tp, (cpu_scratch_base +
4980 (info->text_base & 0xffff) +
4981 (i * sizeof(u32))),
4982 (info->text_data ?
4983 info->text_data[i] : 0));
4984 for (i = 0; i < (info->rodata_len / sizeof(u32)); i++)
4985 write_op(tp, (cpu_scratch_base +
4986 (info->rodata_base & 0xffff) +
4987 (i * sizeof(u32))),
4988 (info->rodata_data ?
4989 info->rodata_data[i] : 0));
4990 for (i = 0; i < (info->data_len / sizeof(u32)); i++)
4991 write_op(tp, (cpu_scratch_base +
4992 (info->data_base & 0xffff) +
4993 (i * sizeof(u32))),
4994 (info->data_data ?
4995 info->data_data[i] : 0));
4996
4997 err = 0;
4998
4999out:
1da177e4
LT
5000 return err;
5001}
5002
5003/* tp->lock is held. */
5004static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
5005{
5006 struct fw_info info;
5007 int err, i;
5008
5009 info.text_base = TG3_FW_TEXT_ADDR;
5010 info.text_len = TG3_FW_TEXT_LEN;
5011 info.text_data = &tg3FwText[0];
5012 info.rodata_base = TG3_FW_RODATA_ADDR;
5013 info.rodata_len = TG3_FW_RODATA_LEN;
5014 info.rodata_data = &tg3FwRodata[0];
5015 info.data_base = TG3_FW_DATA_ADDR;
5016 info.data_len = TG3_FW_DATA_LEN;
5017 info.data_data = NULL;
5018
5019 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
5020 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
5021 &info);
5022 if (err)
5023 return err;
5024
5025 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
5026 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
5027 &info);
5028 if (err)
5029 return err;
5030
5031 /* Now startup only the RX cpu. */
5032 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5033 tw32_f(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
5034
5035 for (i = 0; i < 5; i++) {
5036 if (tr32(RX_CPU_BASE + CPU_PC) == TG3_FW_TEXT_ADDR)
5037 break;
5038 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5039 tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT);
5040 tw32_f(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
5041 udelay(1000);
5042 }
5043 if (i >= 5) {
5044 printk(KERN_ERR PFX "tg3_load_firmware fails for %s "
5045 "to set RX CPU PC, is %08x should be %08x\n",
5046 tp->dev->name, tr32(RX_CPU_BASE + CPU_PC),
5047 TG3_FW_TEXT_ADDR);
5048 return -ENODEV;
5049 }
5050 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5051 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000);
5052
5053 return 0;
5054}
5055
5056#if TG3_TSO_SUPPORT != 0
5057
5058#define TG3_TSO_FW_RELEASE_MAJOR 0x1
5059#define TG3_TSO_FW_RELASE_MINOR 0x6
5060#define TG3_TSO_FW_RELEASE_FIX 0x0
5061#define TG3_TSO_FW_START_ADDR 0x08000000
5062#define TG3_TSO_FW_TEXT_ADDR 0x08000000
5063#define TG3_TSO_FW_TEXT_LEN 0x1aa0
5064#define TG3_TSO_FW_RODATA_ADDR 0x08001aa0
5065#define TG3_TSO_FW_RODATA_LEN 0x60
5066#define TG3_TSO_FW_DATA_ADDR 0x08001b20
5067#define TG3_TSO_FW_DATA_LEN 0x30
5068#define TG3_TSO_FW_SBSS_ADDR 0x08001b50
5069#define TG3_TSO_FW_SBSS_LEN 0x2c
5070#define TG3_TSO_FW_BSS_ADDR 0x08001b80
5071#define TG3_TSO_FW_BSS_LEN 0x894
5072
5073static u32 tg3TsoFwText[(TG3_TSO_FW_TEXT_LEN / 4) + 1] = {
5074 0x0e000003, 0x00000000, 0x08001b24, 0x00000000, 0x10000003, 0x00000000,
5075 0x0000000d, 0x0000000d, 0x3c1d0800, 0x37bd4000, 0x03a0f021, 0x3c100800,
5076 0x26100000, 0x0e000010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe,
5077 0xafbf0018, 0x0e0005d8, 0x34840002, 0x0e000668, 0x00000000, 0x3c030800,
5078 0x90631b68, 0x24020002, 0x3c040800, 0x24841aac, 0x14620003, 0x24050001,
5079 0x3c040800, 0x24841aa0, 0x24060006, 0x00003821, 0xafa00010, 0x0e00067c,
5080 0xafa00014, 0x8f625c50, 0x34420001, 0xaf625c50, 0x8f625c90, 0x34420001,
5081 0xaf625c90, 0x2402ffff, 0x0e000034, 0xaf625404, 0x8fbf0018, 0x03e00008,
5082 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c,
5083 0xafb20018, 0xafb10014, 0x0e00005b, 0xafb00010, 0x24120002, 0x24110001,
5084 0x8f706820, 0x32020100, 0x10400003, 0x00000000, 0x0e0000bb, 0x00000000,
5085 0x8f706820, 0x32022000, 0x10400004, 0x32020001, 0x0e0001f0, 0x24040001,
5086 0x32020001, 0x10400003, 0x00000000, 0x0e0000a3, 0x00000000, 0x3c020800,
5087 0x90421b98, 0x14520003, 0x00000000, 0x0e0004c0, 0x00000000, 0x0a00003c,
5088 0xaf715028, 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008,
5089 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ac0, 0x00002821, 0x00003021,
5090 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x3c040800,
5091 0x248423d8, 0xa4800000, 0x3c010800, 0xa0201b98, 0x3c010800, 0xac201b9c,
5092 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac,
5093 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bbc, 0x8f624434, 0x3c010800,
5094 0xac221b88, 0x8f624438, 0x3c010800, 0xac221b8c, 0x8f624410, 0xac80f7a8,
5095 0x3c010800, 0xac201b84, 0x3c010800, 0xac2023e0, 0x3c010800, 0xac2023c8,
5096 0x3c010800, 0xac2023cc, 0x3c010800, 0xac202400, 0x3c010800, 0xac221b90,
5097 0x8f620068, 0x24030007, 0x00021702, 0x10430005, 0x00000000, 0x8f620068,
5098 0x00021702, 0x14400004, 0x24020001, 0x3c010800, 0x0a000097, 0xac20240c,
5099 0xac820034, 0x3c040800, 0x24841acc, 0x3c050800, 0x8ca5240c, 0x00003021,
5100 0x00003821, 0xafa00010, 0x0e00067c, 0xafa00014, 0x8fbf0018, 0x03e00008,
5101 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ad8, 0x00002821, 0x00003021,
5102 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x0e00005b,
5103 0x00000000, 0x0e0000b4, 0x00002021, 0x8fbf0018, 0x03e00008, 0x27bd0020,
5104 0x24020001, 0x8f636820, 0x00821004, 0x00021027, 0x00621824, 0x03e00008,
5105 0xaf636820, 0x27bdffd0, 0xafbf002c, 0xafb60028, 0xafb50024, 0xafb40020,
5106 0xafb3001c, 0xafb20018, 0xafb10014, 0xafb00010, 0x8f675c5c, 0x3c030800,
5107 0x24631bbc, 0x8c620000, 0x14470005, 0x3c0200ff, 0x3c020800, 0x90421b98,
5108 0x14400119, 0x3c0200ff, 0x3442fff8, 0x00e28824, 0xac670000, 0x00111902,
5109 0x306300ff, 0x30e20003, 0x000211c0, 0x00622825, 0x00a04021, 0x00071602,
5110 0x3c030800, 0x90631b98, 0x3044000f, 0x14600036, 0x00804821, 0x24020001,
5111 0x3c010800, 0xa0221b98, 0x00051100, 0x00821025, 0x3c010800, 0xac201b9c,
5112 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac,
5113 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bb0, 0x3c010800, 0xac201bb4,
5114 0x3c010800, 0xa42223d8, 0x9622000c, 0x30437fff, 0x3c010800, 0xa4222410,
5115 0x30428000, 0x3c010800, 0xa4231bc6, 0x10400005, 0x24020001, 0x3c010800,
5116 0xac2223f4, 0x0a000102, 0x2406003e, 0x24060036, 0x3c010800, 0xac2023f4,
5117 0x9622000a, 0x3c030800, 0x94631bc6, 0x3c010800, 0xac2023f0, 0x3c010800,
5118 0xac2023f8, 0x00021302, 0x00021080, 0x00c21021, 0x00621821, 0x3c010800,
5119 0xa42223d0, 0x3c010800, 0x0a000115, 0xa4231b96, 0x9622000c, 0x3c010800,
5120 0xa42223ec, 0x3c040800, 0x24841b9c, 0x8c820000, 0x00021100, 0x3c010800,
5121 0x00220821, 0xac311bc8, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821,
5122 0xac271bcc, 0x8c820000, 0x25030001, 0x306601ff, 0x00021100, 0x3c010800,
5123 0x00220821, 0xac261bd0, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821,
5124 0xac291bd4, 0x96230008, 0x3c020800, 0x8c421bac, 0x00432821, 0x3c010800,
5125 0xac251bac, 0x9622000a, 0x30420004, 0x14400018, 0x00061100, 0x8f630c14,
5126 0x3063000f, 0x2c620002, 0x1440000b, 0x3c02c000, 0x8f630c14, 0x3c020800,
5127 0x8c421b40, 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002,
5128 0x1040fff7, 0x3c02c000, 0x00e21825, 0xaf635c5c, 0x8f625c50, 0x30420002,
5129 0x10400014, 0x00000000, 0x0a000147, 0x00000000, 0x3c030800, 0x8c631b80,
5130 0x3c040800, 0x94841b94, 0x01221025, 0x3c010800, 0xa42223da, 0x24020001,
5131 0x3c010800, 0xac221bb8, 0x24630001, 0x0085202a, 0x3c010800, 0x10800003,
5132 0xac231b80, 0x3c010800, 0xa4251b94, 0x3c060800, 0x24c61b9c, 0x8cc20000,
5133 0x24420001, 0xacc20000, 0x28420080, 0x14400005, 0x00000000, 0x0e000656,
5134 0x24040002, 0x0a0001e6, 0x00000000, 0x3c020800, 0x8c421bb8, 0x10400078,
5135 0x24020001, 0x3c050800, 0x90a51b98, 0x14a20072, 0x00000000, 0x3c150800,
5136 0x96b51b96, 0x3c040800, 0x8c841bac, 0x32a3ffff, 0x0083102a, 0x1440006c,
5137 0x00000000, 0x14830003, 0x00000000, 0x3c010800, 0xac2523f0, 0x1060005c,
5138 0x00009021, 0x24d60004, 0x0060a021, 0x24d30014, 0x8ec20000, 0x00028100,
5139 0x3c110800, 0x02308821, 0x0e000625, 0x8e311bc8, 0x00402821, 0x10a00054,
5140 0x00000000, 0x9628000a, 0x31020040, 0x10400005, 0x2407180c, 0x8e22000c,
5141 0x2407188c, 0x00021400, 0xaca20018, 0x3c030800, 0x00701821, 0x8c631bd0,
5142 0x3c020800, 0x00501021, 0x8c421bd4, 0x00031d00, 0x00021400, 0x00621825,
5143 0xaca30014, 0x8ec30004, 0x96220008, 0x00432023, 0x3242ffff, 0x3083ffff,
5144 0x00431021, 0x0282102a, 0x14400002, 0x02b23023, 0x00803021, 0x8e620000,
5145 0x30c4ffff, 0x00441021, 0xae620000, 0x8e220000, 0xaca20000, 0x8e220004,
5146 0x8e63fff4, 0x00431021, 0xaca20004, 0xa4a6000e, 0x8e62fff4, 0x00441021,
5147 0xae62fff4, 0x96230008, 0x0043102a, 0x14400005, 0x02469021, 0x8e62fff0,
5148 0xae60fff4, 0x24420001, 0xae62fff0, 0xaca00008, 0x3242ffff, 0x14540008,
5149 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x24020905, 0xa4a2000c,
5150 0x0a0001cb, 0x34e70020, 0xa4a2000c, 0x3c020800, 0x8c4223f0, 0x10400003,
5151 0x3c024b65, 0x0a0001d3, 0x34427654, 0x3c02b49a, 0x344289ab, 0xaca2001c,
5152 0x30e2ffff, 0xaca20010, 0x0e0005a2, 0x00a02021, 0x3242ffff, 0x0054102b,
5153 0x1440ffa9, 0x00000000, 0x24020002, 0x3c010800, 0x0a0001e6, 0xa0221b98,
5154 0x8ec2083c, 0x24420001, 0x0a0001e6, 0xaec2083c, 0x0e0004c0, 0x00000000,
5155 0x8fbf002c, 0x8fb60028, 0x8fb50024, 0x8fb40020, 0x8fb3001c, 0x8fb20018,
5156 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0030, 0x27bdffd0, 0xafbf0028,
5157 0xafb30024, 0xafb20020, 0xafb1001c, 0xafb00018, 0x8f725c9c, 0x3c0200ff,
5158 0x3442fff8, 0x3c070800, 0x24e71bb4, 0x02428824, 0x9623000e, 0x8ce20000,
5159 0x00431021, 0xace20000, 0x8e220010, 0x30420020, 0x14400011, 0x00809821,
5160 0x0e00063b, 0x02202021, 0x3c02c000, 0x02421825, 0xaf635c9c, 0x8f625c90,
5161 0x30420002, 0x1040011e, 0x00000000, 0xaf635c9c, 0x8f625c90, 0x30420002,
5162 0x10400119, 0x00000000, 0x0a00020d, 0x00000000, 0x8e240008, 0x8e230014,
5163 0x00041402, 0x000231c0, 0x00031502, 0x304201ff, 0x2442ffff, 0x3042007f,
5164 0x00031942, 0x30637800, 0x00021100, 0x24424000, 0x00624821, 0x9522000a,
5165 0x3084ffff, 0x30420008, 0x104000b0, 0x000429c0, 0x3c020800, 0x8c422400,
5166 0x14400024, 0x24c50008, 0x94c20014, 0x3c010800, 0xa42223d0, 0x8cc40010,
5167 0x00041402, 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42423d4, 0x94c2000e,
5168 0x3083ffff, 0x00431023, 0x3c010800, 0xac222408, 0x94c2001a, 0x3c010800,
5169 0xac262400, 0x3c010800, 0xac322404, 0x3c010800, 0xac2223fc, 0x3c02c000,
5170 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e5, 0x00000000,
5171 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e0, 0x00000000, 0x0a000246,
5172 0x00000000, 0x94c2000e, 0x3c030800, 0x946323d4, 0x00434023, 0x3103ffff,
5173 0x2c620008, 0x1040001c, 0x00000000, 0x94c20014, 0x24420028, 0x00a22821,
5174 0x00031042, 0x1840000b, 0x00002021, 0x24e60848, 0x00403821, 0x94a30000,
5175 0x8cc20000, 0x24840001, 0x00431021, 0xacc20000, 0x0087102a, 0x1440fff9,
5176 0x24a50002, 0x31020001, 0x1040001f, 0x3c024000, 0x3c040800, 0x248423fc,
5177 0xa0a00001, 0x94a30000, 0x8c820000, 0x00431021, 0x0a000285, 0xac820000,
5178 0x8f626800, 0x3c030010, 0x00431024, 0x10400009, 0x00000000, 0x94c2001a,
5179 0x3c030800, 0x8c6323fc, 0x00431021, 0x3c010800, 0xac2223fc, 0x0a000286,
5180 0x3c024000, 0x94c2001a, 0x94c4001c, 0x3c030800, 0x8c6323fc, 0x00441023,
5181 0x00621821, 0x3c010800, 0xac2323fc, 0x3c024000, 0x02421825, 0xaf635c9c,
5182 0x8f625c90, 0x30420002, 0x1440fffc, 0x00000000, 0x9522000a, 0x30420010,
5183 0x1040009b, 0x00000000, 0x3c030800, 0x946323d4, 0x3c070800, 0x24e72400,
5184 0x8ce40000, 0x8f626800, 0x24630030, 0x00832821, 0x3c030010, 0x00431024,
5185 0x1440000a, 0x00000000, 0x94a20004, 0x3c040800, 0x8c842408, 0x3c030800,
5186 0x8c6323fc, 0x00441023, 0x00621821, 0x3c010800, 0xac2323fc, 0x3c040800,
5187 0x8c8423fc, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402, 0x00822021,
5188 0x00041027, 0xa4a20006, 0x3c030800, 0x8c632404, 0x3c0200ff, 0x3442fff8,
5189 0x00628824, 0x96220008, 0x24050001, 0x24034000, 0x000231c0, 0x00801021,
5190 0xa4c2001a, 0xa4c0001c, 0xace00000, 0x3c010800, 0xac251b60, 0xaf635cb8,
5191 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000, 0x3c010800, 0xac201b60,
5192 0x8e220008, 0xaf625cb8, 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000,
5193 0x3c010800, 0xac201b60, 0x3c020800, 0x8c421b60, 0x1040ffec, 0x00000000,
5194 0x3c040800, 0x0e00063b, 0x8c842404, 0x0a00032a, 0x00000000, 0x3c030800,
5195 0x90631b98, 0x24020002, 0x14620003, 0x3c034b65, 0x0a0002e1, 0x00008021,
5196 0x8e22001c, 0x34637654, 0x10430002, 0x24100002, 0x24100001, 0x00c02021,
5197 0x0e000350, 0x02003021, 0x24020003, 0x3c010800, 0xa0221b98, 0x24020002,
5198 0x1202000a, 0x24020001, 0x3c030800, 0x8c6323f0, 0x10620006, 0x00000000,
5199 0x3c020800, 0x944223d8, 0x00021400, 0x0a00031f, 0xae220014, 0x3c040800,
5200 0x248423da, 0x94820000, 0x00021400, 0xae220014, 0x3c020800, 0x8c421bbc,
5201 0x3c03c000, 0x3c010800, 0xa0201b98, 0x00431025, 0xaf625c5c, 0x8f625c50,
5202 0x30420002, 0x10400009, 0x00000000, 0x2484f7e2, 0x8c820000, 0x00431025,
5203 0xaf625c5c, 0x8f625c50, 0x30420002, 0x1440fffa, 0x00000000, 0x3c020800,
5204 0x24421b84, 0x8c430000, 0x24630001, 0xac430000, 0x8f630c14, 0x3063000f,
5205 0x2c620002, 0x1440000c, 0x3c024000, 0x8f630c14, 0x3c020800, 0x8c421b40,
5206 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7,
5207 0x00000000, 0x3c024000, 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002,
5208 0x1440fffc, 0x00000000, 0x12600003, 0x00000000, 0x0e0004c0, 0x00000000,
5209 0x8fbf0028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x03e00008,
5210 0x27bd0030, 0x8f634450, 0x3c040800, 0x24841b88, 0x8c820000, 0x00031c02,
5211 0x0043102b, 0x14400007, 0x3c038000, 0x8c840004, 0x8f624450, 0x00021c02,
5212 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024,
5213 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3c024000,
5214 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00000000,
5215 0x03e00008, 0x00000000, 0x27bdffe0, 0x00805821, 0x14c00011, 0x256e0008,
5216 0x3c020800, 0x8c4223f4, 0x10400007, 0x24020016, 0x3c010800, 0xa42223d2,
5217 0x2402002a, 0x3c010800, 0x0a000364, 0xa42223d4, 0x8d670010, 0x00071402,
5218 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42723d4, 0x3c040800, 0x948423d4,
5219 0x3c030800, 0x946323d2, 0x95cf0006, 0x3c020800, 0x944223d0, 0x00832023,
5220 0x01e2c023, 0x3065ffff, 0x24a20028, 0x01c24821, 0x3082ffff, 0x14c0001a,
5221 0x01226021, 0x9582000c, 0x3042003f, 0x3c010800, 0xa42223d6, 0x95820004,
5222 0x95830006, 0x3c010800, 0xac2023e4, 0x3c010800, 0xac2023e8, 0x00021400,
5223 0x00431025, 0x3c010800, 0xac221bc0, 0x95220004, 0x3c010800, 0xa4221bc4,
5224 0x95230002, 0x01e51023, 0x0043102a, 0x10400010, 0x24020001, 0x3c010800,
5225 0x0a000398, 0xac2223f8, 0x3c030800, 0x8c6323e8, 0x3c020800, 0x94421bc4,
5226 0x00431021, 0xa5220004, 0x3c020800, 0x94421bc0, 0xa5820004, 0x3c020800,
5227 0x8c421bc0, 0xa5820006, 0x3c020800, 0x8c4223f0, 0x3c0d0800, 0x8dad23e4,
5228 0x3c0a0800, 0x144000e5, 0x8d4a23e8, 0x3c020800, 0x94421bc4, 0x004a1821,
5229 0x3063ffff, 0x0062182b, 0x24020002, 0x10c2000d, 0x01435023, 0x3c020800,
5230 0x944223d6, 0x30420009, 0x10400008, 0x00000000, 0x9582000c, 0x3042fff6,
5231 0xa582000c, 0x3c020800, 0x944223d6, 0x30420009, 0x01a26823, 0x3c020800,
5232 0x8c4223f8, 0x1040004a, 0x01203821, 0x3c020800, 0x944223d2, 0x00004021,
5233 0xa520000a, 0x01e21023, 0xa5220002, 0x3082ffff, 0x00021042, 0x18400008,
5234 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021, 0x0103102a,
5235 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061402,
5236 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021, 0x2527000c,
5237 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004, 0x1440fffb,
5238 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023, 0x01803821,
5239 0x3082ffff, 0xa4e00010, 0x00621821, 0x00021042, 0x18400010, 0x00c33021,
5240 0x00404821, 0x94e20000, 0x24e70002, 0x00c23021, 0x30e2007f, 0x14400006,
5241 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80, 0x00625824, 0x25670008,
5242 0x0109102a, 0x1440fff3, 0x00000000, 0x30820001, 0x10400005, 0x00061c02,
5243 0xa0e00001, 0x94e20000, 0x00c23021, 0x00061c02, 0x30c2ffff, 0x00623021,
5244 0x00061402, 0x00c23021, 0x0a00047d, 0x30c6ffff, 0x24020002, 0x14c20081,
5245 0x00000000, 0x3c020800, 0x8c42240c, 0x14400007, 0x00000000, 0x3c020800,
5246 0x944223d2, 0x95230002, 0x01e21023, 0x10620077, 0x00000000, 0x3c020800,
5247 0x944223d2, 0x01e21023, 0xa5220002, 0x3c020800, 0x8c42240c, 0x1040001a,
5248 0x31e3ffff, 0x8dc70010, 0x3c020800, 0x94421b96, 0x00e04021, 0x00072c02,
5249 0x00aa2021, 0x00431023, 0x00823823, 0x00072402, 0x30e2ffff, 0x00823821,
5250 0x00071027, 0xa522000a, 0x3102ffff, 0x3c040800, 0x948423d4, 0x00453023,
5251 0x00e02821, 0x00641823, 0x006d1821, 0x00c33021, 0x00061c02, 0x30c2ffff,
5252 0x0a00047d, 0x00623021, 0x01203821, 0x00004021, 0x3082ffff, 0x00021042,
5253 0x18400008, 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021,
5254 0x0103102a, 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021,
5255 0x00061402, 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021,
5256 0x2527000c, 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004,
5257 0x1440fffb, 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023,
5258 0x01803821, 0x3082ffff, 0xa4e00010, 0x3c040800, 0x948423d4, 0x00621821,
5259 0x00c33021, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061c02, 0x3c020800,
5260 0x944223d0, 0x00c34821, 0x00441023, 0x00021fc2, 0x00431021, 0x00021043,
5261 0x18400010, 0x00003021, 0x00402021, 0x94e20000, 0x24e70002, 0x00c23021,
5262 0x30e2007f, 0x14400006, 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80,
5263 0x00625824, 0x25670008, 0x0104102a, 0x1440fff3, 0x00000000, 0x3c020800,
5264 0x944223ec, 0x00c23021, 0x3122ffff, 0x00c23021, 0x00061c02, 0x30c2ffff,
5265 0x00623021, 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010,
5266 0xadc00014, 0x0a00049d, 0xadc00000, 0x8dc70010, 0x00e04021, 0x11400007,
5267 0x00072c02, 0x00aa3021, 0x00061402, 0x30c3ffff, 0x00433021, 0x00061402,
5268 0x00c22821, 0x00051027, 0xa522000a, 0x3c030800, 0x946323d4, 0x3102ffff,
5269 0x01e21021, 0x00433023, 0x00cd3021, 0x00061c02, 0x30c2ffff, 0x00623021,
5270 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010, 0x3102ffff,
5271 0x00051c00, 0x00431025, 0xadc20010, 0x3c020800, 0x8c4223f4, 0x10400005,
5272 0x2de205eb, 0x14400002, 0x25e2fff2, 0x34028870, 0xa5c20034, 0x3c030800,
5273 0x246323e8, 0x8c620000, 0x24420001, 0xac620000, 0x3c040800, 0x8c8423e4,
5274 0x3c020800, 0x8c421bc0, 0x3303ffff, 0x00832021, 0x00431821, 0x0062102b,
5275 0x3c010800, 0xac2423e4, 0x10400003, 0x2482ffff, 0x3c010800, 0xac2223e4,
5276 0x3c010800, 0xac231bc0, 0x03e00008, 0x27bd0020, 0x27bdffb8, 0x3c050800,
5277 0x24a51b96, 0xafbf0044, 0xafbe0040, 0xafb7003c, 0xafb60038, 0xafb50034,
5278 0xafb40030, 0xafb3002c, 0xafb20028, 0xafb10024, 0xafb00020, 0x94a90000,
5279 0x3c020800, 0x944223d0, 0x3c030800, 0x8c631bb0, 0x3c040800, 0x8c841bac,
5280 0x01221023, 0x0064182a, 0xa7a9001e, 0x106000be, 0xa7a20016, 0x24be0022,
5281 0x97b6001e, 0x24b3001a, 0x24b70016, 0x8fc20000, 0x14400008, 0x00000000,
5282 0x8fc2fff8, 0x97a30016, 0x8fc4fff4, 0x00431021, 0x0082202a, 0x148000b0,
5283 0x00000000, 0x97d50818, 0x32a2ffff, 0x104000a3, 0x00009021, 0x0040a021,
5284 0x00008821, 0x0e000625, 0x00000000, 0x00403021, 0x14c00007, 0x00000000,
5285 0x3c020800, 0x8c4223dc, 0x24420001, 0x3c010800, 0x0a000596, 0xac2223dc,
5286 0x3c100800, 0x02118021, 0x8e101bc8, 0x9608000a, 0x31020040, 0x10400005,
5287 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x31020080,
5288 0x54400001, 0x34e70010, 0x3c020800, 0x00511021, 0x8c421bd0, 0x3c030800,
5289 0x00711821, 0x8c631bd4, 0x00021500, 0x00031c00, 0x00431025, 0xacc20014,
5290 0x96040008, 0x3242ffff, 0x00821021, 0x0282102a, 0x14400002, 0x02b22823,
5291 0x00802821, 0x8e020000, 0x02459021, 0xacc20000, 0x8e020004, 0x00c02021,
5292 0x26310010, 0xac820004, 0x30e2ffff, 0xac800008, 0xa485000e, 0xac820010,
5293 0x24020305, 0x0e0005a2, 0xa482000c, 0x3242ffff, 0x0054102b, 0x1440ffc5,
5294 0x3242ffff, 0x0a00058e, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a,
5295 0x10400067, 0x00000000, 0x8e62fff0, 0x00028900, 0x3c100800, 0x02118021,
5296 0x0e000625, 0x8e101bc8, 0x00403021, 0x14c00005, 0x00000000, 0x8e62082c,
5297 0x24420001, 0x0a000596, 0xae62082c, 0x9608000a, 0x31020040, 0x10400005,
5298 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x3c020800,
5299 0x00511021, 0x8c421bd0, 0x3c030800, 0x00711821, 0x8c631bd4, 0x00021500,
5300 0x00031c00, 0x00431025, 0xacc20014, 0x8e63fff4, 0x96020008, 0x00432023,
5301 0x3242ffff, 0x3083ffff, 0x00431021, 0x02c2102a, 0x10400003, 0x00802821,
5302 0x97a9001e, 0x01322823, 0x8e620000, 0x30a4ffff, 0x00441021, 0xae620000,
5303 0xa4c5000e, 0x8e020000, 0xacc20000, 0x8e020004, 0x8e63fff4, 0x00431021,
5304 0xacc20004, 0x8e63fff4, 0x96020008, 0x00641821, 0x0062102a, 0x14400006,
5305 0x02459021, 0x8e62fff0, 0xae60fff4, 0x24420001, 0x0a000571, 0xae62fff0,
5306 0xae63fff4, 0xacc00008, 0x3242ffff, 0x10560003, 0x31020004, 0x10400006,
5307 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x34e70020, 0x24020905,
5308 0xa4c2000c, 0x8ee30000, 0x8ee20004, 0x14620007, 0x3c02b49a, 0x8ee20860,
5309 0x54400001, 0x34e70400, 0x3c024b65, 0x0a000588, 0x34427654, 0x344289ab,
5310 0xacc2001c, 0x30e2ffff, 0xacc20010, 0x0e0005a2, 0x00c02021, 0x3242ffff,
5311 0x0056102b, 0x1440ff9b, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a,
5312 0x1440ff48, 0x00000000, 0x8fbf0044, 0x8fbe0040, 0x8fb7003c, 0x8fb60038,
5313 0x8fb50034, 0x8fb40030, 0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020,
5314 0x03e00008, 0x27bd0048, 0x27bdffe8, 0xafbf0014, 0xafb00010, 0x8f624450,
5315 0x8f634410, 0x0a0005b1, 0x00808021, 0x8f626820, 0x30422000, 0x10400003,
5316 0x00000000, 0x0e0001f0, 0x00002021, 0x8f624450, 0x8f634410, 0x3042ffff,
5317 0x0043102b, 0x1440fff5, 0x00000000, 0x8f630c14, 0x3063000f, 0x2c620002,
5318 0x1440000b, 0x00000000, 0x8f630c14, 0x3c020800, 0x8c421b40, 0x3063000f,
5319 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7, 0x00000000,
5320 0xaf705c18, 0x8f625c10, 0x30420002, 0x10400009, 0x00000000, 0x8f626820,
5321 0x30422000, 0x1040fff8, 0x00000000, 0x0e0001f0, 0x00002021, 0x0a0005c4,
5322 0x00000000, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000,
5323 0x00000000, 0x00000000, 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010,
5324 0xaf60680c, 0x8f626804, 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50,
5325 0x3c010800, 0xac221b54, 0x24020b78, 0x3c010800, 0xac221b64, 0x34630002,
5326 0xaf634000, 0x0e000605, 0x00808021, 0x3c010800, 0xa0221b68, 0x304200ff,
5327 0x24030002, 0x14430005, 0x00000000, 0x3c020800, 0x8c421b54, 0x0a0005f8,
5328 0xac5000c0, 0x3c020800, 0x8c421b54, 0xac5000bc, 0x8f624434, 0x8f634438,
5329 0x8f644410, 0x3c010800, 0xac221b5c, 0x3c010800, 0xac231b6c, 0x3c010800,
5330 0xac241b58, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x3c040800,
5331 0x8c870000, 0x3c03aa55, 0x3463aa55, 0x3c06c003, 0xac830000, 0x8cc20000,
5332 0x14430007, 0x24050002, 0x3c0355aa, 0x346355aa, 0xac830000, 0x8cc20000,
5333 0x50430001, 0x24050001, 0x3c020800, 0xac470000, 0x03e00008, 0x00a01021,
5334 0x27bdfff8, 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe,
5335 0x00000000, 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008,
5336 0x27bd0008, 0x8f634450, 0x3c020800, 0x8c421b5c, 0x00031c02, 0x0043102b,
5337 0x14400008, 0x3c038000, 0x3c040800, 0x8c841b6c, 0x8f624450, 0x00021c02,
5338 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024,
5339 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff,
5340 0x2442e000, 0x2c422001, 0x14400003, 0x3c024000, 0x0a000648, 0x2402ffff,
5341 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021,
5342 0x03e00008, 0x00000000, 0x8f624450, 0x3c030800, 0x8c631b58, 0x0a000651,
5343 0x3042ffff, 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000,
5344 0x03e00008, 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040800, 0x24841af0,
5345 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014,
5346 0x0a000660, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000,
5347 0x00000000, 0x00000000, 0x3c020800, 0x34423000, 0x3c030800, 0x34633000,
5348 0x3c040800, 0x348437ff, 0x3c010800, 0xac221b74, 0x24020040, 0x3c010800,
5349 0xac221b78, 0x3c010800, 0xac201b70, 0xac600000, 0x24630004, 0x0083102b,
5350 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000, 0x00804821, 0x8faa0010,
5351 0x3c020800, 0x8c421b70, 0x3c040800, 0x8c841b78, 0x8fab0014, 0x24430001,
5352 0x0044102b, 0x3c010800, 0xac231b70, 0x14400003, 0x00004021, 0x3c010800,
5353 0xac201b70, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74, 0x91240000,
5354 0x00021140, 0x00431021, 0x00481021, 0x25080001, 0xa0440000, 0x29020008,
5355 0x1440fff4, 0x25290001, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74,
5356 0x8f64680c, 0x00021140, 0x00431021, 0xac440008, 0xac45000c, 0xac460010,
5357 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c, 0x00000000, 0x00000000,
5358};
5359
5360static u32 tg3TsoFwRodata[] = {
5361 0x4d61696e, 0x43707542, 0x00000000, 0x4d61696e, 0x43707541, 0x00000000,
5362 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x496e0000, 0x73746b6f,
5363 0x66662a2a, 0x00000000, 0x53774576, 0x656e7430, 0x00000000, 0x00000000,
5364 0x00000000, 0x00000000, 0x66617461, 0x6c457272, 0x00000000, 0x00000000,
5365 0x00000000,
5366};
5367
5368static u32 tg3TsoFwData[] = {
5369 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x362e3000, 0x00000000,
5370 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
5371 0x00000000,
5372};
5373
5374/* 5705 needs a special version of the TSO firmware. */
5375#define TG3_TSO5_FW_RELEASE_MAJOR 0x1
5376#define TG3_TSO5_FW_RELASE_MINOR 0x2
5377#define TG3_TSO5_FW_RELEASE_FIX 0x0
5378#define TG3_TSO5_FW_START_ADDR 0x00010000
5379#define TG3_TSO5_FW_TEXT_ADDR 0x00010000
5380#define TG3_TSO5_FW_TEXT_LEN 0xe90
5381#define TG3_TSO5_FW_RODATA_ADDR 0x00010e90
5382#define TG3_TSO5_FW_RODATA_LEN 0x50
5383#define TG3_TSO5_FW_DATA_ADDR 0x00010f00
5384#define TG3_TSO5_FW_DATA_LEN 0x20
5385#define TG3_TSO5_FW_SBSS_ADDR 0x00010f20
5386#define TG3_TSO5_FW_SBSS_LEN 0x28
5387#define TG3_TSO5_FW_BSS_ADDR 0x00010f50
5388#define TG3_TSO5_FW_BSS_LEN 0x88
5389
5390static u32 tg3Tso5FwText[(TG3_TSO5_FW_TEXT_LEN / 4) + 1] = {
5391 0x0c004003, 0x00000000, 0x00010f04, 0x00000000, 0x10000003, 0x00000000,
5392 0x0000000d, 0x0000000d, 0x3c1d0001, 0x37bde000, 0x03a0f021, 0x3c100001,
5393 0x26100000, 0x0c004010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe,
5394 0xafbf0018, 0x0c0042e8, 0x34840002, 0x0c004364, 0x00000000, 0x3c030001,
5395 0x90630f34, 0x24020002, 0x3c040001, 0x24840e9c, 0x14620003, 0x24050001,
5396 0x3c040001, 0x24840e90, 0x24060002, 0x00003821, 0xafa00010, 0x0c004378,
5397 0xafa00014, 0x0c00402c, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020,
5398 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c, 0xafb20018, 0xafb10014,
5399 0x0c0042d4, 0xafb00010, 0x3c128000, 0x24110001, 0x8f706810, 0x32020400,
5400 0x10400007, 0x00000000, 0x8f641008, 0x00921024, 0x14400003, 0x00000000,
5401 0x0c004064, 0x00000000, 0x3c020001, 0x90420f56, 0x10510003, 0x32020200,
5402 0x1040fff1, 0x00000000, 0x0c0041b4, 0x00000000, 0x08004034, 0x00000000,
5403 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020,
5404 0x27bdffe0, 0x3c040001, 0x24840eb0, 0x00002821, 0x00003021, 0x00003821,
5405 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130,
5406 0xaf625000, 0x3c010001, 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018,
5407 0x03e00008, 0x27bd0020, 0x00000000, 0x00000000, 0x3c030001, 0x24630f60,
5408 0x90620000, 0x27bdfff0, 0x14400003, 0x0080c021, 0x08004073, 0x00004821,
5409 0x3c022000, 0x03021024, 0x10400003, 0x24090002, 0x08004073, 0xa0600000,
5410 0x24090001, 0x00181040, 0x30431f80, 0x346f8008, 0x1520004b, 0x25eb0028,
5411 0x3c040001, 0x00832021, 0x8c848010, 0x3c050001, 0x24a50f7a, 0x00041402,
5412 0xa0a20000, 0x3c010001, 0xa0240f7b, 0x3c020001, 0x00431021, 0x94428014,
5413 0x3c010001, 0xa0220f7c, 0x3c0c0001, 0x01836021, 0x8d8c8018, 0x304200ff,
5414 0x24420008, 0x000220c3, 0x24020001, 0x3c010001, 0xa0220f60, 0x0124102b,
5415 0x1040000c, 0x00003821, 0x24a6000e, 0x01602821, 0x8ca20000, 0x8ca30004,
5416 0x24a50008, 0x24e70001, 0xacc20000, 0xacc30004, 0x00e4102b, 0x1440fff8,
5417 0x24c60008, 0x00003821, 0x3c080001, 0x25080f7b, 0x91060000, 0x3c020001,
5418 0x90420f7c, 0x2503000d, 0x00c32821, 0x00461023, 0x00021fc2, 0x00431021,
5419 0x00021043, 0x1840000c, 0x00002021, 0x91020001, 0x00461023, 0x00021fc2,
5420 0x00431021, 0x00021843, 0x94a20000, 0x24e70001, 0x00822021, 0x00e3102a,
5421 0x1440fffb, 0x24a50002, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402,
5422 0x00822021, 0x3c02ffff, 0x01821024, 0x3083ffff, 0x00431025, 0x3c010001,
5423 0x080040fa, 0xac220f80, 0x3c050001, 0x24a50f7c, 0x90a20000, 0x3c0c0001,
5424 0x01836021, 0x8d8c8018, 0x000220c2, 0x1080000e, 0x00003821, 0x01603021,
5425 0x24a5000c, 0x8ca20000, 0x8ca30004, 0x24a50008, 0x24e70001, 0xacc20000,
5426 0xacc30004, 0x00e4102b, 0x1440fff8, 0x24c60008, 0x3c050001, 0x24a50f7c,
5427 0x90a20000, 0x30430007, 0x24020004, 0x10620011, 0x28620005, 0x10400005,
5428 0x24020002, 0x10620008, 0x000710c0, 0x080040fa, 0x00000000, 0x24020006,
5429 0x1062000e, 0x000710c0, 0x080040fa, 0x00000000, 0x00a21821, 0x9463000c,
5430 0x004b1021, 0x080040fa, 0xa4430000, 0x000710c0, 0x00a21821, 0x8c63000c,
5431 0x004b1021, 0x080040fa, 0xac430000, 0x00a21821, 0x8c63000c, 0x004b2021,
5432 0x00a21021, 0xac830000, 0x94420010, 0xa4820004, 0x95e70006, 0x3c020001,
5433 0x90420f7c, 0x3c030001, 0x90630f7a, 0x00e2c823, 0x3c020001, 0x90420f7b,
5434 0x24630028, 0x01e34021, 0x24420028, 0x15200012, 0x01e23021, 0x94c2000c,
5435 0x3c010001, 0xa4220f78, 0x94c20004, 0x94c30006, 0x3c010001, 0xa4200f76,
5436 0x3c010001, 0xa4200f72, 0x00021400, 0x00431025, 0x3c010001, 0xac220f6c,
5437 0x95020004, 0x3c010001, 0x08004124, 0xa4220f70, 0x3c020001, 0x94420f70,
5438 0x3c030001, 0x94630f72, 0x00431021, 0xa5020004, 0x3c020001, 0x94420f6c,
5439 0xa4c20004, 0x3c020001, 0x8c420f6c, 0xa4c20006, 0x3c040001, 0x94840f72,
5440 0x3c020001, 0x94420f70, 0x3c0a0001, 0x954a0f76, 0x00441821, 0x3063ffff,
5441 0x0062182a, 0x24020002, 0x1122000b, 0x00832023, 0x3c030001, 0x94630f78,
5442 0x30620009, 0x10400006, 0x3062fff6, 0xa4c2000c, 0x3c020001, 0x94420f78,
5443 0x30420009, 0x01425023, 0x24020001, 0x1122001b, 0x29220002, 0x50400005,
5444 0x24020002, 0x11200007, 0x31a2ffff, 0x08004197, 0x00000000, 0x1122001d,
5445 0x24020016, 0x08004197, 0x31a2ffff, 0x3c0e0001, 0x95ce0f80, 0x10800005,
5446 0x01806821, 0x01c42021, 0x00041c02, 0x3082ffff, 0x00627021, 0x000e1027,
5447 0xa502000a, 0x3c030001, 0x90630f7b, 0x31a2ffff, 0x00e21021, 0x0800418d,
5448 0x00432023, 0x3c020001, 0x94420f80, 0x00442021, 0x00041c02, 0x3082ffff,
5449 0x00622021, 0x00807021, 0x00041027, 0x08004185, 0xa502000a, 0x3c050001,
5450 0x24a50f7a, 0x90a30000, 0x14620002, 0x24e2fff2, 0xa5e20034, 0x90a20000,
5451 0x00e21023, 0xa5020002, 0x3c030001, 0x94630f80, 0x3c020001, 0x94420f5a,
5452 0x30e5ffff, 0x00641821, 0x00451023, 0x00622023, 0x00041c02, 0x3082ffff,
5453 0x00622021, 0x00041027, 0xa502000a, 0x3c030001, 0x90630f7c, 0x24620001,
5454 0x14a20005, 0x00807021, 0x01631021, 0x90420000, 0x08004185, 0x00026200,
5455 0x24620002, 0x14a20003, 0x306200fe, 0x004b1021, 0x944c0000, 0x3c020001,
5456 0x94420f82, 0x3183ffff, 0x3c040001, 0x90840f7b, 0x00431021, 0x00e21021,
5457 0x00442023, 0x008a2021, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402,
5458 0x00822021, 0x00806821, 0x00041027, 0xa4c20010, 0x31a2ffff, 0x000e1c00,
5459 0x00431025, 0x3c040001, 0x24840f72, 0xade20010, 0x94820000, 0x3c050001,
5460 0x94a50f76, 0x3c030001, 0x8c630f6c, 0x24420001, 0x00b92821, 0xa4820000,
5461 0x3322ffff, 0x00622021, 0x0083182b, 0x3c010001, 0xa4250f76, 0x10600003,
5462 0x24a2ffff, 0x3c010001, 0xa4220f76, 0x3c024000, 0x03021025, 0x3c010001,
5463 0xac240f6c, 0xaf621008, 0x03e00008, 0x27bd0010, 0x3c030001, 0x90630f56,
5464 0x27bdffe8, 0x24020001, 0xafbf0014, 0x10620026, 0xafb00010, 0x8f620cf4,
5465 0x2442ffff, 0x3042007f, 0x00021100, 0x8c434000, 0x3c010001, 0xac230f64,
5466 0x8c434008, 0x24444000, 0x8c5c4004, 0x30620040, 0x14400002, 0x24020088,
5467 0x24020008, 0x3c010001, 0xa4220f68, 0x30620004, 0x10400005, 0x24020001,
5468 0x3c010001, 0xa0220f57, 0x080041d5, 0x00031402, 0x3c010001, 0xa0200f57,
5469 0x00031402, 0x3c010001, 0xa4220f54, 0x9483000c, 0x24020001, 0x3c010001,
5470 0xa4200f50, 0x3c010001, 0xa0220f56, 0x3c010001, 0xa4230f62, 0x24020001,
5471 0x1342001e, 0x00000000, 0x13400005, 0x24020003, 0x13420067, 0x00000000,
5472 0x080042cf, 0x00000000, 0x3c020001, 0x94420f62, 0x241a0001, 0x3c010001,
5473 0xa4200f5e, 0x3c010001, 0xa4200f52, 0x304407ff, 0x00021bc2, 0x00031823,
5474 0x3063003e, 0x34630036, 0x00021242, 0x3042003c, 0x00621821, 0x3c010001,
5475 0xa4240f58, 0x00832021, 0x24630030, 0x3c010001, 0xa4240f5a, 0x3c010001,
5476 0xa4230f5c, 0x3c060001, 0x24c60f52, 0x94c50000, 0x94c30002, 0x3c040001,
5477 0x94840f5a, 0x00651021, 0x0044102a, 0x10400013, 0x3c108000, 0x00a31021,
5478 0xa4c20000, 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008,
5479 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4,
5480 0x00501024, 0x104000b7, 0x00000000, 0x0800420f, 0x00000000, 0x3c030001,
5481 0x94630f50, 0x00851023, 0xa4c40000, 0x00621821, 0x3042ffff, 0x3c010001,
5482 0xa4230f50, 0xaf620ce8, 0x3c020001, 0x94420f68, 0x34420024, 0xaf620cec,
5483 0x94c30002, 0x3c020001, 0x94420f50, 0x14620012, 0x3c028000, 0x3c108000,
5484 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008, 0x00901024,
5485 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024,
5486 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003, 0xaf620cf4, 0x3c108000,
5487 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000,
5488 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003,
5489 0x3c070001, 0x24e70f50, 0x94e20000, 0x03821021, 0xaf620ce0, 0x3c020001,
5490 0x8c420f64, 0xaf620ce4, 0x3c050001, 0x94a50f54, 0x94e30000, 0x3c040001,
5491 0x94840f58, 0x3c020001, 0x94420f5e, 0x00a32823, 0x00822023, 0x30a6ffff,
5492 0x3083ffff, 0x00c3102b, 0x14400043, 0x00000000, 0x3c020001, 0x94420f5c,
5493 0x00021400, 0x00621025, 0xaf620ce8, 0x94e20000, 0x3c030001, 0x94630f54,
5494 0x00441021, 0xa4e20000, 0x3042ffff, 0x14430021, 0x3c020008, 0x3c020001,
5495 0x90420f57, 0x10400006, 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624,
5496 0x0800427c, 0x0000d021, 0x3c020001, 0x94420f68, 0x3c030008, 0x34630624,
5497 0x00431025, 0xaf620cec, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001,
5498 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064,
5499 0x00000000, 0x8f620cf4, 0x00501024, 0x10400015, 0x00000000, 0x08004283,
5500 0x00000000, 0x3c030001, 0x94630f68, 0x34420624, 0x3c108000, 0x00621825,
5501 0x3c028000, 0xaf630cec, 0xaf620cf4, 0x8f641008, 0x00901024, 0x14400003,
5502 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7,
5503 0x00000000, 0x3c010001, 0x080042cf, 0xa4200f5e, 0x3c020001, 0x94420f5c,
5504 0x00021400, 0x00c21025, 0xaf620ce8, 0x3c020001, 0x90420f57, 0x10400009,
5505 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624, 0x0000d021, 0x00431025,
5506 0xaf620cec, 0x080042c1, 0x3c108000, 0x3c020001, 0x94420f68, 0x3c030008,
5507 0x34630604, 0x00431025, 0xaf620cec, 0x3c020001, 0x94420f5e, 0x00451021,
5508 0x3c010001, 0xa4220f5e, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001,
5509 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064,
5510 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x8fbf0014,
5511 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000, 0x27bdffe0, 0x3c040001,
5512 0x24840ec0, 0x00002821, 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010,
5513 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130, 0xaf625000, 0x3c010001,
5514 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018, 0x03e00008, 0x27bd0020,
5515 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010, 0xaf60680c, 0x8f626804,
5516 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50, 0x3c010001, 0xac220f20,
5517 0x24020b78, 0x3c010001, 0xac220f30, 0x34630002, 0xaf634000, 0x0c004315,
5518 0x00808021, 0x3c010001, 0xa0220f34, 0x304200ff, 0x24030002, 0x14430005,
5519 0x00000000, 0x3c020001, 0x8c420f20, 0x08004308, 0xac5000c0, 0x3c020001,
5520 0x8c420f20, 0xac5000bc, 0x8f624434, 0x8f634438, 0x8f644410, 0x3c010001,
5521 0xac220f28, 0x3c010001, 0xac230f38, 0x3c010001, 0xac240f24, 0x8fbf0014,
5522 0x8fb00010, 0x03e00008, 0x27bd0018, 0x03e00008, 0x24020001, 0x27bdfff8,
5523 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe, 0x00000000,
5524 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008, 0x27bd0008,
5525 0x8f634450, 0x3c020001, 0x8c420f28, 0x00031c02, 0x0043102b, 0x14400008,
5526 0x3c038000, 0x3c040001, 0x8c840f38, 0x8f624450, 0x00021c02, 0x0083102b,
5527 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024, 0x1440fffd,
5528 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff, 0x2442e000,
5529 0x2c422001, 0x14400003, 0x3c024000, 0x08004347, 0x2402ffff, 0x00822025,
5530 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021, 0x03e00008,
5531 0x00000000, 0x8f624450, 0x3c030001, 0x8c630f24, 0x08004350, 0x3042ffff,
5532 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000, 0x03e00008,
5533 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040001, 0x24840ed0, 0x00003021,
5534 0x00003821, 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0800435f,
5535 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x3c020001, 0x3442d600,
5536 0x3c030001, 0x3463d600, 0x3c040001, 0x3484ddff, 0x3c010001, 0xac220f40,
5537 0x24020040, 0x3c010001, 0xac220f44, 0x3c010001, 0xac200f3c, 0xac600000,
5538 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000,
5539 0x00804821, 0x8faa0010, 0x3c020001, 0x8c420f3c, 0x3c040001, 0x8c840f44,
5540 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010001, 0xac230f3c, 0x14400003,
5541 0x00004021, 0x3c010001, 0xac200f3c, 0x3c020001, 0x8c420f3c, 0x3c030001,
5542 0x8c630f40, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001,
5543 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020001, 0x8c420f3c,
5544 0x3c030001, 0x8c630f40, 0x8f64680c, 0x00021140, 0x00431021, 0xac440008,
5545 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c,
5546 0x00000000, 0x00000000, 0x00000000,
5547};
5548
5549static u32 tg3Tso5FwRodata[(TG3_TSO5_FW_RODATA_LEN / 4) + 1] = {
5550 0x4d61696e, 0x43707542, 0x00000000, 0x4d61696e, 0x43707541, 0x00000000,
5551 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000,
5552 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000, 0x66617461, 0x6c457272,
5553 0x00000000, 0x00000000, 0x00000000,
5554};
5555
5556static u32 tg3Tso5FwData[(TG3_TSO5_FW_DATA_LEN / 4) + 1] = {
5557 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x322e3000, 0x00000000,
5558 0x00000000, 0x00000000, 0x00000000,
5559};
5560
5561/* tp->lock is held. */
5562static int tg3_load_tso_firmware(struct tg3 *tp)
5563{
5564 struct fw_info info;
5565 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
5566 int err, i;
5567
5568 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
5569 return 0;
5570
5571 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
5572 info.text_base = TG3_TSO5_FW_TEXT_ADDR;
5573 info.text_len = TG3_TSO5_FW_TEXT_LEN;
5574 info.text_data = &tg3Tso5FwText[0];
5575 info.rodata_base = TG3_TSO5_FW_RODATA_ADDR;
5576 info.rodata_len = TG3_TSO5_FW_RODATA_LEN;
5577 info.rodata_data = &tg3Tso5FwRodata[0];
5578 info.data_base = TG3_TSO5_FW_DATA_ADDR;
5579 info.data_len = TG3_TSO5_FW_DATA_LEN;
5580 info.data_data = &tg3Tso5FwData[0];
5581 cpu_base = RX_CPU_BASE;
5582 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
5583 cpu_scratch_size = (info.text_len +
5584 info.rodata_len +
5585 info.data_len +
5586 TG3_TSO5_FW_SBSS_LEN +
5587 TG3_TSO5_FW_BSS_LEN);
5588 } else {
5589 info.text_base = TG3_TSO_FW_TEXT_ADDR;
5590 info.text_len = TG3_TSO_FW_TEXT_LEN;
5591 info.text_data = &tg3TsoFwText[0];
5592 info.rodata_base = TG3_TSO_FW_RODATA_ADDR;
5593 info.rodata_len = TG3_TSO_FW_RODATA_LEN;
5594 info.rodata_data = &tg3TsoFwRodata[0];
5595 info.data_base = TG3_TSO_FW_DATA_ADDR;
5596 info.data_len = TG3_TSO_FW_DATA_LEN;
5597 info.data_data = &tg3TsoFwData[0];
5598 cpu_base = TX_CPU_BASE;
5599 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
5600 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
5601 }
5602
5603 err = tg3_load_firmware_cpu(tp, cpu_base,
5604 cpu_scratch_base, cpu_scratch_size,
5605 &info);
5606 if (err)
5607 return err;
5608
5609 /* Now startup the cpu. */
5610 tw32(cpu_base + CPU_STATE, 0xffffffff);
5611 tw32_f(cpu_base + CPU_PC, info.text_base);
5612
5613 for (i = 0; i < 5; i++) {
5614 if (tr32(cpu_base + CPU_PC) == info.text_base)
5615 break;
5616 tw32(cpu_base + CPU_STATE, 0xffffffff);
5617 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT);
5618 tw32_f(cpu_base + CPU_PC, info.text_base);
5619 udelay(1000);
5620 }
5621 if (i >= 5) {
5622 printk(KERN_ERR PFX "tg3_load_tso_firmware fails for %s "
5623 "to set CPU PC, is %08x should be %08x\n",
5624 tp->dev->name, tr32(cpu_base + CPU_PC),
5625 info.text_base);
5626 return -ENODEV;
5627 }
5628 tw32(cpu_base + CPU_STATE, 0xffffffff);
5629 tw32_f(cpu_base + CPU_MODE, 0x00000000);
5630 return 0;
5631}
5632
5633#endif /* TG3_TSO_SUPPORT != 0 */
5634
5635/* tp->lock is held. */
5636static void __tg3_set_mac_addr(struct tg3 *tp)
5637{
5638 u32 addr_high, addr_low;
5639 int i;
5640
5641 addr_high = ((tp->dev->dev_addr[0] << 8) |
5642 tp->dev->dev_addr[1]);
5643 addr_low = ((tp->dev->dev_addr[2] << 24) |
5644 (tp->dev->dev_addr[3] << 16) |
5645 (tp->dev->dev_addr[4] << 8) |
5646 (tp->dev->dev_addr[5] << 0));
5647 for (i = 0; i < 4; i++) {
5648 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
5649 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
5650 }
5651
5652 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
5653 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
5654 for (i = 0; i < 12; i++) {
5655 tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
5656 tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
5657 }
5658 }
5659
5660 addr_high = (tp->dev->dev_addr[0] +
5661 tp->dev->dev_addr[1] +
5662 tp->dev->dev_addr[2] +
5663 tp->dev->dev_addr[3] +
5664 tp->dev->dev_addr[4] +
5665 tp->dev->dev_addr[5]) &
5666 TX_BACKOFF_SEED_MASK;
5667 tw32(MAC_TX_BACKOFF_SEED, addr_high);
5668}
5669
5670static int tg3_set_mac_addr(struct net_device *dev, void *p)
5671{
5672 struct tg3 *tp = netdev_priv(dev);
5673 struct sockaddr *addr = p;
5674
f9804ddb
MC
5675 if (!is_valid_ether_addr(addr->sa_data))
5676 return -EINVAL;
5677
1da177e4
LT
5678 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
5679
e75f7c90
MC
5680 if (!netif_running(dev))
5681 return 0;
5682
f47c11ee 5683 spin_lock_bh(&tp->lock);
1da177e4 5684 __tg3_set_mac_addr(tp);
f47c11ee 5685 spin_unlock_bh(&tp->lock);
1da177e4
LT
5686
5687 return 0;
5688}
5689
5690/* tp->lock is held. */
5691static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
5692 dma_addr_t mapping, u32 maxlen_flags,
5693 u32 nic_addr)
5694{
5695 tg3_write_mem(tp,
5696 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
5697 ((u64) mapping >> 32));
5698 tg3_write_mem(tp,
5699 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
5700 ((u64) mapping & 0xffffffff));
5701 tg3_write_mem(tp,
5702 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
5703 maxlen_flags);
5704
5705 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
5706 tg3_write_mem(tp,
5707 (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
5708 nic_addr);
5709}
5710
5711static void __tg3_set_rx_mode(struct net_device *);
d244c892 5712static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
15f9850d
DM
5713{
5714 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
5715 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
5716 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
5717 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
5718 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
5719 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
5720 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
5721 }
5722 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
5723 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
5724 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
5725 u32 val = ec->stats_block_coalesce_usecs;
5726
5727 if (!netif_carrier_ok(tp->dev))
5728 val = 0;
5729
5730 tw32(HOSTCC_STAT_COAL_TICKS, val);
5731 }
5732}
1da177e4
LT
5733
5734/* tp->lock is held. */
5735static int tg3_reset_hw(struct tg3 *tp)
5736{
5737 u32 val, rdmac_mode;
5738 int i, err, limit;
5739
5740 tg3_disable_ints(tp);
5741
5742 tg3_stop_fw(tp);
5743
5744 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
5745
5746 if (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) {
e6de8ad1 5747 tg3_abort_hw(tp, 1);
1da177e4
LT
5748 }
5749
d4d2c558
MC
5750 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
5751 tg3_phy_reset(tp);
5752
1da177e4
LT
5753 err = tg3_chip_reset(tp);
5754 if (err)
5755 return err;
5756
5757 tg3_write_sig_legacy(tp, RESET_KIND_INIT);
5758
5759 /* This works around an issue with Athlon chipsets on
5760 * B3 tigon3 silicon. This bit has no effect on any
5761 * other revision. But do not set this on PCI Express
5762 * chips.
5763 */
5764 if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
5765 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
5766 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
5767
5768 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
5769 (tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
5770 val = tr32(TG3PCI_PCISTATE);
5771 val |= PCISTATE_RETRY_SAME_DMA;
5772 tw32(TG3PCI_PCISTATE, val);
5773 }
5774
5775 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) {
5776 /* Enable some hw fixes. */
5777 val = tr32(TG3PCI_MSI_DATA);
5778 val |= (1 << 26) | (1 << 28) | (1 << 29);
5779 tw32(TG3PCI_MSI_DATA, val);
5780 }
5781
5782 /* Descriptor ring init may make accesses to the
5783 * NIC SRAM area to setup the TX descriptors, so we
5784 * can only do this after the hardware has been
5785 * successfully reset.
5786 */
5787 tg3_init_rings(tp);
5788
5789 /* This value is determined during the probe time DMA
5790 * engine test, tg3_test_dma.
5791 */
5792 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
5793
5794 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
5795 GRC_MODE_4X_NIC_SEND_RINGS |
5796 GRC_MODE_NO_TX_PHDR_CSUM |
5797 GRC_MODE_NO_RX_PHDR_CSUM);
5798 tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
5799 if (tp->tg3_flags & TG3_FLAG_NO_TX_PSEUDO_CSUM)
5800 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
5801 if (tp->tg3_flags & TG3_FLAG_NO_RX_PSEUDO_CSUM)
5802 tp->grc_mode |= GRC_MODE_NO_RX_PHDR_CSUM;
5803
5804 tw32(GRC_MODE,
5805 tp->grc_mode |
5806 (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
5807
5808 /* Setup the timer prescalar register. Clock is always 66Mhz. */
5809 val = tr32(GRC_MISC_CFG);
5810 val &= ~0xff;
5811 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
5812 tw32(GRC_MISC_CFG, val);
5813
5814 /* Initialize MBUF/DESC pool. */
cbf46853 5815 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
1da177e4
LT
5816 /* Do nothing. */
5817 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
5818 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
5819 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
5820 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
5821 else
5822 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
5823 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
5824 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
5825 }
5826#if TG3_TSO_SUPPORT != 0
5827 else if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
5828 int fw_len;
5829
5830 fw_len = (TG3_TSO5_FW_TEXT_LEN +
5831 TG3_TSO5_FW_RODATA_LEN +
5832 TG3_TSO5_FW_DATA_LEN +
5833 TG3_TSO5_FW_SBSS_LEN +
5834 TG3_TSO5_FW_BSS_LEN);
5835 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
5836 tw32(BUFMGR_MB_POOL_ADDR,
5837 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
5838 tw32(BUFMGR_MB_POOL_SIZE,
5839 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
5840 }
5841#endif
5842
0f893dc6 5843 if (tp->dev->mtu <= ETH_DATA_LEN) {
1da177e4
LT
5844 tw32(BUFMGR_MB_RDMA_LOW_WATER,
5845 tp->bufmgr_config.mbuf_read_dma_low_water);
5846 tw32(BUFMGR_MB_MACRX_LOW_WATER,
5847 tp->bufmgr_config.mbuf_mac_rx_low_water);
5848 tw32(BUFMGR_MB_HIGH_WATER,
5849 tp->bufmgr_config.mbuf_high_water);
5850 } else {
5851 tw32(BUFMGR_MB_RDMA_LOW_WATER,
5852 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
5853 tw32(BUFMGR_MB_MACRX_LOW_WATER,
5854 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
5855 tw32(BUFMGR_MB_HIGH_WATER,
5856 tp->bufmgr_config.mbuf_high_water_jumbo);
5857 }
5858 tw32(BUFMGR_DMA_LOW_WATER,
5859 tp->bufmgr_config.dma_low_water);
5860 tw32(BUFMGR_DMA_HIGH_WATER,
5861 tp->bufmgr_config.dma_high_water);
5862
5863 tw32(BUFMGR_MODE, BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE);
5864 for (i = 0; i < 2000; i++) {
5865 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
5866 break;
5867 udelay(10);
5868 }
5869 if (i >= 2000) {
5870 printk(KERN_ERR PFX "tg3_reset_hw cannot enable BUFMGR for %s.\n",
5871 tp->dev->name);
5872 return -ENODEV;
5873 }
5874
5875 /* Setup replenish threshold. */
5876 tw32(RCVBDI_STD_THRESH, tp->rx_pending / 8);
5877
5878 /* Initialize TG3_BDINFO's at:
5879 * RCVDBDI_STD_BD: standard eth size rx ring
5880 * RCVDBDI_JUMBO_BD: jumbo frame rx ring
5881 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work)
5882 *
5883 * like so:
5884 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring
5885 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) |
5886 * ring attribute flags
5887 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM
5888 *
5889 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
5890 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
5891 *
5892 * The size of each ring is fixed in the firmware, but the location is
5893 * configurable.
5894 */
5895 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
5896 ((u64) tp->rx_std_mapping >> 32));
5897 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
5898 ((u64) tp->rx_std_mapping & 0xffffffff));
5899 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
5900 NIC_SRAM_RX_BUFFER_DESC);
5901
5902 /* Don't even try to program the JUMBO/MINI buffer descriptor
5903 * configs on 5705.
5904 */
5905 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
5906 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS,
5907 RX_STD_MAX_SIZE_5705 << BDINFO_FLAGS_MAXLEN_SHIFT);
5908 } else {
5909 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS,
5910 RX_STD_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT);
5911
5912 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
5913 BDINFO_FLAGS_DISABLED);
5914
5915 /* Setup replenish threshold. */
5916 tw32(RCVBDI_JUMBO_THRESH, tp->rx_jumbo_pending / 8);
5917
0f893dc6 5918 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
1da177e4
LT
5919 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
5920 ((u64) tp->rx_jumbo_mapping >> 32));
5921 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
5922 ((u64) tp->rx_jumbo_mapping & 0xffffffff));
5923 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
5924 RX_JUMBO_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT);
5925 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
5926 NIC_SRAM_RX_JUMBO_BUFFER_DESC);
5927 } else {
5928 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
5929 BDINFO_FLAGS_DISABLED);
5930 }
5931
5932 }
5933
5934 /* There is only one send ring on 5705/5750, no need to explicitly
5935 * disable the others.
5936 */
5937 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
5938 /* Clear out send RCB ring in SRAM. */
5939 for (i = NIC_SRAM_SEND_RCB; i < NIC_SRAM_RCV_RET_RCB; i += TG3_BDINFO_SIZE)
5940 tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS,
5941 BDINFO_FLAGS_DISABLED);
5942 }
5943
5944 tp->tx_prod = 0;
5945 tp->tx_cons = 0;
5946 tw32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
5947 tw32_tx_mbox(MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
5948
5949 tg3_set_bdinfo(tp, NIC_SRAM_SEND_RCB,
5950 tp->tx_desc_mapping,
5951 (TG3_TX_RING_SIZE <<
5952 BDINFO_FLAGS_MAXLEN_SHIFT),
5953 NIC_SRAM_TX_BUFFER_DESC);
5954
5955 /* There is only one receive return ring on 5705/5750, no need
5956 * to explicitly disable the others.
5957 */
5958 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
5959 for (i = NIC_SRAM_RCV_RET_RCB; i < NIC_SRAM_STATS_BLK;
5960 i += TG3_BDINFO_SIZE) {
5961 tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS,
5962 BDINFO_FLAGS_DISABLED);
5963 }
5964 }
5965
5966 tp->rx_rcb_ptr = 0;
5967 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, 0);
5968
5969 tg3_set_bdinfo(tp, NIC_SRAM_RCV_RET_RCB,
5970 tp->rx_rcb_mapping,
5971 (TG3_RX_RCB_RING_SIZE(tp) <<
5972 BDINFO_FLAGS_MAXLEN_SHIFT),
5973 0);
5974
5975 tp->rx_std_ptr = tp->rx_pending;
5976 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW,
5977 tp->rx_std_ptr);
5978
0f893dc6 5979 tp->rx_jumbo_ptr = (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) ?
1da177e4
LT
5980 tp->rx_jumbo_pending : 0;
5981 tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW,
5982 tp->rx_jumbo_ptr);
5983
5984 /* Initialize MAC address and backoff seed. */
5985 __tg3_set_mac_addr(tp);
5986
5987 /* MTU + ethernet header + FCS + optional VLAN tag */
5988 tw32(MAC_RX_MTU_SIZE, tp->dev->mtu + ETH_HLEN + 8);
5989
5990 /* The slot time is changed by tg3_setup_phy if we
5991 * run at gigabit with half duplex.
5992 */
5993 tw32(MAC_TX_LENGTHS,
5994 (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
5995 (6 << TX_LENGTHS_IPG_SHIFT) |
5996 (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
5997
5998 /* Receive rules. */
5999 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
6000 tw32(RCVLPC_CONFIG, 0x0181);
6001
6002 /* Calculate RDMAC_MODE setting early, we need it to determine
6003 * the RCVLPC_STATE_ENABLE mask.
6004 */
6005 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
6006 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
6007 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
6008 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
6009 RDMAC_MODE_LNGREAD_ENAB);
6010 if (tp->tg3_flags & TG3_FLAG_SPLIT_MODE)
6011 rdmac_mode |= RDMAC_MODE_SPLIT_ENABLE;
85e94ced
MC
6012
6013 /* If statement applies to 5705 and 5750 PCI devices only */
6014 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
6015 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) ||
6016 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)) {
1da177e4
LT
6017 if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE &&
6018 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
6019 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
6020 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
6021 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
6022 !(tp->tg3_flags2 & TG3_FLG2_IS_5788)) {
6023 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
6024 }
6025 }
6026
85e94ced
MC
6027 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)
6028 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
6029
1da177e4
LT
6030#if TG3_TSO_SUPPORT != 0
6031 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
6032 rdmac_mode |= (1 << 27);
6033#endif
6034
6035 /* Receive/send statistics. */
6036 if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
6037 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) {
6038 val = tr32(RCVLPC_STATS_ENABLE);
6039 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
6040 tw32(RCVLPC_STATS_ENABLE, val);
6041 } else {
6042 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
6043 }
6044 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
6045 tw32(SNDDATAI_STATSENAB, 0xffffff);
6046 tw32(SNDDATAI_STATSCTRL,
6047 (SNDDATAI_SCTRL_ENABLE |
6048 SNDDATAI_SCTRL_FASTUPD));
6049
6050 /* Setup host coalescing engine. */
6051 tw32(HOSTCC_MODE, 0);
6052 for (i = 0; i < 2000; i++) {
6053 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
6054 break;
6055 udelay(10);
6056 }
6057
d244c892 6058 __tg3_set_coalesce(tp, &tp->coal);
1da177e4
LT
6059
6060 /* set status block DMA address */
6061 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
6062 ((u64) tp->status_mapping >> 32));
6063 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
6064 ((u64) tp->status_mapping & 0xffffffff));
6065
6066 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6067 /* Status/statistics block address. See tg3_timer,
6068 * the tg3_periodic_fetch_stats call there, and
6069 * tg3_get_stats to see how this works for 5705/5750 chips.
6070 */
1da177e4
LT
6071 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
6072 ((u64) tp->stats_mapping >> 32));
6073 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
6074 ((u64) tp->stats_mapping & 0xffffffff));
6075 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
6076 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
6077 }
6078
6079 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
6080
6081 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
6082 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
6083 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
6084 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
6085
6086 /* Clear statistics/status block in chip, and status block in ram. */
6087 for (i = NIC_SRAM_STATS_BLK;
6088 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
6089 i += sizeof(u32)) {
6090 tg3_write_mem(tp, i, 0);
6091 udelay(40);
6092 }
6093 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
6094
c94e3941
MC
6095 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
6096 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
6097 /* reset to prevent losing 1st rx packet intermittently */
6098 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
6099 udelay(10);
6100 }
6101
1da177e4
LT
6102 tp->mac_mode = MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
6103 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | MAC_MODE_FHDE_ENABLE;
6104 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
6105 udelay(40);
6106
314fba34
MC
6107 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
6108 * If TG3_FLAG_EEPROM_WRITE_PROT is set, we should read the
6109 * register to preserve the GPIO settings for LOMs. The GPIOs,
6110 * whether used as inputs or outputs, are set by boot code after
6111 * reset.
6112 */
6113 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
6114 u32 gpio_mask;
6115
6116 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE2 |
6117 GRC_LCLCTRL_GPIO_OUTPUT0 | GRC_LCLCTRL_GPIO_OUTPUT2;
3e7d83bc
MC
6118
6119 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
6120 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
6121 GRC_LCLCTRL_GPIO_OUTPUT3;
6122
314fba34
MC
6123 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
6124
6125 /* GPIO1 must be driven high for eeprom write protect */
1da177e4
LT
6126 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
6127 GRC_LCLCTRL_GPIO_OUTPUT1);
314fba34 6128 }
1da177e4
LT
6129 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
6130 udelay(100);
6131
09ee929c 6132 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0);
fac9b83e 6133 tp->last_tag = 0;
1da177e4
LT
6134
6135 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6136 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
6137 udelay(40);
6138 }
6139
6140 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
6141 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
6142 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
6143 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
6144 WDMAC_MODE_LNGREAD_ENAB);
6145
85e94ced
MC
6146 /* If statement applies to 5705 and 5750 PCI devices only */
6147 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
6148 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) ||
6149 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) {
1da177e4
LT
6150 if ((tp->tg3_flags & TG3_FLG2_TSO_CAPABLE) &&
6151 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
6152 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
6153 /* nothing */
6154 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
6155 !(tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
6156 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) {
6157 val |= WDMAC_MODE_RX_ACCEL;
6158 }
6159 }
6160
d9ab5ad1
MC
6161 /* Enable host coalescing bug fix */
6162 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
6163 val |= (1 << 29);
6164
1da177e4
LT
6165 tw32_f(WDMAC_MODE, val);
6166 udelay(40);
6167
6168 if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) != 0) {
6169 val = tr32(TG3PCI_X_CAPS);
6170 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
6171 val &= ~PCIX_CAPS_BURST_MASK;
6172 val |= (PCIX_CAPS_MAX_BURST_CPIOB << PCIX_CAPS_BURST_SHIFT);
6173 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
6174 val &= ~(PCIX_CAPS_SPLIT_MASK | PCIX_CAPS_BURST_MASK);
6175 val |= (PCIX_CAPS_MAX_BURST_CPIOB << PCIX_CAPS_BURST_SHIFT);
6176 if (tp->tg3_flags & TG3_FLAG_SPLIT_MODE)
6177 val |= (tp->split_mode_max_reqs <<
6178 PCIX_CAPS_SPLIT_SHIFT);
6179 }
6180 tw32(TG3PCI_X_CAPS, val);
6181 }
6182
6183 tw32_f(RDMAC_MODE, rdmac_mode);
6184 udelay(40);
6185
6186 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
6187 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
6188 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
6189 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
6190 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
6191 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
6192 tw32(RCVDBDI_MODE, RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ);
6193 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
6194#if TG3_TSO_SUPPORT != 0
6195 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
6196 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
6197#endif
6198 tw32(SNDBDI_MODE, SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE);
6199 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
6200
6201 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
6202 err = tg3_load_5701_a0_firmware_fix(tp);
6203 if (err)
6204 return err;
6205 }
6206
6207#if TG3_TSO_SUPPORT != 0
6208 if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
6209 err = tg3_load_tso_firmware(tp);
6210 if (err)
6211 return err;
6212 }
6213#endif
6214
6215 tp->tx_mode = TX_MODE_ENABLE;
6216 tw32_f(MAC_TX_MODE, tp->tx_mode);
6217 udelay(100);
6218
6219 tp->rx_mode = RX_MODE_ENABLE;
6220 tw32_f(MAC_RX_MODE, tp->rx_mode);
6221 udelay(10);
6222
6223 if (tp->link_config.phy_is_low_power) {
6224 tp->link_config.phy_is_low_power = 0;
6225 tp->link_config.speed = tp->link_config.orig_speed;
6226 tp->link_config.duplex = tp->link_config.orig_duplex;
6227 tp->link_config.autoneg = tp->link_config.orig_autoneg;
6228 }
6229
6230 tp->mi_mode = MAC_MI_MODE_BASE;
6231 tw32_f(MAC_MI_MODE, tp->mi_mode);
6232 udelay(80);
6233
6234 tw32(MAC_LED_CTRL, tp->led_ctrl);
6235
6236 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
c94e3941 6237 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
1da177e4
LT
6238 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
6239 udelay(10);
6240 }
6241 tw32_f(MAC_RX_MODE, tp->rx_mode);
6242 udelay(10);
6243
6244 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
6245 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
6246 !(tp->tg3_flags2 & TG3_FLG2_SERDES_PREEMPHASIS)) {
6247 /* Set drive transmission level to 1.2V */
6248 /* only if the signal pre-emphasis bit is not set */
6249 val = tr32(MAC_SERDES_CFG);
6250 val &= 0xfffff000;
6251 val |= 0x880;
6252 tw32(MAC_SERDES_CFG, val);
6253 }
6254 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
6255 tw32(MAC_SERDES_CFG, 0x616000);
6256 }
6257
6258 /* Prevent chip from dropping frames when flow control
6259 * is enabled.
6260 */
6261 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, 2);
6262
6263 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
6264 (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
6265 /* Use hardware link auto-negotiation */
6266 tp->tg3_flags2 |= TG3_FLG2_HW_AUTONEG;
6267 }
6268
d4d2c558
MC
6269 if ((tp->tg3_flags2 & TG3_FLG2_MII_SERDES) &&
6270 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
6271 u32 tmp;
6272
6273 tmp = tr32(SERDES_RX_CTRL);
6274 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
6275 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
6276 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
6277 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
6278 }
6279
1da177e4
LT
6280 err = tg3_setup_phy(tp, 1);
6281 if (err)
6282 return err;
6283
6284 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
6285 u32 tmp;
6286
6287 /* Clear CRC stats. */
6288 if (!tg3_readphy(tp, 0x1e, &tmp)) {
6289 tg3_writephy(tp, 0x1e, tmp | 0x8000);
6290 tg3_readphy(tp, 0x14, &tmp);
6291 }
6292 }
6293
6294 __tg3_set_rx_mode(tp->dev);
6295
6296 /* Initialize receive rules. */
6297 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK);
6298 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
6299 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK);
6300 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
6301
4cf78e4f 6302 if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
a4e2b347 6303 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
1da177e4
LT
6304 limit = 8;
6305 else
6306 limit = 16;
6307 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF)
6308 limit -= 4;
6309 switch (limit) {
6310 case 16:
6311 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0);
6312 case 15:
6313 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0);
6314 case 14:
6315 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0);
6316 case 13:
6317 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0);
6318 case 12:
6319 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0);
6320 case 11:
6321 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0);
6322 case 10:
6323 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0);
6324 case 9:
6325 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0);
6326 case 8:
6327 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0);
6328 case 7:
6329 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0);
6330 case 6:
6331 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0);
6332 case 5:
6333 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0);
6334 case 4:
6335 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */
6336 case 3:
6337 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */
6338 case 2:
6339 case 1:
6340
6341 default:
6342 break;
6343 };
6344
6345 tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
6346
1da177e4
LT
6347 return 0;
6348}
6349
6350/* Called at device open time to get the chip ready for
6351 * packet processing. Invoked with tp->lock held.
6352 */
6353static int tg3_init_hw(struct tg3 *tp)
6354{
6355 int err;
6356
6357 /* Force the chip into D0. */
bc1c7567 6358 err = tg3_set_power_state(tp, PCI_D0);
1da177e4
LT
6359 if (err)
6360 goto out;
6361
6362 tg3_switch_clocks(tp);
6363
6364 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
6365
6366 err = tg3_reset_hw(tp);
6367
6368out:
6369 return err;
6370}
6371
6372#define TG3_STAT_ADD32(PSTAT, REG) \
6373do { u32 __val = tr32(REG); \
6374 (PSTAT)->low += __val; \
6375 if ((PSTAT)->low < __val) \
6376 (PSTAT)->high += 1; \
6377} while (0)
6378
6379static void tg3_periodic_fetch_stats(struct tg3 *tp)
6380{
6381 struct tg3_hw_stats *sp = tp->hw_stats;
6382
6383 if (!netif_carrier_ok(tp->dev))
6384 return;
6385
6386 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
6387 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
6388 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
6389 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
6390 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
6391 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
6392 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
6393 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
6394 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
6395 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
6396 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
6397 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
6398 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
6399
6400 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
6401 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
6402 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
6403 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
6404 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
6405 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
6406 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
6407 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
6408 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
6409 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
6410 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
6411 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
6412 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
6413 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
6414}
6415
6416static void tg3_timer(unsigned long __opaque)
6417{
6418 struct tg3 *tp = (struct tg3 *) __opaque;
1da177e4 6419
f47c11ee 6420 spin_lock(&tp->lock);
1da177e4 6421
fac9b83e
DM
6422 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
6423 /* All of this garbage is because when using non-tagged
6424 * IRQ status the mailbox/status_block protocol the chip
6425 * uses with the cpu is race prone.
6426 */
6427 if (tp->hw_status->status & SD_STATUS_UPDATED) {
6428 tw32(GRC_LOCAL_CTRL,
6429 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
6430 } else {
6431 tw32(HOSTCC_MODE, tp->coalesce_mode |
6432 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
6433 }
1da177e4 6434
fac9b83e
DM
6435 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
6436 tp->tg3_flags2 |= TG3_FLG2_RESTART_TIMER;
f47c11ee 6437 spin_unlock(&tp->lock);
fac9b83e
DM
6438 schedule_work(&tp->reset_task);
6439 return;
6440 }
1da177e4
LT
6441 }
6442
1da177e4
LT
6443 /* This part only runs once per second. */
6444 if (!--tp->timer_counter) {
fac9b83e
DM
6445 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
6446 tg3_periodic_fetch_stats(tp);
6447
1da177e4
LT
6448 if (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) {
6449 u32 mac_stat;
6450 int phy_event;
6451
6452 mac_stat = tr32(MAC_STATUS);
6453
6454 phy_event = 0;
6455 if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) {
6456 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
6457 phy_event = 1;
6458 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
6459 phy_event = 1;
6460
6461 if (phy_event)
6462 tg3_setup_phy(tp, 0);
6463 } else if (tp->tg3_flags & TG3_FLAG_POLL_SERDES) {
6464 u32 mac_stat = tr32(MAC_STATUS);
6465 int need_setup = 0;
6466
6467 if (netif_carrier_ok(tp->dev) &&
6468 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
6469 need_setup = 1;
6470 }
6471 if (! netif_carrier_ok(tp->dev) &&
6472 (mac_stat & (MAC_STATUS_PCS_SYNCED |
6473 MAC_STATUS_SIGNAL_DET))) {
6474 need_setup = 1;
6475 }
6476 if (need_setup) {
6477 tw32_f(MAC_MODE,
6478 (tp->mac_mode &
6479 ~MAC_MODE_PORT_MODE_MASK));
6480 udelay(40);
6481 tw32_f(MAC_MODE, tp->mac_mode);
6482 udelay(40);
6483 tg3_setup_phy(tp, 0);
6484 }
747e8f8b
MC
6485 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
6486 tg3_serdes_parallel_detect(tp);
1da177e4
LT
6487
6488 tp->timer_counter = tp->timer_multiplier;
6489 }
6490
28fbef78 6491 /* Heartbeat is only sent once every 2 seconds. */
1da177e4
LT
6492 if (!--tp->asf_counter) {
6493 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
6494 u32 val;
6495
28fbef78
MC
6496 tg3_write_mem_fast(tp, NIC_SRAM_FW_CMD_MBOX,
6497 FWCMD_NICDRV_ALIVE2);
6498 tg3_write_mem_fast(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
6499 /* 5 seconds timeout */
6500 tg3_write_mem_fast(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 5);
1da177e4
LT
6501 val = tr32(GRC_RX_CPU_EVENT);
6502 val |= (1 << 14);
6503 tw32(GRC_RX_CPU_EVENT, val);
6504 }
6505 tp->asf_counter = tp->asf_multiplier;
6506 }
6507
f47c11ee 6508 spin_unlock(&tp->lock);
1da177e4
LT
6509
6510 tp->timer.expires = jiffies + tp->timer_offset;
6511 add_timer(&tp->timer);
6512}
6513
7938109f
MC
6514static int tg3_test_interrupt(struct tg3 *tp)
6515{
6516 struct net_device *dev = tp->dev;
6517 int err, i;
6518 u32 int_mbox = 0;
6519
d4bc3927
MC
6520 if (!netif_running(dev))
6521 return -ENODEV;
6522
7938109f
MC
6523 tg3_disable_ints(tp);
6524
6525 free_irq(tp->pdev->irq, dev);
6526
6527 err = request_irq(tp->pdev->irq, tg3_test_isr,
f4d0ee98 6528 SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev);
7938109f
MC
6529 if (err)
6530 return err;
6531
38f3843e 6532 tp->hw_status->status &= ~SD_STATUS_UPDATED;
7938109f
MC
6533 tg3_enable_ints(tp);
6534
6535 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
6536 HOSTCC_MODE_NOW);
6537
6538 for (i = 0; i < 5; i++) {
09ee929c
MC
6539 int_mbox = tr32_mailbox(MAILBOX_INTERRUPT_0 +
6540 TG3_64BIT_REG_LOW);
7938109f
MC
6541 if (int_mbox != 0)
6542 break;
6543 msleep(10);
6544 }
6545
6546 tg3_disable_ints(tp);
6547
6548 free_irq(tp->pdev->irq, dev);
6549
6550 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI)
6551 err = request_irq(tp->pdev->irq, tg3_msi,
f4d0ee98 6552 SA_SAMPLE_RANDOM, dev->name, dev);
fac9b83e
DM
6553 else {
6554 irqreturn_t (*fn)(int, void *, struct pt_regs *)=tg3_interrupt;
6555 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
6556 fn = tg3_interrupt_tagged;
6557 err = request_irq(tp->pdev->irq, fn,
f4d0ee98 6558 SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev);
fac9b83e 6559 }
7938109f
MC
6560
6561 if (err)
6562 return err;
6563
6564 if (int_mbox != 0)
6565 return 0;
6566
6567 return -EIO;
6568}
6569
6570/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
6571 * successfully restored
6572 */
6573static int tg3_test_msi(struct tg3 *tp)
6574{
6575 struct net_device *dev = tp->dev;
6576 int err;
6577 u16 pci_cmd;
6578
6579 if (!(tp->tg3_flags2 & TG3_FLG2_USING_MSI))
6580 return 0;
6581
6582 /* Turn off SERR reporting in case MSI terminates with Master
6583 * Abort.
6584 */
6585 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
6586 pci_write_config_word(tp->pdev, PCI_COMMAND,
6587 pci_cmd & ~PCI_COMMAND_SERR);
6588
6589 err = tg3_test_interrupt(tp);
6590
6591 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
6592
6593 if (!err)
6594 return 0;
6595
6596 /* other failures */
6597 if (err != -EIO)
6598 return err;
6599
6600 /* MSI test failed, go back to INTx mode */
6601 printk(KERN_WARNING PFX "%s: No interrupt was generated using MSI, "
6602 "switching to INTx mode. Please report this failure to "
6603 "the PCI maintainer and include system chipset information.\n",
6604 tp->dev->name);
6605
6606 free_irq(tp->pdev->irq, dev);
6607 pci_disable_msi(tp->pdev);
6608
6609 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
6610
fac9b83e
DM
6611 {
6612 irqreturn_t (*fn)(int, void *, struct pt_regs *)=tg3_interrupt;
6613 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
6614 fn = tg3_interrupt_tagged;
7938109f 6615
fac9b83e
DM
6616 err = request_irq(tp->pdev->irq, fn,
6617 SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev);
6618 }
7938109f
MC
6619 if (err)
6620 return err;
6621
6622 /* Need to reset the chip because the MSI cycle may have terminated
6623 * with Master Abort.
6624 */
f47c11ee 6625 tg3_full_lock(tp, 1);
7938109f 6626
944d980e 6627 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7938109f
MC
6628 err = tg3_init_hw(tp);
6629
f47c11ee 6630 tg3_full_unlock(tp);
7938109f
MC
6631
6632 if (err)
6633 free_irq(tp->pdev->irq, dev);
6634
6635 return err;
6636}
6637
1da177e4
LT
6638static int tg3_open(struct net_device *dev)
6639{
6640 struct tg3 *tp = netdev_priv(dev);
6641 int err;
6642
f47c11ee 6643 tg3_full_lock(tp, 0);
1da177e4 6644
bc1c7567
MC
6645 err = tg3_set_power_state(tp, PCI_D0);
6646 if (err)
6647 return err;
6648
1da177e4
LT
6649 tg3_disable_ints(tp);
6650 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
6651
f47c11ee 6652 tg3_full_unlock(tp);
1da177e4
LT
6653
6654 /* The placement of this call is tied
6655 * to the setup and use of Host TX descriptors.
6656 */
6657 err = tg3_alloc_consistent(tp);
6658 if (err)
6659 return err;
6660
88b06bc2
MC
6661 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
6662 (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5750_AX) &&
d4d2c558
MC
6663 (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5750_BX) &&
6664 !((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) &&
6665 (tp->pdev_peer == tp->pdev))) {
fac9b83e
DM
6666 /* All MSI supporting chips should support tagged
6667 * status. Assert that this is the case.
6668 */
6669 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
6670 printk(KERN_WARNING PFX "%s: MSI without TAGGED? "
6671 "Not using MSI.\n", tp->dev->name);
6672 } else if (pci_enable_msi(tp->pdev) == 0) {
88b06bc2
MC
6673 u32 msi_mode;
6674
6675 msi_mode = tr32(MSGINT_MODE);
6676 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
6677 tp->tg3_flags2 |= TG3_FLG2_USING_MSI;
6678 }
6679 }
6680 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI)
6681 err = request_irq(tp->pdev->irq, tg3_msi,
f4d0ee98 6682 SA_SAMPLE_RANDOM, dev->name, dev);
fac9b83e
DM
6683 else {
6684 irqreturn_t (*fn)(int, void *, struct pt_regs *)=tg3_interrupt;
6685 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
6686 fn = tg3_interrupt_tagged;
6687
6688 err = request_irq(tp->pdev->irq, fn,
f4d0ee98 6689 SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev);
fac9b83e 6690 }
1da177e4
LT
6691
6692 if (err) {
88b06bc2
MC
6693 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
6694 pci_disable_msi(tp->pdev);
6695 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
6696 }
1da177e4
LT
6697 tg3_free_consistent(tp);
6698 return err;
6699 }
6700
f47c11ee 6701 tg3_full_lock(tp, 0);
1da177e4
LT
6702
6703 err = tg3_init_hw(tp);
6704 if (err) {
944d980e 6705 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4
LT
6706 tg3_free_rings(tp);
6707 } else {
fac9b83e
DM
6708 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
6709 tp->timer_offset = HZ;
6710 else
6711 tp->timer_offset = HZ / 10;
6712
6713 BUG_ON(tp->timer_offset > HZ);
6714 tp->timer_counter = tp->timer_multiplier =
6715 (HZ / tp->timer_offset);
6716 tp->asf_counter = tp->asf_multiplier =
28fbef78 6717 ((HZ / tp->timer_offset) * 2);
1da177e4
LT
6718
6719 init_timer(&tp->timer);
6720 tp->timer.expires = jiffies + tp->timer_offset;
6721 tp->timer.data = (unsigned long) tp;
6722 tp->timer.function = tg3_timer;
1da177e4
LT
6723 }
6724
f47c11ee 6725 tg3_full_unlock(tp);
1da177e4
LT
6726
6727 if (err) {
88b06bc2
MC
6728 free_irq(tp->pdev->irq, dev);
6729 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
6730 pci_disable_msi(tp->pdev);
6731 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
6732 }
1da177e4
LT
6733 tg3_free_consistent(tp);
6734 return err;
6735 }
6736
7938109f
MC
6737 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
6738 err = tg3_test_msi(tp);
fac9b83e 6739
7938109f 6740 if (err) {
f47c11ee 6741 tg3_full_lock(tp, 0);
7938109f
MC
6742
6743 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
6744 pci_disable_msi(tp->pdev);
6745 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
6746 }
944d980e 6747 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7938109f
MC
6748 tg3_free_rings(tp);
6749 tg3_free_consistent(tp);
6750
f47c11ee 6751 tg3_full_unlock(tp);
7938109f
MC
6752
6753 return err;
6754 }
6755 }
6756
f47c11ee 6757 tg3_full_lock(tp, 0);
1da177e4 6758
7938109f
MC
6759 add_timer(&tp->timer);
6760 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
1da177e4
LT
6761 tg3_enable_ints(tp);
6762
f47c11ee 6763 tg3_full_unlock(tp);
1da177e4
LT
6764
6765 netif_start_queue(dev);
6766
6767 return 0;
6768}
6769
6770#if 0
6771/*static*/ void tg3_dump_state(struct tg3 *tp)
6772{
6773 u32 val32, val32_2, val32_3, val32_4, val32_5;
6774 u16 val16;
6775 int i;
6776
6777 pci_read_config_word(tp->pdev, PCI_STATUS, &val16);
6778 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, &val32);
6779 printk("DEBUG: PCI status [%04x] TG3PCI state[%08x]\n",
6780 val16, val32);
6781
6782 /* MAC block */
6783 printk("DEBUG: MAC_MODE[%08x] MAC_STATUS[%08x]\n",
6784 tr32(MAC_MODE), tr32(MAC_STATUS));
6785 printk(" MAC_EVENT[%08x] MAC_LED_CTRL[%08x]\n",
6786 tr32(MAC_EVENT), tr32(MAC_LED_CTRL));
6787 printk("DEBUG: MAC_TX_MODE[%08x] MAC_TX_STATUS[%08x]\n",
6788 tr32(MAC_TX_MODE), tr32(MAC_TX_STATUS));
6789 printk(" MAC_RX_MODE[%08x] MAC_RX_STATUS[%08x]\n",
6790 tr32(MAC_RX_MODE), tr32(MAC_RX_STATUS));
6791
6792 /* Send data initiator control block */
6793 printk("DEBUG: SNDDATAI_MODE[%08x] SNDDATAI_STATUS[%08x]\n",
6794 tr32(SNDDATAI_MODE), tr32(SNDDATAI_STATUS));
6795 printk(" SNDDATAI_STATSCTRL[%08x]\n",
6796 tr32(SNDDATAI_STATSCTRL));
6797
6798 /* Send data completion control block */
6799 printk("DEBUG: SNDDATAC_MODE[%08x]\n", tr32(SNDDATAC_MODE));
6800
6801 /* Send BD ring selector block */
6802 printk("DEBUG: SNDBDS_MODE[%08x] SNDBDS_STATUS[%08x]\n",
6803 tr32(SNDBDS_MODE), tr32(SNDBDS_STATUS));
6804
6805 /* Send BD initiator control block */
6806 printk("DEBUG: SNDBDI_MODE[%08x] SNDBDI_STATUS[%08x]\n",
6807 tr32(SNDBDI_MODE), tr32(SNDBDI_STATUS));
6808
6809 /* Send BD completion control block */
6810 printk("DEBUG: SNDBDC_MODE[%08x]\n", tr32(SNDBDC_MODE));
6811
6812 /* Receive list placement control block */
6813 printk("DEBUG: RCVLPC_MODE[%08x] RCVLPC_STATUS[%08x]\n",
6814 tr32(RCVLPC_MODE), tr32(RCVLPC_STATUS));
6815 printk(" RCVLPC_STATSCTRL[%08x]\n",
6816 tr32(RCVLPC_STATSCTRL));
6817
6818 /* Receive data and receive BD initiator control block */
6819 printk("DEBUG: RCVDBDI_MODE[%08x] RCVDBDI_STATUS[%08x]\n",
6820 tr32(RCVDBDI_MODE), tr32(RCVDBDI_STATUS));
6821
6822 /* Receive data completion control block */
6823 printk("DEBUG: RCVDCC_MODE[%08x]\n",
6824 tr32(RCVDCC_MODE));
6825
6826 /* Receive BD initiator control block */
6827 printk("DEBUG: RCVBDI_MODE[%08x] RCVBDI_STATUS[%08x]\n",
6828 tr32(RCVBDI_MODE), tr32(RCVBDI_STATUS));
6829
6830 /* Receive BD completion control block */
6831 printk("DEBUG: RCVCC_MODE[%08x] RCVCC_STATUS[%08x]\n",
6832 tr32(RCVCC_MODE), tr32(RCVCC_STATUS));
6833
6834 /* Receive list selector control block */
6835 printk("DEBUG: RCVLSC_MODE[%08x] RCVLSC_STATUS[%08x]\n",
6836 tr32(RCVLSC_MODE), tr32(RCVLSC_STATUS));
6837
6838 /* Mbuf cluster free block */
6839 printk("DEBUG: MBFREE_MODE[%08x] MBFREE_STATUS[%08x]\n",
6840 tr32(MBFREE_MODE), tr32(MBFREE_STATUS));
6841
6842 /* Host coalescing control block */
6843 printk("DEBUG: HOSTCC_MODE[%08x] HOSTCC_STATUS[%08x]\n",
6844 tr32(HOSTCC_MODE), tr32(HOSTCC_STATUS));
6845 printk("DEBUG: HOSTCC_STATS_BLK_HOST_ADDR[%08x%08x]\n",
6846 tr32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH),
6847 tr32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW));
6848 printk("DEBUG: HOSTCC_STATUS_BLK_HOST_ADDR[%08x%08x]\n",
6849 tr32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH),
6850 tr32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW));
6851 printk("DEBUG: HOSTCC_STATS_BLK_NIC_ADDR[%08x]\n",
6852 tr32(HOSTCC_STATS_BLK_NIC_ADDR));
6853 printk("DEBUG: HOSTCC_STATUS_BLK_NIC_ADDR[%08x]\n",
6854 tr32(HOSTCC_STATUS_BLK_NIC_ADDR));
6855
6856 /* Memory arbiter control block */
6857 printk("DEBUG: MEMARB_MODE[%08x] MEMARB_STATUS[%08x]\n",
6858 tr32(MEMARB_MODE), tr32(MEMARB_STATUS));
6859
6860 /* Buffer manager control block */
6861 printk("DEBUG: BUFMGR_MODE[%08x] BUFMGR_STATUS[%08x]\n",
6862 tr32(BUFMGR_MODE), tr32(BUFMGR_STATUS));
6863 printk("DEBUG: BUFMGR_MB_POOL_ADDR[%08x] BUFMGR_MB_POOL_SIZE[%08x]\n",
6864 tr32(BUFMGR_MB_POOL_ADDR), tr32(BUFMGR_MB_POOL_SIZE));
6865 printk("DEBUG: BUFMGR_DMA_DESC_POOL_ADDR[%08x] "
6866 "BUFMGR_DMA_DESC_POOL_SIZE[%08x]\n",
6867 tr32(BUFMGR_DMA_DESC_POOL_ADDR),
6868 tr32(BUFMGR_DMA_DESC_POOL_SIZE));
6869
6870 /* Read DMA control block */
6871 printk("DEBUG: RDMAC_MODE[%08x] RDMAC_STATUS[%08x]\n",
6872 tr32(RDMAC_MODE), tr32(RDMAC_STATUS));
6873
6874 /* Write DMA control block */
6875 printk("DEBUG: WDMAC_MODE[%08x] WDMAC_STATUS[%08x]\n",
6876 tr32(WDMAC_MODE), tr32(WDMAC_STATUS));
6877
6878 /* DMA completion block */
6879 printk("DEBUG: DMAC_MODE[%08x]\n",
6880 tr32(DMAC_MODE));
6881
6882 /* GRC block */
6883 printk("DEBUG: GRC_MODE[%08x] GRC_MISC_CFG[%08x]\n",
6884 tr32(GRC_MODE), tr32(GRC_MISC_CFG));
6885 printk("DEBUG: GRC_LOCAL_CTRL[%08x]\n",
6886 tr32(GRC_LOCAL_CTRL));
6887
6888 /* TG3_BDINFOs */
6889 printk("DEBUG: RCVDBDI_JUMBO_BD[%08x%08x:%08x:%08x]\n",
6890 tr32(RCVDBDI_JUMBO_BD + 0x0),
6891 tr32(RCVDBDI_JUMBO_BD + 0x4),
6892 tr32(RCVDBDI_JUMBO_BD + 0x8),
6893 tr32(RCVDBDI_JUMBO_BD + 0xc));
6894 printk("DEBUG: RCVDBDI_STD_BD[%08x%08x:%08x:%08x]\n",
6895 tr32(RCVDBDI_STD_BD + 0x0),
6896 tr32(RCVDBDI_STD_BD + 0x4),
6897 tr32(RCVDBDI_STD_BD + 0x8),
6898 tr32(RCVDBDI_STD_BD + 0xc));
6899 printk("DEBUG: RCVDBDI_MINI_BD[%08x%08x:%08x:%08x]\n",
6900 tr32(RCVDBDI_MINI_BD + 0x0),
6901 tr32(RCVDBDI_MINI_BD + 0x4),
6902 tr32(RCVDBDI_MINI_BD + 0x8),
6903 tr32(RCVDBDI_MINI_BD + 0xc));
6904
6905 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x0, &val32);
6906 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x4, &val32_2);
6907 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x8, &val32_3);
6908 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0xc, &val32_4);
6909 printk("DEBUG: SRAM_SEND_RCB_0[%08x%08x:%08x:%08x]\n",
6910 val32, val32_2, val32_3, val32_4);
6911
6912 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x0, &val32);
6913 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x4, &val32_2);
6914 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x8, &val32_3);
6915 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0xc, &val32_4);
6916 printk("DEBUG: SRAM_RCV_RET_RCB_0[%08x%08x:%08x:%08x]\n",
6917 val32, val32_2, val32_3, val32_4);
6918
6919 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x0, &val32);
6920 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x4, &val32_2);
6921 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x8, &val32_3);
6922 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0xc, &val32_4);
6923 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x10, &val32_5);
6924 printk("DEBUG: SRAM_STATUS_BLK[%08x:%08x:%08x:%08x:%08x]\n",
6925 val32, val32_2, val32_3, val32_4, val32_5);
6926
6927 /* SW status block */
6928 printk("DEBUG: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
6929 tp->hw_status->status,
6930 tp->hw_status->status_tag,
6931 tp->hw_status->rx_jumbo_consumer,
6932 tp->hw_status->rx_consumer,
6933 tp->hw_status->rx_mini_consumer,
6934 tp->hw_status->idx[0].rx_producer,
6935 tp->hw_status->idx[0].tx_consumer);
6936
6937 /* SW statistics block */
6938 printk("DEBUG: Host statistics block [%08x:%08x:%08x:%08x]\n",
6939 ((u32 *)tp->hw_stats)[0],
6940 ((u32 *)tp->hw_stats)[1],
6941 ((u32 *)tp->hw_stats)[2],
6942 ((u32 *)tp->hw_stats)[3]);
6943
6944 /* Mailboxes */
6945 printk("DEBUG: SNDHOST_PROD[%08x%08x] SNDNIC_PROD[%08x%08x]\n",
09ee929c
MC
6946 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + 0x0),
6947 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + 0x4),
6948 tr32_mailbox(MAILBOX_SNDNIC_PROD_IDX_0 + 0x0),
6949 tr32_mailbox(MAILBOX_SNDNIC_PROD_IDX_0 + 0x4));
1da177e4
LT
6950
6951 /* NIC side send descriptors. */
6952 for (i = 0; i < 6; i++) {
6953 unsigned long txd;
6954
6955 txd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_TX_BUFFER_DESC
6956 + (i * sizeof(struct tg3_tx_buffer_desc));
6957 printk("DEBUG: NIC TXD(%d)[%08x:%08x:%08x:%08x]\n",
6958 i,
6959 readl(txd + 0x0), readl(txd + 0x4),
6960 readl(txd + 0x8), readl(txd + 0xc));
6961 }
6962
6963 /* NIC side RX descriptors. */
6964 for (i = 0; i < 6; i++) {
6965 unsigned long rxd;
6966
6967 rxd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_RX_BUFFER_DESC
6968 + (i * sizeof(struct tg3_rx_buffer_desc));
6969 printk("DEBUG: NIC RXD_STD(%d)[0][%08x:%08x:%08x:%08x]\n",
6970 i,
6971 readl(rxd + 0x0), readl(rxd + 0x4),
6972 readl(rxd + 0x8), readl(rxd + 0xc));
6973 rxd += (4 * sizeof(u32));
6974 printk("DEBUG: NIC RXD_STD(%d)[1][%08x:%08x:%08x:%08x]\n",
6975 i,
6976 readl(rxd + 0x0), readl(rxd + 0x4),
6977 readl(rxd + 0x8), readl(rxd + 0xc));
6978 }
6979
6980 for (i = 0; i < 6; i++) {
6981 unsigned long rxd;
6982
6983 rxd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_RX_JUMBO_BUFFER_DESC
6984 + (i * sizeof(struct tg3_rx_buffer_desc));
6985 printk("DEBUG: NIC RXD_JUMBO(%d)[0][%08x:%08x:%08x:%08x]\n",
6986 i,
6987 readl(rxd + 0x0), readl(rxd + 0x4),
6988 readl(rxd + 0x8), readl(rxd + 0xc));
6989 rxd += (4 * sizeof(u32));
6990 printk("DEBUG: NIC RXD_JUMBO(%d)[1][%08x:%08x:%08x:%08x]\n",
6991 i,
6992 readl(rxd + 0x0), readl(rxd + 0x4),
6993 readl(rxd + 0x8), readl(rxd + 0xc));
6994 }
6995}
6996#endif
6997
6998static struct net_device_stats *tg3_get_stats(struct net_device *);
6999static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *);
7000
7001static int tg3_close(struct net_device *dev)
7002{
7003 struct tg3 *tp = netdev_priv(dev);
7004
7faa006f
MC
7005 /* Calling flush_scheduled_work() may deadlock because
7006 * linkwatch_event() may be on the workqueue and it will try to get
7007 * the rtnl_lock which we are holding.
7008 */
7009 while (tp->tg3_flags & TG3_FLAG_IN_RESET_TASK)
7010 msleep(1);
7011
1da177e4
LT
7012 netif_stop_queue(dev);
7013
7014 del_timer_sync(&tp->timer);
7015
f47c11ee 7016 tg3_full_lock(tp, 1);
1da177e4
LT
7017#if 0
7018 tg3_dump_state(tp);
7019#endif
7020
7021 tg3_disable_ints(tp);
7022
944d980e 7023 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4
LT
7024 tg3_free_rings(tp);
7025 tp->tg3_flags &=
7026 ~(TG3_FLAG_INIT_COMPLETE |
7027 TG3_FLAG_GOT_SERDES_FLOWCTL);
1da177e4 7028
f47c11ee 7029 tg3_full_unlock(tp);
1da177e4 7030
88b06bc2
MC
7031 free_irq(tp->pdev->irq, dev);
7032 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7033 pci_disable_msi(tp->pdev);
7034 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7035 }
1da177e4
LT
7036
7037 memcpy(&tp->net_stats_prev, tg3_get_stats(tp->dev),
7038 sizeof(tp->net_stats_prev));
7039 memcpy(&tp->estats_prev, tg3_get_estats(tp),
7040 sizeof(tp->estats_prev));
7041
7042 tg3_free_consistent(tp);
7043
bc1c7567
MC
7044 tg3_set_power_state(tp, PCI_D3hot);
7045
7046 netif_carrier_off(tp->dev);
7047
1da177e4
LT
7048 return 0;
7049}
7050
7051static inline unsigned long get_stat64(tg3_stat64_t *val)
7052{
7053 unsigned long ret;
7054
7055#if (BITS_PER_LONG == 32)
7056 ret = val->low;
7057#else
7058 ret = ((u64)val->high << 32) | ((u64)val->low);
7059#endif
7060 return ret;
7061}
7062
7063static unsigned long calc_crc_errors(struct tg3 *tp)
7064{
7065 struct tg3_hw_stats *hw_stats = tp->hw_stats;
7066
7067 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) &&
7068 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
7069 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
1da177e4
LT
7070 u32 val;
7071
f47c11ee 7072 spin_lock_bh(&tp->lock);
1da177e4
LT
7073 if (!tg3_readphy(tp, 0x1e, &val)) {
7074 tg3_writephy(tp, 0x1e, val | 0x8000);
7075 tg3_readphy(tp, 0x14, &val);
7076 } else
7077 val = 0;
f47c11ee 7078 spin_unlock_bh(&tp->lock);
1da177e4
LT
7079
7080 tp->phy_crc_errors += val;
7081
7082 return tp->phy_crc_errors;
7083 }
7084
7085 return get_stat64(&hw_stats->rx_fcs_errors);
7086}
7087
7088#define ESTAT_ADD(member) \
7089 estats->member = old_estats->member + \
7090 get_stat64(&hw_stats->member)
7091
7092static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp)
7093{
7094 struct tg3_ethtool_stats *estats = &tp->estats;
7095 struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
7096 struct tg3_hw_stats *hw_stats = tp->hw_stats;
7097
7098 if (!hw_stats)
7099 return old_estats;
7100
7101 ESTAT_ADD(rx_octets);
7102 ESTAT_ADD(rx_fragments);
7103 ESTAT_ADD(rx_ucast_packets);
7104 ESTAT_ADD(rx_mcast_packets);
7105 ESTAT_ADD(rx_bcast_packets);
7106 ESTAT_ADD(rx_fcs_errors);
7107 ESTAT_ADD(rx_align_errors);
7108 ESTAT_ADD(rx_xon_pause_rcvd);
7109 ESTAT_ADD(rx_xoff_pause_rcvd);
7110 ESTAT_ADD(rx_mac_ctrl_rcvd);
7111 ESTAT_ADD(rx_xoff_entered);
7112 ESTAT_ADD(rx_frame_too_long_errors);
7113 ESTAT_ADD(rx_jabbers);
7114 ESTAT_ADD(rx_undersize_packets);
7115 ESTAT_ADD(rx_in_length_errors);
7116 ESTAT_ADD(rx_out_length_errors);
7117 ESTAT_ADD(rx_64_or_less_octet_packets);
7118 ESTAT_ADD(rx_65_to_127_octet_packets);
7119 ESTAT_ADD(rx_128_to_255_octet_packets);
7120 ESTAT_ADD(rx_256_to_511_octet_packets);
7121 ESTAT_ADD(rx_512_to_1023_octet_packets);
7122 ESTAT_ADD(rx_1024_to_1522_octet_packets);
7123 ESTAT_ADD(rx_1523_to_2047_octet_packets);
7124 ESTAT_ADD(rx_2048_to_4095_octet_packets);
7125 ESTAT_ADD(rx_4096_to_8191_octet_packets);
7126 ESTAT_ADD(rx_8192_to_9022_octet_packets);
7127
7128 ESTAT_ADD(tx_octets);
7129 ESTAT_ADD(tx_collisions);
7130 ESTAT_ADD(tx_xon_sent);
7131 ESTAT_ADD(tx_xoff_sent);
7132 ESTAT_ADD(tx_flow_control);
7133 ESTAT_ADD(tx_mac_errors);
7134 ESTAT_ADD(tx_single_collisions);
7135 ESTAT_ADD(tx_mult_collisions);
7136 ESTAT_ADD(tx_deferred);
7137 ESTAT_ADD(tx_excessive_collisions);
7138 ESTAT_ADD(tx_late_collisions);
7139 ESTAT_ADD(tx_collide_2times);
7140 ESTAT_ADD(tx_collide_3times);
7141 ESTAT_ADD(tx_collide_4times);
7142 ESTAT_ADD(tx_collide_5times);
7143 ESTAT_ADD(tx_collide_6times);
7144 ESTAT_ADD(tx_collide_7times);
7145 ESTAT_ADD(tx_collide_8times);
7146 ESTAT_ADD(tx_collide_9times);
7147 ESTAT_ADD(tx_collide_10times);
7148 ESTAT_ADD(tx_collide_11times);
7149 ESTAT_ADD(tx_collide_12times);
7150 ESTAT_ADD(tx_collide_13times);
7151 ESTAT_ADD(tx_collide_14times);
7152 ESTAT_ADD(tx_collide_15times);
7153 ESTAT_ADD(tx_ucast_packets);
7154 ESTAT_ADD(tx_mcast_packets);
7155 ESTAT_ADD(tx_bcast_packets);
7156 ESTAT_ADD(tx_carrier_sense_errors);
7157 ESTAT_ADD(tx_discards);
7158 ESTAT_ADD(tx_errors);
7159
7160 ESTAT_ADD(dma_writeq_full);
7161 ESTAT_ADD(dma_write_prioq_full);
7162 ESTAT_ADD(rxbds_empty);
7163 ESTAT_ADD(rx_discards);
7164 ESTAT_ADD(rx_errors);
7165 ESTAT_ADD(rx_threshold_hit);
7166
7167 ESTAT_ADD(dma_readq_full);
7168 ESTAT_ADD(dma_read_prioq_full);
7169 ESTAT_ADD(tx_comp_queue_full);
7170
7171 ESTAT_ADD(ring_set_send_prod_index);
7172 ESTAT_ADD(ring_status_update);
7173 ESTAT_ADD(nic_irqs);
7174 ESTAT_ADD(nic_avoided_irqs);
7175 ESTAT_ADD(nic_tx_threshold_hit);
7176
7177 return estats;
7178}
7179
7180static struct net_device_stats *tg3_get_stats(struct net_device *dev)
7181{
7182 struct tg3 *tp = netdev_priv(dev);
7183 struct net_device_stats *stats = &tp->net_stats;
7184 struct net_device_stats *old_stats = &tp->net_stats_prev;
7185 struct tg3_hw_stats *hw_stats = tp->hw_stats;
7186
7187 if (!hw_stats)
7188 return old_stats;
7189
7190 stats->rx_packets = old_stats->rx_packets +
7191 get_stat64(&hw_stats->rx_ucast_packets) +
7192 get_stat64(&hw_stats->rx_mcast_packets) +
7193 get_stat64(&hw_stats->rx_bcast_packets);
7194
7195 stats->tx_packets = old_stats->tx_packets +
7196 get_stat64(&hw_stats->tx_ucast_packets) +
7197 get_stat64(&hw_stats->tx_mcast_packets) +
7198 get_stat64(&hw_stats->tx_bcast_packets);
7199
7200 stats->rx_bytes = old_stats->rx_bytes +
7201 get_stat64(&hw_stats->rx_octets);
7202 stats->tx_bytes = old_stats->tx_bytes +
7203 get_stat64(&hw_stats->tx_octets);
7204
7205 stats->rx_errors = old_stats->rx_errors +
4f63b877 7206 get_stat64(&hw_stats->rx_errors);
1da177e4
LT
7207 stats->tx_errors = old_stats->tx_errors +
7208 get_stat64(&hw_stats->tx_errors) +
7209 get_stat64(&hw_stats->tx_mac_errors) +
7210 get_stat64(&hw_stats->tx_carrier_sense_errors) +
7211 get_stat64(&hw_stats->tx_discards);
7212
7213 stats->multicast = old_stats->multicast +
7214 get_stat64(&hw_stats->rx_mcast_packets);
7215 stats->collisions = old_stats->collisions +
7216 get_stat64(&hw_stats->tx_collisions);
7217
7218 stats->rx_length_errors = old_stats->rx_length_errors +
7219 get_stat64(&hw_stats->rx_frame_too_long_errors) +
7220 get_stat64(&hw_stats->rx_undersize_packets);
7221
7222 stats->rx_over_errors = old_stats->rx_over_errors +
7223 get_stat64(&hw_stats->rxbds_empty);
7224 stats->rx_frame_errors = old_stats->rx_frame_errors +
7225 get_stat64(&hw_stats->rx_align_errors);
7226 stats->tx_aborted_errors = old_stats->tx_aborted_errors +
7227 get_stat64(&hw_stats->tx_discards);
7228 stats->tx_carrier_errors = old_stats->tx_carrier_errors +
7229 get_stat64(&hw_stats->tx_carrier_sense_errors);
7230
7231 stats->rx_crc_errors = old_stats->rx_crc_errors +
7232 calc_crc_errors(tp);
7233
4f63b877
JL
7234 stats->rx_missed_errors = old_stats->rx_missed_errors +
7235 get_stat64(&hw_stats->rx_discards);
7236
1da177e4
LT
7237 return stats;
7238}
7239
7240static inline u32 calc_crc(unsigned char *buf, int len)
7241{
7242 u32 reg;
7243 u32 tmp;
7244 int j, k;
7245
7246 reg = 0xffffffff;
7247
7248 for (j = 0; j < len; j++) {
7249 reg ^= buf[j];
7250
7251 for (k = 0; k < 8; k++) {
7252 tmp = reg & 0x01;
7253
7254 reg >>= 1;
7255
7256 if (tmp) {
7257 reg ^= 0xedb88320;
7258 }
7259 }
7260 }
7261
7262 return ~reg;
7263}
7264
7265static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
7266{
7267 /* accept or reject all multicast frames */
7268 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
7269 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
7270 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
7271 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
7272}
7273
7274static void __tg3_set_rx_mode(struct net_device *dev)
7275{
7276 struct tg3 *tp = netdev_priv(dev);
7277 u32 rx_mode;
7278
7279 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
7280 RX_MODE_KEEP_VLAN_TAG);
7281
7282 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
7283 * flag clear.
7284 */
7285#if TG3_VLAN_TAG_USED
7286 if (!tp->vlgrp &&
7287 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
7288 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
7289#else
7290 /* By definition, VLAN is disabled always in this
7291 * case.
7292 */
7293 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
7294 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
7295#endif
7296
7297 if (dev->flags & IFF_PROMISC) {
7298 /* Promiscuous mode. */
7299 rx_mode |= RX_MODE_PROMISC;
7300 } else if (dev->flags & IFF_ALLMULTI) {
7301 /* Accept all multicast. */
7302 tg3_set_multi (tp, 1);
7303 } else if (dev->mc_count < 1) {
7304 /* Reject all multicast. */
7305 tg3_set_multi (tp, 0);
7306 } else {
7307 /* Accept one or more multicast(s). */
7308 struct dev_mc_list *mclist;
7309 unsigned int i;
7310 u32 mc_filter[4] = { 0, };
7311 u32 regidx;
7312 u32 bit;
7313 u32 crc;
7314
7315 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
7316 i++, mclist = mclist->next) {
7317
7318 crc = calc_crc (mclist->dmi_addr, ETH_ALEN);
7319 bit = ~crc & 0x7f;
7320 regidx = (bit & 0x60) >> 5;
7321 bit &= 0x1f;
7322 mc_filter[regidx] |= (1 << bit);
7323 }
7324
7325 tw32(MAC_HASH_REG_0, mc_filter[0]);
7326 tw32(MAC_HASH_REG_1, mc_filter[1]);
7327 tw32(MAC_HASH_REG_2, mc_filter[2]);
7328 tw32(MAC_HASH_REG_3, mc_filter[3]);
7329 }
7330
7331 if (rx_mode != tp->rx_mode) {
7332 tp->rx_mode = rx_mode;
7333 tw32_f(MAC_RX_MODE, rx_mode);
7334 udelay(10);
7335 }
7336}
7337
7338static void tg3_set_rx_mode(struct net_device *dev)
7339{
7340 struct tg3 *tp = netdev_priv(dev);
7341
e75f7c90
MC
7342 if (!netif_running(dev))
7343 return;
7344
f47c11ee 7345 tg3_full_lock(tp, 0);
1da177e4 7346 __tg3_set_rx_mode(dev);
f47c11ee 7347 tg3_full_unlock(tp);
1da177e4
LT
7348}
7349
7350#define TG3_REGDUMP_LEN (32 * 1024)
7351
7352static int tg3_get_regs_len(struct net_device *dev)
7353{
7354 return TG3_REGDUMP_LEN;
7355}
7356
7357static void tg3_get_regs(struct net_device *dev,
7358 struct ethtool_regs *regs, void *_p)
7359{
7360 u32 *p = _p;
7361 struct tg3 *tp = netdev_priv(dev);
7362 u8 *orig_p = _p;
7363 int i;
7364
7365 regs->version = 0;
7366
7367 memset(p, 0, TG3_REGDUMP_LEN);
7368
bc1c7567
MC
7369 if (tp->link_config.phy_is_low_power)
7370 return;
7371
f47c11ee 7372 tg3_full_lock(tp, 0);
1da177e4
LT
7373
7374#define __GET_REG32(reg) (*(p)++ = tr32(reg))
7375#define GET_REG32_LOOP(base,len) \
7376do { p = (u32 *)(orig_p + (base)); \
7377 for (i = 0; i < len; i += 4) \
7378 __GET_REG32((base) + i); \
7379} while (0)
7380#define GET_REG32_1(reg) \
7381do { p = (u32 *)(orig_p + (reg)); \
7382 __GET_REG32((reg)); \
7383} while (0)
7384
7385 GET_REG32_LOOP(TG3PCI_VENDOR, 0xb0);
7386 GET_REG32_LOOP(MAILBOX_INTERRUPT_0, 0x200);
7387 GET_REG32_LOOP(MAC_MODE, 0x4f0);
7388 GET_REG32_LOOP(SNDDATAI_MODE, 0xe0);
7389 GET_REG32_1(SNDDATAC_MODE);
7390 GET_REG32_LOOP(SNDBDS_MODE, 0x80);
7391 GET_REG32_LOOP(SNDBDI_MODE, 0x48);
7392 GET_REG32_1(SNDBDC_MODE);
7393 GET_REG32_LOOP(RCVLPC_MODE, 0x20);
7394 GET_REG32_LOOP(RCVLPC_SELLST_BASE, 0x15c);
7395 GET_REG32_LOOP(RCVDBDI_MODE, 0x0c);
7396 GET_REG32_LOOP(RCVDBDI_JUMBO_BD, 0x3c);
7397 GET_REG32_LOOP(RCVDBDI_BD_PROD_IDX_0, 0x44);
7398 GET_REG32_1(RCVDCC_MODE);
7399 GET_REG32_LOOP(RCVBDI_MODE, 0x20);
7400 GET_REG32_LOOP(RCVCC_MODE, 0x14);
7401 GET_REG32_LOOP(RCVLSC_MODE, 0x08);
7402 GET_REG32_1(MBFREE_MODE);
7403 GET_REG32_LOOP(HOSTCC_MODE, 0x100);
7404 GET_REG32_LOOP(MEMARB_MODE, 0x10);
7405 GET_REG32_LOOP(BUFMGR_MODE, 0x58);
7406 GET_REG32_LOOP(RDMAC_MODE, 0x08);
7407 GET_REG32_LOOP(WDMAC_MODE, 0x08);
091465d7
CE
7408 GET_REG32_1(RX_CPU_MODE);
7409 GET_REG32_1(RX_CPU_STATE);
7410 GET_REG32_1(RX_CPU_PGMCTR);
7411 GET_REG32_1(RX_CPU_HWBKPT);
7412 GET_REG32_1(TX_CPU_MODE);
7413 GET_REG32_1(TX_CPU_STATE);
7414 GET_REG32_1(TX_CPU_PGMCTR);
1da177e4
LT
7415 GET_REG32_LOOP(GRCMBOX_INTERRUPT_0, 0x110);
7416 GET_REG32_LOOP(FTQ_RESET, 0x120);
7417 GET_REG32_LOOP(MSGINT_MODE, 0x0c);
7418 GET_REG32_1(DMAC_MODE);
7419 GET_REG32_LOOP(GRC_MODE, 0x4c);
7420 if (tp->tg3_flags & TG3_FLAG_NVRAM)
7421 GET_REG32_LOOP(NVRAM_CMD, 0x24);
7422
7423#undef __GET_REG32
7424#undef GET_REG32_LOOP
7425#undef GET_REG32_1
7426
f47c11ee 7427 tg3_full_unlock(tp);
1da177e4
LT
7428}
7429
7430static int tg3_get_eeprom_len(struct net_device *dev)
7431{
7432 struct tg3 *tp = netdev_priv(dev);
7433
7434 return tp->nvram_size;
7435}
7436
7437static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val);
7438
7439static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
7440{
7441 struct tg3 *tp = netdev_priv(dev);
7442 int ret;
7443 u8 *pd;
7444 u32 i, offset, len, val, b_offset, b_count;
7445
bc1c7567
MC
7446 if (tp->link_config.phy_is_low_power)
7447 return -EAGAIN;
7448
1da177e4
LT
7449 offset = eeprom->offset;
7450 len = eeprom->len;
7451 eeprom->len = 0;
7452
7453 eeprom->magic = TG3_EEPROM_MAGIC;
7454
7455 if (offset & 3) {
7456 /* adjustments to start on required 4 byte boundary */
7457 b_offset = offset & 3;
7458 b_count = 4 - b_offset;
7459 if (b_count > len) {
7460 /* i.e. offset=1 len=2 */
7461 b_count = len;
7462 }
7463 ret = tg3_nvram_read(tp, offset-b_offset, &val);
7464 if (ret)
7465 return ret;
7466 val = cpu_to_le32(val);
7467 memcpy(data, ((char*)&val) + b_offset, b_count);
7468 len -= b_count;
7469 offset += b_count;
7470 eeprom->len += b_count;
7471 }
7472
7473 /* read bytes upto the last 4 byte boundary */
7474 pd = &data[eeprom->len];
7475 for (i = 0; i < (len - (len & 3)); i += 4) {
7476 ret = tg3_nvram_read(tp, offset + i, &val);
7477 if (ret) {
7478 eeprom->len += i;
7479 return ret;
7480 }
7481 val = cpu_to_le32(val);
7482 memcpy(pd + i, &val, 4);
7483 }
7484 eeprom->len += i;
7485
7486 if (len & 3) {
7487 /* read last bytes not ending on 4 byte boundary */
7488 pd = &data[eeprom->len];
7489 b_count = len & 3;
7490 b_offset = offset + len - b_count;
7491 ret = tg3_nvram_read(tp, b_offset, &val);
7492 if (ret)
7493 return ret;
7494 val = cpu_to_le32(val);
7495 memcpy(pd, ((char*)&val), b_count);
7496 eeprom->len += b_count;
7497 }
7498 return 0;
7499}
7500
7501static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf);
7502
7503static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
7504{
7505 struct tg3 *tp = netdev_priv(dev);
7506 int ret;
7507 u32 offset, len, b_offset, odd_len, start, end;
7508 u8 *buf;
7509
bc1c7567
MC
7510 if (tp->link_config.phy_is_low_power)
7511 return -EAGAIN;
7512
1da177e4
LT
7513 if (eeprom->magic != TG3_EEPROM_MAGIC)
7514 return -EINVAL;
7515
7516 offset = eeprom->offset;
7517 len = eeprom->len;
7518
7519 if ((b_offset = (offset & 3))) {
7520 /* adjustments to start on required 4 byte boundary */
7521 ret = tg3_nvram_read(tp, offset-b_offset, &start);
7522 if (ret)
7523 return ret;
7524 start = cpu_to_le32(start);
7525 len += b_offset;
7526 offset &= ~3;
1c8594b4
MC
7527 if (len < 4)
7528 len = 4;
1da177e4
LT
7529 }
7530
7531 odd_len = 0;
1c8594b4 7532 if (len & 3) {
1da177e4
LT
7533 /* adjustments to end on required 4 byte boundary */
7534 odd_len = 1;
7535 len = (len + 3) & ~3;
7536 ret = tg3_nvram_read(tp, offset+len-4, &end);
7537 if (ret)
7538 return ret;
7539 end = cpu_to_le32(end);
7540 }
7541
7542 buf = data;
7543 if (b_offset || odd_len) {
7544 buf = kmalloc(len, GFP_KERNEL);
7545 if (buf == 0)
7546 return -ENOMEM;
7547 if (b_offset)
7548 memcpy(buf, &start, 4);
7549 if (odd_len)
7550 memcpy(buf+len-4, &end, 4);
7551 memcpy(buf + b_offset, data, eeprom->len);
7552 }
7553
7554 ret = tg3_nvram_write_block(tp, offset, len, buf);
7555
7556 if (buf != data)
7557 kfree(buf);
7558
7559 return ret;
7560}
7561
7562static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7563{
7564 struct tg3 *tp = netdev_priv(dev);
7565
7566 cmd->supported = (SUPPORTED_Autoneg);
7567
7568 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
7569 cmd->supported |= (SUPPORTED_1000baseT_Half |
7570 SUPPORTED_1000baseT_Full);
7571
a4e2b347 7572 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES))
1da177e4
LT
7573 cmd->supported |= (SUPPORTED_100baseT_Half |
7574 SUPPORTED_100baseT_Full |
7575 SUPPORTED_10baseT_Half |
7576 SUPPORTED_10baseT_Full |
7577 SUPPORTED_MII);
7578 else
7579 cmd->supported |= SUPPORTED_FIBRE;
7580
7581 cmd->advertising = tp->link_config.advertising;
7582 if (netif_running(dev)) {
7583 cmd->speed = tp->link_config.active_speed;
7584 cmd->duplex = tp->link_config.active_duplex;
7585 }
7586 cmd->port = 0;
7587 cmd->phy_address = PHY_ADDR;
7588 cmd->transceiver = 0;
7589 cmd->autoneg = tp->link_config.autoneg;
7590 cmd->maxtxpkt = 0;
7591 cmd->maxrxpkt = 0;
7592 return 0;
7593}
7594
7595static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7596{
7597 struct tg3 *tp = netdev_priv(dev);
7598
37ff238d 7599 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) {
1da177e4
LT
7600 /* These are the only valid advertisement bits allowed. */
7601 if (cmd->autoneg == AUTONEG_ENABLE &&
7602 (cmd->advertising & ~(ADVERTISED_1000baseT_Half |
7603 ADVERTISED_1000baseT_Full |
7604 ADVERTISED_Autoneg |
7605 ADVERTISED_FIBRE)))
7606 return -EINVAL;
37ff238d
MC
7607 /* Fiber can only do SPEED_1000. */
7608 else if ((cmd->autoneg != AUTONEG_ENABLE) &&
7609 (cmd->speed != SPEED_1000))
7610 return -EINVAL;
7611 /* Copper cannot force SPEED_1000. */
7612 } else if ((cmd->autoneg != AUTONEG_ENABLE) &&
7613 (cmd->speed == SPEED_1000))
7614 return -EINVAL;
7615 else if ((cmd->speed == SPEED_1000) &&
7616 (tp->tg3_flags2 & TG3_FLAG_10_100_ONLY))
7617 return -EINVAL;
1da177e4 7618
f47c11ee 7619 tg3_full_lock(tp, 0);
1da177e4
LT
7620
7621 tp->link_config.autoneg = cmd->autoneg;
7622 if (cmd->autoneg == AUTONEG_ENABLE) {
7623 tp->link_config.advertising = cmd->advertising;
7624 tp->link_config.speed = SPEED_INVALID;
7625 tp->link_config.duplex = DUPLEX_INVALID;
7626 } else {
7627 tp->link_config.advertising = 0;
7628 tp->link_config.speed = cmd->speed;
7629 tp->link_config.duplex = cmd->duplex;
7630 }
7631
7632 if (netif_running(dev))
7633 tg3_setup_phy(tp, 1);
7634
f47c11ee 7635 tg3_full_unlock(tp);
1da177e4
LT
7636
7637 return 0;
7638}
7639
7640static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
7641{
7642 struct tg3 *tp = netdev_priv(dev);
7643
7644 strcpy(info->driver, DRV_MODULE_NAME);
7645 strcpy(info->version, DRV_MODULE_VERSION);
7646 strcpy(info->bus_info, pci_name(tp->pdev));
7647}
7648
7649static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7650{
7651 struct tg3 *tp = netdev_priv(dev);
7652
7653 wol->supported = WAKE_MAGIC;
7654 wol->wolopts = 0;
7655 if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE)
7656 wol->wolopts = WAKE_MAGIC;
7657 memset(&wol->sopass, 0, sizeof(wol->sopass));
7658}
7659
7660static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7661{
7662 struct tg3 *tp = netdev_priv(dev);
7663
7664 if (wol->wolopts & ~WAKE_MAGIC)
7665 return -EINVAL;
7666 if ((wol->wolopts & WAKE_MAGIC) &&
7667 tp->tg3_flags2 & TG3_FLG2_PHY_SERDES &&
7668 !(tp->tg3_flags & TG3_FLAG_SERDES_WOL_CAP))
7669 return -EINVAL;
7670
f47c11ee 7671 spin_lock_bh(&tp->lock);
1da177e4
LT
7672 if (wol->wolopts & WAKE_MAGIC)
7673 tp->tg3_flags |= TG3_FLAG_WOL_ENABLE;
7674 else
7675 tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE;
f47c11ee 7676 spin_unlock_bh(&tp->lock);
1da177e4
LT
7677
7678 return 0;
7679}
7680
7681static u32 tg3_get_msglevel(struct net_device *dev)
7682{
7683 struct tg3 *tp = netdev_priv(dev);
7684 return tp->msg_enable;
7685}
7686
7687static void tg3_set_msglevel(struct net_device *dev, u32 value)
7688{
7689 struct tg3 *tp = netdev_priv(dev);
7690 tp->msg_enable = value;
7691}
7692
7693#if TG3_TSO_SUPPORT != 0
7694static int tg3_set_tso(struct net_device *dev, u32 value)
7695{
7696 struct tg3 *tp = netdev_priv(dev);
7697
7698 if (!(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) {
7699 if (value)
7700 return -EINVAL;
7701 return 0;
7702 }
7703 return ethtool_op_set_tso(dev, value);
7704}
7705#endif
7706
7707static int tg3_nway_reset(struct net_device *dev)
7708{
7709 struct tg3 *tp = netdev_priv(dev);
7710 u32 bmcr;
7711 int r;
7712
7713 if (!netif_running(dev))
7714 return -EAGAIN;
7715
c94e3941
MC
7716 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
7717 return -EINVAL;
7718
f47c11ee 7719 spin_lock_bh(&tp->lock);
1da177e4
LT
7720 r = -EINVAL;
7721 tg3_readphy(tp, MII_BMCR, &bmcr);
7722 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
c94e3941
MC
7723 ((bmcr & BMCR_ANENABLE) ||
7724 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT))) {
7725 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
7726 BMCR_ANENABLE);
1da177e4
LT
7727 r = 0;
7728 }
f47c11ee 7729 spin_unlock_bh(&tp->lock);
1da177e4
LT
7730
7731 return r;
7732}
7733
7734static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
7735{
7736 struct tg3 *tp = netdev_priv(dev);
7737
7738 ering->rx_max_pending = TG3_RX_RING_SIZE - 1;
7739 ering->rx_mini_max_pending = 0;
4f81c32b
MC
7740 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE)
7741 ering->rx_jumbo_max_pending = TG3_RX_JUMBO_RING_SIZE - 1;
7742 else
7743 ering->rx_jumbo_max_pending = 0;
7744
7745 ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
1da177e4
LT
7746
7747 ering->rx_pending = tp->rx_pending;
7748 ering->rx_mini_pending = 0;
4f81c32b
MC
7749 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE)
7750 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
7751 else
7752 ering->rx_jumbo_pending = 0;
7753
1da177e4
LT
7754 ering->tx_pending = tp->tx_pending;
7755}
7756
7757static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
7758{
7759 struct tg3 *tp = netdev_priv(dev);
bbe832c0 7760 int irq_sync = 0;
1da177e4
LT
7761
7762 if ((ering->rx_pending > TG3_RX_RING_SIZE - 1) ||
7763 (ering->rx_jumbo_pending > TG3_RX_JUMBO_RING_SIZE - 1) ||
7764 (ering->tx_pending > TG3_TX_RING_SIZE - 1))
7765 return -EINVAL;
7766
bbe832c0 7767 if (netif_running(dev)) {
1da177e4 7768 tg3_netif_stop(tp);
bbe832c0
MC
7769 irq_sync = 1;
7770 }
1da177e4 7771
bbe832c0 7772 tg3_full_lock(tp, irq_sync);
1da177e4
LT
7773
7774 tp->rx_pending = ering->rx_pending;
7775
7776 if ((tp->tg3_flags2 & TG3_FLG2_MAX_RXPEND_64) &&
7777 tp->rx_pending > 63)
7778 tp->rx_pending = 63;
7779 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
7780 tp->tx_pending = ering->tx_pending;
7781
7782 if (netif_running(dev)) {
944d980e 7783 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4
LT
7784 tg3_init_hw(tp);
7785 tg3_netif_start(tp);
7786 }
7787
f47c11ee 7788 tg3_full_unlock(tp);
1da177e4
LT
7789
7790 return 0;
7791}
7792
7793static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
7794{
7795 struct tg3 *tp = netdev_priv(dev);
7796
7797 epause->autoneg = (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) != 0;
7798 epause->rx_pause = (tp->tg3_flags & TG3_FLAG_RX_PAUSE) != 0;
7799 epause->tx_pause = (tp->tg3_flags & TG3_FLAG_TX_PAUSE) != 0;
7800}
7801
7802static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
7803{
7804 struct tg3 *tp = netdev_priv(dev);
bbe832c0 7805 int irq_sync = 0;
1da177e4 7806
bbe832c0 7807 if (netif_running(dev)) {
1da177e4 7808 tg3_netif_stop(tp);
bbe832c0
MC
7809 irq_sync = 1;
7810 }
1da177e4 7811
bbe832c0 7812 tg3_full_lock(tp, irq_sync);
f47c11ee 7813
1da177e4
LT
7814 if (epause->autoneg)
7815 tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
7816 else
7817 tp->tg3_flags &= ~TG3_FLAG_PAUSE_AUTONEG;
7818 if (epause->rx_pause)
7819 tp->tg3_flags |= TG3_FLAG_RX_PAUSE;
7820 else
7821 tp->tg3_flags &= ~TG3_FLAG_RX_PAUSE;
7822 if (epause->tx_pause)
7823 tp->tg3_flags |= TG3_FLAG_TX_PAUSE;
7824 else
7825 tp->tg3_flags &= ~TG3_FLAG_TX_PAUSE;
7826
7827 if (netif_running(dev)) {
944d980e 7828 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4
LT
7829 tg3_init_hw(tp);
7830 tg3_netif_start(tp);
7831 }
f47c11ee
DM
7832
7833 tg3_full_unlock(tp);
1da177e4
LT
7834
7835 return 0;
7836}
7837
7838static u32 tg3_get_rx_csum(struct net_device *dev)
7839{
7840 struct tg3 *tp = netdev_priv(dev);
7841 return (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0;
7842}
7843
7844static int tg3_set_rx_csum(struct net_device *dev, u32 data)
7845{
7846 struct tg3 *tp = netdev_priv(dev);
7847
7848 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
7849 if (data != 0)
7850 return -EINVAL;
7851 return 0;
7852 }
7853
f47c11ee 7854 spin_lock_bh(&tp->lock);
1da177e4
LT
7855 if (data)
7856 tp->tg3_flags |= TG3_FLAG_RX_CHECKSUMS;
7857 else
7858 tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
f47c11ee 7859 spin_unlock_bh(&tp->lock);
1da177e4
LT
7860
7861 return 0;
7862}
7863
7864static int tg3_set_tx_csum(struct net_device *dev, u32 data)
7865{
7866 struct tg3 *tp = netdev_priv(dev);
7867
7868 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
7869 if (data != 0)
7870 return -EINVAL;
7871 return 0;
7872 }
7873
7874 if (data)
7875 dev->features |= NETIF_F_IP_CSUM;
7876 else
7877 dev->features &= ~NETIF_F_IP_CSUM;
7878
7879 return 0;
7880}
7881
7882static int tg3_get_stats_count (struct net_device *dev)
7883{
7884 return TG3_NUM_STATS;
7885}
7886
4cafd3f5
MC
7887static int tg3_get_test_count (struct net_device *dev)
7888{
7889 return TG3_NUM_TEST;
7890}
7891
1da177e4
LT
7892static void tg3_get_strings (struct net_device *dev, u32 stringset, u8 *buf)
7893{
7894 switch (stringset) {
7895 case ETH_SS_STATS:
7896 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
7897 break;
4cafd3f5
MC
7898 case ETH_SS_TEST:
7899 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
7900 break;
1da177e4
LT
7901 default:
7902 WARN_ON(1); /* we need a WARN() */
7903 break;
7904 }
7905}
7906
4009a93d
MC
7907static int tg3_phys_id(struct net_device *dev, u32 data)
7908{
7909 struct tg3 *tp = netdev_priv(dev);
7910 int i;
7911
7912 if (!netif_running(tp->dev))
7913 return -EAGAIN;
7914
7915 if (data == 0)
7916 data = 2;
7917
7918 for (i = 0; i < (data * 2); i++) {
7919 if ((i % 2) == 0)
7920 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
7921 LED_CTRL_1000MBPS_ON |
7922 LED_CTRL_100MBPS_ON |
7923 LED_CTRL_10MBPS_ON |
7924 LED_CTRL_TRAFFIC_OVERRIDE |
7925 LED_CTRL_TRAFFIC_BLINK |
7926 LED_CTRL_TRAFFIC_LED);
7927
7928 else
7929 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
7930 LED_CTRL_TRAFFIC_OVERRIDE);
7931
7932 if (msleep_interruptible(500))
7933 break;
7934 }
7935 tw32(MAC_LED_CTRL, tp->led_ctrl);
7936 return 0;
7937}
7938
1da177e4
LT
7939static void tg3_get_ethtool_stats (struct net_device *dev,
7940 struct ethtool_stats *estats, u64 *tmp_stats)
7941{
7942 struct tg3 *tp = netdev_priv(dev);
7943 memcpy(tmp_stats, tg3_get_estats(tp), sizeof(tp->estats));
7944}
7945
566f86ad 7946#define NVRAM_TEST_SIZE 0x100
1b27777a 7947#define NVRAM_SELFBOOT_FORMAT1_SIZE 0x14
566f86ad
MC
7948
7949static int tg3_test_nvram(struct tg3 *tp)
7950{
1b27777a
MC
7951 u32 *buf, csum, magic;
7952 int i, j, err = 0, size;
566f86ad 7953
1b27777a
MC
7954 if (tg3_nvram_read(tp, 0, &magic) != 0)
7955 return -EIO;
7956
7957 magic = swab32(magic);
7958 if (magic == TG3_EEPROM_MAGIC)
7959 size = NVRAM_TEST_SIZE;
7960 else if ((magic & 0xff000000) == 0xa5000000) {
7961 if ((magic & 0xe00000) == 0x200000)
7962 size = NVRAM_SELFBOOT_FORMAT1_SIZE;
7963 else
7964 return 0;
7965 } else
7966 return -EIO;
7967
7968 buf = kmalloc(size, GFP_KERNEL);
566f86ad
MC
7969 if (buf == NULL)
7970 return -ENOMEM;
7971
1b27777a
MC
7972 err = -EIO;
7973 for (i = 0, j = 0; i < size; i += 4, j++) {
566f86ad
MC
7974 u32 val;
7975
7976 if ((err = tg3_nvram_read(tp, i, &val)) != 0)
7977 break;
7978 buf[j] = cpu_to_le32(val);
7979 }
1b27777a 7980 if (i < size)
566f86ad
MC
7981 goto out;
7982
1b27777a
MC
7983 /* Selfboot format */
7984 if (cpu_to_be32(buf[0]) != TG3_EEPROM_MAGIC) {
7985 u8 *buf8 = (u8 *) buf, csum8 = 0;
7986
7987 for (i = 0; i < size; i++)
7988 csum8 += buf8[i];
7989
7990 if (csum8 == 0)
7991 return 0;
7992 return -EIO;
7993 }
566f86ad
MC
7994
7995 /* Bootstrap checksum at offset 0x10 */
7996 csum = calc_crc((unsigned char *) buf, 0x10);
7997 if(csum != cpu_to_le32(buf[0x10/4]))
7998 goto out;
7999
8000 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
8001 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
8002 if (csum != cpu_to_le32(buf[0xfc/4]))
8003 goto out;
8004
8005 err = 0;
8006
8007out:
8008 kfree(buf);
8009 return err;
8010}
8011
ca43007a
MC
8012#define TG3_SERDES_TIMEOUT_SEC 2
8013#define TG3_COPPER_TIMEOUT_SEC 6
8014
8015static int tg3_test_link(struct tg3 *tp)
8016{
8017 int i, max;
8018
8019 if (!netif_running(tp->dev))
8020 return -ENODEV;
8021
4c987487 8022 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
ca43007a
MC
8023 max = TG3_SERDES_TIMEOUT_SEC;
8024 else
8025 max = TG3_COPPER_TIMEOUT_SEC;
8026
8027 for (i = 0; i < max; i++) {
8028 if (netif_carrier_ok(tp->dev))
8029 return 0;
8030
8031 if (msleep_interruptible(1000))
8032 break;
8033 }
8034
8035 return -EIO;
8036}
8037
a71116d1 8038/* Only test the commonly used registers */
f71e1309 8039static const int tg3_test_registers(struct tg3 *tp)
a71116d1
MC
8040{
8041 int i, is_5705;
8042 u32 offset, read_mask, write_mask, val, save_val, read_val;
8043 static struct {
8044 u16 offset;
8045 u16 flags;
8046#define TG3_FL_5705 0x1
8047#define TG3_FL_NOT_5705 0x2
8048#define TG3_FL_NOT_5788 0x4
8049 u32 read_mask;
8050 u32 write_mask;
8051 } reg_tbl[] = {
8052 /* MAC Control Registers */
8053 { MAC_MODE, TG3_FL_NOT_5705,
8054 0x00000000, 0x00ef6f8c },
8055 { MAC_MODE, TG3_FL_5705,
8056 0x00000000, 0x01ef6b8c },
8057 { MAC_STATUS, TG3_FL_NOT_5705,
8058 0x03800107, 0x00000000 },
8059 { MAC_STATUS, TG3_FL_5705,
8060 0x03800100, 0x00000000 },
8061 { MAC_ADDR_0_HIGH, 0x0000,
8062 0x00000000, 0x0000ffff },
8063 { MAC_ADDR_0_LOW, 0x0000,
8064 0x00000000, 0xffffffff },
8065 { MAC_RX_MTU_SIZE, 0x0000,
8066 0x00000000, 0x0000ffff },
8067 { MAC_TX_MODE, 0x0000,
8068 0x00000000, 0x00000070 },
8069 { MAC_TX_LENGTHS, 0x0000,
8070 0x00000000, 0x00003fff },
8071 { MAC_RX_MODE, TG3_FL_NOT_5705,
8072 0x00000000, 0x000007fc },
8073 { MAC_RX_MODE, TG3_FL_5705,
8074 0x00000000, 0x000007dc },
8075 { MAC_HASH_REG_0, 0x0000,
8076 0x00000000, 0xffffffff },
8077 { MAC_HASH_REG_1, 0x0000,
8078 0x00000000, 0xffffffff },
8079 { MAC_HASH_REG_2, 0x0000,
8080 0x00000000, 0xffffffff },
8081 { MAC_HASH_REG_3, 0x0000,
8082 0x00000000, 0xffffffff },
8083
8084 /* Receive Data and Receive BD Initiator Control Registers. */
8085 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
8086 0x00000000, 0xffffffff },
8087 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
8088 0x00000000, 0xffffffff },
8089 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
8090 0x00000000, 0x00000003 },
8091 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
8092 0x00000000, 0xffffffff },
8093 { RCVDBDI_STD_BD+0, 0x0000,
8094 0x00000000, 0xffffffff },
8095 { RCVDBDI_STD_BD+4, 0x0000,
8096 0x00000000, 0xffffffff },
8097 { RCVDBDI_STD_BD+8, 0x0000,
8098 0x00000000, 0xffff0002 },
8099 { RCVDBDI_STD_BD+0xc, 0x0000,
8100 0x00000000, 0xffffffff },
8101
8102 /* Receive BD Initiator Control Registers. */
8103 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
8104 0x00000000, 0xffffffff },
8105 { RCVBDI_STD_THRESH, TG3_FL_5705,
8106 0x00000000, 0x000003ff },
8107 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
8108 0x00000000, 0xffffffff },
8109
8110 /* Host Coalescing Control Registers. */
8111 { HOSTCC_MODE, TG3_FL_NOT_5705,
8112 0x00000000, 0x00000004 },
8113 { HOSTCC_MODE, TG3_FL_5705,
8114 0x00000000, 0x000000f6 },
8115 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
8116 0x00000000, 0xffffffff },
8117 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
8118 0x00000000, 0x000003ff },
8119 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
8120 0x00000000, 0xffffffff },
8121 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
8122 0x00000000, 0x000003ff },
8123 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
8124 0x00000000, 0xffffffff },
8125 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
8126 0x00000000, 0x000000ff },
8127 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
8128 0x00000000, 0xffffffff },
8129 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
8130 0x00000000, 0x000000ff },
8131 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
8132 0x00000000, 0xffffffff },
8133 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
8134 0x00000000, 0xffffffff },
8135 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
8136 0x00000000, 0xffffffff },
8137 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
8138 0x00000000, 0x000000ff },
8139 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
8140 0x00000000, 0xffffffff },
8141 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
8142 0x00000000, 0x000000ff },
8143 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
8144 0x00000000, 0xffffffff },
8145 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
8146 0x00000000, 0xffffffff },
8147 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
8148 0x00000000, 0xffffffff },
8149 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
8150 0x00000000, 0xffffffff },
8151 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
8152 0x00000000, 0xffffffff },
8153 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
8154 0xffffffff, 0x00000000 },
8155 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
8156 0xffffffff, 0x00000000 },
8157
8158 /* Buffer Manager Control Registers. */
8159 { BUFMGR_MB_POOL_ADDR, 0x0000,
8160 0x00000000, 0x007fff80 },
8161 { BUFMGR_MB_POOL_SIZE, 0x0000,
8162 0x00000000, 0x007fffff },
8163 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
8164 0x00000000, 0x0000003f },
8165 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
8166 0x00000000, 0x000001ff },
8167 { BUFMGR_MB_HIGH_WATER, 0x0000,
8168 0x00000000, 0x000001ff },
8169 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
8170 0xffffffff, 0x00000000 },
8171 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
8172 0xffffffff, 0x00000000 },
8173
8174 /* Mailbox Registers */
8175 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
8176 0x00000000, 0x000001ff },
8177 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
8178 0x00000000, 0x000001ff },
8179 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
8180 0x00000000, 0x000007ff },
8181 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
8182 0x00000000, 0x000001ff },
8183
8184 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
8185 };
8186
8187 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
8188 is_5705 = 1;
8189 else
8190 is_5705 = 0;
8191
8192 for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
8193 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
8194 continue;
8195
8196 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
8197 continue;
8198
8199 if ((tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
8200 (reg_tbl[i].flags & TG3_FL_NOT_5788))
8201 continue;
8202
8203 offset = (u32) reg_tbl[i].offset;
8204 read_mask = reg_tbl[i].read_mask;
8205 write_mask = reg_tbl[i].write_mask;
8206
8207 /* Save the original register content */
8208 save_val = tr32(offset);
8209
8210 /* Determine the read-only value. */
8211 read_val = save_val & read_mask;
8212
8213 /* Write zero to the register, then make sure the read-only bits
8214 * are not changed and the read/write bits are all zeros.
8215 */
8216 tw32(offset, 0);
8217
8218 val = tr32(offset);
8219
8220 /* Test the read-only and read/write bits. */
8221 if (((val & read_mask) != read_val) || (val & write_mask))
8222 goto out;
8223
8224 /* Write ones to all the bits defined by RdMask and WrMask, then
8225 * make sure the read-only bits are not changed and the
8226 * read/write bits are all ones.
8227 */
8228 tw32(offset, read_mask | write_mask);
8229
8230 val = tr32(offset);
8231
8232 /* Test the read-only bits. */
8233 if ((val & read_mask) != read_val)
8234 goto out;
8235
8236 /* Test the read/write bits. */
8237 if ((val & write_mask) != write_mask)
8238 goto out;
8239
8240 tw32(offset, save_val);
8241 }
8242
8243 return 0;
8244
8245out:
8246 printk(KERN_ERR PFX "Register test failed at offset %x\n", offset);
8247 tw32(offset, save_val);
8248 return -EIO;
8249}
8250
7942e1db
MC
8251static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
8252{
f71e1309 8253 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
7942e1db
MC
8254 int i;
8255 u32 j;
8256
8257 for (i = 0; i < sizeof(test_pattern)/sizeof(u32); i++) {
8258 for (j = 0; j < len; j += 4) {
8259 u32 val;
8260
8261 tg3_write_mem(tp, offset + j, test_pattern[i]);
8262 tg3_read_mem(tp, offset + j, &val);
8263 if (val != test_pattern[i])
8264 return -EIO;
8265 }
8266 }
8267 return 0;
8268}
8269
8270static int tg3_test_memory(struct tg3 *tp)
8271{
8272 static struct mem_entry {
8273 u32 offset;
8274 u32 len;
8275 } mem_tbl_570x[] = {
38690194 8276 { 0x00000000, 0x00b50},
7942e1db
MC
8277 { 0x00002000, 0x1c000},
8278 { 0xffffffff, 0x00000}
8279 }, mem_tbl_5705[] = {
8280 { 0x00000100, 0x0000c},
8281 { 0x00000200, 0x00008},
7942e1db
MC
8282 { 0x00004000, 0x00800},
8283 { 0x00006000, 0x01000},
8284 { 0x00008000, 0x02000},
8285 { 0x00010000, 0x0e000},
8286 { 0xffffffff, 0x00000}
8287 };
8288 struct mem_entry *mem_tbl;
8289 int err = 0;
8290 int i;
8291
8292 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
8293 mem_tbl = mem_tbl_5705;
8294 else
8295 mem_tbl = mem_tbl_570x;
8296
8297 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
8298 if ((err = tg3_do_mem_test(tp, mem_tbl[i].offset,
8299 mem_tbl[i].len)) != 0)
8300 break;
8301 }
8302
8303 return err;
8304}
8305
9f40dead
MC
8306#define TG3_MAC_LOOPBACK 0
8307#define TG3_PHY_LOOPBACK 1
8308
8309static int tg3_run_loopback(struct tg3 *tp, int loopback_mode)
c76949a6 8310{
9f40dead 8311 u32 mac_mode, rx_start_idx, rx_idx, tx_idx, opaque_key;
c76949a6
MC
8312 u32 desc_idx;
8313 struct sk_buff *skb, *rx_skb;
8314 u8 *tx_data;
8315 dma_addr_t map;
8316 int num_pkts, tx_len, rx_len, i, err;
8317 struct tg3_rx_buffer_desc *desc;
8318
9f40dead 8319 if (loopback_mode == TG3_MAC_LOOPBACK) {
c94e3941
MC
8320 /* HW errata - mac loopback fails in some cases on 5780.
8321 * Normal traffic and PHY loopback are not affected by
8322 * errata.
8323 */
8324 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780)
8325 return 0;
8326
9f40dead
MC
8327 mac_mode = (tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK) |
8328 MAC_MODE_PORT_INT_LPBACK | MAC_MODE_LINK_POLARITY |
8329 MAC_MODE_PORT_MODE_GMII;
8330 tw32(MAC_MODE, mac_mode);
8331 } else if (loopback_mode == TG3_PHY_LOOPBACK) {
c94e3941
MC
8332 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK | BMCR_FULLDPLX |
8333 BMCR_SPEED1000);
8334 udelay(40);
8335 /* reset to prevent losing 1st rx packet intermittently */
8336 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
8337 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8338 udelay(10);
8339 tw32_f(MAC_RX_MODE, tp->rx_mode);
8340 }
9f40dead
MC
8341 mac_mode = (tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK) |
8342 MAC_MODE_LINK_POLARITY | MAC_MODE_PORT_MODE_GMII;
8343 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401)
8344 mac_mode &= ~MAC_MODE_LINK_POLARITY;
8345 tw32(MAC_MODE, mac_mode);
9f40dead
MC
8346 }
8347 else
8348 return -EINVAL;
c76949a6
MC
8349
8350 err = -EIO;
8351
c76949a6
MC
8352 tx_len = 1514;
8353 skb = dev_alloc_skb(tx_len);
8354 tx_data = skb_put(skb, tx_len);
8355 memcpy(tx_data, tp->dev->dev_addr, 6);
8356 memset(tx_data + 6, 0x0, 8);
8357
8358 tw32(MAC_RX_MTU_SIZE, tx_len + 4);
8359
8360 for (i = 14; i < tx_len; i++)
8361 tx_data[i] = (u8) (i & 0xff);
8362
8363 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
8364
8365 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
8366 HOSTCC_MODE_NOW);
8367
8368 udelay(10);
8369
8370 rx_start_idx = tp->hw_status->idx[0].rx_producer;
8371
c76949a6
MC
8372 num_pkts = 0;
8373
9f40dead 8374 tg3_set_txd(tp, tp->tx_prod, map, tx_len, 0, 1);
c76949a6 8375
9f40dead 8376 tp->tx_prod++;
c76949a6
MC
8377 num_pkts++;
8378
9f40dead
MC
8379 tw32_tx_mbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW,
8380 tp->tx_prod);
09ee929c 8381 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW);
c76949a6
MC
8382
8383 udelay(10);
8384
8385 for (i = 0; i < 10; i++) {
8386 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
8387 HOSTCC_MODE_NOW);
8388
8389 udelay(10);
8390
8391 tx_idx = tp->hw_status->idx[0].tx_consumer;
8392 rx_idx = tp->hw_status->idx[0].rx_producer;
9f40dead 8393 if ((tx_idx == tp->tx_prod) &&
c76949a6
MC
8394 (rx_idx == (rx_start_idx + num_pkts)))
8395 break;
8396 }
8397
8398 pci_unmap_single(tp->pdev, map, tx_len, PCI_DMA_TODEVICE);
8399 dev_kfree_skb(skb);
8400
9f40dead 8401 if (tx_idx != tp->tx_prod)
c76949a6
MC
8402 goto out;
8403
8404 if (rx_idx != rx_start_idx + num_pkts)
8405 goto out;
8406
8407 desc = &tp->rx_rcb[rx_start_idx];
8408 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
8409 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
8410 if (opaque_key != RXD_OPAQUE_RING_STD)
8411 goto out;
8412
8413 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
8414 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
8415 goto out;
8416
8417 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4;
8418 if (rx_len != tx_len)
8419 goto out;
8420
8421 rx_skb = tp->rx_std_buffers[desc_idx].skb;
8422
8423 map = pci_unmap_addr(&tp->rx_std_buffers[desc_idx], mapping);
8424 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, PCI_DMA_FROMDEVICE);
8425
8426 for (i = 14; i < tx_len; i++) {
8427 if (*(rx_skb->data + i) != (u8) (i & 0xff))
8428 goto out;
8429 }
8430 err = 0;
8431
8432 /* tg3_free_rings will unmap and free the rx_skb */
8433out:
8434 return err;
8435}
8436
9f40dead
MC
8437#define TG3_MAC_LOOPBACK_FAILED 1
8438#define TG3_PHY_LOOPBACK_FAILED 2
8439#define TG3_LOOPBACK_FAILED (TG3_MAC_LOOPBACK_FAILED | \
8440 TG3_PHY_LOOPBACK_FAILED)
8441
8442static int tg3_test_loopback(struct tg3 *tp)
8443{
8444 int err = 0;
8445
8446 if (!netif_running(tp->dev))
8447 return TG3_LOOPBACK_FAILED;
8448
8449 tg3_reset_hw(tp);
8450
8451 if (tg3_run_loopback(tp, TG3_MAC_LOOPBACK))
8452 err |= TG3_MAC_LOOPBACK_FAILED;
8453 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
8454 if (tg3_run_loopback(tp, TG3_PHY_LOOPBACK))
8455 err |= TG3_PHY_LOOPBACK_FAILED;
8456 }
8457
8458 return err;
8459}
8460
4cafd3f5
MC
8461static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
8462 u64 *data)
8463{
566f86ad
MC
8464 struct tg3 *tp = netdev_priv(dev);
8465
bc1c7567
MC
8466 if (tp->link_config.phy_is_low_power)
8467 tg3_set_power_state(tp, PCI_D0);
8468
566f86ad
MC
8469 memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
8470
8471 if (tg3_test_nvram(tp) != 0) {
8472 etest->flags |= ETH_TEST_FL_FAILED;
8473 data[0] = 1;
8474 }
ca43007a
MC
8475 if (tg3_test_link(tp) != 0) {
8476 etest->flags |= ETH_TEST_FL_FAILED;
8477 data[1] = 1;
8478 }
a71116d1 8479 if (etest->flags & ETH_TEST_FL_OFFLINE) {
ec41c7df 8480 int err, irq_sync = 0;
bbe832c0
MC
8481
8482 if (netif_running(dev)) {
a71116d1 8483 tg3_netif_stop(tp);
bbe832c0
MC
8484 irq_sync = 1;
8485 }
a71116d1 8486
bbe832c0 8487 tg3_full_lock(tp, irq_sync);
a71116d1
MC
8488
8489 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
ec41c7df 8490 err = tg3_nvram_lock(tp);
a71116d1
MC
8491 tg3_halt_cpu(tp, RX_CPU_BASE);
8492 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
8493 tg3_halt_cpu(tp, TX_CPU_BASE);
ec41c7df
MC
8494 if (!err)
8495 tg3_nvram_unlock(tp);
a71116d1 8496
d9ab5ad1
MC
8497 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
8498 tg3_phy_reset(tp);
8499
a71116d1
MC
8500 if (tg3_test_registers(tp) != 0) {
8501 etest->flags |= ETH_TEST_FL_FAILED;
8502 data[2] = 1;
8503 }
7942e1db
MC
8504 if (tg3_test_memory(tp) != 0) {
8505 etest->flags |= ETH_TEST_FL_FAILED;
8506 data[3] = 1;
8507 }
9f40dead 8508 if ((data[4] = tg3_test_loopback(tp)) != 0)
c76949a6 8509 etest->flags |= ETH_TEST_FL_FAILED;
a71116d1 8510
f47c11ee
DM
8511 tg3_full_unlock(tp);
8512
d4bc3927
MC
8513 if (tg3_test_interrupt(tp) != 0) {
8514 etest->flags |= ETH_TEST_FL_FAILED;
8515 data[5] = 1;
8516 }
f47c11ee
DM
8517
8518 tg3_full_lock(tp, 0);
d4bc3927 8519
a71116d1
MC
8520 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
8521 if (netif_running(dev)) {
8522 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
8523 tg3_init_hw(tp);
8524 tg3_netif_start(tp);
8525 }
f47c11ee
DM
8526
8527 tg3_full_unlock(tp);
a71116d1 8528 }
bc1c7567
MC
8529 if (tp->link_config.phy_is_low_power)
8530 tg3_set_power_state(tp, PCI_D3hot);
8531
4cafd3f5
MC
8532}
8533
1da177e4
LT
8534static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
8535{
8536 struct mii_ioctl_data *data = if_mii(ifr);
8537 struct tg3 *tp = netdev_priv(dev);
8538 int err;
8539
8540 switch(cmd) {
8541 case SIOCGMIIPHY:
8542 data->phy_id = PHY_ADDR;
8543
8544 /* fallthru */
8545 case SIOCGMIIREG: {
8546 u32 mii_regval;
8547
8548 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
8549 break; /* We have no PHY */
8550
bc1c7567
MC
8551 if (tp->link_config.phy_is_low_power)
8552 return -EAGAIN;
8553
f47c11ee 8554 spin_lock_bh(&tp->lock);
1da177e4 8555 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
f47c11ee 8556 spin_unlock_bh(&tp->lock);
1da177e4
LT
8557
8558 data->val_out = mii_regval;
8559
8560 return err;
8561 }
8562
8563 case SIOCSMIIREG:
8564 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
8565 break; /* We have no PHY */
8566
8567 if (!capable(CAP_NET_ADMIN))
8568 return -EPERM;
8569
bc1c7567
MC
8570 if (tp->link_config.phy_is_low_power)
8571 return -EAGAIN;
8572
f47c11ee 8573 spin_lock_bh(&tp->lock);
1da177e4 8574 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
f47c11ee 8575 spin_unlock_bh(&tp->lock);
1da177e4
LT
8576
8577 return err;
8578
8579 default:
8580 /* do nothing */
8581 break;
8582 }
8583 return -EOPNOTSUPP;
8584}
8585
8586#if TG3_VLAN_TAG_USED
8587static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
8588{
8589 struct tg3 *tp = netdev_priv(dev);
8590
f47c11ee 8591 tg3_full_lock(tp, 0);
1da177e4
LT
8592
8593 tp->vlgrp = grp;
8594
8595 /* Update RX_MODE_KEEP_VLAN_TAG bit in RX_MODE register. */
8596 __tg3_set_rx_mode(dev);
8597
f47c11ee 8598 tg3_full_unlock(tp);
1da177e4
LT
8599}
8600
8601static void tg3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
8602{
8603 struct tg3 *tp = netdev_priv(dev);
8604
f47c11ee 8605 tg3_full_lock(tp, 0);
1da177e4
LT
8606 if (tp->vlgrp)
8607 tp->vlgrp->vlan_devices[vid] = NULL;
f47c11ee 8608 tg3_full_unlock(tp);
1da177e4
LT
8609}
8610#endif
8611
15f9850d
DM
8612static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
8613{
8614 struct tg3 *tp = netdev_priv(dev);
8615
8616 memcpy(ec, &tp->coal, sizeof(*ec));
8617 return 0;
8618}
8619
d244c892
MC
8620static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
8621{
8622 struct tg3 *tp = netdev_priv(dev);
8623 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
8624 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
8625
8626 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
8627 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
8628 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
8629 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
8630 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
8631 }
8632
8633 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
8634 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
8635 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
8636 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
8637 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
8638 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
8639 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
8640 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
8641 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
8642 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
8643 return -EINVAL;
8644
8645 /* No rx interrupts will be generated if both are zero */
8646 if ((ec->rx_coalesce_usecs == 0) &&
8647 (ec->rx_max_coalesced_frames == 0))
8648 return -EINVAL;
8649
8650 /* No tx interrupts will be generated if both are zero */
8651 if ((ec->tx_coalesce_usecs == 0) &&
8652 (ec->tx_max_coalesced_frames == 0))
8653 return -EINVAL;
8654
8655 /* Only copy relevant parameters, ignore all others. */
8656 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
8657 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
8658 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
8659 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
8660 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
8661 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
8662 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
8663 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
8664 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
8665
8666 if (netif_running(dev)) {
8667 tg3_full_lock(tp, 0);
8668 __tg3_set_coalesce(tp, &tp->coal);
8669 tg3_full_unlock(tp);
8670 }
8671 return 0;
8672}
8673
1da177e4
LT
8674static struct ethtool_ops tg3_ethtool_ops = {
8675 .get_settings = tg3_get_settings,
8676 .set_settings = tg3_set_settings,
8677 .get_drvinfo = tg3_get_drvinfo,
8678 .get_regs_len = tg3_get_regs_len,
8679 .get_regs = tg3_get_regs,
8680 .get_wol = tg3_get_wol,
8681 .set_wol = tg3_set_wol,
8682 .get_msglevel = tg3_get_msglevel,
8683 .set_msglevel = tg3_set_msglevel,
8684 .nway_reset = tg3_nway_reset,
8685 .get_link = ethtool_op_get_link,
8686 .get_eeprom_len = tg3_get_eeprom_len,
8687 .get_eeprom = tg3_get_eeprom,
8688 .set_eeprom = tg3_set_eeprom,
8689 .get_ringparam = tg3_get_ringparam,
8690 .set_ringparam = tg3_set_ringparam,
8691 .get_pauseparam = tg3_get_pauseparam,
8692 .set_pauseparam = tg3_set_pauseparam,
8693 .get_rx_csum = tg3_get_rx_csum,
8694 .set_rx_csum = tg3_set_rx_csum,
8695 .get_tx_csum = ethtool_op_get_tx_csum,
8696 .set_tx_csum = tg3_set_tx_csum,
8697 .get_sg = ethtool_op_get_sg,
8698 .set_sg = ethtool_op_set_sg,
8699#if TG3_TSO_SUPPORT != 0
8700 .get_tso = ethtool_op_get_tso,
8701 .set_tso = tg3_set_tso,
8702#endif
4cafd3f5
MC
8703 .self_test_count = tg3_get_test_count,
8704 .self_test = tg3_self_test,
1da177e4 8705 .get_strings = tg3_get_strings,
4009a93d 8706 .phys_id = tg3_phys_id,
1da177e4
LT
8707 .get_stats_count = tg3_get_stats_count,
8708 .get_ethtool_stats = tg3_get_ethtool_stats,
15f9850d 8709 .get_coalesce = tg3_get_coalesce,
d244c892 8710 .set_coalesce = tg3_set_coalesce,
2ff43697 8711 .get_perm_addr = ethtool_op_get_perm_addr,
1da177e4
LT
8712};
8713
8714static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
8715{
1b27777a 8716 u32 cursize, val, magic;
1da177e4
LT
8717
8718 tp->nvram_size = EEPROM_CHIP_SIZE;
8719
8720 if (tg3_nvram_read(tp, 0, &val) != 0)
8721 return;
8722
1b27777a
MC
8723 magic = swab32(val);
8724 if ((magic != TG3_EEPROM_MAGIC) && ((magic & 0xff000000) != 0xa5000000))
1da177e4
LT
8725 return;
8726
8727 /*
8728 * Size the chip by reading offsets at increasing powers of two.
8729 * When we encounter our validation signature, we know the addressing
8730 * has wrapped around, and thus have our chip size.
8731 */
1b27777a 8732 cursize = 0x10;
1da177e4
LT
8733
8734 while (cursize < tp->nvram_size) {
8735 if (tg3_nvram_read(tp, cursize, &val) != 0)
8736 return;
8737
1b27777a 8738 if (swab32(val) == magic)
1da177e4
LT
8739 break;
8740
8741 cursize <<= 1;
8742 }
8743
8744 tp->nvram_size = cursize;
8745}
8746
8747static void __devinit tg3_get_nvram_size(struct tg3 *tp)
8748{
8749 u32 val;
8750
1b27777a
MC
8751 if (tg3_nvram_read(tp, 0, &val) != 0)
8752 return;
8753
8754 /* Selfboot format */
8755 if (swab32(val) != TG3_EEPROM_MAGIC) {
8756 tg3_get_eeprom_size(tp);
8757 return;
8758 }
8759
1da177e4
LT
8760 if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
8761 if (val != 0) {
8762 tp->nvram_size = (val >> 16) * 1024;
8763 return;
8764 }
8765 }
8766 tp->nvram_size = 0x20000;
8767}
8768
8769static void __devinit tg3_get_nvram_info(struct tg3 *tp)
8770{
8771 u32 nvcfg1;
8772
8773 nvcfg1 = tr32(NVRAM_CFG1);
8774 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
8775 tp->tg3_flags2 |= TG3_FLG2_FLASH;
8776 }
8777 else {
8778 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
8779 tw32(NVRAM_CFG1, nvcfg1);
8780 }
8781
4c987487 8782 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) ||
a4e2b347 8783 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
1da177e4
LT
8784 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
8785 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
8786 tp->nvram_jedecnum = JEDEC_ATMEL;
8787 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
8788 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8789 break;
8790 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
8791 tp->nvram_jedecnum = JEDEC_ATMEL;
8792 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
8793 break;
8794 case FLASH_VENDOR_ATMEL_EEPROM:
8795 tp->nvram_jedecnum = JEDEC_ATMEL;
8796 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
8797 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8798 break;
8799 case FLASH_VENDOR_ST:
8800 tp->nvram_jedecnum = JEDEC_ST;
8801 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
8802 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8803 break;
8804 case FLASH_VENDOR_SAIFUN:
8805 tp->nvram_jedecnum = JEDEC_SAIFUN;
8806 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
8807 break;
8808 case FLASH_VENDOR_SST_SMALL:
8809 case FLASH_VENDOR_SST_LARGE:
8810 tp->nvram_jedecnum = JEDEC_SST;
8811 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
8812 break;
8813 }
8814 }
8815 else {
8816 tp->nvram_jedecnum = JEDEC_ATMEL;
8817 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
8818 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8819 }
8820}
8821
361b4ac2
MC
8822static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
8823{
8824 u32 nvcfg1;
8825
8826 nvcfg1 = tr32(NVRAM_CFG1);
8827
e6af301b
MC
8828 /* NVRAM protection for TPM */
8829 if (nvcfg1 & (1 << 27))
8830 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
8831
361b4ac2
MC
8832 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
8833 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
8834 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
8835 tp->nvram_jedecnum = JEDEC_ATMEL;
8836 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8837 break;
8838 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
8839 tp->nvram_jedecnum = JEDEC_ATMEL;
8840 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8841 tp->tg3_flags2 |= TG3_FLG2_FLASH;
8842 break;
8843 case FLASH_5752VENDOR_ST_M45PE10:
8844 case FLASH_5752VENDOR_ST_M45PE20:
8845 case FLASH_5752VENDOR_ST_M45PE40:
8846 tp->nvram_jedecnum = JEDEC_ST;
8847 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8848 tp->tg3_flags2 |= TG3_FLG2_FLASH;
8849 break;
8850 }
8851
8852 if (tp->tg3_flags2 & TG3_FLG2_FLASH) {
8853 switch (nvcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
8854 case FLASH_5752PAGE_SIZE_256:
8855 tp->nvram_pagesize = 256;
8856 break;
8857 case FLASH_5752PAGE_SIZE_512:
8858 tp->nvram_pagesize = 512;
8859 break;
8860 case FLASH_5752PAGE_SIZE_1K:
8861 tp->nvram_pagesize = 1024;
8862 break;
8863 case FLASH_5752PAGE_SIZE_2K:
8864 tp->nvram_pagesize = 2048;
8865 break;
8866 case FLASH_5752PAGE_SIZE_4K:
8867 tp->nvram_pagesize = 4096;
8868 break;
8869 case FLASH_5752PAGE_SIZE_264:
8870 tp->nvram_pagesize = 264;
8871 break;
8872 }
8873 }
8874 else {
8875 /* For eeprom, set pagesize to maximum eeprom size */
8876 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
8877
8878 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
8879 tw32(NVRAM_CFG1, nvcfg1);
8880 }
8881}
8882
1b27777a
MC
8883static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
8884{
8885 u32 nvcfg1;
8886
8887 nvcfg1 = tr32(NVRAM_CFG1);
8888
8889 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
8890 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
8891 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
8892 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
8893 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
8894 tp->nvram_jedecnum = JEDEC_ATMEL;
8895 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8896 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
8897
8898 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
8899 tw32(NVRAM_CFG1, nvcfg1);
8900 break;
8901 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
8902 case FLASH_5755VENDOR_ATMEL_FLASH_1:
8903 case FLASH_5755VENDOR_ATMEL_FLASH_2:
8904 case FLASH_5755VENDOR_ATMEL_FLASH_3:
8905 tp->nvram_jedecnum = JEDEC_ATMEL;
8906 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8907 tp->tg3_flags2 |= TG3_FLG2_FLASH;
8908 tp->nvram_pagesize = 264;
8909 break;
8910 case FLASH_5752VENDOR_ST_M45PE10:
8911 case FLASH_5752VENDOR_ST_M45PE20:
8912 case FLASH_5752VENDOR_ST_M45PE40:
8913 tp->nvram_jedecnum = JEDEC_ST;
8914 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8915 tp->tg3_flags2 |= TG3_FLG2_FLASH;
8916 tp->nvram_pagesize = 256;
8917 break;
8918 }
8919}
8920
1da177e4
LT
8921/* Chips other than 5700/5701 use the NVRAM for fetching info. */
8922static void __devinit tg3_nvram_init(struct tg3 *tp)
8923{
8924 int j;
8925
8926 if (tp->tg3_flags2 & TG3_FLG2_SUN_570X)
8927 return;
8928
8929 tw32_f(GRC_EEPROM_ADDR,
8930 (EEPROM_ADDR_FSM_RESET |
8931 (EEPROM_DEFAULT_CLOCK_PERIOD <<
8932 EEPROM_ADDR_CLKPERD_SHIFT)));
8933
8934 /* XXX schedule_timeout() ... */
8935 for (j = 0; j < 100; j++)
8936 udelay(10);
8937
8938 /* Enable seeprom accesses. */
8939 tw32_f(GRC_LOCAL_CTRL,
8940 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
8941 udelay(100);
8942
8943 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
8944 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
8945 tp->tg3_flags |= TG3_FLAG_NVRAM;
8946
ec41c7df
MC
8947 if (tg3_nvram_lock(tp)) {
8948 printk(KERN_WARNING PFX "%s: Cannot get nvarm lock, "
8949 "tg3_nvram_init failed.\n", tp->dev->name);
8950 return;
8951 }
e6af301b 8952 tg3_enable_nvram_access(tp);
1da177e4 8953
361b4ac2
MC
8954 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
8955 tg3_get_5752_nvram_info(tp);
1b27777a
MC
8956 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8957 tg3_get_5787_nvram_info(tp);
361b4ac2
MC
8958 else
8959 tg3_get_nvram_info(tp);
8960
1da177e4
LT
8961 tg3_get_nvram_size(tp);
8962
e6af301b 8963 tg3_disable_nvram_access(tp);
381291b7 8964 tg3_nvram_unlock(tp);
1da177e4
LT
8965
8966 } else {
8967 tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED);
8968
8969 tg3_get_eeprom_size(tp);
8970 }
8971}
8972
8973static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
8974 u32 offset, u32 *val)
8975{
8976 u32 tmp;
8977 int i;
8978
8979 if (offset > EEPROM_ADDR_ADDR_MASK ||
8980 (offset % 4) != 0)
8981 return -EINVAL;
8982
8983 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
8984 EEPROM_ADDR_DEVID_MASK |
8985 EEPROM_ADDR_READ);
8986 tw32(GRC_EEPROM_ADDR,
8987 tmp |
8988 (0 << EEPROM_ADDR_DEVID_SHIFT) |
8989 ((offset << EEPROM_ADDR_ADDR_SHIFT) &
8990 EEPROM_ADDR_ADDR_MASK) |
8991 EEPROM_ADDR_READ | EEPROM_ADDR_START);
8992
8993 for (i = 0; i < 10000; i++) {
8994 tmp = tr32(GRC_EEPROM_ADDR);
8995
8996 if (tmp & EEPROM_ADDR_COMPLETE)
8997 break;
8998 udelay(100);
8999 }
9000 if (!(tmp & EEPROM_ADDR_COMPLETE))
9001 return -EBUSY;
9002
9003 *val = tr32(GRC_EEPROM_DATA);
9004 return 0;
9005}
9006
9007#define NVRAM_CMD_TIMEOUT 10000
9008
9009static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
9010{
9011 int i;
9012
9013 tw32(NVRAM_CMD, nvram_cmd);
9014 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
9015 udelay(10);
9016 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
9017 udelay(10);
9018 break;
9019 }
9020 }
9021 if (i == NVRAM_CMD_TIMEOUT) {
9022 return -EBUSY;
9023 }
9024 return 0;
9025}
9026
9027static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
9028{
9029 int ret;
9030
9031 if (tp->tg3_flags2 & TG3_FLG2_SUN_570X) {
9032 printk(KERN_ERR PFX "Attempt to do nvram_read on Sun 570X\n");
9033 return -EINVAL;
9034 }
9035
9036 if (!(tp->tg3_flags & TG3_FLAG_NVRAM))
9037 return tg3_nvram_read_using_eeprom(tp, offset, val);
9038
9039 if ((tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) &&
9040 (tp->tg3_flags2 & TG3_FLG2_FLASH) &&
9041 (tp->nvram_jedecnum == JEDEC_ATMEL)) {
9042
9043 offset = ((offset / tp->nvram_pagesize) <<
9044 ATMEL_AT45DB0X1B_PAGE_POS) +
9045 (offset % tp->nvram_pagesize);
9046 }
9047
9048 if (offset > NVRAM_ADDR_MSK)
9049 return -EINVAL;
9050
ec41c7df
MC
9051 ret = tg3_nvram_lock(tp);
9052 if (ret)
9053 return ret;
1da177e4 9054
e6af301b 9055 tg3_enable_nvram_access(tp);
1da177e4
LT
9056
9057 tw32(NVRAM_ADDR, offset);
9058 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
9059 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
9060
9061 if (ret == 0)
9062 *val = swab32(tr32(NVRAM_RDDATA));
9063
e6af301b 9064 tg3_disable_nvram_access(tp);
1da177e4 9065
381291b7
MC
9066 tg3_nvram_unlock(tp);
9067
1da177e4
LT
9068 return ret;
9069}
9070
9071static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
9072 u32 offset, u32 len, u8 *buf)
9073{
9074 int i, j, rc = 0;
9075 u32 val;
9076
9077 for (i = 0; i < len; i += 4) {
9078 u32 addr, data;
9079
9080 addr = offset + i;
9081
9082 memcpy(&data, buf + i, 4);
9083
9084 tw32(GRC_EEPROM_DATA, cpu_to_le32(data));
9085
9086 val = tr32(GRC_EEPROM_ADDR);
9087 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
9088
9089 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
9090 EEPROM_ADDR_READ);
9091 tw32(GRC_EEPROM_ADDR, val |
9092 (0 << EEPROM_ADDR_DEVID_SHIFT) |
9093 (addr & EEPROM_ADDR_ADDR_MASK) |
9094 EEPROM_ADDR_START |
9095 EEPROM_ADDR_WRITE);
9096
9097 for (j = 0; j < 10000; j++) {
9098 val = tr32(GRC_EEPROM_ADDR);
9099
9100 if (val & EEPROM_ADDR_COMPLETE)
9101 break;
9102 udelay(100);
9103 }
9104 if (!(val & EEPROM_ADDR_COMPLETE)) {
9105 rc = -EBUSY;
9106 break;
9107 }
9108 }
9109
9110 return rc;
9111}
9112
9113/* offset and length are dword aligned */
9114static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
9115 u8 *buf)
9116{
9117 int ret = 0;
9118 u32 pagesize = tp->nvram_pagesize;
9119 u32 pagemask = pagesize - 1;
9120 u32 nvram_cmd;
9121 u8 *tmp;
9122
9123 tmp = kmalloc(pagesize, GFP_KERNEL);
9124 if (tmp == NULL)
9125 return -ENOMEM;
9126
9127 while (len) {
9128 int j;
e6af301b 9129 u32 phy_addr, page_off, size;
1da177e4
LT
9130
9131 phy_addr = offset & ~pagemask;
9132
9133 for (j = 0; j < pagesize; j += 4) {
9134 if ((ret = tg3_nvram_read(tp, phy_addr + j,
9135 (u32 *) (tmp + j))))
9136 break;
9137 }
9138 if (ret)
9139 break;
9140
9141 page_off = offset & pagemask;
9142 size = pagesize;
9143 if (len < size)
9144 size = len;
9145
9146 len -= size;
9147
9148 memcpy(tmp + page_off, buf, size);
9149
9150 offset = offset + (pagesize - page_off);
9151
e6af301b 9152 tg3_enable_nvram_access(tp);
1da177e4
LT
9153
9154 /*
9155 * Before we can erase the flash page, we need
9156 * to issue a special "write enable" command.
9157 */
9158 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
9159
9160 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
9161 break;
9162
9163 /* Erase the target page */
9164 tw32(NVRAM_ADDR, phy_addr);
9165
9166 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
9167 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
9168
9169 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
9170 break;
9171
9172 /* Issue another write enable to start the write. */
9173 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
9174
9175 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
9176 break;
9177
9178 for (j = 0; j < pagesize; j += 4) {
9179 u32 data;
9180
9181 data = *((u32 *) (tmp + j));
9182 tw32(NVRAM_WRDATA, cpu_to_be32(data));
9183
9184 tw32(NVRAM_ADDR, phy_addr + j);
9185
9186 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
9187 NVRAM_CMD_WR;
9188
9189 if (j == 0)
9190 nvram_cmd |= NVRAM_CMD_FIRST;
9191 else if (j == (pagesize - 4))
9192 nvram_cmd |= NVRAM_CMD_LAST;
9193
9194 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
9195 break;
9196 }
9197 if (ret)
9198 break;
9199 }
9200
9201 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
9202 tg3_nvram_exec_cmd(tp, nvram_cmd);
9203
9204 kfree(tmp);
9205
9206 return ret;
9207}
9208
9209/* offset and length are dword aligned */
9210static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
9211 u8 *buf)
9212{
9213 int i, ret = 0;
9214
9215 for (i = 0; i < len; i += 4, offset += 4) {
9216 u32 data, page_off, phy_addr, nvram_cmd;
9217
9218 memcpy(&data, buf + i, 4);
9219 tw32(NVRAM_WRDATA, cpu_to_be32(data));
9220
9221 page_off = offset % tp->nvram_pagesize;
9222
9223 if ((tp->tg3_flags2 & TG3_FLG2_FLASH) &&
9224 (tp->nvram_jedecnum == JEDEC_ATMEL)) {
9225
9226 phy_addr = ((offset / tp->nvram_pagesize) <<
9227 ATMEL_AT45DB0X1B_PAGE_POS) + page_off;
9228 }
9229 else {
9230 phy_addr = offset;
9231 }
9232
9233 tw32(NVRAM_ADDR, phy_addr);
9234
9235 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
9236
9237 if ((page_off == 0) || (i == 0))
9238 nvram_cmd |= NVRAM_CMD_FIRST;
9239 else if (page_off == (tp->nvram_pagesize - 4))
9240 nvram_cmd |= NVRAM_CMD_LAST;
9241
9242 if (i == (len - 4))
9243 nvram_cmd |= NVRAM_CMD_LAST;
9244
4c987487 9245 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752) &&
1b27777a 9246 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787) &&
4c987487
MC
9247 (tp->nvram_jedecnum == JEDEC_ST) &&
9248 (nvram_cmd & NVRAM_CMD_FIRST)) {
1da177e4
LT
9249
9250 if ((ret = tg3_nvram_exec_cmd(tp,
9251 NVRAM_CMD_WREN | NVRAM_CMD_GO |
9252 NVRAM_CMD_DONE)))
9253
9254 break;
9255 }
9256 if (!(tp->tg3_flags2 & TG3_FLG2_FLASH)) {
9257 /* We always do complete word writes to eeprom. */
9258 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
9259 }
9260
9261 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
9262 break;
9263 }
9264 return ret;
9265}
9266
9267/* offset and length are dword aligned */
9268static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
9269{
9270 int ret;
9271
9272 if (tp->tg3_flags2 & TG3_FLG2_SUN_570X) {
9273 printk(KERN_ERR PFX "Attempt to do nvram_write on Sun 570X\n");
9274 return -EINVAL;
9275 }
9276
9277 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
314fba34
MC
9278 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
9279 ~GRC_LCLCTRL_GPIO_OUTPUT1);
1da177e4
LT
9280 udelay(40);
9281 }
9282
9283 if (!(tp->tg3_flags & TG3_FLAG_NVRAM)) {
9284 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
9285 }
9286 else {
9287 u32 grc_mode;
9288
ec41c7df
MC
9289 ret = tg3_nvram_lock(tp);
9290 if (ret)
9291 return ret;
1da177e4 9292
e6af301b
MC
9293 tg3_enable_nvram_access(tp);
9294 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
9295 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM))
1da177e4 9296 tw32(NVRAM_WRITE1, 0x406);
1da177e4
LT
9297
9298 grc_mode = tr32(GRC_MODE);
9299 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
9300
9301 if ((tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) ||
9302 !(tp->tg3_flags2 & TG3_FLG2_FLASH)) {
9303
9304 ret = tg3_nvram_write_block_buffered(tp, offset, len,
9305 buf);
9306 }
9307 else {
9308 ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
9309 buf);
9310 }
9311
9312 grc_mode = tr32(GRC_MODE);
9313 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
9314
e6af301b 9315 tg3_disable_nvram_access(tp);
1da177e4
LT
9316 tg3_nvram_unlock(tp);
9317 }
9318
9319 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
314fba34 9320 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
1da177e4
LT
9321 udelay(40);
9322 }
9323
9324 return ret;
9325}
9326
9327struct subsys_tbl_ent {
9328 u16 subsys_vendor, subsys_devid;
9329 u32 phy_id;
9330};
9331
9332static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
9333 /* Broadcom boards. */
9334 { PCI_VENDOR_ID_BROADCOM, 0x1644, PHY_ID_BCM5401 }, /* BCM95700A6 */
9335 { PCI_VENDOR_ID_BROADCOM, 0x0001, PHY_ID_BCM5701 }, /* BCM95701A5 */
9336 { PCI_VENDOR_ID_BROADCOM, 0x0002, PHY_ID_BCM8002 }, /* BCM95700T6 */
9337 { PCI_VENDOR_ID_BROADCOM, 0x0003, 0 }, /* BCM95700A9 */
9338 { PCI_VENDOR_ID_BROADCOM, 0x0005, PHY_ID_BCM5701 }, /* BCM95701T1 */
9339 { PCI_VENDOR_ID_BROADCOM, 0x0006, PHY_ID_BCM5701 }, /* BCM95701T8 */
9340 { PCI_VENDOR_ID_BROADCOM, 0x0007, 0 }, /* BCM95701A7 */
9341 { PCI_VENDOR_ID_BROADCOM, 0x0008, PHY_ID_BCM5701 }, /* BCM95701A10 */
9342 { PCI_VENDOR_ID_BROADCOM, 0x8008, PHY_ID_BCM5701 }, /* BCM95701A12 */
9343 { PCI_VENDOR_ID_BROADCOM, 0x0009, PHY_ID_BCM5703 }, /* BCM95703Ax1 */
9344 { PCI_VENDOR_ID_BROADCOM, 0x8009, PHY_ID_BCM5703 }, /* BCM95703Ax2 */
9345
9346 /* 3com boards. */
9347 { PCI_VENDOR_ID_3COM, 0x1000, PHY_ID_BCM5401 }, /* 3C996T */
9348 { PCI_VENDOR_ID_3COM, 0x1006, PHY_ID_BCM5701 }, /* 3C996BT */
9349 { PCI_VENDOR_ID_3COM, 0x1004, 0 }, /* 3C996SX */
9350 { PCI_VENDOR_ID_3COM, 0x1007, PHY_ID_BCM5701 }, /* 3C1000T */
9351 { PCI_VENDOR_ID_3COM, 0x1008, PHY_ID_BCM5701 }, /* 3C940BR01 */
9352
9353 /* DELL boards. */
9354 { PCI_VENDOR_ID_DELL, 0x00d1, PHY_ID_BCM5401 }, /* VIPER */
9355 { PCI_VENDOR_ID_DELL, 0x0106, PHY_ID_BCM5401 }, /* JAGUAR */
9356 { PCI_VENDOR_ID_DELL, 0x0109, PHY_ID_BCM5411 }, /* MERLOT */
9357 { PCI_VENDOR_ID_DELL, 0x010a, PHY_ID_BCM5411 }, /* SLIM_MERLOT */
9358
9359 /* Compaq boards. */
9360 { PCI_VENDOR_ID_COMPAQ, 0x007c, PHY_ID_BCM5701 }, /* BANSHEE */
9361 { PCI_VENDOR_ID_COMPAQ, 0x009a, PHY_ID_BCM5701 }, /* BANSHEE_2 */
9362 { PCI_VENDOR_ID_COMPAQ, 0x007d, 0 }, /* CHANGELING */
9363 { PCI_VENDOR_ID_COMPAQ, 0x0085, PHY_ID_BCM5701 }, /* NC7780 */
9364 { PCI_VENDOR_ID_COMPAQ, 0x0099, PHY_ID_BCM5701 }, /* NC7780_2 */
9365
9366 /* IBM boards. */
9367 { PCI_VENDOR_ID_IBM, 0x0281, 0 } /* IBM??? */
9368};
9369
9370static inline struct subsys_tbl_ent *lookup_by_subsys(struct tg3 *tp)
9371{
9372 int i;
9373
9374 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
9375 if ((subsys_id_to_phy_id[i].subsys_vendor ==
9376 tp->pdev->subsystem_vendor) &&
9377 (subsys_id_to_phy_id[i].subsys_devid ==
9378 tp->pdev->subsystem_device))
9379 return &subsys_id_to_phy_id[i];
9380 }
9381 return NULL;
9382}
9383
7d0c41ef
MC
9384/* Since this function may be called in D3-hot power state during
9385 * tg3_init_one(), only config cycles are allowed.
9386 */
9387static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
1da177e4 9388{
1da177e4 9389 u32 val;
7d0c41ef
MC
9390
9391 /* Make sure register accesses (indirect or otherwise)
9392 * will function correctly.
9393 */
9394 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
9395 tp->misc_host_ctrl);
1da177e4
LT
9396
9397 tp->phy_id = PHY_ID_INVALID;
7d0c41ef
MC
9398 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
9399
72b845e0
DM
9400 /* Do not even try poking around in here on Sun parts. */
9401 if (tp->tg3_flags2 & TG3_FLG2_SUN_570X)
9402 return;
9403
1da177e4
LT
9404 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9405 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9406 u32 nic_cfg, led_cfg;
7d0c41ef
MC
9407 u32 nic_phy_id, ver, cfg2 = 0, eeprom_phy_id;
9408 int eeprom_phy_serdes = 0;
1da177e4
LT
9409
9410 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9411 tp->nic_sram_data_cfg = nic_cfg;
9412
9413 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
9414 ver >>= NIC_SRAM_DATA_VER_SHIFT;
9415 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) &&
9416 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) &&
9417 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703) &&
9418 (ver > 0) && (ver < 0x100))
9419 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
9420
1da177e4
LT
9421 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
9422 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
9423 eeprom_phy_serdes = 1;
9424
9425 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
9426 if (nic_phy_id != 0) {
9427 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
9428 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
9429
9430 eeprom_phy_id = (id1 >> 16) << 10;
9431 eeprom_phy_id |= (id2 & 0xfc00) << 16;
9432 eeprom_phy_id |= (id2 & 0x03ff) << 0;
9433 } else
9434 eeprom_phy_id = 0;
9435
7d0c41ef 9436 tp->phy_id = eeprom_phy_id;
747e8f8b 9437 if (eeprom_phy_serdes) {
a4e2b347 9438 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
747e8f8b
MC
9439 tp->tg3_flags2 |= TG3_FLG2_MII_SERDES;
9440 else
9441 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
9442 }
7d0c41ef 9443
cbf46853 9444 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
1da177e4
LT
9445 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
9446 SHASTA_EXT_LED_MODE_MASK);
cbf46853 9447 else
1da177e4
LT
9448 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
9449
9450 switch (led_cfg) {
9451 default:
9452 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
9453 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
9454 break;
9455
9456 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
9457 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
9458 break;
9459
9460 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
9461 tp->led_ctrl = LED_CTRL_MODE_MAC;
9ba27794
MC
9462
9463 /* Default to PHY_1_MODE if 0 (MAC_MODE) is
9464 * read on some older 5700/5701 bootcode.
9465 */
9466 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
9467 ASIC_REV_5700 ||
9468 GET_ASIC_REV(tp->pci_chip_rev_id) ==
9469 ASIC_REV_5701)
9470 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
9471
1da177e4
LT
9472 break;
9473
9474 case SHASTA_EXT_LED_SHARED:
9475 tp->led_ctrl = LED_CTRL_MODE_SHARED;
9476 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
9477 tp->pci_chip_rev_id != CHIPREV_ID_5750_A1)
9478 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
9479 LED_CTRL_MODE_PHY_2);
9480 break;
9481
9482 case SHASTA_EXT_LED_MAC:
9483 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
9484 break;
9485
9486 case SHASTA_EXT_LED_COMBO:
9487 tp->led_ctrl = LED_CTRL_MODE_COMBO;
9488 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)
9489 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
9490 LED_CTRL_MODE_PHY_2);
9491 break;
9492
9493 };
9494
9495 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
9496 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) &&
9497 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
9498 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
9499
9500 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) &&
9501 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) &&
9502 (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP))
9503 tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT;
9504
9505 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9506 tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
cbf46853 9507 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
1da177e4
LT
9508 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
9509 }
9510 if (nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)
9511 tp->tg3_flags |= TG3_FLAG_SERDES_WOL_CAP;
9512
9513 if (cfg2 & (1 << 17))
9514 tp->tg3_flags2 |= TG3_FLG2_CAPACITIVE_COUPLING;
9515
9516 /* serdes signal pre-emphasis in register 0x590 set by */
9517 /* bootcode if bit 18 is set */
9518 if (cfg2 & (1 << 18))
9519 tp->tg3_flags2 |= TG3_FLG2_SERDES_PREEMPHASIS;
9520 }
7d0c41ef
MC
9521}
9522
9523static int __devinit tg3_phy_probe(struct tg3 *tp)
9524{
9525 u32 hw_phy_id_1, hw_phy_id_2;
9526 u32 hw_phy_id, hw_phy_id_masked;
9527 int err;
1da177e4
LT
9528
9529 /* Reading the PHY ID register can conflict with ASF
9530 * firwmare access to the PHY hardware.
9531 */
9532 err = 0;
9533 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
9534 hw_phy_id = hw_phy_id_masked = PHY_ID_INVALID;
9535 } else {
9536 /* Now read the physical PHY_ID from the chip and verify
9537 * that it is sane. If it doesn't look good, we fall back
9538 * to either the hard-coded table based PHY_ID and failing
9539 * that the value found in the eeprom area.
9540 */
9541 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
9542 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
9543
9544 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10;
9545 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
9546 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0;
9547
9548 hw_phy_id_masked = hw_phy_id & PHY_ID_MASK;
9549 }
9550
9551 if (!err && KNOWN_PHY_ID(hw_phy_id_masked)) {
9552 tp->phy_id = hw_phy_id;
9553 if (hw_phy_id_masked == PHY_ID_BCM8002)
9554 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
da6b2d01
MC
9555 else
9556 tp->tg3_flags2 &= ~TG3_FLG2_PHY_SERDES;
1da177e4 9557 } else {
7d0c41ef
MC
9558 if (tp->phy_id != PHY_ID_INVALID) {
9559 /* Do nothing, phy ID already set up in
9560 * tg3_get_eeprom_hw_cfg().
9561 */
1da177e4
LT
9562 } else {
9563 struct subsys_tbl_ent *p;
9564
9565 /* No eeprom signature? Try the hardcoded
9566 * subsys device table.
9567 */
9568 p = lookup_by_subsys(tp);
9569 if (!p)
9570 return -ENODEV;
9571
9572 tp->phy_id = p->phy_id;
9573 if (!tp->phy_id ||
9574 tp->phy_id == PHY_ID_BCM8002)
9575 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
9576 }
9577 }
9578
747e8f8b 9579 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) &&
1da177e4
LT
9580 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
9581 u32 bmsr, adv_reg, tg3_ctrl;
9582
9583 tg3_readphy(tp, MII_BMSR, &bmsr);
9584 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
9585 (bmsr & BMSR_LSTATUS))
9586 goto skip_phy_reset;
9587
9588 err = tg3_phy_reset(tp);
9589 if (err)
9590 return err;
9591
9592 adv_reg = (ADVERTISE_10HALF | ADVERTISE_10FULL |
9593 ADVERTISE_100HALF | ADVERTISE_100FULL |
9594 ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
9595 tg3_ctrl = 0;
9596 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY)) {
9597 tg3_ctrl = (MII_TG3_CTRL_ADV_1000_HALF |
9598 MII_TG3_CTRL_ADV_1000_FULL);
9599 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
9600 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
9601 tg3_ctrl |= (MII_TG3_CTRL_AS_MASTER |
9602 MII_TG3_CTRL_ENABLE_AS_MASTER);
9603 }
9604
9605 if (!tg3_copper_is_advertising_all(tp)) {
9606 tg3_writephy(tp, MII_ADVERTISE, adv_reg);
9607
9608 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
9609 tg3_writephy(tp, MII_TG3_CTRL, tg3_ctrl);
9610
9611 tg3_writephy(tp, MII_BMCR,
9612 BMCR_ANENABLE | BMCR_ANRESTART);
9613 }
9614 tg3_phy_set_wirespeed(tp);
9615
9616 tg3_writephy(tp, MII_ADVERTISE, adv_reg);
9617 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
9618 tg3_writephy(tp, MII_TG3_CTRL, tg3_ctrl);
9619 }
9620
9621skip_phy_reset:
9622 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
9623 err = tg3_init_5401phy_dsp(tp);
9624 if (err)
9625 return err;
9626 }
9627
9628 if (!err && ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401)) {
9629 err = tg3_init_5401phy_dsp(tp);
9630 }
9631
747e8f8b 9632 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
1da177e4
LT
9633 tp->link_config.advertising =
9634 (ADVERTISED_1000baseT_Half |
9635 ADVERTISED_1000baseT_Full |
9636 ADVERTISED_Autoneg |
9637 ADVERTISED_FIBRE);
9638 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
9639 tp->link_config.advertising &=
9640 ~(ADVERTISED_1000baseT_Half |
9641 ADVERTISED_1000baseT_Full);
9642
9643 return err;
9644}
9645
9646static void __devinit tg3_read_partno(struct tg3 *tp)
9647{
9648 unsigned char vpd_data[256];
9649 int i;
1b27777a 9650 u32 magic;
1da177e4
LT
9651
9652 if (tp->tg3_flags2 & TG3_FLG2_SUN_570X) {
9653 /* Sun decided not to put the necessary bits in the
9654 * NVRAM of their onboard tg3 parts :(
9655 */
9656 strcpy(tp->board_part_number, "Sun 570X");
9657 return;
9658 }
9659
1b27777a
MC
9660 if (tg3_nvram_read(tp, 0x0, &magic))
9661 return;
1da177e4 9662
1b27777a
MC
9663 if (swab32(magic) == TG3_EEPROM_MAGIC) {
9664 for (i = 0; i < 256; i += 4) {
9665 u32 tmp;
1da177e4 9666
1b27777a
MC
9667 if (tg3_nvram_read(tp, 0x100 + i, &tmp))
9668 goto out_not_found;
9669
9670 vpd_data[i + 0] = ((tmp >> 0) & 0xff);
9671 vpd_data[i + 1] = ((tmp >> 8) & 0xff);
9672 vpd_data[i + 2] = ((tmp >> 16) & 0xff);
9673 vpd_data[i + 3] = ((tmp >> 24) & 0xff);
9674 }
9675 } else {
9676 int vpd_cap;
9677
9678 vpd_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_VPD);
9679 for (i = 0; i < 256; i += 4) {
9680 u32 tmp, j = 0;
9681 u16 tmp16;
9682
9683 pci_write_config_word(tp->pdev, vpd_cap + PCI_VPD_ADDR,
9684 i);
9685 while (j++ < 100) {
9686 pci_read_config_word(tp->pdev, vpd_cap +
9687 PCI_VPD_ADDR, &tmp16);
9688 if (tmp16 & 0x8000)
9689 break;
9690 msleep(1);
9691 }
9692 pci_read_config_dword(tp->pdev, vpd_cap + PCI_VPD_DATA,
9693 &tmp);
9694 tmp = cpu_to_le32(tmp);
9695 memcpy(&vpd_data[i], &tmp, 4);
9696 }
1da177e4
LT
9697 }
9698
9699 /* Now parse and find the part number. */
9700 for (i = 0; i < 256; ) {
9701 unsigned char val = vpd_data[i];
9702 int block_end;
9703
9704 if (val == 0x82 || val == 0x91) {
9705 i = (i + 3 +
9706 (vpd_data[i + 1] +
9707 (vpd_data[i + 2] << 8)));
9708 continue;
9709 }
9710
9711 if (val != 0x90)
9712 goto out_not_found;
9713
9714 block_end = (i + 3 +
9715 (vpd_data[i + 1] +
9716 (vpd_data[i + 2] << 8)));
9717 i += 3;
9718 while (i < block_end) {
9719 if (vpd_data[i + 0] == 'P' &&
9720 vpd_data[i + 1] == 'N') {
9721 int partno_len = vpd_data[i + 2];
9722
9723 if (partno_len > 24)
9724 goto out_not_found;
9725
9726 memcpy(tp->board_part_number,
9727 &vpd_data[i + 3],
9728 partno_len);
9729
9730 /* Success. */
9731 return;
9732 }
9733 }
9734
9735 /* Part number not found. */
9736 goto out_not_found;
9737 }
9738
9739out_not_found:
9740 strcpy(tp->board_part_number, "none");
9741}
9742
9743#ifdef CONFIG_SPARC64
9744static int __devinit tg3_is_sun_570X(struct tg3 *tp)
9745{
9746 struct pci_dev *pdev = tp->pdev;
9747 struct pcidev_cookie *pcp = pdev->sysdata;
9748
9749 if (pcp != NULL) {
9750 int node = pcp->prom_node;
9751 u32 venid;
9752 int err;
9753
9754 err = prom_getproperty(node, "subsystem-vendor-id",
9755 (char *) &venid, sizeof(venid));
9756 if (err == 0 || err == -1)
9757 return 0;
9758 if (venid == PCI_VENDOR_ID_SUN)
9759 return 1;
051d3cbd
DM
9760
9761 /* TG3 chips onboard the SunBlade-2500 don't have the
9762 * subsystem-vendor-id set to PCI_VENDOR_ID_SUN but they
9763 * are distinguishable from non-Sun variants by being
9764 * named "network" by the firmware. Non-Sun cards will
9765 * show up as being named "ethernet".
9766 */
9767 if (!strcmp(pcp->prom_name, "network"))
9768 return 1;
1da177e4
LT
9769 }
9770 return 0;
9771}
9772#endif
9773
9774static int __devinit tg3_get_invariants(struct tg3 *tp)
9775{
9776 static struct pci_device_id write_reorder_chipsets[] = {
1da177e4
LT
9777 { PCI_DEVICE(PCI_VENDOR_ID_AMD,
9778 PCI_DEVICE_ID_AMD_FE_GATE_700C) },
399de50b
MC
9779 { PCI_DEVICE(PCI_VENDOR_ID_VIA,
9780 PCI_DEVICE_ID_VIA_8385_0) },
1da177e4
LT
9781 { },
9782 };
9783 u32 misc_ctrl_reg;
9784 u32 cacheline_sz_reg;
9785 u32 pci_state_reg, grc_misc_cfg;
9786 u32 val;
9787 u16 pci_cmd;
9788 int err;
9789
9790#ifdef CONFIG_SPARC64
9791 if (tg3_is_sun_570X(tp))
9792 tp->tg3_flags2 |= TG3_FLG2_SUN_570X;
9793#endif
9794
1da177e4
LT
9795 /* Force memory write invalidate off. If we leave it on,
9796 * then on 5700_BX chips we have to enable a workaround.
9797 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
9798 * to match the cacheline size. The Broadcom driver have this
9799 * workaround but turns MWI off all the times so never uses
9800 * it. This seems to suggest that the workaround is insufficient.
9801 */
9802 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
9803 pci_cmd &= ~PCI_COMMAND_INVALIDATE;
9804 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
9805
9806 /* It is absolutely critical that TG3PCI_MISC_HOST_CTRL
9807 * has the register indirect write enable bit set before
9808 * we try to access any of the MMIO registers. It is also
9809 * critical that the PCI-X hw workaround situation is decided
9810 * before that as well.
9811 */
9812 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
9813 &misc_ctrl_reg);
9814
9815 tp->pci_chip_rev_id = (misc_ctrl_reg >>
9816 MISC_HOST_CTRL_CHIPREV_SHIFT);
9817
ff645bec
MC
9818 /* Wrong chip ID in 5752 A0. This code can be removed later
9819 * as A0 is not in production.
9820 */
9821 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
9822 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
9823
6892914f
MC
9824 /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
9825 * we need to disable memory and use config. cycles
9826 * only to access all registers. The 5702/03 chips
9827 * can mistakenly decode the special cycles from the
9828 * ICH chipsets as memory write cycles, causing corruption
9829 * of register and memory space. Only certain ICH bridges
9830 * will drive special cycles with non-zero data during the
9831 * address phase which can fall within the 5703's address
9832 * range. This is not an ICH bug as the PCI spec allows
9833 * non-zero address during special cycles. However, only
9834 * these ICH bridges are known to drive non-zero addresses
9835 * during special cycles.
9836 *
9837 * Since special cycles do not cross PCI bridges, we only
9838 * enable this workaround if the 5703 is on the secondary
9839 * bus of these ICH bridges.
9840 */
9841 if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
9842 (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) {
9843 static struct tg3_dev_id {
9844 u32 vendor;
9845 u32 device;
9846 u32 rev;
9847 } ich_chipsets[] = {
9848 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
9849 PCI_ANY_ID },
9850 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
9851 PCI_ANY_ID },
9852 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
9853 0xa },
9854 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
9855 PCI_ANY_ID },
9856 { },
9857 };
9858 struct tg3_dev_id *pci_id = &ich_chipsets[0];
9859 struct pci_dev *bridge = NULL;
9860
9861 while (pci_id->vendor != 0) {
9862 bridge = pci_get_device(pci_id->vendor, pci_id->device,
9863 bridge);
9864 if (!bridge) {
9865 pci_id++;
9866 continue;
9867 }
9868 if (pci_id->rev != PCI_ANY_ID) {
9869 u8 rev;
9870
9871 pci_read_config_byte(bridge, PCI_REVISION_ID,
9872 &rev);
9873 if (rev > pci_id->rev)
9874 continue;
9875 }
9876 if (bridge->subordinate &&
9877 (bridge->subordinate->number ==
9878 tp->pdev->bus->number)) {
9879
9880 tp->tg3_flags2 |= TG3_FLG2_ICH_WORKAROUND;
9881 pci_dev_put(bridge);
9882 break;
9883 }
9884 }
9885 }
9886
4a29cc2e
MC
9887 /* The EPB bridge inside 5714, 5715, and 5780 cannot support
9888 * DMA addresses > 40-bit. This bridge may have other additional
9889 * 57xx devices behind it in some 4-port NIC designs for example.
9890 * Any tg3 device found behind the bridge will also need the 40-bit
9891 * DMA workaround.
9892 */
a4e2b347
MC
9893 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 ||
9894 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
9895 tp->tg3_flags2 |= TG3_FLG2_5780_CLASS;
4a29cc2e 9896 tp->tg3_flags |= TG3_FLAG_40BIT_DMA_BUG;
4cf78e4f 9897 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
a4e2b347 9898 }
4a29cc2e
MC
9899 else {
9900 struct pci_dev *bridge = NULL;
9901
9902 do {
9903 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
9904 PCI_DEVICE_ID_SERVERWORKS_EPB,
9905 bridge);
9906 if (bridge && bridge->subordinate &&
9907 (bridge->subordinate->number <=
9908 tp->pdev->bus->number) &&
9909 (bridge->subordinate->subordinate >=
9910 tp->pdev->bus->number)) {
9911 tp->tg3_flags |= TG3_FLAG_40BIT_DMA_BUG;
9912 pci_dev_put(bridge);
9913 break;
9914 }
9915 } while (bridge);
9916 }
4cf78e4f 9917
1da177e4
LT
9918 /* Initialize misc host control in PCI block. */
9919 tp->misc_host_ctrl |= (misc_ctrl_reg &
9920 MISC_HOST_CTRL_CHIPREV);
9921 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
9922 tp->misc_host_ctrl);
9923
9924 pci_read_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
9925 &cacheline_sz_reg);
9926
9927 tp->pci_cacheline_sz = (cacheline_sz_reg >> 0) & 0xff;
9928 tp->pci_lat_timer = (cacheline_sz_reg >> 8) & 0xff;
9929 tp->pci_hdr_type = (cacheline_sz_reg >> 16) & 0xff;
9930 tp->pci_bist = (cacheline_sz_reg >> 24) & 0xff;
9931
6708e5cc 9932 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
4cf78e4f 9933 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
d9ab5ad1 9934 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
a4e2b347 9935 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
6708e5cc
JL
9936 tp->tg3_flags2 |= TG3_FLG2_5750_PLUS;
9937
1b440c56
JL
9938 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) ||
9939 (tp->tg3_flags2 & TG3_FLG2_5750_PLUS))
9940 tp->tg3_flags2 |= TG3_FLG2_5705_PLUS;
9941
5a6f3074
MC
9942 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
9943 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
9944 tp->tg3_flags2 |= TG3_FLG2_HW_TSO_2;
9945 else
9946 tp->tg3_flags2 |= TG3_FLG2_HW_TSO_1;
9947 }
1da177e4 9948
0f893dc6
MC
9949 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 &&
9950 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750 &&
d9ab5ad1
MC
9951 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
9952 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787)
0f893dc6
MC
9953 tp->tg3_flags2 |= TG3_FLG2_JUMBO_CAPABLE;
9954
1da177e4
LT
9955 if (pci_find_capability(tp->pdev, PCI_CAP_ID_EXP) != 0)
9956 tp->tg3_flags2 |= TG3_FLG2_PCI_EXPRESS;
9957
399de50b
MC
9958 /* If we have an AMD 762 or VIA K8T800 chipset, write
9959 * reordering to the mailbox registers done by the host
9960 * controller can cause major troubles. We read back from
9961 * every mailbox register write to force the writes to be
9962 * posted to the chip in order.
9963 */
9964 if (pci_dev_present(write_reorder_chipsets) &&
9965 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
9966 tp->tg3_flags |= TG3_FLAG_MBOX_WRITE_REORDER;
9967
1da177e4
LT
9968 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
9969 tp->pci_lat_timer < 64) {
9970 tp->pci_lat_timer = 64;
9971
9972 cacheline_sz_reg = ((tp->pci_cacheline_sz & 0xff) << 0);
9973 cacheline_sz_reg |= ((tp->pci_lat_timer & 0xff) << 8);
9974 cacheline_sz_reg |= ((tp->pci_hdr_type & 0xff) << 16);
9975 cacheline_sz_reg |= ((tp->pci_bist & 0xff) << 24);
9976
9977 pci_write_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
9978 cacheline_sz_reg);
9979 }
9980
9981 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
9982 &pci_state_reg);
9983
9984 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0) {
9985 tp->tg3_flags |= TG3_FLAG_PCIX_MODE;
9986
9987 /* If this is a 5700 BX chipset, and we are in PCI-X
9988 * mode, enable register write workaround.
9989 *
9990 * The workaround is to use indirect register accesses
9991 * for all chip writes not to mailbox registers.
9992 */
9993 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
9994 u32 pm_reg;
9995 u16 pci_cmd;
9996
9997 tp->tg3_flags |= TG3_FLAG_PCIX_TARGET_HWBUG;
9998
9999 /* The chip can have it's power management PCI config
10000 * space registers clobbered due to this bug.
10001 * So explicitly force the chip into D0 here.
10002 */
10003 pci_read_config_dword(tp->pdev, TG3PCI_PM_CTRL_STAT,
10004 &pm_reg);
10005 pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
10006 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
10007 pci_write_config_dword(tp->pdev, TG3PCI_PM_CTRL_STAT,
10008 pm_reg);
10009
10010 /* Also, force SERR#/PERR# in PCI command. */
10011 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
10012 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
10013 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
10014 }
10015 }
10016
087fe256
MC
10017 /* 5700 BX chips need to have their TX producer index mailboxes
10018 * written twice to workaround a bug.
10019 */
10020 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX)
10021 tp->tg3_flags |= TG3_FLAG_TXD_MBOX_HWBUG;
10022
1da177e4
LT
10023 /* Back to back register writes can cause problems on this chip,
10024 * the workaround is to read back all reg writes except those to
10025 * mailbox regs. See tg3_write_indirect_reg32().
10026 *
10027 * PCI Express 5750_A0 rev chips need this workaround too.
10028 */
10029 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
10030 ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
10031 tp->pci_chip_rev_id == CHIPREV_ID_5750_A0))
10032 tp->tg3_flags |= TG3_FLAG_5701_REG_WRITE_BUG;
10033
10034 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
10035 tp->tg3_flags |= TG3_FLAG_PCI_HIGH_SPEED;
10036 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
10037 tp->tg3_flags |= TG3_FLAG_PCI_32BIT;
10038
10039 /* Chip-specific fixup from Broadcom driver */
10040 if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
10041 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
10042 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
10043 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
10044 }
10045
1ee582d8 10046 /* Default fast path register access methods */
20094930 10047 tp->read32 = tg3_read32;
1ee582d8 10048 tp->write32 = tg3_write32;
09ee929c 10049 tp->read32_mbox = tg3_read32;
20094930 10050 tp->write32_mbox = tg3_write32;
1ee582d8
MC
10051 tp->write32_tx_mbox = tg3_write32;
10052 tp->write32_rx_mbox = tg3_write32;
10053
10054 /* Various workaround register access methods */
10055 if (tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG)
10056 tp->write32 = tg3_write_indirect_reg32;
10057 else if (tp->tg3_flags & TG3_FLAG_5701_REG_WRITE_BUG)
10058 tp->write32 = tg3_write_flush_reg32;
10059
10060 if ((tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG) ||
10061 (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)) {
10062 tp->write32_tx_mbox = tg3_write32_tx_mbox;
10063 if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
10064 tp->write32_rx_mbox = tg3_write_flush_reg32;
10065 }
20094930 10066
6892914f
MC
10067 if (tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND) {
10068 tp->read32 = tg3_read_indirect_reg32;
10069 tp->write32 = tg3_write_indirect_reg32;
10070 tp->read32_mbox = tg3_read_indirect_mbox;
10071 tp->write32_mbox = tg3_write_indirect_mbox;
10072 tp->write32_tx_mbox = tg3_write_indirect_mbox;
10073 tp->write32_rx_mbox = tg3_write_indirect_mbox;
10074
10075 iounmap(tp->regs);
22abe310 10076 tp->regs = NULL;
6892914f
MC
10077
10078 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
10079 pci_cmd &= ~PCI_COMMAND_MEMORY;
10080 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
10081 }
10082
7d0c41ef
MC
10083 /* Get eeprom hw config before calling tg3_set_power_state().
10084 * In particular, the TG3_FLAG_EEPROM_WRITE_PROT flag must be
10085 * determined before calling tg3_set_power_state() so that
10086 * we know whether or not to switch out of Vaux power.
10087 * When the flag is set, it means that GPIO1 is used for eeprom
10088 * write protect and also implies that it is a LOM where GPIOs
10089 * are not used to switch power.
10090 */
10091 tg3_get_eeprom_hw_cfg(tp);
10092
314fba34
MC
10093 /* Set up tp->grc_local_ctrl before calling tg3_set_power_state().
10094 * GPIO1 driven high will bring 5700's external PHY out of reset.
10095 * It is also used as eeprom write protect on LOMs.
10096 */
10097 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
10098 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) ||
10099 (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
10100 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10101 GRC_LCLCTRL_GPIO_OUTPUT1);
3e7d83bc
MC
10102 /* Unused GPIO3 must be driven as output on 5752 because there
10103 * are no pull-up resistors on unused GPIO pins.
10104 */
10105 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
10106 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
314fba34 10107
1da177e4 10108 /* Force the chip into D0. */
bc1c7567 10109 err = tg3_set_power_state(tp, PCI_D0);
1da177e4
LT
10110 if (err) {
10111 printk(KERN_ERR PFX "(%s) transition to D0 failed\n",
10112 pci_name(tp->pdev));
10113 return err;
10114 }
10115
10116 /* 5700 B0 chips do not support checksumming correctly due
10117 * to hardware bugs.
10118 */
10119 if (tp->pci_chip_rev_id == CHIPREV_ID_5700_B0)
10120 tp->tg3_flags |= TG3_FLAG_BROKEN_CHECKSUMS;
10121
10122 /* Pseudo-header checksum is done by hardware logic and not
10123 * the offload processers, so make the chip do the pseudo-
10124 * header checksums on receive. For transmit it is more
10125 * convenient to do the pseudo-header checksum in software
10126 * as Linux does that on transmit for us in all cases.
10127 */
10128 tp->tg3_flags |= TG3_FLAG_NO_TX_PSEUDO_CSUM;
10129 tp->tg3_flags &= ~TG3_FLAG_NO_RX_PSEUDO_CSUM;
10130
10131 /* Derive initial jumbo mode from MTU assigned in
10132 * ether_setup() via the alloc_etherdev() call
10133 */
0f893dc6 10134 if (tp->dev->mtu > ETH_DATA_LEN &&
a4e2b347 10135 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
0f893dc6 10136 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
1da177e4
LT
10137
10138 /* Determine WakeOnLan speed to use. */
10139 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10140 tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
10141 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 ||
10142 tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) {
10143 tp->tg3_flags &= ~(TG3_FLAG_WOL_SPEED_100MB);
10144 } else {
10145 tp->tg3_flags |= TG3_FLAG_WOL_SPEED_100MB;
10146 }
10147
10148 /* A few boards don't want Ethernet@WireSpeed phy feature */
10149 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) ||
10150 ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
10151 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
747e8f8b
MC
10152 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
10153 (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES))
1da177e4
LT
10154 tp->tg3_flags2 |= TG3_FLG2_NO_ETH_WIRE_SPEED;
10155
10156 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX ||
10157 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX)
10158 tp->tg3_flags2 |= TG3_FLG2_PHY_ADC_BUG;
10159 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
10160 tp->tg3_flags2 |= TG3_FLG2_PHY_5704_A0_BUG;
10161
d9ab5ad1
MC
10162 if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
10163 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787))
1da177e4
LT
10164 tp->tg3_flags2 |= TG3_FLG2_PHY_BER_BUG;
10165
1da177e4 10166 tp->coalesce_mode = 0;
1da177e4
LT
10167 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX &&
10168 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX)
10169 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
10170
10171 /* Initialize MAC MI mode, polling disabled. */
10172 tw32_f(MAC_MI_MODE, tp->mi_mode);
10173 udelay(80);
10174
10175 /* Initialize data/descriptor byte/word swapping. */
10176 val = tr32(GRC_MODE);
10177 val &= GRC_MODE_HOST_STACKUP;
10178 tw32(GRC_MODE, val | tp->grc_mode);
10179
10180 tg3_switch_clocks(tp);
10181
10182 /* Clear this out for sanity. */
10183 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10184
10185 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
10186 &pci_state_reg);
10187 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
10188 (tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) == 0) {
10189 u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
10190
10191 if (chiprevid == CHIPREV_ID_5701_A0 ||
10192 chiprevid == CHIPREV_ID_5701_B0 ||
10193 chiprevid == CHIPREV_ID_5701_B2 ||
10194 chiprevid == CHIPREV_ID_5701_B5) {
10195 void __iomem *sram_base;
10196
10197 /* Write some dummy words into the SRAM status block
10198 * area, see if it reads back correctly. If the return
10199 * value is bad, force enable the PCIX workaround.
10200 */
10201 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
10202
10203 writel(0x00000000, sram_base);
10204 writel(0x00000000, sram_base + 4);
10205 writel(0xffffffff, sram_base + 4);
10206 if (readl(sram_base) != 0x00000000)
10207 tp->tg3_flags |= TG3_FLAG_PCIX_TARGET_HWBUG;
10208 }
10209 }
10210
10211 udelay(50);
10212 tg3_nvram_init(tp);
10213
10214 grc_misc_cfg = tr32(GRC_MISC_CFG);
10215 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
10216
10217 /* Broadcom's driver says that CIOBE multisplit has a bug */
10218#if 0
10219 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
10220 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5704CIOBE) {
10221 tp->tg3_flags |= TG3_FLAG_SPLIT_MODE;
10222 tp->split_mode_max_reqs = SPLIT_MODE_5704_MAX_REQ;
10223 }
10224#endif
10225 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
10226 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
10227 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
10228 tp->tg3_flags2 |= TG3_FLG2_IS_5788;
10229
fac9b83e
DM
10230 if (!(tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
10231 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700))
10232 tp->tg3_flags |= TG3_FLAG_TAGGED_STATUS;
10233 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) {
10234 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
10235 HOSTCC_MODE_CLRTICK_TXBD);
10236
10237 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
10238 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
10239 tp->misc_host_ctrl);
10240 }
10241
1da177e4
LT
10242 /* these are limited to 10/100 only */
10243 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
10244 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
10245 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
10246 tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
10247 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
10248 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
10249 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
10250 (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
10251 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
10252 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F)))
10253 tp->tg3_flags |= TG3_FLAG_10_100_ONLY;
10254
10255 err = tg3_phy_probe(tp);
10256 if (err) {
10257 printk(KERN_ERR PFX "(%s) phy probe failed, err %d\n",
10258 pci_name(tp->pdev), err);
10259 /* ... but do not return immediately ... */
10260 }
10261
10262 tg3_read_partno(tp);
10263
10264 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
10265 tp->tg3_flags &= ~TG3_FLAG_USE_MI_INTERRUPT;
10266 } else {
10267 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
10268 tp->tg3_flags |= TG3_FLAG_USE_MI_INTERRUPT;
10269 else
10270 tp->tg3_flags &= ~TG3_FLAG_USE_MI_INTERRUPT;
10271 }
10272
10273 /* 5700 {AX,BX} chips have a broken status block link
10274 * change bit implementation, so we must use the
10275 * status register in those cases.
10276 */
10277 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
10278 tp->tg3_flags |= TG3_FLAG_USE_LINKCHG_REG;
10279 else
10280 tp->tg3_flags &= ~TG3_FLAG_USE_LINKCHG_REG;
10281
10282 /* The led_ctrl is set during tg3_phy_probe, here we might
10283 * have to force the link status polling mechanism based
10284 * upon subsystem IDs.
10285 */
10286 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
10287 !(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
10288 tp->tg3_flags |= (TG3_FLAG_USE_MI_INTERRUPT |
10289 TG3_FLAG_USE_LINKCHG_REG);
10290 }
10291
10292 /* For all SERDES we poll the MAC status register. */
10293 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
10294 tp->tg3_flags |= TG3_FLAG_POLL_SERDES;
10295 else
10296 tp->tg3_flags &= ~TG3_FLAG_POLL_SERDES;
10297
5a6f3074 10298 /* All chips before 5787 can get confused if TX buffers
1da177e4
LT
10299 * straddle the 4GB address boundary in some cases.
10300 */
5a6f3074
MC
10301 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
10302 tp->dev->hard_start_xmit = tg3_start_xmit;
10303 else
10304 tp->dev->hard_start_xmit = tg3_start_xmit_dma_bug;
1da177e4
LT
10305
10306 tp->rx_offset = 2;
10307 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
10308 (tp->tg3_flags & TG3_FLAG_PCIX_MODE) != 0)
10309 tp->rx_offset = 0;
10310
10311 /* By default, disable wake-on-lan. User can change this
10312 * using ETHTOOL_SWOL.
10313 */
10314 tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE;
10315
10316 return err;
10317}
10318
10319#ifdef CONFIG_SPARC64
10320static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
10321{
10322 struct net_device *dev = tp->dev;
10323 struct pci_dev *pdev = tp->pdev;
10324 struct pcidev_cookie *pcp = pdev->sysdata;
10325
10326 if (pcp != NULL) {
10327 int node = pcp->prom_node;
10328
10329 if (prom_getproplen(node, "local-mac-address") == 6) {
10330 prom_getproperty(node, "local-mac-address",
10331 dev->dev_addr, 6);
2ff43697 10332 memcpy(dev->perm_addr, dev->dev_addr, 6);
1da177e4
LT
10333 return 0;
10334 }
10335 }
10336 return -ENODEV;
10337}
10338
10339static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
10340{
10341 struct net_device *dev = tp->dev;
10342
10343 memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
2ff43697 10344 memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
1da177e4
LT
10345 return 0;
10346}
10347#endif
10348
10349static int __devinit tg3_get_device_address(struct tg3 *tp)
10350{
10351 struct net_device *dev = tp->dev;
10352 u32 hi, lo, mac_offset;
10353
10354#ifdef CONFIG_SPARC64
10355 if (!tg3_get_macaddr_sparc(tp))
10356 return 0;
10357#endif
10358
10359 mac_offset = 0x7c;
4cf78e4f
MC
10360 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
10361 !(tp->tg3_flags & TG3_FLG2_SUN_570X)) ||
a4e2b347 10362 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
1da177e4
LT
10363 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
10364 mac_offset = 0xcc;
10365 if (tg3_nvram_lock(tp))
10366 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
10367 else
10368 tg3_nvram_unlock(tp);
10369 }
10370
10371 /* First try to get it from MAC address mailbox. */
10372 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
10373 if ((hi >> 16) == 0x484b) {
10374 dev->dev_addr[0] = (hi >> 8) & 0xff;
10375 dev->dev_addr[1] = (hi >> 0) & 0xff;
10376
10377 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
10378 dev->dev_addr[2] = (lo >> 24) & 0xff;
10379 dev->dev_addr[3] = (lo >> 16) & 0xff;
10380 dev->dev_addr[4] = (lo >> 8) & 0xff;
10381 dev->dev_addr[5] = (lo >> 0) & 0xff;
10382 }
10383 /* Next, try NVRAM. */
10384 else if (!(tp->tg3_flags & TG3_FLG2_SUN_570X) &&
10385 !tg3_nvram_read(tp, mac_offset + 0, &hi) &&
10386 !tg3_nvram_read(tp, mac_offset + 4, &lo)) {
10387 dev->dev_addr[0] = ((hi >> 16) & 0xff);
10388 dev->dev_addr[1] = ((hi >> 24) & 0xff);
10389 dev->dev_addr[2] = ((lo >> 0) & 0xff);
10390 dev->dev_addr[3] = ((lo >> 8) & 0xff);
10391 dev->dev_addr[4] = ((lo >> 16) & 0xff);
10392 dev->dev_addr[5] = ((lo >> 24) & 0xff);
10393 }
10394 /* Finally just fetch it out of the MAC control regs. */
10395 else {
10396 hi = tr32(MAC_ADDR_0_HIGH);
10397 lo = tr32(MAC_ADDR_0_LOW);
10398
10399 dev->dev_addr[5] = lo & 0xff;
10400 dev->dev_addr[4] = (lo >> 8) & 0xff;
10401 dev->dev_addr[3] = (lo >> 16) & 0xff;
10402 dev->dev_addr[2] = (lo >> 24) & 0xff;
10403 dev->dev_addr[1] = hi & 0xff;
10404 dev->dev_addr[0] = (hi >> 8) & 0xff;
10405 }
10406
10407 if (!is_valid_ether_addr(&dev->dev_addr[0])) {
10408#ifdef CONFIG_SPARC64
10409 if (!tg3_get_default_macaddr_sparc(tp))
10410 return 0;
10411#endif
10412 return -EINVAL;
10413 }
2ff43697 10414 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
1da177e4
LT
10415 return 0;
10416}
10417
59e6b434
DM
10418#define BOUNDARY_SINGLE_CACHELINE 1
10419#define BOUNDARY_MULTI_CACHELINE 2
10420
10421static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
10422{
10423 int cacheline_size;
10424 u8 byte;
10425 int goal;
10426
10427 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
10428 if (byte == 0)
10429 cacheline_size = 1024;
10430 else
10431 cacheline_size = (int) byte * 4;
10432
10433 /* On 5703 and later chips, the boundary bits have no
10434 * effect.
10435 */
10436 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
10437 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
10438 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
10439 goto out;
10440
10441#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
10442 goal = BOUNDARY_MULTI_CACHELINE;
10443#else
10444#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
10445 goal = BOUNDARY_SINGLE_CACHELINE;
10446#else
10447 goal = 0;
10448#endif
10449#endif
10450
10451 if (!goal)
10452 goto out;
10453
10454 /* PCI controllers on most RISC systems tend to disconnect
10455 * when a device tries to burst across a cache-line boundary.
10456 * Therefore, letting tg3 do so just wastes PCI bandwidth.
10457 *
10458 * Unfortunately, for PCI-E there are only limited
10459 * write-side controls for this, and thus for reads
10460 * we will still get the disconnects. We'll also waste
10461 * these PCI cycles for both read and write for chips
10462 * other than 5700 and 5701 which do not implement the
10463 * boundary bits.
10464 */
10465 if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) &&
10466 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) {
10467 switch (cacheline_size) {
10468 case 16:
10469 case 32:
10470 case 64:
10471 case 128:
10472 if (goal == BOUNDARY_SINGLE_CACHELINE) {
10473 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
10474 DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
10475 } else {
10476 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
10477 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
10478 }
10479 break;
10480
10481 case 256:
10482 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
10483 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
10484 break;
10485
10486 default:
10487 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
10488 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
10489 break;
10490 };
10491 } else if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
10492 switch (cacheline_size) {
10493 case 16:
10494 case 32:
10495 case 64:
10496 if (goal == BOUNDARY_SINGLE_CACHELINE) {
10497 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
10498 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
10499 break;
10500 }
10501 /* fallthrough */
10502 case 128:
10503 default:
10504 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
10505 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
10506 break;
10507 };
10508 } else {
10509 switch (cacheline_size) {
10510 case 16:
10511 if (goal == BOUNDARY_SINGLE_CACHELINE) {
10512 val |= (DMA_RWCTRL_READ_BNDRY_16 |
10513 DMA_RWCTRL_WRITE_BNDRY_16);
10514 break;
10515 }
10516 /* fallthrough */
10517 case 32:
10518 if (goal == BOUNDARY_SINGLE_CACHELINE) {
10519 val |= (DMA_RWCTRL_READ_BNDRY_32 |
10520 DMA_RWCTRL_WRITE_BNDRY_32);
10521 break;
10522 }
10523 /* fallthrough */
10524 case 64:
10525 if (goal == BOUNDARY_SINGLE_CACHELINE) {
10526 val |= (DMA_RWCTRL_READ_BNDRY_64 |
10527 DMA_RWCTRL_WRITE_BNDRY_64);
10528 break;
10529 }
10530 /* fallthrough */
10531 case 128:
10532 if (goal == BOUNDARY_SINGLE_CACHELINE) {
10533 val |= (DMA_RWCTRL_READ_BNDRY_128 |
10534 DMA_RWCTRL_WRITE_BNDRY_128);
10535 break;
10536 }
10537 /* fallthrough */
10538 case 256:
10539 val |= (DMA_RWCTRL_READ_BNDRY_256 |
10540 DMA_RWCTRL_WRITE_BNDRY_256);
10541 break;
10542 case 512:
10543 val |= (DMA_RWCTRL_READ_BNDRY_512 |
10544 DMA_RWCTRL_WRITE_BNDRY_512);
10545 break;
10546 case 1024:
10547 default:
10548 val |= (DMA_RWCTRL_READ_BNDRY_1024 |
10549 DMA_RWCTRL_WRITE_BNDRY_1024);
10550 break;
10551 };
10552 }
10553
10554out:
10555 return val;
10556}
10557
1da177e4
LT
10558static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
10559{
10560 struct tg3_internal_buffer_desc test_desc;
10561 u32 sram_dma_descs;
10562 int i, ret;
10563
10564 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
10565
10566 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
10567 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
10568 tw32(RDMAC_STATUS, 0);
10569 tw32(WDMAC_STATUS, 0);
10570
10571 tw32(BUFMGR_MODE, 0);
10572 tw32(FTQ_RESET, 0);
10573
10574 test_desc.addr_hi = ((u64) buf_dma) >> 32;
10575 test_desc.addr_lo = buf_dma & 0xffffffff;
10576 test_desc.nic_mbuf = 0x00002100;
10577 test_desc.len = size;
10578
10579 /*
10580 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
10581 * the *second* time the tg3 driver was getting loaded after an
10582 * initial scan.
10583 *
10584 * Broadcom tells me:
10585 * ...the DMA engine is connected to the GRC block and a DMA
10586 * reset may affect the GRC block in some unpredictable way...
10587 * The behavior of resets to individual blocks has not been tested.
10588 *
10589 * Broadcom noted the GRC reset will also reset all sub-components.
10590 */
10591 if (to_device) {
10592 test_desc.cqid_sqid = (13 << 8) | 2;
10593
10594 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
10595 udelay(40);
10596 } else {
10597 test_desc.cqid_sqid = (16 << 8) | 7;
10598
10599 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
10600 udelay(40);
10601 }
10602 test_desc.flags = 0x00000005;
10603
10604 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
10605 u32 val;
10606
10607 val = *(((u32 *)&test_desc) + i);
10608 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
10609 sram_dma_descs + (i * sizeof(u32)));
10610 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
10611 }
10612 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
10613
10614 if (to_device) {
10615 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
10616 } else {
10617 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
10618 }
10619
10620 ret = -ENODEV;
10621 for (i = 0; i < 40; i++) {
10622 u32 val;
10623
10624 if (to_device)
10625 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
10626 else
10627 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
10628 if ((val & 0xffff) == sram_dma_descs) {
10629 ret = 0;
10630 break;
10631 }
10632
10633 udelay(100);
10634 }
10635
10636 return ret;
10637}
10638
ded7340d 10639#define TEST_BUFFER_SIZE 0x2000
1da177e4
LT
10640
10641static int __devinit tg3_test_dma(struct tg3 *tp)
10642{
10643 dma_addr_t buf_dma;
59e6b434 10644 u32 *buf, saved_dma_rwctrl;
1da177e4
LT
10645 int ret;
10646
10647 buf = pci_alloc_consistent(tp->pdev, TEST_BUFFER_SIZE, &buf_dma);
10648 if (!buf) {
10649 ret = -ENOMEM;
10650 goto out_nofree;
10651 }
10652
10653 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
10654 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
10655
59e6b434 10656 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
1da177e4
LT
10657
10658 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
10659 /* DMA read watermark not used on PCIE */
10660 tp->dma_rwctrl |= 0x00180000;
10661 } else if (!(tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
85e94ced
MC
10662 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
10663 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
1da177e4
LT
10664 tp->dma_rwctrl |= 0x003f0000;
10665 else
10666 tp->dma_rwctrl |= 0x003f000f;
10667 } else {
10668 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
10669 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
10670 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
10671
4a29cc2e
MC
10672 /* If the 5704 is behind the EPB bridge, we can
10673 * do the less restrictive ONE_DMA workaround for
10674 * better performance.
10675 */
10676 if ((tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) &&
10677 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
10678 tp->dma_rwctrl |= 0x8000;
10679 else if (ccval == 0x6 || ccval == 0x7)
1da177e4
LT
10680 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
10681
59e6b434 10682 /* Set bit 23 to enable PCIX hw bug fix */
1da177e4 10683 tp->dma_rwctrl |= 0x009f0000;
4cf78e4f
MC
10684 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
10685 /* 5780 always in PCIX mode */
10686 tp->dma_rwctrl |= 0x00144000;
a4e2b347
MC
10687 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
10688 /* 5714 always in PCIX mode */
10689 tp->dma_rwctrl |= 0x00148000;
1da177e4
LT
10690 } else {
10691 tp->dma_rwctrl |= 0x001b000f;
10692 }
10693 }
10694
10695 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
10696 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
10697 tp->dma_rwctrl &= 0xfffffff0;
10698
10699 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10700 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
10701 /* Remove this if it causes problems for some boards. */
10702 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
10703
10704 /* On 5700/5701 chips, we need to set this bit.
10705 * Otherwise the chip will issue cacheline transactions
10706 * to streamable DMA memory with not all the byte
10707 * enables turned on. This is an error on several
10708 * RISC PCI controllers, in particular sparc64.
10709 *
10710 * On 5703/5704 chips, this bit has been reassigned
10711 * a different meaning. In particular, it is used
10712 * on those chips to enable a PCI-X workaround.
10713 */
10714 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
10715 }
10716
10717 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10718
10719#if 0
10720 /* Unneeded, already done by tg3_get_invariants. */
10721 tg3_switch_clocks(tp);
10722#endif
10723
10724 ret = 0;
10725 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
10726 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
10727 goto out;
10728
59e6b434
DM
10729 /* It is best to perform DMA test with maximum write burst size
10730 * to expose the 5700/5701 write DMA bug.
10731 */
10732 saved_dma_rwctrl = tp->dma_rwctrl;
10733 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
10734 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10735
1da177e4
LT
10736 while (1) {
10737 u32 *p = buf, i;
10738
10739 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
10740 p[i] = i;
10741
10742 /* Send the buffer to the chip. */
10743 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
10744 if (ret) {
10745 printk(KERN_ERR "tg3_test_dma() Write the buffer failed %d\n", ret);
10746 break;
10747 }
10748
10749#if 0
10750 /* validate data reached card RAM correctly. */
10751 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
10752 u32 val;
10753 tg3_read_mem(tp, 0x2100 + (i*4), &val);
10754 if (le32_to_cpu(val) != p[i]) {
10755 printk(KERN_ERR " tg3_test_dma() Card buffer corrupted on write! (%d != %d)\n", val, i);
10756 /* ret = -ENODEV here? */
10757 }
10758 p[i] = 0;
10759 }
10760#endif
10761 /* Now read it back. */
10762 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
10763 if (ret) {
10764 printk(KERN_ERR "tg3_test_dma() Read the buffer failed %d\n", ret);
10765
10766 break;
10767 }
10768
10769 /* Verify it. */
10770 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
10771 if (p[i] == i)
10772 continue;
10773
59e6b434
DM
10774 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
10775 DMA_RWCTRL_WRITE_BNDRY_16) {
10776 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
1da177e4
LT
10777 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
10778 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10779 break;
10780 } else {
10781 printk(KERN_ERR "tg3_test_dma() buffer corrupted on read back! (%d != %d)\n", p[i], i);
10782 ret = -ENODEV;
10783 goto out;
10784 }
10785 }
10786
10787 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
10788 /* Success. */
10789 ret = 0;
10790 break;
10791 }
10792 }
59e6b434
DM
10793 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
10794 DMA_RWCTRL_WRITE_BNDRY_16) {
6d1cfbab
MC
10795 static struct pci_device_id dma_wait_state_chipsets[] = {
10796 { PCI_DEVICE(PCI_VENDOR_ID_APPLE,
10797 PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
10798 { },
10799 };
10800
59e6b434 10801 /* DMA test passed without adjusting DMA boundary,
6d1cfbab
MC
10802 * now look for chipsets that are known to expose the
10803 * DMA bug without failing the test.
59e6b434 10804 */
6d1cfbab
MC
10805 if (pci_dev_present(dma_wait_state_chipsets)) {
10806 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
10807 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
10808 }
10809 else
10810 /* Safe to use the calculated DMA boundary. */
10811 tp->dma_rwctrl = saved_dma_rwctrl;
10812
59e6b434
DM
10813 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10814 }
1da177e4
LT
10815
10816out:
10817 pci_free_consistent(tp->pdev, TEST_BUFFER_SIZE, buf, buf_dma);
10818out_nofree:
10819 return ret;
10820}
10821
10822static void __devinit tg3_init_link_config(struct tg3 *tp)
10823{
10824 tp->link_config.advertising =
10825 (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
10826 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
10827 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full |
10828 ADVERTISED_Autoneg | ADVERTISED_MII);
10829 tp->link_config.speed = SPEED_INVALID;
10830 tp->link_config.duplex = DUPLEX_INVALID;
10831 tp->link_config.autoneg = AUTONEG_ENABLE;
10832 netif_carrier_off(tp->dev);
10833 tp->link_config.active_speed = SPEED_INVALID;
10834 tp->link_config.active_duplex = DUPLEX_INVALID;
10835 tp->link_config.phy_is_low_power = 0;
10836 tp->link_config.orig_speed = SPEED_INVALID;
10837 tp->link_config.orig_duplex = DUPLEX_INVALID;
10838 tp->link_config.orig_autoneg = AUTONEG_INVALID;
10839}
10840
10841static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
10842{
fdfec172
MC
10843 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
10844 tp->bufmgr_config.mbuf_read_dma_low_water =
10845 DEFAULT_MB_RDMA_LOW_WATER_5705;
10846 tp->bufmgr_config.mbuf_mac_rx_low_water =
10847 DEFAULT_MB_MACRX_LOW_WATER_5705;
10848 tp->bufmgr_config.mbuf_high_water =
10849 DEFAULT_MB_HIGH_WATER_5705;
10850
10851 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
10852 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
10853 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
10854 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
10855 tp->bufmgr_config.mbuf_high_water_jumbo =
10856 DEFAULT_MB_HIGH_WATER_JUMBO_5780;
10857 } else {
10858 tp->bufmgr_config.mbuf_read_dma_low_water =
10859 DEFAULT_MB_RDMA_LOW_WATER;
10860 tp->bufmgr_config.mbuf_mac_rx_low_water =
10861 DEFAULT_MB_MACRX_LOW_WATER;
10862 tp->bufmgr_config.mbuf_high_water =
10863 DEFAULT_MB_HIGH_WATER;
10864
10865 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
10866 DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
10867 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
10868 DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
10869 tp->bufmgr_config.mbuf_high_water_jumbo =
10870 DEFAULT_MB_HIGH_WATER_JUMBO;
10871 }
1da177e4
LT
10872
10873 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
10874 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
10875}
10876
10877static char * __devinit tg3_phy_string(struct tg3 *tp)
10878{
10879 switch (tp->phy_id & PHY_ID_MASK) {
10880 case PHY_ID_BCM5400: return "5400";
10881 case PHY_ID_BCM5401: return "5401";
10882 case PHY_ID_BCM5411: return "5411";
10883 case PHY_ID_BCM5701: return "5701";
10884 case PHY_ID_BCM5703: return "5703";
10885 case PHY_ID_BCM5704: return "5704";
10886 case PHY_ID_BCM5705: return "5705";
10887 case PHY_ID_BCM5750: return "5750";
85e94ced 10888 case PHY_ID_BCM5752: return "5752";
a4e2b347 10889 case PHY_ID_BCM5714: return "5714";
4cf78e4f 10890 case PHY_ID_BCM5780: return "5780";
d9ab5ad1 10891 case PHY_ID_BCM5787: return "5787";
1da177e4
LT
10892 case PHY_ID_BCM8002: return "8002/serdes";
10893 case 0: return "serdes";
10894 default: return "unknown";
10895 };
10896}
10897
f9804ddb
MC
10898static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
10899{
10900 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
10901 strcpy(str, "PCI Express");
10902 return str;
10903 } else if (tp->tg3_flags & TG3_FLAG_PCIX_MODE) {
10904 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
10905
10906 strcpy(str, "PCIX:");
10907
10908 if ((clock_ctrl == 7) ||
10909 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
10910 GRC_MISC_CFG_BOARD_ID_5704CIOBE))
10911 strcat(str, "133MHz");
10912 else if (clock_ctrl == 0)
10913 strcat(str, "33MHz");
10914 else if (clock_ctrl == 2)
10915 strcat(str, "50MHz");
10916 else if (clock_ctrl == 4)
10917 strcat(str, "66MHz");
10918 else if (clock_ctrl == 6)
10919 strcat(str, "100MHz");
f9804ddb
MC
10920 } else {
10921 strcpy(str, "PCI:");
10922 if (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED)
10923 strcat(str, "66MHz");
10924 else
10925 strcat(str, "33MHz");
10926 }
10927 if (tp->tg3_flags & TG3_FLAG_PCI_32BIT)
10928 strcat(str, ":32-bit");
10929 else
10930 strcat(str, ":64-bit");
10931 return str;
10932}
10933
8c2dc7e1 10934static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
1da177e4
LT
10935{
10936 struct pci_dev *peer;
10937 unsigned int func, devnr = tp->pdev->devfn & ~7;
10938
10939 for (func = 0; func < 8; func++) {
10940 peer = pci_get_slot(tp->pdev->bus, devnr | func);
10941 if (peer && peer != tp->pdev)
10942 break;
10943 pci_dev_put(peer);
10944 }
16fe9d74
MC
10945 /* 5704 can be configured in single-port mode, set peer to
10946 * tp->pdev in that case.
10947 */
10948 if (!peer) {
10949 peer = tp->pdev;
10950 return peer;
10951 }
1da177e4
LT
10952
10953 /*
10954 * We don't need to keep the refcount elevated; there's no way
10955 * to remove one half of this device without removing the other
10956 */
10957 pci_dev_put(peer);
10958
10959 return peer;
10960}
10961
15f9850d
DM
10962static void __devinit tg3_init_coal(struct tg3 *tp)
10963{
10964 struct ethtool_coalesce *ec = &tp->coal;
10965
10966 memset(ec, 0, sizeof(*ec));
10967 ec->cmd = ETHTOOL_GCOALESCE;
10968 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
10969 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
10970 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
10971 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
10972 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
10973 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
10974 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
10975 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
10976 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
10977
10978 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
10979 HOSTCC_MODE_CLRTICK_TXBD)) {
10980 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
10981 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
10982 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
10983 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
10984 }
d244c892
MC
10985
10986 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
10987 ec->rx_coalesce_usecs_irq = 0;
10988 ec->tx_coalesce_usecs_irq = 0;
10989 ec->stats_block_coalesce_usecs = 0;
10990 }
15f9850d
DM
10991}
10992
1da177e4
LT
10993static int __devinit tg3_init_one(struct pci_dev *pdev,
10994 const struct pci_device_id *ent)
10995{
10996 static int tg3_version_printed = 0;
10997 unsigned long tg3reg_base, tg3reg_len;
10998 struct net_device *dev;
10999 struct tg3 *tp;
72f2afb8 11000 int i, err, pm_cap;
f9804ddb 11001 char str[40];
72f2afb8 11002 u64 dma_mask, persist_dma_mask;
1da177e4
LT
11003
11004 if (tg3_version_printed++ == 0)
11005 printk(KERN_INFO "%s", version);
11006
11007 err = pci_enable_device(pdev);
11008 if (err) {
11009 printk(KERN_ERR PFX "Cannot enable PCI device, "
11010 "aborting.\n");
11011 return err;
11012 }
11013
11014 if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
11015 printk(KERN_ERR PFX "Cannot find proper PCI device "
11016 "base address, aborting.\n");
11017 err = -ENODEV;
11018 goto err_out_disable_pdev;
11019 }
11020
11021 err = pci_request_regions(pdev, DRV_MODULE_NAME);
11022 if (err) {
11023 printk(KERN_ERR PFX "Cannot obtain PCI resources, "
11024 "aborting.\n");
11025 goto err_out_disable_pdev;
11026 }
11027
11028 pci_set_master(pdev);
11029
11030 /* Find power-management capability. */
11031 pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
11032 if (pm_cap == 0) {
11033 printk(KERN_ERR PFX "Cannot find PowerManagement capability, "
11034 "aborting.\n");
11035 err = -EIO;
11036 goto err_out_free_res;
11037 }
11038
1da177e4
LT
11039 tg3reg_base = pci_resource_start(pdev, 0);
11040 tg3reg_len = pci_resource_len(pdev, 0);
11041
11042 dev = alloc_etherdev(sizeof(*tp));
11043 if (!dev) {
11044 printk(KERN_ERR PFX "Etherdev alloc failed, aborting.\n");
11045 err = -ENOMEM;
11046 goto err_out_free_res;
11047 }
11048
11049 SET_MODULE_OWNER(dev);
11050 SET_NETDEV_DEV(dev, &pdev->dev);
11051
1da177e4
LT
11052 dev->features |= NETIF_F_LLTX;
11053#if TG3_VLAN_TAG_USED
11054 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
11055 dev->vlan_rx_register = tg3_vlan_rx_register;
11056 dev->vlan_rx_kill_vid = tg3_vlan_rx_kill_vid;
11057#endif
11058
11059 tp = netdev_priv(dev);
11060 tp->pdev = pdev;
11061 tp->dev = dev;
11062 tp->pm_cap = pm_cap;
11063 tp->mac_mode = TG3_DEF_MAC_MODE;
11064 tp->rx_mode = TG3_DEF_RX_MODE;
11065 tp->tx_mode = TG3_DEF_TX_MODE;
11066 tp->mi_mode = MAC_MI_MODE_BASE;
11067 if (tg3_debug > 0)
11068 tp->msg_enable = tg3_debug;
11069 else
11070 tp->msg_enable = TG3_DEF_MSG_ENABLE;
11071
11072 /* The word/byte swap controls here control register access byte
11073 * swapping. DMA data byte swapping is controlled in the GRC_MODE
11074 * setting below.
11075 */
11076 tp->misc_host_ctrl =
11077 MISC_HOST_CTRL_MASK_PCI_INT |
11078 MISC_HOST_CTRL_WORD_SWAP |
11079 MISC_HOST_CTRL_INDIR_ACCESS |
11080 MISC_HOST_CTRL_PCISTATE_RW;
11081
11082 /* The NONFRM (non-frame) byte/word swap controls take effect
11083 * on descriptor entries, anything which isn't packet data.
11084 *
11085 * The StrongARM chips on the board (one for tx, one for rx)
11086 * are running in big-endian mode.
11087 */
11088 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
11089 GRC_MODE_WSWAP_NONFRM_DATA);
11090#ifdef __BIG_ENDIAN
11091 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
11092#endif
11093 spin_lock_init(&tp->lock);
11094 spin_lock_init(&tp->tx_lock);
11095 spin_lock_init(&tp->indirect_lock);
11096 INIT_WORK(&tp->reset_task, tg3_reset_task, tp);
11097
11098 tp->regs = ioremap_nocache(tg3reg_base, tg3reg_len);
11099 if (tp->regs == 0UL) {
11100 printk(KERN_ERR PFX "Cannot map device registers, "
11101 "aborting.\n");
11102 err = -ENOMEM;
11103 goto err_out_free_dev;
11104 }
11105
11106 tg3_init_link_config(tp);
11107
1da177e4
LT
11108 tp->rx_pending = TG3_DEF_RX_RING_PENDING;
11109 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
11110 tp->tx_pending = TG3_DEF_TX_RING_PENDING;
11111
11112 dev->open = tg3_open;
11113 dev->stop = tg3_close;
11114 dev->get_stats = tg3_get_stats;
11115 dev->set_multicast_list = tg3_set_rx_mode;
11116 dev->set_mac_address = tg3_set_mac_addr;
11117 dev->do_ioctl = tg3_ioctl;
11118 dev->tx_timeout = tg3_tx_timeout;
11119 dev->poll = tg3_poll;
11120 dev->ethtool_ops = &tg3_ethtool_ops;
11121 dev->weight = 64;
11122 dev->watchdog_timeo = TG3_TX_TIMEOUT;
11123 dev->change_mtu = tg3_change_mtu;
11124 dev->irq = pdev->irq;
11125#ifdef CONFIG_NET_POLL_CONTROLLER
11126 dev->poll_controller = tg3_poll_controller;
11127#endif
11128
11129 err = tg3_get_invariants(tp);
11130 if (err) {
11131 printk(KERN_ERR PFX "Problem fetching invariants of chip, "
11132 "aborting.\n");
11133 goto err_out_iounmap;
11134 }
11135
4a29cc2e
MC
11136 /* The EPB bridge inside 5714, 5715, and 5780 and any
11137 * device behind the EPB cannot support DMA addresses > 40-bit.
72f2afb8
MC
11138 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
11139 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
11140 * do DMA address check in tg3_start_xmit().
11141 */
4a29cc2e
MC
11142 if (tp->tg3_flags2 & TG3_FLG2_IS_5788)
11143 persist_dma_mask = dma_mask = DMA_32BIT_MASK;
11144 else if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) {
72f2afb8
MC
11145 persist_dma_mask = dma_mask = DMA_40BIT_MASK;
11146#ifdef CONFIG_HIGHMEM
11147 dma_mask = DMA_64BIT_MASK;
11148#endif
4a29cc2e 11149 } else
72f2afb8
MC
11150 persist_dma_mask = dma_mask = DMA_64BIT_MASK;
11151
11152 /* Configure DMA attributes. */
11153 if (dma_mask > DMA_32BIT_MASK) {
11154 err = pci_set_dma_mask(pdev, dma_mask);
11155 if (!err) {
11156 dev->features |= NETIF_F_HIGHDMA;
11157 err = pci_set_consistent_dma_mask(pdev,
11158 persist_dma_mask);
11159 if (err < 0) {
11160 printk(KERN_ERR PFX "Unable to obtain 64 bit "
11161 "DMA for consistent allocations\n");
11162 goto err_out_iounmap;
11163 }
11164 }
11165 }
11166 if (err || dma_mask == DMA_32BIT_MASK) {
11167 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
11168 if (err) {
11169 printk(KERN_ERR PFX "No usable DMA configuration, "
11170 "aborting.\n");
11171 goto err_out_iounmap;
11172 }
11173 }
11174
fdfec172 11175 tg3_init_bufmgr_config(tp);
1da177e4
LT
11176
11177#if TG3_TSO_SUPPORT != 0
11178 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
11179 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
11180 }
11181 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
11182 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
11183 tp->pci_chip_rev_id == CHIPREV_ID_5705_A0 ||
11184 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
11185 tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE;
11186 } else {
11187 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
11188 }
11189
4e3a7aaa
MC
11190 /* TSO is on by default on chips that support hardware TSO.
11191 * Firmware TSO on older chips gives lower performance, so it
11192 * is off by default, but can be enabled using ethtool.
11193 */
11194 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
1da177e4 11195 dev->features |= NETIF_F_TSO;
1da177e4
LT
11196
11197#endif
11198
11199 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
11200 !(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) &&
11201 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
11202 tp->tg3_flags2 |= TG3_FLG2_MAX_RXPEND_64;
11203 tp->rx_pending = 63;
11204 }
11205
8c2dc7e1
MC
11206 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
11207 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714))
11208 tp->pdev_peer = tg3_find_peer(tp);
1da177e4
LT
11209
11210 err = tg3_get_device_address(tp);
11211 if (err) {
11212 printk(KERN_ERR PFX "Could not obtain valid ethernet address, "
11213 "aborting.\n");
11214 goto err_out_iounmap;
11215 }
11216
11217 /*
11218 * Reset chip in case UNDI or EFI driver did not shutdown
11219 * DMA self test will enable WDMAC and we'll see (spurious)
11220 * pending DMA on the PCI bus at that point.
11221 */
11222 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
11223 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
11224 pci_save_state(tp->pdev);
11225 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
944d980e 11226 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
1da177e4
LT
11227 }
11228
11229 err = tg3_test_dma(tp);
11230 if (err) {
11231 printk(KERN_ERR PFX "DMA engine test failed, aborting.\n");
11232 goto err_out_iounmap;
11233 }
11234
11235 /* Tigon3 can do ipv4 only... and some chips have buggy
11236 * checksumming.
11237 */
11238 if ((tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) == 0) {
11239 dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
11240 tp->tg3_flags |= TG3_FLAG_RX_CHECKSUMS;
11241 } else
11242 tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
11243
1da177e4
LT
11244 /* flow control autonegotiation is default behavior */
11245 tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
11246
15f9850d
DM
11247 tg3_init_coal(tp);
11248
7d3f4c97
DM
11249 /* Now that we have fully setup the chip, save away a snapshot
11250 * of the PCI config space. We need to restore this after
11251 * GRC_MISC_CFG core clock resets and some resume events.
11252 */
11253 pci_save_state(tp->pdev);
11254
1da177e4
LT
11255 err = register_netdev(dev);
11256 if (err) {
11257 printk(KERN_ERR PFX "Cannot register net device, "
11258 "aborting.\n");
11259 goto err_out_iounmap;
11260 }
11261
11262 pci_set_drvdata(pdev, dev);
11263
f9804ddb 11264 printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] (%s) %sBaseT Ethernet ",
1da177e4
LT
11265 dev->name,
11266 tp->board_part_number,
11267 tp->pci_chip_rev_id,
11268 tg3_phy_string(tp),
f9804ddb 11269 tg3_bus_string(tp, str),
1da177e4
LT
11270 (tp->tg3_flags & TG3_FLAG_10_100_ONLY) ? "10/100" : "10/100/1000");
11271
11272 for (i = 0; i < 6; i++)
11273 printk("%2.2x%c", dev->dev_addr[i],
11274 i == 5 ? '\n' : ':');
11275
11276 printk(KERN_INFO "%s: RXcsums[%d] LinkChgREG[%d] "
11277 "MIirq[%d] ASF[%d] Split[%d] WireSpeed[%d] "
11278 "TSOcap[%d] \n",
11279 dev->name,
11280 (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0,
11281 (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) != 0,
11282 (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) != 0,
11283 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0,
11284 (tp->tg3_flags & TG3_FLAG_SPLIT_MODE) != 0,
11285 (tp->tg3_flags2 & TG3_FLG2_NO_ETH_WIRE_SPEED) == 0,
11286 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) != 0);
4a29cc2e
MC
11287 printk(KERN_INFO "%s: dma_rwctrl[%08x] dma_mask[%d-bit]\n",
11288 dev->name, tp->dma_rwctrl,
11289 (pdev->dma_mask == DMA_32BIT_MASK) ? 32 :
11290 (((u64) pdev->dma_mask == DMA_40BIT_MASK) ? 40 : 64));
1da177e4
LT
11291
11292 return 0;
11293
11294err_out_iounmap:
6892914f
MC
11295 if (tp->regs) {
11296 iounmap(tp->regs);
22abe310 11297 tp->regs = NULL;
6892914f 11298 }
1da177e4
LT
11299
11300err_out_free_dev:
11301 free_netdev(dev);
11302
11303err_out_free_res:
11304 pci_release_regions(pdev);
11305
11306err_out_disable_pdev:
11307 pci_disable_device(pdev);
11308 pci_set_drvdata(pdev, NULL);
11309 return err;
11310}
11311
11312static void __devexit tg3_remove_one(struct pci_dev *pdev)
11313{
11314 struct net_device *dev = pci_get_drvdata(pdev);
11315
11316 if (dev) {
11317 struct tg3 *tp = netdev_priv(dev);
11318
7faa006f 11319 flush_scheduled_work();
1da177e4 11320 unregister_netdev(dev);
6892914f
MC
11321 if (tp->regs) {
11322 iounmap(tp->regs);
22abe310 11323 tp->regs = NULL;
6892914f 11324 }
1da177e4
LT
11325 free_netdev(dev);
11326 pci_release_regions(pdev);
11327 pci_disable_device(pdev);
11328 pci_set_drvdata(pdev, NULL);
11329 }
11330}
11331
11332static int tg3_suspend(struct pci_dev *pdev, pm_message_t state)
11333{
11334 struct net_device *dev = pci_get_drvdata(pdev);
11335 struct tg3 *tp = netdev_priv(dev);
11336 int err;
11337
11338 if (!netif_running(dev))
11339 return 0;
11340
7faa006f 11341 flush_scheduled_work();
1da177e4
LT
11342 tg3_netif_stop(tp);
11343
11344 del_timer_sync(&tp->timer);
11345
f47c11ee 11346 tg3_full_lock(tp, 1);
1da177e4 11347 tg3_disable_ints(tp);
f47c11ee 11348 tg3_full_unlock(tp);
1da177e4
LT
11349
11350 netif_device_detach(dev);
11351
f47c11ee 11352 tg3_full_lock(tp, 0);
944d980e 11353 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
6a9eba15 11354 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
f47c11ee 11355 tg3_full_unlock(tp);
1da177e4
LT
11356
11357 err = tg3_set_power_state(tp, pci_choose_state(pdev, state));
11358 if (err) {
f47c11ee 11359 tg3_full_lock(tp, 0);
1da177e4 11360
6a9eba15 11361 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
1da177e4
LT
11362 tg3_init_hw(tp);
11363
11364 tp->timer.expires = jiffies + tp->timer_offset;
11365 add_timer(&tp->timer);
11366
11367 netif_device_attach(dev);
11368 tg3_netif_start(tp);
11369
f47c11ee 11370 tg3_full_unlock(tp);
1da177e4
LT
11371 }
11372
11373 return err;
11374}
11375
11376static int tg3_resume(struct pci_dev *pdev)
11377{
11378 struct net_device *dev = pci_get_drvdata(pdev);
11379 struct tg3 *tp = netdev_priv(dev);
11380 int err;
11381
11382 if (!netif_running(dev))
11383 return 0;
11384
11385 pci_restore_state(tp->pdev);
11386
bc1c7567 11387 err = tg3_set_power_state(tp, PCI_D0);
1da177e4
LT
11388 if (err)
11389 return err;
11390
11391 netif_device_attach(dev);
11392
f47c11ee 11393 tg3_full_lock(tp, 0);
1da177e4 11394
6a9eba15 11395 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
1da177e4
LT
11396 tg3_init_hw(tp);
11397
11398 tp->timer.expires = jiffies + tp->timer_offset;
11399 add_timer(&tp->timer);
11400
1da177e4
LT
11401 tg3_netif_start(tp);
11402
f47c11ee 11403 tg3_full_unlock(tp);
1da177e4
LT
11404
11405 return 0;
11406}
11407
11408static struct pci_driver tg3_driver = {
11409 .name = DRV_MODULE_NAME,
11410 .id_table = tg3_pci_tbl,
11411 .probe = tg3_init_one,
11412 .remove = __devexit_p(tg3_remove_one),
11413 .suspend = tg3_suspend,
11414 .resume = tg3_resume
11415};
11416
11417static int __init tg3_init(void)
11418{
11419 return pci_module_init(&tg3_driver);
11420}
11421
11422static void __exit tg3_cleanup(void)
11423{
11424 pci_unregister_driver(&tg3_driver);
11425}
11426
11427module_init(tg3_init);
11428module_exit(tg3_cleanup);