[TG3]: Add new hard_start_xmit
[linux-2.6.22.y-op.git] / drivers / net / tg3.c
blobd4035de6440e47aced6ae2b01c8bb029d77e914f
1 /*
2 * tg3.c: Broadcom Tigon3 ethernet driver.
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.
9 * Firmware is:
10 * Derived from proprietary unpublished source code,
11 * Copyright (C) 2000-2003 Broadcom Corporation.
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.
18 #include <linux/config.h>
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>
27 #include <linux/in.h>
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>
40 #include <linux/prefetch.h>
41 #include <linux/dma-mapping.h>
43 #include <net/checksum.h>
45 #include <asm/system.h>
46 #include <asm/io.h>
47 #include <asm/byteorder.h>
48 #include <asm/uaccess.h>
50 #ifdef CONFIG_SPARC64
51 #include <asm/idprom.h>
52 #include <asm/oplib.h>
53 #include <asm/pbm.h>
54 #endif
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
62 #ifdef NETIF_F_TSO
63 #define TG3_TSO_SUPPORT 1
64 #else
65 #define TG3_TSO_SUPPORT 0
66 #endif
68 #include "tg3.h"
70 #define DRV_MODULE_NAME "tg3"
71 #define PFX DRV_MODULE_NAME ": "
72 #define DRV_MODULE_VERSION "3.51"
73 #define DRV_MODULE_RELDATE "Feb 21, 2006"
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)
88 /* length of time before we decide the hardware is borked,
89 * and dev->tx_timeout() should be called to fix the problem
91 #define TG3_TX_TIMEOUT (5 * HZ)
93 /* hardware minimum and maximum for a single frame's data payload */
94 #define TG3_MIN_MTU 60
95 #define TG3_MAX_MTU(tp) \
96 ((tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) ? 9000 : 1500)
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.
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
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)'.
113 #define TG3_RX_RCB_RING_SIZE(tp) \
114 ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ? 512 : 1024)
116 #define TG3_TX_RING_SIZE 512
117 #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1)
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)
127 #define TX_BUFFS_AVAIL(TP) \
128 ((TP)->tx_pending - \
129 (((TP)->tx_prod - (TP)->tx_cons) & (TG3_TX_RING_SIZE - 1)))
130 #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1))
132 #define RX_PKT_BUF_SZ (1536 + tp->rx_offset + 64)
133 #define RX_JUMBO_PKT_BUF_SZ (9046 + tp->rx_offset + 64)
135 /* minimum number of free TX descriptors required to wake up TX process */
136 #define TG3_TX_WAKEUP_THRESH (TG3_TX_RING_SIZE / 4)
138 /* number of ETHTOOL_GSTATS u64's */
139 #define TG3_NUM_STATS (sizeof(struct tg3_ethtool_stats)/sizeof(u64))
141 #define TG3_NUM_TEST 6
143 static char version[] __devinitdata =
144 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
146 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
147 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
148 MODULE_LICENSE("GPL");
149 MODULE_VERSION(DRV_MODULE_VERSION);
151 static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */
152 module_param(tg3_debug, int, 0);
153 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
155 static 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 },
214 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752,
215 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
216 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M,
217 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
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 },
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 },
232 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714,
233 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
234 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S,
235 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
236 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715,
237 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
238 { PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S,
239 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
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 },
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, }
263 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
265 static 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" },
295 { "tx_octets" },
296 { "tx_collisions" },
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" },
328 { "dma_writeq_full" },
329 { "dma_write_prioq_full" },
330 { "rxbds_empty" },
331 { "rx_discards" },
332 { "rx_errors" },
333 { "rx_threshold_hit" },
335 { "dma_readq_full" },
336 { "dma_read_prioq_full" },
337 { "tx_comp_queue_full" },
339 { "ring_set_send_prod_index" },
340 { "ring_status_update" },
341 { "nic_irqs" },
342 { "nic_avoided_irqs" },
343 { "nic_tx_threshold_hit" }
346 static 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)" },
357 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
359 writel(val, tp->regs + off);
362 static u32 tg3_read32(struct tg3 *tp, u32 off)
364 return (readl(tp->regs + off));
367 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
369 unsigned long flags;
371 spin_lock_irqsave(&tp->indirect_lock, flags);
372 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
373 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
374 spin_unlock_irqrestore(&tp->indirect_lock, flags);
377 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
379 writel(val, tp->regs + off);
380 readl(tp->regs + off);
383 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
385 unsigned long flags;
386 u32 val;
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;
395 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
397 unsigned long flags;
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;
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;
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);
415 /* In indirect mode when disabling interrupts, we also need
416 * to clear the interrupt bit in the GRC local ctrl register.
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);
425 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
427 unsigned long flags;
428 u32 val;
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;
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.
442 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
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);
455 /* Wait again after the read for the posted method to guarantee that
456 * the wait time is met.
458 if (usec_wait)
459 udelay(usec_wait);
462 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
464 tp->write32_mbox(tp, off, val);
465 if (!(tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) &&
466 !(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
467 tp->read32_mbox(tp, off);
470 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
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);
480 #define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val)
481 #define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val))
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)
484 #define tr32_mailbox(reg) tp->read32_mbox(tp, reg)
486 #define tw32(reg,val) tp->write32(tp, reg, val)
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))
489 #define tr32(reg) tp->read32(tp, reg)
491 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
493 unsigned long flags;
495 spin_lock_irqsave(&tp->indirect_lock, flags);
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);
499 /* Always leave this as zero. */
500 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
501 spin_unlock_irqrestore(&tp->indirect_lock, flags);
504 static void tg3_write_mem_fast(struct tg3 *tp, u32 off, u32 val)
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);
513 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
515 unsigned long flags;
517 spin_lock_irqsave(&tp->indirect_lock, flags);
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);
521 /* Always leave this as zero. */
522 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
523 spin_unlock_irqrestore(&tp->indirect_lock, flags);
526 static void tg3_disable_ints(struct tg3 *tp)
528 tw32(TG3PCI_MISC_HOST_CTRL,
529 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
530 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
533 static inline void tg3_cond_int(struct tg3 *tp)
535 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) &&
536 (tp->hw_status->status & SD_STATUS_UPDATED))
537 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
540 static void tg3_enable_ints(struct tg3 *tp)
542 tp->irq_sync = 0;
543 wmb();
545 tw32(TG3PCI_MISC_HOST_CTRL,
546 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
547 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
548 (tp->last_tag << 24));
549 tg3_cond_int(tp);
552 static inline unsigned int tg3_has_work(struct tg3 *tp)
554 struct tg3_hw_status *sblk = tp->hw_status;
555 unsigned int work_exists = 0;
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;
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;
569 return work_exists;
572 /* tg3_restart_ints
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
577 static void tg3_restart_ints(struct tg3 *tp)
579 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
580 tp->last_tag << 24);
581 mmiowb();
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.
587 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) &&
588 tg3_has_work(tp))
589 tw32(HOSTCC_MODE, tp->coalesce_mode |
590 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
593 static inline void tg3_netif_stop(struct tg3 *tp)
595 tp->dev->trans_start = jiffies; /* prevent tx timeout */
596 netif_poll_disable(tp->dev);
597 netif_tx_disable(tp->dev);
600 static inline void tg3_netif_start(struct tg3 *tp)
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)
607 netif_poll_enable(tp->dev);
608 tp->hw_status->status |= SD_STATUS_UPDATED;
609 tg3_enable_ints(tp);
612 static void tg3_switch_clocks(struct tg3 *tp)
614 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
615 u32 orig_clock_ctrl;
617 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
618 return;
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;
626 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
627 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
628 tw32_wait_f(TG3PCI_CLOCK_CTRL,
629 clock_ctrl | CLOCK_CTRL_625_CORE, 40);
631 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
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);
640 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
643 #define PHY_BUSY_LOOPS 5000
645 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
647 u32 frame_val;
648 unsigned int loops;
649 int ret;
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);
657 *val = 0x0;
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);
665 tw32_f(MAC_MI_COM, frame_val);
667 loops = PHY_BUSY_LOOPS;
668 while (loops != 0) {
669 udelay(10);
670 frame_val = tr32(MAC_MI_COM);
672 if ((frame_val & MI_COM_BUSY) == 0) {
673 udelay(5);
674 frame_val = tr32(MAC_MI_COM);
675 break;
677 loops -= 1;
680 ret = -EBUSY;
681 if (loops != 0) {
682 *val = frame_val & MI_COM_DATA_MASK;
683 ret = 0;
686 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
687 tw32_f(MAC_MI_MODE, tp->mi_mode);
688 udelay(80);
691 return ret;
694 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
696 u32 frame_val;
697 unsigned int loops;
698 int ret;
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);
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);
713 tw32_f(MAC_MI_COM, frame_val);
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;
724 loops -= 1;
727 ret = -EBUSY;
728 if (loops != 0)
729 ret = 0;
731 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
732 tw32_f(MAC_MI_MODE, tp->mi_mode);
733 udelay(80);
736 return ret;
739 static void tg3_phy_set_wirespeed(struct tg3 *tp)
741 u32 val;
743 if (tp->tg3_flags2 & TG3_FLG2_NO_ETH_WIRE_SPEED)
744 return;
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)));
752 static int tg3_bmcr_reset(struct tg3 *tp)
754 u32 phy_control;
755 int limit, err;
757 /* OK, reset it, and poll the BMCR_RESET bit until it
758 * clears or we time out.
760 phy_control = BMCR_RESET;
761 err = tg3_writephy(tp, MII_BMCR, phy_control);
762 if (err != 0)
763 return -EBUSY;
765 limit = 5000;
766 while (limit--) {
767 err = tg3_readphy(tp, MII_BMCR, &phy_control);
768 if (err != 0)
769 return -EBUSY;
771 if ((phy_control & BMCR_RESET) == 0) {
772 udelay(40);
773 break;
775 udelay(10);
777 if (limit <= 0)
778 return -EBUSY;
780 return 0;
783 static int tg3_wait_macro_done(struct tg3 *tp)
785 int limit = 100;
787 while (limit--) {
788 u32 tmp32;
790 if (!tg3_readphy(tp, 0x16, &tmp32)) {
791 if ((tmp32 & 0x1000) == 0)
792 break;
795 if (limit <= 0)
796 return -EBUSY;
798 return 0;
801 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
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 }
809 int chan;
811 for (chan = 0; chan < 4; chan++) {
812 int i;
814 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
815 (chan * 0x2000) | 0x0200);
816 tg3_writephy(tp, 0x16, 0x0002);
818 for (i = 0; i < 6; i++)
819 tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
820 test_pat[chan][i]);
822 tg3_writephy(tp, 0x16, 0x0202);
823 if (tg3_wait_macro_done(tp)) {
824 *resetp = 1;
825 return -EBUSY;
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;
836 tg3_writephy(tp, 0x16, 0x0802);
837 if (tg3_wait_macro_done(tp)) {
838 *resetp = 1;
839 return -EBUSY;
842 for (i = 0; i < 6; i += 2) {
843 u32 low, high;
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;
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);
859 return -EBUSY;
864 return 0;
867 static int tg3_phy_reset_chanpat(struct tg3 *tp)
869 int chan;
871 for (chan = 0; chan < 4; chan++) {
872 int i;
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;
884 return 0;
887 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
889 u32 reg32, phy9_orig;
890 int retries, do_phy_reset, err;
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;
902 /* Disable transmitter and interrupt. */
903 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
904 continue;
906 reg32 |= 0x3000;
907 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
909 /* Set full-duplex, 1000 mbps. */
910 tg3_writephy(tp, MII_BMCR,
911 BMCR_FULLDPLX | TG3_BMCR_SPEED1000);
913 /* Set to master mode. */
914 if (tg3_readphy(tp, MII_TG3_CTRL, &phy9_orig))
915 continue;
917 tg3_writephy(tp, MII_TG3_CTRL,
918 (MII_TG3_CTRL_AS_MASTER |
919 MII_TG3_CTRL_ENABLE_AS_MASTER));
921 /* Enable SM_DSP_CLOCK and 6dB. */
922 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
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);
928 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
929 if (!err)
930 break;
931 } while (--retries);
933 err = tg3_phy_reset_chanpat(tp);
934 if (err)
935 return err;
937 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8005);
938 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0000);
940 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
941 tg3_writephy(tp, 0x16, 0x0000);
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);
948 else {
949 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
952 tg3_writephy(tp, MII_TG3_CTRL, phy9_orig);
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;
960 return err;
963 /* This will reset the tigon3 PHY if there is no valid
964 * link unless the FORCE argument is non-zero.
966 static int tg3_phy_reset(struct tg3 *tp)
968 u32 phy_status;
969 int err;
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;
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;
985 err = tg3_bmcr_reset(tp);
986 if (err)
987 return err;
989 out:
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);
998 if (tp->tg3_flags2 & TG3_FLG2_PHY_5704_A0_BUG) {
999 tg3_writephy(tp, 0x1c, 0x8d68);
1000 tg3_writephy(tp, 0x1c, 0x8d68);
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);
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);
1017 } else if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) {
1018 u32 phy_reg;
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);
1026 /* Set phy register 0x10 bit 0 to high fifo elasticity to support
1027 * jumbo frames transmission.
1029 if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) {
1030 u32 phy_reg;
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);
1037 tg3_phy_set_wirespeed(tp);
1038 return 0;
1041 static void tg3_frob_aux_power(struct tg3 *tp)
1043 struct tg3 *tp_peer = tp;
1045 if ((tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) != 0)
1046 return;
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;
1052 dev_peer = pci_get_drvdata(tp->pdev_peer);
1053 /* remove_one() may have been run on the peer. */
1054 if (!dev_peer)
1055 tp_peer = tp;
1056 else
1057 tp_peer = netdev_priv(dev_peer);
1060 if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
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) {
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) {
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);
1073 } else {
1074 u32 no_gpio2;
1075 u32 grc_local_ctrl = 0;
1077 if (tp_peer != tp &&
1078 (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
1079 return;
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;
1085 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1086 grc_local_ctrl, 100);
1089 /* On 5753 and variants, GPIO2 cannot be used. */
1090 no_gpio2 = tp->nic_sram_data_cfg &
1091 NIC_SRAM_DATA_CFG_NO_GPIO2;
1093 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
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);
1102 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1103 grc_local_ctrl, 100);
1105 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
1107 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1108 grc_local_ctrl, 100);
1110 if (!no_gpio2) {
1111 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
1112 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1113 grc_local_ctrl, 100);
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;
1123 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1124 (GRC_LCLCTRL_GPIO_OE1 |
1125 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1127 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1128 GRC_LCLCTRL_GPIO_OE1, 100);
1130 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1131 (GRC_LCLCTRL_GPIO_OE1 |
1132 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1137 static int tg3_setup_phy(struct tg3 *, int);
1139 #define RESET_KIND_SHUTDOWN 0
1140 #define RESET_KIND_INIT 1
1141 #define RESET_KIND_SUSPEND 2
1143 static void tg3_write_sig_post_reset(struct tg3 *, int);
1144 static int tg3_halt_cpu(struct tg3 *, u32);
1145 static int tg3_nvram_lock(struct tg3 *);
1146 static void tg3_nvram_unlock(struct tg3 *);
1148 static int tg3_set_power_state(struct tg3 *tp, pci_power_t state)
1150 u32 misc_host_ctrl;
1151 u16 power_control, power_caps;
1152 int pm = tp->pm_cap;
1154 /* Make sure register accesses (indirect or otherwise)
1155 * will function correctly.
1157 pci_write_config_dword(tp->pdev,
1158 TG3PCI_MISC_HOST_CTRL,
1159 tp->misc_host_ctrl);
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) {
1167 case PCI_D0:
1168 power_control |= 0;
1169 pci_write_config_word(tp->pdev,
1170 pm + PCI_PM_CTRL,
1171 power_control);
1172 udelay(100); /* Delay after power state change */
1174 /* Switch out of Vaux if it is not a LOM */
1175 if (!(tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
1176 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100);
1178 return 0;
1180 case PCI_D1:
1181 power_control |= 1;
1182 break;
1184 case PCI_D2:
1185 power_control |= 2;
1186 break;
1188 case PCI_D3hot:
1189 power_control |= 3;
1190 break;
1192 default:
1193 printk(KERN_WARNING PFX "%s: Invalid power state (%d) "
1194 "requested.\n",
1195 tp->dev->name, state);
1196 return -EINVAL;
1199 power_control |= PCI_PM_CTRL_PME_ENABLE;
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);
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;
1212 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) {
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);
1219 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1220 int i;
1221 u32 val;
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);
1230 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
1231 WOL_DRV_STATE_SHUTDOWN |
1232 WOL_DRV_WOL | WOL_SET_MAGIC_PKT);
1234 pci_read_config_word(tp->pdev, pm + PCI_PM_PMC, &power_caps);
1236 if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE) {
1237 u32 mac_mode;
1239 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
1240 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x5a);
1241 udelay(40);
1243 mac_mode = MAC_MODE_PORT_MODE_MII;
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;
1252 if (!(tp->tg3_flags2 & TG3_FLG2_5750_PLUS))
1253 tw32(MAC_LED_CTRL, tp->led_ctrl);
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;
1259 tw32_f(MAC_MODE, mac_mode);
1260 udelay(100);
1262 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
1263 udelay(10);
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;
1271 base_val = tp->pci_clock_ctrl;
1272 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
1273 CLOCK_CTRL_TXCLK_DISABLE);
1275 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
1276 CLOCK_CTRL_PWRDOWN_PLL133, 40);
1277 } else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
1278 /* do nothing */
1279 } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
1280 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) {
1281 u32 newbits1, newbits2;
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;
1297 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
1298 40);
1300 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
1301 40);
1303 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
1304 u32 newbits3;
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;
1315 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1316 tp->pci_clock_ctrl | newbits3, 40);
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);
1327 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
1328 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
1332 tg3_frob_aux_power(tp);
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);
1339 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
1340 tw32(0x7d00, val);
1341 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1342 int err;
1344 err = tg3_nvram_lock(tp);
1345 tg3_halt_cpu(tp, RX_CPU_BASE);
1346 if (!err)
1347 tg3_nvram_unlock(tp);
1351 /* Finally, set the new power state. */
1352 pci_write_config_word(tp->pdev, pm + PCI_PM_CTRL, power_control);
1353 udelay(100); /* Delay after power state change */
1355 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
1357 return 0;
1360 static void tg3_link_report(struct tg3 *tp)
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"));
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");
1382 static void tg3_setup_flow_control(struct tg3 *tp, u32 local_adv, u32 remote_adv)
1384 u32 new_tg3_flags = 0;
1385 u32 old_rx_mode = tp->rx_mode;
1386 u32 old_tx_mode = tp->tx_mode;
1388 if (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) {
1390 /* Convert 1000BaseX flow control bits to 1000BaseT
1391 * bits before resolving flow control.
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);
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;
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);
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;
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;
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;
1440 if (old_rx_mode != tp->rx_mode) {
1441 tw32_f(MAC_RX_MODE, tp->rx_mode);
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;
1449 if (old_tx_mode != tp->tx_mode) {
1450 tw32_f(MAC_TX_MODE, tp->tx_mode);
1454 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
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;
1462 case MII_TG3_AUX_STAT_10FULL:
1463 *speed = SPEED_10;
1464 *duplex = DUPLEX_FULL;
1465 break;
1467 case MII_TG3_AUX_STAT_100HALF:
1468 *speed = SPEED_100;
1469 *duplex = DUPLEX_HALF;
1470 break;
1472 case MII_TG3_AUX_STAT_100FULL:
1473 *speed = SPEED_100;
1474 *duplex = DUPLEX_FULL;
1475 break;
1477 case MII_TG3_AUX_STAT_1000HALF:
1478 *speed = SPEED_1000;
1479 *duplex = DUPLEX_HALF;
1480 break;
1482 case MII_TG3_AUX_STAT_1000FULL:
1483 *speed = SPEED_1000;
1484 *duplex = DUPLEX_FULL;
1485 break;
1487 default:
1488 *speed = SPEED_INVALID;
1489 *duplex = DUPLEX_INVALID;
1490 break;
1494 static void tg3_phy_copper_begin(struct tg3 *tp)
1496 u32 new_adv;
1497 int i;
1499 if (tp->link_config.phy_is_low_power) {
1500 /* Entering low power mode. Disable gigabit and
1501 * 100baseT advertisements.
1503 tg3_writephy(tp, MII_TG3_CTRL, 0);
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);
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);
1518 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
1519 tp->link_config.advertising &=
1520 ~(ADVERTISED_1000baseT_Half |
1521 ADVERTISED_1000baseT_Full);
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);
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);
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);
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);
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;
1580 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1584 if (tp->link_config.autoneg == AUTONEG_DISABLE &&
1585 tp->link_config.speed != SPEED_INVALID) {
1586 u32 bmcr, orig_bmcr;
1588 tp->link_config.active_speed = tp->link_config.speed;
1589 tp->link_config.active_duplex = tp->link_config.duplex;
1591 bmcr = 0;
1592 switch (tp->link_config.speed) {
1593 default:
1594 case SPEED_10:
1595 break;
1597 case SPEED_100:
1598 bmcr |= BMCR_SPEED100;
1599 break;
1601 case SPEED_1000:
1602 bmcr |= TG3_BMCR_SPEED1000;
1603 break;
1606 if (tp->link_config.duplex == DUPLEX_FULL)
1607 bmcr |= BMCR_FULLDPLX;
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;
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;
1624 tg3_writephy(tp, MII_BMCR, bmcr);
1625 udelay(40);
1627 } else {
1628 tg3_writephy(tp, MII_BMCR,
1629 BMCR_ANENABLE | BMCR_ANRESTART);
1633 static int tg3_init_5401phy_dsp(struct tg3 *tp)
1635 int err;
1637 /* Turn off tap power management. */
1638 /* Set Extended packet length bit */
1639 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20);
1641 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0012);
1642 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1804);
1644 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0013);
1645 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1204);
1647 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
1648 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0132);
1650 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
1651 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0232);
1653 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
1654 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0a20);
1656 udelay(40);
1658 return err;
1661 static int tg3_copper_is_advertising_all(struct tg3 *tp)
1663 u32 adv_reg, all_mask;
1665 if (tg3_readphy(tp, MII_ADVERTISE, &adv_reg))
1666 return 0;
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;
1675 if (tg3_readphy(tp, MII_TG3_CTRL, &tg3_ctrl))
1676 return 0;
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;
1683 return 1;
1686 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
1688 int current_link_up;
1689 u32 bmsr, dummy;
1690 u16 current_speed;
1691 u8 current_duplex;
1692 int i, err;
1694 tw32(MAC_EVENT, 0);
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);
1703 tp->mi_mode = MAC_MI_MODE_BASE;
1704 tw32_f(MAC_MI_MODE, tp->mi_mode);
1705 udelay(80);
1707 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x02);
1709 /* Some third-party PHYs need to be reset on link going
1710 * down.
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;
1721 if (force_reset)
1722 tg3_phy_reset(tp);
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;
1730 if (!(bmsr & BMSR_LSTATUS)) {
1731 err = tg3_init_5401phy_dsp(tp);
1732 if (err)
1733 return err;
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;
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;
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);
1764 /* Clear pending interrupts... */
1765 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
1766 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
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);
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);
1782 current_link_up = 0;
1783 current_speed = SPEED_INVALID;
1784 current_duplex = DUPLEX_INVALID;
1786 if (tp->tg3_flags2 & TG3_FLG2_CAPACITIVE_COUPLING) {
1787 u32 val;
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;
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);
1807 if (bmsr & BMSR_LSTATUS) {
1808 u32 aux_stat, bmcr;
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;
1818 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
1819 &current_speed,
1820 &current_duplex);
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);
1832 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
1833 if (bmcr & BMCR_ANENABLE) {
1834 current_link_up = 1;
1836 /* Force autoneg restart if we are exiting
1837 * low power mode.
1839 if (!tg3_copper_is_advertising_all(tp))
1840 current_link_up = 0;
1841 } else {
1842 current_link_up = 0;
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;
1854 tp->link_config.active_speed = current_speed;
1855 tp->link_config.active_duplex = current_duplex;
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;
1863 if (tg3_readphy(tp, MII_ADVERTISE, &local_adv))
1864 local_adv = 0;
1865 local_adv &= (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
1867 if (tg3_readphy(tp, MII_LPA, &remote_adv))
1868 remote_adv = 0;
1870 remote_adv &= (LPA_PAUSE_CAP | LPA_PAUSE_ASYM);
1872 /* If we are not advertising full pause capability,
1873 * something is wrong. Bring the link down and reconfigure.
1875 if (local_adv != ADVERTISE_PAUSE_CAP) {
1876 current_link_up = 0;
1877 } else {
1878 tg3_setup_flow_control(tp, local_adv, remote_adv);
1881 relink:
1882 if (current_link_up == 0 || tp->link_config.phy_is_low_power) {
1883 u32 tmp;
1885 tg3_phy_copper_begin(tp);
1887 tg3_readphy(tp, MII_BMSR, &tmp);
1888 if (!tg3_readphy(tp, MII_BMSR, &tmp) &&
1889 (tmp & BMSR_LSTATUS))
1890 current_link_up = 1;
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;
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;
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;
1918 /* ??? Without this setting Netgear GA302T PHY does not
1919 * ??? send/receive packets...
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);
1928 tw32_f(MAC_MODE, tp->mac_mode);
1929 udelay(40);
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);
1937 udelay(40);
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);
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);
1962 return 0;
1965 struct 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
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
2001 #define MR_LINK_OK 0x80000000
2003 unsigned long link_time, cur_time;
2005 u32 ability_match_cfg;
2006 int ability_match_count;
2008 char ability_match, idle_match, ack_match;
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
2022 #define ANEG_OK 0
2023 #define ANEG_DONE 1
2024 #define ANEG_TIMER_ENAB 2
2025 #define ANEG_FAILED -1
2027 #define ANEG_STATE_SETTLE_TIME 10000
2029 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
2030 struct tg3_fiber_aneginfo *ap)
2032 unsigned long delta;
2033 u32 rx_cfg_reg;
2034 int ret;
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;
2046 ap->cur_time++;
2048 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
2049 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
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;
2061 if (rx_cfg_reg & ANEG_CFG_ACK)
2062 ap->ack_match = 1;
2063 else
2064 ap->ack_match = 0;
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;
2074 rx_cfg_reg = 0;
2077 ap->rxconfig = rx_cfg_reg;
2078 ret = ANEG_OK;
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;
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;
2097 ap->state = ANEG_STATE_RESTART_INIT;
2098 } else {
2099 ap->state = ANEG_STATE_DISABLE_LINK_OK;
2101 break;
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);
2112 ret = ANEG_TIMER_ENAB;
2113 ap->state = ANEG_STATE_RESTART;
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;
2123 break;
2125 case ANEG_STATE_DISABLE_LINK_OK:
2126 ret = ANEG_DONE;
2127 break;
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);
2137 ap->state = ANEG_STATE_ABILITY_DETECT;
2138 break;
2140 case ANEG_STATE_ABILITY_DETECT:
2141 if (ap->ability_match != 0 && ap->rxconfig != 0) {
2142 ap->state = ANEG_STATE_ACK_DETECT_INIT;
2144 break;
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);
2153 ap->state = ANEG_STATE_ACK_DETECT;
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;
2164 } else if (ap->ability_match != 0 &&
2165 ap->rxconfig == 0) {
2166 ap->state = ANEG_STATE_AN_ENABLE;
2168 break;
2170 case ANEG_STATE_COMPLETE_ACK_INIT:
2171 if (ap->rxconfig & ANEG_CFG_INVAL) {
2172 ret = ANEG_FAILED;
2173 break;
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;
2199 ap->link_time = ap->cur_time;
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;
2208 ap->state = ANEG_STATE_COMPLETE_ACK;
2209 ret = ANEG_TIMER_ENAB;
2210 break;
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;
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;
2231 break;
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);
2239 ap->state = ANEG_STATE_IDLE_DETECT;
2240 ret = ANEG_TIMER_ENAB;
2241 break;
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;
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;
2254 break;
2256 case ANEG_STATE_LINK_OK:
2257 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
2258 ret = ANEG_DONE;
2259 break;
2261 case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
2262 /* ??? unimplemented */
2263 break;
2265 case ANEG_STATE_NEXT_PAGE_WAIT:
2266 /* ??? unimplemented */
2267 break;
2269 default:
2270 ret = ANEG_FAILED;
2271 break;
2274 return ret;
2277 static int fiber_autoneg(struct tg3 *tp, u32 *flags)
2279 int res = 0;
2280 struct tg3_fiber_aneginfo aninfo;
2281 int status = ANEG_FAILED;
2282 unsigned int tick;
2283 u32 tmp;
2285 tw32_f(MAC_TX_AUTO_NEG, 0);
2287 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
2288 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
2289 udelay(40);
2291 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
2292 udelay(40);
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;
2304 udelay(1);
2307 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
2308 tw32_f(MAC_MODE, tp->mac_mode);
2309 udelay(40);
2311 *flags = aninfo.flags;
2313 if (status == ANEG_DONE &&
2314 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
2315 MR_LP_ADV_FULL_DUPLEX)))
2316 res = 1;
2318 return res;
2321 static void tg3_init_bcm8002(struct tg3 *tp)
2323 u32 mac_status = tr32(MAC_STATUS);
2324 int i;
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;
2331 /* Set PLL lock range. */
2332 tg3_writephy(tp, 0x16, 0x8007);
2334 /* SW reset */
2335 tg3_writephy(tp, MII_BMCR, BMCR_RESET);
2337 /* Wait for reset to complete. */
2338 /* XXX schedule_timeout() ... */
2339 for (i = 0; i < 500; i++)
2340 udelay(10);
2342 /* Config mode; select PMA/Ch 1 regs. */
2343 tg3_writephy(tp, 0x10, 0x8411);
2345 /* Enable auto-lock and comdet, select txclk for tx. */
2346 tg3_writephy(tp, 0x11, 0x0a10);
2348 tg3_writephy(tp, 0x18, 0x00a0);
2349 tg3_writephy(tp, 0x16, 0x41ff);
2351 /* Assert and deassert POR. */
2352 tg3_writephy(tp, 0x13, 0x0400);
2353 udelay(40);
2354 tg3_writephy(tp, 0x13, 0x0000);
2356 tg3_writephy(tp, 0x11, 0x0a50);
2357 udelay(40);
2358 tg3_writephy(tp, 0x11, 0x0a10);
2360 /* Wait for signal to stabilize */
2361 /* XXX schedule_timeout() ... */
2362 for (i = 0; i < 15000; i++)
2363 udelay(10);
2365 /* Deselect the channel register so we can read the PHYID
2366 * later.
2368 tg3_writephy(tp, 0x10, 0x8011);
2371 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
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;
2378 serdes_cfg = 0;
2379 expected_sg_dig_ctrl = 0;
2380 workaround = 0;
2381 port_a = 1;
2382 current_link_up = 0;
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;
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;
2395 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2397 if (tp->link_config.autoneg != AUTONEG_ENABLE) {
2398 if (sg_dig_ctrl & (1 << 31)) {
2399 if (workaround) {
2400 u32 val = serdes_cfg;
2402 if (port_a)
2403 val |= 0xc010000;
2404 else
2405 val |= 0x4010000;
2406 tw32_f(MAC_SERDES_CFG, val);
2408 tw32_f(SG_DIG_CTRL, 0x01388400);
2410 if (mac_status & MAC_STATUS_PCS_SYNCED) {
2411 tg3_setup_flow_control(tp, 0, 0);
2412 current_link_up = 1;
2414 goto out;
2417 /* Want auto-negotiation. */
2418 expected_sg_dig_ctrl = 0x81388400;
2420 /* Pause capability */
2421 expected_sg_dig_ctrl |= (1 << 11);
2423 /* Asymettric pause */
2424 expected_sg_dig_ctrl |= (1 << 12);
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);
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;
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);
2445 mac_status = tr32(MAC_STATUS);
2447 if ((sg_dig_status & (1 << 1)) &&
2448 (mac_status & MAC_STATUS_PCS_SYNCED)) {
2449 u32 local_adv, remote_adv;
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;
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;
2468 if (port_a)
2469 val |= 0xc010000;
2470 else
2471 val |= 0x4010000;
2473 tw32_f(MAC_SERDES_CFG, val);
2476 tw32_f(SG_DIG_CTRL, 0x01388400);
2477 udelay(40);
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;
2492 out:
2493 return current_link_up;
2496 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
2498 int current_link_up = 0;
2500 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) {
2501 tp->tg3_flags &= ~TG3_FLAG_GOT_SERDES_FLOWCTL;
2502 goto out;
2505 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2506 u32 flags;
2507 int i;
2509 if (fiber_autoneg(tp, &flags)) {
2510 u32 local_adv, remote_adv;
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;
2519 tg3_setup_flow_control(tp, local_adv, remote_adv);
2521 tp->tg3_flags |= TG3_FLAG_GOT_SERDES_FLOWCTL;
2522 current_link_up = 1;
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;
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;
2546 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
2547 udelay(40);
2550 out:
2551 return current_link_up;
2554 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
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;
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;
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;
2585 tw32_f(MAC_TX_AUTO_NEG, 0);
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);
2592 if (tp->phy_id == PHY_ID_BCM8002)
2593 tg3_init_bcm8002(tp);
2595 /* Enable link change event even when serdes polling. */
2596 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2597 udelay(40);
2599 current_link_up = 0;
2600 mac_status = tr32(MAC_STATUS);
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);
2607 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
2608 tw32_f(MAC_MODE, tp->mac_mode);
2609 udelay(40);
2611 tp->hw_status->status =
2612 (SD_STATUS_UPDATED |
2613 (tp->hw_status->status & ~SD_STATUS_LINK_CHG));
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;
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);
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));
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);
2665 return 0;
2668 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
2670 int current_link_up, err = 0;
2671 u32 bmsr, bmcr;
2672 u16 current_speed;
2673 u8 current_duplex;
2675 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
2676 tw32_f(MAC_MODE, tp->mac_mode);
2677 udelay(40);
2679 tw32(MAC_EVENT, 0);
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);
2688 if (force_reset)
2689 tg3_phy_reset(tp);
2691 current_link_up = 0;
2692 current_speed = SPEED_INVALID;
2693 current_duplex = DUPLEX_INVALID;
2695 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
2696 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
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;
2704 err |= tg3_readphy(tp, MII_BMCR, &bmcr);
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;
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);
2718 /* Always advertise symmetric PAUSE just like copper */
2719 new_adv |= ADVERTISE_1000XPAUSE;
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;
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);
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;
2735 return err;
2737 } else {
2738 u32 new_bmcr;
2740 bmcr &= ~BMCR_SPEED1000;
2741 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
2743 if (tp->link_config.duplex == DUPLEX_FULL)
2744 new_bmcr |= BMCR_FULLDPLX;
2746 if (new_bmcr != bmcr) {
2747 /* BMCR_SPEED1000 is a reserved bit that needs
2748 * to be set on write.
2750 new_bmcr |= BMCR_SPEED1000;
2752 /* Force a linkdown */
2753 if (netif_carrier_ok(tp->dev)) {
2754 u32 adv;
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);
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);
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;
2778 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
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;
2790 if (bmcr & BMCR_ANENABLE) {
2791 u32 local_adv, remote_adv, common;
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;
2803 tg3_setup_flow_control(tp, local_adv,
2804 remote_adv);
2806 else
2807 current_link_up = 0;
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;
2815 tw32_f(MAC_MODE, tp->mac_mode);
2816 udelay(40);
2818 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2820 tp->link_config.active_speed = current_speed;
2821 tp->link_config.active_duplex = current_duplex;
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;
2830 tg3_link_report(tp);
2832 return err;
2835 static void tg3_serdes_parallel_detect(struct tg3 *tp)
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;
2842 if (!netif_carrier_ok(tp->dev) &&
2843 (tp->link_config.autoneg == AUTONEG_ENABLE)) {
2844 u32 bmcr;
2846 tg3_readphy(tp, MII_BMCR, &bmcr);
2847 if (bmcr & BMCR_ANENABLE) {
2848 u32 phy1, phy2;
2850 /* Select shadow register 0x1f */
2851 tg3_writephy(tp, 0x1c, 0x7c00);
2852 tg3_readphy(tp, 0x1c, &phy1);
2854 /* Select expansion interrupt status register */
2855 tg3_writephy(tp, 0x17, 0x0f01);
2856 tg3_readphy(tp, 0x15, &phy2);
2857 tg3_readphy(tp, 0x15, &phy2);
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.
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;
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;
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;
2883 /* Config code words received, turn on autoneg. */
2884 tg3_readphy(tp, MII_BMCR, &bmcr);
2885 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
2887 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2893 static int tg3_setup_phy(struct tg3 *tp, int force_reset)
2895 int err;
2897 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
2898 err = tg3_setup_fiber_phy(tp, force_reset);
2899 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
2900 err = tg3_setup_fiber_mii_phy(tp, force_reset);
2901 } else {
2902 err = tg3_setup_copper_phy(tp, force_reset);
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)));
2917 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
2918 if (netif_carrier_ok(tp->dev)) {
2919 tw32(HOSTCC_STAT_COAL_TICKS,
2920 tp->coal.stats_block_coalesce_usecs);
2921 } else {
2922 tw32(HOSTCC_STAT_COAL_TICKS, 0);
2926 return err;
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.
2933 static void tg3_tx(struct tg3 *tp)
2935 u32 hw_idx = tp->hw_status->idx[0].tx_consumer;
2936 u32 sw_idx = tp->tx_cons;
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;
2943 if (unlikely(skb == NULL))
2944 BUG();
2946 pci_unmap_single(tp->pdev,
2947 pci_unmap_addr(ri, mapping),
2948 skb_headlen(skb),
2949 PCI_DMA_TODEVICE);
2951 ri->skb = NULL;
2953 sw_idx = NEXT_TX(sw_idx);
2955 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2956 if (unlikely(sw_idx == hw_idx))
2957 BUG();
2959 ri = &tp->tx_buffers[sw_idx];
2960 if (unlikely(ri->skb != NULL))
2961 BUG();
2963 pci_unmap_page(tp->pdev,
2964 pci_unmap_addr(ri, mapping),
2965 skb_shinfo(skb)->frags[i].size,
2966 PCI_DMA_TODEVICE);
2968 sw_idx = NEXT_TX(sw_idx);
2971 dev_kfree_skb(skb);
2974 tp->tx_cons = sw_idx;
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);
2985 /* Returns size of skb allocated or < 0 on error.
2987 * We only need to fill in the address because the other members
2988 * of the RX descriptor are invariant, see tg3_init_rings.
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).
2996 static int tg3_alloc_rx_skb(struct tg3 *tp, u32 opaque_key,
2997 int src_idx, u32 dest_idx_unmasked)
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;
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];
3013 skb_size = tp->rx_pkt_buf_sz;
3014 break;
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;
3025 default:
3026 return -EINVAL;
3029 /* Do not overwrite any of the map or rp information
3030 * until we are sure we can commit to a new buffer.
3032 * Callers depend upon this behavior and assume that
3033 * we leave everything unchanged if we fail.
3035 skb = dev_alloc_skb(skb_size);
3036 if (skb == NULL)
3037 return -ENOMEM;
3039 skb->dev = tp->dev;
3040 skb_reserve(skb, tp->rx_offset);
3042 mapping = pci_map_single(tp->pdev, skb->data,
3043 skb_size - tp->rx_offset,
3044 PCI_DMA_FROMDEVICE);
3046 map->skb = skb;
3047 pci_unmap_addr_set(map, mapping, mapping);
3049 if (src_map != NULL)
3050 src_map->skb = NULL;
3052 desc->addr_hi = ((u64)mapping >> 32);
3053 desc->addr_lo = ((u64)mapping & 0xffffffff);
3055 return skb_size;
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.
3062 static void tg3_recycle_rx(struct tg3 *tp, u32 opaque_key,
3063 int src_idx, u32 dest_idx_unmasked)
3065 struct tg3_rx_buffer_desc *src_desc, *dest_desc;
3066 struct ring_info *src_map, *dest_map;
3067 int dest_idx;
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;
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;
3086 default:
3087 return;
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;
3096 src_map->skb = NULL;
3099 #if TG3_VLAN_TAG_USED
3100 static int tg3_vlan_rx(struct tg3 *tp, struct sk_buff *skb, u16 vlan_tag)
3102 return vlan_hwaccel_receive_skb(skb, tp->vlgrp, vlan_tag);
3104 #endif
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.
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.
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.
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.
3130 static int tg3_rx(struct tg3 *tp, int budget)
3132 u32 work_mask;
3133 u32 sw_idx = tp->rx_rcb_ptr;
3134 u16 hw_idx;
3135 int received;
3137 hw_idx = tp->hw_status->idx[0].rx_producer;
3139 * We need to order the read of hw_idx and the read of
3140 * the opaque cookie.
3142 rmb();
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;
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;
3165 else {
3166 goto next_pkt_nopost;
3169 work_mask |= opaque_key;
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;
3182 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4; /* omit crc */
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()] */
3189 int skb_size;
3191 skb_size = tg3_alloc_rx_skb(tp, opaque_key,
3192 desc_idx, *post_ptr);
3193 if (skb_size < 0)
3194 goto drop_it;
3196 pci_unmap_single(tp->pdev, dma_addr,
3197 skb_size - tp->rx_offset,
3198 PCI_DMA_FROMDEVICE);
3200 skb_put(skb, len);
3201 } else {
3202 struct sk_buff *copy_skb;
3204 tg3_recycle_rx(tp, opaque_key,
3205 desc_idx, *post_ptr);
3207 copy_skb = dev_alloc_skb(len + 2);
3208 if (copy_skb == NULL)
3209 goto drop_it_no_recycle;
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);
3218 /* We'll reuse the original ring buffer. */
3219 skb = copy_skb;
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;
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);
3240 tp->dev->last_rx = jiffies;
3241 received++;
3242 budget--;
3244 next_pkt:
3245 (*post_ptr)++;
3246 next_pkt_nopost:
3247 sw_idx++;
3248 sw_idx %= TG3_RX_RCB_RING_SIZE(tp);
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();
3257 /* ACK the status ring. */
3258 tp->rx_rcb_ptr = sw_idx;
3259 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, sw_idx);
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);
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);
3272 mmiowb();
3274 return received;
3277 static int tg3_poll(struct net_device *netdev, int *budget)
3279 struct tg3 *tp = netdev_priv(netdev);
3280 struct tg3_hw_status *sblk = tp->hw_status;
3281 int done;
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);
3290 spin_lock(&tp->lock);
3291 tg3_setup_phy(tp, 0);
3292 spin_unlock(&tp->lock);
3296 /* run TX completion thread */
3297 if (sblk->idx[0].tx_consumer != tp->tx_cons) {
3298 tg3_tx(tp);
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()
3305 if (sblk->idx[0].rx_producer != tp->rx_rcb_ptr) {
3306 int orig_budget = *budget;
3307 int work_done;
3309 if (orig_budget > netdev->quota)
3310 orig_budget = netdev->quota;
3312 work_done = tg3_rx(tp, orig_budget);
3314 *budget -= work_done;
3315 netdev->quota -= work_done;
3318 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) {
3319 tp->last_tag = sblk->status_tag;
3320 rmb();
3321 } else
3322 sblk->status &= ~SD_STATUS_UPDATED;
3324 /* if no more work, tell net stack and NIC we're done */
3325 done = !tg3_has_work(tp);
3326 if (done) {
3327 netif_rx_complete(netdev);
3328 tg3_restart_ints(tp);
3331 return (done ? 0 : 1);
3334 static void tg3_irq_quiesce(struct tg3 *tp)
3336 BUG_ON(tp->irq_sync);
3338 tp->irq_sync = 1;
3339 smp_mb();
3341 synchronize_irq(tp->pdev->irq);
3344 static inline int tg3_irq_sync(struct tg3 *tp)
3346 return tp->irq_sync;
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.
3354 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
3356 if (irq_sync)
3357 tg3_irq_quiesce(tp);
3358 spin_lock_bh(&tp->lock);
3359 spin_lock(&tp->tx_lock);
3362 static inline void tg3_full_unlock(struct tg3 *tp)
3364 spin_unlock(&tp->tx_lock);
3365 spin_unlock_bh(&tp->lock);
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.
3372 static irqreturn_t tg3_msi(int irq, void *dev_id, struct pt_regs *regs)
3374 struct net_device *dev = dev_id;
3375 struct tg3 *tp = netdev_priv(dev);
3377 prefetch(tp->hw_status);
3378 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3380 * Writing any value to intr-mbox-0 clears PCI INTA# and
3381 * chip-internal interrupt pending events.
3382 * Writing non-zero to intr-mbox-0 additional tells the
3383 * NIC to stop sending us irqs, engaging "in-intr-handler"
3384 * event coalescing.
3386 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
3387 if (likely(!tg3_irq_sync(tp)))
3388 netif_rx_schedule(dev); /* schedule NAPI poll */
3390 return IRQ_RETVAL(1);
3393 static irqreturn_t tg3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
3395 struct net_device *dev = dev_id;
3396 struct tg3 *tp = netdev_priv(dev);
3397 struct tg3_hw_status *sblk = tp->hw_status;
3398 unsigned int handled = 1;
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.
3405 if ((sblk->status & SD_STATUS_UPDATED) ||
3406 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3408 * Writing any value to intr-mbox-0 clears PCI INTA# and
3409 * chip-internal interrupt pending events.
3410 * Writing non-zero to intr-mbox-0 additional tells the
3411 * NIC to stop sending us irqs, engaging "in-intr-handler"
3412 * event coalescing.
3414 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3415 0x00000001);
3416 if (tg3_irq_sync(tp))
3417 goto out;
3418 sblk->status &= ~SD_STATUS_UPDATED;
3419 if (likely(tg3_has_work(tp))) {
3420 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3421 netif_rx_schedule(dev); /* schedule NAPI poll */
3422 } else {
3423 /* No work, shared interrupt perhaps? re-enable
3424 * interrupts, and flush that PCI write
3426 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3427 0x00000000);
3429 } else { /* shared interrupt */
3430 handled = 0;
3432 out:
3433 return IRQ_RETVAL(handled);
3436 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id, struct pt_regs *regs)
3438 struct net_device *dev = dev_id;
3439 struct tg3 *tp = netdev_priv(dev);
3440 struct tg3_hw_status *sblk = tp->hw_status;
3441 unsigned int handled = 1;
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.
3448 if ((sblk->status_tag != tp->last_tag) ||
3449 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
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.
3457 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3458 0x00000001);
3459 if (tg3_irq_sync(tp))
3460 goto out;
3461 if (netif_rx_schedule_prep(dev)) {
3462 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
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.
3468 tp->last_tag = sblk->status_tag;
3469 __netif_rx_schedule(dev);
3471 } else { /* shared interrupt */
3472 handled = 0;
3474 out:
3475 return IRQ_RETVAL(handled);
3478 /* ISR for interrupt test */
3479 static irqreturn_t tg3_test_isr(int irq, void *dev_id,
3480 struct pt_regs *regs)
3482 struct net_device *dev = dev_id;
3483 struct tg3 *tp = netdev_priv(dev);
3484 struct tg3_hw_status *sblk = tp->hw_status;
3486 if ((sblk->status & SD_STATUS_UPDATED) ||
3487 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3488 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3489 0x00000001);
3490 return IRQ_RETVAL(1);
3492 return IRQ_RETVAL(0);
3495 static int tg3_init_hw(struct tg3 *);
3496 static int tg3_halt(struct tg3 *, int, int);
3498 #ifdef CONFIG_NET_POLL_CONTROLLER
3499 static void tg3_poll_controller(struct net_device *dev)
3501 struct tg3 *tp = netdev_priv(dev);
3503 tg3_interrupt(tp->pdev->irq, dev, NULL);
3505 #endif
3507 static void tg3_reset_task(void *_data)
3509 struct tg3 *tp = _data;
3510 unsigned int restart_timer;
3512 tg3_full_lock(tp, 0);
3513 tp->tg3_flags |= TG3_FLAG_IN_RESET_TASK;
3515 if (!netif_running(tp->dev)) {
3516 tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK;
3517 tg3_full_unlock(tp);
3518 return;
3521 tg3_full_unlock(tp);
3523 tg3_netif_stop(tp);
3525 tg3_full_lock(tp, 1);
3527 restart_timer = tp->tg3_flags2 & TG3_FLG2_RESTART_TIMER;
3528 tp->tg3_flags2 &= ~TG3_FLG2_RESTART_TIMER;
3530 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
3531 tg3_init_hw(tp);
3533 tg3_netif_start(tp);
3535 if (restart_timer)
3536 mod_timer(&tp->timer, jiffies + 1);
3538 tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK;
3540 tg3_full_unlock(tp);
3543 static void tg3_tx_timeout(struct net_device *dev)
3545 struct tg3 *tp = netdev_priv(dev);
3547 printk(KERN_ERR PFX "%s: transmit timed out, resetting\n",
3548 dev->name);
3550 schedule_work(&tp->reset_task);
3553 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
3554 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
3556 u32 base = (u32) mapping & 0xffffffff;
3558 return ((base > 0xffffdcc0) &&
3559 (base + len + 8 < base));
3562 /* Test for DMA addresses > 40-bit */
3563 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
3564 int len)
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
3575 static void tg3_set_txd(struct tg3 *, int, dma_addr_t, int, u32, u32);
3577 /* Workaround 4GB and 40-bit hardware DMA bugs. */
3578 static int tigon3_dma_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb,
3579 u32 last_plus_one, u32 *start,
3580 u32 base_flags, u32 mss)
3582 struct sk_buff *new_skb = skb_copy(skb, GFP_ATOMIC);
3583 dma_addr_t new_addr = 0;
3584 u32 entry = *start;
3585 int i, ret = 0;
3587 if (!new_skb) {
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.
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);
3608 /* Now clean up the sw ring entries. */
3609 i = 0;
3610 while (entry != last_plus_one) {
3611 int len;
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;
3626 entry = NEXT_TX(entry);
3627 i++;
3630 dev_kfree_skb(skb);
3632 return ret;
3635 static void tg3_set_txd(struct tg3 *tp, int entry,
3636 dma_addr_t mapping, int len, u32 flags,
3637 u32 mss_and_is_end)
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;
3644 if (is_end)
3645 flags |= TXD_FLAG_END;
3646 if (flags & TXD_FLAG_VLAN) {
3647 vlan_tag = flags >> 16;
3648 flags &= 0xffff;
3650 vlan_tag |= (mss << TXD_MSS_SHIFT);
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;
3658 /* hard_start_xmit for devices that don't have any bugs and
3659 * support TG3_FLG2_HW_TSO_2 only.
3661 static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
3663 struct tg3 *tp = netdev_priv(dev);
3664 dma_addr_t mapping;
3665 u32 len, entry, base_flags, mss;
3667 len = skb_headlen(skb);
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!
3674 if (!spin_trylock(&tp->tx_lock))
3675 return NETDEV_TX_LOCKED;
3677 if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
3678 if (!netif_queue_stopped(dev)) {
3679 netif_stop_queue(dev);
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);
3685 spin_unlock(&tp->tx_lock);
3686 return NETDEV_TX_BUSY;
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;
3697 if (skb_header_cloned(skb) &&
3698 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
3699 dev_kfree_skb(skb);
3700 goto out_unlock;
3703 tcp_opt_len = ((skb->h.th->doff - 5) * 4);
3704 ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr);
3706 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
3707 TXD_FLAG_CPU_POST_DMA);
3709 skb->nh.iph->check = 0;
3710 skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len);
3712 skb->h.th->check = 0;
3714 mss |= (ip_tcp_len + tcp_opt_len) << 9;
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
3729 /* Queue skb data, a.k.a. the main skb fragment. */
3730 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
3732 tp->tx_buffers[entry].skb = skb;
3733 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3735 tg3_set_txd(tp, entry, mapping, len, base_flags,
3736 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
3738 entry = NEXT_TX(entry);
3740 /* Now loop through additional data fragments, and queue them. */
3741 if (skb_shinfo(skb)->nr_frags > 0) {
3742 unsigned int i, last;
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];
3748 len = frag->size;
3749 mapping = pci_map_page(tp->pdev,
3750 frag->page,
3751 frag->page_offset,
3752 len, PCI_DMA_TODEVICE);
3754 tp->tx_buffers[entry].skb = NULL;
3755 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3757 tg3_set_txd(tp, entry, mapping, len,
3758 base_flags, (i == last) | (mss << 1));
3760 entry = NEXT_TX(entry);
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);
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);
3774 out_unlock:
3775 mmiowb();
3776 spin_unlock(&tp->tx_lock);
3778 dev->trans_start = jiffies;
3780 return NETDEV_TX_OK;
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.
3786 static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
3788 struct tg3 *tp = netdev_priv(dev);
3789 dma_addr_t mapping;
3790 u32 len, entry, base_flags, mss;
3791 int would_hit_hwbug;
3793 len = skb_headlen(skb);
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
3797 * interrupt. Furthermore, IRQ processing runs lockless so we have
3798 * no IRQ context deadlocks to worry about either. Rejoice!
3800 if (!spin_trylock(&tp->tx_lock))
3801 return NETDEV_TX_LOCKED;
3803 if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
3804 if (!netif_queue_stopped(dev)) {
3805 netif_stop_queue(dev);
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);
3811 spin_unlock(&tp->tx_lock);
3812 return NETDEV_TX_BUSY;
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;
3825 if (skb_header_cloned(skb) &&
3826 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
3827 dev_kfree_skb(skb);
3828 goto out_unlock;
3831 tcp_opt_len = ((skb->h.th->doff - 5) * 4);
3832 ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr);
3834 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
3835 TXD_FLAG_CPU_POST_DMA);
3837 skb->nh.iph->check = 0;
3838 skb->nh.iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len);
3839 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
3840 skb->h.th->check = 0;
3841 base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
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);
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;
3855 tsflags = ((skb->nh.iph->ihl - 5) +
3856 (tcp_opt_len >> 2));
3857 mss |= (tsflags << 11);
3859 } else {
3860 if (tcp_opt_len || skb->nh.iph->ihl > 5) {
3861 int tsflags;
3863 tsflags = ((skb->nh.iph->ihl - 5) +
3864 (tcp_opt_len >> 2));
3865 base_flags |= tsflags << 12;
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
3878 /* Queue skb data, a.k.a. the main skb fragment. */
3879 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
3881 tp->tx_buffers[entry].skb = skb;
3882 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3884 would_hit_hwbug = 0;
3886 if (tg3_4g_overflow_test(mapping, len))
3887 would_hit_hwbug = 1;
3889 tg3_set_txd(tp, entry, mapping, len, base_flags,
3890 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
3892 entry = NEXT_TX(entry);
3894 /* Now loop through additional data fragments, and queue them. */
3895 if (skb_shinfo(skb)->nr_frags > 0) {
3896 unsigned int i, last;
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];
3902 len = frag->size;
3903 mapping = pci_map_page(tp->pdev,
3904 frag->page,
3905 frag->page_offset,
3906 len, PCI_DMA_TODEVICE);
3908 tp->tx_buffers[entry].skb = NULL;
3909 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3911 if (tg3_4g_overflow_test(mapping, len))
3912 would_hit_hwbug = 1;
3914 if (tg3_40bit_overflow_test(tp, mapping, len))
3915 would_hit_hwbug = 1;
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));
3924 entry = NEXT_TX(entry);
3928 if (would_hit_hwbug) {
3929 u32 last_plus_one = entry;
3930 u32 start;
3932 start = entry - 1 - skb_shinfo(skb)->nr_frags;
3933 start &= (TG3_TX_RING_SIZE - 1);
3935 /* If the workaround fails due to memory/mapping
3936 * failure, silently drop this packet.
3938 if (tigon3_dma_hwbug_workaround(tp, skb, last_plus_one,
3939 &start, base_flags, mss))
3940 goto out_unlock;
3942 entry = start;
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);
3948 tp->tx_prod = entry;
3949 if (TX_BUFFS_AVAIL(tp) <= (MAX_SKB_FRAGS + 1)) {
3950 netif_stop_queue(dev);
3951 if (TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH)
3952 netif_wake_queue(tp->dev);
3955 out_unlock:
3956 mmiowb();
3957 spin_unlock(&tp->tx_lock);
3959 dev->trans_start = jiffies;
3961 return NETDEV_TX_OK;
3964 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
3965 int new_mtu)
3967 dev->mtu = new_mtu;
3969 if (new_mtu > ETH_DATA_LEN) {
3970 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
3971 tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE;
3972 ethtool_op_set_tso(dev, 0);
3974 else
3975 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
3976 } else {
3977 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
3978 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
3979 tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE;
3983 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
3985 struct tg3 *tp = netdev_priv(dev);
3987 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
3988 return -EINVAL;
3990 if (!netif_running(dev)) {
3991 /* We'll just catch it later when the
3992 * device is up'd.
3994 tg3_set_mtu(dev, tp, new_mtu);
3995 return 0;
3998 tg3_netif_stop(tp);
4000 tg3_full_lock(tp, 1);
4002 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
4004 tg3_set_mtu(dev, tp, new_mtu);
4006 tg3_init_hw(tp);
4008 tg3_netif_start(tp);
4010 tg3_full_unlock(tp);
4012 return 0;
4015 /* Free up pending packets in all rx/tx rings.
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.
4022 static void tg3_free_rings(struct tg3 *tp)
4024 struct ring_info *rxp;
4025 int i;
4027 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4028 rxp = &tp->rx_std_buffers[i];
4030 if (rxp->skb == NULL)
4031 continue;
4032 pci_unmap_single(tp->pdev,
4033 pci_unmap_addr(rxp, mapping),
4034 tp->rx_pkt_buf_sz - tp->rx_offset,
4035 PCI_DMA_FROMDEVICE);
4036 dev_kfree_skb_any(rxp->skb);
4037 rxp->skb = NULL;
4040 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4041 rxp = &tp->rx_jumbo_buffers[i];
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;
4053 for (i = 0; i < TG3_TX_RING_SIZE; ) {
4054 struct tx_ring_info *txp;
4055 struct sk_buff *skb;
4056 int j;
4058 txp = &tp->tx_buffers[i];
4059 skb = txp->skb;
4061 if (skb == NULL) {
4062 i++;
4063 continue;
4066 pci_unmap_single(tp->pdev,
4067 pci_unmap_addr(txp, mapping),
4068 skb_headlen(skb),
4069 PCI_DMA_TODEVICE);
4070 txp->skb = NULL;
4072 i++;
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++;
4083 dev_kfree_skb_any(skb);
4087 /* Initialize tx/rx rings for packet processing.
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.
4094 static void tg3_init_rings(struct tg3 *tp)
4096 u32 i;
4098 /* Free up all the SKBs. */
4099 tg3_free_rings(tp);
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);
4107 tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ;
4108 if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) &&
4109 (tp->dev->mtu > ETH_DATA_LEN))
4110 tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ;
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.
4116 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4117 struct tg3_rx_buffer_desc *rxd;
4119 rxd = &tp->rx_std[i];
4120 rxd->idx_len = (tp->rx_pkt_buf_sz - tp->rx_offset - 64)
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));
4127 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
4128 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4129 struct tg3_rx_buffer_desc *rxd;
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));
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;
4148 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
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;
4158 * Must not be invoked with interrupt sources disabled and
4159 * the hardware shutdown down.
4161 static void tg3_free_consistent(struct tg3 *tp)
4163 kfree(tp->rx_std_buffers);
4164 tp->rx_std_buffers = NULL;
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;
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;
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;
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;
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;
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;
4198 * Must not be invoked with interrupt sources disabled and
4199 * the hardware shutdown down. Can sleep.
4201 static int tg3_alloc_consistent(struct tg3 *tp)
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;
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));
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];
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;
4228 tp->rx_jumbo = pci_alloc_consistent(tp->pdev, TG3_RX_JUMBO_RING_BYTES,
4229 &tp->rx_jumbo_mapping);
4231 if (!tp->rx_jumbo)
4232 goto err_out;
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;
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;
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;
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;
4256 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
4257 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
4259 return 0;
4261 err_out:
4262 tg3_free_consistent(tp);
4263 return -ENOMEM;
4266 #define MAX_WAIT_CNT 1000
4268 /* To stop a block, clear the enable bit and poll till it
4269 * clears. tp->lock is held.
4271 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
4273 unsigned int i;
4274 u32 val;
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.
4286 return 0;
4288 default:
4289 break;
4293 val = tr32(ofs);
4294 val &= ~enable_bit;
4295 tw32_f(ofs, val);
4297 for (i = 0; i < MAX_WAIT_CNT; i++) {
4298 udelay(100);
4299 val = tr32(ofs);
4300 if ((val & enable_bit) == 0)
4301 break;
4304 if (i == MAX_WAIT_CNT && !silent) {
4305 printk(KERN_ERR PFX "tg3_stop_block timed out, "
4306 "ofs=%lx enable_bit=%x\n",
4307 ofs, enable_bit);
4308 return -ENODEV;
4311 return 0;
4314 /* tp->lock is held. */
4315 static int tg3_abort_hw(struct tg3 *tp, int silent)
4317 int i, err;
4319 tg3_disable_ints(tp);
4321 tp->rx_mode &= ~RX_MODE_ENABLE;
4322 tw32_f(MAC_RX_MODE, tp->rx_mode);
4323 udelay(10);
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);
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);
4340 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
4341 tw32_f(MAC_MODE, tp->mac_mode);
4342 udelay(40);
4344 tp->tx_mode &= ~TX_MODE_ENABLE;
4345 tw32_f(MAC_TX_MODE, tp->tx_mode);
4347 for (i = 0; i < MAX_WAIT_CNT; i++) {
4348 udelay(100);
4349 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
4350 break;
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));
4356 err |= -ENODEV;
4359 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
4360 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
4361 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
4363 tw32(FTQ_RESET, 0xffffffff);
4364 tw32(FTQ_RESET, 0x00000000);
4366 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
4367 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
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));
4374 return err;
4377 /* tp->lock is held. */
4378 static int tg3_nvram_lock(struct tg3 *tp)
4380 if (tp->tg3_flags & TG3_FLAG_NVRAM) {
4381 int i;
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);
4390 if (i == 8000) {
4391 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
4392 return -ENODEV;
4395 tp->nvram_lock_cnt++;
4397 return 0;
4400 /* tp->lock is held. */
4401 static void tg3_nvram_unlock(struct tg3 *tp)
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);
4411 /* tp->lock is held. */
4412 static void tg3_enable_nvram_access(struct tg3 *tp)
4414 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
4415 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
4416 u32 nvaccess = tr32(NVRAM_ACCESS);
4418 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
4422 /* tp->lock is held. */
4423 static void tg3_disable_nvram_access(struct tg3 *tp)
4425 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
4426 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
4427 u32 nvaccess = tr32(NVRAM_ACCESS);
4429 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
4433 /* tp->lock is held. */
4434 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
4436 if (!(tp->tg3_flags2 & TG3_FLG2_SUN_570X))
4437 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
4438 NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
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;
4447 case RESET_KIND_SHUTDOWN:
4448 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4449 DRV_STATE_UNLOAD);
4450 break;
4452 case RESET_KIND_SUSPEND:
4453 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4454 DRV_STATE_SUSPEND);
4455 break;
4457 default:
4458 break;
4463 /* tp->lock is held. */
4464 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
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;
4473 case RESET_KIND_SHUTDOWN:
4474 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4475 DRV_STATE_UNLOAD_DONE);
4476 break;
4478 default:
4479 break;
4484 /* tp->lock is held. */
4485 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
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;
4494 case RESET_KIND_SHUTDOWN:
4495 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4496 DRV_STATE_UNLOAD);
4497 break;
4499 case RESET_KIND_SUSPEND:
4500 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4501 DRV_STATE_SUSPEND);
4502 break;
4504 default:
4505 break;
4510 static void tg3_stop_fw(struct tg3 *);
4512 /* tp->lock is held. */
4513 static int tg3_chip_reset(struct tg3 *tp)
4515 u32 val;
4516 void (*write_op)(struct tg3 *, u32, u32);
4517 int i;
4519 if (!(tp->tg3_flags2 & TG3_FLG2_SUN_570X)) {
4520 tg3_nvram_lock(tp);
4521 /* No matching tg3_nvram_unlock() after this because
4522 * chip reset below will undo the nvram lock.
4524 tp->nvram_lock_cnt = 0;
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);
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.
4537 write_op = tp->write32;
4538 if (write_op == tg3_write_flush_reg32)
4539 tp->write32 = tg3_write32;
4541 /* do the reset */
4542 val = GRC_MISC_CFG_CORECLK_RESET;
4544 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
4545 if (tr32(0x7e2c) == 0x60) {
4546 tw32(0x7e2c, 0x20);
4548 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
4549 tw32(GRC_MISC_CFG, (1 << 29));
4550 val |= (1 << 29);
4554 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
4555 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
4556 tw32(GRC_MISC_CFG, val);
4558 /* restore 5701 hardware bug workaround write method */
4559 tp->write32 = write_op;
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.
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.
4571 * For most tg3 variants the trick below was working.
4572 * Ho hum...
4574 udelay(120);
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.
4582 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
4584 udelay(120);
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;
4591 /* Wait for link training to complete. */
4592 for (i = 0; i < 5000; i++)
4593 udelay(100);
4595 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
4596 pci_write_config_dword(tp->pdev, 0xc4,
4597 cfg_val | (1 << 15));
4599 /* Set PCIE max payload size and clear error status. */
4600 pci_write_config_dword(tp->pdev, 0xd8, 0xf5000);
4603 /* Re-enable indirect register accesses. */
4604 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
4605 tp->misc_host_ctrl);
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);
4614 pci_restore_state(tp->pdev);
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);
4621 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
4622 u32 val;
4624 /* Chip reset on 5780 will reset MSI enable bit,
4625 * so need to restore it.
4627 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
4628 u16 ctrl;
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);
4640 val = tr32(MEMARB_MODE);
4641 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
4643 } else
4644 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
4646 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
4647 tg3_stop_fw(tp);
4648 tw32(0x5000, 0x400);
4651 tw32(GRC_MODE, tp->grc_mode);
4653 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
4654 u32 val = tr32(0xc4);
4656 tw32(0xc4, val | (1 << 15));
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);
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);
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);
4673 } else
4674 tw32_f(MAC_MODE, 0);
4675 udelay(40);
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);
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;
4693 if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
4694 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
4695 u32 val = tr32(0x7c00);
4697 tw32(0x7c00, val | (1 << 25));
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;
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;
4710 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
4711 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
4715 return 0;
4718 /* tp->lock is held. */
4719 static void tg3_stop_fw(struct tg3 *tp)
4721 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
4722 u32 val;
4723 int i;
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);
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);
4739 /* tp->lock is held. */
4740 static int tg3_halt(struct tg3 *tp, int kind, int silent)
4742 int err;
4744 tg3_stop_fw(tp);
4746 tg3_write_sig_pre_reset(tp, kind);
4748 tg3_abort_hw(tp, silent);
4749 err = tg3_chip_reset(tp);
4751 tg3_write_sig_legacy(tp, kind);
4752 tg3_write_sig_post_reset(tp, kind);
4754 if (err)
4755 return err;
4757 return 0;
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
4775 static 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
4869 static 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
4877 #if 0 /* All zeros, don't eat up space with it. */
4878 u32 tg3FwData[(TG3_FW_DATA_LEN / sizeof(u32)) + 1] = {
4879 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
4880 0x00000000, 0x00000000, 0x00000000, 0x00000000
4882 #endif
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
4889 /* tp->lock is held. */
4890 static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
4892 int i;
4894 if (offset == TX_CPU_BASE &&
4895 (tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
4896 BUG();
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;
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;
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;
4926 /* Clear firmware's nvram arbitration. */
4927 if (tp->tg3_flags & TG3_FLAG_NVRAM)
4928 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
4929 return 0;
4932 struct 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;
4944 /* tp->lock is held. */
4945 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, u32 cpu_scratch_base,
4946 int cpu_scratch_size, struct fw_info *info)
4948 int err, lock_err, i;
4949 void (*write_op)(struct tg3 *, u32, u32);
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;
4959 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
4960 write_op = tg3_write_mem;
4961 else
4962 write_op = tg3_write_indirect_reg32;
4964 /* It is possible that bootcode is still loading at this point.
4965 * Get the nvram lock first before halting the cpu.
4967 lock_err = tg3_nvram_lock(tp);
4968 err = tg3_halt_cpu(tp, cpu_base);
4969 if (!lock_err)
4970 tg3_nvram_unlock(tp);
4971 if (err)
4972 goto out;
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));
4997 err = 0;
4999 out:
5000 return err;
5003 /* tp->lock is held. */
5004 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
5006 struct fw_info info;
5007 int err, i;
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;
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;
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;
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);
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);
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;
5050 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5051 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000);
5053 return 0;
5056 #if TG3_TSO_SUPPORT != 0
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
5073 static 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,
5360 static 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,
5368 static u32 tg3TsoFwData[] = {
5369 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x362e3000, 0x00000000,
5370 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
5371 0x00000000,
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
5390 static 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,
5549 static 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,
5556 static u32 tg3Tso5FwData[(TG3_TSO5_FW_DATA_LEN / 4) + 1] = {
5557 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x322e3000, 0x00000000,
5558 0x00000000, 0x00000000, 0x00000000,
5561 /* tp->lock is held. */
5562 static int tg3_load_tso_firmware(struct tg3 *tp)
5564 struct fw_info info;
5565 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
5566 int err, i;
5568 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
5569 return 0;
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;
5603 err = tg3_load_firmware_cpu(tp, cpu_base,
5604 cpu_scratch_base, cpu_scratch_size,
5605 &info);
5606 if (err)
5607 return err;
5609 /* Now startup the cpu. */
5610 tw32(cpu_base + CPU_STATE, 0xffffffff);
5611 tw32_f(cpu_base + CPU_PC, info.text_base);
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);
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;
5628 tw32(cpu_base + CPU_STATE, 0xffffffff);
5629 tw32_f(cpu_base + CPU_MODE, 0x00000000);
5630 return 0;
5633 #endif /* TG3_TSO_SUPPORT != 0 */
5635 /* tp->lock is held. */
5636 static void __tg3_set_mac_addr(struct tg3 *tp)
5638 u32 addr_high, addr_low;
5639 int i;
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);
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);
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);
5670 static int tg3_set_mac_addr(struct net_device *dev, void *p)
5672 struct tg3 *tp = netdev_priv(dev);
5673 struct sockaddr *addr = p;
5675 if (!is_valid_ether_addr(addr->sa_data))
5676 return -EINVAL;
5678 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
5680 if (!netif_running(dev))
5681 return 0;
5683 spin_lock_bh(&tp->lock);
5684 __tg3_set_mac_addr(tp);
5685 spin_unlock_bh(&tp->lock);
5687 return 0;
5690 /* tp->lock is held. */
5691 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
5692 dma_addr_t mapping, u32 maxlen_flags,
5693 u32 nic_addr)
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);
5705 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
5706 tg3_write_mem(tp,
5707 (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
5708 nic_addr);
5711 static void __tg3_set_rx_mode(struct net_device *);
5712 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
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);
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;
5727 if (!netif_carrier_ok(tp->dev))
5728 val = 0;
5730 tw32(HOSTCC_STAT_COAL_TICKS, val);
5734 /* tp->lock is held. */
5735 static int tg3_reset_hw(struct tg3 *tp)
5737 u32 val, rdmac_mode;
5738 int i, err, limit;
5740 tg3_disable_ints(tp);
5742 tg3_stop_fw(tp);
5744 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
5746 if (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) {
5747 tg3_abort_hw(tp, 1);
5750 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
5751 tg3_phy_reset(tp);
5753 err = tg3_chip_reset(tp);
5754 if (err)
5755 return err;
5757 tg3_write_sig_legacy(tp, RESET_KIND_INIT);
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.
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);
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);
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);
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.
5787 tg3_init_rings(tp);
5789 /* This value is determined during the probe time DMA
5790 * engine test, tg3_test_dma.
5792 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
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;
5804 tw32(GRC_MODE,
5805 tp->grc_mode |
5806 (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
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);
5814 /* Initialize MBUF/DESC pool. */
5815 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
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);
5826 #if TG3_TSO_SUPPORT != 0
5827 else if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
5828 int fw_len;
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);
5841 #endif
5843 if (tp->dev->mtu <= ETH_DATA_LEN) {
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);
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);
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);
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;
5875 /* Setup replenish threshold. */
5876 tw32(RCVBDI_STD_THRESH, tp->rx_pending / 8);
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)
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
5889 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
5890 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
5892 * The size of each ring is fixed in the firmware, but the location is
5893 * configurable.
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);
5902 /* Don't even try to program the JUMBO/MINI buffer descriptor
5903 * configs on 5705.
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);
5912 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
5913 BDINFO_FLAGS_DISABLED);
5915 /* Setup replenish threshold. */
5916 tw32(RCVBDI_JUMBO_THRESH, tp->rx_jumbo_pending / 8);
5918 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
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);
5934 /* There is only one send ring on 5705/5750, no need to explicitly
5935 * disable the others.
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);
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);
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);
5955 /* There is only one receive return ring on 5705/5750, no need
5956 * to explicitly disable the others.
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);
5966 tp->rx_rcb_ptr = 0;
5967 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, 0);
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),
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);
5979 tp->rx_jumbo_ptr = (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) ?
5980 tp->rx_jumbo_pending : 0;
5981 tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW,
5982 tp->rx_jumbo_ptr);
5984 /* Initialize MAC address and backoff seed. */
5985 __tg3_set_mac_addr(tp);
5987 /* MTU + ethernet header + FCS + optional VLAN tag */
5988 tw32(MAC_RX_MTU_SIZE, tp->dev->mtu + ETH_HLEN + 8);
5990 /* The slot time is changed by tg3_setup_phy if we
5991 * run at gigabit with half duplex.
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));
5998 /* Receive rules. */
5999 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
6000 tw32(RCVLPC_CONFIG, 0x0181);
6002 /* Calculate RDMAC_MODE setting early, we need it to determine
6003 * the RCVLPC_STATE_ENABLE mask.
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;
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)) {
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;
6027 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)
6028 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
6030 #if TG3_TSO_SUPPORT != 0
6031 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
6032 rdmac_mode |= (1 << 27);
6033 #endif
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);
6044 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
6045 tw32(SNDDATAI_STATSENAB, 0xffffff);
6046 tw32(SNDDATAI_STATSCTRL,
6047 (SNDDATAI_SCTRL_ENABLE |
6048 SNDDATAI_SCTRL_FASTUPD));
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);
6058 __tg3_set_coalesce(tp, &tp->coal);
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));
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.
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);
6079 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
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);
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);
6093 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
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);
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);
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.
6113 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
6114 u32 gpio_mask;
6116 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE2 |
6117 GRC_LCLCTRL_GPIO_OUTPUT0 | GRC_LCLCTRL_GPIO_OUTPUT2;
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;
6123 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
6125 /* GPIO1 must be driven high for eeprom write protect */
6126 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
6127 GRC_LCLCTRL_GPIO_OUTPUT1);
6129 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
6130 udelay(100);
6132 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0);
6133 tp->last_tag = 0;
6135 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6136 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
6137 udelay(40);
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);
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) {
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;
6161 /* Enable host coalescing bug fix */
6162 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
6163 val |= (1 << 29);
6165 tw32_f(WDMAC_MODE, val);
6166 udelay(40);
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);
6180 tw32(TG3PCI_X_CAPS, val);
6183 tw32_f(RDMAC_MODE, rdmac_mode);
6184 udelay(40);
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);
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;
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;
6213 #endif
6215 tp->tx_mode = TX_MODE_ENABLE;
6216 tw32_f(MAC_TX_MODE, tp->tx_mode);
6217 udelay(100);
6219 tp->rx_mode = RX_MODE_ENABLE;
6220 tw32_f(MAC_RX_MODE, tp->rx_mode);
6221 udelay(10);
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;
6230 tp->mi_mode = MAC_MI_MODE_BASE;
6231 tw32_f(MAC_MI_MODE, tp->mi_mode);
6232 udelay(80);
6234 tw32(MAC_LED_CTRL, tp->led_ctrl);
6236 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
6237 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
6238 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
6239 udelay(10);
6241 tw32_f(MAC_RX_MODE, tp->rx_mode);
6242 udelay(10);
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);
6254 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
6255 tw32(MAC_SERDES_CFG, 0x616000);
6258 /* Prevent chip from dropping frames when flow control
6259 * is enabled.
6261 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, 2);
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;
6269 if ((tp->tg3_flags2 & TG3_FLG2_MII_SERDES) &&
6270 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
6271 u32 tmp;
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);
6280 err = tg3_setup_phy(tp, 1);
6281 if (err)
6282 return err;
6284 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
6285 u32 tmp;
6287 /* Clear CRC stats. */
6288 if (!tg3_readphy(tp, 0x1e, &tmp)) {
6289 tg3_writephy(tp, 0x1e, tmp | 0x8000);
6290 tg3_readphy(tp, 0x14, &tmp);
6294 __tg3_set_rx_mode(tp->dev);
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);
6302 if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
6303 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
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:
6341 default:
6342 break;
6345 tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
6347 return 0;
6350 /* Called at device open time to get the chip ready for
6351 * packet processing. Invoked with tp->lock held.
6353 static int tg3_init_hw(struct tg3 *tp)
6355 int err;
6357 /* Force the chip into D0. */
6358 err = tg3_set_power_state(tp, PCI_D0);
6359 if (err)
6360 goto out;
6362 tg3_switch_clocks(tp);
6364 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
6366 err = tg3_reset_hw(tp);
6368 out:
6369 return err;
6372 #define TG3_STAT_ADD32(PSTAT, REG) \
6373 do { u32 __val = tr32(REG); \
6374 (PSTAT)->low += __val; \
6375 if ((PSTAT)->low < __val) \
6376 (PSTAT)->high += 1; \
6377 } while (0)
6379 static void tg3_periodic_fetch_stats(struct tg3 *tp)
6381 struct tg3_hw_stats *sp = tp->hw_stats;
6383 if (!netif_carrier_ok(tp->dev))
6384 return;
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);
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);
6416 static void tg3_timer(unsigned long __opaque)
6418 struct tg3 *tp = (struct tg3 *) __opaque;
6420 spin_lock(&tp->lock);
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.
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));
6435 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
6436 tp->tg3_flags2 |= TG3_FLG2_RESTART_TIMER;
6437 spin_unlock(&tp->lock);
6438 schedule_work(&tp->reset_task);
6439 return;
6443 /* This part only runs once per second. */
6444 if (!--tp->timer_counter) {
6445 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
6446 tg3_periodic_fetch_stats(tp);
6448 if (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) {
6449 u32 mac_stat;
6450 int phy_event;
6452 mac_stat = tr32(MAC_STATUS);
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;
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;
6467 if (netif_carrier_ok(tp->dev) &&
6468 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
6469 need_setup = 1;
6471 if (! netif_carrier_ok(tp->dev) &&
6472 (mac_stat & (MAC_STATUS_PCS_SYNCED |
6473 MAC_STATUS_SIGNAL_DET))) {
6474 need_setup = 1;
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);
6485 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
6486 tg3_serdes_parallel_detect(tp);
6488 tp->timer_counter = tp->timer_multiplier;
6491 /* Heartbeat is only sent once every 2 seconds. */
6492 if (!--tp->asf_counter) {
6493 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
6494 u32 val;
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);
6501 val = tr32(GRC_RX_CPU_EVENT);
6502 val |= (1 << 14);
6503 tw32(GRC_RX_CPU_EVENT, val);
6505 tp->asf_counter = tp->asf_multiplier;
6508 spin_unlock(&tp->lock);
6510 tp->timer.expires = jiffies + tp->timer_offset;
6511 add_timer(&tp->timer);
6514 static int tg3_test_interrupt(struct tg3 *tp)
6516 struct net_device *dev = tp->dev;
6517 int err, i;
6518 u32 int_mbox = 0;
6520 if (!netif_running(dev))
6521 return -ENODEV;
6523 tg3_disable_ints(tp);
6525 free_irq(tp->pdev->irq, dev);
6527 err = request_irq(tp->pdev->irq, tg3_test_isr,
6528 SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev);
6529 if (err)
6530 return err;
6532 tp->hw_status->status &= ~SD_STATUS_UPDATED;
6533 tg3_enable_ints(tp);
6535 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
6536 HOSTCC_MODE_NOW);
6538 for (i = 0; i < 5; i++) {
6539 int_mbox = tr32_mailbox(MAILBOX_INTERRUPT_0 +
6540 TG3_64BIT_REG_LOW);
6541 if (int_mbox != 0)
6542 break;
6543 msleep(10);
6546 tg3_disable_ints(tp);
6548 free_irq(tp->pdev->irq, dev);
6550 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI)
6551 err = request_irq(tp->pdev->irq, tg3_msi,
6552 SA_SAMPLE_RANDOM, dev->name, dev);
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,
6558 SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev);
6561 if (err)
6562 return err;
6564 if (int_mbox != 0)
6565 return 0;
6567 return -EIO;
6570 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
6571 * successfully restored
6573 static int tg3_test_msi(struct tg3 *tp)
6575 struct net_device *dev = tp->dev;
6576 int err;
6577 u16 pci_cmd;
6579 if (!(tp->tg3_flags2 & TG3_FLG2_USING_MSI))
6580 return 0;
6582 /* Turn off SERR reporting in case MSI terminates with Master
6583 * Abort.
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);
6589 err = tg3_test_interrupt(tp);
6591 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
6593 if (!err)
6594 return 0;
6596 /* other failures */
6597 if (err != -EIO)
6598 return err;
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);
6606 free_irq(tp->pdev->irq, dev);
6607 pci_disable_msi(tp->pdev);
6609 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
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;
6616 err = request_irq(tp->pdev->irq, fn,
6617 SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev);
6619 if (err)
6620 return err;
6622 /* Need to reset the chip because the MSI cycle may have terminated
6623 * with Master Abort.
6625 tg3_full_lock(tp, 1);
6627 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
6628 err = tg3_init_hw(tp);
6630 tg3_full_unlock(tp);
6632 if (err)
6633 free_irq(tp->pdev->irq, dev);
6635 return err;
6638 static int tg3_open(struct net_device *dev)
6640 struct tg3 *tp = netdev_priv(dev);
6641 int err;
6643 tg3_full_lock(tp, 0);
6645 err = tg3_set_power_state(tp, PCI_D0);
6646 if (err)
6647 return err;
6649 tg3_disable_ints(tp);
6650 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
6652 tg3_full_unlock(tp);
6654 /* The placement of this call is tied
6655 * to the setup and use of Host TX descriptors.
6657 err = tg3_alloc_consistent(tp);
6658 if (err)
6659 return err;
6661 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
6662 (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5750_AX) &&
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))) {
6666 /* All MSI supporting chips should support tagged
6667 * status. Assert that this is the case.
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) {
6673 u32 msi_mode;
6675 msi_mode = tr32(MSGINT_MODE);
6676 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
6677 tp->tg3_flags2 |= TG3_FLG2_USING_MSI;
6680 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI)
6681 err = request_irq(tp->pdev->irq, tg3_msi,
6682 SA_SAMPLE_RANDOM, dev->name, dev);
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;
6688 err = request_irq(tp->pdev->irq, fn,
6689 SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev);
6692 if (err) {
6693 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
6694 pci_disable_msi(tp->pdev);
6695 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
6697 tg3_free_consistent(tp);
6698 return err;
6701 tg3_full_lock(tp, 0);
6703 err = tg3_init_hw(tp);
6704 if (err) {
6705 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
6706 tg3_free_rings(tp);
6707 } else {
6708 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
6709 tp->timer_offset = HZ;
6710 else
6711 tp->timer_offset = HZ / 10;
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 =
6717 ((HZ / tp->timer_offset) * 2);
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;
6725 tg3_full_unlock(tp);
6727 if (err) {
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;
6733 tg3_free_consistent(tp);
6734 return err;
6737 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
6738 err = tg3_test_msi(tp);
6740 if (err) {
6741 tg3_full_lock(tp, 0);
6743 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
6744 pci_disable_msi(tp->pdev);
6745 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
6747 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
6748 tg3_free_rings(tp);
6749 tg3_free_consistent(tp);
6751 tg3_full_unlock(tp);
6753 return err;
6757 tg3_full_lock(tp, 0);
6759 add_timer(&tp->timer);
6760 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
6761 tg3_enable_ints(tp);
6763 tg3_full_unlock(tp);
6765 netif_start_queue(dev);
6767 return 0;
6770 #if 0
6771 /*static*/ void tg3_dump_state(struct tg3 *tp)
6773 u32 val32, val32_2, val32_3, val32_4, val32_5;
6774 u16 val16;
6775 int i;
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);
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));
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));
6798 /* Send data completion control block */
6799 printk("DEBUG: SNDDATAC_MODE[%08x]\n", tr32(SNDDATAC_MODE));
6801 /* Send BD ring selector block */
6802 printk("DEBUG: SNDBDS_MODE[%08x] SNDBDS_STATUS[%08x]\n",
6803 tr32(SNDBDS_MODE), tr32(SNDBDS_STATUS));
6805 /* Send BD initiator control block */
6806 printk("DEBUG: SNDBDI_MODE[%08x] SNDBDI_STATUS[%08x]\n",
6807 tr32(SNDBDI_MODE), tr32(SNDBDI_STATUS));
6809 /* Send BD completion control block */
6810 printk("DEBUG: SNDBDC_MODE[%08x]\n", tr32(SNDBDC_MODE));
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));
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));
6822 /* Receive data completion control block */
6823 printk("DEBUG: RCVDCC_MODE[%08x]\n",
6824 tr32(RCVDCC_MODE));
6826 /* Receive BD initiator control block */
6827 printk("DEBUG: RCVBDI_MODE[%08x] RCVBDI_STATUS[%08x]\n",
6828 tr32(RCVBDI_MODE), tr32(RCVBDI_STATUS));
6830 /* Receive BD completion control block */
6831 printk("DEBUG: RCVCC_MODE[%08x] RCVCC_STATUS[%08x]\n",
6832 tr32(RCVCC_MODE), tr32(RCVCC_STATUS));
6834 /* Receive list selector control block */
6835 printk("DEBUG: RCVLSC_MODE[%08x] RCVLSC_STATUS[%08x]\n",
6836 tr32(RCVLSC_MODE), tr32(RCVLSC_STATUS));
6838 /* Mbuf cluster free block */
6839 printk("DEBUG: MBFREE_MODE[%08x] MBFREE_STATUS[%08x]\n",
6840 tr32(MBFREE_MODE), tr32(MBFREE_STATUS));
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));
6856 /* Memory arbiter control block */
6857 printk("DEBUG: MEMARB_MODE[%08x] MEMARB_STATUS[%08x]\n",
6858 tr32(MEMARB_MODE), tr32(MEMARB_STATUS));
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));
6870 /* Read DMA control block */
6871 printk("DEBUG: RDMAC_MODE[%08x] RDMAC_STATUS[%08x]\n",
6872 tr32(RDMAC_MODE), tr32(RDMAC_STATUS));
6874 /* Write DMA control block */
6875 printk("DEBUG: WDMAC_MODE[%08x] WDMAC_STATUS[%08x]\n",
6876 tr32(WDMAC_MODE), tr32(WDMAC_STATUS));
6878 /* DMA completion block */
6879 printk("DEBUG: DMAC_MODE[%08x]\n",
6880 tr32(DMAC_MODE));
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));
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));
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);
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);
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);
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);
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]);
6944 /* Mailboxes */
6945 printk("DEBUG: SNDHOST_PROD[%08x%08x] SNDNIC_PROD[%08x%08x]\n",
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));
6951 /* NIC side send descriptors. */
6952 for (i = 0; i < 6; i++) {
6953 unsigned long txd;
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",
6959 readl(txd + 0x0), readl(txd + 0x4),
6960 readl(txd + 0x8), readl(txd + 0xc));
6963 /* NIC side RX descriptors. */
6964 for (i = 0; i < 6; i++) {
6965 unsigned long rxd;
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",
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",
6976 readl(rxd + 0x0), readl(rxd + 0x4),
6977 readl(rxd + 0x8), readl(rxd + 0xc));
6980 for (i = 0; i < 6; i++) {
6981 unsigned long rxd;
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",
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",
6992 readl(rxd + 0x0), readl(rxd + 0x4),
6993 readl(rxd + 0x8), readl(rxd + 0xc));
6996 #endif
6998 static struct net_device_stats *tg3_get_stats(struct net_device *);
6999 static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *);
7001 static int tg3_close(struct net_device *dev)
7003 struct tg3 *tp = netdev_priv(dev);
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.
7009 while (tp->tg3_flags & TG3_FLAG_IN_RESET_TASK)
7010 msleep(1);
7012 netif_stop_queue(dev);
7014 del_timer_sync(&tp->timer);
7016 tg3_full_lock(tp, 1);
7017 #if 0
7018 tg3_dump_state(tp);
7019 #endif
7021 tg3_disable_ints(tp);
7023 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7024 tg3_free_rings(tp);
7025 tp->tg3_flags &=
7026 ~(TG3_FLAG_INIT_COMPLETE |
7027 TG3_FLAG_GOT_SERDES_FLOWCTL);
7029 tg3_full_unlock(tp);
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;
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));
7042 tg3_free_consistent(tp);
7044 tg3_set_power_state(tp, PCI_D3hot);
7046 netif_carrier_off(tp->dev);
7048 return 0;
7051 static inline unsigned long get_stat64(tg3_stat64_t *val)
7053 unsigned long ret;
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;
7063 static unsigned long calc_crc_errors(struct tg3 *tp)
7065 struct tg3_hw_stats *hw_stats = tp->hw_stats;
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)) {
7070 u32 val;
7072 spin_lock_bh(&tp->lock);
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;
7078 spin_unlock_bh(&tp->lock);
7080 tp->phy_crc_errors += val;
7082 return tp->phy_crc_errors;
7085 return get_stat64(&hw_stats->rx_fcs_errors);
7088 #define ESTAT_ADD(member) \
7089 estats->member = old_estats->member + \
7090 get_stat64(&hw_stats->member)
7092 static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp)
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;
7098 if (!hw_stats)
7099 return old_estats;
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);
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);
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);
7167 ESTAT_ADD(dma_readq_full);
7168 ESTAT_ADD(dma_read_prioq_full);
7169 ESTAT_ADD(tx_comp_queue_full);
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);
7177 return estats;
7180 static struct net_device_stats *tg3_get_stats(struct net_device *dev)
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;
7187 if (!hw_stats)
7188 return old_stats;
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);
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);
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);
7205 stats->rx_errors = old_stats->rx_errors +
7206 get_stat64(&hw_stats->rx_errors);
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);
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);
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);
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);
7231 stats->rx_crc_errors = old_stats->rx_crc_errors +
7232 calc_crc_errors(tp);
7234 stats->rx_missed_errors = old_stats->rx_missed_errors +
7235 get_stat64(&hw_stats->rx_discards);
7237 return stats;
7240 static inline u32 calc_crc(unsigned char *buf, int len)
7242 u32 reg;
7243 u32 tmp;
7244 int j, k;
7246 reg = 0xffffffff;
7248 for (j = 0; j < len; j++) {
7249 reg ^= buf[j];
7251 for (k = 0; k < 8; k++) {
7252 tmp = reg & 0x01;
7254 reg >>= 1;
7256 if (tmp) {
7257 reg ^= 0xedb88320;
7262 return ~reg;
7265 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
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);
7274 static void __tg3_set_rx_mode(struct net_device *dev)
7276 struct tg3 *tp = netdev_priv(dev);
7277 u32 rx_mode;
7279 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
7280 RX_MODE_KEEP_VLAN_TAG);
7282 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
7283 * flag clear.
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.
7293 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
7294 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
7295 #endif
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;
7315 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
7316 i++, mclist = mclist->next) {
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);
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]);
7331 if (rx_mode != tp->rx_mode) {
7332 tp->rx_mode = rx_mode;
7333 tw32_f(MAC_RX_MODE, rx_mode);
7334 udelay(10);
7338 static void tg3_set_rx_mode(struct net_device *dev)
7340 struct tg3 *tp = netdev_priv(dev);
7342 if (!netif_running(dev))
7343 return;
7345 tg3_full_lock(tp, 0);
7346 __tg3_set_rx_mode(dev);
7347 tg3_full_unlock(tp);
7350 #define TG3_REGDUMP_LEN (32 * 1024)
7352 static int tg3_get_regs_len(struct net_device *dev)
7354 return TG3_REGDUMP_LEN;
7357 static void tg3_get_regs(struct net_device *dev,
7358 struct ethtool_regs *regs, void *_p)
7360 u32 *p = _p;
7361 struct tg3 *tp = netdev_priv(dev);
7362 u8 *orig_p = _p;
7363 int i;
7365 regs->version = 0;
7367 memset(p, 0, TG3_REGDUMP_LEN);
7369 if (tp->link_config.phy_is_low_power)
7370 return;
7372 tg3_full_lock(tp, 0);
7374 #define __GET_REG32(reg) (*(p)++ = tr32(reg))
7375 #define GET_REG32_LOOP(base,len) \
7376 do { 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) \
7381 do { p = (u32 *)(orig_p + (reg)); \
7382 __GET_REG32((reg)); \
7383 } while (0)
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);
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);
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);
7423 #undef __GET_REG32
7424 #undef GET_REG32_LOOP
7425 #undef GET_REG32_1
7427 tg3_full_unlock(tp);
7430 static int tg3_get_eeprom_len(struct net_device *dev)
7432 struct tg3 *tp = netdev_priv(dev);
7434 return tp->nvram_size;
7437 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val);
7439 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
7441 struct tg3 *tp = netdev_priv(dev);
7442 int ret;
7443 u8 *pd;
7444 u32 i, offset, len, val, b_offset, b_count;
7446 if (tp->link_config.phy_is_low_power)
7447 return -EAGAIN;
7449 offset = eeprom->offset;
7450 len = eeprom->len;
7451 eeprom->len = 0;
7453 eeprom->magic = TG3_EEPROM_MAGIC;
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;
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;
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;
7481 val = cpu_to_le32(val);
7482 memcpy(pd + i, &val, 4);
7484 eeprom->len += i;
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;
7498 return 0;
7501 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf);
7503 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
7505 struct tg3 *tp = netdev_priv(dev);
7506 int ret;
7507 u32 offset, len, b_offset, odd_len, start, end;
7508 u8 *buf;
7510 if (tp->link_config.phy_is_low_power)
7511 return -EAGAIN;
7513 if (eeprom->magic != TG3_EEPROM_MAGIC)
7514 return -EINVAL;
7516 offset = eeprom->offset;
7517 len = eeprom->len;
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;
7527 if (len < 4)
7528 len = 4;
7531 odd_len = 0;
7532 if (len & 3) {
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);
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);
7554 ret = tg3_nvram_write_block(tp, offset, len, buf);
7556 if (buf != data)
7557 kfree(buf);
7559 return ret;
7562 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7564 struct tg3 *tp = netdev_priv(dev);
7566 cmd->supported = (SUPPORTED_Autoneg);
7568 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
7569 cmd->supported |= (SUPPORTED_1000baseT_Half |
7570 SUPPORTED_1000baseT_Full);
7572 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES))
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;
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;
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;
7595 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7597 struct tg3 *tp = netdev_priv(dev);
7599 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) {
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;
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;
7619 tg3_full_lock(tp, 0);
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;
7632 if (netif_running(dev))
7633 tg3_setup_phy(tp, 1);
7635 tg3_full_unlock(tp);
7637 return 0;
7640 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
7642 struct tg3 *tp = netdev_priv(dev);
7644 strcpy(info->driver, DRV_MODULE_NAME);
7645 strcpy(info->version, DRV_MODULE_VERSION);
7646 strcpy(info->bus_info, pci_name(tp->pdev));
7649 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7651 struct tg3 *tp = netdev_priv(dev);
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));
7660 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7662 struct tg3 *tp = netdev_priv(dev);
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;
7671 spin_lock_bh(&tp->lock);
7672 if (wol->wolopts & WAKE_MAGIC)
7673 tp->tg3_flags |= TG3_FLAG_WOL_ENABLE;
7674 else
7675 tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE;
7676 spin_unlock_bh(&tp->lock);
7678 return 0;
7681 static u32 tg3_get_msglevel(struct net_device *dev)
7683 struct tg3 *tp = netdev_priv(dev);
7684 return tp->msg_enable;
7687 static void tg3_set_msglevel(struct net_device *dev, u32 value)
7689 struct tg3 *tp = netdev_priv(dev);
7690 tp->msg_enable = value;
7693 #if TG3_TSO_SUPPORT != 0
7694 static int tg3_set_tso(struct net_device *dev, u32 value)
7696 struct tg3 *tp = netdev_priv(dev);
7698 if (!(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) {
7699 if (value)
7700 return -EINVAL;
7701 return 0;
7703 return ethtool_op_set_tso(dev, value);
7705 #endif
7707 static int tg3_nway_reset(struct net_device *dev)
7709 struct tg3 *tp = netdev_priv(dev);
7710 u32 bmcr;
7711 int r;
7713 if (!netif_running(dev))
7714 return -EAGAIN;
7716 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
7717 return -EINVAL;
7719 spin_lock_bh(&tp->lock);
7720 r = -EINVAL;
7721 tg3_readphy(tp, MII_BMCR, &bmcr);
7722 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
7723 ((bmcr & BMCR_ANENABLE) ||
7724 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT))) {
7725 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
7726 BMCR_ANENABLE);
7727 r = 0;
7729 spin_unlock_bh(&tp->lock);
7731 return r;
7734 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
7736 struct tg3 *tp = netdev_priv(dev);
7738 ering->rx_max_pending = TG3_RX_RING_SIZE - 1;
7739 ering->rx_mini_max_pending = 0;
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;
7745 ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
7747 ering->rx_pending = tp->rx_pending;
7748 ering->rx_mini_pending = 0;
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;
7754 ering->tx_pending = tp->tx_pending;
7757 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
7759 struct tg3 *tp = netdev_priv(dev);
7760 int irq_sync = 0;
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;
7767 if (netif_running(dev)) {
7768 tg3_netif_stop(tp);
7769 irq_sync = 1;
7772 tg3_full_lock(tp, irq_sync);
7774 tp->rx_pending = ering->rx_pending;
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;
7782 if (netif_running(dev)) {
7783 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7784 tg3_init_hw(tp);
7785 tg3_netif_start(tp);
7788 tg3_full_unlock(tp);
7790 return 0;
7793 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
7795 struct tg3 *tp = netdev_priv(dev);
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;
7802 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
7804 struct tg3 *tp = netdev_priv(dev);
7805 int irq_sync = 0;
7807 if (netif_running(dev)) {
7808 tg3_netif_stop(tp);
7809 irq_sync = 1;
7812 tg3_full_lock(tp, irq_sync);
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;
7827 if (netif_running(dev)) {
7828 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7829 tg3_init_hw(tp);
7830 tg3_netif_start(tp);
7833 tg3_full_unlock(tp);
7835 return 0;
7838 static u32 tg3_get_rx_csum(struct net_device *dev)
7840 struct tg3 *tp = netdev_priv(dev);
7841 return (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0;
7844 static int tg3_set_rx_csum(struct net_device *dev, u32 data)
7846 struct tg3 *tp = netdev_priv(dev);
7848 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
7849 if (data != 0)
7850 return -EINVAL;
7851 return 0;
7854 spin_lock_bh(&tp->lock);
7855 if (data)
7856 tp->tg3_flags |= TG3_FLAG_RX_CHECKSUMS;
7857 else
7858 tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
7859 spin_unlock_bh(&tp->lock);
7861 return 0;
7864 static int tg3_set_tx_csum(struct net_device *dev, u32 data)
7866 struct tg3 *tp = netdev_priv(dev);
7868 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
7869 if (data != 0)
7870 return -EINVAL;
7871 return 0;
7874 if (data)
7875 dev->features |= NETIF_F_IP_CSUM;
7876 else
7877 dev->features &= ~NETIF_F_IP_CSUM;
7879 return 0;
7882 static int tg3_get_stats_count (struct net_device *dev)
7884 return TG3_NUM_STATS;
7887 static int tg3_get_test_count (struct net_device *dev)
7889 return TG3_NUM_TEST;
7892 static void tg3_get_strings (struct net_device *dev, u32 stringset, u8 *buf)
7894 switch (stringset) {
7895 case ETH_SS_STATS:
7896 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
7897 break;
7898 case ETH_SS_TEST:
7899 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
7900 break;
7901 default:
7902 WARN_ON(1); /* we need a WARN() */
7903 break;
7907 static int tg3_phys_id(struct net_device *dev, u32 data)
7909 struct tg3 *tp = netdev_priv(dev);
7910 int i;
7912 if (!netif_running(tp->dev))
7913 return -EAGAIN;
7915 if (data == 0)
7916 data = 2;
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);
7928 else
7929 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
7930 LED_CTRL_TRAFFIC_OVERRIDE);
7932 if (msleep_interruptible(500))
7933 break;
7935 tw32(MAC_LED_CTRL, tp->led_ctrl);
7936 return 0;
7939 static void tg3_get_ethtool_stats (struct net_device *dev,
7940 struct ethtool_stats *estats, u64 *tmp_stats)
7942 struct tg3 *tp = netdev_priv(dev);
7943 memcpy(tmp_stats, tg3_get_estats(tp), sizeof(tp->estats));
7946 #define NVRAM_TEST_SIZE 0x100
7947 #define NVRAM_SELFBOOT_FORMAT1_SIZE 0x14
7949 static int tg3_test_nvram(struct tg3 *tp)
7951 u32 *buf, csum, magic;
7952 int i, j, err = 0, size;
7954 if (tg3_nvram_read(tp, 0, &magic) != 0)
7955 return -EIO;
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;
7968 buf = kmalloc(size, GFP_KERNEL);
7969 if (buf == NULL)
7970 return -ENOMEM;
7972 err = -EIO;
7973 for (i = 0, j = 0; i < size; i += 4, j++) {
7974 u32 val;
7976 if ((err = tg3_nvram_read(tp, i, &val)) != 0)
7977 break;
7978 buf[j] = cpu_to_le32(val);
7980 if (i < size)
7981 goto out;
7983 /* Selfboot format */
7984 if (cpu_to_be32(buf[0]) != TG3_EEPROM_MAGIC) {
7985 u8 *buf8 = (u8 *) buf, csum8 = 0;
7987 for (i = 0; i < size; i++)
7988 csum8 += buf8[i];
7990 if (csum8 == 0)
7991 return 0;
7992 return -EIO;
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;
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;
8005 err = 0;
8007 out:
8008 kfree(buf);
8009 return err;
8012 #define TG3_SERDES_TIMEOUT_SEC 2
8013 #define TG3_COPPER_TIMEOUT_SEC 6
8015 static int tg3_test_link(struct tg3 *tp)
8017 int i, max;
8019 if (!netif_running(tp->dev))
8020 return -ENODEV;
8022 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
8023 max = TG3_SERDES_TIMEOUT_SEC;
8024 else
8025 max = TG3_COPPER_TIMEOUT_SEC;
8027 for (i = 0; i < max; i++) {
8028 if (netif_carrier_ok(tp->dev))
8029 return 0;
8031 if (msleep_interruptible(1000))
8032 break;
8035 return -EIO;
8038 /* Only test the commonly used registers */
8039 static const int tg3_test_registers(struct tg3 *tp)
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 },
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 },
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 },
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 },
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 },
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 },
8184 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
8187 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
8188 is_5705 = 1;
8189 else
8190 is_5705 = 0;
8192 for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
8193 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
8194 continue;
8196 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
8197 continue;
8199 if ((tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
8200 (reg_tbl[i].flags & TG3_FL_NOT_5788))
8201 continue;
8203 offset = (u32) reg_tbl[i].offset;
8204 read_mask = reg_tbl[i].read_mask;
8205 write_mask = reg_tbl[i].write_mask;
8207 /* Save the original register content */
8208 save_val = tr32(offset);
8210 /* Determine the read-only value. */
8211 read_val = save_val & read_mask;
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.
8216 tw32(offset, 0);
8218 val = tr32(offset);
8220 /* Test the read-only and read/write bits. */
8221 if (((val & read_mask) != read_val) || (val & write_mask))
8222 goto out;
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.
8228 tw32(offset, read_mask | write_mask);
8230 val = tr32(offset);
8232 /* Test the read-only bits. */
8233 if ((val & read_mask) != read_val)
8234 goto out;
8236 /* Test the read/write bits. */
8237 if ((val & write_mask) != write_mask)
8238 goto out;
8240 tw32(offset, save_val);
8243 return 0;
8245 out:
8246 printk(KERN_ERR PFX "Register test failed at offset %x\n", offset);
8247 tw32(offset, save_val);
8248 return -EIO;
8251 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
8253 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
8254 int i;
8255 u32 j;
8257 for (i = 0; i < sizeof(test_pattern)/sizeof(u32); i++) {
8258 for (j = 0; j < len; j += 4) {
8259 u32 val;
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;
8267 return 0;
8270 static int tg3_test_memory(struct tg3 *tp)
8272 static struct mem_entry {
8273 u32 offset;
8274 u32 len;
8275 } mem_tbl_570x[] = {
8276 { 0x00000000, 0x00b50},
8277 { 0x00002000, 0x1c000},
8278 { 0xffffffff, 0x00000}
8279 }, mem_tbl_5705[] = {
8280 { 0x00000100, 0x0000c},
8281 { 0x00000200, 0x00008},
8282 { 0x00004000, 0x00800},
8283 { 0x00006000, 0x01000},
8284 { 0x00008000, 0x02000},
8285 { 0x00010000, 0x0e000},
8286 { 0xffffffff, 0x00000}
8288 struct mem_entry *mem_tbl;
8289 int err = 0;
8290 int i;
8292 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
8293 mem_tbl = mem_tbl_5705;
8294 else
8295 mem_tbl = mem_tbl_570x;
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;
8303 return err;
8306 #define TG3_MAC_LOOPBACK 0
8307 #define TG3_PHY_LOOPBACK 1
8309 static int tg3_run_loopback(struct tg3 *tp, int loopback_mode)
8311 u32 mac_mode, rx_start_idx, rx_idx, tx_idx, opaque_key;
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;
8319 if (loopback_mode == TG3_MAC_LOOPBACK) {
8320 /* HW errata - mac loopback fails in some cases on 5780.
8321 * Normal traffic and PHY loopback are not affected by
8322 * errata.
8324 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780)
8325 return 0;
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) {
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);
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);
8347 else
8348 return -EINVAL;
8350 err = -EIO;
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);
8358 tw32(MAC_RX_MTU_SIZE, tx_len + 4);
8360 for (i = 14; i < tx_len; i++)
8361 tx_data[i] = (u8) (i & 0xff);
8363 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
8365 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
8366 HOSTCC_MODE_NOW);
8368 udelay(10);
8370 rx_start_idx = tp->hw_status->idx[0].rx_producer;
8372 num_pkts = 0;
8374 tg3_set_txd(tp, tp->tx_prod, map, tx_len, 0, 1);
8376 tp->tx_prod++;
8377 num_pkts++;
8379 tw32_tx_mbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW,
8380 tp->tx_prod);
8381 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW);
8383 udelay(10);
8385 for (i = 0; i < 10; i++) {
8386 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
8387 HOSTCC_MODE_NOW);
8389 udelay(10);
8391 tx_idx = tp->hw_status->idx[0].tx_consumer;
8392 rx_idx = tp->hw_status->idx[0].rx_producer;
8393 if ((tx_idx == tp->tx_prod) &&
8394 (rx_idx == (rx_start_idx + num_pkts)))
8395 break;
8398 pci_unmap_single(tp->pdev, map, tx_len, PCI_DMA_TODEVICE);
8399 dev_kfree_skb(skb);
8401 if (tx_idx != tp->tx_prod)
8402 goto out;
8404 if (rx_idx != rx_start_idx + num_pkts)
8405 goto out;
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;
8413 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
8414 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
8415 goto out;
8417 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4;
8418 if (rx_len != tx_len)
8419 goto out;
8421 rx_skb = tp->rx_std_buffers[desc_idx].skb;
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);
8426 for (i = 14; i < tx_len; i++) {
8427 if (*(rx_skb->data + i) != (u8) (i & 0xff))
8428 goto out;
8430 err = 0;
8432 /* tg3_free_rings will unmap and free the rx_skb */
8433 out:
8434 return err;
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)
8442 static int tg3_test_loopback(struct tg3 *tp)
8444 int err = 0;
8446 if (!netif_running(tp->dev))
8447 return TG3_LOOPBACK_FAILED;
8449 tg3_reset_hw(tp);
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;
8458 return err;
8461 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
8462 u64 *data)
8464 struct tg3 *tp = netdev_priv(dev);
8466 if (tp->link_config.phy_is_low_power)
8467 tg3_set_power_state(tp, PCI_D0);
8469 memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
8471 if (tg3_test_nvram(tp) != 0) {
8472 etest->flags |= ETH_TEST_FL_FAILED;
8473 data[0] = 1;
8475 if (tg3_test_link(tp) != 0) {
8476 etest->flags |= ETH_TEST_FL_FAILED;
8477 data[1] = 1;
8479 if (etest->flags & ETH_TEST_FL_OFFLINE) {
8480 int err, irq_sync = 0;
8482 if (netif_running(dev)) {
8483 tg3_netif_stop(tp);
8484 irq_sync = 1;
8487 tg3_full_lock(tp, irq_sync);
8489 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
8490 err = tg3_nvram_lock(tp);
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);
8494 if (!err)
8495 tg3_nvram_unlock(tp);
8497 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
8498 tg3_phy_reset(tp);
8500 if (tg3_test_registers(tp) != 0) {
8501 etest->flags |= ETH_TEST_FL_FAILED;
8502 data[2] = 1;
8504 if (tg3_test_memory(tp) != 0) {
8505 etest->flags |= ETH_TEST_FL_FAILED;
8506 data[3] = 1;
8508 if ((data[4] = tg3_test_loopback(tp)) != 0)
8509 etest->flags |= ETH_TEST_FL_FAILED;
8511 tg3_full_unlock(tp);
8513 if (tg3_test_interrupt(tp) != 0) {
8514 etest->flags |= ETH_TEST_FL_FAILED;
8515 data[5] = 1;
8518 tg3_full_lock(tp, 0);
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);
8527 tg3_full_unlock(tp);
8529 if (tp->link_config.phy_is_low_power)
8530 tg3_set_power_state(tp, PCI_D3hot);
8534 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
8536 struct mii_ioctl_data *data = if_mii(ifr);
8537 struct tg3 *tp = netdev_priv(dev);
8538 int err;
8540 switch(cmd) {
8541 case SIOCGMIIPHY:
8542 data->phy_id = PHY_ADDR;
8544 /* fallthru */
8545 case SIOCGMIIREG: {
8546 u32 mii_regval;
8548 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
8549 break; /* We have no PHY */
8551 if (tp->link_config.phy_is_low_power)
8552 return -EAGAIN;
8554 spin_lock_bh(&tp->lock);
8555 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
8556 spin_unlock_bh(&tp->lock);
8558 data->val_out = mii_regval;
8560 return err;
8563 case SIOCSMIIREG:
8564 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
8565 break; /* We have no PHY */
8567 if (!capable(CAP_NET_ADMIN))
8568 return -EPERM;
8570 if (tp->link_config.phy_is_low_power)
8571 return -EAGAIN;
8573 spin_lock_bh(&tp->lock);
8574 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
8575 spin_unlock_bh(&tp->lock);
8577 return err;
8579 default:
8580 /* do nothing */
8581 break;
8583 return -EOPNOTSUPP;
8586 #if TG3_VLAN_TAG_USED
8587 static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
8589 struct tg3 *tp = netdev_priv(dev);
8591 tg3_full_lock(tp, 0);
8593 tp->vlgrp = grp;
8595 /* Update RX_MODE_KEEP_VLAN_TAG bit in RX_MODE register. */
8596 __tg3_set_rx_mode(dev);
8598 tg3_full_unlock(tp);
8601 static void tg3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
8603 struct tg3 *tp = netdev_priv(dev);
8605 tg3_full_lock(tp, 0);
8606 if (tp->vlgrp)
8607 tp->vlgrp->vlan_devices[vid] = NULL;
8608 tg3_full_unlock(tp);
8610 #endif
8612 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
8614 struct tg3 *tp = netdev_priv(dev);
8616 memcpy(ec, &tp->coal, sizeof(*ec));
8617 return 0;
8620 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
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;
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;
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;
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;
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;
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;
8666 if (netif_running(dev)) {
8667 tg3_full_lock(tp, 0);
8668 __tg3_set_coalesce(tp, &tp->coal);
8669 tg3_full_unlock(tp);
8671 return 0;
8674 static 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
8703 .self_test_count = tg3_get_test_count,
8704 .self_test = tg3_self_test,
8705 .get_strings = tg3_get_strings,
8706 .phys_id = tg3_phys_id,
8707 .get_stats_count = tg3_get_stats_count,
8708 .get_ethtool_stats = tg3_get_ethtool_stats,
8709 .get_coalesce = tg3_get_coalesce,
8710 .set_coalesce = tg3_set_coalesce,
8711 .get_perm_addr = ethtool_op_get_perm_addr,
8714 static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
8716 u32 cursize, val, magic;
8718 tp->nvram_size = EEPROM_CHIP_SIZE;
8720 if (tg3_nvram_read(tp, 0, &val) != 0)
8721 return;
8723 magic = swab32(val);
8724 if ((magic != TG3_EEPROM_MAGIC) && ((magic & 0xff000000) != 0xa5000000))
8725 return;
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.
8732 cursize = 0x10;
8734 while (cursize < tp->nvram_size) {
8735 if (tg3_nvram_read(tp, cursize, &val) != 0)
8736 return;
8738 if (swab32(val) == magic)
8739 break;
8741 cursize <<= 1;
8744 tp->nvram_size = cursize;
8747 static void __devinit tg3_get_nvram_size(struct tg3 *tp)
8749 u32 val;
8751 if (tg3_nvram_read(tp, 0, &val) != 0)
8752 return;
8754 /* Selfboot format */
8755 if (swab32(val) != TG3_EEPROM_MAGIC) {
8756 tg3_get_eeprom_size(tp);
8757 return;
8760 if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
8761 if (val != 0) {
8762 tp->nvram_size = (val >> 16) * 1024;
8763 return;
8766 tp->nvram_size = 0x20000;
8769 static void __devinit tg3_get_nvram_info(struct tg3 *tp)
8771 u32 nvcfg1;
8773 nvcfg1 = tr32(NVRAM_CFG1);
8774 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
8775 tp->tg3_flags2 |= TG3_FLG2_FLASH;
8777 else {
8778 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
8779 tw32(NVRAM_CFG1, nvcfg1);
8782 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) ||
8783 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
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;
8815 else {
8816 tp->nvram_jedecnum = JEDEC_ATMEL;
8817 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
8818 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
8822 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
8824 u32 nvcfg1;
8826 nvcfg1 = tr32(NVRAM_CFG1);
8828 /* NVRAM protection for TPM */
8829 if (nvcfg1 & (1 << 27))
8830 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
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;
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;
8874 else {
8875 /* For eeprom, set pagesize to maximum eeprom size */
8876 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
8878 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
8879 tw32(NVRAM_CFG1, nvcfg1);
8883 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
8885 u32 nvcfg1;
8887 nvcfg1 = tr32(NVRAM_CFG1);
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;
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;
8921 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
8922 static void __devinit tg3_nvram_init(struct tg3 *tp)
8924 int j;
8926 if (tp->tg3_flags2 & TG3_FLG2_SUN_570X)
8927 return;
8929 tw32_f(GRC_EEPROM_ADDR,
8930 (EEPROM_ADDR_FSM_RESET |
8931 (EEPROM_DEFAULT_CLOCK_PERIOD <<
8932 EEPROM_ADDR_CLKPERD_SHIFT)));
8934 /* XXX schedule_timeout() ... */
8935 for (j = 0; j < 100; j++)
8936 udelay(10);
8938 /* Enable seeprom accesses. */
8939 tw32_f(GRC_LOCAL_CTRL,
8940 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
8941 udelay(100);
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;
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;
8952 tg3_enable_nvram_access(tp);
8954 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
8955 tg3_get_5752_nvram_info(tp);
8956 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8957 tg3_get_5787_nvram_info(tp);
8958 else
8959 tg3_get_nvram_info(tp);
8961 tg3_get_nvram_size(tp);
8963 tg3_disable_nvram_access(tp);
8964 tg3_nvram_unlock(tp);
8966 } else {
8967 tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED);
8969 tg3_get_eeprom_size(tp);
8973 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
8974 u32 offset, u32 *val)
8976 u32 tmp;
8977 int i;
8979 if (offset > EEPROM_ADDR_ADDR_MASK ||
8980 (offset % 4) != 0)
8981 return -EINVAL;
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);
8993 for (i = 0; i < 10000; i++) {
8994 tmp = tr32(GRC_EEPROM_ADDR);
8996 if (tmp & EEPROM_ADDR_COMPLETE)
8997 break;
8998 udelay(100);
9000 if (!(tmp & EEPROM_ADDR_COMPLETE))
9001 return -EBUSY;
9003 *val = tr32(GRC_EEPROM_DATA);
9004 return 0;
9007 #define NVRAM_CMD_TIMEOUT 10000
9009 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
9011 int i;
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;
9021 if (i == NVRAM_CMD_TIMEOUT) {
9022 return -EBUSY;
9024 return 0;
9027 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
9029 int ret;
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;
9036 if (!(tp->tg3_flags & TG3_FLAG_NVRAM))
9037 return tg3_nvram_read_using_eeprom(tp, offset, val);
9039 if ((tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) &&
9040 (tp->tg3_flags2 & TG3_FLG2_FLASH) &&
9041 (tp->nvram_jedecnum == JEDEC_ATMEL)) {
9043 offset = ((offset / tp->nvram_pagesize) <<
9044 ATMEL_AT45DB0X1B_PAGE_POS) +
9045 (offset % tp->nvram_pagesize);
9048 if (offset > NVRAM_ADDR_MSK)
9049 return -EINVAL;
9051 ret = tg3_nvram_lock(tp);
9052 if (ret)
9053 return ret;
9055 tg3_enable_nvram_access(tp);
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);
9061 if (ret == 0)
9062 *val = swab32(tr32(NVRAM_RDDATA));
9064 tg3_disable_nvram_access(tp);
9066 tg3_nvram_unlock(tp);
9068 return ret;
9071 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
9072 u32 offset, u32 len, u8 *buf)
9074 int i, j, rc = 0;
9075 u32 val;
9077 for (i = 0; i < len; i += 4) {
9078 u32 addr, data;
9080 addr = offset + i;
9082 memcpy(&data, buf + i, 4);
9084 tw32(GRC_EEPROM_DATA, cpu_to_le32(data));
9086 val = tr32(GRC_EEPROM_ADDR);
9087 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
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);
9097 for (j = 0; j < 10000; j++) {
9098 val = tr32(GRC_EEPROM_ADDR);
9100 if (val & EEPROM_ADDR_COMPLETE)
9101 break;
9102 udelay(100);
9104 if (!(val & EEPROM_ADDR_COMPLETE)) {
9105 rc = -EBUSY;
9106 break;
9110 return rc;
9113 /* offset and length are dword aligned */
9114 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
9115 u8 *buf)
9117 int ret = 0;
9118 u32 pagesize = tp->nvram_pagesize;
9119 u32 pagemask = pagesize - 1;
9120 u32 nvram_cmd;
9121 u8 *tmp;
9123 tmp = kmalloc(pagesize, GFP_KERNEL);
9124 if (tmp == NULL)
9125 return -ENOMEM;
9127 while (len) {
9128 int j;
9129 u32 phy_addr, page_off, size;
9131 phy_addr = offset & ~pagemask;
9133 for (j = 0; j < pagesize; j += 4) {
9134 if ((ret = tg3_nvram_read(tp, phy_addr + j,
9135 (u32 *) (tmp + j))))
9136 break;
9138 if (ret)
9139 break;
9141 page_off = offset & pagemask;
9142 size = pagesize;
9143 if (len < size)
9144 size = len;
9146 len -= size;
9148 memcpy(tmp + page_off, buf, size);
9150 offset = offset + (pagesize - page_off);
9152 tg3_enable_nvram_access(tp);
9155 * Before we can erase the flash page, we need
9156 * to issue a special "write enable" command.
9158 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
9160 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
9161 break;
9163 /* Erase the target page */
9164 tw32(NVRAM_ADDR, phy_addr);
9166 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
9167 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
9169 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
9170 break;
9172 /* Issue another write enable to start the write. */
9173 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
9175 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
9176 break;
9178 for (j = 0; j < pagesize; j += 4) {
9179 u32 data;
9181 data = *((u32 *) (tmp + j));
9182 tw32(NVRAM_WRDATA, cpu_to_be32(data));
9184 tw32(NVRAM_ADDR, phy_addr + j);
9186 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
9187 NVRAM_CMD_WR;
9189 if (j == 0)
9190 nvram_cmd |= NVRAM_CMD_FIRST;
9191 else if (j == (pagesize - 4))
9192 nvram_cmd |= NVRAM_CMD_LAST;
9194 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
9195 break;
9197 if (ret)
9198 break;
9201 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
9202 tg3_nvram_exec_cmd(tp, nvram_cmd);
9204 kfree(tmp);
9206 return ret;
9209 /* offset and length are dword aligned */
9210 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
9211 u8 *buf)
9213 int i, ret = 0;
9215 for (i = 0; i < len; i += 4, offset += 4) {
9216 u32 data, page_off, phy_addr, nvram_cmd;
9218 memcpy(&data, buf + i, 4);
9219 tw32(NVRAM_WRDATA, cpu_to_be32(data));
9221 page_off = offset % tp->nvram_pagesize;
9223 if ((tp->tg3_flags2 & TG3_FLG2_FLASH) &&
9224 (tp->nvram_jedecnum == JEDEC_ATMEL)) {
9226 phy_addr = ((offset / tp->nvram_pagesize) <<
9227 ATMEL_AT45DB0X1B_PAGE_POS) + page_off;
9229 else {
9230 phy_addr = offset;
9233 tw32(NVRAM_ADDR, phy_addr);
9235 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
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;
9242 if (i == (len - 4))
9243 nvram_cmd |= NVRAM_CMD_LAST;
9245 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752) &&
9246 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787) &&
9247 (tp->nvram_jedecnum == JEDEC_ST) &&
9248 (nvram_cmd & NVRAM_CMD_FIRST)) {
9250 if ((ret = tg3_nvram_exec_cmd(tp,
9251 NVRAM_CMD_WREN | NVRAM_CMD_GO |
9252 NVRAM_CMD_DONE)))
9254 break;
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);
9261 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
9262 break;
9264 return ret;
9267 /* offset and length are dword aligned */
9268 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
9270 int ret;
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;
9277 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
9278 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
9279 ~GRC_LCLCTRL_GPIO_OUTPUT1);
9280 udelay(40);
9283 if (!(tp->tg3_flags & TG3_FLAG_NVRAM)) {
9284 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
9286 else {
9287 u32 grc_mode;
9289 ret = tg3_nvram_lock(tp);
9290 if (ret)
9291 return ret;
9293 tg3_enable_nvram_access(tp);
9294 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
9295 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM))
9296 tw32(NVRAM_WRITE1, 0x406);
9298 grc_mode = tr32(GRC_MODE);
9299 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
9301 if ((tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) ||
9302 !(tp->tg3_flags2 & TG3_FLG2_FLASH)) {
9304 ret = tg3_nvram_write_block_buffered(tp, offset, len,
9305 buf);
9307 else {
9308 ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
9309 buf);
9312 grc_mode = tr32(GRC_MODE);
9313 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
9315 tg3_disable_nvram_access(tp);
9316 tg3_nvram_unlock(tp);
9319 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
9320 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9321 udelay(40);
9324 return ret;
9327 struct subsys_tbl_ent {
9328 u16 subsys_vendor, subsys_devid;
9329 u32 phy_id;
9332 static 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 */
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 */
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 */
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 */
9366 /* IBM boards. */
9367 { PCI_VENDOR_ID_IBM, 0x0281, 0 } /* IBM??? */
9370 static inline struct subsys_tbl_ent *lookup_by_subsys(struct tg3 *tp)
9372 int i;
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];
9381 return NULL;
9384 /* Since this function may be called in D3-hot power state during
9385 * tg3_init_one(), only config cycles are allowed.
9387 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
9389 u32 val;
9391 /* Make sure register accesses (indirect or otherwise)
9392 * will function correctly.
9394 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
9395 tp->misc_host_ctrl);
9397 tp->phy_id = PHY_ID_INVALID;
9398 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
9400 /* Do not even try poking around in here on Sun parts. */
9401 if (tp->tg3_flags2 & TG3_FLG2_SUN_570X)
9402 return;
9404 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
9405 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
9406 u32 nic_cfg, led_cfg;
9407 u32 nic_phy_id, ver, cfg2 = 0, eeprom_phy_id;
9408 int eeprom_phy_serdes = 0;
9410 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
9411 tp->nic_sram_data_cfg = nic_cfg;
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);
9421 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
9422 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
9423 eeprom_phy_serdes = 1;
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;
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;
9436 tp->phy_id = eeprom_phy_id;
9437 if (eeprom_phy_serdes) {
9438 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
9439 tp->tg3_flags2 |= TG3_FLG2_MII_SERDES;
9440 else
9441 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
9444 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
9445 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
9446 SHASTA_EXT_LED_MODE_MASK);
9447 else
9448 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
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;
9456 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
9457 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
9458 break;
9460 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
9461 tp->led_ctrl = LED_CTRL_MODE_MAC;
9463 /* Default to PHY_1_MODE if 0 (MAC_MODE) is
9464 * read on some older 5700/5701 bootcode.
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;
9472 break;
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;
9482 case SHASTA_EXT_LED_MAC:
9483 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
9484 break;
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;
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;
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;
9505 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
9506 tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
9507 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
9508 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
9510 if (nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)
9511 tp->tg3_flags |= TG3_FLAG_SERDES_WOL_CAP;
9513 if (cfg2 & (1 << 17))
9514 tp->tg3_flags2 |= TG3_FLG2_CAPACITIVE_COUPLING;
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;
9523 static int __devinit tg3_phy_probe(struct tg3 *tp)
9525 u32 hw_phy_id_1, hw_phy_id_2;
9526 u32 hw_phy_id, hw_phy_id_masked;
9527 int err;
9529 /* Reading the PHY ID register can conflict with ASF
9530 * firwmare access to the PHY hardware.
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.
9541 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
9542 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
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;
9548 hw_phy_id_masked = hw_phy_id & PHY_ID_MASK;
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;
9555 else
9556 tp->tg3_flags2 &= ~TG3_FLG2_PHY_SERDES;
9557 } else {
9558 if (tp->phy_id != PHY_ID_INVALID) {
9559 /* Do nothing, phy ID already set up in
9560 * tg3_get_eeprom_hw_cfg().
9562 } else {
9563 struct subsys_tbl_ent *p;
9565 /* No eeprom signature? Try the hardcoded
9566 * subsys device table.
9568 p = lookup_by_subsys(tp);
9569 if (!p)
9570 return -ENODEV;
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;
9579 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) &&
9580 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
9581 u32 bmsr, adv_reg, tg3_ctrl;
9583 tg3_readphy(tp, MII_BMSR, &bmsr);
9584 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
9585 (bmsr & BMSR_LSTATUS))
9586 goto skip_phy_reset;
9588 err = tg3_phy_reset(tp);
9589 if (err)
9590 return err;
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);
9605 if (!tg3_copper_is_advertising_all(tp)) {
9606 tg3_writephy(tp, MII_ADVERTISE, adv_reg);
9608 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
9609 tg3_writephy(tp, MII_TG3_CTRL, tg3_ctrl);
9611 tg3_writephy(tp, MII_BMCR,
9612 BMCR_ANENABLE | BMCR_ANRESTART);
9614 tg3_phy_set_wirespeed(tp);
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);
9621 skip_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;
9628 if (!err && ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401)) {
9629 err = tg3_init_5401phy_dsp(tp);
9632 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
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);
9643 return err;
9646 static void __devinit tg3_read_partno(struct tg3 *tp)
9648 unsigned char vpd_data[256];
9649 int i;
9650 u32 magic;
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 :(
9656 strcpy(tp->board_part_number, "Sun 570X");
9657 return;
9660 if (tg3_nvram_read(tp, 0x0, &magic))
9661 return;
9663 if (swab32(magic) == TG3_EEPROM_MAGIC) {
9664 for (i = 0; i < 256; i += 4) {
9665 u32 tmp;
9667 if (tg3_nvram_read(tp, 0x100 + i, &tmp))
9668 goto out_not_found;
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);
9675 } else {
9676 int vpd_cap;
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;
9683 pci_write_config_word(tp->pdev, vpd_cap + PCI_VPD_ADDR,
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);
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);
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;
9704 if (val == 0x82 || val == 0x91) {
9705 i = (i + 3 +
9706 (vpd_data[i + 1] +
9707 (vpd_data[i + 2] << 8)));
9708 continue;
9711 if (val != 0x90)
9712 goto out_not_found;
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];
9723 if (partno_len > 24)
9724 goto out_not_found;
9726 memcpy(tp->board_part_number,
9727 &vpd_data[i + 3],
9728 partno_len);
9730 /* Success. */
9731 return;
9735 /* Part number not found. */
9736 goto out_not_found;
9739 out_not_found:
9740 strcpy(tp->board_part_number, "none");
9743 #ifdef CONFIG_SPARC64
9744 static int __devinit tg3_is_sun_570X(struct tg3 *tp)
9746 struct pci_dev *pdev = tp->pdev;
9747 struct pcidev_cookie *pcp = pdev->sysdata;
9749 if (pcp != NULL) {
9750 int node = pcp->prom_node;
9751 u32 venid;
9752 int err;
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;
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".
9767 if (!strcmp(pcp->prom_name, "network"))
9768 return 1;
9770 return 0;
9772 #endif
9774 static int __devinit tg3_get_invariants(struct tg3 *tp)
9776 static struct pci_device_id write_reorder_chipsets[] = {
9777 { PCI_DEVICE(PCI_VENDOR_ID_AMD,
9778 PCI_DEVICE_ID_AMD_FE_GATE_700C) },
9779 { PCI_DEVICE(PCI_VENDOR_ID_VIA,
9780 PCI_DEVICE_ID_VIA_8385_0) },
9781 { },
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;
9790 #ifdef CONFIG_SPARC64
9791 if (tg3_is_sun_570X(tp))
9792 tp->tg3_flags2 |= TG3_FLG2_SUN_570X;
9793 #endif
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.
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);
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.
9812 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
9813 &misc_ctrl_reg);
9815 tp->pci_chip_rev_id = (misc_ctrl_reg >>
9816 MISC_HOST_CTRL_CHIPREV_SHIFT);
9818 /* Wrong chip ID in 5752 A0. This code can be removed later
9819 * as A0 is not in production.
9821 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
9822 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
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.
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.
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 { },
9858 struct tg3_dev_id *pci_id = &ich_chipsets[0];
9859 struct pci_dev *bridge = NULL;
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;
9868 if (pci_id->rev != PCI_ANY_ID) {
9869 u8 rev;
9871 pci_read_config_byte(bridge, PCI_REVISION_ID,
9872 &rev);
9873 if (rev > pci_id->rev)
9874 continue;
9876 if (bridge->subordinate &&
9877 (bridge->subordinate->number ==
9878 tp->pdev->bus->number)) {
9880 tp->tg3_flags2 |= TG3_FLG2_ICH_WORKAROUND;
9881 pci_dev_put(bridge);
9882 break;
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.
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;
9896 tp->tg3_flags |= TG3_FLAG_40BIT_DMA_BUG;
9897 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
9899 else {
9900 struct pci_dev *bridge = NULL;
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;
9915 } while (bridge);
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);
9924 pci_read_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
9925 &cacheline_sz_reg);
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;
9932 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
9933 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
9934 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
9935 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
9936 tp->tg3_flags2 |= TG3_FLG2_5750_PLUS;
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;
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;
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 &&
9951 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
9952 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787)
9953 tp->tg3_flags2 |= TG3_FLG2_JUMBO_CAPABLE;
9955 if (pci_find_capability(tp->pdev, PCI_CAP_ID_EXP) != 0)
9956 tp->tg3_flags2 |= TG3_FLG2_PCI_EXPRESS;
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.
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;
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;
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);
9977 pci_write_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
9978 cacheline_sz_reg);
9981 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
9982 &pci_state_reg);
9984 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0) {
9985 tp->tg3_flags |= TG3_FLAG_PCIX_MODE;
9987 /* If this is a 5700 BX chipset, and we are in PCI-X
9988 * mode, enable register write workaround.
9990 * The workaround is to use indirect register accesses
9991 * for all chip writes not to mailbox registers.
9993 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
9994 u32 pm_reg;
9995 u16 pci_cmd;
9997 tp->tg3_flags |= TG3_FLAG_PCIX_TARGET_HWBUG;
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.
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);
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);
10017 /* 5700 BX chips need to have their TX producer index mailboxes
10018 * written twice to workaround a bug.
10020 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX)
10021 tp->tg3_flags |= TG3_FLAG_TXD_MBOX_HWBUG;
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().
10027 * PCI Express 5750_A0 rev chips need this workaround too.
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;
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;
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);
10046 /* Default fast path register access methods */
10047 tp->read32 = tg3_read32;
10048 tp->write32 = tg3_write32;
10049 tp->read32_mbox = tg3_read32;
10050 tp->write32_mbox = tg3_write32;
10051 tp->write32_tx_mbox = tg3_write32;
10052 tp->write32_rx_mbox = tg3_write32;
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;
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;
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;
10075 iounmap(tp->regs);
10076 tp->regs = NULL;
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);
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.
10091 tg3_get_eeprom_hw_cfg(tp);
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.
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);
10102 /* Unused GPIO3 must be driven as output on 5752 because there
10103 * are no pull-up resistors on unused GPIO pins.
10105 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
10106 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
10108 /* Force the chip into D0. */
10109 err = tg3_set_power_state(tp, PCI_D0);
10110 if (err) {
10111 printk(KERN_ERR PFX "(%s) transition to D0 failed\n",
10112 pci_name(tp->pdev));
10113 return err;
10116 /* 5700 B0 chips do not support checksumming correctly due
10117 * to hardware bugs.
10119 if (tp->pci_chip_rev_id == CHIPREV_ID_5700_B0)
10120 tp->tg3_flags |= TG3_FLAG_BROKEN_CHECKSUMS;
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.
10128 tp->tg3_flags |= TG3_FLAG_NO_TX_PSEUDO_CSUM;
10129 tp->tg3_flags &= ~TG3_FLAG_NO_RX_PSEUDO_CSUM;
10131 /* Derive initial jumbo mode from MTU assigned in
10132 * ether_setup() via the alloc_etherdev() call
10134 if (tp->dev->mtu > ETH_DATA_LEN &&
10135 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
10136 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
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;
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) &&
10152 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
10153 (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES))
10154 tp->tg3_flags2 |= TG3_FLG2_NO_ETH_WIRE_SPEED;
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;
10162 if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
10163 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787))
10164 tp->tg3_flags2 |= TG3_FLG2_PHY_BER_BUG;
10166 tp->coalesce_mode = 0;
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;
10171 /* Initialize MAC MI mode, polling disabled. */
10172 tw32_f(MAC_MI_MODE, tp->mi_mode);
10173 udelay(80);
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);
10180 tg3_switch_clocks(tp);
10182 /* Clear this out for sanity. */
10183 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
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);
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;
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.
10201 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
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;
10211 udelay(50);
10212 tg3_nvram_init(tp);
10214 grc_misc_cfg = tr32(GRC_MISC_CFG);
10215 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
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;
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;
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);
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);
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;
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 ... */
10262 tg3_read_partno(tp);
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;
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.
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;
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.
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);
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;
10298 /* All chips before 5787 can get confused if TX buffers
10299 * straddle the 4GB address boundary in some cases.
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;
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;
10311 /* By default, disable wake-on-lan. User can change this
10312 * using ETHTOOL_SWOL.
10314 tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE;
10316 return err;
10319 #ifdef CONFIG_SPARC64
10320 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
10322 struct net_device *dev = tp->dev;
10323 struct pci_dev *pdev = tp->pdev;
10324 struct pcidev_cookie *pcp = pdev->sysdata;
10326 if (pcp != NULL) {
10327 int node = pcp->prom_node;
10329 if (prom_getproplen(node, "local-mac-address") == 6) {
10330 prom_getproperty(node, "local-mac-address",
10331 dev->dev_addr, 6);
10332 memcpy(dev->perm_addr, dev->dev_addr, 6);
10333 return 0;
10336 return -ENODEV;
10339 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
10341 struct net_device *dev = tp->dev;
10343 memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
10344 memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
10345 return 0;
10347 #endif
10349 static int __devinit tg3_get_device_address(struct tg3 *tp)
10351 struct net_device *dev = tp->dev;
10352 u32 hi, lo, mac_offset;
10354 #ifdef CONFIG_SPARC64
10355 if (!tg3_get_macaddr_sparc(tp))
10356 return 0;
10357 #endif
10359 mac_offset = 0x7c;
10360 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
10361 !(tp->tg3_flags & TG3_FLG2_SUN_570X)) ||
10362 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
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);
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;
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;
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);
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);
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;
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;
10414 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
10415 return 0;
10418 #define BOUNDARY_SINGLE_CACHELINE 1
10419 #define BOUNDARY_MULTI_CACHELINE 2
10421 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
10423 int cacheline_size;
10424 u8 byte;
10425 int goal;
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;
10433 /* On 5703 and later chips, the boundary bits have no
10434 * effect.
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;
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
10451 if (!goal)
10452 goto out;
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.
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.
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);
10479 break;
10481 case 256:
10482 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
10483 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
10484 break;
10486 default:
10487 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
10488 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
10489 break;
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;
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;
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;
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;
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;
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;
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;
10554 out:
10555 return val;
10558 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
10560 struct tg3_internal_buffer_desc test_desc;
10561 u32 sram_dma_descs;
10562 int i, ret;
10564 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
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);
10571 tw32(BUFMGR_MODE, 0);
10572 tw32(FTQ_RESET, 0);
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;
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.
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.
10589 * Broadcom noted the GRC reset will also reset all sub-components.
10591 if (to_device) {
10592 test_desc.cqid_sqid = (13 << 8) | 2;
10594 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
10595 udelay(40);
10596 } else {
10597 test_desc.cqid_sqid = (16 << 8) | 7;
10599 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
10600 udelay(40);
10602 test_desc.flags = 0x00000005;
10604 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
10605 u32 val;
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);
10612 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
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);
10620 ret = -ENODEV;
10621 for (i = 0; i < 40; i++) {
10622 u32 val;
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;
10633 udelay(100);
10636 return ret;
10639 #define TEST_BUFFER_SIZE 0x2000
10641 static int __devinit tg3_test_dma(struct tg3 *tp)
10643 dma_addr_t buf_dma;
10644 u32 *buf, saved_dma_rwctrl;
10645 int ret;
10647 buf = pci_alloc_consistent(tp->pdev, TEST_BUFFER_SIZE, &buf_dma);
10648 if (!buf) {
10649 ret = -ENOMEM;
10650 goto out_nofree;
10653 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
10654 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
10656 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
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)) {
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)
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);
10672 /* If the 5704 is behind the EPB bridge, we can
10673 * do the less restrictive ONE_DMA workaround for
10674 * better performance.
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)
10680 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
10682 /* Set bit 23 to enable PCIX hw bug fix */
10683 tp->dma_rwctrl |= 0x009f0000;
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;
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;
10690 } else {
10691 tp->dma_rwctrl |= 0x001b000f;
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;
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;
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.
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.
10714 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
10717 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10719 #if 0
10720 /* Unneeded, already done by tg3_get_invariants. */
10721 tg3_switch_clocks(tp);
10722 #endif
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;
10729 /* It is best to perform DMA test with maximum write burst size
10730 * to expose the 5700/5701 write DMA bug.
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);
10736 while (1) {
10737 u32 *p = buf, i;
10739 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
10740 p[i] = i;
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;
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? */
10758 p[i] = 0;
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);
10766 break;
10769 /* Verify it. */
10770 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
10771 if (p[i] == i)
10772 continue;
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;
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;
10787 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
10788 /* Success. */
10789 ret = 0;
10790 break;
10793 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
10794 DMA_RWCTRL_WRITE_BNDRY_16) {
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 { },
10801 /* DMA test passed without adjusting DMA boundary,
10802 * now look for chipsets that are known to expose the
10803 * DMA bug without failing the test.
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;
10809 else
10810 /* Safe to use the calculated DMA boundary. */
10811 tp->dma_rwctrl = saved_dma_rwctrl;
10813 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
10816 out:
10817 pci_free_consistent(tp->pdev, TEST_BUFFER_SIZE, buf, buf_dma);
10818 out_nofree:
10819 return ret;
10822 static void __devinit tg3_init_link_config(struct tg3 *tp)
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;
10841 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
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;
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;
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;
10873 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
10874 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
10877 static char * __devinit tg3_phy_string(struct tg3 *tp)
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";
10888 case PHY_ID_BCM5752: return "5752";
10889 case PHY_ID_BCM5714: return "5714";
10890 case PHY_ID_BCM5780: return "5780";
10891 case PHY_ID_BCM5787: return "5787";
10892 case PHY_ID_BCM8002: return "8002/serdes";
10893 case 0: return "serdes";
10894 default: return "unknown";
10898 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
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;
10906 strcpy(str, "PCIX:");
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");
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");
10927 if (tp->tg3_flags & TG3_FLAG_PCI_32BIT)
10928 strcat(str, ":32-bit");
10929 else
10930 strcat(str, ":64-bit");
10931 return str;
10934 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
10936 struct pci_dev *peer;
10937 unsigned int func, devnr = tp->pdev->devfn & ~7;
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);
10945 /* 5704 can be configured in single-port mode, set peer to
10946 * tp->pdev in that case.
10948 if (!peer) {
10949 peer = tp->pdev;
10950 return peer;
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
10957 pci_dev_put(peer);
10959 return peer;
10962 static void __devinit tg3_init_coal(struct tg3 *tp)
10964 struct ethtool_coalesce *ec = &tp->coal;
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;
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;
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;
10993 static int __devinit tg3_init_one(struct pci_dev *pdev,
10994 const struct pci_device_id *ent)
10996 static int tg3_version_printed = 0;
10997 unsigned long tg3reg_base, tg3reg_len;
10998 struct net_device *dev;
10999 struct tg3 *tp;
11000 int i, err, pm_cap;
11001 char str[40];
11002 u64 dma_mask, persist_dma_mask;
11004 if (tg3_version_printed++ == 0)
11005 printk(KERN_INFO "%s", version);
11007 err = pci_enable_device(pdev);
11008 if (err) {
11009 printk(KERN_ERR PFX "Cannot enable PCI device, "
11010 "aborting.\n");
11011 return err;
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;
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;
11028 pci_set_master(pdev);
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;
11039 tg3reg_base = pci_resource_start(pdev, 0);
11040 tg3reg_len = pci_resource_len(pdev, 0);
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;
11049 SET_MODULE_OWNER(dev);
11050 SET_NETDEV_DEV(dev, &pdev->dev);
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
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;
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.
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;
11082 /* The NONFRM (non-frame) byte/word swap controls take effect
11083 * on descriptor entries, anything which isn't packet data.
11085 * The StrongARM chips on the board (one for tx, one for rx)
11086 * are running in big-endian mode.
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);
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;
11106 tg3_init_link_config(tp);
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;
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
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;
11136 /* The EPB bridge inside 5714, 5715, and 5780 and any
11137 * device behind the EPB cannot support DMA addresses > 40-bit.
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().
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) {
11145 persist_dma_mask = dma_mask = DMA_40BIT_MASK;
11146 #ifdef CONFIG_HIGHMEM
11147 dma_mask = DMA_64BIT_MASK;
11148 #endif
11149 } else
11150 persist_dma_mask = dma_mask = DMA_64BIT_MASK;
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;
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;
11175 tg3_init_bufmgr_config(tp);
11177 #if TG3_TSO_SUPPORT != 0
11178 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
11179 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
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;
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.
11194 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
11195 dev->features |= NETIF_F_TSO;
11197 #endif
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;
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);
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;
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.
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);
11226 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
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;
11235 /* Tigon3 can do ipv4 only... and some chips have buggy
11236 * checksumming.
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;
11244 /* flow control autonegotiation is default behavior */
11245 tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
11247 tg3_init_coal(tp);
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.
11253 pci_save_state(tp->pdev);
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;
11262 pci_set_drvdata(pdev, dev);
11264 printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] (%s) %sBaseT Ethernet ",
11265 dev->name,
11266 tp->board_part_number,
11267 tp->pci_chip_rev_id,
11268 tg3_phy_string(tp),
11269 tg3_bus_string(tp, str),
11270 (tp->tg3_flags & TG3_FLAG_10_100_ONLY) ? "10/100" : "10/100/1000");
11272 for (i = 0; i < 6; i++)
11273 printk("%2.2x%c", dev->dev_addr[i],
11274 i == 5 ? '\n' : ':');
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);
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));
11292 return 0;
11294 err_out_iounmap:
11295 if (tp->regs) {
11296 iounmap(tp->regs);
11297 tp->regs = NULL;
11300 err_out_free_dev:
11301 free_netdev(dev);
11303 err_out_free_res:
11304 pci_release_regions(pdev);
11306 err_out_disable_pdev:
11307 pci_disable_device(pdev);
11308 pci_set_drvdata(pdev, NULL);
11309 return err;
11312 static void __devexit tg3_remove_one(struct pci_dev *pdev)
11314 struct net_device *dev = pci_get_drvdata(pdev);
11316 if (dev) {
11317 struct tg3 *tp = netdev_priv(dev);
11319 flush_scheduled_work();
11320 unregister_netdev(dev);
11321 if (tp->regs) {
11322 iounmap(tp->regs);
11323 tp->regs = NULL;
11325 free_netdev(dev);
11326 pci_release_regions(pdev);
11327 pci_disable_device(pdev);
11328 pci_set_drvdata(pdev, NULL);
11332 static int tg3_suspend(struct pci_dev *pdev, pm_message_t state)
11334 struct net_device *dev = pci_get_drvdata(pdev);
11335 struct tg3 *tp = netdev_priv(dev);
11336 int err;
11338 if (!netif_running(dev))
11339 return 0;
11341 flush_scheduled_work();
11342 tg3_netif_stop(tp);
11344 del_timer_sync(&tp->timer);
11346 tg3_full_lock(tp, 1);
11347 tg3_disable_ints(tp);
11348 tg3_full_unlock(tp);
11350 netif_device_detach(dev);
11352 tg3_full_lock(tp, 0);
11353 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11354 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
11355 tg3_full_unlock(tp);
11357 err = tg3_set_power_state(tp, pci_choose_state(pdev, state));
11358 if (err) {
11359 tg3_full_lock(tp, 0);
11361 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
11362 tg3_init_hw(tp);
11364 tp->timer.expires = jiffies + tp->timer_offset;
11365 add_timer(&tp->timer);
11367 netif_device_attach(dev);
11368 tg3_netif_start(tp);
11370 tg3_full_unlock(tp);
11373 return err;
11376 static int tg3_resume(struct pci_dev *pdev)
11378 struct net_device *dev = pci_get_drvdata(pdev);
11379 struct tg3 *tp = netdev_priv(dev);
11380 int err;
11382 if (!netif_running(dev))
11383 return 0;
11385 pci_restore_state(tp->pdev);
11387 err = tg3_set_power_state(tp, PCI_D0);
11388 if (err)
11389 return err;
11391 netif_device_attach(dev);
11393 tg3_full_lock(tp, 0);
11395 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
11396 tg3_init_hw(tp);
11398 tp->timer.expires = jiffies + tp->timer_offset;
11399 add_timer(&tp->timer);
11401 tg3_netif_start(tp);
11403 tg3_full_unlock(tp);
11405 return 0;
11408 static 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
11417 static int __init tg3_init(void)
11419 return pci_module_init(&tg3_driver);
11422 static void __exit tg3_cleanup(void)
11424 pci_unregister_driver(&tg3_driver);
11427 module_init(tg3_init);
11428 module_exit(tg3_cleanup);