PCI: Use newly defined PCI channel offline routine
[linux-2.6/x86.git] / drivers / net / tg3.c
blobf4bf62c2a7a5dea42a175509d4aff8ff84e5b596
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.
19 #include <linux/module.h>
20 #include <linux/moduleparam.h>
21 #include <linux/kernel.h>
22 #include <linux/types.h>
23 #include <linux/compiler.h>
24 #include <linux/slab.h>
25 #include <linux/delay.h>
26 #include <linux/in.h>
27 #include <linux/init.h>
28 #include <linux/ioport.h>
29 #include <linux/pci.h>
30 #include <linux/netdevice.h>
31 #include <linux/etherdevice.h>
32 #include <linux/skbuff.h>
33 #include <linux/ethtool.h>
34 #include <linux/mii.h>
35 #include <linux/if_vlan.h>
36 #include <linux/ip.h>
37 #include <linux/tcp.h>
38 #include <linux/workqueue.h>
39 #include <linux/prefetch.h>
40 #include <linux/dma-mapping.h>
42 #include <net/checksum.h>
44 #include <asm/system.h>
45 #include <asm/io.h>
46 #include <asm/byteorder.h>
47 #include <asm/uaccess.h>
49 #ifdef CONFIG_SPARC64
50 #include <asm/idprom.h>
51 #include <asm/oplib.h>
52 #include <asm/pbm.h>
53 #endif
55 #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
56 #define TG3_VLAN_TAG_USED 1
57 #else
58 #define TG3_VLAN_TAG_USED 0
59 #endif
61 #ifdef NETIF_F_TSO
62 #define TG3_TSO_SUPPORT 1
63 #else
64 #define TG3_TSO_SUPPORT 0
65 #endif
67 #include "tg3.h"
69 #define DRV_MODULE_NAME "tg3"
70 #define PFX DRV_MODULE_NAME ": "
71 #define DRV_MODULE_VERSION "3.72"
72 #define DRV_MODULE_RELDATE "January 8, 2007"
74 #define TG3_DEF_MAC_MODE 0
75 #define TG3_DEF_RX_MODE 0
76 #define TG3_DEF_TX_MODE 0
77 #define TG3_DEF_MSG_ENABLE \
78 (NETIF_MSG_DRV | \
79 NETIF_MSG_PROBE | \
80 NETIF_MSG_LINK | \
81 NETIF_MSG_TIMER | \
82 NETIF_MSG_IFDOWN | \
83 NETIF_MSG_IFUP | \
84 NETIF_MSG_RX_ERR | \
85 NETIF_MSG_TX_ERR)
87 /* length of time before we decide the hardware is borked,
88 * and dev->tx_timeout() should be called to fix the problem
90 #define TG3_TX_TIMEOUT (5 * HZ)
92 /* hardware minimum and maximum for a single frame's data payload */
93 #define TG3_MIN_MTU 60
94 #define TG3_MAX_MTU(tp) \
95 ((tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) ? 9000 : 1500)
97 /* These numbers seem to be hard coded in the NIC firmware somehow.
98 * You can't change the ring sizes, but you can change where you place
99 * them in the NIC onboard memory.
101 #define TG3_RX_RING_SIZE 512
102 #define TG3_DEF_RX_RING_PENDING 200
103 #define TG3_RX_JUMBO_RING_SIZE 256
104 #define TG3_DEF_RX_JUMBO_RING_PENDING 100
106 /* Do not place this n-ring entries value into the tp struct itself,
107 * we really want to expose these constants to GCC so that modulo et
108 * al. operations are done with shifts and masks instead of with
109 * hw multiply/modulo instructions. Another solution would be to
110 * replace things like '% foo' with '& (foo - 1)'.
112 #define TG3_RX_RCB_RING_SIZE(tp) \
113 ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ? 512 : 1024)
115 #define TG3_TX_RING_SIZE 512
116 #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1)
118 #define TG3_RX_RING_BYTES (sizeof(struct tg3_rx_buffer_desc) * \
119 TG3_RX_RING_SIZE)
120 #define TG3_RX_JUMBO_RING_BYTES (sizeof(struct tg3_rx_buffer_desc) * \
121 TG3_RX_JUMBO_RING_SIZE)
122 #define TG3_RX_RCB_RING_BYTES(tp) (sizeof(struct tg3_rx_buffer_desc) * \
123 TG3_RX_RCB_RING_SIZE(tp))
124 #define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \
125 TG3_TX_RING_SIZE)
126 #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1))
128 #define RX_PKT_BUF_SZ (1536 + tp->rx_offset + 64)
129 #define RX_JUMBO_PKT_BUF_SZ (9046 + tp->rx_offset + 64)
131 /* minimum number of free TX descriptors required to wake up TX process */
132 #define TG3_TX_WAKEUP_THRESH(tp) ((tp)->tx_pending / 4)
134 /* number of ETHTOOL_GSTATS u64's */
135 #define TG3_NUM_STATS (sizeof(struct tg3_ethtool_stats)/sizeof(u64))
137 #define TG3_NUM_TEST 6
139 static char version[] __devinitdata =
140 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
142 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
143 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
144 MODULE_LICENSE("GPL");
145 MODULE_VERSION(DRV_MODULE_VERSION);
147 static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */
148 module_param(tg3_debug, int, 0);
149 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
151 static struct pci_device_id tg3_pci_tbl[] = {
152 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
153 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
154 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
155 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
156 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
157 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
158 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
159 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
160 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
161 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
162 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
163 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
164 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
165 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
166 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
167 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
168 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
169 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
170 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)},
171 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)},
172 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
173 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)},
174 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5720)},
175 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
176 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
177 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
178 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
179 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750M)},
180 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
181 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)},
182 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
183 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
184 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
185 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
186 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)},
187 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
188 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
189 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
190 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
191 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
192 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
193 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
194 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
195 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)},
196 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
197 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
198 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
199 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
200 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
201 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
202 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
203 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
204 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
205 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
206 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
207 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
208 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
209 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
210 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
211 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
215 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
217 static const struct {
218 const char string[ETH_GSTRING_LEN];
219 } ethtool_stats_keys[TG3_NUM_STATS] = {
220 { "rx_octets" },
221 { "rx_fragments" },
222 { "rx_ucast_packets" },
223 { "rx_mcast_packets" },
224 { "rx_bcast_packets" },
225 { "rx_fcs_errors" },
226 { "rx_align_errors" },
227 { "rx_xon_pause_rcvd" },
228 { "rx_xoff_pause_rcvd" },
229 { "rx_mac_ctrl_rcvd" },
230 { "rx_xoff_entered" },
231 { "rx_frame_too_long_errors" },
232 { "rx_jabbers" },
233 { "rx_undersize_packets" },
234 { "rx_in_length_errors" },
235 { "rx_out_length_errors" },
236 { "rx_64_or_less_octet_packets" },
237 { "rx_65_to_127_octet_packets" },
238 { "rx_128_to_255_octet_packets" },
239 { "rx_256_to_511_octet_packets" },
240 { "rx_512_to_1023_octet_packets" },
241 { "rx_1024_to_1522_octet_packets" },
242 { "rx_1523_to_2047_octet_packets" },
243 { "rx_2048_to_4095_octet_packets" },
244 { "rx_4096_to_8191_octet_packets" },
245 { "rx_8192_to_9022_octet_packets" },
247 { "tx_octets" },
248 { "tx_collisions" },
250 { "tx_xon_sent" },
251 { "tx_xoff_sent" },
252 { "tx_flow_control" },
253 { "tx_mac_errors" },
254 { "tx_single_collisions" },
255 { "tx_mult_collisions" },
256 { "tx_deferred" },
257 { "tx_excessive_collisions" },
258 { "tx_late_collisions" },
259 { "tx_collide_2times" },
260 { "tx_collide_3times" },
261 { "tx_collide_4times" },
262 { "tx_collide_5times" },
263 { "tx_collide_6times" },
264 { "tx_collide_7times" },
265 { "tx_collide_8times" },
266 { "tx_collide_9times" },
267 { "tx_collide_10times" },
268 { "tx_collide_11times" },
269 { "tx_collide_12times" },
270 { "tx_collide_13times" },
271 { "tx_collide_14times" },
272 { "tx_collide_15times" },
273 { "tx_ucast_packets" },
274 { "tx_mcast_packets" },
275 { "tx_bcast_packets" },
276 { "tx_carrier_sense_errors" },
277 { "tx_discards" },
278 { "tx_errors" },
280 { "dma_writeq_full" },
281 { "dma_write_prioq_full" },
282 { "rxbds_empty" },
283 { "rx_discards" },
284 { "rx_errors" },
285 { "rx_threshold_hit" },
287 { "dma_readq_full" },
288 { "dma_read_prioq_full" },
289 { "tx_comp_queue_full" },
291 { "ring_set_send_prod_index" },
292 { "ring_status_update" },
293 { "nic_irqs" },
294 { "nic_avoided_irqs" },
295 { "nic_tx_threshold_hit" }
298 static const struct {
299 const char string[ETH_GSTRING_LEN];
300 } ethtool_test_keys[TG3_NUM_TEST] = {
301 { "nvram test (online) " },
302 { "link test (online) " },
303 { "register test (offline)" },
304 { "memory test (offline)" },
305 { "loopback test (offline)" },
306 { "interrupt test (offline)" },
309 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
311 writel(val, tp->regs + off);
314 static u32 tg3_read32(struct tg3 *tp, u32 off)
316 return (readl(tp->regs + off));
319 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
321 unsigned long flags;
323 spin_lock_irqsave(&tp->indirect_lock, flags);
324 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
325 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
326 spin_unlock_irqrestore(&tp->indirect_lock, flags);
329 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
331 writel(val, tp->regs + off);
332 readl(tp->regs + off);
335 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
337 unsigned long flags;
338 u32 val;
340 spin_lock_irqsave(&tp->indirect_lock, flags);
341 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
342 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
343 spin_unlock_irqrestore(&tp->indirect_lock, flags);
344 return val;
347 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
349 unsigned long flags;
351 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
352 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
353 TG3_64BIT_REG_LOW, val);
354 return;
356 if (off == (MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW)) {
357 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
358 TG3_64BIT_REG_LOW, val);
359 return;
362 spin_lock_irqsave(&tp->indirect_lock, flags);
363 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
364 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
365 spin_unlock_irqrestore(&tp->indirect_lock, flags);
367 /* In indirect mode when disabling interrupts, we also need
368 * to clear the interrupt bit in the GRC local ctrl register.
370 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
371 (val == 0x1)) {
372 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
373 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
377 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
379 unsigned long flags;
380 u32 val;
382 spin_lock_irqsave(&tp->indirect_lock, flags);
383 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
384 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
385 spin_unlock_irqrestore(&tp->indirect_lock, flags);
386 return val;
389 /* usec_wait specifies the wait time in usec when writing to certain registers
390 * where it is unsafe to read back the register without some delay.
391 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
392 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
394 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
396 if ((tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) ||
397 (tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
398 /* Non-posted methods */
399 tp->write32(tp, off, val);
400 else {
401 /* Posted method */
402 tg3_write32(tp, off, val);
403 if (usec_wait)
404 udelay(usec_wait);
405 tp->read32(tp, off);
407 /* Wait again after the read for the posted method to guarantee that
408 * the wait time is met.
410 if (usec_wait)
411 udelay(usec_wait);
414 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
416 tp->write32_mbox(tp, off, val);
417 if (!(tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) &&
418 !(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
419 tp->read32_mbox(tp, off);
422 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
424 void __iomem *mbox = tp->regs + off;
425 writel(val, mbox);
426 if (tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG)
427 writel(val, mbox);
428 if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
429 readl(mbox);
432 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
434 return (readl(tp->regs + off + GRCMBOX_BASE));
437 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
439 writel(val, tp->regs + off + GRCMBOX_BASE);
442 #define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val)
443 #define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val))
444 #define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val)
445 #define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val)
446 #define tr32_mailbox(reg) tp->read32_mbox(tp, reg)
448 #define tw32(reg,val) tp->write32(tp, reg, val)
449 #define tw32_f(reg,val) _tw32_flush(tp,(reg),(val), 0)
450 #define tw32_wait_f(reg,val,us) _tw32_flush(tp,(reg),(val), (us))
451 #define tr32(reg) tp->read32(tp, reg)
453 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
455 unsigned long flags;
457 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) &&
458 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
459 return;
461 spin_lock_irqsave(&tp->indirect_lock, flags);
462 if (tp->tg3_flags & TG3_FLAG_SRAM_USE_CONFIG) {
463 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
464 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
466 /* Always leave this as zero. */
467 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
468 } else {
469 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
470 tw32_f(TG3PCI_MEM_WIN_DATA, val);
472 /* Always leave this as zero. */
473 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
475 spin_unlock_irqrestore(&tp->indirect_lock, flags);
478 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
480 unsigned long flags;
482 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) &&
483 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
484 *val = 0;
485 return;
488 spin_lock_irqsave(&tp->indirect_lock, flags);
489 if (tp->tg3_flags & TG3_FLAG_SRAM_USE_CONFIG) {
490 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
491 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
493 /* Always leave this as zero. */
494 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
495 } else {
496 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
497 *val = tr32(TG3PCI_MEM_WIN_DATA);
499 /* Always leave this as zero. */
500 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
502 spin_unlock_irqrestore(&tp->indirect_lock, flags);
505 static void tg3_disable_ints(struct tg3 *tp)
507 tw32(TG3PCI_MISC_HOST_CTRL,
508 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
509 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
512 static inline void tg3_cond_int(struct tg3 *tp)
514 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) &&
515 (tp->hw_status->status & SD_STATUS_UPDATED))
516 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
517 else
518 tw32(HOSTCC_MODE, tp->coalesce_mode |
519 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
522 static void tg3_enable_ints(struct tg3 *tp)
524 tp->irq_sync = 0;
525 wmb();
527 tw32(TG3PCI_MISC_HOST_CTRL,
528 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
529 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
530 (tp->last_tag << 24));
531 if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI)
532 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
533 (tp->last_tag << 24));
534 tg3_cond_int(tp);
537 static inline unsigned int tg3_has_work(struct tg3 *tp)
539 struct tg3_hw_status *sblk = tp->hw_status;
540 unsigned int work_exists = 0;
542 /* check for phy events */
543 if (!(tp->tg3_flags &
544 (TG3_FLAG_USE_LINKCHG_REG |
545 TG3_FLAG_POLL_SERDES))) {
546 if (sblk->status & SD_STATUS_LINK_CHG)
547 work_exists = 1;
549 /* check for RX/TX work to do */
550 if (sblk->idx[0].tx_consumer != tp->tx_cons ||
551 sblk->idx[0].rx_producer != tp->rx_rcb_ptr)
552 work_exists = 1;
554 return work_exists;
557 /* tg3_restart_ints
558 * similar to tg3_enable_ints, but it accurately determines whether there
559 * is new work pending and can return without flushing the PIO write
560 * which reenables interrupts
562 static void tg3_restart_ints(struct tg3 *tp)
564 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
565 tp->last_tag << 24);
566 mmiowb();
568 /* When doing tagged status, this work check is unnecessary.
569 * The last_tag we write above tells the chip which piece of
570 * work we've completed.
572 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) &&
573 tg3_has_work(tp))
574 tw32(HOSTCC_MODE, tp->coalesce_mode |
575 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
578 static inline void tg3_netif_stop(struct tg3 *tp)
580 tp->dev->trans_start = jiffies; /* prevent tx timeout */
581 netif_poll_disable(tp->dev);
582 netif_tx_disable(tp->dev);
585 static inline void tg3_netif_start(struct tg3 *tp)
587 netif_wake_queue(tp->dev);
588 /* NOTE: unconditional netif_wake_queue is only appropriate
589 * so long as all callers are assured to have free tx slots
590 * (such as after tg3_init_hw)
592 netif_poll_enable(tp->dev);
593 tp->hw_status->status |= SD_STATUS_UPDATED;
594 tg3_enable_ints(tp);
597 static void tg3_switch_clocks(struct tg3 *tp)
599 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
600 u32 orig_clock_ctrl;
602 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
603 return;
605 orig_clock_ctrl = clock_ctrl;
606 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
607 CLOCK_CTRL_CLKRUN_OENABLE |
608 0x1f);
609 tp->pci_clock_ctrl = clock_ctrl;
611 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
612 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
613 tw32_wait_f(TG3PCI_CLOCK_CTRL,
614 clock_ctrl | CLOCK_CTRL_625_CORE, 40);
616 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
617 tw32_wait_f(TG3PCI_CLOCK_CTRL,
618 clock_ctrl |
619 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
620 40);
621 tw32_wait_f(TG3PCI_CLOCK_CTRL,
622 clock_ctrl | (CLOCK_CTRL_ALTCLK),
623 40);
625 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
628 #define PHY_BUSY_LOOPS 5000
630 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
632 u32 frame_val;
633 unsigned int loops;
634 int ret;
636 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
637 tw32_f(MAC_MI_MODE,
638 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
639 udelay(80);
642 *val = 0x0;
644 frame_val = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) &
645 MI_COM_PHY_ADDR_MASK);
646 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
647 MI_COM_REG_ADDR_MASK);
648 frame_val |= (MI_COM_CMD_READ | MI_COM_START);
650 tw32_f(MAC_MI_COM, frame_val);
652 loops = PHY_BUSY_LOOPS;
653 while (loops != 0) {
654 udelay(10);
655 frame_val = tr32(MAC_MI_COM);
657 if ((frame_val & MI_COM_BUSY) == 0) {
658 udelay(5);
659 frame_val = tr32(MAC_MI_COM);
660 break;
662 loops -= 1;
665 ret = -EBUSY;
666 if (loops != 0) {
667 *val = frame_val & MI_COM_DATA_MASK;
668 ret = 0;
671 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
672 tw32_f(MAC_MI_MODE, tp->mi_mode);
673 udelay(80);
676 return ret;
679 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
681 u32 frame_val;
682 unsigned int loops;
683 int ret;
685 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
686 (reg == MII_TG3_CTRL || reg == MII_TG3_AUX_CTRL))
687 return 0;
689 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
690 tw32_f(MAC_MI_MODE,
691 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
692 udelay(80);
695 frame_val = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) &
696 MI_COM_PHY_ADDR_MASK);
697 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
698 MI_COM_REG_ADDR_MASK);
699 frame_val |= (val & MI_COM_DATA_MASK);
700 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
702 tw32_f(MAC_MI_COM, frame_val);
704 loops = PHY_BUSY_LOOPS;
705 while (loops != 0) {
706 udelay(10);
707 frame_val = tr32(MAC_MI_COM);
708 if ((frame_val & MI_COM_BUSY) == 0) {
709 udelay(5);
710 frame_val = tr32(MAC_MI_COM);
711 break;
713 loops -= 1;
716 ret = -EBUSY;
717 if (loops != 0)
718 ret = 0;
720 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
721 tw32_f(MAC_MI_MODE, tp->mi_mode);
722 udelay(80);
725 return ret;
728 static void tg3_phy_set_wirespeed(struct tg3 *tp)
730 u32 val;
732 if (tp->tg3_flags2 & TG3_FLG2_NO_ETH_WIRE_SPEED)
733 return;
735 if (!tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x7007) &&
736 !tg3_readphy(tp, MII_TG3_AUX_CTRL, &val))
737 tg3_writephy(tp, MII_TG3_AUX_CTRL,
738 (val | (1 << 15) | (1 << 4)));
741 static int tg3_bmcr_reset(struct tg3 *tp)
743 u32 phy_control;
744 int limit, err;
746 /* OK, reset it, and poll the BMCR_RESET bit until it
747 * clears or we time out.
749 phy_control = BMCR_RESET;
750 err = tg3_writephy(tp, MII_BMCR, phy_control);
751 if (err != 0)
752 return -EBUSY;
754 limit = 5000;
755 while (limit--) {
756 err = tg3_readphy(tp, MII_BMCR, &phy_control);
757 if (err != 0)
758 return -EBUSY;
760 if ((phy_control & BMCR_RESET) == 0) {
761 udelay(40);
762 break;
764 udelay(10);
766 if (limit <= 0)
767 return -EBUSY;
769 return 0;
772 static int tg3_wait_macro_done(struct tg3 *tp)
774 int limit = 100;
776 while (limit--) {
777 u32 tmp32;
779 if (!tg3_readphy(tp, 0x16, &tmp32)) {
780 if ((tmp32 & 0x1000) == 0)
781 break;
784 if (limit <= 0)
785 return -EBUSY;
787 return 0;
790 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
792 static const u32 test_pat[4][6] = {
793 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
794 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
795 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
796 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
798 int chan;
800 for (chan = 0; chan < 4; chan++) {
801 int i;
803 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
804 (chan * 0x2000) | 0x0200);
805 tg3_writephy(tp, 0x16, 0x0002);
807 for (i = 0; i < 6; i++)
808 tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
809 test_pat[chan][i]);
811 tg3_writephy(tp, 0x16, 0x0202);
812 if (tg3_wait_macro_done(tp)) {
813 *resetp = 1;
814 return -EBUSY;
817 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
818 (chan * 0x2000) | 0x0200);
819 tg3_writephy(tp, 0x16, 0x0082);
820 if (tg3_wait_macro_done(tp)) {
821 *resetp = 1;
822 return -EBUSY;
825 tg3_writephy(tp, 0x16, 0x0802);
826 if (tg3_wait_macro_done(tp)) {
827 *resetp = 1;
828 return -EBUSY;
831 for (i = 0; i < 6; i += 2) {
832 u32 low, high;
834 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
835 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
836 tg3_wait_macro_done(tp)) {
837 *resetp = 1;
838 return -EBUSY;
840 low &= 0x7fff;
841 high &= 0x000f;
842 if (low != test_pat[chan][i] ||
843 high != test_pat[chan][i+1]) {
844 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
845 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
846 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
848 return -EBUSY;
853 return 0;
856 static int tg3_phy_reset_chanpat(struct tg3 *tp)
858 int chan;
860 for (chan = 0; chan < 4; chan++) {
861 int i;
863 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
864 (chan * 0x2000) | 0x0200);
865 tg3_writephy(tp, 0x16, 0x0002);
866 for (i = 0; i < 6; i++)
867 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
868 tg3_writephy(tp, 0x16, 0x0202);
869 if (tg3_wait_macro_done(tp))
870 return -EBUSY;
873 return 0;
876 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
878 u32 reg32, phy9_orig;
879 int retries, do_phy_reset, err;
881 retries = 10;
882 do_phy_reset = 1;
883 do {
884 if (do_phy_reset) {
885 err = tg3_bmcr_reset(tp);
886 if (err)
887 return err;
888 do_phy_reset = 0;
891 /* Disable transmitter and interrupt. */
892 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
893 continue;
895 reg32 |= 0x3000;
896 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
898 /* Set full-duplex, 1000 mbps. */
899 tg3_writephy(tp, MII_BMCR,
900 BMCR_FULLDPLX | TG3_BMCR_SPEED1000);
902 /* Set to master mode. */
903 if (tg3_readphy(tp, MII_TG3_CTRL, &phy9_orig))
904 continue;
906 tg3_writephy(tp, MII_TG3_CTRL,
907 (MII_TG3_CTRL_AS_MASTER |
908 MII_TG3_CTRL_ENABLE_AS_MASTER));
910 /* Enable SM_DSP_CLOCK and 6dB. */
911 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
913 /* Block the PHY control access. */
914 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8005);
915 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0800);
917 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
918 if (!err)
919 break;
920 } while (--retries);
922 err = tg3_phy_reset_chanpat(tp);
923 if (err)
924 return err;
926 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8005);
927 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0000);
929 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
930 tg3_writephy(tp, 0x16, 0x0000);
932 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
933 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
934 /* Set Extended packet length bit for jumbo frames */
935 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4400);
937 else {
938 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
941 tg3_writephy(tp, MII_TG3_CTRL, phy9_orig);
943 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
944 reg32 &= ~0x3000;
945 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
946 } else if (!err)
947 err = -EBUSY;
949 return err;
952 static void tg3_link_report(struct tg3 *);
954 /* This will reset the tigon3 PHY if there is no valid
955 * link unless the FORCE argument is non-zero.
957 static int tg3_phy_reset(struct tg3 *tp)
959 u32 phy_status;
960 int err;
962 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
963 u32 val;
965 val = tr32(GRC_MISC_CFG);
966 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
967 udelay(40);
969 err = tg3_readphy(tp, MII_BMSR, &phy_status);
970 err |= tg3_readphy(tp, MII_BMSR, &phy_status);
971 if (err != 0)
972 return -EBUSY;
974 if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) {
975 netif_carrier_off(tp->dev);
976 tg3_link_report(tp);
979 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
980 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
981 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
982 err = tg3_phy_reset_5703_4_5(tp);
983 if (err)
984 return err;
985 goto out;
988 err = tg3_bmcr_reset(tp);
989 if (err)
990 return err;
992 out:
993 if (tp->tg3_flags2 & TG3_FLG2_PHY_ADC_BUG) {
994 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
995 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
996 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x2aaa);
997 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
998 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0323);
999 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
1001 if (tp->tg3_flags2 & TG3_FLG2_PHY_5704_A0_BUG) {
1002 tg3_writephy(tp, 0x1c, 0x8d68);
1003 tg3_writephy(tp, 0x1c, 0x8d68);
1005 if (tp->tg3_flags2 & TG3_FLG2_PHY_BER_BUG) {
1006 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
1007 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
1008 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x310b);
1009 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
1010 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x9506);
1011 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x401f);
1012 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x14e2);
1013 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
1015 else if (tp->tg3_flags2 & TG3_FLG2_PHY_JITTER_BUG) {
1016 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
1017 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
1018 if (tp->tg3_flags2 & TG3_FLG2_PHY_ADJUST_TRIM) {
1019 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
1020 tg3_writephy(tp, MII_TG3_TEST1,
1021 MII_TG3_TEST1_TRIM_EN | 0x4);
1022 } else
1023 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
1024 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
1026 /* Set Extended packet length bit (bit 14) on all chips that */
1027 /* support jumbo frames */
1028 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
1029 /* Cannot do read-modify-write on 5401 */
1030 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20);
1031 } else if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) {
1032 u32 phy_reg;
1034 /* Set bit 14 with read-modify-write to preserve other bits */
1035 if (!tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0007) &&
1036 !tg3_readphy(tp, MII_TG3_AUX_CTRL, &phy_reg))
1037 tg3_writephy(tp, MII_TG3_AUX_CTRL, phy_reg | 0x4000);
1040 /* Set phy register 0x10 bit 0 to high fifo elasticity to support
1041 * jumbo frames transmission.
1043 if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) {
1044 u32 phy_reg;
1046 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &phy_reg))
1047 tg3_writephy(tp, MII_TG3_EXT_CTRL,
1048 phy_reg | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
1051 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1052 u32 phy_reg;
1054 /* adjust output voltage */
1055 tg3_writephy(tp, MII_TG3_EPHY_PTEST, 0x12);
1057 if (!tg3_readphy(tp, MII_TG3_EPHY_TEST, &phy_reg)) {
1058 u32 phy_reg2;
1060 tg3_writephy(tp, MII_TG3_EPHY_TEST,
1061 phy_reg | MII_TG3_EPHY_SHADOW_EN);
1062 /* Enable auto-MDIX */
1063 if (!tg3_readphy(tp, 0x10, &phy_reg2))
1064 tg3_writephy(tp, 0x10, phy_reg2 | 0x4000);
1065 tg3_writephy(tp, MII_TG3_EPHY_TEST, phy_reg);
1069 tg3_phy_set_wirespeed(tp);
1070 return 0;
1073 static void tg3_frob_aux_power(struct tg3 *tp)
1075 struct tg3 *tp_peer = tp;
1077 if ((tp->tg3_flags2 & TG3_FLG2_IS_NIC) == 0)
1078 return;
1080 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
1081 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
1082 struct net_device *dev_peer;
1084 dev_peer = pci_get_drvdata(tp->pdev_peer);
1085 /* remove_one() may have been run on the peer. */
1086 if (!dev_peer)
1087 tp_peer = tp;
1088 else
1089 tp_peer = netdev_priv(dev_peer);
1092 if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
1093 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 ||
1094 (tp_peer->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
1095 (tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
1096 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1097 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1098 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1099 (GRC_LCLCTRL_GPIO_OE0 |
1100 GRC_LCLCTRL_GPIO_OE1 |
1101 GRC_LCLCTRL_GPIO_OE2 |
1102 GRC_LCLCTRL_GPIO_OUTPUT0 |
1103 GRC_LCLCTRL_GPIO_OUTPUT1),
1104 100);
1105 } else {
1106 u32 no_gpio2;
1107 u32 grc_local_ctrl = 0;
1109 if (tp_peer != tp &&
1110 (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
1111 return;
1113 /* Workaround to prevent overdrawing Amps. */
1114 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
1115 ASIC_REV_5714) {
1116 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
1117 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1118 grc_local_ctrl, 100);
1121 /* On 5753 and variants, GPIO2 cannot be used. */
1122 no_gpio2 = tp->nic_sram_data_cfg &
1123 NIC_SRAM_DATA_CFG_NO_GPIO2;
1125 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
1126 GRC_LCLCTRL_GPIO_OE1 |
1127 GRC_LCLCTRL_GPIO_OE2 |
1128 GRC_LCLCTRL_GPIO_OUTPUT1 |
1129 GRC_LCLCTRL_GPIO_OUTPUT2;
1130 if (no_gpio2) {
1131 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
1132 GRC_LCLCTRL_GPIO_OUTPUT2);
1134 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1135 grc_local_ctrl, 100);
1137 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
1139 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1140 grc_local_ctrl, 100);
1142 if (!no_gpio2) {
1143 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
1144 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1145 grc_local_ctrl, 100);
1148 } else {
1149 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
1150 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
1151 if (tp_peer != tp &&
1152 (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
1153 return;
1155 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1156 (GRC_LCLCTRL_GPIO_OE1 |
1157 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1159 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1160 GRC_LCLCTRL_GPIO_OE1, 100);
1162 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1163 (GRC_LCLCTRL_GPIO_OE1 |
1164 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1169 static int tg3_setup_phy(struct tg3 *, int);
1171 #define RESET_KIND_SHUTDOWN 0
1172 #define RESET_KIND_INIT 1
1173 #define RESET_KIND_SUSPEND 2
1175 static void tg3_write_sig_post_reset(struct tg3 *, int);
1176 static int tg3_halt_cpu(struct tg3 *, u32);
1177 static int tg3_nvram_lock(struct tg3 *);
1178 static void tg3_nvram_unlock(struct tg3 *);
1180 static void tg3_power_down_phy(struct tg3 *tp)
1182 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
1183 return;
1185 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1186 u32 val;
1188 tg3_bmcr_reset(tp);
1189 val = tr32(GRC_MISC_CFG);
1190 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
1191 udelay(40);
1192 return;
1193 } else {
1194 tg3_writephy(tp, MII_TG3_EXT_CTRL,
1195 MII_TG3_EXT_CTRL_FORCE_LED_OFF);
1196 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2);
1199 /* The PHY should not be powered down on some chips because
1200 * of bugs.
1202 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1203 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
1204 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 &&
1205 (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)))
1206 return;
1207 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
1210 static int tg3_set_power_state(struct tg3 *tp, pci_power_t state)
1212 u32 misc_host_ctrl;
1213 u16 power_control, power_caps;
1214 int pm = tp->pm_cap;
1216 /* Make sure register accesses (indirect or otherwise)
1217 * will function correctly.
1219 pci_write_config_dword(tp->pdev,
1220 TG3PCI_MISC_HOST_CTRL,
1221 tp->misc_host_ctrl);
1223 pci_read_config_word(tp->pdev,
1224 pm + PCI_PM_CTRL,
1225 &power_control);
1226 power_control |= PCI_PM_CTRL_PME_STATUS;
1227 power_control &= ~(PCI_PM_CTRL_STATE_MASK);
1228 switch (state) {
1229 case PCI_D0:
1230 power_control |= 0;
1231 pci_write_config_word(tp->pdev,
1232 pm + PCI_PM_CTRL,
1233 power_control);
1234 udelay(100); /* Delay after power state change */
1236 /* Switch out of Vaux if it is a NIC */
1237 if (tp->tg3_flags2 & TG3_FLG2_IS_NIC)
1238 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100);
1240 return 0;
1242 case PCI_D1:
1243 power_control |= 1;
1244 break;
1246 case PCI_D2:
1247 power_control |= 2;
1248 break;
1250 case PCI_D3hot:
1251 power_control |= 3;
1252 break;
1254 default:
1255 printk(KERN_WARNING PFX "%s: Invalid power state (%d) "
1256 "requested.\n",
1257 tp->dev->name, state);
1258 return -EINVAL;
1261 power_control |= PCI_PM_CTRL_PME_ENABLE;
1263 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
1264 tw32(TG3PCI_MISC_HOST_CTRL,
1265 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
1267 if (tp->link_config.phy_is_low_power == 0) {
1268 tp->link_config.phy_is_low_power = 1;
1269 tp->link_config.orig_speed = tp->link_config.speed;
1270 tp->link_config.orig_duplex = tp->link_config.duplex;
1271 tp->link_config.orig_autoneg = tp->link_config.autoneg;
1274 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) {
1275 tp->link_config.speed = SPEED_10;
1276 tp->link_config.duplex = DUPLEX_HALF;
1277 tp->link_config.autoneg = AUTONEG_ENABLE;
1278 tg3_setup_phy(tp, 0);
1281 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1282 u32 val;
1284 val = tr32(GRC_VCPU_EXT_CTRL);
1285 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
1286 } else if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1287 int i;
1288 u32 val;
1290 for (i = 0; i < 200; i++) {
1291 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
1292 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1293 break;
1294 msleep(1);
1297 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
1298 WOL_DRV_STATE_SHUTDOWN |
1299 WOL_DRV_WOL | WOL_SET_MAGIC_PKT);
1301 pci_read_config_word(tp->pdev, pm + PCI_PM_PMC, &power_caps);
1303 if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE) {
1304 u32 mac_mode;
1306 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
1307 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x5a);
1308 udelay(40);
1310 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
1311 mac_mode = MAC_MODE_PORT_MODE_GMII;
1312 else
1313 mac_mode = MAC_MODE_PORT_MODE_MII;
1315 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 ||
1316 !(tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB))
1317 mac_mode |= MAC_MODE_LINK_POLARITY;
1318 } else {
1319 mac_mode = MAC_MODE_PORT_MODE_TBI;
1322 if (!(tp->tg3_flags2 & TG3_FLG2_5750_PLUS))
1323 tw32(MAC_LED_CTRL, tp->led_ctrl);
1325 if (((power_caps & PCI_PM_CAP_PME_D3cold) &&
1326 (tp->tg3_flags & TG3_FLAG_WOL_ENABLE)))
1327 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
1329 tw32_f(MAC_MODE, mac_mode);
1330 udelay(100);
1332 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
1333 udelay(10);
1336 if (!(tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB) &&
1337 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1338 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
1339 u32 base_val;
1341 base_val = tp->pci_clock_ctrl;
1342 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
1343 CLOCK_CTRL_TXCLK_DISABLE);
1345 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
1346 CLOCK_CTRL_PWRDOWN_PLL133, 40);
1347 } else if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
1348 /* do nothing */
1349 } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
1350 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) {
1351 u32 newbits1, newbits2;
1353 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1354 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1355 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
1356 CLOCK_CTRL_TXCLK_DISABLE |
1357 CLOCK_CTRL_ALTCLK);
1358 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
1359 } else if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
1360 newbits1 = CLOCK_CTRL_625_CORE;
1361 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
1362 } else {
1363 newbits1 = CLOCK_CTRL_ALTCLK;
1364 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
1367 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
1368 40);
1370 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
1371 40);
1373 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
1374 u32 newbits3;
1376 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1377 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1378 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
1379 CLOCK_CTRL_TXCLK_DISABLE |
1380 CLOCK_CTRL_44MHZ_CORE);
1381 } else {
1382 newbits3 = CLOCK_CTRL_44MHZ_CORE;
1385 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1386 tp->pci_clock_ctrl | newbits3, 40);
1390 if (!(tp->tg3_flags & TG3_FLAG_WOL_ENABLE) &&
1391 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
1392 tg3_power_down_phy(tp);
1394 tg3_frob_aux_power(tp);
1396 /* Workaround for unstable PLL clock */
1397 if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
1398 (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
1399 u32 val = tr32(0x7d00);
1401 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
1402 tw32(0x7d00, val);
1403 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1404 int err;
1406 err = tg3_nvram_lock(tp);
1407 tg3_halt_cpu(tp, RX_CPU_BASE);
1408 if (!err)
1409 tg3_nvram_unlock(tp);
1413 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
1415 /* Finally, set the new power state. */
1416 pci_write_config_word(tp->pdev, pm + PCI_PM_CTRL, power_control);
1417 udelay(100); /* Delay after power state change */
1419 return 0;
1422 static void tg3_link_report(struct tg3 *tp)
1424 if (!netif_carrier_ok(tp->dev)) {
1425 if (netif_msg_link(tp))
1426 printk(KERN_INFO PFX "%s: Link is down.\n",
1427 tp->dev->name);
1428 } else if (netif_msg_link(tp)) {
1429 printk(KERN_INFO PFX "%s: Link is up at %d Mbps, %s duplex.\n",
1430 tp->dev->name,
1431 (tp->link_config.active_speed == SPEED_1000 ?
1432 1000 :
1433 (tp->link_config.active_speed == SPEED_100 ?
1434 100 : 10)),
1435 (tp->link_config.active_duplex == DUPLEX_FULL ?
1436 "full" : "half"));
1438 printk(KERN_INFO PFX "%s: Flow control is %s for TX and "
1439 "%s for RX.\n",
1440 tp->dev->name,
1441 (tp->tg3_flags & TG3_FLAG_TX_PAUSE) ? "on" : "off",
1442 (tp->tg3_flags & TG3_FLAG_RX_PAUSE) ? "on" : "off");
1446 static void tg3_setup_flow_control(struct tg3 *tp, u32 local_adv, u32 remote_adv)
1448 u32 new_tg3_flags = 0;
1449 u32 old_rx_mode = tp->rx_mode;
1450 u32 old_tx_mode = tp->tx_mode;
1452 if (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) {
1454 /* Convert 1000BaseX flow control bits to 1000BaseT
1455 * bits before resolving flow control.
1457 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
1458 local_adv &= ~(ADVERTISE_PAUSE_CAP |
1459 ADVERTISE_PAUSE_ASYM);
1460 remote_adv &= ~(LPA_PAUSE_CAP | LPA_PAUSE_ASYM);
1462 if (local_adv & ADVERTISE_1000XPAUSE)
1463 local_adv |= ADVERTISE_PAUSE_CAP;
1464 if (local_adv & ADVERTISE_1000XPSE_ASYM)
1465 local_adv |= ADVERTISE_PAUSE_ASYM;
1466 if (remote_adv & LPA_1000XPAUSE)
1467 remote_adv |= LPA_PAUSE_CAP;
1468 if (remote_adv & LPA_1000XPAUSE_ASYM)
1469 remote_adv |= LPA_PAUSE_ASYM;
1472 if (local_adv & ADVERTISE_PAUSE_CAP) {
1473 if (local_adv & ADVERTISE_PAUSE_ASYM) {
1474 if (remote_adv & LPA_PAUSE_CAP)
1475 new_tg3_flags |=
1476 (TG3_FLAG_RX_PAUSE |
1477 TG3_FLAG_TX_PAUSE);
1478 else if (remote_adv & LPA_PAUSE_ASYM)
1479 new_tg3_flags |=
1480 (TG3_FLAG_RX_PAUSE);
1481 } else {
1482 if (remote_adv & LPA_PAUSE_CAP)
1483 new_tg3_flags |=
1484 (TG3_FLAG_RX_PAUSE |
1485 TG3_FLAG_TX_PAUSE);
1487 } else if (local_adv & ADVERTISE_PAUSE_ASYM) {
1488 if ((remote_adv & LPA_PAUSE_CAP) &&
1489 (remote_adv & LPA_PAUSE_ASYM))
1490 new_tg3_flags |= TG3_FLAG_TX_PAUSE;
1493 tp->tg3_flags &= ~(TG3_FLAG_RX_PAUSE | TG3_FLAG_TX_PAUSE);
1494 tp->tg3_flags |= new_tg3_flags;
1495 } else {
1496 new_tg3_flags = tp->tg3_flags;
1499 if (new_tg3_flags & TG3_FLAG_RX_PAUSE)
1500 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1501 else
1502 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1504 if (old_rx_mode != tp->rx_mode) {
1505 tw32_f(MAC_RX_MODE, tp->rx_mode);
1508 if (new_tg3_flags & TG3_FLAG_TX_PAUSE)
1509 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1510 else
1511 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1513 if (old_tx_mode != tp->tx_mode) {
1514 tw32_f(MAC_TX_MODE, tp->tx_mode);
1518 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
1520 switch (val & MII_TG3_AUX_STAT_SPDMASK) {
1521 case MII_TG3_AUX_STAT_10HALF:
1522 *speed = SPEED_10;
1523 *duplex = DUPLEX_HALF;
1524 break;
1526 case MII_TG3_AUX_STAT_10FULL:
1527 *speed = SPEED_10;
1528 *duplex = DUPLEX_FULL;
1529 break;
1531 case MII_TG3_AUX_STAT_100HALF:
1532 *speed = SPEED_100;
1533 *duplex = DUPLEX_HALF;
1534 break;
1536 case MII_TG3_AUX_STAT_100FULL:
1537 *speed = SPEED_100;
1538 *duplex = DUPLEX_FULL;
1539 break;
1541 case MII_TG3_AUX_STAT_1000HALF:
1542 *speed = SPEED_1000;
1543 *duplex = DUPLEX_HALF;
1544 break;
1546 case MII_TG3_AUX_STAT_1000FULL:
1547 *speed = SPEED_1000;
1548 *duplex = DUPLEX_FULL;
1549 break;
1551 default:
1552 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1553 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
1554 SPEED_10;
1555 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
1556 DUPLEX_HALF;
1557 break;
1559 *speed = SPEED_INVALID;
1560 *duplex = DUPLEX_INVALID;
1561 break;
1565 static void tg3_phy_copper_begin(struct tg3 *tp)
1567 u32 new_adv;
1568 int i;
1570 if (tp->link_config.phy_is_low_power) {
1571 /* Entering low power mode. Disable gigabit and
1572 * 100baseT advertisements.
1574 tg3_writephy(tp, MII_TG3_CTRL, 0);
1576 new_adv = (ADVERTISE_10HALF | ADVERTISE_10FULL |
1577 ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
1578 if (tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB)
1579 new_adv |= (ADVERTISE_100HALF | ADVERTISE_100FULL);
1581 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1582 } else if (tp->link_config.speed == SPEED_INVALID) {
1583 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
1584 tp->link_config.advertising &=
1585 ~(ADVERTISED_1000baseT_Half |
1586 ADVERTISED_1000baseT_Full);
1588 new_adv = (ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
1589 if (tp->link_config.advertising & ADVERTISED_10baseT_Half)
1590 new_adv |= ADVERTISE_10HALF;
1591 if (tp->link_config.advertising & ADVERTISED_10baseT_Full)
1592 new_adv |= ADVERTISE_10FULL;
1593 if (tp->link_config.advertising & ADVERTISED_100baseT_Half)
1594 new_adv |= ADVERTISE_100HALF;
1595 if (tp->link_config.advertising & ADVERTISED_100baseT_Full)
1596 new_adv |= ADVERTISE_100FULL;
1597 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1599 if (tp->link_config.advertising &
1600 (ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full)) {
1601 new_adv = 0;
1602 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half)
1603 new_adv |= MII_TG3_CTRL_ADV_1000_HALF;
1604 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full)
1605 new_adv |= MII_TG3_CTRL_ADV_1000_FULL;
1606 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY) &&
1607 (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1608 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0))
1609 new_adv |= (MII_TG3_CTRL_AS_MASTER |
1610 MII_TG3_CTRL_ENABLE_AS_MASTER);
1611 tg3_writephy(tp, MII_TG3_CTRL, new_adv);
1612 } else {
1613 tg3_writephy(tp, MII_TG3_CTRL, 0);
1615 } else {
1616 /* Asking for a specific link mode. */
1617 if (tp->link_config.speed == SPEED_1000) {
1618 new_adv = ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP;
1619 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1621 if (tp->link_config.duplex == DUPLEX_FULL)
1622 new_adv = MII_TG3_CTRL_ADV_1000_FULL;
1623 else
1624 new_adv = MII_TG3_CTRL_ADV_1000_HALF;
1625 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1626 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
1627 new_adv |= (MII_TG3_CTRL_AS_MASTER |
1628 MII_TG3_CTRL_ENABLE_AS_MASTER);
1629 tg3_writephy(tp, MII_TG3_CTRL, new_adv);
1630 } else {
1631 tg3_writephy(tp, MII_TG3_CTRL, 0);
1633 new_adv = ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP;
1634 if (tp->link_config.speed == SPEED_100) {
1635 if (tp->link_config.duplex == DUPLEX_FULL)
1636 new_adv |= ADVERTISE_100FULL;
1637 else
1638 new_adv |= ADVERTISE_100HALF;
1639 } else {
1640 if (tp->link_config.duplex == DUPLEX_FULL)
1641 new_adv |= ADVERTISE_10FULL;
1642 else
1643 new_adv |= ADVERTISE_10HALF;
1645 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1649 if (tp->link_config.autoneg == AUTONEG_DISABLE &&
1650 tp->link_config.speed != SPEED_INVALID) {
1651 u32 bmcr, orig_bmcr;
1653 tp->link_config.active_speed = tp->link_config.speed;
1654 tp->link_config.active_duplex = tp->link_config.duplex;
1656 bmcr = 0;
1657 switch (tp->link_config.speed) {
1658 default:
1659 case SPEED_10:
1660 break;
1662 case SPEED_100:
1663 bmcr |= BMCR_SPEED100;
1664 break;
1666 case SPEED_1000:
1667 bmcr |= TG3_BMCR_SPEED1000;
1668 break;
1671 if (tp->link_config.duplex == DUPLEX_FULL)
1672 bmcr |= BMCR_FULLDPLX;
1674 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
1675 (bmcr != orig_bmcr)) {
1676 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
1677 for (i = 0; i < 1500; i++) {
1678 u32 tmp;
1680 udelay(10);
1681 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
1682 tg3_readphy(tp, MII_BMSR, &tmp))
1683 continue;
1684 if (!(tmp & BMSR_LSTATUS)) {
1685 udelay(40);
1686 break;
1689 tg3_writephy(tp, MII_BMCR, bmcr);
1690 udelay(40);
1692 } else {
1693 tg3_writephy(tp, MII_BMCR,
1694 BMCR_ANENABLE | BMCR_ANRESTART);
1698 static int tg3_init_5401phy_dsp(struct tg3 *tp)
1700 int err;
1702 /* Turn off tap power management. */
1703 /* Set Extended packet length bit */
1704 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20);
1706 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0012);
1707 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1804);
1709 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0013);
1710 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1204);
1712 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
1713 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0132);
1715 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
1716 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0232);
1718 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
1719 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0a20);
1721 udelay(40);
1723 return err;
1726 static int tg3_copper_is_advertising_all(struct tg3 *tp, u32 mask)
1728 u32 adv_reg, all_mask = 0;
1730 if (mask & ADVERTISED_10baseT_Half)
1731 all_mask |= ADVERTISE_10HALF;
1732 if (mask & ADVERTISED_10baseT_Full)
1733 all_mask |= ADVERTISE_10FULL;
1734 if (mask & ADVERTISED_100baseT_Half)
1735 all_mask |= ADVERTISE_100HALF;
1736 if (mask & ADVERTISED_100baseT_Full)
1737 all_mask |= ADVERTISE_100FULL;
1739 if (tg3_readphy(tp, MII_ADVERTISE, &adv_reg))
1740 return 0;
1742 if ((adv_reg & all_mask) != all_mask)
1743 return 0;
1744 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY)) {
1745 u32 tg3_ctrl;
1747 all_mask = 0;
1748 if (mask & ADVERTISED_1000baseT_Half)
1749 all_mask |= ADVERTISE_1000HALF;
1750 if (mask & ADVERTISED_1000baseT_Full)
1751 all_mask |= ADVERTISE_1000FULL;
1753 if (tg3_readphy(tp, MII_TG3_CTRL, &tg3_ctrl))
1754 return 0;
1756 if ((tg3_ctrl & all_mask) != all_mask)
1757 return 0;
1759 return 1;
1762 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
1764 int current_link_up;
1765 u32 bmsr, dummy;
1766 u16 current_speed;
1767 u8 current_duplex;
1768 int i, err;
1770 tw32(MAC_EVENT, 0);
1772 tw32_f(MAC_STATUS,
1773 (MAC_STATUS_SYNC_CHANGED |
1774 MAC_STATUS_CFG_CHANGED |
1775 MAC_STATUS_MI_COMPLETION |
1776 MAC_STATUS_LNKSTATE_CHANGED));
1777 udelay(40);
1779 tp->mi_mode = MAC_MI_MODE_BASE;
1780 tw32_f(MAC_MI_MODE, tp->mi_mode);
1781 udelay(80);
1783 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x02);
1785 /* Some third-party PHYs need to be reset on link going
1786 * down.
1788 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
1789 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
1790 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
1791 netif_carrier_ok(tp->dev)) {
1792 tg3_readphy(tp, MII_BMSR, &bmsr);
1793 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
1794 !(bmsr & BMSR_LSTATUS))
1795 force_reset = 1;
1797 if (force_reset)
1798 tg3_phy_reset(tp);
1800 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
1801 tg3_readphy(tp, MII_BMSR, &bmsr);
1802 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
1803 !(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE))
1804 bmsr = 0;
1806 if (!(bmsr & BMSR_LSTATUS)) {
1807 err = tg3_init_5401phy_dsp(tp);
1808 if (err)
1809 return err;
1811 tg3_readphy(tp, MII_BMSR, &bmsr);
1812 for (i = 0; i < 1000; i++) {
1813 udelay(10);
1814 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
1815 (bmsr & BMSR_LSTATUS)) {
1816 udelay(40);
1817 break;
1821 if ((tp->phy_id & PHY_ID_REV_MASK) == PHY_REV_BCM5401_B0 &&
1822 !(bmsr & BMSR_LSTATUS) &&
1823 tp->link_config.active_speed == SPEED_1000) {
1824 err = tg3_phy_reset(tp);
1825 if (!err)
1826 err = tg3_init_5401phy_dsp(tp);
1827 if (err)
1828 return err;
1831 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1832 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
1833 /* 5701 {A0,B0} CRC bug workaround */
1834 tg3_writephy(tp, 0x15, 0x0a75);
1835 tg3_writephy(tp, 0x1c, 0x8c68);
1836 tg3_writephy(tp, 0x1c, 0x8d68);
1837 tg3_writephy(tp, 0x1c, 0x8c68);
1840 /* Clear pending interrupts... */
1841 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
1842 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
1844 if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT)
1845 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
1846 else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)
1847 tg3_writephy(tp, MII_TG3_IMASK, ~0);
1849 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1850 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1851 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
1852 tg3_writephy(tp, MII_TG3_EXT_CTRL,
1853 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
1854 else
1855 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
1858 current_link_up = 0;
1859 current_speed = SPEED_INVALID;
1860 current_duplex = DUPLEX_INVALID;
1862 if (tp->tg3_flags2 & TG3_FLG2_CAPACITIVE_COUPLING) {
1863 u32 val;
1865 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4007);
1866 tg3_readphy(tp, MII_TG3_AUX_CTRL, &val);
1867 if (!(val & (1 << 10))) {
1868 val |= (1 << 10);
1869 tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
1870 goto relink;
1874 bmsr = 0;
1875 for (i = 0; i < 100; i++) {
1876 tg3_readphy(tp, MII_BMSR, &bmsr);
1877 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
1878 (bmsr & BMSR_LSTATUS))
1879 break;
1880 udelay(40);
1883 if (bmsr & BMSR_LSTATUS) {
1884 u32 aux_stat, bmcr;
1886 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
1887 for (i = 0; i < 2000; i++) {
1888 udelay(10);
1889 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
1890 aux_stat)
1891 break;
1894 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
1895 &current_speed,
1896 &current_duplex);
1898 bmcr = 0;
1899 for (i = 0; i < 200; i++) {
1900 tg3_readphy(tp, MII_BMCR, &bmcr);
1901 if (tg3_readphy(tp, MII_BMCR, &bmcr))
1902 continue;
1903 if (bmcr && bmcr != 0x7fff)
1904 break;
1905 udelay(10);
1908 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
1909 if (bmcr & BMCR_ANENABLE) {
1910 current_link_up = 1;
1912 /* Force autoneg restart if we are exiting
1913 * low power mode.
1915 if (!tg3_copper_is_advertising_all(tp,
1916 tp->link_config.advertising))
1917 current_link_up = 0;
1918 } else {
1919 current_link_up = 0;
1921 } else {
1922 if (!(bmcr & BMCR_ANENABLE) &&
1923 tp->link_config.speed == current_speed &&
1924 tp->link_config.duplex == current_duplex) {
1925 current_link_up = 1;
1926 } else {
1927 current_link_up = 0;
1931 tp->link_config.active_speed = current_speed;
1932 tp->link_config.active_duplex = current_duplex;
1935 if (current_link_up == 1 &&
1936 (tp->link_config.active_duplex == DUPLEX_FULL) &&
1937 (tp->link_config.autoneg == AUTONEG_ENABLE)) {
1938 u32 local_adv, remote_adv;
1940 if (tg3_readphy(tp, MII_ADVERTISE, &local_adv))
1941 local_adv = 0;
1942 local_adv &= (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
1944 if (tg3_readphy(tp, MII_LPA, &remote_adv))
1945 remote_adv = 0;
1947 remote_adv &= (LPA_PAUSE_CAP | LPA_PAUSE_ASYM);
1949 /* If we are not advertising full pause capability,
1950 * something is wrong. Bring the link down and reconfigure.
1952 if (local_adv != ADVERTISE_PAUSE_CAP) {
1953 current_link_up = 0;
1954 } else {
1955 tg3_setup_flow_control(tp, local_adv, remote_adv);
1958 relink:
1959 if (current_link_up == 0 || tp->link_config.phy_is_low_power) {
1960 u32 tmp;
1962 tg3_phy_copper_begin(tp);
1964 tg3_readphy(tp, MII_BMSR, &tmp);
1965 if (!tg3_readphy(tp, MII_BMSR, &tmp) &&
1966 (tmp & BMSR_LSTATUS))
1967 current_link_up = 1;
1970 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
1971 if (current_link_up == 1) {
1972 if (tp->link_config.active_speed == SPEED_100 ||
1973 tp->link_config.active_speed == SPEED_10)
1974 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
1975 else
1976 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
1977 } else
1978 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
1980 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
1981 if (tp->link_config.active_duplex == DUPLEX_HALF)
1982 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
1984 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
1985 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
1986 if ((tp->led_ctrl == LED_CTRL_MODE_PHY_2) ||
1987 (current_link_up == 1 &&
1988 tp->link_config.active_speed == SPEED_10))
1989 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
1990 } else {
1991 if (current_link_up == 1)
1992 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
1995 /* ??? Without this setting Netgear GA302T PHY does not
1996 * ??? send/receive packets...
1998 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5411 &&
1999 tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
2000 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
2001 tw32_f(MAC_MI_MODE, tp->mi_mode);
2002 udelay(80);
2005 tw32_f(MAC_MODE, tp->mac_mode);
2006 udelay(40);
2008 if (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) {
2009 /* Polled via timer. */
2010 tw32_f(MAC_EVENT, 0);
2011 } else {
2012 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2014 udelay(40);
2016 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
2017 current_link_up == 1 &&
2018 tp->link_config.active_speed == SPEED_1000 &&
2019 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ||
2020 (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED))) {
2021 udelay(120);
2022 tw32_f(MAC_STATUS,
2023 (MAC_STATUS_SYNC_CHANGED |
2024 MAC_STATUS_CFG_CHANGED));
2025 udelay(40);
2026 tg3_write_mem(tp,
2027 NIC_SRAM_FIRMWARE_MBOX,
2028 NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
2031 if (current_link_up != netif_carrier_ok(tp->dev)) {
2032 if (current_link_up)
2033 netif_carrier_on(tp->dev);
2034 else
2035 netif_carrier_off(tp->dev);
2036 tg3_link_report(tp);
2039 return 0;
2042 struct tg3_fiber_aneginfo {
2043 int state;
2044 #define ANEG_STATE_UNKNOWN 0
2045 #define ANEG_STATE_AN_ENABLE 1
2046 #define ANEG_STATE_RESTART_INIT 2
2047 #define ANEG_STATE_RESTART 3
2048 #define ANEG_STATE_DISABLE_LINK_OK 4
2049 #define ANEG_STATE_ABILITY_DETECT_INIT 5
2050 #define ANEG_STATE_ABILITY_DETECT 6
2051 #define ANEG_STATE_ACK_DETECT_INIT 7
2052 #define ANEG_STATE_ACK_DETECT 8
2053 #define ANEG_STATE_COMPLETE_ACK_INIT 9
2054 #define ANEG_STATE_COMPLETE_ACK 10
2055 #define ANEG_STATE_IDLE_DETECT_INIT 11
2056 #define ANEG_STATE_IDLE_DETECT 12
2057 #define ANEG_STATE_LINK_OK 13
2058 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14
2059 #define ANEG_STATE_NEXT_PAGE_WAIT 15
2061 u32 flags;
2062 #define MR_AN_ENABLE 0x00000001
2063 #define MR_RESTART_AN 0x00000002
2064 #define MR_AN_COMPLETE 0x00000004
2065 #define MR_PAGE_RX 0x00000008
2066 #define MR_NP_LOADED 0x00000010
2067 #define MR_TOGGLE_TX 0x00000020
2068 #define MR_LP_ADV_FULL_DUPLEX 0x00000040
2069 #define MR_LP_ADV_HALF_DUPLEX 0x00000080
2070 #define MR_LP_ADV_SYM_PAUSE 0x00000100
2071 #define MR_LP_ADV_ASYM_PAUSE 0x00000200
2072 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400
2073 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800
2074 #define MR_LP_ADV_NEXT_PAGE 0x00001000
2075 #define MR_TOGGLE_RX 0x00002000
2076 #define MR_NP_RX 0x00004000
2078 #define MR_LINK_OK 0x80000000
2080 unsigned long link_time, cur_time;
2082 u32 ability_match_cfg;
2083 int ability_match_count;
2085 char ability_match, idle_match, ack_match;
2087 u32 txconfig, rxconfig;
2088 #define ANEG_CFG_NP 0x00000080
2089 #define ANEG_CFG_ACK 0x00000040
2090 #define ANEG_CFG_RF2 0x00000020
2091 #define ANEG_CFG_RF1 0x00000010
2092 #define ANEG_CFG_PS2 0x00000001
2093 #define ANEG_CFG_PS1 0x00008000
2094 #define ANEG_CFG_HD 0x00004000
2095 #define ANEG_CFG_FD 0x00002000
2096 #define ANEG_CFG_INVAL 0x00001f06
2099 #define ANEG_OK 0
2100 #define ANEG_DONE 1
2101 #define ANEG_TIMER_ENAB 2
2102 #define ANEG_FAILED -1
2104 #define ANEG_STATE_SETTLE_TIME 10000
2106 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
2107 struct tg3_fiber_aneginfo *ap)
2109 unsigned long delta;
2110 u32 rx_cfg_reg;
2111 int ret;
2113 if (ap->state == ANEG_STATE_UNKNOWN) {
2114 ap->rxconfig = 0;
2115 ap->link_time = 0;
2116 ap->cur_time = 0;
2117 ap->ability_match_cfg = 0;
2118 ap->ability_match_count = 0;
2119 ap->ability_match = 0;
2120 ap->idle_match = 0;
2121 ap->ack_match = 0;
2123 ap->cur_time++;
2125 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
2126 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
2128 if (rx_cfg_reg != ap->ability_match_cfg) {
2129 ap->ability_match_cfg = rx_cfg_reg;
2130 ap->ability_match = 0;
2131 ap->ability_match_count = 0;
2132 } else {
2133 if (++ap->ability_match_count > 1) {
2134 ap->ability_match = 1;
2135 ap->ability_match_cfg = rx_cfg_reg;
2138 if (rx_cfg_reg & ANEG_CFG_ACK)
2139 ap->ack_match = 1;
2140 else
2141 ap->ack_match = 0;
2143 ap->idle_match = 0;
2144 } else {
2145 ap->idle_match = 1;
2146 ap->ability_match_cfg = 0;
2147 ap->ability_match_count = 0;
2148 ap->ability_match = 0;
2149 ap->ack_match = 0;
2151 rx_cfg_reg = 0;
2154 ap->rxconfig = rx_cfg_reg;
2155 ret = ANEG_OK;
2157 switch(ap->state) {
2158 case ANEG_STATE_UNKNOWN:
2159 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
2160 ap->state = ANEG_STATE_AN_ENABLE;
2162 /* fallthru */
2163 case ANEG_STATE_AN_ENABLE:
2164 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
2165 if (ap->flags & MR_AN_ENABLE) {
2166 ap->link_time = 0;
2167 ap->cur_time = 0;
2168 ap->ability_match_cfg = 0;
2169 ap->ability_match_count = 0;
2170 ap->ability_match = 0;
2171 ap->idle_match = 0;
2172 ap->ack_match = 0;
2174 ap->state = ANEG_STATE_RESTART_INIT;
2175 } else {
2176 ap->state = ANEG_STATE_DISABLE_LINK_OK;
2178 break;
2180 case ANEG_STATE_RESTART_INIT:
2181 ap->link_time = ap->cur_time;
2182 ap->flags &= ~(MR_NP_LOADED);
2183 ap->txconfig = 0;
2184 tw32(MAC_TX_AUTO_NEG, 0);
2185 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2186 tw32_f(MAC_MODE, tp->mac_mode);
2187 udelay(40);
2189 ret = ANEG_TIMER_ENAB;
2190 ap->state = ANEG_STATE_RESTART;
2192 /* fallthru */
2193 case ANEG_STATE_RESTART:
2194 delta = ap->cur_time - ap->link_time;
2195 if (delta > ANEG_STATE_SETTLE_TIME) {
2196 ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
2197 } else {
2198 ret = ANEG_TIMER_ENAB;
2200 break;
2202 case ANEG_STATE_DISABLE_LINK_OK:
2203 ret = ANEG_DONE;
2204 break;
2206 case ANEG_STATE_ABILITY_DETECT_INIT:
2207 ap->flags &= ~(MR_TOGGLE_TX);
2208 ap->txconfig = (ANEG_CFG_FD | ANEG_CFG_PS1);
2209 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
2210 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2211 tw32_f(MAC_MODE, tp->mac_mode);
2212 udelay(40);
2214 ap->state = ANEG_STATE_ABILITY_DETECT;
2215 break;
2217 case ANEG_STATE_ABILITY_DETECT:
2218 if (ap->ability_match != 0 && ap->rxconfig != 0) {
2219 ap->state = ANEG_STATE_ACK_DETECT_INIT;
2221 break;
2223 case ANEG_STATE_ACK_DETECT_INIT:
2224 ap->txconfig |= ANEG_CFG_ACK;
2225 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
2226 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2227 tw32_f(MAC_MODE, tp->mac_mode);
2228 udelay(40);
2230 ap->state = ANEG_STATE_ACK_DETECT;
2232 /* fallthru */
2233 case ANEG_STATE_ACK_DETECT:
2234 if (ap->ack_match != 0) {
2235 if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
2236 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
2237 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
2238 } else {
2239 ap->state = ANEG_STATE_AN_ENABLE;
2241 } else if (ap->ability_match != 0 &&
2242 ap->rxconfig == 0) {
2243 ap->state = ANEG_STATE_AN_ENABLE;
2245 break;
2247 case ANEG_STATE_COMPLETE_ACK_INIT:
2248 if (ap->rxconfig & ANEG_CFG_INVAL) {
2249 ret = ANEG_FAILED;
2250 break;
2252 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
2253 MR_LP_ADV_HALF_DUPLEX |
2254 MR_LP_ADV_SYM_PAUSE |
2255 MR_LP_ADV_ASYM_PAUSE |
2256 MR_LP_ADV_REMOTE_FAULT1 |
2257 MR_LP_ADV_REMOTE_FAULT2 |
2258 MR_LP_ADV_NEXT_PAGE |
2259 MR_TOGGLE_RX |
2260 MR_NP_RX);
2261 if (ap->rxconfig & ANEG_CFG_FD)
2262 ap->flags |= MR_LP_ADV_FULL_DUPLEX;
2263 if (ap->rxconfig & ANEG_CFG_HD)
2264 ap->flags |= MR_LP_ADV_HALF_DUPLEX;
2265 if (ap->rxconfig & ANEG_CFG_PS1)
2266 ap->flags |= MR_LP_ADV_SYM_PAUSE;
2267 if (ap->rxconfig & ANEG_CFG_PS2)
2268 ap->flags |= MR_LP_ADV_ASYM_PAUSE;
2269 if (ap->rxconfig & ANEG_CFG_RF1)
2270 ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
2271 if (ap->rxconfig & ANEG_CFG_RF2)
2272 ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
2273 if (ap->rxconfig & ANEG_CFG_NP)
2274 ap->flags |= MR_LP_ADV_NEXT_PAGE;
2276 ap->link_time = ap->cur_time;
2278 ap->flags ^= (MR_TOGGLE_TX);
2279 if (ap->rxconfig & 0x0008)
2280 ap->flags |= MR_TOGGLE_RX;
2281 if (ap->rxconfig & ANEG_CFG_NP)
2282 ap->flags |= MR_NP_RX;
2283 ap->flags |= MR_PAGE_RX;
2285 ap->state = ANEG_STATE_COMPLETE_ACK;
2286 ret = ANEG_TIMER_ENAB;
2287 break;
2289 case ANEG_STATE_COMPLETE_ACK:
2290 if (ap->ability_match != 0 &&
2291 ap->rxconfig == 0) {
2292 ap->state = ANEG_STATE_AN_ENABLE;
2293 break;
2295 delta = ap->cur_time - ap->link_time;
2296 if (delta > ANEG_STATE_SETTLE_TIME) {
2297 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
2298 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
2299 } else {
2300 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
2301 !(ap->flags & MR_NP_RX)) {
2302 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
2303 } else {
2304 ret = ANEG_FAILED;
2308 break;
2310 case ANEG_STATE_IDLE_DETECT_INIT:
2311 ap->link_time = ap->cur_time;
2312 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
2313 tw32_f(MAC_MODE, tp->mac_mode);
2314 udelay(40);
2316 ap->state = ANEG_STATE_IDLE_DETECT;
2317 ret = ANEG_TIMER_ENAB;
2318 break;
2320 case ANEG_STATE_IDLE_DETECT:
2321 if (ap->ability_match != 0 &&
2322 ap->rxconfig == 0) {
2323 ap->state = ANEG_STATE_AN_ENABLE;
2324 break;
2326 delta = ap->cur_time - ap->link_time;
2327 if (delta > ANEG_STATE_SETTLE_TIME) {
2328 /* XXX another gem from the Broadcom driver :( */
2329 ap->state = ANEG_STATE_LINK_OK;
2331 break;
2333 case ANEG_STATE_LINK_OK:
2334 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
2335 ret = ANEG_DONE;
2336 break;
2338 case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
2339 /* ??? unimplemented */
2340 break;
2342 case ANEG_STATE_NEXT_PAGE_WAIT:
2343 /* ??? unimplemented */
2344 break;
2346 default:
2347 ret = ANEG_FAILED;
2348 break;
2351 return ret;
2354 static int fiber_autoneg(struct tg3 *tp, u32 *flags)
2356 int res = 0;
2357 struct tg3_fiber_aneginfo aninfo;
2358 int status = ANEG_FAILED;
2359 unsigned int tick;
2360 u32 tmp;
2362 tw32_f(MAC_TX_AUTO_NEG, 0);
2364 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
2365 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
2366 udelay(40);
2368 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
2369 udelay(40);
2371 memset(&aninfo, 0, sizeof(aninfo));
2372 aninfo.flags |= MR_AN_ENABLE;
2373 aninfo.state = ANEG_STATE_UNKNOWN;
2374 aninfo.cur_time = 0;
2375 tick = 0;
2376 while (++tick < 195000) {
2377 status = tg3_fiber_aneg_smachine(tp, &aninfo);
2378 if (status == ANEG_DONE || status == ANEG_FAILED)
2379 break;
2381 udelay(1);
2384 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
2385 tw32_f(MAC_MODE, tp->mac_mode);
2386 udelay(40);
2388 *flags = aninfo.flags;
2390 if (status == ANEG_DONE &&
2391 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
2392 MR_LP_ADV_FULL_DUPLEX)))
2393 res = 1;
2395 return res;
2398 static void tg3_init_bcm8002(struct tg3 *tp)
2400 u32 mac_status = tr32(MAC_STATUS);
2401 int i;
2403 /* Reset when initting first time or we have a link. */
2404 if ((tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) &&
2405 !(mac_status & MAC_STATUS_PCS_SYNCED))
2406 return;
2408 /* Set PLL lock range. */
2409 tg3_writephy(tp, 0x16, 0x8007);
2411 /* SW reset */
2412 tg3_writephy(tp, MII_BMCR, BMCR_RESET);
2414 /* Wait for reset to complete. */
2415 /* XXX schedule_timeout() ... */
2416 for (i = 0; i < 500; i++)
2417 udelay(10);
2419 /* Config mode; select PMA/Ch 1 regs. */
2420 tg3_writephy(tp, 0x10, 0x8411);
2422 /* Enable auto-lock and comdet, select txclk for tx. */
2423 tg3_writephy(tp, 0x11, 0x0a10);
2425 tg3_writephy(tp, 0x18, 0x00a0);
2426 tg3_writephy(tp, 0x16, 0x41ff);
2428 /* Assert and deassert POR. */
2429 tg3_writephy(tp, 0x13, 0x0400);
2430 udelay(40);
2431 tg3_writephy(tp, 0x13, 0x0000);
2433 tg3_writephy(tp, 0x11, 0x0a50);
2434 udelay(40);
2435 tg3_writephy(tp, 0x11, 0x0a10);
2437 /* Wait for signal to stabilize */
2438 /* XXX schedule_timeout() ... */
2439 for (i = 0; i < 15000; i++)
2440 udelay(10);
2442 /* Deselect the channel register so we can read the PHYID
2443 * later.
2445 tg3_writephy(tp, 0x10, 0x8011);
2448 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
2450 u32 sg_dig_ctrl, sg_dig_status;
2451 u32 serdes_cfg, expected_sg_dig_ctrl;
2452 int workaround, port_a;
2453 int current_link_up;
2455 serdes_cfg = 0;
2456 expected_sg_dig_ctrl = 0;
2457 workaround = 0;
2458 port_a = 1;
2459 current_link_up = 0;
2461 if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
2462 tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) {
2463 workaround = 1;
2464 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
2465 port_a = 0;
2467 /* preserve bits 0-11,13,14 for signal pre-emphasis */
2468 /* preserve bits 20-23 for voltage regulator */
2469 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
2472 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2474 if (tp->link_config.autoneg != AUTONEG_ENABLE) {
2475 if (sg_dig_ctrl & (1 << 31)) {
2476 if (workaround) {
2477 u32 val = serdes_cfg;
2479 if (port_a)
2480 val |= 0xc010000;
2481 else
2482 val |= 0x4010000;
2483 tw32_f(MAC_SERDES_CFG, val);
2485 tw32_f(SG_DIG_CTRL, 0x01388400);
2487 if (mac_status & MAC_STATUS_PCS_SYNCED) {
2488 tg3_setup_flow_control(tp, 0, 0);
2489 current_link_up = 1;
2491 goto out;
2494 /* Want auto-negotiation. */
2495 expected_sg_dig_ctrl = 0x81388400;
2497 /* Pause capability */
2498 expected_sg_dig_ctrl |= (1 << 11);
2500 /* Asymettric pause */
2501 expected_sg_dig_ctrl |= (1 << 12);
2503 if (sg_dig_ctrl != expected_sg_dig_ctrl) {
2504 if ((tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT) &&
2505 tp->serdes_counter &&
2506 ((mac_status & (MAC_STATUS_PCS_SYNCED |
2507 MAC_STATUS_RCVD_CFG)) ==
2508 MAC_STATUS_PCS_SYNCED)) {
2509 tp->serdes_counter--;
2510 current_link_up = 1;
2511 goto out;
2513 restart_autoneg:
2514 if (workaround)
2515 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
2516 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | (1 << 30));
2517 udelay(5);
2518 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
2520 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
2521 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2522 } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
2523 MAC_STATUS_SIGNAL_DET)) {
2524 sg_dig_status = tr32(SG_DIG_STATUS);
2525 mac_status = tr32(MAC_STATUS);
2527 if ((sg_dig_status & (1 << 1)) &&
2528 (mac_status & MAC_STATUS_PCS_SYNCED)) {
2529 u32 local_adv, remote_adv;
2531 local_adv = ADVERTISE_PAUSE_CAP;
2532 remote_adv = 0;
2533 if (sg_dig_status & (1 << 19))
2534 remote_adv |= LPA_PAUSE_CAP;
2535 if (sg_dig_status & (1 << 20))
2536 remote_adv |= LPA_PAUSE_ASYM;
2538 tg3_setup_flow_control(tp, local_adv, remote_adv);
2539 current_link_up = 1;
2540 tp->serdes_counter = 0;
2541 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2542 } else if (!(sg_dig_status & (1 << 1))) {
2543 if (tp->serdes_counter)
2544 tp->serdes_counter--;
2545 else {
2546 if (workaround) {
2547 u32 val = serdes_cfg;
2549 if (port_a)
2550 val |= 0xc010000;
2551 else
2552 val |= 0x4010000;
2554 tw32_f(MAC_SERDES_CFG, val);
2557 tw32_f(SG_DIG_CTRL, 0x01388400);
2558 udelay(40);
2560 /* Link parallel detection - link is up */
2561 /* only if we have PCS_SYNC and not */
2562 /* receiving config code words */
2563 mac_status = tr32(MAC_STATUS);
2564 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
2565 !(mac_status & MAC_STATUS_RCVD_CFG)) {
2566 tg3_setup_flow_control(tp, 0, 0);
2567 current_link_up = 1;
2568 tp->tg3_flags2 |=
2569 TG3_FLG2_PARALLEL_DETECT;
2570 tp->serdes_counter =
2571 SERDES_PARALLEL_DET_TIMEOUT;
2572 } else
2573 goto restart_autoneg;
2576 } else {
2577 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
2578 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2581 out:
2582 return current_link_up;
2585 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
2587 int current_link_up = 0;
2589 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) {
2590 tp->tg3_flags &= ~TG3_FLAG_GOT_SERDES_FLOWCTL;
2591 goto out;
2594 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2595 u32 flags;
2596 int i;
2598 if (fiber_autoneg(tp, &flags)) {
2599 u32 local_adv, remote_adv;
2601 local_adv = ADVERTISE_PAUSE_CAP;
2602 remote_adv = 0;
2603 if (flags & MR_LP_ADV_SYM_PAUSE)
2604 remote_adv |= LPA_PAUSE_CAP;
2605 if (flags & MR_LP_ADV_ASYM_PAUSE)
2606 remote_adv |= LPA_PAUSE_ASYM;
2608 tg3_setup_flow_control(tp, local_adv, remote_adv);
2610 tp->tg3_flags |= TG3_FLAG_GOT_SERDES_FLOWCTL;
2611 current_link_up = 1;
2613 for (i = 0; i < 30; i++) {
2614 udelay(20);
2615 tw32_f(MAC_STATUS,
2616 (MAC_STATUS_SYNC_CHANGED |
2617 MAC_STATUS_CFG_CHANGED));
2618 udelay(40);
2619 if ((tr32(MAC_STATUS) &
2620 (MAC_STATUS_SYNC_CHANGED |
2621 MAC_STATUS_CFG_CHANGED)) == 0)
2622 break;
2625 mac_status = tr32(MAC_STATUS);
2626 if (current_link_up == 0 &&
2627 (mac_status & MAC_STATUS_PCS_SYNCED) &&
2628 !(mac_status & MAC_STATUS_RCVD_CFG))
2629 current_link_up = 1;
2630 } else {
2631 /* Forcing 1000FD link up. */
2632 current_link_up = 1;
2633 tp->tg3_flags |= TG3_FLAG_GOT_SERDES_FLOWCTL;
2635 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
2636 udelay(40);
2639 out:
2640 return current_link_up;
2643 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
2645 u32 orig_pause_cfg;
2646 u16 orig_active_speed;
2647 u8 orig_active_duplex;
2648 u32 mac_status;
2649 int current_link_up;
2650 int i;
2652 orig_pause_cfg =
2653 (tp->tg3_flags & (TG3_FLAG_RX_PAUSE |
2654 TG3_FLAG_TX_PAUSE));
2655 orig_active_speed = tp->link_config.active_speed;
2656 orig_active_duplex = tp->link_config.active_duplex;
2658 if (!(tp->tg3_flags2 & TG3_FLG2_HW_AUTONEG) &&
2659 netif_carrier_ok(tp->dev) &&
2660 (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE)) {
2661 mac_status = tr32(MAC_STATUS);
2662 mac_status &= (MAC_STATUS_PCS_SYNCED |
2663 MAC_STATUS_SIGNAL_DET |
2664 MAC_STATUS_CFG_CHANGED |
2665 MAC_STATUS_RCVD_CFG);
2666 if (mac_status == (MAC_STATUS_PCS_SYNCED |
2667 MAC_STATUS_SIGNAL_DET)) {
2668 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
2669 MAC_STATUS_CFG_CHANGED));
2670 return 0;
2674 tw32_f(MAC_TX_AUTO_NEG, 0);
2676 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
2677 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
2678 tw32_f(MAC_MODE, tp->mac_mode);
2679 udelay(40);
2681 if (tp->phy_id == PHY_ID_BCM8002)
2682 tg3_init_bcm8002(tp);
2684 /* Enable link change event even when serdes polling. */
2685 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2686 udelay(40);
2688 current_link_up = 0;
2689 mac_status = tr32(MAC_STATUS);
2691 if (tp->tg3_flags2 & TG3_FLG2_HW_AUTONEG)
2692 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
2693 else
2694 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
2696 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
2697 tw32_f(MAC_MODE, tp->mac_mode);
2698 udelay(40);
2700 tp->hw_status->status =
2701 (SD_STATUS_UPDATED |
2702 (tp->hw_status->status & ~SD_STATUS_LINK_CHG));
2704 for (i = 0; i < 100; i++) {
2705 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
2706 MAC_STATUS_CFG_CHANGED));
2707 udelay(5);
2708 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
2709 MAC_STATUS_CFG_CHANGED |
2710 MAC_STATUS_LNKSTATE_CHANGED)) == 0)
2711 break;
2714 mac_status = tr32(MAC_STATUS);
2715 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
2716 current_link_up = 0;
2717 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2718 tp->serdes_counter == 0) {
2719 tw32_f(MAC_MODE, (tp->mac_mode |
2720 MAC_MODE_SEND_CONFIGS));
2721 udelay(1);
2722 tw32_f(MAC_MODE, tp->mac_mode);
2726 if (current_link_up == 1) {
2727 tp->link_config.active_speed = SPEED_1000;
2728 tp->link_config.active_duplex = DUPLEX_FULL;
2729 tw32(MAC_LED_CTRL, (tp->led_ctrl |
2730 LED_CTRL_LNKLED_OVERRIDE |
2731 LED_CTRL_1000MBPS_ON));
2732 } else {
2733 tp->link_config.active_speed = SPEED_INVALID;
2734 tp->link_config.active_duplex = DUPLEX_INVALID;
2735 tw32(MAC_LED_CTRL, (tp->led_ctrl |
2736 LED_CTRL_LNKLED_OVERRIDE |
2737 LED_CTRL_TRAFFIC_OVERRIDE));
2740 if (current_link_up != netif_carrier_ok(tp->dev)) {
2741 if (current_link_up)
2742 netif_carrier_on(tp->dev);
2743 else
2744 netif_carrier_off(tp->dev);
2745 tg3_link_report(tp);
2746 } else {
2747 u32 now_pause_cfg =
2748 tp->tg3_flags & (TG3_FLAG_RX_PAUSE |
2749 TG3_FLAG_TX_PAUSE);
2750 if (orig_pause_cfg != now_pause_cfg ||
2751 orig_active_speed != tp->link_config.active_speed ||
2752 orig_active_duplex != tp->link_config.active_duplex)
2753 tg3_link_report(tp);
2756 return 0;
2759 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
2761 int current_link_up, err = 0;
2762 u32 bmsr, bmcr;
2763 u16 current_speed;
2764 u8 current_duplex;
2766 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
2767 tw32_f(MAC_MODE, tp->mac_mode);
2768 udelay(40);
2770 tw32(MAC_EVENT, 0);
2772 tw32_f(MAC_STATUS,
2773 (MAC_STATUS_SYNC_CHANGED |
2774 MAC_STATUS_CFG_CHANGED |
2775 MAC_STATUS_MI_COMPLETION |
2776 MAC_STATUS_LNKSTATE_CHANGED));
2777 udelay(40);
2779 if (force_reset)
2780 tg3_phy_reset(tp);
2782 current_link_up = 0;
2783 current_speed = SPEED_INVALID;
2784 current_duplex = DUPLEX_INVALID;
2786 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
2787 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
2788 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
2789 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
2790 bmsr |= BMSR_LSTATUS;
2791 else
2792 bmsr &= ~BMSR_LSTATUS;
2795 err |= tg3_readphy(tp, MII_BMCR, &bmcr);
2797 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
2798 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) {
2799 /* do nothing, just check for link up at the end */
2800 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2801 u32 adv, new_adv;
2803 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
2804 new_adv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
2805 ADVERTISE_1000XPAUSE |
2806 ADVERTISE_1000XPSE_ASYM |
2807 ADVERTISE_SLCT);
2809 /* Always advertise symmetric PAUSE just like copper */
2810 new_adv |= ADVERTISE_1000XPAUSE;
2812 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half)
2813 new_adv |= ADVERTISE_1000XHALF;
2814 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full)
2815 new_adv |= ADVERTISE_1000XFULL;
2817 if ((new_adv != adv) || !(bmcr & BMCR_ANENABLE)) {
2818 tg3_writephy(tp, MII_ADVERTISE, new_adv);
2819 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
2820 tg3_writephy(tp, MII_BMCR, bmcr);
2822 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2823 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
2824 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2826 return err;
2828 } else {
2829 u32 new_bmcr;
2831 bmcr &= ~BMCR_SPEED1000;
2832 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
2834 if (tp->link_config.duplex == DUPLEX_FULL)
2835 new_bmcr |= BMCR_FULLDPLX;
2837 if (new_bmcr != bmcr) {
2838 /* BMCR_SPEED1000 is a reserved bit that needs
2839 * to be set on write.
2841 new_bmcr |= BMCR_SPEED1000;
2843 /* Force a linkdown */
2844 if (netif_carrier_ok(tp->dev)) {
2845 u32 adv;
2847 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
2848 adv &= ~(ADVERTISE_1000XFULL |
2849 ADVERTISE_1000XHALF |
2850 ADVERTISE_SLCT);
2851 tg3_writephy(tp, MII_ADVERTISE, adv);
2852 tg3_writephy(tp, MII_BMCR, bmcr |
2853 BMCR_ANRESTART |
2854 BMCR_ANENABLE);
2855 udelay(10);
2856 netif_carrier_off(tp->dev);
2858 tg3_writephy(tp, MII_BMCR, new_bmcr);
2859 bmcr = new_bmcr;
2860 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
2861 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
2862 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
2863 ASIC_REV_5714) {
2864 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
2865 bmsr |= BMSR_LSTATUS;
2866 else
2867 bmsr &= ~BMSR_LSTATUS;
2869 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2873 if (bmsr & BMSR_LSTATUS) {
2874 current_speed = SPEED_1000;
2875 current_link_up = 1;
2876 if (bmcr & BMCR_FULLDPLX)
2877 current_duplex = DUPLEX_FULL;
2878 else
2879 current_duplex = DUPLEX_HALF;
2881 if (bmcr & BMCR_ANENABLE) {
2882 u32 local_adv, remote_adv, common;
2884 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
2885 err |= tg3_readphy(tp, MII_LPA, &remote_adv);
2886 common = local_adv & remote_adv;
2887 if (common & (ADVERTISE_1000XHALF |
2888 ADVERTISE_1000XFULL)) {
2889 if (common & ADVERTISE_1000XFULL)
2890 current_duplex = DUPLEX_FULL;
2891 else
2892 current_duplex = DUPLEX_HALF;
2894 tg3_setup_flow_control(tp, local_adv,
2895 remote_adv);
2897 else
2898 current_link_up = 0;
2902 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
2903 if (tp->link_config.active_duplex == DUPLEX_HALF)
2904 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
2906 tw32_f(MAC_MODE, tp->mac_mode);
2907 udelay(40);
2909 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2911 tp->link_config.active_speed = current_speed;
2912 tp->link_config.active_duplex = current_duplex;
2914 if (current_link_up != netif_carrier_ok(tp->dev)) {
2915 if (current_link_up)
2916 netif_carrier_on(tp->dev);
2917 else {
2918 netif_carrier_off(tp->dev);
2919 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2921 tg3_link_report(tp);
2923 return err;
2926 static void tg3_serdes_parallel_detect(struct tg3 *tp)
2928 if (tp->serdes_counter) {
2929 /* Give autoneg time to complete. */
2930 tp->serdes_counter--;
2931 return;
2933 if (!netif_carrier_ok(tp->dev) &&
2934 (tp->link_config.autoneg == AUTONEG_ENABLE)) {
2935 u32 bmcr;
2937 tg3_readphy(tp, MII_BMCR, &bmcr);
2938 if (bmcr & BMCR_ANENABLE) {
2939 u32 phy1, phy2;
2941 /* Select shadow register 0x1f */
2942 tg3_writephy(tp, 0x1c, 0x7c00);
2943 tg3_readphy(tp, 0x1c, &phy1);
2945 /* Select expansion interrupt status register */
2946 tg3_writephy(tp, 0x17, 0x0f01);
2947 tg3_readphy(tp, 0x15, &phy2);
2948 tg3_readphy(tp, 0x15, &phy2);
2950 if ((phy1 & 0x10) && !(phy2 & 0x20)) {
2951 /* We have signal detect and not receiving
2952 * config code words, link is up by parallel
2953 * detection.
2956 bmcr &= ~BMCR_ANENABLE;
2957 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
2958 tg3_writephy(tp, MII_BMCR, bmcr);
2959 tp->tg3_flags2 |= TG3_FLG2_PARALLEL_DETECT;
2963 else if (netif_carrier_ok(tp->dev) &&
2964 (tp->link_config.autoneg == AUTONEG_ENABLE) &&
2965 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) {
2966 u32 phy2;
2968 /* Select expansion interrupt status register */
2969 tg3_writephy(tp, 0x17, 0x0f01);
2970 tg3_readphy(tp, 0x15, &phy2);
2971 if (phy2 & 0x20) {
2972 u32 bmcr;
2974 /* Config code words received, turn on autoneg. */
2975 tg3_readphy(tp, MII_BMCR, &bmcr);
2976 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
2978 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2984 static int tg3_setup_phy(struct tg3 *tp, int force_reset)
2986 int err;
2988 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
2989 err = tg3_setup_fiber_phy(tp, force_reset);
2990 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
2991 err = tg3_setup_fiber_mii_phy(tp, force_reset);
2992 } else {
2993 err = tg3_setup_copper_phy(tp, force_reset);
2996 if (tp->link_config.active_speed == SPEED_1000 &&
2997 tp->link_config.active_duplex == DUPLEX_HALF)
2998 tw32(MAC_TX_LENGTHS,
2999 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
3000 (6 << TX_LENGTHS_IPG_SHIFT) |
3001 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
3002 else
3003 tw32(MAC_TX_LENGTHS,
3004 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
3005 (6 << TX_LENGTHS_IPG_SHIFT) |
3006 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
3008 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
3009 if (netif_carrier_ok(tp->dev)) {
3010 tw32(HOSTCC_STAT_COAL_TICKS,
3011 tp->coal.stats_block_coalesce_usecs);
3012 } else {
3013 tw32(HOSTCC_STAT_COAL_TICKS, 0);
3017 return err;
3020 /* This is called whenever we suspect that the system chipset is re-
3021 * ordering the sequence of MMIO to the tx send mailbox. The symptom
3022 * is bogus tx completions. We try to recover by setting the
3023 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
3024 * in the workqueue.
3026 static void tg3_tx_recover(struct tg3 *tp)
3028 BUG_ON((tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) ||
3029 tp->write32_tx_mbox == tg3_write_indirect_mbox);
3031 printk(KERN_WARNING PFX "%s: The system may be re-ordering memory-"
3032 "mapped I/O cycles to the network device, attempting to "
3033 "recover. Please report the problem to the driver maintainer "
3034 "and include system chipset information.\n", tp->dev->name);
3036 spin_lock(&tp->lock);
3037 tp->tg3_flags |= TG3_FLAG_TX_RECOVERY_PENDING;
3038 spin_unlock(&tp->lock);
3041 static inline u32 tg3_tx_avail(struct tg3 *tp)
3043 smp_mb();
3044 return (tp->tx_pending -
3045 ((tp->tx_prod - tp->tx_cons) & (TG3_TX_RING_SIZE - 1)));
3048 /* Tigon3 never reports partial packet sends. So we do not
3049 * need special logic to handle SKBs that have not had all
3050 * of their frags sent yet, like SunGEM does.
3052 static void tg3_tx(struct tg3 *tp)
3054 u32 hw_idx = tp->hw_status->idx[0].tx_consumer;
3055 u32 sw_idx = tp->tx_cons;
3057 while (sw_idx != hw_idx) {
3058 struct tx_ring_info *ri = &tp->tx_buffers[sw_idx];
3059 struct sk_buff *skb = ri->skb;
3060 int i, tx_bug = 0;
3062 if (unlikely(skb == NULL)) {
3063 tg3_tx_recover(tp);
3064 return;
3067 pci_unmap_single(tp->pdev,
3068 pci_unmap_addr(ri, mapping),
3069 skb_headlen(skb),
3070 PCI_DMA_TODEVICE);
3072 ri->skb = NULL;
3074 sw_idx = NEXT_TX(sw_idx);
3076 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
3077 ri = &tp->tx_buffers[sw_idx];
3078 if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
3079 tx_bug = 1;
3081 pci_unmap_page(tp->pdev,
3082 pci_unmap_addr(ri, mapping),
3083 skb_shinfo(skb)->frags[i].size,
3084 PCI_DMA_TODEVICE);
3086 sw_idx = NEXT_TX(sw_idx);
3089 dev_kfree_skb(skb);
3091 if (unlikely(tx_bug)) {
3092 tg3_tx_recover(tp);
3093 return;
3097 tp->tx_cons = sw_idx;
3099 /* Need to make the tx_cons update visible to tg3_start_xmit()
3100 * before checking for netif_queue_stopped(). Without the
3101 * memory barrier, there is a small possibility that tg3_start_xmit()
3102 * will miss it and cause the queue to be stopped forever.
3104 smp_mb();
3106 if (unlikely(netif_queue_stopped(tp->dev) &&
3107 (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp)))) {
3108 netif_tx_lock(tp->dev);
3109 if (netif_queue_stopped(tp->dev) &&
3110 (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp)))
3111 netif_wake_queue(tp->dev);
3112 netif_tx_unlock(tp->dev);
3116 /* Returns size of skb allocated or < 0 on error.
3118 * We only need to fill in the address because the other members
3119 * of the RX descriptor are invariant, see tg3_init_rings.
3121 * Note the purposeful assymetry of cpu vs. chip accesses. For
3122 * posting buffers we only dirty the first cache line of the RX
3123 * descriptor (containing the address). Whereas for the RX status
3124 * buffers the cpu only reads the last cacheline of the RX descriptor
3125 * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
3127 static int tg3_alloc_rx_skb(struct tg3 *tp, u32 opaque_key,
3128 int src_idx, u32 dest_idx_unmasked)
3130 struct tg3_rx_buffer_desc *desc;
3131 struct ring_info *map, *src_map;
3132 struct sk_buff *skb;
3133 dma_addr_t mapping;
3134 int skb_size, dest_idx;
3136 src_map = NULL;
3137 switch (opaque_key) {
3138 case RXD_OPAQUE_RING_STD:
3139 dest_idx = dest_idx_unmasked % TG3_RX_RING_SIZE;
3140 desc = &tp->rx_std[dest_idx];
3141 map = &tp->rx_std_buffers[dest_idx];
3142 if (src_idx >= 0)
3143 src_map = &tp->rx_std_buffers[src_idx];
3144 skb_size = tp->rx_pkt_buf_sz;
3145 break;
3147 case RXD_OPAQUE_RING_JUMBO:
3148 dest_idx = dest_idx_unmasked % TG3_RX_JUMBO_RING_SIZE;
3149 desc = &tp->rx_jumbo[dest_idx];
3150 map = &tp->rx_jumbo_buffers[dest_idx];
3151 if (src_idx >= 0)
3152 src_map = &tp->rx_jumbo_buffers[src_idx];
3153 skb_size = RX_JUMBO_PKT_BUF_SZ;
3154 break;
3156 default:
3157 return -EINVAL;
3160 /* Do not overwrite any of the map or rp information
3161 * until we are sure we can commit to a new buffer.
3163 * Callers depend upon this behavior and assume that
3164 * we leave everything unchanged if we fail.
3166 skb = netdev_alloc_skb(tp->dev, skb_size);
3167 if (skb == NULL)
3168 return -ENOMEM;
3170 skb_reserve(skb, tp->rx_offset);
3172 mapping = pci_map_single(tp->pdev, skb->data,
3173 skb_size - tp->rx_offset,
3174 PCI_DMA_FROMDEVICE);
3176 map->skb = skb;
3177 pci_unmap_addr_set(map, mapping, mapping);
3179 if (src_map != NULL)
3180 src_map->skb = NULL;
3182 desc->addr_hi = ((u64)mapping >> 32);
3183 desc->addr_lo = ((u64)mapping & 0xffffffff);
3185 return skb_size;
3188 /* We only need to move over in the address because the other
3189 * members of the RX descriptor are invariant. See notes above
3190 * tg3_alloc_rx_skb for full details.
3192 static void tg3_recycle_rx(struct tg3 *tp, u32 opaque_key,
3193 int src_idx, u32 dest_idx_unmasked)
3195 struct tg3_rx_buffer_desc *src_desc, *dest_desc;
3196 struct ring_info *src_map, *dest_map;
3197 int dest_idx;
3199 switch (opaque_key) {
3200 case RXD_OPAQUE_RING_STD:
3201 dest_idx = dest_idx_unmasked % TG3_RX_RING_SIZE;
3202 dest_desc = &tp->rx_std[dest_idx];
3203 dest_map = &tp->rx_std_buffers[dest_idx];
3204 src_desc = &tp->rx_std[src_idx];
3205 src_map = &tp->rx_std_buffers[src_idx];
3206 break;
3208 case RXD_OPAQUE_RING_JUMBO:
3209 dest_idx = dest_idx_unmasked % TG3_RX_JUMBO_RING_SIZE;
3210 dest_desc = &tp->rx_jumbo[dest_idx];
3211 dest_map = &tp->rx_jumbo_buffers[dest_idx];
3212 src_desc = &tp->rx_jumbo[src_idx];
3213 src_map = &tp->rx_jumbo_buffers[src_idx];
3214 break;
3216 default:
3217 return;
3220 dest_map->skb = src_map->skb;
3221 pci_unmap_addr_set(dest_map, mapping,
3222 pci_unmap_addr(src_map, mapping));
3223 dest_desc->addr_hi = src_desc->addr_hi;
3224 dest_desc->addr_lo = src_desc->addr_lo;
3226 src_map->skb = NULL;
3229 #if TG3_VLAN_TAG_USED
3230 static int tg3_vlan_rx(struct tg3 *tp, struct sk_buff *skb, u16 vlan_tag)
3232 return vlan_hwaccel_receive_skb(skb, tp->vlgrp, vlan_tag);
3234 #endif
3236 /* The RX ring scheme is composed of multiple rings which post fresh
3237 * buffers to the chip, and one special ring the chip uses to report
3238 * status back to the host.
3240 * The special ring reports the status of received packets to the
3241 * host. The chip does not write into the original descriptor the
3242 * RX buffer was obtained from. The chip simply takes the original
3243 * descriptor as provided by the host, updates the status and length
3244 * field, then writes this into the next status ring entry.
3246 * Each ring the host uses to post buffers to the chip is described
3247 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives,
3248 * it is first placed into the on-chip ram. When the packet's length
3249 * is known, it walks down the TG3_BDINFO entries to select the ring.
3250 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
3251 * which is within the range of the new packet's length is chosen.
3253 * The "separate ring for rx status" scheme may sound queer, but it makes
3254 * sense from a cache coherency perspective. If only the host writes
3255 * to the buffer post rings, and only the chip writes to the rx status
3256 * rings, then cache lines never move beyond shared-modified state.
3257 * If both the host and chip were to write into the same ring, cache line
3258 * eviction could occur since both entities want it in an exclusive state.
3260 static int tg3_rx(struct tg3 *tp, int budget)
3262 u32 work_mask, rx_std_posted = 0;
3263 u32 sw_idx = tp->rx_rcb_ptr;
3264 u16 hw_idx;
3265 int received;
3267 hw_idx = tp->hw_status->idx[0].rx_producer;
3269 * We need to order the read of hw_idx and the read of
3270 * the opaque cookie.
3272 rmb();
3273 work_mask = 0;
3274 received = 0;
3275 while (sw_idx != hw_idx && budget > 0) {
3276 struct tg3_rx_buffer_desc *desc = &tp->rx_rcb[sw_idx];
3277 unsigned int len;
3278 struct sk_buff *skb;
3279 dma_addr_t dma_addr;
3280 u32 opaque_key, desc_idx, *post_ptr;
3282 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
3283 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
3284 if (opaque_key == RXD_OPAQUE_RING_STD) {
3285 dma_addr = pci_unmap_addr(&tp->rx_std_buffers[desc_idx],
3286 mapping);
3287 skb = tp->rx_std_buffers[desc_idx].skb;
3288 post_ptr = &tp->rx_std_ptr;
3289 rx_std_posted++;
3290 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
3291 dma_addr = pci_unmap_addr(&tp->rx_jumbo_buffers[desc_idx],
3292 mapping);
3293 skb = tp->rx_jumbo_buffers[desc_idx].skb;
3294 post_ptr = &tp->rx_jumbo_ptr;
3296 else {
3297 goto next_pkt_nopost;
3300 work_mask |= opaque_key;
3302 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
3303 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
3304 drop_it:
3305 tg3_recycle_rx(tp, opaque_key,
3306 desc_idx, *post_ptr);
3307 drop_it_no_recycle:
3308 /* Other statistics kept track of by card. */
3309 tp->net_stats.rx_dropped++;
3310 goto next_pkt;
3313 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4; /* omit crc */
3315 if (len > RX_COPY_THRESHOLD
3316 && tp->rx_offset == 2
3317 /* rx_offset != 2 iff this is a 5701 card running
3318 * in PCI-X mode [see tg3_get_invariants()] */
3320 int skb_size;
3322 skb_size = tg3_alloc_rx_skb(tp, opaque_key,
3323 desc_idx, *post_ptr);
3324 if (skb_size < 0)
3325 goto drop_it;
3327 pci_unmap_single(tp->pdev, dma_addr,
3328 skb_size - tp->rx_offset,
3329 PCI_DMA_FROMDEVICE);
3331 skb_put(skb, len);
3332 } else {
3333 struct sk_buff *copy_skb;
3335 tg3_recycle_rx(tp, opaque_key,
3336 desc_idx, *post_ptr);
3338 copy_skb = netdev_alloc_skb(tp->dev, len + 2);
3339 if (copy_skb == NULL)
3340 goto drop_it_no_recycle;
3342 skb_reserve(copy_skb, 2);
3343 skb_put(copy_skb, len);
3344 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
3345 memcpy(copy_skb->data, skb->data, len);
3346 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
3348 /* We'll reuse the original ring buffer. */
3349 skb = copy_skb;
3352 if ((tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) &&
3353 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
3354 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
3355 >> RXD_TCPCSUM_SHIFT) == 0xffff))
3356 skb->ip_summed = CHECKSUM_UNNECESSARY;
3357 else
3358 skb->ip_summed = CHECKSUM_NONE;
3360 skb->protocol = eth_type_trans(skb, tp->dev);
3361 #if TG3_VLAN_TAG_USED
3362 if (tp->vlgrp != NULL &&
3363 desc->type_flags & RXD_FLAG_VLAN) {
3364 tg3_vlan_rx(tp, skb,
3365 desc->err_vlan & RXD_VLAN_MASK);
3366 } else
3367 #endif
3368 netif_receive_skb(skb);
3370 tp->dev->last_rx = jiffies;
3371 received++;
3372 budget--;
3374 next_pkt:
3375 (*post_ptr)++;
3377 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
3378 u32 idx = *post_ptr % TG3_RX_RING_SIZE;
3380 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX +
3381 TG3_64BIT_REG_LOW, idx);
3382 work_mask &= ~RXD_OPAQUE_RING_STD;
3383 rx_std_posted = 0;
3385 next_pkt_nopost:
3386 sw_idx++;
3387 sw_idx %= TG3_RX_RCB_RING_SIZE(tp);
3389 /* Refresh hw_idx to see if there is new work */
3390 if (sw_idx == hw_idx) {
3391 hw_idx = tp->hw_status->idx[0].rx_producer;
3392 rmb();
3396 /* ACK the status ring. */
3397 tp->rx_rcb_ptr = sw_idx;
3398 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, sw_idx);
3400 /* Refill RX ring(s). */
3401 if (work_mask & RXD_OPAQUE_RING_STD) {
3402 sw_idx = tp->rx_std_ptr % TG3_RX_RING_SIZE;
3403 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW,
3404 sw_idx);
3406 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
3407 sw_idx = tp->rx_jumbo_ptr % TG3_RX_JUMBO_RING_SIZE;
3408 tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW,
3409 sw_idx);
3411 mmiowb();
3413 return received;
3416 static int tg3_poll(struct net_device *netdev, int *budget)
3418 struct tg3 *tp = netdev_priv(netdev);
3419 struct tg3_hw_status *sblk = tp->hw_status;
3420 int done;
3422 /* handle link change and other phy events */
3423 if (!(tp->tg3_flags &
3424 (TG3_FLAG_USE_LINKCHG_REG |
3425 TG3_FLAG_POLL_SERDES))) {
3426 if (sblk->status & SD_STATUS_LINK_CHG) {
3427 sblk->status = SD_STATUS_UPDATED |
3428 (sblk->status & ~SD_STATUS_LINK_CHG);
3429 spin_lock(&tp->lock);
3430 tg3_setup_phy(tp, 0);
3431 spin_unlock(&tp->lock);
3435 /* run TX completion thread */
3436 if (sblk->idx[0].tx_consumer != tp->tx_cons) {
3437 tg3_tx(tp);
3438 if (unlikely(tp->tg3_flags & TG3_FLAG_TX_RECOVERY_PENDING)) {
3439 netif_rx_complete(netdev);
3440 schedule_work(&tp->reset_task);
3441 return 0;
3445 /* run RX thread, within the bounds set by NAPI.
3446 * All RX "locking" is done by ensuring outside
3447 * code synchronizes with dev->poll()
3449 if (sblk->idx[0].rx_producer != tp->rx_rcb_ptr) {
3450 int orig_budget = *budget;
3451 int work_done;
3453 if (orig_budget > netdev->quota)
3454 orig_budget = netdev->quota;
3456 work_done = tg3_rx(tp, orig_budget);
3458 *budget -= work_done;
3459 netdev->quota -= work_done;
3462 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) {
3463 tp->last_tag = sblk->status_tag;
3464 rmb();
3465 } else
3466 sblk->status &= ~SD_STATUS_UPDATED;
3468 /* if no more work, tell net stack and NIC we're done */
3469 done = !tg3_has_work(tp);
3470 if (done) {
3471 netif_rx_complete(netdev);
3472 tg3_restart_ints(tp);
3475 return (done ? 0 : 1);
3478 static void tg3_irq_quiesce(struct tg3 *tp)
3480 BUG_ON(tp->irq_sync);
3482 tp->irq_sync = 1;
3483 smp_mb();
3485 synchronize_irq(tp->pdev->irq);
3488 static inline int tg3_irq_sync(struct tg3 *tp)
3490 return tp->irq_sync;
3493 /* Fully shutdown all tg3 driver activity elsewhere in the system.
3494 * If irq_sync is non-zero, then the IRQ handler must be synchronized
3495 * with as well. Most of the time, this is not necessary except when
3496 * shutting down the device.
3498 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
3500 if (irq_sync)
3501 tg3_irq_quiesce(tp);
3502 spin_lock_bh(&tp->lock);
3505 static inline void tg3_full_unlock(struct tg3 *tp)
3507 spin_unlock_bh(&tp->lock);
3510 /* One-shot MSI handler - Chip automatically disables interrupt
3511 * after sending MSI so driver doesn't have to do it.
3513 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
3515 struct net_device *dev = dev_id;
3516 struct tg3 *tp = netdev_priv(dev);
3518 prefetch(tp->hw_status);
3519 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3521 if (likely(!tg3_irq_sync(tp)))
3522 netif_rx_schedule(dev); /* schedule NAPI poll */
3524 return IRQ_HANDLED;
3527 /* MSI ISR - No need to check for interrupt sharing and no need to
3528 * flush status block and interrupt mailbox. PCI ordering rules
3529 * guarantee that MSI will arrive after the status block.
3531 static irqreturn_t tg3_msi(int irq, void *dev_id)
3533 struct net_device *dev = dev_id;
3534 struct tg3 *tp = netdev_priv(dev);
3536 prefetch(tp->hw_status);
3537 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3539 * Writing any value to intr-mbox-0 clears PCI INTA# and
3540 * chip-internal interrupt pending events.
3541 * Writing non-zero to intr-mbox-0 additional tells the
3542 * NIC to stop sending us irqs, engaging "in-intr-handler"
3543 * event coalescing.
3545 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
3546 if (likely(!tg3_irq_sync(tp)))
3547 netif_rx_schedule(dev); /* schedule NAPI poll */
3549 return IRQ_RETVAL(1);
3552 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
3554 struct net_device *dev = dev_id;
3555 struct tg3 *tp = netdev_priv(dev);
3556 struct tg3_hw_status *sblk = tp->hw_status;
3557 unsigned int handled = 1;
3559 /* In INTx mode, it is possible for the interrupt to arrive at
3560 * the CPU before the status block posted prior to the interrupt.
3561 * Reading the PCI State register will confirm whether the
3562 * interrupt is ours and will flush the status block.
3564 if ((sblk->status & SD_STATUS_UPDATED) ||
3565 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3567 * Writing any value to intr-mbox-0 clears PCI INTA# and
3568 * chip-internal interrupt pending events.
3569 * Writing non-zero to intr-mbox-0 additional tells the
3570 * NIC to stop sending us irqs, engaging "in-intr-handler"
3571 * event coalescing.
3573 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3574 0x00000001);
3575 if (tg3_irq_sync(tp))
3576 goto out;
3577 sblk->status &= ~SD_STATUS_UPDATED;
3578 if (likely(tg3_has_work(tp))) {
3579 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3580 netif_rx_schedule(dev); /* schedule NAPI poll */
3581 } else {
3582 /* No work, shared interrupt perhaps? re-enable
3583 * interrupts, and flush that PCI write
3585 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3586 0x00000000);
3588 } else { /* shared interrupt */
3589 handled = 0;
3591 out:
3592 return IRQ_RETVAL(handled);
3595 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
3597 struct net_device *dev = dev_id;
3598 struct tg3 *tp = netdev_priv(dev);
3599 struct tg3_hw_status *sblk = tp->hw_status;
3600 unsigned int handled = 1;
3602 /* In INTx mode, it is possible for the interrupt to arrive at
3603 * the CPU before the status block posted prior to the interrupt.
3604 * Reading the PCI State register will confirm whether the
3605 * interrupt is ours and will flush the status block.
3607 if ((sblk->status_tag != tp->last_tag) ||
3608 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3610 * writing any value to intr-mbox-0 clears PCI INTA# and
3611 * chip-internal interrupt pending events.
3612 * writing non-zero to intr-mbox-0 additional tells the
3613 * NIC to stop sending us irqs, engaging "in-intr-handler"
3614 * event coalescing.
3616 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3617 0x00000001);
3618 if (tg3_irq_sync(tp))
3619 goto out;
3620 if (netif_rx_schedule_prep(dev)) {
3621 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3622 /* Update last_tag to mark that this status has been
3623 * seen. Because interrupt may be shared, we may be
3624 * racing with tg3_poll(), so only update last_tag
3625 * if tg3_poll() is not scheduled.
3627 tp->last_tag = sblk->status_tag;
3628 __netif_rx_schedule(dev);
3630 } else { /* shared interrupt */
3631 handled = 0;
3633 out:
3634 return IRQ_RETVAL(handled);
3637 /* ISR for interrupt test */
3638 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
3640 struct net_device *dev = dev_id;
3641 struct tg3 *tp = netdev_priv(dev);
3642 struct tg3_hw_status *sblk = tp->hw_status;
3644 if ((sblk->status & SD_STATUS_UPDATED) ||
3645 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3646 tg3_disable_ints(tp);
3647 return IRQ_RETVAL(1);
3649 return IRQ_RETVAL(0);
3652 static int tg3_init_hw(struct tg3 *, int);
3653 static int tg3_halt(struct tg3 *, int, int);
3655 /* Restart hardware after configuration changes, self-test, etc.
3656 * Invoked with tp->lock held.
3658 static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
3660 int err;
3662 err = tg3_init_hw(tp, reset_phy);
3663 if (err) {
3664 printk(KERN_ERR PFX "%s: Failed to re-initialize device, "
3665 "aborting.\n", tp->dev->name);
3666 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
3667 tg3_full_unlock(tp);
3668 del_timer_sync(&tp->timer);
3669 tp->irq_sync = 0;
3670 netif_poll_enable(tp->dev);
3671 dev_close(tp->dev);
3672 tg3_full_lock(tp, 0);
3674 return err;
3677 #ifdef CONFIG_NET_POLL_CONTROLLER
3678 static void tg3_poll_controller(struct net_device *dev)
3680 struct tg3 *tp = netdev_priv(dev);
3682 tg3_interrupt(tp->pdev->irq, dev);
3684 #endif
3686 static void tg3_reset_task(struct work_struct *work)
3688 struct tg3 *tp = container_of(work, struct tg3, reset_task);
3689 unsigned int restart_timer;
3691 tg3_full_lock(tp, 0);
3692 tp->tg3_flags |= TG3_FLAG_IN_RESET_TASK;
3694 if (!netif_running(tp->dev)) {
3695 tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK;
3696 tg3_full_unlock(tp);
3697 return;
3700 tg3_full_unlock(tp);
3702 tg3_netif_stop(tp);
3704 tg3_full_lock(tp, 1);
3706 restart_timer = tp->tg3_flags2 & TG3_FLG2_RESTART_TIMER;
3707 tp->tg3_flags2 &= ~TG3_FLG2_RESTART_TIMER;
3709 if (tp->tg3_flags & TG3_FLAG_TX_RECOVERY_PENDING) {
3710 tp->write32_tx_mbox = tg3_write32_tx_mbox;
3711 tp->write32_rx_mbox = tg3_write_flush_reg32;
3712 tp->tg3_flags |= TG3_FLAG_MBOX_WRITE_REORDER;
3713 tp->tg3_flags &= ~TG3_FLAG_TX_RECOVERY_PENDING;
3716 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
3717 if (tg3_init_hw(tp, 1))
3718 goto out;
3720 tg3_netif_start(tp);
3722 if (restart_timer)
3723 mod_timer(&tp->timer, jiffies + 1);
3725 out:
3726 tp->tg3_flags &= ~TG3_FLAG_IN_RESET_TASK;
3728 tg3_full_unlock(tp);
3731 static void tg3_tx_timeout(struct net_device *dev)
3733 struct tg3 *tp = netdev_priv(dev);
3735 if (netif_msg_tx_err(tp))
3736 printk(KERN_ERR PFX "%s: transmit timed out, resetting\n",
3737 dev->name);
3739 schedule_work(&tp->reset_task);
3742 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
3743 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
3745 u32 base = (u32) mapping & 0xffffffff;
3747 return ((base > 0xffffdcc0) &&
3748 (base + len + 8 < base));
3751 /* Test for DMA addresses > 40-bit */
3752 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
3753 int len)
3755 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
3756 if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG)
3757 return (((u64) mapping + len) > DMA_40BIT_MASK);
3758 return 0;
3759 #else
3760 return 0;
3761 #endif
3764 static void tg3_set_txd(struct tg3 *, int, dma_addr_t, int, u32, u32);
3766 /* Workaround 4GB and 40-bit hardware DMA bugs. */
3767 static int tigon3_dma_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb,
3768 u32 last_plus_one, u32 *start,
3769 u32 base_flags, u32 mss)
3771 struct sk_buff *new_skb = skb_copy(skb, GFP_ATOMIC);
3772 dma_addr_t new_addr = 0;
3773 u32 entry = *start;
3774 int i, ret = 0;
3776 if (!new_skb) {
3777 ret = -1;
3778 } else {
3779 /* New SKB is guaranteed to be linear. */
3780 entry = *start;
3781 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
3782 PCI_DMA_TODEVICE);
3783 /* Make sure new skb does not cross any 4G boundaries.
3784 * Drop the packet if it does.
3786 if (tg3_4g_overflow_test(new_addr, new_skb->len)) {
3787 ret = -1;
3788 dev_kfree_skb(new_skb);
3789 new_skb = NULL;
3790 } else {
3791 tg3_set_txd(tp, entry, new_addr, new_skb->len,
3792 base_flags, 1 | (mss << 1));
3793 *start = NEXT_TX(entry);
3797 /* Now clean up the sw ring entries. */
3798 i = 0;
3799 while (entry != last_plus_one) {
3800 int len;
3802 if (i == 0)
3803 len = skb_headlen(skb);
3804 else
3805 len = skb_shinfo(skb)->frags[i-1].size;
3806 pci_unmap_single(tp->pdev,
3807 pci_unmap_addr(&tp->tx_buffers[entry], mapping),
3808 len, PCI_DMA_TODEVICE);
3809 if (i == 0) {
3810 tp->tx_buffers[entry].skb = new_skb;
3811 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, new_addr);
3812 } else {
3813 tp->tx_buffers[entry].skb = NULL;
3815 entry = NEXT_TX(entry);
3816 i++;
3819 dev_kfree_skb(skb);
3821 return ret;
3824 static void tg3_set_txd(struct tg3 *tp, int entry,
3825 dma_addr_t mapping, int len, u32 flags,
3826 u32 mss_and_is_end)
3828 struct tg3_tx_buffer_desc *txd = &tp->tx_ring[entry];
3829 int is_end = (mss_and_is_end & 0x1);
3830 u32 mss = (mss_and_is_end >> 1);
3831 u32 vlan_tag = 0;
3833 if (is_end)
3834 flags |= TXD_FLAG_END;
3835 if (flags & TXD_FLAG_VLAN) {
3836 vlan_tag = flags >> 16;
3837 flags &= 0xffff;
3839 vlan_tag |= (mss << TXD_MSS_SHIFT);
3841 txd->addr_hi = ((u64) mapping >> 32);
3842 txd->addr_lo = ((u64) mapping & 0xffffffff);
3843 txd->len_flags = (len << TXD_LEN_SHIFT) | flags;
3844 txd->vlan_tag = vlan_tag << TXD_VLAN_TAG_SHIFT;
3847 /* hard_start_xmit for devices that don't have any bugs and
3848 * support TG3_FLG2_HW_TSO_2 only.
3850 static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
3852 struct tg3 *tp = netdev_priv(dev);
3853 dma_addr_t mapping;
3854 u32 len, entry, base_flags, mss;
3856 len = skb_headlen(skb);
3858 /* We are running in BH disabled context with netif_tx_lock
3859 * and TX reclaim runs via tp->poll inside of a software
3860 * interrupt. Furthermore, IRQ processing runs lockless so we have
3861 * no IRQ context deadlocks to worry about either. Rejoice!
3863 if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
3864 if (!netif_queue_stopped(dev)) {
3865 netif_stop_queue(dev);
3867 /* This is a hard error, log it. */
3868 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when "
3869 "queue awake!\n", dev->name);
3871 return NETDEV_TX_BUSY;
3874 entry = tp->tx_prod;
3875 base_flags = 0;
3876 #if TG3_TSO_SUPPORT != 0
3877 mss = 0;
3878 if (skb->len > (tp->dev->mtu + ETH_HLEN) &&
3879 (mss = skb_shinfo(skb)->gso_size) != 0) {
3880 int tcp_opt_len, ip_tcp_len;
3882 if (skb_header_cloned(skb) &&
3883 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
3884 dev_kfree_skb(skb);
3885 goto out_unlock;
3888 if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
3889 mss |= (skb_headlen(skb) - ETH_HLEN) << 9;
3890 else {
3891 tcp_opt_len = ((skb->h.th->doff - 5) * 4);
3892 ip_tcp_len = (skb->nh.iph->ihl * 4) +
3893 sizeof(struct tcphdr);
3895 skb->nh.iph->check = 0;
3896 skb->nh.iph->tot_len = htons(mss + ip_tcp_len +
3897 tcp_opt_len);
3898 mss |= (ip_tcp_len + tcp_opt_len) << 9;
3901 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
3902 TXD_FLAG_CPU_POST_DMA);
3904 skb->h.th->check = 0;
3907 else if (skb->ip_summed == CHECKSUM_PARTIAL)
3908 base_flags |= TXD_FLAG_TCPUDP_CSUM;
3909 #else
3910 mss = 0;
3911 if (skb->ip_summed == CHECKSUM_PARTIAL)
3912 base_flags |= TXD_FLAG_TCPUDP_CSUM;
3913 #endif
3914 #if TG3_VLAN_TAG_USED
3915 if (tp->vlgrp != NULL && vlan_tx_tag_present(skb))
3916 base_flags |= (TXD_FLAG_VLAN |
3917 (vlan_tx_tag_get(skb) << 16));
3918 #endif
3920 /* Queue skb data, a.k.a. the main skb fragment. */
3921 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
3923 tp->tx_buffers[entry].skb = skb;
3924 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3926 tg3_set_txd(tp, entry, mapping, len, base_flags,
3927 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
3929 entry = NEXT_TX(entry);
3931 /* Now loop through additional data fragments, and queue them. */
3932 if (skb_shinfo(skb)->nr_frags > 0) {
3933 unsigned int i, last;
3935 last = skb_shinfo(skb)->nr_frags - 1;
3936 for (i = 0; i <= last; i++) {
3937 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
3939 len = frag->size;
3940 mapping = pci_map_page(tp->pdev,
3941 frag->page,
3942 frag->page_offset,
3943 len, PCI_DMA_TODEVICE);
3945 tp->tx_buffers[entry].skb = NULL;
3946 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
3948 tg3_set_txd(tp, entry, mapping, len,
3949 base_flags, (i == last) | (mss << 1));
3951 entry = NEXT_TX(entry);
3955 /* Packets are ready, update Tx producer idx local and on card. */
3956 tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
3958 tp->tx_prod = entry;
3959 if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
3960 netif_stop_queue(dev);
3961 if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp))
3962 netif_wake_queue(tp->dev);
3965 out_unlock:
3966 mmiowb();
3968 dev->trans_start = jiffies;
3970 return NETDEV_TX_OK;
3973 #if TG3_TSO_SUPPORT != 0
3974 static int tg3_start_xmit_dma_bug(struct sk_buff *, struct net_device *);
3976 /* Use GSO to workaround a rare TSO bug that may be triggered when the
3977 * TSO header is greater than 80 bytes.
3979 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
3981 struct sk_buff *segs, *nskb;
3983 /* Estimate the number of fragments in the worst case */
3984 if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->gso_segs * 3))) {
3985 netif_stop_queue(tp->dev);
3986 return NETDEV_TX_BUSY;
3989 segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
3990 if (unlikely(IS_ERR(segs)))
3991 goto tg3_tso_bug_end;
3993 do {
3994 nskb = segs;
3995 segs = segs->next;
3996 nskb->next = NULL;
3997 tg3_start_xmit_dma_bug(nskb, tp->dev);
3998 } while (segs);
4000 tg3_tso_bug_end:
4001 dev_kfree_skb(skb);
4003 return NETDEV_TX_OK;
4005 #endif
4007 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
4008 * support TG3_FLG2_HW_TSO_1 or firmware TSO only.
4010 static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
4012 struct tg3 *tp = netdev_priv(dev);
4013 dma_addr_t mapping;
4014 u32 len, entry, base_flags, mss;
4015 int would_hit_hwbug;
4017 len = skb_headlen(skb);
4019 /* We are running in BH disabled context with netif_tx_lock
4020 * and TX reclaim runs via tp->poll inside of a software
4021 * interrupt. Furthermore, IRQ processing runs lockless so we have
4022 * no IRQ context deadlocks to worry about either. Rejoice!
4024 if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
4025 if (!netif_queue_stopped(dev)) {
4026 netif_stop_queue(dev);
4028 /* This is a hard error, log it. */
4029 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when "
4030 "queue awake!\n", dev->name);
4032 return NETDEV_TX_BUSY;
4035 entry = tp->tx_prod;
4036 base_flags = 0;
4037 if (skb->ip_summed == CHECKSUM_PARTIAL)
4038 base_flags |= TXD_FLAG_TCPUDP_CSUM;
4039 #if TG3_TSO_SUPPORT != 0
4040 mss = 0;
4041 if (skb->len > (tp->dev->mtu + ETH_HLEN) &&
4042 (mss = skb_shinfo(skb)->gso_size) != 0) {
4043 int tcp_opt_len, ip_tcp_len, hdr_len;
4045 if (skb_header_cloned(skb) &&
4046 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
4047 dev_kfree_skb(skb);
4048 goto out_unlock;
4051 tcp_opt_len = ((skb->h.th->doff - 5) * 4);
4052 ip_tcp_len = (skb->nh.iph->ihl * 4) + sizeof(struct tcphdr);
4054 hdr_len = ip_tcp_len + tcp_opt_len;
4055 if (unlikely((ETH_HLEN + hdr_len) > 80) &&
4056 (tp->tg3_flags2 & TG3_FLG2_HW_TSO_1_BUG))
4057 return (tg3_tso_bug(tp, skb));
4059 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
4060 TXD_FLAG_CPU_POST_DMA);
4062 skb->nh.iph->check = 0;
4063 skb->nh.iph->tot_len = htons(mss + hdr_len);
4064 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
4065 skb->h.th->check = 0;
4066 base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
4068 else {
4069 skb->h.th->check =
4070 ~csum_tcpudp_magic(skb->nh.iph->saddr,
4071 skb->nh.iph->daddr,
4072 0, IPPROTO_TCP, 0);
4075 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO) ||
4076 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) {
4077 if (tcp_opt_len || skb->nh.iph->ihl > 5) {
4078 int tsflags;
4080 tsflags = ((skb->nh.iph->ihl - 5) +
4081 (tcp_opt_len >> 2));
4082 mss |= (tsflags << 11);
4084 } else {
4085 if (tcp_opt_len || skb->nh.iph->ihl > 5) {
4086 int tsflags;
4088 tsflags = ((skb->nh.iph->ihl - 5) +
4089 (tcp_opt_len >> 2));
4090 base_flags |= tsflags << 12;
4094 #else
4095 mss = 0;
4096 #endif
4097 #if TG3_VLAN_TAG_USED
4098 if (tp->vlgrp != NULL && vlan_tx_tag_present(skb))
4099 base_flags |= (TXD_FLAG_VLAN |
4100 (vlan_tx_tag_get(skb) << 16));
4101 #endif
4103 /* Queue skb data, a.k.a. the main skb fragment. */
4104 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
4106 tp->tx_buffers[entry].skb = skb;
4107 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4109 would_hit_hwbug = 0;
4111 if (tg3_4g_overflow_test(mapping, len))
4112 would_hit_hwbug = 1;
4114 tg3_set_txd(tp, entry, mapping, len, base_flags,
4115 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
4117 entry = NEXT_TX(entry);
4119 /* Now loop through additional data fragments, and queue them. */
4120 if (skb_shinfo(skb)->nr_frags > 0) {
4121 unsigned int i, last;
4123 last = skb_shinfo(skb)->nr_frags - 1;
4124 for (i = 0; i <= last; i++) {
4125 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4127 len = frag->size;
4128 mapping = pci_map_page(tp->pdev,
4129 frag->page,
4130 frag->page_offset,
4131 len, PCI_DMA_TODEVICE);
4133 tp->tx_buffers[entry].skb = NULL;
4134 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4136 if (tg3_4g_overflow_test(mapping, len))
4137 would_hit_hwbug = 1;
4139 if (tg3_40bit_overflow_test(tp, mapping, len))
4140 would_hit_hwbug = 1;
4142 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
4143 tg3_set_txd(tp, entry, mapping, len,
4144 base_flags, (i == last)|(mss << 1));
4145 else
4146 tg3_set_txd(tp, entry, mapping, len,
4147 base_flags, (i == last));
4149 entry = NEXT_TX(entry);
4153 if (would_hit_hwbug) {
4154 u32 last_plus_one = entry;
4155 u32 start;
4157 start = entry - 1 - skb_shinfo(skb)->nr_frags;
4158 start &= (TG3_TX_RING_SIZE - 1);
4160 /* If the workaround fails due to memory/mapping
4161 * failure, silently drop this packet.
4163 if (tigon3_dma_hwbug_workaround(tp, skb, last_plus_one,
4164 &start, base_flags, mss))
4165 goto out_unlock;
4167 entry = start;
4170 /* Packets are ready, update Tx producer idx local and on card. */
4171 tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
4173 tp->tx_prod = entry;
4174 if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
4175 netif_stop_queue(dev);
4176 if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp))
4177 netif_wake_queue(tp->dev);
4180 out_unlock:
4181 mmiowb();
4183 dev->trans_start = jiffies;
4185 return NETDEV_TX_OK;
4188 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
4189 int new_mtu)
4191 dev->mtu = new_mtu;
4193 if (new_mtu > ETH_DATA_LEN) {
4194 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
4195 tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE;
4196 ethtool_op_set_tso(dev, 0);
4198 else
4199 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
4200 } else {
4201 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
4202 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
4203 tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE;
4207 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
4209 struct tg3 *tp = netdev_priv(dev);
4210 int err;
4212 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
4213 return -EINVAL;
4215 if (!netif_running(dev)) {
4216 /* We'll just catch it later when the
4217 * device is up'd.
4219 tg3_set_mtu(dev, tp, new_mtu);
4220 return 0;
4223 tg3_netif_stop(tp);
4225 tg3_full_lock(tp, 1);
4227 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
4229 tg3_set_mtu(dev, tp, new_mtu);
4231 err = tg3_restart_hw(tp, 0);
4233 if (!err)
4234 tg3_netif_start(tp);
4236 tg3_full_unlock(tp);
4238 return err;
4241 /* Free up pending packets in all rx/tx rings.
4243 * The chip has been shut down and the driver detached from
4244 * the networking, so no interrupts or new tx packets will
4245 * end up in the driver. tp->{tx,}lock is not held and we are not
4246 * in an interrupt context and thus may sleep.
4248 static void tg3_free_rings(struct tg3 *tp)
4250 struct ring_info *rxp;
4251 int i;
4253 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4254 rxp = &tp->rx_std_buffers[i];
4256 if (rxp->skb == NULL)
4257 continue;
4258 pci_unmap_single(tp->pdev,
4259 pci_unmap_addr(rxp, mapping),
4260 tp->rx_pkt_buf_sz - tp->rx_offset,
4261 PCI_DMA_FROMDEVICE);
4262 dev_kfree_skb_any(rxp->skb);
4263 rxp->skb = NULL;
4266 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4267 rxp = &tp->rx_jumbo_buffers[i];
4269 if (rxp->skb == NULL)
4270 continue;
4271 pci_unmap_single(tp->pdev,
4272 pci_unmap_addr(rxp, mapping),
4273 RX_JUMBO_PKT_BUF_SZ - tp->rx_offset,
4274 PCI_DMA_FROMDEVICE);
4275 dev_kfree_skb_any(rxp->skb);
4276 rxp->skb = NULL;
4279 for (i = 0; i < TG3_TX_RING_SIZE; ) {
4280 struct tx_ring_info *txp;
4281 struct sk_buff *skb;
4282 int j;
4284 txp = &tp->tx_buffers[i];
4285 skb = txp->skb;
4287 if (skb == NULL) {
4288 i++;
4289 continue;
4292 pci_unmap_single(tp->pdev,
4293 pci_unmap_addr(txp, mapping),
4294 skb_headlen(skb),
4295 PCI_DMA_TODEVICE);
4296 txp->skb = NULL;
4298 i++;
4300 for (j = 0; j < skb_shinfo(skb)->nr_frags; j++) {
4301 txp = &tp->tx_buffers[i & (TG3_TX_RING_SIZE - 1)];
4302 pci_unmap_page(tp->pdev,
4303 pci_unmap_addr(txp, mapping),
4304 skb_shinfo(skb)->frags[j].size,
4305 PCI_DMA_TODEVICE);
4306 i++;
4309 dev_kfree_skb_any(skb);
4313 /* Initialize tx/rx rings for packet processing.
4315 * The chip has been shut down and the driver detached from
4316 * the networking, so no interrupts or new tx packets will
4317 * end up in the driver. tp->{tx,}lock are held and thus
4318 * we may not sleep.
4320 static int tg3_init_rings(struct tg3 *tp)
4322 u32 i;
4324 /* Free up all the SKBs. */
4325 tg3_free_rings(tp);
4327 /* Zero out all descriptors. */
4328 memset(tp->rx_std, 0, TG3_RX_RING_BYTES);
4329 memset(tp->rx_jumbo, 0, TG3_RX_JUMBO_RING_BYTES);
4330 memset(tp->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
4331 memset(tp->tx_ring, 0, TG3_TX_RING_BYTES);
4333 tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ;
4334 if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) &&
4335 (tp->dev->mtu > ETH_DATA_LEN))
4336 tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ;
4338 /* Initialize invariants of the rings, we only set this
4339 * stuff once. This works because the card does not
4340 * write into the rx buffer posting rings.
4342 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4343 struct tg3_rx_buffer_desc *rxd;
4345 rxd = &tp->rx_std[i];
4346 rxd->idx_len = (tp->rx_pkt_buf_sz - tp->rx_offset - 64)
4347 << RXD_LEN_SHIFT;
4348 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
4349 rxd->opaque = (RXD_OPAQUE_RING_STD |
4350 (i << RXD_OPAQUE_INDEX_SHIFT));
4353 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
4354 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4355 struct tg3_rx_buffer_desc *rxd;
4357 rxd = &tp->rx_jumbo[i];
4358 rxd->idx_len = (RX_JUMBO_PKT_BUF_SZ - tp->rx_offset - 64)
4359 << RXD_LEN_SHIFT;
4360 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
4361 RXD_FLAG_JUMBO;
4362 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
4363 (i << RXD_OPAQUE_INDEX_SHIFT));
4367 /* Now allocate fresh SKBs for each rx ring. */
4368 for (i = 0; i < tp->rx_pending; i++) {
4369 if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_STD, -1, i) < 0) {
4370 printk(KERN_WARNING PFX
4371 "%s: Using a smaller RX standard ring, "
4372 "only %d out of %d buffers were allocated "
4373 "successfully.\n",
4374 tp->dev->name, i, tp->rx_pending);
4375 if (i == 0)
4376 return -ENOMEM;
4377 tp->rx_pending = i;
4378 break;
4382 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
4383 for (i = 0; i < tp->rx_jumbo_pending; i++) {
4384 if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_JUMBO,
4385 -1, i) < 0) {
4386 printk(KERN_WARNING PFX
4387 "%s: Using a smaller RX jumbo ring, "
4388 "only %d out of %d buffers were "
4389 "allocated successfully.\n",
4390 tp->dev->name, i, tp->rx_jumbo_pending);
4391 if (i == 0) {
4392 tg3_free_rings(tp);
4393 return -ENOMEM;
4395 tp->rx_jumbo_pending = i;
4396 break;
4400 return 0;
4404 * Must not be invoked with interrupt sources disabled and
4405 * the hardware shutdown down.
4407 static void tg3_free_consistent(struct tg3 *tp)
4409 kfree(tp->rx_std_buffers);
4410 tp->rx_std_buffers = NULL;
4411 if (tp->rx_std) {
4412 pci_free_consistent(tp->pdev, TG3_RX_RING_BYTES,
4413 tp->rx_std, tp->rx_std_mapping);
4414 tp->rx_std = NULL;
4416 if (tp->rx_jumbo) {
4417 pci_free_consistent(tp->pdev, TG3_RX_JUMBO_RING_BYTES,
4418 tp->rx_jumbo, tp->rx_jumbo_mapping);
4419 tp->rx_jumbo = NULL;
4421 if (tp->rx_rcb) {
4422 pci_free_consistent(tp->pdev, TG3_RX_RCB_RING_BYTES(tp),
4423 tp->rx_rcb, tp->rx_rcb_mapping);
4424 tp->rx_rcb = NULL;
4426 if (tp->tx_ring) {
4427 pci_free_consistent(tp->pdev, TG3_TX_RING_BYTES,
4428 tp->tx_ring, tp->tx_desc_mapping);
4429 tp->tx_ring = NULL;
4431 if (tp->hw_status) {
4432 pci_free_consistent(tp->pdev, TG3_HW_STATUS_SIZE,
4433 tp->hw_status, tp->status_mapping);
4434 tp->hw_status = NULL;
4436 if (tp->hw_stats) {
4437 pci_free_consistent(tp->pdev, sizeof(struct tg3_hw_stats),
4438 tp->hw_stats, tp->stats_mapping);
4439 tp->hw_stats = NULL;
4444 * Must not be invoked with interrupt sources disabled and
4445 * the hardware shutdown down. Can sleep.
4447 static int tg3_alloc_consistent(struct tg3 *tp)
4449 tp->rx_std_buffers = kzalloc((sizeof(struct ring_info) *
4450 (TG3_RX_RING_SIZE +
4451 TG3_RX_JUMBO_RING_SIZE)) +
4452 (sizeof(struct tx_ring_info) *
4453 TG3_TX_RING_SIZE),
4454 GFP_KERNEL);
4455 if (!tp->rx_std_buffers)
4456 return -ENOMEM;
4458 tp->rx_jumbo_buffers = &tp->rx_std_buffers[TG3_RX_RING_SIZE];
4459 tp->tx_buffers = (struct tx_ring_info *)
4460 &tp->rx_jumbo_buffers[TG3_RX_JUMBO_RING_SIZE];
4462 tp->rx_std = pci_alloc_consistent(tp->pdev, TG3_RX_RING_BYTES,
4463 &tp->rx_std_mapping);
4464 if (!tp->rx_std)
4465 goto err_out;
4467 tp->rx_jumbo = pci_alloc_consistent(tp->pdev, TG3_RX_JUMBO_RING_BYTES,
4468 &tp->rx_jumbo_mapping);
4470 if (!tp->rx_jumbo)
4471 goto err_out;
4473 tp->rx_rcb = pci_alloc_consistent(tp->pdev, TG3_RX_RCB_RING_BYTES(tp),
4474 &tp->rx_rcb_mapping);
4475 if (!tp->rx_rcb)
4476 goto err_out;
4478 tp->tx_ring = pci_alloc_consistent(tp->pdev, TG3_TX_RING_BYTES,
4479 &tp->tx_desc_mapping);
4480 if (!tp->tx_ring)
4481 goto err_out;
4483 tp->hw_status = pci_alloc_consistent(tp->pdev,
4484 TG3_HW_STATUS_SIZE,
4485 &tp->status_mapping);
4486 if (!tp->hw_status)
4487 goto err_out;
4489 tp->hw_stats = pci_alloc_consistent(tp->pdev,
4490 sizeof(struct tg3_hw_stats),
4491 &tp->stats_mapping);
4492 if (!tp->hw_stats)
4493 goto err_out;
4495 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
4496 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
4498 return 0;
4500 err_out:
4501 tg3_free_consistent(tp);
4502 return -ENOMEM;
4505 #define MAX_WAIT_CNT 1000
4507 /* To stop a block, clear the enable bit and poll till it
4508 * clears. tp->lock is held.
4510 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
4512 unsigned int i;
4513 u32 val;
4515 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
4516 switch (ofs) {
4517 case RCVLSC_MODE:
4518 case DMAC_MODE:
4519 case MBFREE_MODE:
4520 case BUFMGR_MODE:
4521 case MEMARB_MODE:
4522 /* We can't enable/disable these bits of the
4523 * 5705/5750, just say success.
4525 return 0;
4527 default:
4528 break;
4532 val = tr32(ofs);
4533 val &= ~enable_bit;
4534 tw32_f(ofs, val);
4536 for (i = 0; i < MAX_WAIT_CNT; i++) {
4537 udelay(100);
4538 val = tr32(ofs);
4539 if ((val & enable_bit) == 0)
4540 break;
4543 if (i == MAX_WAIT_CNT && !silent) {
4544 printk(KERN_ERR PFX "tg3_stop_block timed out, "
4545 "ofs=%lx enable_bit=%x\n",
4546 ofs, enable_bit);
4547 return -ENODEV;
4550 return 0;
4553 /* tp->lock is held. */
4554 static int tg3_abort_hw(struct tg3 *tp, int silent)
4556 int i, err;
4558 tg3_disable_ints(tp);
4560 tp->rx_mode &= ~RX_MODE_ENABLE;
4561 tw32_f(MAC_RX_MODE, tp->rx_mode);
4562 udelay(10);
4564 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
4565 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
4566 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
4567 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
4568 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
4569 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
4571 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
4572 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
4573 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
4574 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
4575 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
4576 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
4577 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
4579 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
4580 tw32_f(MAC_MODE, tp->mac_mode);
4581 udelay(40);
4583 tp->tx_mode &= ~TX_MODE_ENABLE;
4584 tw32_f(MAC_TX_MODE, tp->tx_mode);
4586 for (i = 0; i < MAX_WAIT_CNT; i++) {
4587 udelay(100);
4588 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
4589 break;
4591 if (i >= MAX_WAIT_CNT) {
4592 printk(KERN_ERR PFX "tg3_abort_hw timed out for %s, "
4593 "TX_MODE_ENABLE will not clear MAC_TX_MODE=%08x\n",
4594 tp->dev->name, tr32(MAC_TX_MODE));
4595 err |= -ENODEV;
4598 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
4599 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
4600 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
4602 tw32(FTQ_RESET, 0xffffffff);
4603 tw32(FTQ_RESET, 0x00000000);
4605 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
4606 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
4608 if (tp->hw_status)
4609 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
4610 if (tp->hw_stats)
4611 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
4613 return err;
4616 /* tp->lock is held. */
4617 static int tg3_nvram_lock(struct tg3 *tp)
4619 if (tp->tg3_flags & TG3_FLAG_NVRAM) {
4620 int i;
4622 if (tp->nvram_lock_cnt == 0) {
4623 tw32(NVRAM_SWARB, SWARB_REQ_SET1);
4624 for (i = 0; i < 8000; i++) {
4625 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
4626 break;
4627 udelay(20);
4629 if (i == 8000) {
4630 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
4631 return -ENODEV;
4634 tp->nvram_lock_cnt++;
4636 return 0;
4639 /* tp->lock is held. */
4640 static void tg3_nvram_unlock(struct tg3 *tp)
4642 if (tp->tg3_flags & TG3_FLAG_NVRAM) {
4643 if (tp->nvram_lock_cnt > 0)
4644 tp->nvram_lock_cnt--;
4645 if (tp->nvram_lock_cnt == 0)
4646 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
4650 /* tp->lock is held. */
4651 static void tg3_enable_nvram_access(struct tg3 *tp)
4653 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
4654 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
4655 u32 nvaccess = tr32(NVRAM_ACCESS);
4657 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
4661 /* tp->lock is held. */
4662 static void tg3_disable_nvram_access(struct tg3 *tp)
4664 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
4665 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
4666 u32 nvaccess = tr32(NVRAM_ACCESS);
4668 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
4672 /* tp->lock is held. */
4673 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
4675 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
4676 NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
4678 if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) {
4679 switch (kind) {
4680 case RESET_KIND_INIT:
4681 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4682 DRV_STATE_START);
4683 break;
4685 case RESET_KIND_SHUTDOWN:
4686 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4687 DRV_STATE_UNLOAD);
4688 break;
4690 case RESET_KIND_SUSPEND:
4691 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4692 DRV_STATE_SUSPEND);
4693 break;
4695 default:
4696 break;
4701 /* tp->lock is held. */
4702 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
4704 if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) {
4705 switch (kind) {
4706 case RESET_KIND_INIT:
4707 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4708 DRV_STATE_START_DONE);
4709 break;
4711 case RESET_KIND_SHUTDOWN:
4712 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4713 DRV_STATE_UNLOAD_DONE);
4714 break;
4716 default:
4717 break;
4722 /* tp->lock is held. */
4723 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
4725 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
4726 switch (kind) {
4727 case RESET_KIND_INIT:
4728 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4729 DRV_STATE_START);
4730 break;
4732 case RESET_KIND_SHUTDOWN:
4733 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4734 DRV_STATE_UNLOAD);
4735 break;
4737 case RESET_KIND_SUSPEND:
4738 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
4739 DRV_STATE_SUSPEND);
4740 break;
4742 default:
4743 break;
4748 static int tg3_poll_fw(struct tg3 *tp)
4750 int i;
4751 u32 val;
4753 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
4754 /* Wait up to 20ms for init done. */
4755 for (i = 0; i < 200; i++) {
4756 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
4757 return 0;
4758 udelay(100);
4760 return -ENODEV;
4763 /* Wait for firmware initialization to complete. */
4764 for (i = 0; i < 100000; i++) {
4765 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
4766 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
4767 break;
4768 udelay(10);
4771 /* Chip might not be fitted with firmware. Some Sun onboard
4772 * parts are configured like that. So don't signal the timeout
4773 * of the above loop as an error, but do report the lack of
4774 * running firmware once.
4776 if (i >= 100000 &&
4777 !(tp->tg3_flags2 & TG3_FLG2_NO_FWARE_REPORTED)) {
4778 tp->tg3_flags2 |= TG3_FLG2_NO_FWARE_REPORTED;
4780 printk(KERN_INFO PFX "%s: No firmware running.\n",
4781 tp->dev->name);
4784 return 0;
4787 static void tg3_stop_fw(struct tg3 *);
4789 /* tp->lock is held. */
4790 static int tg3_chip_reset(struct tg3 *tp)
4792 u32 val;
4793 void (*write_op)(struct tg3 *, u32, u32);
4794 int err;
4796 tg3_nvram_lock(tp);
4798 /* No matching tg3_nvram_unlock() after this because
4799 * chip reset below will undo the nvram lock.
4801 tp->nvram_lock_cnt = 0;
4803 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
4804 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
4805 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
4806 tw32(GRC_FASTBOOT_PC, 0);
4809 * We must avoid the readl() that normally takes place.
4810 * It locks machines, causes machine checks, and other
4811 * fun things. So, temporarily disable the 5701
4812 * hardware workaround, while we do the reset.
4814 write_op = tp->write32;
4815 if (write_op == tg3_write_flush_reg32)
4816 tp->write32 = tg3_write32;
4818 /* do the reset */
4819 val = GRC_MISC_CFG_CORECLK_RESET;
4821 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
4822 if (tr32(0x7e2c) == 0x60) {
4823 tw32(0x7e2c, 0x20);
4825 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
4826 tw32(GRC_MISC_CFG, (1 << 29));
4827 val |= (1 << 29);
4831 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
4832 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
4833 tw32(GRC_VCPU_EXT_CTRL,
4834 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
4837 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
4838 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
4839 tw32(GRC_MISC_CFG, val);
4841 /* restore 5701 hardware bug workaround write method */
4842 tp->write32 = write_op;
4844 /* Unfortunately, we have to delay before the PCI read back.
4845 * Some 575X chips even will not respond to a PCI cfg access
4846 * when the reset command is given to the chip.
4848 * How do these hardware designers expect things to work
4849 * properly if the PCI write is posted for a long period
4850 * of time? It is always necessary to have some method by
4851 * which a register read back can occur to push the write
4852 * out which does the reset.
4854 * For most tg3 variants the trick below was working.
4855 * Ho hum...
4857 udelay(120);
4859 /* Flush PCI posted writes. The normal MMIO registers
4860 * are inaccessible at this time so this is the only
4861 * way to make this reliably (actually, this is no longer
4862 * the case, see above). I tried to use indirect
4863 * register read/write but this upset some 5701 variants.
4865 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
4867 udelay(120);
4869 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
4870 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
4871 int i;
4872 u32 cfg_val;
4874 /* Wait for link training to complete. */
4875 for (i = 0; i < 5000; i++)
4876 udelay(100);
4878 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
4879 pci_write_config_dword(tp->pdev, 0xc4,
4880 cfg_val | (1 << 15));
4882 /* Set PCIE max payload size and clear error status. */
4883 pci_write_config_dword(tp->pdev, 0xd8, 0xf5000);
4886 /* Re-enable indirect register accesses. */
4887 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
4888 tp->misc_host_ctrl);
4890 /* Set MAX PCI retry to zero. */
4891 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
4892 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
4893 (tp->tg3_flags & TG3_FLAG_PCIX_MODE))
4894 val |= PCISTATE_RETRY_SAME_DMA;
4895 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
4897 pci_restore_state(tp->pdev);
4899 /* Make sure PCI-X relaxed ordering bit is clear. */
4900 pci_read_config_dword(tp->pdev, TG3PCI_X_CAPS, &val);
4901 val &= ~PCIX_CAPS_RELAXED_ORDERING;
4902 pci_write_config_dword(tp->pdev, TG3PCI_X_CAPS, val);
4904 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
4905 u32 val;
4907 /* Chip reset on 5780 will reset MSI enable bit,
4908 * so need to restore it.
4910 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
4911 u16 ctrl;
4913 pci_read_config_word(tp->pdev,
4914 tp->msi_cap + PCI_MSI_FLAGS,
4915 &ctrl);
4916 pci_write_config_word(tp->pdev,
4917 tp->msi_cap + PCI_MSI_FLAGS,
4918 ctrl | PCI_MSI_FLAGS_ENABLE);
4919 val = tr32(MSGINT_MODE);
4920 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
4923 val = tr32(MEMARB_MODE);
4924 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
4926 } else
4927 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
4929 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
4930 tg3_stop_fw(tp);
4931 tw32(0x5000, 0x400);
4934 tw32(GRC_MODE, tp->grc_mode);
4936 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
4937 u32 val = tr32(0xc4);
4939 tw32(0xc4, val | (1 << 15));
4942 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
4943 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
4944 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
4945 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)
4946 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
4947 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
4950 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
4951 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
4952 tw32_f(MAC_MODE, tp->mac_mode);
4953 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
4954 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
4955 tw32_f(MAC_MODE, tp->mac_mode);
4956 } else
4957 tw32_f(MAC_MODE, 0);
4958 udelay(40);
4960 err = tg3_poll_fw(tp);
4961 if (err)
4962 return err;
4964 if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
4965 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
4966 u32 val = tr32(0x7c00);
4968 tw32(0x7c00, val | (1 << 25));
4971 /* Reprobe ASF enable state. */
4972 tp->tg3_flags &= ~TG3_FLAG_ENABLE_ASF;
4973 tp->tg3_flags2 &= ~TG3_FLG2_ASF_NEW_HANDSHAKE;
4974 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
4975 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
4976 u32 nic_cfg;
4978 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
4979 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
4980 tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
4981 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
4982 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
4986 return 0;
4989 /* tp->lock is held. */
4990 static void tg3_stop_fw(struct tg3 *tp)
4992 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
4993 u32 val;
4994 int i;
4996 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
4997 val = tr32(GRC_RX_CPU_EVENT);
4998 val |= (1 << 14);
4999 tw32(GRC_RX_CPU_EVENT, val);
5001 /* Wait for RX cpu to ACK the event. */
5002 for (i = 0; i < 100; i++) {
5003 if (!(tr32(GRC_RX_CPU_EVENT) & (1 << 14)))
5004 break;
5005 udelay(1);
5010 /* tp->lock is held. */
5011 static int tg3_halt(struct tg3 *tp, int kind, int silent)
5013 int err;
5015 tg3_stop_fw(tp);
5017 tg3_write_sig_pre_reset(tp, kind);
5019 tg3_abort_hw(tp, silent);
5020 err = tg3_chip_reset(tp);
5022 tg3_write_sig_legacy(tp, kind);
5023 tg3_write_sig_post_reset(tp, kind);
5025 if (err)
5026 return err;
5028 return 0;
5031 #define TG3_FW_RELEASE_MAJOR 0x0
5032 #define TG3_FW_RELASE_MINOR 0x0
5033 #define TG3_FW_RELEASE_FIX 0x0
5034 #define TG3_FW_START_ADDR 0x08000000
5035 #define TG3_FW_TEXT_ADDR 0x08000000
5036 #define TG3_FW_TEXT_LEN 0x9c0
5037 #define TG3_FW_RODATA_ADDR 0x080009c0
5038 #define TG3_FW_RODATA_LEN 0x60
5039 #define TG3_FW_DATA_ADDR 0x08000a40
5040 #define TG3_FW_DATA_LEN 0x20
5041 #define TG3_FW_SBSS_ADDR 0x08000a60
5042 #define TG3_FW_SBSS_LEN 0xc
5043 #define TG3_FW_BSS_ADDR 0x08000a70
5044 #define TG3_FW_BSS_LEN 0x10
5046 static const u32 tg3FwText[(TG3_FW_TEXT_LEN / sizeof(u32)) + 1] = {
5047 0x00000000, 0x10000003, 0x00000000, 0x0000000d, 0x0000000d, 0x3c1d0800,
5048 0x37bd3ffc, 0x03a0f021, 0x3c100800, 0x26100000, 0x0e000018, 0x00000000,
5049 0x0000000d, 0x3c1d0800, 0x37bd3ffc, 0x03a0f021, 0x3c100800, 0x26100034,
5050 0x0e00021c, 0x00000000, 0x0000000d, 0x00000000, 0x00000000, 0x00000000,
5051 0x27bdffe0, 0x3c1cc000, 0xafbf0018, 0xaf80680c, 0x0e00004c, 0x241b2105,
5052 0x97850000, 0x97870002, 0x9782002c, 0x9783002e, 0x3c040800, 0x248409c0,
5053 0xafa00014, 0x00021400, 0x00621825, 0x00052c00, 0xafa30010, 0x8f860010,
5054 0x00e52825, 0x0e000060, 0x24070102, 0x3c02ac00, 0x34420100, 0x3c03ac01,
5055 0x34630100, 0xaf820490, 0x3c02ffff, 0xaf820494, 0xaf830498, 0xaf82049c,
5056 0x24020001, 0xaf825ce0, 0x0e00003f, 0xaf825d00, 0x0e000140, 0x00000000,
5057 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x2402ffff, 0xaf825404, 0x8f835400,
5058 0x34630400, 0xaf835400, 0xaf825404, 0x3c020800, 0x24420034, 0xaf82541c,
5059 0x03e00008, 0xaf805400, 0x00000000, 0x00000000, 0x3c020800, 0x34423000,
5060 0x3c030800, 0x34633000, 0x3c040800, 0x348437ff, 0x3c010800, 0xac220a64,
5061 0x24020040, 0x3c010800, 0xac220a68, 0x3c010800, 0xac200a60, 0xac600000,
5062 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000,
5063 0x00804821, 0x8faa0010, 0x3c020800, 0x8c420a60, 0x3c040800, 0x8c840a68,
5064 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010800, 0xac230a60, 0x14400003,
5065 0x00004021, 0x3c010800, 0xac200a60, 0x3c020800, 0x8c420a60, 0x3c030800,
5066 0x8c630a64, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001,
5067 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020800, 0x8c420a60,
5068 0x3c030800, 0x8c630a64, 0x8f84680c, 0x00021140, 0x00431021, 0xac440008,
5069 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c,
5070 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5071 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5072 0, 0, 0, 0, 0, 0,
5073 0x02000008, 0x00000000, 0x0a0001e3, 0x3c0a0001, 0x0a0001e3, 0x3c0a0002,
5074 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5075 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5076 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5077 0x0a0001e3, 0x3c0a0007, 0x0a0001e3, 0x3c0a0008, 0x0a0001e3, 0x3c0a0009,
5078 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a000b,
5079 0x0a0001e3, 0x3c0a000c, 0x0a0001e3, 0x3c0a000d, 0x0a0001e3, 0x00000000,
5080 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a000e, 0x0a0001e3, 0x00000000,
5081 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5082 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5083 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a0013, 0x0a0001e3, 0x3c0a0014,
5084 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5085 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5086 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5087 0x27bdffe0, 0x00001821, 0x00001021, 0xafbf0018, 0xafb10014, 0xafb00010,
5088 0x3c010800, 0x00220821, 0xac200a70, 0x3c010800, 0x00220821, 0xac200a74,
5089 0x3c010800, 0x00220821, 0xac200a78, 0x24630001, 0x1860fff5, 0x2442000c,
5090 0x24110001, 0x8f906810, 0x32020004, 0x14400005, 0x24040001, 0x3c020800,
5091 0x8c420a78, 0x18400003, 0x00002021, 0x0e000182, 0x00000000, 0x32020001,
5092 0x10400003, 0x00000000, 0x0e000169, 0x00000000, 0x0a000153, 0xaf915028,
5093 0x8fbf0018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020, 0x3c050800,
5094 0x8ca50a70, 0x3c060800, 0x8cc60a80, 0x3c070800, 0x8ce70a78, 0x27bdffe0,
5095 0x3c040800, 0x248409d0, 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014,
5096 0x0e00017b, 0x00002021, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x24020001,
5097 0x8f836810, 0x00821004, 0x00021027, 0x00621824, 0x03e00008, 0xaf836810,
5098 0x27bdffd8, 0xafbf0024, 0x1080002e, 0xafb00020, 0x8f825cec, 0xafa20018,
5099 0x8f825cec, 0x3c100800, 0x26100a78, 0xafa2001c, 0x34028000, 0xaf825cec,
5100 0x8e020000, 0x18400016, 0x00000000, 0x3c020800, 0x94420a74, 0x8fa3001c,
5101 0x000221c0, 0xac830004, 0x8fa2001c, 0x3c010800, 0x0e000201, 0xac220a74,
5102 0x10400005, 0x00000000, 0x8e020000, 0x24420001, 0x0a0001df, 0xae020000,
5103 0x3c020800, 0x8c420a70, 0x00021c02, 0x000321c0, 0x0a0001c5, 0xafa2001c,
5104 0x0e000201, 0x00000000, 0x1040001f, 0x00000000, 0x8e020000, 0x8fa3001c,
5105 0x24420001, 0x3c010800, 0xac230a70, 0x3c010800, 0xac230a74, 0x0a0001df,
5106 0xae020000, 0x3c100800, 0x26100a78, 0x8e020000, 0x18400028, 0x00000000,
5107 0x0e000201, 0x00000000, 0x14400024, 0x00000000, 0x8e020000, 0x3c030800,
5108 0x8c630a70, 0x2442ffff, 0xafa3001c, 0x18400006, 0xae020000, 0x00031402,
5109 0x000221c0, 0x8c820004, 0x3c010800, 0xac220a70, 0x97a2001e, 0x2442ff00,
5110 0x2c420300, 0x1440000b, 0x24024000, 0x3c040800, 0x248409dc, 0xafa00010,
5111 0xafa00014, 0x8fa6001c, 0x24050008, 0x0e000060, 0x00003821, 0x0a0001df,
5112 0x00000000, 0xaf825cf8, 0x3c020800, 0x8c420a40, 0x8fa3001c, 0x24420001,
5113 0xaf835cf8, 0x3c010800, 0xac220a40, 0x8fbf0024, 0x8fb00020, 0x03e00008,
5114 0x27bd0028, 0x27bdffe0, 0x3c040800, 0x248409e8, 0x00002821, 0x00003021,
5115 0x00003821, 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014, 0x8fbf0018,
5116 0x03e00008, 0x27bd0020, 0x8f82680c, 0x8f85680c, 0x00021827, 0x0003182b,
5117 0x00031823, 0x00431024, 0x00441021, 0x00a2282b, 0x10a00006, 0x00000000,
5118 0x00401821, 0x8f82680c, 0x0043102b, 0x1440fffd, 0x00000000, 0x03e00008,
5119 0x00000000, 0x3c040800, 0x8c840000, 0x3c030800, 0x8c630a40, 0x0064102b,
5120 0x54400002, 0x00831023, 0x00641023, 0x2c420008, 0x03e00008, 0x38420001,
5121 0x27bdffe0, 0x00802821, 0x3c040800, 0x24840a00, 0x00003021, 0x00003821,
5122 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014, 0x0a000216, 0x00000000,
5123 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000, 0x27bdffe0, 0x3c1cc000,
5124 0xafbf0018, 0x0e00004c, 0xaf80680c, 0x3c040800, 0x24840a10, 0x03802821,
5125 0x00003021, 0x00003821, 0xafa00010, 0x0e000060, 0xafa00014, 0x2402ffff,
5126 0xaf825404, 0x3c0200aa, 0x0e000234, 0xaf825434, 0x8fbf0018, 0x03e00008,
5127 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe8, 0xafb00010,
5128 0x24100001, 0xafbf0014, 0x3c01c003, 0xac200000, 0x8f826810, 0x30422000,
5129 0x10400003, 0x00000000, 0x0e000246, 0x00000000, 0x0a00023a, 0xaf905428,
5130 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x27bdfff8, 0x8f845d0c,
5131 0x3c0200ff, 0x3c030800, 0x8c630a50, 0x3442fff8, 0x00821024, 0x1043001e,
5132 0x3c0500ff, 0x34a5fff8, 0x3c06c003, 0x3c074000, 0x00851824, 0x8c620010,
5133 0x3c010800, 0xac230a50, 0x30420008, 0x10400005, 0x00871025, 0x8cc20000,
5134 0x24420001, 0xacc20000, 0x00871025, 0xaf825d0c, 0x8fa20000, 0x24420001,
5135 0xafa20000, 0x8fa20000, 0x8fa20000, 0x24420001, 0xafa20000, 0x8fa20000,
5136 0x8f845d0c, 0x3c030800, 0x8c630a50, 0x00851024, 0x1443ffe8, 0x00851824,
5137 0x27bd0008, 0x03e00008, 0x00000000, 0x00000000, 0x00000000
5140 static const u32 tg3FwRodata[(TG3_FW_RODATA_LEN / sizeof(u32)) + 1] = {
5141 0x35373031, 0x726c7341, 0x00000000, 0x00000000, 0x53774576, 0x656e7430,
5142 0x00000000, 0x726c7045, 0x76656e74, 0x31000000, 0x556e6b6e, 0x45766e74,
5143 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66617461, 0x6c457272,
5144 0x00000000, 0x00000000, 0x4d61696e, 0x43707542, 0x00000000, 0x00000000,
5145 0x00000000
5148 #if 0 /* All zeros, don't eat up space with it. */
5149 u32 tg3FwData[(TG3_FW_DATA_LEN / sizeof(u32)) + 1] = {
5150 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
5151 0x00000000, 0x00000000, 0x00000000, 0x00000000
5153 #endif
5155 #define RX_CPU_SCRATCH_BASE 0x30000
5156 #define RX_CPU_SCRATCH_SIZE 0x04000
5157 #define TX_CPU_SCRATCH_BASE 0x34000
5158 #define TX_CPU_SCRATCH_SIZE 0x04000
5160 /* tp->lock is held. */
5161 static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
5163 int i;
5165 BUG_ON(offset == TX_CPU_BASE &&
5166 (tp->tg3_flags2 & TG3_FLG2_5705_PLUS));
5168 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
5169 u32 val = tr32(GRC_VCPU_EXT_CTRL);
5171 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
5172 return 0;
5174 if (offset == RX_CPU_BASE) {
5175 for (i = 0; i < 10000; i++) {
5176 tw32(offset + CPU_STATE, 0xffffffff);
5177 tw32(offset + CPU_MODE, CPU_MODE_HALT);
5178 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
5179 break;
5182 tw32(offset + CPU_STATE, 0xffffffff);
5183 tw32_f(offset + CPU_MODE, CPU_MODE_HALT);
5184 udelay(10);
5185 } else {
5186 for (i = 0; i < 10000; i++) {
5187 tw32(offset + CPU_STATE, 0xffffffff);
5188 tw32(offset + CPU_MODE, CPU_MODE_HALT);
5189 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
5190 break;
5194 if (i >= 10000) {
5195 printk(KERN_ERR PFX "tg3_reset_cpu timed out for %s, "
5196 "and %s CPU\n",
5197 tp->dev->name,
5198 (offset == RX_CPU_BASE ? "RX" : "TX"));
5199 return -ENODEV;
5202 /* Clear firmware's nvram arbitration. */
5203 if (tp->tg3_flags & TG3_FLAG_NVRAM)
5204 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
5205 return 0;
5208 struct fw_info {
5209 unsigned int text_base;
5210 unsigned int text_len;
5211 const u32 *text_data;
5212 unsigned int rodata_base;
5213 unsigned int rodata_len;
5214 const u32 *rodata_data;
5215 unsigned int data_base;
5216 unsigned int data_len;
5217 const u32 *data_data;
5220 /* tp->lock is held. */
5221 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, u32 cpu_scratch_base,
5222 int cpu_scratch_size, struct fw_info *info)
5224 int err, lock_err, i;
5225 void (*write_op)(struct tg3 *, u32, u32);
5227 if (cpu_base == TX_CPU_BASE &&
5228 (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
5229 printk(KERN_ERR PFX "tg3_load_firmware_cpu: Trying to load "
5230 "TX cpu firmware on %s which is 5705.\n",
5231 tp->dev->name);
5232 return -EINVAL;
5235 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
5236 write_op = tg3_write_mem;
5237 else
5238 write_op = tg3_write_indirect_reg32;
5240 /* It is possible that bootcode is still loading at this point.
5241 * Get the nvram lock first before halting the cpu.
5243 lock_err = tg3_nvram_lock(tp);
5244 err = tg3_halt_cpu(tp, cpu_base);
5245 if (!lock_err)
5246 tg3_nvram_unlock(tp);
5247 if (err)
5248 goto out;
5250 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
5251 write_op(tp, cpu_scratch_base + i, 0);
5252 tw32(cpu_base + CPU_STATE, 0xffffffff);
5253 tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
5254 for (i = 0; i < (info->text_len / sizeof(u32)); i++)
5255 write_op(tp, (cpu_scratch_base +
5256 (info->text_base & 0xffff) +
5257 (i * sizeof(u32))),
5258 (info->text_data ?
5259 info->text_data[i] : 0));
5260 for (i = 0; i < (info->rodata_len / sizeof(u32)); i++)
5261 write_op(tp, (cpu_scratch_base +
5262 (info->rodata_base & 0xffff) +
5263 (i * sizeof(u32))),
5264 (info->rodata_data ?
5265 info->rodata_data[i] : 0));
5266 for (i = 0; i < (info->data_len / sizeof(u32)); i++)
5267 write_op(tp, (cpu_scratch_base +
5268 (info->data_base & 0xffff) +
5269 (i * sizeof(u32))),
5270 (info->data_data ?
5271 info->data_data[i] : 0));
5273 err = 0;
5275 out:
5276 return err;
5279 /* tp->lock is held. */
5280 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
5282 struct fw_info info;
5283 int err, i;
5285 info.text_base = TG3_FW_TEXT_ADDR;
5286 info.text_len = TG3_FW_TEXT_LEN;
5287 info.text_data = &tg3FwText[0];
5288 info.rodata_base = TG3_FW_RODATA_ADDR;
5289 info.rodata_len = TG3_FW_RODATA_LEN;
5290 info.rodata_data = &tg3FwRodata[0];
5291 info.data_base = TG3_FW_DATA_ADDR;
5292 info.data_len = TG3_FW_DATA_LEN;
5293 info.data_data = NULL;
5295 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
5296 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
5297 &info);
5298 if (err)
5299 return err;
5301 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
5302 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
5303 &info);
5304 if (err)
5305 return err;
5307 /* Now startup only the RX cpu. */
5308 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5309 tw32_f(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
5311 for (i = 0; i < 5; i++) {
5312 if (tr32(RX_CPU_BASE + CPU_PC) == TG3_FW_TEXT_ADDR)
5313 break;
5314 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5315 tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT);
5316 tw32_f(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
5317 udelay(1000);
5319 if (i >= 5) {
5320 printk(KERN_ERR PFX "tg3_load_firmware fails for %s "
5321 "to set RX CPU PC, is %08x should be %08x\n",
5322 tp->dev->name, tr32(RX_CPU_BASE + CPU_PC),
5323 TG3_FW_TEXT_ADDR);
5324 return -ENODEV;
5326 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5327 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000);
5329 return 0;
5332 #if TG3_TSO_SUPPORT != 0
5334 #define TG3_TSO_FW_RELEASE_MAJOR 0x1
5335 #define TG3_TSO_FW_RELASE_MINOR 0x6
5336 #define TG3_TSO_FW_RELEASE_FIX 0x0
5337 #define TG3_TSO_FW_START_ADDR 0x08000000
5338 #define TG3_TSO_FW_TEXT_ADDR 0x08000000
5339 #define TG3_TSO_FW_TEXT_LEN 0x1aa0
5340 #define TG3_TSO_FW_RODATA_ADDR 0x08001aa0
5341 #define TG3_TSO_FW_RODATA_LEN 0x60
5342 #define TG3_TSO_FW_DATA_ADDR 0x08001b20
5343 #define TG3_TSO_FW_DATA_LEN 0x30
5344 #define TG3_TSO_FW_SBSS_ADDR 0x08001b50
5345 #define TG3_TSO_FW_SBSS_LEN 0x2c
5346 #define TG3_TSO_FW_BSS_ADDR 0x08001b80
5347 #define TG3_TSO_FW_BSS_LEN 0x894
5349 static const u32 tg3TsoFwText[(TG3_TSO_FW_TEXT_LEN / 4) + 1] = {
5350 0x0e000003, 0x00000000, 0x08001b24, 0x00000000, 0x10000003, 0x00000000,
5351 0x0000000d, 0x0000000d, 0x3c1d0800, 0x37bd4000, 0x03a0f021, 0x3c100800,
5352 0x26100000, 0x0e000010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe,
5353 0xafbf0018, 0x0e0005d8, 0x34840002, 0x0e000668, 0x00000000, 0x3c030800,
5354 0x90631b68, 0x24020002, 0x3c040800, 0x24841aac, 0x14620003, 0x24050001,
5355 0x3c040800, 0x24841aa0, 0x24060006, 0x00003821, 0xafa00010, 0x0e00067c,
5356 0xafa00014, 0x8f625c50, 0x34420001, 0xaf625c50, 0x8f625c90, 0x34420001,
5357 0xaf625c90, 0x2402ffff, 0x0e000034, 0xaf625404, 0x8fbf0018, 0x03e00008,
5358 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c,
5359 0xafb20018, 0xafb10014, 0x0e00005b, 0xafb00010, 0x24120002, 0x24110001,
5360 0x8f706820, 0x32020100, 0x10400003, 0x00000000, 0x0e0000bb, 0x00000000,
5361 0x8f706820, 0x32022000, 0x10400004, 0x32020001, 0x0e0001f0, 0x24040001,
5362 0x32020001, 0x10400003, 0x00000000, 0x0e0000a3, 0x00000000, 0x3c020800,
5363 0x90421b98, 0x14520003, 0x00000000, 0x0e0004c0, 0x00000000, 0x0a00003c,
5364 0xaf715028, 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008,
5365 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ac0, 0x00002821, 0x00003021,
5366 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x3c040800,
5367 0x248423d8, 0xa4800000, 0x3c010800, 0xa0201b98, 0x3c010800, 0xac201b9c,
5368 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac,
5369 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bbc, 0x8f624434, 0x3c010800,
5370 0xac221b88, 0x8f624438, 0x3c010800, 0xac221b8c, 0x8f624410, 0xac80f7a8,
5371 0x3c010800, 0xac201b84, 0x3c010800, 0xac2023e0, 0x3c010800, 0xac2023c8,
5372 0x3c010800, 0xac2023cc, 0x3c010800, 0xac202400, 0x3c010800, 0xac221b90,
5373 0x8f620068, 0x24030007, 0x00021702, 0x10430005, 0x00000000, 0x8f620068,
5374 0x00021702, 0x14400004, 0x24020001, 0x3c010800, 0x0a000097, 0xac20240c,
5375 0xac820034, 0x3c040800, 0x24841acc, 0x3c050800, 0x8ca5240c, 0x00003021,
5376 0x00003821, 0xafa00010, 0x0e00067c, 0xafa00014, 0x8fbf0018, 0x03e00008,
5377 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ad8, 0x00002821, 0x00003021,
5378 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x0e00005b,
5379 0x00000000, 0x0e0000b4, 0x00002021, 0x8fbf0018, 0x03e00008, 0x27bd0020,
5380 0x24020001, 0x8f636820, 0x00821004, 0x00021027, 0x00621824, 0x03e00008,
5381 0xaf636820, 0x27bdffd0, 0xafbf002c, 0xafb60028, 0xafb50024, 0xafb40020,
5382 0xafb3001c, 0xafb20018, 0xafb10014, 0xafb00010, 0x8f675c5c, 0x3c030800,
5383 0x24631bbc, 0x8c620000, 0x14470005, 0x3c0200ff, 0x3c020800, 0x90421b98,
5384 0x14400119, 0x3c0200ff, 0x3442fff8, 0x00e28824, 0xac670000, 0x00111902,
5385 0x306300ff, 0x30e20003, 0x000211c0, 0x00622825, 0x00a04021, 0x00071602,
5386 0x3c030800, 0x90631b98, 0x3044000f, 0x14600036, 0x00804821, 0x24020001,
5387 0x3c010800, 0xa0221b98, 0x00051100, 0x00821025, 0x3c010800, 0xac201b9c,
5388 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac,
5389 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bb0, 0x3c010800, 0xac201bb4,
5390 0x3c010800, 0xa42223d8, 0x9622000c, 0x30437fff, 0x3c010800, 0xa4222410,
5391 0x30428000, 0x3c010800, 0xa4231bc6, 0x10400005, 0x24020001, 0x3c010800,
5392 0xac2223f4, 0x0a000102, 0x2406003e, 0x24060036, 0x3c010800, 0xac2023f4,
5393 0x9622000a, 0x3c030800, 0x94631bc6, 0x3c010800, 0xac2023f0, 0x3c010800,
5394 0xac2023f8, 0x00021302, 0x00021080, 0x00c21021, 0x00621821, 0x3c010800,
5395 0xa42223d0, 0x3c010800, 0x0a000115, 0xa4231b96, 0x9622000c, 0x3c010800,
5396 0xa42223ec, 0x3c040800, 0x24841b9c, 0x8c820000, 0x00021100, 0x3c010800,
5397 0x00220821, 0xac311bc8, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821,
5398 0xac271bcc, 0x8c820000, 0x25030001, 0x306601ff, 0x00021100, 0x3c010800,
5399 0x00220821, 0xac261bd0, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821,
5400 0xac291bd4, 0x96230008, 0x3c020800, 0x8c421bac, 0x00432821, 0x3c010800,
5401 0xac251bac, 0x9622000a, 0x30420004, 0x14400018, 0x00061100, 0x8f630c14,
5402 0x3063000f, 0x2c620002, 0x1440000b, 0x3c02c000, 0x8f630c14, 0x3c020800,
5403 0x8c421b40, 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002,
5404 0x1040fff7, 0x3c02c000, 0x00e21825, 0xaf635c5c, 0x8f625c50, 0x30420002,
5405 0x10400014, 0x00000000, 0x0a000147, 0x00000000, 0x3c030800, 0x8c631b80,
5406 0x3c040800, 0x94841b94, 0x01221025, 0x3c010800, 0xa42223da, 0x24020001,
5407 0x3c010800, 0xac221bb8, 0x24630001, 0x0085202a, 0x3c010800, 0x10800003,
5408 0xac231b80, 0x3c010800, 0xa4251b94, 0x3c060800, 0x24c61b9c, 0x8cc20000,
5409 0x24420001, 0xacc20000, 0x28420080, 0x14400005, 0x00000000, 0x0e000656,
5410 0x24040002, 0x0a0001e6, 0x00000000, 0x3c020800, 0x8c421bb8, 0x10400078,
5411 0x24020001, 0x3c050800, 0x90a51b98, 0x14a20072, 0x00000000, 0x3c150800,
5412 0x96b51b96, 0x3c040800, 0x8c841bac, 0x32a3ffff, 0x0083102a, 0x1440006c,
5413 0x00000000, 0x14830003, 0x00000000, 0x3c010800, 0xac2523f0, 0x1060005c,
5414 0x00009021, 0x24d60004, 0x0060a021, 0x24d30014, 0x8ec20000, 0x00028100,
5415 0x3c110800, 0x02308821, 0x0e000625, 0x8e311bc8, 0x00402821, 0x10a00054,
5416 0x00000000, 0x9628000a, 0x31020040, 0x10400005, 0x2407180c, 0x8e22000c,
5417 0x2407188c, 0x00021400, 0xaca20018, 0x3c030800, 0x00701821, 0x8c631bd0,
5418 0x3c020800, 0x00501021, 0x8c421bd4, 0x00031d00, 0x00021400, 0x00621825,
5419 0xaca30014, 0x8ec30004, 0x96220008, 0x00432023, 0x3242ffff, 0x3083ffff,
5420 0x00431021, 0x0282102a, 0x14400002, 0x02b23023, 0x00803021, 0x8e620000,
5421 0x30c4ffff, 0x00441021, 0xae620000, 0x8e220000, 0xaca20000, 0x8e220004,
5422 0x8e63fff4, 0x00431021, 0xaca20004, 0xa4a6000e, 0x8e62fff4, 0x00441021,
5423 0xae62fff4, 0x96230008, 0x0043102a, 0x14400005, 0x02469021, 0x8e62fff0,
5424 0xae60fff4, 0x24420001, 0xae62fff0, 0xaca00008, 0x3242ffff, 0x14540008,
5425 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x24020905, 0xa4a2000c,
5426 0x0a0001cb, 0x34e70020, 0xa4a2000c, 0x3c020800, 0x8c4223f0, 0x10400003,
5427 0x3c024b65, 0x0a0001d3, 0x34427654, 0x3c02b49a, 0x344289ab, 0xaca2001c,
5428 0x30e2ffff, 0xaca20010, 0x0e0005a2, 0x00a02021, 0x3242ffff, 0x0054102b,
5429 0x1440ffa9, 0x00000000, 0x24020002, 0x3c010800, 0x0a0001e6, 0xa0221b98,
5430 0x8ec2083c, 0x24420001, 0x0a0001e6, 0xaec2083c, 0x0e0004c0, 0x00000000,
5431 0x8fbf002c, 0x8fb60028, 0x8fb50024, 0x8fb40020, 0x8fb3001c, 0x8fb20018,
5432 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0030, 0x27bdffd0, 0xafbf0028,
5433 0xafb30024, 0xafb20020, 0xafb1001c, 0xafb00018, 0x8f725c9c, 0x3c0200ff,
5434 0x3442fff8, 0x3c070800, 0x24e71bb4, 0x02428824, 0x9623000e, 0x8ce20000,
5435 0x00431021, 0xace20000, 0x8e220010, 0x30420020, 0x14400011, 0x00809821,
5436 0x0e00063b, 0x02202021, 0x3c02c000, 0x02421825, 0xaf635c9c, 0x8f625c90,
5437 0x30420002, 0x1040011e, 0x00000000, 0xaf635c9c, 0x8f625c90, 0x30420002,
5438 0x10400119, 0x00000000, 0x0a00020d, 0x00000000, 0x8e240008, 0x8e230014,
5439 0x00041402, 0x000231c0, 0x00031502, 0x304201ff, 0x2442ffff, 0x3042007f,
5440 0x00031942, 0x30637800, 0x00021100, 0x24424000, 0x00624821, 0x9522000a,
5441 0x3084ffff, 0x30420008, 0x104000b0, 0x000429c0, 0x3c020800, 0x8c422400,
5442 0x14400024, 0x24c50008, 0x94c20014, 0x3c010800, 0xa42223d0, 0x8cc40010,
5443 0x00041402, 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42423d4, 0x94c2000e,
5444 0x3083ffff, 0x00431023, 0x3c010800, 0xac222408, 0x94c2001a, 0x3c010800,
5445 0xac262400, 0x3c010800, 0xac322404, 0x3c010800, 0xac2223fc, 0x3c02c000,
5446 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e5, 0x00000000,
5447 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e0, 0x00000000, 0x0a000246,
5448 0x00000000, 0x94c2000e, 0x3c030800, 0x946323d4, 0x00434023, 0x3103ffff,
5449 0x2c620008, 0x1040001c, 0x00000000, 0x94c20014, 0x24420028, 0x00a22821,
5450 0x00031042, 0x1840000b, 0x00002021, 0x24e60848, 0x00403821, 0x94a30000,
5451 0x8cc20000, 0x24840001, 0x00431021, 0xacc20000, 0x0087102a, 0x1440fff9,
5452 0x24a50002, 0x31020001, 0x1040001f, 0x3c024000, 0x3c040800, 0x248423fc,
5453 0xa0a00001, 0x94a30000, 0x8c820000, 0x00431021, 0x0a000285, 0xac820000,
5454 0x8f626800, 0x3c030010, 0x00431024, 0x10400009, 0x00000000, 0x94c2001a,
5455 0x3c030800, 0x8c6323fc, 0x00431021, 0x3c010800, 0xac2223fc, 0x0a000286,
5456 0x3c024000, 0x94c2001a, 0x94c4001c, 0x3c030800, 0x8c6323fc, 0x00441023,
5457 0x00621821, 0x3c010800, 0xac2323fc, 0x3c024000, 0x02421825, 0xaf635c9c,
5458 0x8f625c90, 0x30420002, 0x1440fffc, 0x00000000, 0x9522000a, 0x30420010,
5459 0x1040009b, 0x00000000, 0x3c030800, 0x946323d4, 0x3c070800, 0x24e72400,
5460 0x8ce40000, 0x8f626800, 0x24630030, 0x00832821, 0x3c030010, 0x00431024,
5461 0x1440000a, 0x00000000, 0x94a20004, 0x3c040800, 0x8c842408, 0x3c030800,
5462 0x8c6323fc, 0x00441023, 0x00621821, 0x3c010800, 0xac2323fc, 0x3c040800,
5463 0x8c8423fc, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402, 0x00822021,
5464 0x00041027, 0xa4a20006, 0x3c030800, 0x8c632404, 0x3c0200ff, 0x3442fff8,
5465 0x00628824, 0x96220008, 0x24050001, 0x24034000, 0x000231c0, 0x00801021,
5466 0xa4c2001a, 0xa4c0001c, 0xace00000, 0x3c010800, 0xac251b60, 0xaf635cb8,
5467 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000, 0x3c010800, 0xac201b60,
5468 0x8e220008, 0xaf625cb8, 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000,
5469 0x3c010800, 0xac201b60, 0x3c020800, 0x8c421b60, 0x1040ffec, 0x00000000,
5470 0x3c040800, 0x0e00063b, 0x8c842404, 0x0a00032a, 0x00000000, 0x3c030800,
5471 0x90631b98, 0x24020002, 0x14620003, 0x3c034b65, 0x0a0002e1, 0x00008021,
5472 0x8e22001c, 0x34637654, 0x10430002, 0x24100002, 0x24100001, 0x00c02021,
5473 0x0e000350, 0x02003021, 0x24020003, 0x3c010800, 0xa0221b98, 0x24020002,
5474 0x1202000a, 0x24020001, 0x3c030800, 0x8c6323f0, 0x10620006, 0x00000000,
5475 0x3c020800, 0x944223d8, 0x00021400, 0x0a00031f, 0xae220014, 0x3c040800,
5476 0x248423da, 0x94820000, 0x00021400, 0xae220014, 0x3c020800, 0x8c421bbc,
5477 0x3c03c000, 0x3c010800, 0xa0201b98, 0x00431025, 0xaf625c5c, 0x8f625c50,
5478 0x30420002, 0x10400009, 0x00000000, 0x2484f7e2, 0x8c820000, 0x00431025,
5479 0xaf625c5c, 0x8f625c50, 0x30420002, 0x1440fffa, 0x00000000, 0x3c020800,
5480 0x24421b84, 0x8c430000, 0x24630001, 0xac430000, 0x8f630c14, 0x3063000f,
5481 0x2c620002, 0x1440000c, 0x3c024000, 0x8f630c14, 0x3c020800, 0x8c421b40,
5482 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7,
5483 0x00000000, 0x3c024000, 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002,
5484 0x1440fffc, 0x00000000, 0x12600003, 0x00000000, 0x0e0004c0, 0x00000000,
5485 0x8fbf0028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x03e00008,
5486 0x27bd0030, 0x8f634450, 0x3c040800, 0x24841b88, 0x8c820000, 0x00031c02,
5487 0x0043102b, 0x14400007, 0x3c038000, 0x8c840004, 0x8f624450, 0x00021c02,
5488 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024,
5489 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3c024000,
5490 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00000000,
5491 0x03e00008, 0x00000000, 0x27bdffe0, 0x00805821, 0x14c00011, 0x256e0008,
5492 0x3c020800, 0x8c4223f4, 0x10400007, 0x24020016, 0x3c010800, 0xa42223d2,
5493 0x2402002a, 0x3c010800, 0x0a000364, 0xa42223d4, 0x8d670010, 0x00071402,
5494 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42723d4, 0x3c040800, 0x948423d4,
5495 0x3c030800, 0x946323d2, 0x95cf0006, 0x3c020800, 0x944223d0, 0x00832023,
5496 0x01e2c023, 0x3065ffff, 0x24a20028, 0x01c24821, 0x3082ffff, 0x14c0001a,
5497 0x01226021, 0x9582000c, 0x3042003f, 0x3c010800, 0xa42223d6, 0x95820004,
5498 0x95830006, 0x3c010800, 0xac2023e4, 0x3c010800, 0xac2023e8, 0x00021400,
5499 0x00431025, 0x3c010800, 0xac221bc0, 0x95220004, 0x3c010800, 0xa4221bc4,
5500 0x95230002, 0x01e51023, 0x0043102a, 0x10400010, 0x24020001, 0x3c010800,
5501 0x0a000398, 0xac2223f8, 0x3c030800, 0x8c6323e8, 0x3c020800, 0x94421bc4,
5502 0x00431021, 0xa5220004, 0x3c020800, 0x94421bc0, 0xa5820004, 0x3c020800,
5503 0x8c421bc0, 0xa5820006, 0x3c020800, 0x8c4223f0, 0x3c0d0800, 0x8dad23e4,
5504 0x3c0a0800, 0x144000e5, 0x8d4a23e8, 0x3c020800, 0x94421bc4, 0x004a1821,
5505 0x3063ffff, 0x0062182b, 0x24020002, 0x10c2000d, 0x01435023, 0x3c020800,
5506 0x944223d6, 0x30420009, 0x10400008, 0x00000000, 0x9582000c, 0x3042fff6,
5507 0xa582000c, 0x3c020800, 0x944223d6, 0x30420009, 0x01a26823, 0x3c020800,
5508 0x8c4223f8, 0x1040004a, 0x01203821, 0x3c020800, 0x944223d2, 0x00004021,
5509 0xa520000a, 0x01e21023, 0xa5220002, 0x3082ffff, 0x00021042, 0x18400008,
5510 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021, 0x0103102a,
5511 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061402,
5512 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021, 0x2527000c,
5513 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004, 0x1440fffb,
5514 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023, 0x01803821,
5515 0x3082ffff, 0xa4e00010, 0x00621821, 0x00021042, 0x18400010, 0x00c33021,
5516 0x00404821, 0x94e20000, 0x24e70002, 0x00c23021, 0x30e2007f, 0x14400006,
5517 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80, 0x00625824, 0x25670008,
5518 0x0109102a, 0x1440fff3, 0x00000000, 0x30820001, 0x10400005, 0x00061c02,
5519 0xa0e00001, 0x94e20000, 0x00c23021, 0x00061c02, 0x30c2ffff, 0x00623021,
5520 0x00061402, 0x00c23021, 0x0a00047d, 0x30c6ffff, 0x24020002, 0x14c20081,
5521 0x00000000, 0x3c020800, 0x8c42240c, 0x14400007, 0x00000000, 0x3c020800,
5522 0x944223d2, 0x95230002, 0x01e21023, 0x10620077, 0x00000000, 0x3c020800,
5523 0x944223d2, 0x01e21023, 0xa5220002, 0x3c020800, 0x8c42240c, 0x1040001a,
5524 0x31e3ffff, 0x8dc70010, 0x3c020800, 0x94421b96, 0x00e04021, 0x00072c02,
5525 0x00aa2021, 0x00431023, 0x00823823, 0x00072402, 0x30e2ffff, 0x00823821,
5526 0x00071027, 0xa522000a, 0x3102ffff, 0x3c040800, 0x948423d4, 0x00453023,
5527 0x00e02821, 0x00641823, 0x006d1821, 0x00c33021, 0x00061c02, 0x30c2ffff,
5528 0x0a00047d, 0x00623021, 0x01203821, 0x00004021, 0x3082ffff, 0x00021042,
5529 0x18400008, 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021,
5530 0x0103102a, 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021,
5531 0x00061402, 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021,
5532 0x2527000c, 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004,
5533 0x1440fffb, 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023,
5534 0x01803821, 0x3082ffff, 0xa4e00010, 0x3c040800, 0x948423d4, 0x00621821,
5535 0x00c33021, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061c02, 0x3c020800,
5536 0x944223d0, 0x00c34821, 0x00441023, 0x00021fc2, 0x00431021, 0x00021043,
5537 0x18400010, 0x00003021, 0x00402021, 0x94e20000, 0x24e70002, 0x00c23021,
5538 0x30e2007f, 0x14400006, 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80,
5539 0x00625824, 0x25670008, 0x0104102a, 0x1440fff3, 0x00000000, 0x3c020800,
5540 0x944223ec, 0x00c23021, 0x3122ffff, 0x00c23021, 0x00061c02, 0x30c2ffff,
5541 0x00623021, 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010,
5542 0xadc00014, 0x0a00049d, 0xadc00000, 0x8dc70010, 0x00e04021, 0x11400007,
5543 0x00072c02, 0x00aa3021, 0x00061402, 0x30c3ffff, 0x00433021, 0x00061402,
5544 0x00c22821, 0x00051027, 0xa522000a, 0x3c030800, 0x946323d4, 0x3102ffff,
5545 0x01e21021, 0x00433023, 0x00cd3021, 0x00061c02, 0x30c2ffff, 0x00623021,
5546 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010, 0x3102ffff,
5547 0x00051c00, 0x00431025, 0xadc20010, 0x3c020800, 0x8c4223f4, 0x10400005,
5548 0x2de205eb, 0x14400002, 0x25e2fff2, 0x34028870, 0xa5c20034, 0x3c030800,
5549 0x246323e8, 0x8c620000, 0x24420001, 0xac620000, 0x3c040800, 0x8c8423e4,
5550 0x3c020800, 0x8c421bc0, 0x3303ffff, 0x00832021, 0x00431821, 0x0062102b,
5551 0x3c010800, 0xac2423e4, 0x10400003, 0x2482ffff, 0x3c010800, 0xac2223e4,
5552 0x3c010800, 0xac231bc0, 0x03e00008, 0x27bd0020, 0x27bdffb8, 0x3c050800,
5553 0x24a51b96, 0xafbf0044, 0xafbe0040, 0xafb7003c, 0xafb60038, 0xafb50034,
5554 0xafb40030, 0xafb3002c, 0xafb20028, 0xafb10024, 0xafb00020, 0x94a90000,
5555 0x3c020800, 0x944223d0, 0x3c030800, 0x8c631bb0, 0x3c040800, 0x8c841bac,
5556 0x01221023, 0x0064182a, 0xa7a9001e, 0x106000be, 0xa7a20016, 0x24be0022,
5557 0x97b6001e, 0x24b3001a, 0x24b70016, 0x8fc20000, 0x14400008, 0x00000000,
5558 0x8fc2fff8, 0x97a30016, 0x8fc4fff4, 0x00431021, 0x0082202a, 0x148000b0,
5559 0x00000000, 0x97d50818, 0x32a2ffff, 0x104000a3, 0x00009021, 0x0040a021,
5560 0x00008821, 0x0e000625, 0x00000000, 0x00403021, 0x14c00007, 0x00000000,
5561 0x3c020800, 0x8c4223dc, 0x24420001, 0x3c010800, 0x0a000596, 0xac2223dc,
5562 0x3c100800, 0x02118021, 0x8e101bc8, 0x9608000a, 0x31020040, 0x10400005,
5563 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x31020080,
5564 0x54400001, 0x34e70010, 0x3c020800, 0x00511021, 0x8c421bd0, 0x3c030800,
5565 0x00711821, 0x8c631bd4, 0x00021500, 0x00031c00, 0x00431025, 0xacc20014,
5566 0x96040008, 0x3242ffff, 0x00821021, 0x0282102a, 0x14400002, 0x02b22823,
5567 0x00802821, 0x8e020000, 0x02459021, 0xacc20000, 0x8e020004, 0x00c02021,
5568 0x26310010, 0xac820004, 0x30e2ffff, 0xac800008, 0xa485000e, 0xac820010,
5569 0x24020305, 0x0e0005a2, 0xa482000c, 0x3242ffff, 0x0054102b, 0x1440ffc5,
5570 0x3242ffff, 0x0a00058e, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a,
5571 0x10400067, 0x00000000, 0x8e62fff0, 0x00028900, 0x3c100800, 0x02118021,
5572 0x0e000625, 0x8e101bc8, 0x00403021, 0x14c00005, 0x00000000, 0x8e62082c,
5573 0x24420001, 0x0a000596, 0xae62082c, 0x9608000a, 0x31020040, 0x10400005,
5574 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x3c020800,
5575 0x00511021, 0x8c421bd0, 0x3c030800, 0x00711821, 0x8c631bd4, 0x00021500,
5576 0x00031c00, 0x00431025, 0xacc20014, 0x8e63fff4, 0x96020008, 0x00432023,
5577 0x3242ffff, 0x3083ffff, 0x00431021, 0x02c2102a, 0x10400003, 0x00802821,
5578 0x97a9001e, 0x01322823, 0x8e620000, 0x30a4ffff, 0x00441021, 0xae620000,
5579 0xa4c5000e, 0x8e020000, 0xacc20000, 0x8e020004, 0x8e63fff4, 0x00431021,
5580 0xacc20004, 0x8e63fff4, 0x96020008, 0x00641821, 0x0062102a, 0x14400006,
5581 0x02459021, 0x8e62fff0, 0xae60fff4, 0x24420001, 0x0a000571, 0xae62fff0,
5582 0xae63fff4, 0xacc00008, 0x3242ffff, 0x10560003, 0x31020004, 0x10400006,
5583 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x34e70020, 0x24020905,
5584 0xa4c2000c, 0x8ee30000, 0x8ee20004, 0x14620007, 0x3c02b49a, 0x8ee20860,
5585 0x54400001, 0x34e70400, 0x3c024b65, 0x0a000588, 0x34427654, 0x344289ab,
5586 0xacc2001c, 0x30e2ffff, 0xacc20010, 0x0e0005a2, 0x00c02021, 0x3242ffff,
5587 0x0056102b, 0x1440ff9b, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a,
5588 0x1440ff48, 0x00000000, 0x8fbf0044, 0x8fbe0040, 0x8fb7003c, 0x8fb60038,
5589 0x8fb50034, 0x8fb40030, 0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020,
5590 0x03e00008, 0x27bd0048, 0x27bdffe8, 0xafbf0014, 0xafb00010, 0x8f624450,
5591 0x8f634410, 0x0a0005b1, 0x00808021, 0x8f626820, 0x30422000, 0x10400003,
5592 0x00000000, 0x0e0001f0, 0x00002021, 0x8f624450, 0x8f634410, 0x3042ffff,
5593 0x0043102b, 0x1440fff5, 0x00000000, 0x8f630c14, 0x3063000f, 0x2c620002,
5594 0x1440000b, 0x00000000, 0x8f630c14, 0x3c020800, 0x8c421b40, 0x3063000f,
5595 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7, 0x00000000,
5596 0xaf705c18, 0x8f625c10, 0x30420002, 0x10400009, 0x00000000, 0x8f626820,
5597 0x30422000, 0x1040fff8, 0x00000000, 0x0e0001f0, 0x00002021, 0x0a0005c4,
5598 0x00000000, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000,
5599 0x00000000, 0x00000000, 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010,
5600 0xaf60680c, 0x8f626804, 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50,
5601 0x3c010800, 0xac221b54, 0x24020b78, 0x3c010800, 0xac221b64, 0x34630002,
5602 0xaf634000, 0x0e000605, 0x00808021, 0x3c010800, 0xa0221b68, 0x304200ff,
5603 0x24030002, 0x14430005, 0x00000000, 0x3c020800, 0x8c421b54, 0x0a0005f8,
5604 0xac5000c0, 0x3c020800, 0x8c421b54, 0xac5000bc, 0x8f624434, 0x8f634438,
5605 0x8f644410, 0x3c010800, 0xac221b5c, 0x3c010800, 0xac231b6c, 0x3c010800,
5606 0xac241b58, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x3c040800,
5607 0x8c870000, 0x3c03aa55, 0x3463aa55, 0x3c06c003, 0xac830000, 0x8cc20000,
5608 0x14430007, 0x24050002, 0x3c0355aa, 0x346355aa, 0xac830000, 0x8cc20000,
5609 0x50430001, 0x24050001, 0x3c020800, 0xac470000, 0x03e00008, 0x00a01021,
5610 0x27bdfff8, 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe,
5611 0x00000000, 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008,
5612 0x27bd0008, 0x8f634450, 0x3c020800, 0x8c421b5c, 0x00031c02, 0x0043102b,
5613 0x14400008, 0x3c038000, 0x3c040800, 0x8c841b6c, 0x8f624450, 0x00021c02,
5614 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024,
5615 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff,
5616 0x2442e000, 0x2c422001, 0x14400003, 0x3c024000, 0x0a000648, 0x2402ffff,
5617 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021,
5618 0x03e00008, 0x00000000, 0x8f624450, 0x3c030800, 0x8c631b58, 0x0a000651,
5619 0x3042ffff, 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000,
5620 0x03e00008, 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040800, 0x24841af0,
5621 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014,
5622 0x0a000660, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000,
5623 0x00000000, 0x00000000, 0x3c020800, 0x34423000, 0x3c030800, 0x34633000,
5624 0x3c040800, 0x348437ff, 0x3c010800, 0xac221b74, 0x24020040, 0x3c010800,
5625 0xac221b78, 0x3c010800, 0xac201b70, 0xac600000, 0x24630004, 0x0083102b,
5626 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000, 0x00804821, 0x8faa0010,
5627 0x3c020800, 0x8c421b70, 0x3c040800, 0x8c841b78, 0x8fab0014, 0x24430001,
5628 0x0044102b, 0x3c010800, 0xac231b70, 0x14400003, 0x00004021, 0x3c010800,
5629 0xac201b70, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74, 0x91240000,
5630 0x00021140, 0x00431021, 0x00481021, 0x25080001, 0xa0440000, 0x29020008,
5631 0x1440fff4, 0x25290001, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74,
5632 0x8f64680c, 0x00021140, 0x00431021, 0xac440008, 0xac45000c, 0xac460010,
5633 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c, 0x00000000, 0x00000000,
5636 static const u32 tg3TsoFwRodata[] = {
5637 0x4d61696e, 0x43707542, 0x00000000, 0x4d61696e, 0x43707541, 0x00000000,
5638 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x496e0000, 0x73746b6f,
5639 0x66662a2a, 0x00000000, 0x53774576, 0x656e7430, 0x00000000, 0x00000000,
5640 0x00000000, 0x00000000, 0x66617461, 0x6c457272, 0x00000000, 0x00000000,
5641 0x00000000,
5644 static const u32 tg3TsoFwData[] = {
5645 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x362e3000, 0x00000000,
5646 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
5647 0x00000000,
5650 /* 5705 needs a special version of the TSO firmware. */
5651 #define TG3_TSO5_FW_RELEASE_MAJOR 0x1
5652 #define TG3_TSO5_FW_RELASE_MINOR 0x2
5653 #define TG3_TSO5_FW_RELEASE_FIX 0x0
5654 #define TG3_TSO5_FW_START_ADDR 0x00010000
5655 #define TG3_TSO5_FW_TEXT_ADDR 0x00010000
5656 #define TG3_TSO5_FW_TEXT_LEN 0xe90
5657 #define TG3_TSO5_FW_RODATA_ADDR 0x00010e90
5658 #define TG3_TSO5_FW_RODATA_LEN 0x50
5659 #define TG3_TSO5_FW_DATA_ADDR 0x00010f00
5660 #define TG3_TSO5_FW_DATA_LEN 0x20
5661 #define TG3_TSO5_FW_SBSS_ADDR 0x00010f20
5662 #define TG3_TSO5_FW_SBSS_LEN 0x28
5663 #define TG3_TSO5_FW_BSS_ADDR 0x00010f50
5664 #define TG3_TSO5_FW_BSS_LEN 0x88
5666 static const u32 tg3Tso5FwText[(TG3_TSO5_FW_TEXT_LEN / 4) + 1] = {
5667 0x0c004003, 0x00000000, 0x00010f04, 0x00000000, 0x10000003, 0x00000000,
5668 0x0000000d, 0x0000000d, 0x3c1d0001, 0x37bde000, 0x03a0f021, 0x3c100001,
5669 0x26100000, 0x0c004010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe,
5670 0xafbf0018, 0x0c0042e8, 0x34840002, 0x0c004364, 0x00000000, 0x3c030001,
5671 0x90630f34, 0x24020002, 0x3c040001, 0x24840e9c, 0x14620003, 0x24050001,
5672 0x3c040001, 0x24840e90, 0x24060002, 0x00003821, 0xafa00010, 0x0c004378,
5673 0xafa00014, 0x0c00402c, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020,
5674 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c, 0xafb20018, 0xafb10014,
5675 0x0c0042d4, 0xafb00010, 0x3c128000, 0x24110001, 0x8f706810, 0x32020400,
5676 0x10400007, 0x00000000, 0x8f641008, 0x00921024, 0x14400003, 0x00000000,
5677 0x0c004064, 0x00000000, 0x3c020001, 0x90420f56, 0x10510003, 0x32020200,
5678 0x1040fff1, 0x00000000, 0x0c0041b4, 0x00000000, 0x08004034, 0x00000000,
5679 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020,
5680 0x27bdffe0, 0x3c040001, 0x24840eb0, 0x00002821, 0x00003021, 0x00003821,
5681 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130,
5682 0xaf625000, 0x3c010001, 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018,
5683 0x03e00008, 0x27bd0020, 0x00000000, 0x00000000, 0x3c030001, 0x24630f60,
5684 0x90620000, 0x27bdfff0, 0x14400003, 0x0080c021, 0x08004073, 0x00004821,
5685 0x3c022000, 0x03021024, 0x10400003, 0x24090002, 0x08004073, 0xa0600000,
5686 0x24090001, 0x00181040, 0x30431f80, 0x346f8008, 0x1520004b, 0x25eb0028,
5687 0x3c040001, 0x00832021, 0x8c848010, 0x3c050001, 0x24a50f7a, 0x00041402,
5688 0xa0a20000, 0x3c010001, 0xa0240f7b, 0x3c020001, 0x00431021, 0x94428014,
5689 0x3c010001, 0xa0220f7c, 0x3c0c0001, 0x01836021, 0x8d8c8018, 0x304200ff,
5690 0x24420008, 0x000220c3, 0x24020001, 0x3c010001, 0xa0220f60, 0x0124102b,
5691 0x1040000c, 0x00003821, 0x24a6000e, 0x01602821, 0x8ca20000, 0x8ca30004,
5692 0x24a50008, 0x24e70001, 0xacc20000, 0xacc30004, 0x00e4102b, 0x1440fff8,
5693 0x24c60008, 0x00003821, 0x3c080001, 0x25080f7b, 0x91060000, 0x3c020001,
5694 0x90420f7c, 0x2503000d, 0x00c32821, 0x00461023, 0x00021fc2, 0x00431021,
5695 0x00021043, 0x1840000c, 0x00002021, 0x91020001, 0x00461023, 0x00021fc2,
5696 0x00431021, 0x00021843, 0x94a20000, 0x24e70001, 0x00822021, 0x00e3102a,
5697 0x1440fffb, 0x24a50002, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402,
5698 0x00822021, 0x3c02ffff, 0x01821024, 0x3083ffff, 0x00431025, 0x3c010001,
5699 0x080040fa, 0xac220f80, 0x3c050001, 0x24a50f7c, 0x90a20000, 0x3c0c0001,
5700 0x01836021, 0x8d8c8018, 0x000220c2, 0x1080000e, 0x00003821, 0x01603021,
5701 0x24a5000c, 0x8ca20000, 0x8ca30004, 0x24a50008, 0x24e70001, 0xacc20000,
5702 0xacc30004, 0x00e4102b, 0x1440fff8, 0x24c60008, 0x3c050001, 0x24a50f7c,
5703 0x90a20000, 0x30430007, 0x24020004, 0x10620011, 0x28620005, 0x10400005,
5704 0x24020002, 0x10620008, 0x000710c0, 0x080040fa, 0x00000000, 0x24020006,
5705 0x1062000e, 0x000710c0, 0x080040fa, 0x00000000, 0x00a21821, 0x9463000c,
5706 0x004b1021, 0x080040fa, 0xa4430000, 0x000710c0, 0x00a21821, 0x8c63000c,
5707 0x004b1021, 0x080040fa, 0xac430000, 0x00a21821, 0x8c63000c, 0x004b2021,
5708 0x00a21021, 0xac830000, 0x94420010, 0xa4820004, 0x95e70006, 0x3c020001,
5709 0x90420f7c, 0x3c030001, 0x90630f7a, 0x00e2c823, 0x3c020001, 0x90420f7b,
5710 0x24630028, 0x01e34021, 0x24420028, 0x15200012, 0x01e23021, 0x94c2000c,
5711 0x3c010001, 0xa4220f78, 0x94c20004, 0x94c30006, 0x3c010001, 0xa4200f76,
5712 0x3c010001, 0xa4200f72, 0x00021400, 0x00431025, 0x3c010001, 0xac220f6c,
5713 0x95020004, 0x3c010001, 0x08004124, 0xa4220f70, 0x3c020001, 0x94420f70,
5714 0x3c030001, 0x94630f72, 0x00431021, 0xa5020004, 0x3c020001, 0x94420f6c,
5715 0xa4c20004, 0x3c020001, 0x8c420f6c, 0xa4c20006, 0x3c040001, 0x94840f72,
5716 0x3c020001, 0x94420f70, 0x3c0a0001, 0x954a0f76, 0x00441821, 0x3063ffff,
5717 0x0062182a, 0x24020002, 0x1122000b, 0x00832023, 0x3c030001, 0x94630f78,
5718 0x30620009, 0x10400006, 0x3062fff6, 0xa4c2000c, 0x3c020001, 0x94420f78,
5719 0x30420009, 0x01425023, 0x24020001, 0x1122001b, 0x29220002, 0x50400005,
5720 0x24020002, 0x11200007, 0x31a2ffff, 0x08004197, 0x00000000, 0x1122001d,
5721 0x24020016, 0x08004197, 0x31a2ffff, 0x3c0e0001, 0x95ce0f80, 0x10800005,
5722 0x01806821, 0x01c42021, 0x00041c02, 0x3082ffff, 0x00627021, 0x000e1027,
5723 0xa502000a, 0x3c030001, 0x90630f7b, 0x31a2ffff, 0x00e21021, 0x0800418d,
5724 0x00432023, 0x3c020001, 0x94420f80, 0x00442021, 0x00041c02, 0x3082ffff,
5725 0x00622021, 0x00807021, 0x00041027, 0x08004185, 0xa502000a, 0x3c050001,
5726 0x24a50f7a, 0x90a30000, 0x14620002, 0x24e2fff2, 0xa5e20034, 0x90a20000,
5727 0x00e21023, 0xa5020002, 0x3c030001, 0x94630f80, 0x3c020001, 0x94420f5a,
5728 0x30e5ffff, 0x00641821, 0x00451023, 0x00622023, 0x00041c02, 0x3082ffff,
5729 0x00622021, 0x00041027, 0xa502000a, 0x3c030001, 0x90630f7c, 0x24620001,
5730 0x14a20005, 0x00807021, 0x01631021, 0x90420000, 0x08004185, 0x00026200,
5731 0x24620002, 0x14a20003, 0x306200fe, 0x004b1021, 0x944c0000, 0x3c020001,
5732 0x94420f82, 0x3183ffff, 0x3c040001, 0x90840f7b, 0x00431021, 0x00e21021,
5733 0x00442023, 0x008a2021, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402,
5734 0x00822021, 0x00806821, 0x00041027, 0xa4c20010, 0x31a2ffff, 0x000e1c00,
5735 0x00431025, 0x3c040001, 0x24840f72, 0xade20010, 0x94820000, 0x3c050001,
5736 0x94a50f76, 0x3c030001, 0x8c630f6c, 0x24420001, 0x00b92821, 0xa4820000,
5737 0x3322ffff, 0x00622021, 0x0083182b, 0x3c010001, 0xa4250f76, 0x10600003,
5738 0x24a2ffff, 0x3c010001, 0xa4220f76, 0x3c024000, 0x03021025, 0x3c010001,
5739 0xac240f6c, 0xaf621008, 0x03e00008, 0x27bd0010, 0x3c030001, 0x90630f56,
5740 0x27bdffe8, 0x24020001, 0xafbf0014, 0x10620026, 0xafb00010, 0x8f620cf4,
5741 0x2442ffff, 0x3042007f, 0x00021100, 0x8c434000, 0x3c010001, 0xac230f64,
5742 0x8c434008, 0x24444000, 0x8c5c4004, 0x30620040, 0x14400002, 0x24020088,
5743 0x24020008, 0x3c010001, 0xa4220f68, 0x30620004, 0x10400005, 0x24020001,
5744 0x3c010001, 0xa0220f57, 0x080041d5, 0x00031402, 0x3c010001, 0xa0200f57,
5745 0x00031402, 0x3c010001, 0xa4220f54, 0x9483000c, 0x24020001, 0x3c010001,
5746 0xa4200f50, 0x3c010001, 0xa0220f56, 0x3c010001, 0xa4230f62, 0x24020001,
5747 0x1342001e, 0x00000000, 0x13400005, 0x24020003, 0x13420067, 0x00000000,
5748 0x080042cf, 0x00000000, 0x3c020001, 0x94420f62, 0x241a0001, 0x3c010001,
5749 0xa4200f5e, 0x3c010001, 0xa4200f52, 0x304407ff, 0x00021bc2, 0x00031823,
5750 0x3063003e, 0x34630036, 0x00021242, 0x3042003c, 0x00621821, 0x3c010001,
5751 0xa4240f58, 0x00832021, 0x24630030, 0x3c010001, 0xa4240f5a, 0x3c010001,
5752 0xa4230f5c, 0x3c060001, 0x24c60f52, 0x94c50000, 0x94c30002, 0x3c040001,
5753 0x94840f5a, 0x00651021, 0x0044102a, 0x10400013, 0x3c108000, 0x00a31021,
5754 0xa4c20000, 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008,
5755 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4,
5756 0x00501024, 0x104000b7, 0x00000000, 0x0800420f, 0x00000000, 0x3c030001,
5757 0x94630f50, 0x00851023, 0xa4c40000, 0x00621821, 0x3042ffff, 0x3c010001,
5758 0xa4230f50, 0xaf620ce8, 0x3c020001, 0x94420f68, 0x34420024, 0xaf620cec,
5759 0x94c30002, 0x3c020001, 0x94420f50, 0x14620012, 0x3c028000, 0x3c108000,
5760 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008, 0x00901024,
5761 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024,
5762 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003, 0xaf620cf4, 0x3c108000,
5763 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000,
5764 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003,
5765 0x3c070001, 0x24e70f50, 0x94e20000, 0x03821021, 0xaf620ce0, 0x3c020001,
5766 0x8c420f64, 0xaf620ce4, 0x3c050001, 0x94a50f54, 0x94e30000, 0x3c040001,
5767 0x94840f58, 0x3c020001, 0x94420f5e, 0x00a32823, 0x00822023, 0x30a6ffff,
5768 0x3083ffff, 0x00c3102b, 0x14400043, 0x00000000, 0x3c020001, 0x94420f5c,
5769 0x00021400, 0x00621025, 0xaf620ce8, 0x94e20000, 0x3c030001, 0x94630f54,
5770 0x00441021, 0xa4e20000, 0x3042ffff, 0x14430021, 0x3c020008, 0x3c020001,
5771 0x90420f57, 0x10400006, 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624,
5772 0x0800427c, 0x0000d021, 0x3c020001, 0x94420f68, 0x3c030008, 0x34630624,
5773 0x00431025, 0xaf620cec, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001,
5774 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064,
5775 0x00000000, 0x8f620cf4, 0x00501024, 0x10400015, 0x00000000, 0x08004283,
5776 0x00000000, 0x3c030001, 0x94630f68, 0x34420624, 0x3c108000, 0x00621825,
5777 0x3c028000, 0xaf630cec, 0xaf620cf4, 0x8f641008, 0x00901024, 0x14400003,
5778 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7,
5779 0x00000000, 0x3c010001, 0x080042cf, 0xa4200f5e, 0x3c020001, 0x94420f5c,
5780 0x00021400, 0x00c21025, 0xaf620ce8, 0x3c020001, 0x90420f57, 0x10400009,
5781 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624, 0x0000d021, 0x00431025,
5782 0xaf620cec, 0x080042c1, 0x3c108000, 0x3c020001, 0x94420f68, 0x3c030008,
5783 0x34630604, 0x00431025, 0xaf620cec, 0x3c020001, 0x94420f5e, 0x00451021,
5784 0x3c010001, 0xa4220f5e, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001,
5785 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064,
5786 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x8fbf0014,
5787 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000, 0x27bdffe0, 0x3c040001,
5788 0x24840ec0, 0x00002821, 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010,
5789 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130, 0xaf625000, 0x3c010001,
5790 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018, 0x03e00008, 0x27bd0020,
5791 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010, 0xaf60680c, 0x8f626804,
5792 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50, 0x3c010001, 0xac220f20,
5793 0x24020b78, 0x3c010001, 0xac220f30, 0x34630002, 0xaf634000, 0x0c004315,
5794 0x00808021, 0x3c010001, 0xa0220f34, 0x304200ff, 0x24030002, 0x14430005,
5795 0x00000000, 0x3c020001, 0x8c420f20, 0x08004308, 0xac5000c0, 0x3c020001,
5796 0x8c420f20, 0xac5000bc, 0x8f624434, 0x8f634438, 0x8f644410, 0x3c010001,
5797 0xac220f28, 0x3c010001, 0xac230f38, 0x3c010001, 0xac240f24, 0x8fbf0014,
5798 0x8fb00010, 0x03e00008, 0x27bd0018, 0x03e00008, 0x24020001, 0x27bdfff8,
5799 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe, 0x00000000,
5800 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008, 0x27bd0008,
5801 0x8f634450, 0x3c020001, 0x8c420f28, 0x00031c02, 0x0043102b, 0x14400008,
5802 0x3c038000, 0x3c040001, 0x8c840f38, 0x8f624450, 0x00021c02, 0x0083102b,
5803 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024, 0x1440fffd,
5804 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff, 0x2442e000,
5805 0x2c422001, 0x14400003, 0x3c024000, 0x08004347, 0x2402ffff, 0x00822025,
5806 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021, 0x03e00008,
5807 0x00000000, 0x8f624450, 0x3c030001, 0x8c630f24, 0x08004350, 0x3042ffff,
5808 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000, 0x03e00008,
5809 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040001, 0x24840ed0, 0x00003021,
5810 0x00003821, 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0800435f,
5811 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x3c020001, 0x3442d600,
5812 0x3c030001, 0x3463d600, 0x3c040001, 0x3484ddff, 0x3c010001, 0xac220f40,
5813 0x24020040, 0x3c010001, 0xac220f44, 0x3c010001, 0xac200f3c, 0xac600000,
5814 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000,
5815 0x00804821, 0x8faa0010, 0x3c020001, 0x8c420f3c, 0x3c040001, 0x8c840f44,
5816 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010001, 0xac230f3c, 0x14400003,
5817 0x00004021, 0x3c010001, 0xac200f3c, 0x3c020001, 0x8c420f3c, 0x3c030001,
5818 0x8c630f40, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001,
5819 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020001, 0x8c420f3c,
5820 0x3c030001, 0x8c630f40, 0x8f64680c, 0x00021140, 0x00431021, 0xac440008,
5821 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c,
5822 0x00000000, 0x00000000, 0x00000000,
5825 static const u32 tg3Tso5FwRodata[(TG3_TSO5_FW_RODATA_LEN / 4) + 1] = {
5826 0x4d61696e, 0x43707542, 0x00000000, 0x4d61696e, 0x43707541, 0x00000000,
5827 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000,
5828 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000, 0x66617461, 0x6c457272,
5829 0x00000000, 0x00000000, 0x00000000,
5832 static const u32 tg3Tso5FwData[(TG3_TSO5_FW_DATA_LEN / 4) + 1] = {
5833 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x322e3000, 0x00000000,
5834 0x00000000, 0x00000000, 0x00000000,
5837 /* tp->lock is held. */
5838 static int tg3_load_tso_firmware(struct tg3 *tp)
5840 struct fw_info info;
5841 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
5842 int err, i;
5844 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
5845 return 0;
5847 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
5848 info.text_base = TG3_TSO5_FW_TEXT_ADDR;
5849 info.text_len = TG3_TSO5_FW_TEXT_LEN;
5850 info.text_data = &tg3Tso5FwText[0];
5851 info.rodata_base = TG3_TSO5_FW_RODATA_ADDR;
5852 info.rodata_len = TG3_TSO5_FW_RODATA_LEN;
5853 info.rodata_data = &tg3Tso5FwRodata[0];
5854 info.data_base = TG3_TSO5_FW_DATA_ADDR;
5855 info.data_len = TG3_TSO5_FW_DATA_LEN;
5856 info.data_data = &tg3Tso5FwData[0];
5857 cpu_base = RX_CPU_BASE;
5858 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
5859 cpu_scratch_size = (info.text_len +
5860 info.rodata_len +
5861 info.data_len +
5862 TG3_TSO5_FW_SBSS_LEN +
5863 TG3_TSO5_FW_BSS_LEN);
5864 } else {
5865 info.text_base = TG3_TSO_FW_TEXT_ADDR;
5866 info.text_len = TG3_TSO_FW_TEXT_LEN;
5867 info.text_data = &tg3TsoFwText[0];
5868 info.rodata_base = TG3_TSO_FW_RODATA_ADDR;
5869 info.rodata_len = TG3_TSO_FW_RODATA_LEN;
5870 info.rodata_data = &tg3TsoFwRodata[0];
5871 info.data_base = TG3_TSO_FW_DATA_ADDR;
5872 info.data_len = TG3_TSO_FW_DATA_LEN;
5873 info.data_data = &tg3TsoFwData[0];
5874 cpu_base = TX_CPU_BASE;
5875 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
5876 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
5879 err = tg3_load_firmware_cpu(tp, cpu_base,
5880 cpu_scratch_base, cpu_scratch_size,
5881 &info);
5882 if (err)
5883 return err;
5885 /* Now startup the cpu. */
5886 tw32(cpu_base + CPU_STATE, 0xffffffff);
5887 tw32_f(cpu_base + CPU_PC, info.text_base);
5889 for (i = 0; i < 5; i++) {
5890 if (tr32(cpu_base + CPU_PC) == info.text_base)
5891 break;
5892 tw32(cpu_base + CPU_STATE, 0xffffffff);
5893 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT);
5894 tw32_f(cpu_base + CPU_PC, info.text_base);
5895 udelay(1000);
5897 if (i >= 5) {
5898 printk(KERN_ERR PFX "tg3_load_tso_firmware fails for %s "
5899 "to set CPU PC, is %08x should be %08x\n",
5900 tp->dev->name, tr32(cpu_base + CPU_PC),
5901 info.text_base);
5902 return -ENODEV;
5904 tw32(cpu_base + CPU_STATE, 0xffffffff);
5905 tw32_f(cpu_base + CPU_MODE, 0x00000000);
5906 return 0;
5909 #endif /* TG3_TSO_SUPPORT != 0 */
5911 /* tp->lock is held. */
5912 static void __tg3_set_mac_addr(struct tg3 *tp)
5914 u32 addr_high, addr_low;
5915 int i;
5917 addr_high = ((tp->dev->dev_addr[0] << 8) |
5918 tp->dev->dev_addr[1]);
5919 addr_low = ((tp->dev->dev_addr[2] << 24) |
5920 (tp->dev->dev_addr[3] << 16) |
5921 (tp->dev->dev_addr[4] << 8) |
5922 (tp->dev->dev_addr[5] << 0));
5923 for (i = 0; i < 4; i++) {
5924 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
5925 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
5928 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
5929 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
5930 for (i = 0; i < 12; i++) {
5931 tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
5932 tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
5936 addr_high = (tp->dev->dev_addr[0] +
5937 tp->dev->dev_addr[1] +
5938 tp->dev->dev_addr[2] +
5939 tp->dev->dev_addr[3] +
5940 tp->dev->dev_addr[4] +
5941 tp->dev->dev_addr[5]) &
5942 TX_BACKOFF_SEED_MASK;
5943 tw32(MAC_TX_BACKOFF_SEED, addr_high);
5946 static int tg3_set_mac_addr(struct net_device *dev, void *p)
5948 struct tg3 *tp = netdev_priv(dev);
5949 struct sockaddr *addr = p;
5950 int err = 0;
5952 if (!is_valid_ether_addr(addr->sa_data))
5953 return -EINVAL;
5955 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
5957 if (!netif_running(dev))
5958 return 0;
5960 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
5961 /* Reset chip so that ASF can re-init any MAC addresses it
5962 * needs.
5964 tg3_netif_stop(tp);
5965 tg3_full_lock(tp, 1);
5967 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
5968 err = tg3_restart_hw(tp, 0);
5969 if (!err)
5970 tg3_netif_start(tp);
5971 tg3_full_unlock(tp);
5972 } else {
5973 spin_lock_bh(&tp->lock);
5974 __tg3_set_mac_addr(tp);
5975 spin_unlock_bh(&tp->lock);
5978 return err;
5981 /* tp->lock is held. */
5982 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
5983 dma_addr_t mapping, u32 maxlen_flags,
5984 u32 nic_addr)
5986 tg3_write_mem(tp,
5987 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
5988 ((u64) mapping >> 32));
5989 tg3_write_mem(tp,
5990 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
5991 ((u64) mapping & 0xffffffff));
5992 tg3_write_mem(tp,
5993 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
5994 maxlen_flags);
5996 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
5997 tg3_write_mem(tp,
5998 (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
5999 nic_addr);
6002 static void __tg3_set_rx_mode(struct net_device *);
6003 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
6005 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
6006 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
6007 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
6008 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
6009 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6010 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
6011 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
6013 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
6014 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
6015 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6016 u32 val = ec->stats_block_coalesce_usecs;
6018 if (!netif_carrier_ok(tp->dev))
6019 val = 0;
6021 tw32(HOSTCC_STAT_COAL_TICKS, val);
6025 /* tp->lock is held. */
6026 static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
6028 u32 val, rdmac_mode;
6029 int i, err, limit;
6031 tg3_disable_ints(tp);
6033 tg3_stop_fw(tp);
6035 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
6037 if (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) {
6038 tg3_abort_hw(tp, 1);
6041 if (reset_phy)
6042 tg3_phy_reset(tp);
6044 err = tg3_chip_reset(tp);
6045 if (err)
6046 return err;
6048 tg3_write_sig_legacy(tp, RESET_KIND_INIT);
6050 /* This works around an issue with Athlon chipsets on
6051 * B3 tigon3 silicon. This bit has no effect on any
6052 * other revision. But do not set this on PCI Express
6053 * chips.
6055 if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
6056 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
6057 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
6059 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
6060 (tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
6061 val = tr32(TG3PCI_PCISTATE);
6062 val |= PCISTATE_RETRY_SAME_DMA;
6063 tw32(TG3PCI_PCISTATE, val);
6066 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) {
6067 /* Enable some hw fixes. */
6068 val = tr32(TG3PCI_MSI_DATA);
6069 val |= (1 << 26) | (1 << 28) | (1 << 29);
6070 tw32(TG3PCI_MSI_DATA, val);
6073 /* Descriptor ring init may make accesses to the
6074 * NIC SRAM area to setup the TX descriptors, so we
6075 * can only do this after the hardware has been
6076 * successfully reset.
6078 err = tg3_init_rings(tp);
6079 if (err)
6080 return err;
6082 /* This value is determined during the probe time DMA
6083 * engine test, tg3_test_dma.
6085 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
6087 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
6088 GRC_MODE_4X_NIC_SEND_RINGS |
6089 GRC_MODE_NO_TX_PHDR_CSUM |
6090 GRC_MODE_NO_RX_PHDR_CSUM);
6091 tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
6093 /* Pseudo-header checksum is done by hardware logic and not
6094 * the offload processers, so make the chip do the pseudo-
6095 * header checksums on receive. For transmit it is more
6096 * convenient to do the pseudo-header checksum in software
6097 * as Linux does that on transmit for us in all cases.
6099 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
6101 tw32(GRC_MODE,
6102 tp->grc_mode |
6103 (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
6105 /* Setup the timer prescalar register. Clock is always 66Mhz. */
6106 val = tr32(GRC_MISC_CFG);
6107 val &= ~0xff;
6108 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
6109 tw32(GRC_MISC_CFG, val);
6111 /* Initialize MBUF/DESC pool. */
6112 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
6113 /* Do nothing. */
6114 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
6115 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
6116 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
6117 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
6118 else
6119 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
6120 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
6121 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
6123 #if TG3_TSO_SUPPORT != 0
6124 else if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
6125 int fw_len;
6127 fw_len = (TG3_TSO5_FW_TEXT_LEN +
6128 TG3_TSO5_FW_RODATA_LEN +
6129 TG3_TSO5_FW_DATA_LEN +
6130 TG3_TSO5_FW_SBSS_LEN +
6131 TG3_TSO5_FW_BSS_LEN);
6132 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
6133 tw32(BUFMGR_MB_POOL_ADDR,
6134 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
6135 tw32(BUFMGR_MB_POOL_SIZE,
6136 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
6138 #endif
6140 if (tp->dev->mtu <= ETH_DATA_LEN) {
6141 tw32(BUFMGR_MB_RDMA_LOW_WATER,
6142 tp->bufmgr_config.mbuf_read_dma_low_water);
6143 tw32(BUFMGR_MB_MACRX_LOW_WATER,
6144 tp->bufmgr_config.mbuf_mac_rx_low_water);
6145 tw32(BUFMGR_MB_HIGH_WATER,
6146 tp->bufmgr_config.mbuf_high_water);
6147 } else {
6148 tw32(BUFMGR_MB_RDMA_LOW_WATER,
6149 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
6150 tw32(BUFMGR_MB_MACRX_LOW_WATER,
6151 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
6152 tw32(BUFMGR_MB_HIGH_WATER,
6153 tp->bufmgr_config.mbuf_high_water_jumbo);
6155 tw32(BUFMGR_DMA_LOW_WATER,
6156 tp->bufmgr_config.dma_low_water);
6157 tw32(BUFMGR_DMA_HIGH_WATER,
6158 tp->bufmgr_config.dma_high_water);
6160 tw32(BUFMGR_MODE, BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE);
6161 for (i = 0; i < 2000; i++) {
6162 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
6163 break;
6164 udelay(10);
6166 if (i >= 2000) {
6167 printk(KERN_ERR PFX "tg3_reset_hw cannot enable BUFMGR for %s.\n",
6168 tp->dev->name);
6169 return -ENODEV;
6172 /* Setup replenish threshold. */
6173 val = tp->rx_pending / 8;
6174 if (val == 0)
6175 val = 1;
6176 else if (val > tp->rx_std_max_post)
6177 val = tp->rx_std_max_post;
6178 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
6179 if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1)
6180 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
6182 if (val > (TG3_RX_INTERNAL_RING_SZ_5906 / 2))
6183 val = TG3_RX_INTERNAL_RING_SZ_5906 / 2;
6186 tw32(RCVBDI_STD_THRESH, val);
6188 /* Initialize TG3_BDINFO's at:
6189 * RCVDBDI_STD_BD: standard eth size rx ring
6190 * RCVDBDI_JUMBO_BD: jumbo frame rx ring
6191 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work)
6193 * like so:
6194 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring
6195 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) |
6196 * ring attribute flags
6197 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM
6199 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
6200 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
6202 * The size of each ring is fixed in the firmware, but the location is
6203 * configurable.
6205 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
6206 ((u64) tp->rx_std_mapping >> 32));
6207 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
6208 ((u64) tp->rx_std_mapping & 0xffffffff));
6209 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
6210 NIC_SRAM_RX_BUFFER_DESC);
6212 /* Don't even try to program the JUMBO/MINI buffer descriptor
6213 * configs on 5705.
6215 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
6216 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS,
6217 RX_STD_MAX_SIZE_5705 << BDINFO_FLAGS_MAXLEN_SHIFT);
6218 } else {
6219 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS,
6220 RX_STD_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT);
6222 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
6223 BDINFO_FLAGS_DISABLED);
6225 /* Setup replenish threshold. */
6226 tw32(RCVBDI_JUMBO_THRESH, tp->rx_jumbo_pending / 8);
6228 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
6229 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
6230 ((u64) tp->rx_jumbo_mapping >> 32));
6231 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
6232 ((u64) tp->rx_jumbo_mapping & 0xffffffff));
6233 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
6234 RX_JUMBO_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT);
6235 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
6236 NIC_SRAM_RX_JUMBO_BUFFER_DESC);
6237 } else {
6238 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
6239 BDINFO_FLAGS_DISABLED);
6244 /* There is only one send ring on 5705/5750, no need to explicitly
6245 * disable the others.
6247 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6248 /* Clear out send RCB ring in SRAM. */
6249 for (i = NIC_SRAM_SEND_RCB; i < NIC_SRAM_RCV_RET_RCB; i += TG3_BDINFO_SIZE)
6250 tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS,
6251 BDINFO_FLAGS_DISABLED);
6254 tp->tx_prod = 0;
6255 tp->tx_cons = 0;
6256 tw32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
6257 tw32_tx_mbox(MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
6259 tg3_set_bdinfo(tp, NIC_SRAM_SEND_RCB,
6260 tp->tx_desc_mapping,
6261 (TG3_TX_RING_SIZE <<
6262 BDINFO_FLAGS_MAXLEN_SHIFT),
6263 NIC_SRAM_TX_BUFFER_DESC);
6265 /* There is only one receive return ring on 5705/5750, no need
6266 * to explicitly disable the others.
6268 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6269 for (i = NIC_SRAM_RCV_RET_RCB; i < NIC_SRAM_STATS_BLK;
6270 i += TG3_BDINFO_SIZE) {
6271 tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS,
6272 BDINFO_FLAGS_DISABLED);
6276 tp->rx_rcb_ptr = 0;
6277 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, 0);
6279 tg3_set_bdinfo(tp, NIC_SRAM_RCV_RET_RCB,
6280 tp->rx_rcb_mapping,
6281 (TG3_RX_RCB_RING_SIZE(tp) <<
6282 BDINFO_FLAGS_MAXLEN_SHIFT),
6285 tp->rx_std_ptr = tp->rx_pending;
6286 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW,
6287 tp->rx_std_ptr);
6289 tp->rx_jumbo_ptr = (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) ?
6290 tp->rx_jumbo_pending : 0;
6291 tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW,
6292 tp->rx_jumbo_ptr);
6294 /* Initialize MAC address and backoff seed. */
6295 __tg3_set_mac_addr(tp);
6297 /* MTU + ethernet header + FCS + optional VLAN tag */
6298 tw32(MAC_RX_MTU_SIZE, tp->dev->mtu + ETH_HLEN + 8);
6300 /* The slot time is changed by tg3_setup_phy if we
6301 * run at gigabit with half duplex.
6303 tw32(MAC_TX_LENGTHS,
6304 (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6305 (6 << TX_LENGTHS_IPG_SHIFT) |
6306 (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6308 /* Receive rules. */
6309 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
6310 tw32(RCVLPC_CONFIG, 0x0181);
6312 /* Calculate RDMAC_MODE setting early, we need it to determine
6313 * the RCVLPC_STATE_ENABLE mask.
6315 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
6316 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
6317 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
6318 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
6319 RDMAC_MODE_LNGREAD_ENAB);
6320 if (tp->tg3_flags & TG3_FLAG_SPLIT_MODE)
6321 rdmac_mode |= RDMAC_MODE_SPLIT_ENABLE;
6323 /* If statement applies to 5705 and 5750 PCI devices only */
6324 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
6325 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) ||
6326 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)) {
6327 if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE &&
6328 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
6329 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
6330 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
6331 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
6332 !(tp->tg3_flags2 & TG3_FLG2_IS_5788)) {
6333 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
6337 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)
6338 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
6340 #if TG3_TSO_SUPPORT != 0
6341 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
6342 rdmac_mode |= (1 << 27);
6343 #endif
6345 /* Receive/send statistics. */
6346 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
6347 val = tr32(RCVLPC_STATS_ENABLE);
6348 val &= ~RCVLPC_STATSENAB_DACK_FIX;
6349 tw32(RCVLPC_STATS_ENABLE, val);
6350 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
6351 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) {
6352 val = tr32(RCVLPC_STATS_ENABLE);
6353 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
6354 tw32(RCVLPC_STATS_ENABLE, val);
6355 } else {
6356 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
6358 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
6359 tw32(SNDDATAI_STATSENAB, 0xffffff);
6360 tw32(SNDDATAI_STATSCTRL,
6361 (SNDDATAI_SCTRL_ENABLE |
6362 SNDDATAI_SCTRL_FASTUPD));
6364 /* Setup host coalescing engine. */
6365 tw32(HOSTCC_MODE, 0);
6366 for (i = 0; i < 2000; i++) {
6367 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
6368 break;
6369 udelay(10);
6372 __tg3_set_coalesce(tp, &tp->coal);
6374 /* set status block DMA address */
6375 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
6376 ((u64) tp->status_mapping >> 32));
6377 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
6378 ((u64) tp->status_mapping & 0xffffffff));
6380 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6381 /* Status/statistics block address. See tg3_timer,
6382 * the tg3_periodic_fetch_stats call there, and
6383 * tg3_get_stats to see how this works for 5705/5750 chips.
6385 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
6386 ((u64) tp->stats_mapping >> 32));
6387 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
6388 ((u64) tp->stats_mapping & 0xffffffff));
6389 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
6390 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
6393 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
6395 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
6396 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
6397 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
6398 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
6400 /* Clear statistics/status block in chip, and status block in ram. */
6401 for (i = NIC_SRAM_STATS_BLK;
6402 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
6403 i += sizeof(u32)) {
6404 tg3_write_mem(tp, i, 0);
6405 udelay(40);
6407 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
6409 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
6410 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
6411 /* reset to prevent losing 1st rx packet intermittently */
6412 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
6413 udelay(10);
6416 tp->mac_mode = MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
6417 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | MAC_MODE_FHDE_ENABLE;
6418 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
6419 udelay(40);
6421 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
6422 * If TG3_FLG2_IS_NIC is zero, we should read the
6423 * register to preserve the GPIO settings for LOMs. The GPIOs,
6424 * whether used as inputs or outputs, are set by boot code after
6425 * reset.
6427 if (!(tp->tg3_flags2 & TG3_FLG2_IS_NIC)) {
6428 u32 gpio_mask;
6430 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
6431 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
6432 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
6434 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
6435 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
6436 GRC_LCLCTRL_GPIO_OUTPUT3;
6438 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
6439 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
6441 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
6443 /* GPIO1 must be driven high for eeprom write protect */
6444 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT)
6445 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
6446 GRC_LCLCTRL_GPIO_OUTPUT1);
6448 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
6449 udelay(100);
6451 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0);
6452 tp->last_tag = 0;
6454 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6455 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
6456 udelay(40);
6459 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
6460 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
6461 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
6462 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
6463 WDMAC_MODE_LNGREAD_ENAB);
6465 /* If statement applies to 5705 and 5750 PCI devices only */
6466 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
6467 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) ||
6468 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) {
6469 if ((tp->tg3_flags & TG3_FLG2_TSO_CAPABLE) &&
6470 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
6471 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
6472 /* nothing */
6473 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
6474 !(tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
6475 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) {
6476 val |= WDMAC_MODE_RX_ACCEL;
6480 /* Enable host coalescing bug fix */
6481 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) ||
6482 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787))
6483 val |= (1 << 29);
6485 tw32_f(WDMAC_MODE, val);
6486 udelay(40);
6488 if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) != 0) {
6489 val = tr32(TG3PCI_X_CAPS);
6490 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
6491 val &= ~PCIX_CAPS_BURST_MASK;
6492 val |= (PCIX_CAPS_MAX_BURST_CPIOB << PCIX_CAPS_BURST_SHIFT);
6493 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
6494 val &= ~(PCIX_CAPS_SPLIT_MASK | PCIX_CAPS_BURST_MASK);
6495 val |= (PCIX_CAPS_MAX_BURST_CPIOB << PCIX_CAPS_BURST_SHIFT);
6496 if (tp->tg3_flags & TG3_FLAG_SPLIT_MODE)
6497 val |= (tp->split_mode_max_reqs <<
6498 PCIX_CAPS_SPLIT_SHIFT);
6500 tw32(TG3PCI_X_CAPS, val);
6503 tw32_f(RDMAC_MODE, rdmac_mode);
6504 udelay(40);
6506 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
6507 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
6508 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
6509 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
6510 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
6511 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
6512 tw32(RCVDBDI_MODE, RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ);
6513 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
6514 #if TG3_TSO_SUPPORT != 0
6515 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
6516 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
6517 #endif
6518 tw32(SNDBDI_MODE, SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE);
6519 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
6521 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
6522 err = tg3_load_5701_a0_firmware_fix(tp);
6523 if (err)
6524 return err;
6527 #if TG3_TSO_SUPPORT != 0
6528 if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
6529 err = tg3_load_tso_firmware(tp);
6530 if (err)
6531 return err;
6533 #endif
6535 tp->tx_mode = TX_MODE_ENABLE;
6536 tw32_f(MAC_TX_MODE, tp->tx_mode);
6537 udelay(100);
6539 tp->rx_mode = RX_MODE_ENABLE;
6540 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
6541 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
6543 tw32_f(MAC_RX_MODE, tp->rx_mode);
6544 udelay(10);
6546 if (tp->link_config.phy_is_low_power) {
6547 tp->link_config.phy_is_low_power = 0;
6548 tp->link_config.speed = tp->link_config.orig_speed;
6549 tp->link_config.duplex = tp->link_config.orig_duplex;
6550 tp->link_config.autoneg = tp->link_config.orig_autoneg;
6553 tp->mi_mode = MAC_MI_MODE_BASE;
6554 tw32_f(MAC_MI_MODE, tp->mi_mode);
6555 udelay(80);
6557 tw32(MAC_LED_CTRL, tp->led_ctrl);
6559 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
6560 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
6561 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
6562 udelay(10);
6564 tw32_f(MAC_RX_MODE, tp->rx_mode);
6565 udelay(10);
6567 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
6568 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
6569 !(tp->tg3_flags2 & TG3_FLG2_SERDES_PREEMPHASIS)) {
6570 /* Set drive transmission level to 1.2V */
6571 /* only if the signal pre-emphasis bit is not set */
6572 val = tr32(MAC_SERDES_CFG);
6573 val &= 0xfffff000;
6574 val |= 0x880;
6575 tw32(MAC_SERDES_CFG, val);
6577 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
6578 tw32(MAC_SERDES_CFG, 0x616000);
6581 /* Prevent chip from dropping frames when flow control
6582 * is enabled.
6584 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, 2);
6586 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
6587 (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
6588 /* Use hardware link auto-negotiation */
6589 tp->tg3_flags2 |= TG3_FLG2_HW_AUTONEG;
6592 if ((tp->tg3_flags2 & TG3_FLG2_MII_SERDES) &&
6593 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
6594 u32 tmp;
6596 tmp = tr32(SERDES_RX_CTRL);
6597 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
6598 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
6599 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
6600 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
6603 err = tg3_setup_phy(tp, 0);
6604 if (err)
6605 return err;
6607 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) &&
6608 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906) {
6609 u32 tmp;
6611 /* Clear CRC stats. */
6612 if (!tg3_readphy(tp, 0x1e, &tmp)) {
6613 tg3_writephy(tp, 0x1e, tmp | 0x8000);
6614 tg3_readphy(tp, 0x14, &tmp);
6618 __tg3_set_rx_mode(tp->dev);
6620 /* Initialize receive rules. */
6621 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK);
6622 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
6623 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK);
6624 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
6626 if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
6627 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
6628 limit = 8;
6629 else
6630 limit = 16;
6631 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF)
6632 limit -= 4;
6633 switch (limit) {
6634 case 16:
6635 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0);
6636 case 15:
6637 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0);
6638 case 14:
6639 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0);
6640 case 13:
6641 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0);
6642 case 12:
6643 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0);
6644 case 11:
6645 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0);
6646 case 10:
6647 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0);
6648 case 9:
6649 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0);
6650 case 8:
6651 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0);
6652 case 7:
6653 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0);
6654 case 6:
6655 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0);
6656 case 5:
6657 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0);
6658 case 4:
6659 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */
6660 case 3:
6661 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */
6662 case 2:
6663 case 1:
6665 default:
6666 break;
6669 tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
6671 return 0;
6674 /* Called at device open time to get the chip ready for
6675 * packet processing. Invoked with tp->lock held.
6677 static int tg3_init_hw(struct tg3 *tp, int reset_phy)
6679 int err;
6681 /* Force the chip into D0. */
6682 err = tg3_set_power_state(tp, PCI_D0);
6683 if (err)
6684 goto out;
6686 tg3_switch_clocks(tp);
6688 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
6690 err = tg3_reset_hw(tp, reset_phy);
6692 out:
6693 return err;
6696 #define TG3_STAT_ADD32(PSTAT, REG) \
6697 do { u32 __val = tr32(REG); \
6698 (PSTAT)->low += __val; \
6699 if ((PSTAT)->low < __val) \
6700 (PSTAT)->high += 1; \
6701 } while (0)
6703 static void tg3_periodic_fetch_stats(struct tg3 *tp)
6705 struct tg3_hw_stats *sp = tp->hw_stats;
6707 if (!netif_carrier_ok(tp->dev))
6708 return;
6710 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
6711 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
6712 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
6713 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
6714 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
6715 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
6716 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
6717 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
6718 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
6719 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
6720 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
6721 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
6722 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
6724 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
6725 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
6726 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
6727 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
6728 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
6729 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
6730 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
6731 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
6732 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
6733 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
6734 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
6735 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
6736 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
6737 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
6739 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
6740 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
6741 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
6744 static void tg3_timer(unsigned long __opaque)
6746 struct tg3 *tp = (struct tg3 *) __opaque;
6748 if (tp->irq_sync)
6749 goto restart_timer;
6751 spin_lock(&tp->lock);
6753 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
6754 /* All of this garbage is because when using non-tagged
6755 * IRQ status the mailbox/status_block protocol the chip
6756 * uses with the cpu is race prone.
6758 if (tp->hw_status->status & SD_STATUS_UPDATED) {
6759 tw32(GRC_LOCAL_CTRL,
6760 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
6761 } else {
6762 tw32(HOSTCC_MODE, tp->coalesce_mode |
6763 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
6766 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
6767 tp->tg3_flags2 |= TG3_FLG2_RESTART_TIMER;
6768 spin_unlock(&tp->lock);
6769 schedule_work(&tp->reset_task);
6770 return;
6774 /* This part only runs once per second. */
6775 if (!--tp->timer_counter) {
6776 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
6777 tg3_periodic_fetch_stats(tp);
6779 if (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) {
6780 u32 mac_stat;
6781 int phy_event;
6783 mac_stat = tr32(MAC_STATUS);
6785 phy_event = 0;
6786 if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) {
6787 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
6788 phy_event = 1;
6789 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
6790 phy_event = 1;
6792 if (phy_event)
6793 tg3_setup_phy(tp, 0);
6794 } else if (tp->tg3_flags & TG3_FLAG_POLL_SERDES) {
6795 u32 mac_stat = tr32(MAC_STATUS);
6796 int need_setup = 0;
6798 if (netif_carrier_ok(tp->dev) &&
6799 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
6800 need_setup = 1;
6802 if (! netif_carrier_ok(tp->dev) &&
6803 (mac_stat & (MAC_STATUS_PCS_SYNCED |
6804 MAC_STATUS_SIGNAL_DET))) {
6805 need_setup = 1;
6807 if (need_setup) {
6808 if (!tp->serdes_counter) {
6809 tw32_f(MAC_MODE,
6810 (tp->mac_mode &
6811 ~MAC_MODE_PORT_MODE_MASK));
6812 udelay(40);
6813 tw32_f(MAC_MODE, tp->mac_mode);
6814 udelay(40);
6816 tg3_setup_phy(tp, 0);
6818 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
6819 tg3_serdes_parallel_detect(tp);
6821 tp->timer_counter = tp->timer_multiplier;
6824 /* Heartbeat is only sent once every 2 seconds.
6826 * The heartbeat is to tell the ASF firmware that the host
6827 * driver is still alive. In the event that the OS crashes,
6828 * ASF needs to reset the hardware to free up the FIFO space
6829 * that may be filled with rx packets destined for the host.
6830 * If the FIFO is full, ASF will no longer function properly.
6832 * Unintended resets have been reported on real time kernels
6833 * where the timer doesn't run on time. Netpoll will also have
6834 * same problem.
6836 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
6837 * to check the ring condition when the heartbeat is expiring
6838 * before doing the reset. This will prevent most unintended
6839 * resets.
6841 if (!--tp->asf_counter) {
6842 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
6843 u32 val;
6845 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
6846 FWCMD_NICDRV_ALIVE3);
6847 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
6848 /* 5 seconds timeout */
6849 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 5);
6850 val = tr32(GRC_RX_CPU_EVENT);
6851 val |= (1 << 14);
6852 tw32(GRC_RX_CPU_EVENT, val);
6854 tp->asf_counter = tp->asf_multiplier;
6857 spin_unlock(&tp->lock);
6859 restart_timer:
6860 tp->timer.expires = jiffies + tp->timer_offset;
6861 add_timer(&tp->timer);
6864 static int tg3_request_irq(struct tg3 *tp)
6866 irq_handler_t fn;
6867 unsigned long flags;
6868 struct net_device *dev = tp->dev;
6870 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
6871 fn = tg3_msi;
6872 if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI)
6873 fn = tg3_msi_1shot;
6874 flags = IRQF_SAMPLE_RANDOM;
6875 } else {
6876 fn = tg3_interrupt;
6877 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
6878 fn = tg3_interrupt_tagged;
6879 flags = IRQF_SHARED | IRQF_SAMPLE_RANDOM;
6881 return (request_irq(tp->pdev->irq, fn, flags, dev->name, dev));
6884 static int tg3_test_interrupt(struct tg3 *tp)
6886 struct net_device *dev = tp->dev;
6887 int err, i, intr_ok = 0;
6889 if (!netif_running(dev))
6890 return -ENODEV;
6892 tg3_disable_ints(tp);
6894 free_irq(tp->pdev->irq, dev);
6896 err = request_irq(tp->pdev->irq, tg3_test_isr,
6897 IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, dev);
6898 if (err)
6899 return err;
6901 tp->hw_status->status &= ~SD_STATUS_UPDATED;
6902 tg3_enable_ints(tp);
6904 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
6905 HOSTCC_MODE_NOW);
6907 for (i = 0; i < 5; i++) {
6908 u32 int_mbox, misc_host_ctrl;
6910 int_mbox = tr32_mailbox(MAILBOX_INTERRUPT_0 +
6911 TG3_64BIT_REG_LOW);
6912 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
6914 if ((int_mbox != 0) ||
6915 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
6916 intr_ok = 1;
6917 break;
6920 msleep(10);
6923 tg3_disable_ints(tp);
6925 free_irq(tp->pdev->irq, dev);
6927 err = tg3_request_irq(tp);
6929 if (err)
6930 return err;
6932 if (intr_ok)
6933 return 0;
6935 return -EIO;
6938 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
6939 * successfully restored
6941 static int tg3_test_msi(struct tg3 *tp)
6943 struct net_device *dev = tp->dev;
6944 int err;
6945 u16 pci_cmd;
6947 if (!(tp->tg3_flags2 & TG3_FLG2_USING_MSI))
6948 return 0;
6950 /* Turn off SERR reporting in case MSI terminates with Master
6951 * Abort.
6953 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
6954 pci_write_config_word(tp->pdev, PCI_COMMAND,
6955 pci_cmd & ~PCI_COMMAND_SERR);
6957 err = tg3_test_interrupt(tp);
6959 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
6961 if (!err)
6962 return 0;
6964 /* other failures */
6965 if (err != -EIO)
6966 return err;
6968 /* MSI test failed, go back to INTx mode */
6969 printk(KERN_WARNING PFX "%s: No interrupt was generated using MSI, "
6970 "switching to INTx mode. Please report this failure to "
6971 "the PCI maintainer and include system chipset information.\n",
6972 tp->dev->name);
6974 free_irq(tp->pdev->irq, dev);
6975 pci_disable_msi(tp->pdev);
6977 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
6979 err = tg3_request_irq(tp);
6980 if (err)
6981 return err;
6983 /* Need to reset the chip because the MSI cycle may have terminated
6984 * with Master Abort.
6986 tg3_full_lock(tp, 1);
6988 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
6989 err = tg3_init_hw(tp, 1);
6991 tg3_full_unlock(tp);
6993 if (err)
6994 free_irq(tp->pdev->irq, dev);
6996 return err;
6999 static int tg3_open(struct net_device *dev)
7001 struct tg3 *tp = netdev_priv(dev);
7002 int err;
7004 netif_carrier_off(tp->dev);
7006 tg3_full_lock(tp, 0);
7008 err = tg3_set_power_state(tp, PCI_D0);
7009 if (err) {
7010 tg3_full_unlock(tp);
7011 return err;
7014 tg3_disable_ints(tp);
7015 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
7017 tg3_full_unlock(tp);
7019 /* The placement of this call is tied
7020 * to the setup and use of Host TX descriptors.
7022 err = tg3_alloc_consistent(tp);
7023 if (err)
7024 return err;
7026 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
7027 (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5750_AX) &&
7028 (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5750_BX) &&
7029 !((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) &&
7030 (tp->pdev_peer == tp->pdev))) {
7031 /* All MSI supporting chips should support tagged
7032 * status. Assert that this is the case.
7034 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
7035 printk(KERN_WARNING PFX "%s: MSI without TAGGED? "
7036 "Not using MSI.\n", tp->dev->name);
7037 } else if (pci_enable_msi(tp->pdev) == 0) {
7038 u32 msi_mode;
7040 msi_mode = tr32(MSGINT_MODE);
7041 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
7042 tp->tg3_flags2 |= TG3_FLG2_USING_MSI;
7045 err = tg3_request_irq(tp);
7047 if (err) {
7048 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7049 pci_disable_msi(tp->pdev);
7050 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7052 tg3_free_consistent(tp);
7053 return err;
7056 tg3_full_lock(tp, 0);
7058 err = tg3_init_hw(tp, 1);
7059 if (err) {
7060 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7061 tg3_free_rings(tp);
7062 } else {
7063 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
7064 tp->timer_offset = HZ;
7065 else
7066 tp->timer_offset = HZ / 10;
7068 BUG_ON(tp->timer_offset > HZ);
7069 tp->timer_counter = tp->timer_multiplier =
7070 (HZ / tp->timer_offset);
7071 tp->asf_counter = tp->asf_multiplier =
7072 ((HZ / tp->timer_offset) * 2);
7074 init_timer(&tp->timer);
7075 tp->timer.expires = jiffies + tp->timer_offset;
7076 tp->timer.data = (unsigned long) tp;
7077 tp->timer.function = tg3_timer;
7080 tg3_full_unlock(tp);
7082 if (err) {
7083 free_irq(tp->pdev->irq, dev);
7084 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7085 pci_disable_msi(tp->pdev);
7086 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7088 tg3_free_consistent(tp);
7089 return err;
7092 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7093 err = tg3_test_msi(tp);
7095 if (err) {
7096 tg3_full_lock(tp, 0);
7098 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7099 pci_disable_msi(tp->pdev);
7100 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7102 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7103 tg3_free_rings(tp);
7104 tg3_free_consistent(tp);
7106 tg3_full_unlock(tp);
7108 return err;
7111 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7112 if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI) {
7113 u32 val = tr32(PCIE_TRANSACTION_CFG);
7115 tw32(PCIE_TRANSACTION_CFG,
7116 val | PCIE_TRANS_CFG_1SHOT_MSI);
7121 tg3_full_lock(tp, 0);
7123 add_timer(&tp->timer);
7124 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
7125 tg3_enable_ints(tp);
7127 tg3_full_unlock(tp);
7129 netif_start_queue(dev);
7131 return 0;
7134 #if 0
7135 /*static*/ void tg3_dump_state(struct tg3 *tp)
7137 u32 val32, val32_2, val32_3, val32_4, val32_5;
7138 u16 val16;
7139 int i;
7141 pci_read_config_word(tp->pdev, PCI_STATUS, &val16);
7142 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, &val32);
7143 printk("DEBUG: PCI status [%04x] TG3PCI state[%08x]\n",
7144 val16, val32);
7146 /* MAC block */
7147 printk("DEBUG: MAC_MODE[%08x] MAC_STATUS[%08x]\n",
7148 tr32(MAC_MODE), tr32(MAC_STATUS));
7149 printk(" MAC_EVENT[%08x] MAC_LED_CTRL[%08x]\n",
7150 tr32(MAC_EVENT), tr32(MAC_LED_CTRL));
7151 printk("DEBUG: MAC_TX_MODE[%08x] MAC_TX_STATUS[%08x]\n",
7152 tr32(MAC_TX_MODE), tr32(MAC_TX_STATUS));
7153 printk(" MAC_RX_MODE[%08x] MAC_RX_STATUS[%08x]\n",
7154 tr32(MAC_RX_MODE), tr32(MAC_RX_STATUS));
7156 /* Send data initiator control block */
7157 printk("DEBUG: SNDDATAI_MODE[%08x] SNDDATAI_STATUS[%08x]\n",
7158 tr32(SNDDATAI_MODE), tr32(SNDDATAI_STATUS));
7159 printk(" SNDDATAI_STATSCTRL[%08x]\n",
7160 tr32(SNDDATAI_STATSCTRL));
7162 /* Send data completion control block */
7163 printk("DEBUG: SNDDATAC_MODE[%08x]\n", tr32(SNDDATAC_MODE));
7165 /* Send BD ring selector block */
7166 printk("DEBUG: SNDBDS_MODE[%08x] SNDBDS_STATUS[%08x]\n",
7167 tr32(SNDBDS_MODE), tr32(SNDBDS_STATUS));
7169 /* Send BD initiator control block */
7170 printk("DEBUG: SNDBDI_MODE[%08x] SNDBDI_STATUS[%08x]\n",
7171 tr32(SNDBDI_MODE), tr32(SNDBDI_STATUS));
7173 /* Send BD completion control block */
7174 printk("DEBUG: SNDBDC_MODE[%08x]\n", tr32(SNDBDC_MODE));
7176 /* Receive list placement control block */
7177 printk("DEBUG: RCVLPC_MODE[%08x] RCVLPC_STATUS[%08x]\n",
7178 tr32(RCVLPC_MODE), tr32(RCVLPC_STATUS));
7179 printk(" RCVLPC_STATSCTRL[%08x]\n",
7180 tr32(RCVLPC_STATSCTRL));
7182 /* Receive data and receive BD initiator control block */
7183 printk("DEBUG: RCVDBDI_MODE[%08x] RCVDBDI_STATUS[%08x]\n",
7184 tr32(RCVDBDI_MODE), tr32(RCVDBDI_STATUS));
7186 /* Receive data completion control block */
7187 printk("DEBUG: RCVDCC_MODE[%08x]\n",
7188 tr32(RCVDCC_MODE));
7190 /* Receive BD initiator control block */
7191 printk("DEBUG: RCVBDI_MODE[%08x] RCVBDI_STATUS[%08x]\n",
7192 tr32(RCVBDI_MODE), tr32(RCVBDI_STATUS));
7194 /* Receive BD completion control block */
7195 printk("DEBUG: RCVCC_MODE[%08x] RCVCC_STATUS[%08x]\n",
7196 tr32(RCVCC_MODE), tr32(RCVCC_STATUS));
7198 /* Receive list selector control block */
7199 printk("DEBUG: RCVLSC_MODE[%08x] RCVLSC_STATUS[%08x]\n",
7200 tr32(RCVLSC_MODE), tr32(RCVLSC_STATUS));
7202 /* Mbuf cluster free block */
7203 printk("DEBUG: MBFREE_MODE[%08x] MBFREE_STATUS[%08x]\n",
7204 tr32(MBFREE_MODE), tr32(MBFREE_STATUS));
7206 /* Host coalescing control block */
7207 printk("DEBUG: HOSTCC_MODE[%08x] HOSTCC_STATUS[%08x]\n",
7208 tr32(HOSTCC_MODE), tr32(HOSTCC_STATUS));
7209 printk("DEBUG: HOSTCC_STATS_BLK_HOST_ADDR[%08x%08x]\n",
7210 tr32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH),
7211 tr32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW));
7212 printk("DEBUG: HOSTCC_STATUS_BLK_HOST_ADDR[%08x%08x]\n",
7213 tr32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH),
7214 tr32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW));
7215 printk("DEBUG: HOSTCC_STATS_BLK_NIC_ADDR[%08x]\n",
7216 tr32(HOSTCC_STATS_BLK_NIC_ADDR));
7217 printk("DEBUG: HOSTCC_STATUS_BLK_NIC_ADDR[%08x]\n",
7218 tr32(HOSTCC_STATUS_BLK_NIC_ADDR));
7220 /* Memory arbiter control block */
7221 printk("DEBUG: MEMARB_MODE[%08x] MEMARB_STATUS[%08x]\n",
7222 tr32(MEMARB_MODE), tr32(MEMARB_STATUS));
7224 /* Buffer manager control block */
7225 printk("DEBUG: BUFMGR_MODE[%08x] BUFMGR_STATUS[%08x]\n",
7226 tr32(BUFMGR_MODE), tr32(BUFMGR_STATUS));
7227 printk("DEBUG: BUFMGR_MB_POOL_ADDR[%08x] BUFMGR_MB_POOL_SIZE[%08x]\n",
7228 tr32(BUFMGR_MB_POOL_ADDR), tr32(BUFMGR_MB_POOL_SIZE));
7229 printk("DEBUG: BUFMGR_DMA_DESC_POOL_ADDR[%08x] "
7230 "BUFMGR_DMA_DESC_POOL_SIZE[%08x]\n",
7231 tr32(BUFMGR_DMA_DESC_POOL_ADDR),
7232 tr32(BUFMGR_DMA_DESC_POOL_SIZE));
7234 /* Read DMA control block */
7235 printk("DEBUG: RDMAC_MODE[%08x] RDMAC_STATUS[%08x]\n",
7236 tr32(RDMAC_MODE), tr32(RDMAC_STATUS));
7238 /* Write DMA control block */
7239 printk("DEBUG: WDMAC_MODE[%08x] WDMAC_STATUS[%08x]\n",
7240 tr32(WDMAC_MODE), tr32(WDMAC_STATUS));
7242 /* DMA completion block */
7243 printk("DEBUG: DMAC_MODE[%08x]\n",
7244 tr32(DMAC_MODE));
7246 /* GRC block */
7247 printk("DEBUG: GRC_MODE[%08x] GRC_MISC_CFG[%08x]\n",
7248 tr32(GRC_MODE), tr32(GRC_MISC_CFG));
7249 printk("DEBUG: GRC_LOCAL_CTRL[%08x]\n",
7250 tr32(GRC_LOCAL_CTRL));
7252 /* TG3_BDINFOs */
7253 printk("DEBUG: RCVDBDI_JUMBO_BD[%08x%08x:%08x:%08x]\n",
7254 tr32(RCVDBDI_JUMBO_BD + 0x0),
7255 tr32(RCVDBDI_JUMBO_BD + 0x4),
7256 tr32(RCVDBDI_JUMBO_BD + 0x8),
7257 tr32(RCVDBDI_JUMBO_BD + 0xc));
7258 printk("DEBUG: RCVDBDI_STD_BD[%08x%08x:%08x:%08x]\n",
7259 tr32(RCVDBDI_STD_BD + 0x0),
7260 tr32(RCVDBDI_STD_BD + 0x4),
7261 tr32(RCVDBDI_STD_BD + 0x8),
7262 tr32(RCVDBDI_STD_BD + 0xc));
7263 printk("DEBUG: RCVDBDI_MINI_BD[%08x%08x:%08x:%08x]\n",
7264 tr32(RCVDBDI_MINI_BD + 0x0),
7265 tr32(RCVDBDI_MINI_BD + 0x4),
7266 tr32(RCVDBDI_MINI_BD + 0x8),
7267 tr32(RCVDBDI_MINI_BD + 0xc));
7269 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x0, &val32);
7270 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x4, &val32_2);
7271 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x8, &val32_3);
7272 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0xc, &val32_4);
7273 printk("DEBUG: SRAM_SEND_RCB_0[%08x%08x:%08x:%08x]\n",
7274 val32, val32_2, val32_3, val32_4);
7276 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x0, &val32);
7277 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x4, &val32_2);
7278 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x8, &val32_3);
7279 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0xc, &val32_4);
7280 printk("DEBUG: SRAM_RCV_RET_RCB_0[%08x%08x:%08x:%08x]\n",
7281 val32, val32_2, val32_3, val32_4);
7283 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x0, &val32);
7284 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x4, &val32_2);
7285 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x8, &val32_3);
7286 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0xc, &val32_4);
7287 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x10, &val32_5);
7288 printk("DEBUG: SRAM_STATUS_BLK[%08x:%08x:%08x:%08x:%08x]\n",
7289 val32, val32_2, val32_3, val32_4, val32_5);
7291 /* SW status block */
7292 printk("DEBUG: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
7293 tp->hw_status->status,
7294 tp->hw_status->status_tag,
7295 tp->hw_status->rx_jumbo_consumer,
7296 tp->hw_status->rx_consumer,
7297 tp->hw_status->rx_mini_consumer,
7298 tp->hw_status->idx[0].rx_producer,
7299 tp->hw_status->idx[0].tx_consumer);
7301 /* SW statistics block */
7302 printk("DEBUG: Host statistics block [%08x:%08x:%08x:%08x]\n",
7303 ((u32 *)tp->hw_stats)[0],
7304 ((u32 *)tp->hw_stats)[1],
7305 ((u32 *)tp->hw_stats)[2],
7306 ((u32 *)tp->hw_stats)[3]);
7308 /* Mailboxes */
7309 printk("DEBUG: SNDHOST_PROD[%08x%08x] SNDNIC_PROD[%08x%08x]\n",
7310 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + 0x0),
7311 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + 0x4),
7312 tr32_mailbox(MAILBOX_SNDNIC_PROD_IDX_0 + 0x0),
7313 tr32_mailbox(MAILBOX_SNDNIC_PROD_IDX_0 + 0x4));
7315 /* NIC side send descriptors. */
7316 for (i = 0; i < 6; i++) {
7317 unsigned long txd;
7319 txd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_TX_BUFFER_DESC
7320 + (i * sizeof(struct tg3_tx_buffer_desc));
7321 printk("DEBUG: NIC TXD(%d)[%08x:%08x:%08x:%08x]\n",
7323 readl(txd + 0x0), readl(txd + 0x4),
7324 readl(txd + 0x8), readl(txd + 0xc));
7327 /* NIC side RX descriptors. */
7328 for (i = 0; i < 6; i++) {
7329 unsigned long rxd;
7331 rxd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_RX_BUFFER_DESC
7332 + (i * sizeof(struct tg3_rx_buffer_desc));
7333 printk("DEBUG: NIC RXD_STD(%d)[0][%08x:%08x:%08x:%08x]\n",
7335 readl(rxd + 0x0), readl(rxd + 0x4),
7336 readl(rxd + 0x8), readl(rxd + 0xc));
7337 rxd += (4 * sizeof(u32));
7338 printk("DEBUG: NIC RXD_STD(%d)[1][%08x:%08x:%08x:%08x]\n",
7340 readl(rxd + 0x0), readl(rxd + 0x4),
7341 readl(rxd + 0x8), readl(rxd + 0xc));
7344 for (i = 0; i < 6; i++) {
7345 unsigned long rxd;
7347 rxd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_RX_JUMBO_BUFFER_DESC
7348 + (i * sizeof(struct tg3_rx_buffer_desc));
7349 printk("DEBUG: NIC RXD_JUMBO(%d)[0][%08x:%08x:%08x:%08x]\n",
7351 readl(rxd + 0x0), readl(rxd + 0x4),
7352 readl(rxd + 0x8), readl(rxd + 0xc));
7353 rxd += (4 * sizeof(u32));
7354 printk("DEBUG: NIC RXD_JUMBO(%d)[1][%08x:%08x:%08x:%08x]\n",
7356 readl(rxd + 0x0), readl(rxd + 0x4),
7357 readl(rxd + 0x8), readl(rxd + 0xc));
7360 #endif
7362 static struct net_device_stats *tg3_get_stats(struct net_device *);
7363 static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *);
7365 static int tg3_close(struct net_device *dev)
7367 struct tg3 *tp = netdev_priv(dev);
7369 /* Calling flush_scheduled_work() may deadlock because
7370 * linkwatch_event() may be on the workqueue and it will try to get
7371 * the rtnl_lock which we are holding.
7373 while (tp->tg3_flags & TG3_FLAG_IN_RESET_TASK)
7374 msleep(1);
7376 netif_stop_queue(dev);
7378 del_timer_sync(&tp->timer);
7380 tg3_full_lock(tp, 1);
7381 #if 0
7382 tg3_dump_state(tp);
7383 #endif
7385 tg3_disable_ints(tp);
7387 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7388 tg3_free_rings(tp);
7389 tp->tg3_flags &=
7390 ~(TG3_FLAG_INIT_COMPLETE |
7391 TG3_FLAG_GOT_SERDES_FLOWCTL);
7393 tg3_full_unlock(tp);
7395 free_irq(tp->pdev->irq, dev);
7396 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7397 pci_disable_msi(tp->pdev);
7398 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7401 memcpy(&tp->net_stats_prev, tg3_get_stats(tp->dev),
7402 sizeof(tp->net_stats_prev));
7403 memcpy(&tp->estats_prev, tg3_get_estats(tp),
7404 sizeof(tp->estats_prev));
7406 tg3_free_consistent(tp);
7408 tg3_set_power_state(tp, PCI_D3hot);
7410 netif_carrier_off(tp->dev);
7412 return 0;
7415 static inline unsigned long get_stat64(tg3_stat64_t *val)
7417 unsigned long ret;
7419 #if (BITS_PER_LONG == 32)
7420 ret = val->low;
7421 #else
7422 ret = ((u64)val->high << 32) | ((u64)val->low);
7423 #endif
7424 return ret;
7427 static unsigned long calc_crc_errors(struct tg3 *tp)
7429 struct tg3_hw_stats *hw_stats = tp->hw_stats;
7431 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) &&
7432 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
7433 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
7434 u32 val;
7436 spin_lock_bh(&tp->lock);
7437 if (!tg3_readphy(tp, 0x1e, &val)) {
7438 tg3_writephy(tp, 0x1e, val | 0x8000);
7439 tg3_readphy(tp, 0x14, &val);
7440 } else
7441 val = 0;
7442 spin_unlock_bh(&tp->lock);
7444 tp->phy_crc_errors += val;
7446 return tp->phy_crc_errors;
7449 return get_stat64(&hw_stats->rx_fcs_errors);
7452 #define ESTAT_ADD(member) \
7453 estats->member = old_estats->member + \
7454 get_stat64(&hw_stats->member)
7456 static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp)
7458 struct tg3_ethtool_stats *estats = &tp->estats;
7459 struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
7460 struct tg3_hw_stats *hw_stats = tp->hw_stats;
7462 if (!hw_stats)
7463 return old_estats;
7465 ESTAT_ADD(rx_octets);
7466 ESTAT_ADD(rx_fragments);
7467 ESTAT_ADD(rx_ucast_packets);
7468 ESTAT_ADD(rx_mcast_packets);
7469 ESTAT_ADD(rx_bcast_packets);
7470 ESTAT_ADD(rx_fcs_errors);
7471 ESTAT_ADD(rx_align_errors);
7472 ESTAT_ADD(rx_xon_pause_rcvd);
7473 ESTAT_ADD(rx_xoff_pause_rcvd);
7474 ESTAT_ADD(rx_mac_ctrl_rcvd);
7475 ESTAT_ADD(rx_xoff_entered);
7476 ESTAT_ADD(rx_frame_too_long_errors);
7477 ESTAT_ADD(rx_jabbers);
7478 ESTAT_ADD(rx_undersize_packets);
7479 ESTAT_ADD(rx_in_length_errors);
7480 ESTAT_ADD(rx_out_length_errors);
7481 ESTAT_ADD(rx_64_or_less_octet_packets);
7482 ESTAT_ADD(rx_65_to_127_octet_packets);
7483 ESTAT_ADD(rx_128_to_255_octet_packets);
7484 ESTAT_ADD(rx_256_to_511_octet_packets);
7485 ESTAT_ADD(rx_512_to_1023_octet_packets);
7486 ESTAT_ADD(rx_1024_to_1522_octet_packets);
7487 ESTAT_ADD(rx_1523_to_2047_octet_packets);
7488 ESTAT_ADD(rx_2048_to_4095_octet_packets);
7489 ESTAT_ADD(rx_4096_to_8191_octet_packets);
7490 ESTAT_ADD(rx_8192_to_9022_octet_packets);
7492 ESTAT_ADD(tx_octets);
7493 ESTAT_ADD(tx_collisions);
7494 ESTAT_ADD(tx_xon_sent);
7495 ESTAT_ADD(tx_xoff_sent);
7496 ESTAT_ADD(tx_flow_control);
7497 ESTAT_ADD(tx_mac_errors);
7498 ESTAT_ADD(tx_single_collisions);
7499 ESTAT_ADD(tx_mult_collisions);
7500 ESTAT_ADD(tx_deferred);
7501 ESTAT_ADD(tx_excessive_collisions);
7502 ESTAT_ADD(tx_late_collisions);
7503 ESTAT_ADD(tx_collide_2times);
7504 ESTAT_ADD(tx_collide_3times);
7505 ESTAT_ADD(tx_collide_4times);
7506 ESTAT_ADD(tx_collide_5times);
7507 ESTAT_ADD(tx_collide_6times);
7508 ESTAT_ADD(tx_collide_7times);
7509 ESTAT_ADD(tx_collide_8times);
7510 ESTAT_ADD(tx_collide_9times);
7511 ESTAT_ADD(tx_collide_10times);
7512 ESTAT_ADD(tx_collide_11times);
7513 ESTAT_ADD(tx_collide_12times);
7514 ESTAT_ADD(tx_collide_13times);
7515 ESTAT_ADD(tx_collide_14times);
7516 ESTAT_ADD(tx_collide_15times);
7517 ESTAT_ADD(tx_ucast_packets);
7518 ESTAT_ADD(tx_mcast_packets);
7519 ESTAT_ADD(tx_bcast_packets);
7520 ESTAT_ADD(tx_carrier_sense_errors);
7521 ESTAT_ADD(tx_discards);
7522 ESTAT_ADD(tx_errors);
7524 ESTAT_ADD(dma_writeq_full);
7525 ESTAT_ADD(dma_write_prioq_full);
7526 ESTAT_ADD(rxbds_empty);
7527 ESTAT_ADD(rx_discards);
7528 ESTAT_ADD(rx_errors);
7529 ESTAT_ADD(rx_threshold_hit);
7531 ESTAT_ADD(dma_readq_full);
7532 ESTAT_ADD(dma_read_prioq_full);
7533 ESTAT_ADD(tx_comp_queue_full);
7535 ESTAT_ADD(ring_set_send_prod_index);
7536 ESTAT_ADD(ring_status_update);
7537 ESTAT_ADD(nic_irqs);
7538 ESTAT_ADD(nic_avoided_irqs);
7539 ESTAT_ADD(nic_tx_threshold_hit);
7541 return estats;
7544 static struct net_device_stats *tg3_get_stats(struct net_device *dev)
7546 struct tg3 *tp = netdev_priv(dev);
7547 struct net_device_stats *stats = &tp->net_stats;
7548 struct net_device_stats *old_stats = &tp->net_stats_prev;
7549 struct tg3_hw_stats *hw_stats = tp->hw_stats;
7551 if (!hw_stats)
7552 return old_stats;
7554 stats->rx_packets = old_stats->rx_packets +
7555 get_stat64(&hw_stats->rx_ucast_packets) +
7556 get_stat64(&hw_stats->rx_mcast_packets) +
7557 get_stat64(&hw_stats->rx_bcast_packets);
7559 stats->tx_packets = old_stats->tx_packets +
7560 get_stat64(&hw_stats->tx_ucast_packets) +
7561 get_stat64(&hw_stats->tx_mcast_packets) +
7562 get_stat64(&hw_stats->tx_bcast_packets);
7564 stats->rx_bytes = old_stats->rx_bytes +
7565 get_stat64(&hw_stats->rx_octets);
7566 stats->tx_bytes = old_stats->tx_bytes +
7567 get_stat64(&hw_stats->tx_octets);
7569 stats->rx_errors = old_stats->rx_errors +
7570 get_stat64(&hw_stats->rx_errors);
7571 stats->tx_errors = old_stats->tx_errors +
7572 get_stat64(&hw_stats->tx_errors) +
7573 get_stat64(&hw_stats->tx_mac_errors) +
7574 get_stat64(&hw_stats->tx_carrier_sense_errors) +
7575 get_stat64(&hw_stats->tx_discards);
7577 stats->multicast = old_stats->multicast +
7578 get_stat64(&hw_stats->rx_mcast_packets);
7579 stats->collisions = old_stats->collisions +
7580 get_stat64(&hw_stats->tx_collisions);
7582 stats->rx_length_errors = old_stats->rx_length_errors +
7583 get_stat64(&hw_stats->rx_frame_too_long_errors) +
7584 get_stat64(&hw_stats->rx_undersize_packets);
7586 stats->rx_over_errors = old_stats->rx_over_errors +
7587 get_stat64(&hw_stats->rxbds_empty);
7588 stats->rx_frame_errors = old_stats->rx_frame_errors +
7589 get_stat64(&hw_stats->rx_align_errors);
7590 stats->tx_aborted_errors = old_stats->tx_aborted_errors +
7591 get_stat64(&hw_stats->tx_discards);
7592 stats->tx_carrier_errors = old_stats->tx_carrier_errors +
7593 get_stat64(&hw_stats->tx_carrier_sense_errors);
7595 stats->rx_crc_errors = old_stats->rx_crc_errors +
7596 calc_crc_errors(tp);
7598 stats->rx_missed_errors = old_stats->rx_missed_errors +
7599 get_stat64(&hw_stats->rx_discards);
7601 return stats;
7604 static inline u32 calc_crc(unsigned char *buf, int len)
7606 u32 reg;
7607 u32 tmp;
7608 int j, k;
7610 reg = 0xffffffff;
7612 for (j = 0; j < len; j++) {
7613 reg ^= buf[j];
7615 for (k = 0; k < 8; k++) {
7616 tmp = reg & 0x01;
7618 reg >>= 1;
7620 if (tmp) {
7621 reg ^= 0xedb88320;
7626 return ~reg;
7629 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
7631 /* accept or reject all multicast frames */
7632 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
7633 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
7634 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
7635 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
7638 static void __tg3_set_rx_mode(struct net_device *dev)
7640 struct tg3 *tp = netdev_priv(dev);
7641 u32 rx_mode;
7643 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
7644 RX_MODE_KEEP_VLAN_TAG);
7646 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
7647 * flag clear.
7649 #if TG3_VLAN_TAG_USED
7650 if (!tp->vlgrp &&
7651 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
7652 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
7653 #else
7654 /* By definition, VLAN is disabled always in this
7655 * case.
7657 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
7658 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
7659 #endif
7661 if (dev->flags & IFF_PROMISC) {
7662 /* Promiscuous mode. */
7663 rx_mode |= RX_MODE_PROMISC;
7664 } else if (dev->flags & IFF_ALLMULTI) {
7665 /* Accept all multicast. */
7666 tg3_set_multi (tp, 1);
7667 } else if (dev->mc_count < 1) {
7668 /* Reject all multicast. */
7669 tg3_set_multi (tp, 0);
7670 } else {
7671 /* Accept one or more multicast(s). */
7672 struct dev_mc_list *mclist;
7673 unsigned int i;
7674 u32 mc_filter[4] = { 0, };
7675 u32 regidx;
7676 u32 bit;
7677 u32 crc;
7679 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
7680 i++, mclist = mclist->next) {
7682 crc = calc_crc (mclist->dmi_addr, ETH_ALEN);
7683 bit = ~crc & 0x7f;
7684 regidx = (bit & 0x60) >> 5;
7685 bit &= 0x1f;
7686 mc_filter[regidx] |= (1 << bit);
7689 tw32(MAC_HASH_REG_0, mc_filter[0]);
7690 tw32(MAC_HASH_REG_1, mc_filter[1]);
7691 tw32(MAC_HASH_REG_2, mc_filter[2]);
7692 tw32(MAC_HASH_REG_3, mc_filter[3]);
7695 if (rx_mode != tp->rx_mode) {
7696 tp->rx_mode = rx_mode;
7697 tw32_f(MAC_RX_MODE, rx_mode);
7698 udelay(10);
7702 static void tg3_set_rx_mode(struct net_device *dev)
7704 struct tg3 *tp = netdev_priv(dev);
7706 if (!netif_running(dev))
7707 return;
7709 tg3_full_lock(tp, 0);
7710 __tg3_set_rx_mode(dev);
7711 tg3_full_unlock(tp);
7714 #define TG3_REGDUMP_LEN (32 * 1024)
7716 static int tg3_get_regs_len(struct net_device *dev)
7718 return TG3_REGDUMP_LEN;
7721 static void tg3_get_regs(struct net_device *dev,
7722 struct ethtool_regs *regs, void *_p)
7724 u32 *p = _p;
7725 struct tg3 *tp = netdev_priv(dev);
7726 u8 *orig_p = _p;
7727 int i;
7729 regs->version = 0;
7731 memset(p, 0, TG3_REGDUMP_LEN);
7733 if (tp->link_config.phy_is_low_power)
7734 return;
7736 tg3_full_lock(tp, 0);
7738 #define __GET_REG32(reg) (*(p)++ = tr32(reg))
7739 #define GET_REG32_LOOP(base,len) \
7740 do { p = (u32 *)(orig_p + (base)); \
7741 for (i = 0; i < len; i += 4) \
7742 __GET_REG32((base) + i); \
7743 } while (0)
7744 #define GET_REG32_1(reg) \
7745 do { p = (u32 *)(orig_p + (reg)); \
7746 __GET_REG32((reg)); \
7747 } while (0)
7749 GET_REG32_LOOP(TG3PCI_VENDOR, 0xb0);
7750 GET_REG32_LOOP(MAILBOX_INTERRUPT_0, 0x200);
7751 GET_REG32_LOOP(MAC_MODE, 0x4f0);
7752 GET_REG32_LOOP(SNDDATAI_MODE, 0xe0);
7753 GET_REG32_1(SNDDATAC_MODE);
7754 GET_REG32_LOOP(SNDBDS_MODE, 0x80);
7755 GET_REG32_LOOP(SNDBDI_MODE, 0x48);
7756 GET_REG32_1(SNDBDC_MODE);
7757 GET_REG32_LOOP(RCVLPC_MODE, 0x20);
7758 GET_REG32_LOOP(RCVLPC_SELLST_BASE, 0x15c);
7759 GET_REG32_LOOP(RCVDBDI_MODE, 0x0c);
7760 GET_REG32_LOOP(RCVDBDI_JUMBO_BD, 0x3c);
7761 GET_REG32_LOOP(RCVDBDI_BD_PROD_IDX_0, 0x44);
7762 GET_REG32_1(RCVDCC_MODE);
7763 GET_REG32_LOOP(RCVBDI_MODE, 0x20);
7764 GET_REG32_LOOP(RCVCC_MODE, 0x14);
7765 GET_REG32_LOOP(RCVLSC_MODE, 0x08);
7766 GET_REG32_1(MBFREE_MODE);
7767 GET_REG32_LOOP(HOSTCC_MODE, 0x100);
7768 GET_REG32_LOOP(MEMARB_MODE, 0x10);
7769 GET_REG32_LOOP(BUFMGR_MODE, 0x58);
7770 GET_REG32_LOOP(RDMAC_MODE, 0x08);
7771 GET_REG32_LOOP(WDMAC_MODE, 0x08);
7772 GET_REG32_1(RX_CPU_MODE);
7773 GET_REG32_1(RX_CPU_STATE);
7774 GET_REG32_1(RX_CPU_PGMCTR);
7775 GET_REG32_1(RX_CPU_HWBKPT);
7776 GET_REG32_1(TX_CPU_MODE);
7777 GET_REG32_1(TX_CPU_STATE);
7778 GET_REG32_1(TX_CPU_PGMCTR);
7779 GET_REG32_LOOP(GRCMBOX_INTERRUPT_0, 0x110);
7780 GET_REG32_LOOP(FTQ_RESET, 0x120);
7781 GET_REG32_LOOP(MSGINT_MODE, 0x0c);
7782 GET_REG32_1(DMAC_MODE);
7783 GET_REG32_LOOP(GRC_MODE, 0x4c);
7784 if (tp->tg3_flags & TG3_FLAG_NVRAM)
7785 GET_REG32_LOOP(NVRAM_CMD, 0x24);
7787 #undef __GET_REG32
7788 #undef GET_REG32_LOOP
7789 #undef GET_REG32_1
7791 tg3_full_unlock(tp);
7794 static int tg3_get_eeprom_len(struct net_device *dev)
7796 struct tg3 *tp = netdev_priv(dev);
7798 return tp->nvram_size;
7801 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val);
7802 static int tg3_nvram_read_swab(struct tg3 *tp, u32 offset, u32 *val);
7804 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
7806 struct tg3 *tp = netdev_priv(dev);
7807 int ret;
7808 u8 *pd;
7809 u32 i, offset, len, val, b_offset, b_count;
7811 if (tp->link_config.phy_is_low_power)
7812 return -EAGAIN;
7814 offset = eeprom->offset;
7815 len = eeprom->len;
7816 eeprom->len = 0;
7818 eeprom->magic = TG3_EEPROM_MAGIC;
7820 if (offset & 3) {
7821 /* adjustments to start on required 4 byte boundary */
7822 b_offset = offset & 3;
7823 b_count = 4 - b_offset;
7824 if (b_count > len) {
7825 /* i.e. offset=1 len=2 */
7826 b_count = len;
7828 ret = tg3_nvram_read(tp, offset-b_offset, &val);
7829 if (ret)
7830 return ret;
7831 val = cpu_to_le32(val);
7832 memcpy(data, ((char*)&val) + b_offset, b_count);
7833 len -= b_count;
7834 offset += b_count;
7835 eeprom->len += b_count;
7838 /* read bytes upto the last 4 byte boundary */
7839 pd = &data[eeprom->len];
7840 for (i = 0; i < (len - (len & 3)); i += 4) {
7841 ret = tg3_nvram_read(tp, offset + i, &val);
7842 if (ret) {
7843 eeprom->len += i;
7844 return ret;
7846 val = cpu_to_le32(val);
7847 memcpy(pd + i, &val, 4);
7849 eeprom->len += i;
7851 if (len & 3) {
7852 /* read last bytes not ending on 4 byte boundary */
7853 pd = &data[eeprom->len];
7854 b_count = len & 3;
7855 b_offset = offset + len - b_count;
7856 ret = tg3_nvram_read(tp, b_offset, &val);
7857 if (ret)
7858 return ret;
7859 val = cpu_to_le32(val);
7860 memcpy(pd, ((char*)&val), b_count);
7861 eeprom->len += b_count;
7863 return 0;
7866 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf);
7868 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
7870 struct tg3 *tp = netdev_priv(dev);
7871 int ret;
7872 u32 offset, len, b_offset, odd_len, start, end;
7873 u8 *buf;
7875 if (tp->link_config.phy_is_low_power)
7876 return -EAGAIN;
7878 if (eeprom->magic != TG3_EEPROM_MAGIC)
7879 return -EINVAL;
7881 offset = eeprom->offset;
7882 len = eeprom->len;
7884 if ((b_offset = (offset & 3))) {
7885 /* adjustments to start on required 4 byte boundary */
7886 ret = tg3_nvram_read(tp, offset-b_offset, &start);
7887 if (ret)
7888 return ret;
7889 start = cpu_to_le32(start);
7890 len += b_offset;
7891 offset &= ~3;
7892 if (len < 4)
7893 len = 4;
7896 odd_len = 0;
7897 if (len & 3) {
7898 /* adjustments to end on required 4 byte boundary */
7899 odd_len = 1;
7900 len = (len + 3) & ~3;
7901 ret = tg3_nvram_read(tp, offset+len-4, &end);
7902 if (ret)
7903 return ret;
7904 end = cpu_to_le32(end);
7907 buf = data;
7908 if (b_offset || odd_len) {
7909 buf = kmalloc(len, GFP_KERNEL);
7910 if (buf == 0)
7911 return -ENOMEM;
7912 if (b_offset)
7913 memcpy(buf, &start, 4);
7914 if (odd_len)
7915 memcpy(buf+len-4, &end, 4);
7916 memcpy(buf + b_offset, data, eeprom->len);
7919 ret = tg3_nvram_write_block(tp, offset, len, buf);
7921 if (buf != data)
7922 kfree(buf);
7924 return ret;
7927 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7929 struct tg3 *tp = netdev_priv(dev);
7931 cmd->supported = (SUPPORTED_Autoneg);
7933 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
7934 cmd->supported |= (SUPPORTED_1000baseT_Half |
7935 SUPPORTED_1000baseT_Full);
7937 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) {
7938 cmd->supported |= (SUPPORTED_100baseT_Half |
7939 SUPPORTED_100baseT_Full |
7940 SUPPORTED_10baseT_Half |
7941 SUPPORTED_10baseT_Full |
7942 SUPPORTED_MII);
7943 cmd->port = PORT_TP;
7944 } else {
7945 cmd->supported |= SUPPORTED_FIBRE;
7946 cmd->port = PORT_FIBRE;
7949 cmd->advertising = tp->link_config.advertising;
7950 if (netif_running(dev)) {
7951 cmd->speed = tp->link_config.active_speed;
7952 cmd->duplex = tp->link_config.active_duplex;
7954 cmd->phy_address = PHY_ADDR;
7955 cmd->transceiver = 0;
7956 cmd->autoneg = tp->link_config.autoneg;
7957 cmd->maxtxpkt = 0;
7958 cmd->maxrxpkt = 0;
7959 return 0;
7962 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7964 struct tg3 *tp = netdev_priv(dev);
7966 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) {
7967 /* These are the only valid advertisement bits allowed. */
7968 if (cmd->autoneg == AUTONEG_ENABLE &&
7969 (cmd->advertising & ~(ADVERTISED_1000baseT_Half |
7970 ADVERTISED_1000baseT_Full |
7971 ADVERTISED_Autoneg |
7972 ADVERTISED_FIBRE)))
7973 return -EINVAL;
7974 /* Fiber can only do SPEED_1000. */
7975 else if ((cmd->autoneg != AUTONEG_ENABLE) &&
7976 (cmd->speed != SPEED_1000))
7977 return -EINVAL;
7978 /* Copper cannot force SPEED_1000. */
7979 } else if ((cmd->autoneg != AUTONEG_ENABLE) &&
7980 (cmd->speed == SPEED_1000))
7981 return -EINVAL;
7982 else if ((cmd->speed == SPEED_1000) &&
7983 (tp->tg3_flags2 & TG3_FLAG_10_100_ONLY))
7984 return -EINVAL;
7986 tg3_full_lock(tp, 0);
7988 tp->link_config.autoneg = cmd->autoneg;
7989 if (cmd->autoneg == AUTONEG_ENABLE) {
7990 tp->link_config.advertising = cmd->advertising;
7991 tp->link_config.speed = SPEED_INVALID;
7992 tp->link_config.duplex = DUPLEX_INVALID;
7993 } else {
7994 tp->link_config.advertising = 0;
7995 tp->link_config.speed = cmd->speed;
7996 tp->link_config.duplex = cmd->duplex;
7999 tp->link_config.orig_speed = tp->link_config.speed;
8000 tp->link_config.orig_duplex = tp->link_config.duplex;
8001 tp->link_config.orig_autoneg = tp->link_config.autoneg;
8003 if (netif_running(dev))
8004 tg3_setup_phy(tp, 1);
8006 tg3_full_unlock(tp);
8008 return 0;
8011 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
8013 struct tg3 *tp = netdev_priv(dev);
8015 strcpy(info->driver, DRV_MODULE_NAME);
8016 strcpy(info->version, DRV_MODULE_VERSION);
8017 strcpy(info->fw_version, tp->fw_ver);
8018 strcpy(info->bus_info, pci_name(tp->pdev));
8021 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
8023 struct tg3 *tp = netdev_priv(dev);
8025 wol->supported = WAKE_MAGIC;
8026 wol->wolopts = 0;
8027 if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE)
8028 wol->wolopts = WAKE_MAGIC;
8029 memset(&wol->sopass, 0, sizeof(wol->sopass));
8032 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
8034 struct tg3 *tp = netdev_priv(dev);
8036 if (wol->wolopts & ~WAKE_MAGIC)
8037 return -EINVAL;
8038 if ((wol->wolopts & WAKE_MAGIC) &&
8039 tp->tg3_flags2 & TG3_FLG2_ANY_SERDES &&
8040 !(tp->tg3_flags & TG3_FLAG_SERDES_WOL_CAP))
8041 return -EINVAL;
8043 spin_lock_bh(&tp->lock);
8044 if (wol->wolopts & WAKE_MAGIC)
8045 tp->tg3_flags |= TG3_FLAG_WOL_ENABLE;
8046 else
8047 tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE;
8048 spin_unlock_bh(&tp->lock);
8050 return 0;
8053 static u32 tg3_get_msglevel(struct net_device *dev)
8055 struct tg3 *tp = netdev_priv(dev);
8056 return tp->msg_enable;
8059 static void tg3_set_msglevel(struct net_device *dev, u32 value)
8061 struct tg3 *tp = netdev_priv(dev);
8062 tp->msg_enable = value;
8065 #if TG3_TSO_SUPPORT != 0
8066 static int tg3_set_tso(struct net_device *dev, u32 value)
8068 struct tg3 *tp = netdev_priv(dev);
8070 if (!(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) {
8071 if (value)
8072 return -EINVAL;
8073 return 0;
8075 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) &&
8076 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)) {
8077 if (value)
8078 dev->features |= NETIF_F_TSO6;
8079 else
8080 dev->features &= ~NETIF_F_TSO6;
8082 return ethtool_op_set_tso(dev, value);
8084 #endif
8086 static int tg3_nway_reset(struct net_device *dev)
8088 struct tg3 *tp = netdev_priv(dev);
8089 u32 bmcr;
8090 int r;
8092 if (!netif_running(dev))
8093 return -EAGAIN;
8095 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
8096 return -EINVAL;
8098 spin_lock_bh(&tp->lock);
8099 r = -EINVAL;
8100 tg3_readphy(tp, MII_BMCR, &bmcr);
8101 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
8102 ((bmcr & BMCR_ANENABLE) ||
8103 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT))) {
8104 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
8105 BMCR_ANENABLE);
8106 r = 0;
8108 spin_unlock_bh(&tp->lock);
8110 return r;
8113 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
8115 struct tg3 *tp = netdev_priv(dev);
8117 ering->rx_max_pending = TG3_RX_RING_SIZE - 1;
8118 ering->rx_mini_max_pending = 0;
8119 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE)
8120 ering->rx_jumbo_max_pending = TG3_RX_JUMBO_RING_SIZE - 1;
8121 else
8122 ering->rx_jumbo_max_pending = 0;
8124 ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
8126 ering->rx_pending = tp->rx_pending;
8127 ering->rx_mini_pending = 0;
8128 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE)
8129 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
8130 else
8131 ering->rx_jumbo_pending = 0;
8133 ering->tx_pending = tp->tx_pending;
8136 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
8138 struct tg3 *tp = netdev_priv(dev);
8139 int irq_sync = 0, err = 0;
8141 if ((ering->rx_pending > TG3_RX_RING_SIZE - 1) ||
8142 (ering->rx_jumbo_pending > TG3_RX_JUMBO_RING_SIZE - 1) ||
8143 (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
8144 (ering->tx_pending <= MAX_SKB_FRAGS) ||
8145 ((tp->tg3_flags2 & TG3_FLG2_HW_TSO_1_BUG) &&
8146 (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
8147 return -EINVAL;
8149 if (netif_running(dev)) {
8150 tg3_netif_stop(tp);
8151 irq_sync = 1;
8154 tg3_full_lock(tp, irq_sync);
8156 tp->rx_pending = ering->rx_pending;
8158 if ((tp->tg3_flags2 & TG3_FLG2_MAX_RXPEND_64) &&
8159 tp->rx_pending > 63)
8160 tp->rx_pending = 63;
8161 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
8162 tp->tx_pending = ering->tx_pending;
8164 if (netif_running(dev)) {
8165 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
8166 err = tg3_restart_hw(tp, 1);
8167 if (!err)
8168 tg3_netif_start(tp);
8171 tg3_full_unlock(tp);
8173 return err;
8176 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
8178 struct tg3 *tp = netdev_priv(dev);
8180 epause->autoneg = (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) != 0;
8181 epause->rx_pause = (tp->tg3_flags & TG3_FLAG_RX_PAUSE) != 0;
8182 epause->tx_pause = (tp->tg3_flags & TG3_FLAG_TX_PAUSE) != 0;
8185 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
8187 struct tg3 *tp = netdev_priv(dev);
8188 int irq_sync = 0, err = 0;
8190 if (netif_running(dev)) {
8191 tg3_netif_stop(tp);
8192 irq_sync = 1;
8195 tg3_full_lock(tp, irq_sync);
8197 if (epause->autoneg)
8198 tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
8199 else
8200 tp->tg3_flags &= ~TG3_FLAG_PAUSE_AUTONEG;
8201 if (epause->rx_pause)
8202 tp->tg3_flags |= TG3_FLAG_RX_PAUSE;
8203 else
8204 tp->tg3_flags &= ~TG3_FLAG_RX_PAUSE;
8205 if (epause->tx_pause)
8206 tp->tg3_flags |= TG3_FLAG_TX_PAUSE;
8207 else
8208 tp->tg3_flags &= ~TG3_FLAG_TX_PAUSE;
8210 if (netif_running(dev)) {
8211 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
8212 err = tg3_restart_hw(tp, 1);
8213 if (!err)
8214 tg3_netif_start(tp);
8217 tg3_full_unlock(tp);
8219 return err;
8222 static u32 tg3_get_rx_csum(struct net_device *dev)
8224 struct tg3 *tp = netdev_priv(dev);
8225 return (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0;
8228 static int tg3_set_rx_csum(struct net_device *dev, u32 data)
8230 struct tg3 *tp = netdev_priv(dev);
8232 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
8233 if (data != 0)
8234 return -EINVAL;
8235 return 0;
8238 spin_lock_bh(&tp->lock);
8239 if (data)
8240 tp->tg3_flags |= TG3_FLAG_RX_CHECKSUMS;
8241 else
8242 tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
8243 spin_unlock_bh(&tp->lock);
8245 return 0;
8248 static int tg3_set_tx_csum(struct net_device *dev, u32 data)
8250 struct tg3 *tp = netdev_priv(dev);
8252 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
8253 if (data != 0)
8254 return -EINVAL;
8255 return 0;
8258 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8259 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8260 ethtool_op_set_tx_hw_csum(dev, data);
8261 else
8262 ethtool_op_set_tx_csum(dev, data);
8264 return 0;
8267 static int tg3_get_stats_count (struct net_device *dev)
8269 return TG3_NUM_STATS;
8272 static int tg3_get_test_count (struct net_device *dev)
8274 return TG3_NUM_TEST;
8277 static void tg3_get_strings (struct net_device *dev, u32 stringset, u8 *buf)
8279 switch (stringset) {
8280 case ETH_SS_STATS:
8281 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
8282 break;
8283 case ETH_SS_TEST:
8284 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
8285 break;
8286 default:
8287 WARN_ON(1); /* we need a WARN() */
8288 break;
8292 static int tg3_phys_id(struct net_device *dev, u32 data)
8294 struct tg3 *tp = netdev_priv(dev);
8295 int i;
8297 if (!netif_running(tp->dev))
8298 return -EAGAIN;
8300 if (data == 0)
8301 data = 2;
8303 for (i = 0; i < (data * 2); i++) {
8304 if ((i % 2) == 0)
8305 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
8306 LED_CTRL_1000MBPS_ON |
8307 LED_CTRL_100MBPS_ON |
8308 LED_CTRL_10MBPS_ON |
8309 LED_CTRL_TRAFFIC_OVERRIDE |
8310 LED_CTRL_TRAFFIC_BLINK |
8311 LED_CTRL_TRAFFIC_LED);
8313 else
8314 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
8315 LED_CTRL_TRAFFIC_OVERRIDE);
8317 if (msleep_interruptible(500))
8318 break;
8320 tw32(MAC_LED_CTRL, tp->led_ctrl);
8321 return 0;
8324 static void tg3_get_ethtool_stats (struct net_device *dev,
8325 struct ethtool_stats *estats, u64 *tmp_stats)
8327 struct tg3 *tp = netdev_priv(dev);
8328 memcpy(tmp_stats, tg3_get_estats(tp), sizeof(tp->estats));
8331 #define NVRAM_TEST_SIZE 0x100
8332 #define NVRAM_SELFBOOT_FORMAT1_SIZE 0x14
8333 #define NVRAM_SELFBOOT_HW_SIZE 0x20
8334 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
8336 static int tg3_test_nvram(struct tg3 *tp)
8338 u32 *buf, csum, magic;
8339 int i, j, err = 0, size;
8341 if (tg3_nvram_read_swab(tp, 0, &magic) != 0)
8342 return -EIO;
8344 if (magic == TG3_EEPROM_MAGIC)
8345 size = NVRAM_TEST_SIZE;
8346 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
8347 if ((magic & 0xe00000) == 0x200000)
8348 size = NVRAM_SELFBOOT_FORMAT1_SIZE;
8349 else
8350 return 0;
8351 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
8352 size = NVRAM_SELFBOOT_HW_SIZE;
8353 else
8354 return -EIO;
8356 buf = kmalloc(size, GFP_KERNEL);
8357 if (buf == NULL)
8358 return -ENOMEM;
8360 err = -EIO;
8361 for (i = 0, j = 0; i < size; i += 4, j++) {
8362 u32 val;
8364 if ((err = tg3_nvram_read(tp, i, &val)) != 0)
8365 break;
8366 buf[j] = cpu_to_le32(val);
8368 if (i < size)
8369 goto out;
8371 /* Selfboot format */
8372 if ((cpu_to_be32(buf[0]) & TG3_EEPROM_MAGIC_FW_MSK) ==
8373 TG3_EEPROM_MAGIC_FW) {
8374 u8 *buf8 = (u8 *) buf, csum8 = 0;
8376 for (i = 0; i < size; i++)
8377 csum8 += buf8[i];
8379 if (csum8 == 0) {
8380 err = 0;
8381 goto out;
8384 err = -EIO;
8385 goto out;
8388 if ((cpu_to_be32(buf[0]) & TG3_EEPROM_MAGIC_HW_MSK) ==
8389 TG3_EEPROM_MAGIC_HW) {
8390 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
8391 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
8392 u8 *buf8 = (u8 *) buf;
8393 int j, k;
8395 /* Separate the parity bits and the data bytes. */
8396 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
8397 if ((i == 0) || (i == 8)) {
8398 int l;
8399 u8 msk;
8401 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
8402 parity[k++] = buf8[i] & msk;
8403 i++;
8405 else if (i == 16) {
8406 int l;
8407 u8 msk;
8409 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
8410 parity[k++] = buf8[i] & msk;
8411 i++;
8413 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
8414 parity[k++] = buf8[i] & msk;
8415 i++;
8417 data[j++] = buf8[i];
8420 err = -EIO;
8421 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
8422 u8 hw8 = hweight8(data[i]);
8424 if ((hw8 & 0x1) && parity[i])
8425 goto out;
8426 else if (!(hw8 & 0x1) && !parity[i])
8427 goto out;
8429 err = 0;
8430 goto out;
8433 /* Bootstrap checksum at offset 0x10 */
8434 csum = calc_crc((unsigned char *) buf, 0x10);
8435 if(csum != cpu_to_le32(buf[0x10/4]))
8436 goto out;
8438 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
8439 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
8440 if (csum != cpu_to_le32(buf[0xfc/4]))
8441 goto out;
8443 err = 0;
8445 out:
8446 kfree(buf);
8447 return err;
8450 #define TG3_SERDES_TIMEOUT_SEC 2
8451 #define TG3_COPPER_TIMEOUT_SEC 6
8453 static int tg3_test_link(struct tg3 *tp)
8455 int i, max;
8457 if (!netif_running(tp->dev))
8458 return -ENODEV;
8460 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
8461 max = TG3_SERDES_TIMEOUT_SEC;
8462 else
8463 max = TG3_COPPER_TIMEOUT_SEC;
8465 for (i = 0; i < max; i++) {
8466 if (netif_carrier_ok(tp->dev))
8467 return 0;
8469 if (msleep_interruptible(1000))
8470 break;
8473 return -EIO;
8476 /* Only test the commonly used registers */
8477 static int tg3_test_registers(struct tg3 *tp)
8479 int i, is_5705, is_5750;
8480 u32 offset, read_mask, write_mask, val, save_val, read_val;
8481 static struct {
8482 u16 offset;
8483 u16 flags;
8484 #define TG3_FL_5705 0x1
8485 #define TG3_FL_NOT_5705 0x2
8486 #define TG3_FL_NOT_5788 0x4
8487 #define TG3_FL_NOT_5750 0x8
8488 u32 read_mask;
8489 u32 write_mask;
8490 } reg_tbl[] = {
8491 /* MAC Control Registers */
8492 { MAC_MODE, TG3_FL_NOT_5705,
8493 0x00000000, 0x00ef6f8c },
8494 { MAC_MODE, TG3_FL_5705,
8495 0x00000000, 0x01ef6b8c },
8496 { MAC_STATUS, TG3_FL_NOT_5705,
8497 0x03800107, 0x00000000 },
8498 { MAC_STATUS, TG3_FL_5705,
8499 0x03800100, 0x00000000 },
8500 { MAC_ADDR_0_HIGH, 0x0000,
8501 0x00000000, 0x0000ffff },
8502 { MAC_ADDR_0_LOW, 0x0000,
8503 0x00000000, 0xffffffff },
8504 { MAC_RX_MTU_SIZE, 0x0000,
8505 0x00000000, 0x0000ffff },
8506 { MAC_TX_MODE, 0x0000,
8507 0x00000000, 0x00000070 },
8508 { MAC_TX_LENGTHS, 0x0000,
8509 0x00000000, 0x00003fff },
8510 { MAC_RX_MODE, TG3_FL_NOT_5705,
8511 0x00000000, 0x000007fc },
8512 { MAC_RX_MODE, TG3_FL_5705,
8513 0x00000000, 0x000007dc },
8514 { MAC_HASH_REG_0, 0x0000,
8515 0x00000000, 0xffffffff },
8516 { MAC_HASH_REG_1, 0x0000,
8517 0x00000000, 0xffffffff },
8518 { MAC_HASH_REG_2, 0x0000,
8519 0x00000000, 0xffffffff },
8520 { MAC_HASH_REG_3, 0x0000,
8521 0x00000000, 0xffffffff },
8523 /* Receive Data and Receive BD Initiator Control Registers. */
8524 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
8525 0x00000000, 0xffffffff },
8526 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
8527 0x00000000, 0xffffffff },
8528 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
8529 0x00000000, 0x00000003 },
8530 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
8531 0x00000000, 0xffffffff },
8532 { RCVDBDI_STD_BD+0, 0x0000,
8533 0x00000000, 0xffffffff },
8534 { RCVDBDI_STD_BD+4, 0x0000,
8535 0x00000000, 0xffffffff },
8536 { RCVDBDI_STD_BD+8, 0x0000,
8537 0x00000000, 0xffff0002 },
8538 { RCVDBDI_STD_BD+0xc, 0x0000,
8539 0x00000000, 0xffffffff },
8541 /* Receive BD Initiator Control Registers. */
8542 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
8543 0x00000000, 0xffffffff },
8544 { RCVBDI_STD_THRESH, TG3_FL_5705,
8545 0x00000000, 0x000003ff },
8546 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
8547 0x00000000, 0xffffffff },
8549 /* Host Coalescing Control Registers. */
8550 { HOSTCC_MODE, TG3_FL_NOT_5705,
8551 0x00000000, 0x00000004 },
8552 { HOSTCC_MODE, TG3_FL_5705,
8553 0x00000000, 0x000000f6 },
8554 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
8555 0x00000000, 0xffffffff },
8556 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
8557 0x00000000, 0x000003ff },
8558 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
8559 0x00000000, 0xffffffff },
8560 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
8561 0x00000000, 0x000003ff },
8562 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
8563 0x00000000, 0xffffffff },
8564 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
8565 0x00000000, 0x000000ff },
8566 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
8567 0x00000000, 0xffffffff },
8568 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
8569 0x00000000, 0x000000ff },
8570 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
8571 0x00000000, 0xffffffff },
8572 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
8573 0x00000000, 0xffffffff },
8574 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
8575 0x00000000, 0xffffffff },
8576 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
8577 0x00000000, 0x000000ff },
8578 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
8579 0x00000000, 0xffffffff },
8580 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
8581 0x00000000, 0x000000ff },
8582 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
8583 0x00000000, 0xffffffff },
8584 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
8585 0x00000000, 0xffffffff },
8586 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
8587 0x00000000, 0xffffffff },
8588 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
8589 0x00000000, 0xffffffff },
8590 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
8591 0x00000000, 0xffffffff },
8592 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
8593 0xffffffff, 0x00000000 },
8594 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
8595 0xffffffff, 0x00000000 },
8597 /* Buffer Manager Control Registers. */
8598 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
8599 0x00000000, 0x007fff80 },
8600 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
8601 0x00000000, 0x007fffff },
8602 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
8603 0x00000000, 0x0000003f },
8604 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
8605 0x00000000, 0x000001ff },
8606 { BUFMGR_MB_HIGH_WATER, 0x0000,
8607 0x00000000, 0x000001ff },
8608 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
8609 0xffffffff, 0x00000000 },
8610 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
8611 0xffffffff, 0x00000000 },
8613 /* Mailbox Registers */
8614 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
8615 0x00000000, 0x000001ff },
8616 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
8617 0x00000000, 0x000001ff },
8618 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
8619 0x00000000, 0x000007ff },
8620 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
8621 0x00000000, 0x000001ff },
8623 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
8626 is_5705 = is_5750 = 0;
8627 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
8628 is_5705 = 1;
8629 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
8630 is_5750 = 1;
8633 for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
8634 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
8635 continue;
8637 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
8638 continue;
8640 if ((tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
8641 (reg_tbl[i].flags & TG3_FL_NOT_5788))
8642 continue;
8644 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
8645 continue;
8647 offset = (u32) reg_tbl[i].offset;
8648 read_mask = reg_tbl[i].read_mask;
8649 write_mask = reg_tbl[i].write_mask;
8651 /* Save the original register content */
8652 save_val = tr32(offset);
8654 /* Determine the read-only value. */
8655 read_val = save_val & read_mask;
8657 /* Write zero to the register, then make sure the read-only bits
8658 * are not changed and the read/write bits are all zeros.
8660 tw32(offset, 0);
8662 val = tr32(offset);
8664 /* Test the read-only and read/write bits. */
8665 if (((val & read_mask) != read_val) || (val & write_mask))
8666 goto out;
8668 /* Write ones to all the bits defined by RdMask and WrMask, then
8669 * make sure the read-only bits are not changed and the
8670 * read/write bits are all ones.
8672 tw32(offset, read_mask | write_mask);
8674 val = tr32(offset);
8676 /* Test the read-only bits. */
8677 if ((val & read_mask) != read_val)
8678 goto out;
8680 /* Test the read/write bits. */
8681 if ((val & write_mask) != write_mask)
8682 goto out;
8684 tw32(offset, save_val);
8687 return 0;
8689 out:
8690 if (netif_msg_hw(tp))
8691 printk(KERN_ERR PFX "Register test failed at offset %x\n",
8692 offset);
8693 tw32(offset, save_val);
8694 return -EIO;
8697 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
8699 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
8700 int i;
8701 u32 j;
8703 for (i = 0; i < sizeof(test_pattern)/sizeof(u32); i++) {
8704 for (j = 0; j < len; j += 4) {
8705 u32 val;
8707 tg3_write_mem(tp, offset + j, test_pattern[i]);
8708 tg3_read_mem(tp, offset + j, &val);
8709 if (val != test_pattern[i])
8710 return -EIO;
8713 return 0;
8716 static int tg3_test_memory(struct tg3 *tp)
8718 static struct mem_entry {
8719 u32 offset;
8720 u32 len;
8721 } mem_tbl_570x[] = {
8722 { 0x00000000, 0x00b50},
8723 { 0x00002000, 0x1c000},
8724 { 0xffffffff, 0x00000}
8725 }, mem_tbl_5705[] = {
8726 { 0x00000100, 0x0000c},
8727 { 0x00000200, 0x00008},
8728 { 0x00004000, 0x00800},
8729 { 0x00006000, 0x01000},
8730 { 0x00008000, 0x02000},
8731 { 0x00010000, 0x0e000},
8732 { 0xffffffff, 0x00000}
8733 }, mem_tbl_5755[] = {
8734 { 0x00000200, 0x00008},
8735 { 0x00004000, 0x00800},
8736 { 0x00006000, 0x00800},
8737 { 0x00008000, 0x02000},
8738 { 0x00010000, 0x0c000},
8739 { 0xffffffff, 0x00000}
8740 }, mem_tbl_5906[] = {
8741 { 0x00000200, 0x00008},
8742 { 0x00004000, 0x00400},
8743 { 0x00006000, 0x00400},
8744 { 0x00008000, 0x01000},
8745 { 0x00010000, 0x01000},
8746 { 0xffffffff, 0x00000}
8748 struct mem_entry *mem_tbl;
8749 int err = 0;
8750 int i;
8752 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
8753 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8754 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
8755 mem_tbl = mem_tbl_5755;
8756 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
8757 mem_tbl = mem_tbl_5906;
8758 else
8759 mem_tbl = mem_tbl_5705;
8760 } else
8761 mem_tbl = mem_tbl_570x;
8763 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
8764 if ((err = tg3_do_mem_test(tp, mem_tbl[i].offset,
8765 mem_tbl[i].len)) != 0)
8766 break;
8769 return err;
8772 #define TG3_MAC_LOOPBACK 0
8773 #define TG3_PHY_LOOPBACK 1
8775 static int tg3_run_loopback(struct tg3 *tp, int loopback_mode)
8777 u32 mac_mode, rx_start_idx, rx_idx, tx_idx, opaque_key;
8778 u32 desc_idx;
8779 struct sk_buff *skb, *rx_skb;
8780 u8 *tx_data;
8781 dma_addr_t map;
8782 int num_pkts, tx_len, rx_len, i, err;
8783 struct tg3_rx_buffer_desc *desc;
8785 if (loopback_mode == TG3_MAC_LOOPBACK) {
8786 /* HW errata - mac loopback fails in some cases on 5780.
8787 * Normal traffic and PHY loopback are not affected by
8788 * errata.
8790 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780)
8791 return 0;
8793 mac_mode = (tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK) |
8794 MAC_MODE_PORT_INT_LPBACK | MAC_MODE_LINK_POLARITY;
8795 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
8796 mac_mode |= MAC_MODE_PORT_MODE_MII;
8797 else
8798 mac_mode |= MAC_MODE_PORT_MODE_GMII;
8799 tw32(MAC_MODE, mac_mode);
8800 } else if (loopback_mode == TG3_PHY_LOOPBACK) {
8801 u32 val;
8803 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
8804 u32 phytest;
8806 if (!tg3_readphy(tp, MII_TG3_EPHY_TEST, &phytest)) {
8807 u32 phy;
8809 tg3_writephy(tp, MII_TG3_EPHY_TEST,
8810 phytest | MII_TG3_EPHY_SHADOW_EN);
8811 if (!tg3_readphy(tp, 0x1b, &phy))
8812 tg3_writephy(tp, 0x1b, phy & ~0x20);
8813 if (!tg3_readphy(tp, 0x10, &phy))
8814 tg3_writephy(tp, 0x10, phy & ~0x4000);
8815 tg3_writephy(tp, MII_TG3_EPHY_TEST, phytest);
8817 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED100;
8818 } else
8819 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED1000;
8821 tg3_writephy(tp, MII_BMCR, val);
8822 udelay(40);
8824 mac_mode = (tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK) |
8825 MAC_MODE_LINK_POLARITY;
8826 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
8827 tg3_writephy(tp, MII_TG3_EPHY_PTEST, 0x1800);
8828 mac_mode |= MAC_MODE_PORT_MODE_MII;
8829 } else
8830 mac_mode |= MAC_MODE_PORT_MODE_GMII;
8832 /* reset to prevent losing 1st rx packet intermittently */
8833 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
8834 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
8835 udelay(10);
8836 tw32_f(MAC_RX_MODE, tp->rx_mode);
8838 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
8839 mac_mode &= ~MAC_MODE_LINK_POLARITY;
8840 tg3_writephy(tp, MII_TG3_EXT_CTRL,
8841 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
8843 tw32(MAC_MODE, mac_mode);
8845 else
8846 return -EINVAL;
8848 err = -EIO;
8850 tx_len = 1514;
8851 skb = netdev_alloc_skb(tp->dev, tx_len);
8852 if (!skb)
8853 return -ENOMEM;
8855 tx_data = skb_put(skb, tx_len);
8856 memcpy(tx_data, tp->dev->dev_addr, 6);
8857 memset(tx_data + 6, 0x0, 8);
8859 tw32(MAC_RX_MTU_SIZE, tx_len + 4);
8861 for (i = 14; i < tx_len; i++)
8862 tx_data[i] = (u8) (i & 0xff);
8864 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
8866 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
8867 HOSTCC_MODE_NOW);
8869 udelay(10);
8871 rx_start_idx = tp->hw_status->idx[0].rx_producer;
8873 num_pkts = 0;
8875 tg3_set_txd(tp, tp->tx_prod, map, tx_len, 0, 1);
8877 tp->tx_prod++;
8878 num_pkts++;
8880 tw32_tx_mbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW,
8881 tp->tx_prod);
8882 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW);
8884 udelay(10);
8886 /* 250 usec to allow enough time on some 10/100 Mbps devices. */
8887 for (i = 0; i < 25; i++) {
8888 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
8889 HOSTCC_MODE_NOW);
8891 udelay(10);
8893 tx_idx = tp->hw_status->idx[0].tx_consumer;
8894 rx_idx = tp->hw_status->idx[0].rx_producer;
8895 if ((tx_idx == tp->tx_prod) &&
8896 (rx_idx == (rx_start_idx + num_pkts)))
8897 break;
8900 pci_unmap_single(tp->pdev, map, tx_len, PCI_DMA_TODEVICE);
8901 dev_kfree_skb(skb);
8903 if (tx_idx != tp->tx_prod)
8904 goto out;
8906 if (rx_idx != rx_start_idx + num_pkts)
8907 goto out;
8909 desc = &tp->rx_rcb[rx_start_idx];
8910 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
8911 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
8912 if (opaque_key != RXD_OPAQUE_RING_STD)
8913 goto out;
8915 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
8916 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
8917 goto out;
8919 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4;
8920 if (rx_len != tx_len)
8921 goto out;
8923 rx_skb = tp->rx_std_buffers[desc_idx].skb;
8925 map = pci_unmap_addr(&tp->rx_std_buffers[desc_idx], mapping);
8926 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, PCI_DMA_FROMDEVICE);
8928 for (i = 14; i < tx_len; i++) {
8929 if (*(rx_skb->data + i) != (u8) (i & 0xff))
8930 goto out;
8932 err = 0;
8934 /* tg3_free_rings will unmap and free the rx_skb */
8935 out:
8936 return err;
8939 #define TG3_MAC_LOOPBACK_FAILED 1
8940 #define TG3_PHY_LOOPBACK_FAILED 2
8941 #define TG3_LOOPBACK_FAILED (TG3_MAC_LOOPBACK_FAILED | \
8942 TG3_PHY_LOOPBACK_FAILED)
8944 static int tg3_test_loopback(struct tg3 *tp)
8946 int err = 0;
8948 if (!netif_running(tp->dev))
8949 return TG3_LOOPBACK_FAILED;
8951 err = tg3_reset_hw(tp, 1);
8952 if (err)
8953 return TG3_LOOPBACK_FAILED;
8955 if (tg3_run_loopback(tp, TG3_MAC_LOOPBACK))
8956 err |= TG3_MAC_LOOPBACK_FAILED;
8957 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
8958 if (tg3_run_loopback(tp, TG3_PHY_LOOPBACK))
8959 err |= TG3_PHY_LOOPBACK_FAILED;
8962 return err;
8965 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
8966 u64 *data)
8968 struct tg3 *tp = netdev_priv(dev);
8970 if (tp->link_config.phy_is_low_power)
8971 tg3_set_power_state(tp, PCI_D0);
8973 memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
8975 if (tg3_test_nvram(tp) != 0) {
8976 etest->flags |= ETH_TEST_FL_FAILED;
8977 data[0] = 1;
8979 if (tg3_test_link(tp) != 0) {
8980 etest->flags |= ETH_TEST_FL_FAILED;
8981 data[1] = 1;
8983 if (etest->flags & ETH_TEST_FL_OFFLINE) {
8984 int err, irq_sync = 0;
8986 if (netif_running(dev)) {
8987 tg3_netif_stop(tp);
8988 irq_sync = 1;
8991 tg3_full_lock(tp, irq_sync);
8993 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
8994 err = tg3_nvram_lock(tp);
8995 tg3_halt_cpu(tp, RX_CPU_BASE);
8996 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
8997 tg3_halt_cpu(tp, TX_CPU_BASE);
8998 if (!err)
8999 tg3_nvram_unlock(tp);
9001 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
9002 tg3_phy_reset(tp);
9004 if (tg3_test_registers(tp) != 0) {
9005 etest->flags |= ETH_TEST_FL_FAILED;
9006 data[2] = 1;
9008 if (tg3_test_memory(tp) != 0) {
9009 etest->flags |= ETH_TEST_FL_FAILED;
9010 data[3] = 1;
9012 if ((data[4] = tg3_test_loopback(tp)) != 0)
9013 etest->flags |= ETH_TEST_FL_FAILED;
9015 tg3_full_unlock(tp);
9017 if (tg3_test_interrupt(tp) != 0) {
9018 etest->flags |= ETH_TEST_FL_FAILED;
9019 data[5] = 1;
9022 tg3_full_lock(tp, 0);
9024 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
9025 if (netif_running(dev)) {
9026 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
9027 if (!tg3_restart_hw(tp, 1))
9028 tg3_netif_start(tp);
9031 tg3_full_unlock(tp);
9033 if (tp->link_config.phy_is_low_power)
9034 tg3_set_power_state(tp, PCI_D3hot);
9038 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
9040 struct mii_ioctl_data *data = if_mii(ifr);
9041 struct tg3 *tp = netdev_priv(dev);
9042 int err;
9044 switch(cmd) {
9045 case SIOCGMIIPHY:
9046 data->phy_id = PHY_ADDR;
9048 /* fallthru */
9049 case SIOCGMIIREG: {
9050 u32 mii_regval;
9052 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
9053 break; /* We have no PHY */
9055 if (tp->link_config.phy_is_low_power)
9056 return -EAGAIN;
9058 spin_lock_bh(&tp->lock);
9059 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
9060 spin_unlock_bh(&tp->lock);
9062 data->val_out = mii_regval;
9064 return err;
9067 case SIOCSMIIREG:
9068 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
9069 break; /* We have no PHY */
9071 if (!capable(CAP_NET_ADMIN))
9072 return -EPERM;
9074 if (tp->link_config.phy_is_low_power)
9075 return -EAGAIN;
9077 spin_lock_bh(&tp->lock);
9078 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
9079 spin_unlock_bh(&tp->lock);
9081 return err;
9083 default:
9084 /* do nothing */
9085 break;
9087 return -EOPNOTSUPP;
9090 #if TG3_VLAN_TAG_USED
9091 static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
9093 struct tg3 *tp = netdev_priv(dev);
9095 if (netif_running(dev))
9096 tg3_netif_stop(tp);
9098 tg3_full_lock(tp, 0);
9100 tp->vlgrp = grp;
9102 /* Update RX_MODE_KEEP_VLAN_TAG bit in RX_MODE register. */
9103 __tg3_set_rx_mode(dev);
9105 tg3_full_unlock(tp);
9107 if (netif_running(dev))
9108 tg3_netif_start(tp);
9111 static void tg3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
9113 struct tg3 *tp = netdev_priv(dev);
9115 if (netif_running(dev))
9116 tg3_netif_stop(tp);
9118 tg3_full_lock(tp, 0);
9119 if (tp->vlgrp)
9120 tp->vlgrp->vlan_devices[vid] = NULL;
9121 tg3_full_unlock(tp);
9123 if (netif_running(dev))
9124 tg3_netif_start(tp);
9126 #endif
9128 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
9130 struct tg3 *tp = netdev_priv(dev);
9132 memcpy(ec, &tp->coal, sizeof(*ec));
9133 return 0;
9136 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
9138 struct tg3 *tp = netdev_priv(dev);
9139 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
9140 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
9142 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
9143 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
9144 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
9145 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
9146 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
9149 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
9150 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
9151 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
9152 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
9153 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
9154 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
9155 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
9156 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
9157 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
9158 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
9159 return -EINVAL;
9161 /* No rx interrupts will be generated if both are zero */
9162 if ((ec->rx_coalesce_usecs == 0) &&
9163 (ec->rx_max_coalesced_frames == 0))
9164 return -EINVAL;
9166 /* No tx interrupts will be generated if both are zero */
9167 if ((ec->tx_coalesce_usecs == 0) &&
9168 (ec->tx_max_coalesced_frames == 0))
9169 return -EINVAL;
9171 /* Only copy relevant parameters, ignore all others. */
9172 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
9173 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
9174 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
9175 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
9176 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
9177 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
9178 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
9179 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
9180 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
9182 if (netif_running(dev)) {
9183 tg3_full_lock(tp, 0);
9184 __tg3_set_coalesce(tp, &tp->coal);
9185 tg3_full_unlock(tp);
9187 return 0;
9190 static const struct ethtool_ops tg3_ethtool_ops = {
9191 .get_settings = tg3_get_settings,
9192 .set_settings = tg3_set_settings,
9193 .get_drvinfo = tg3_get_drvinfo,
9194 .get_regs_len = tg3_get_regs_len,
9195 .get_regs = tg3_get_regs,
9196 .get_wol = tg3_get_wol,
9197 .set_wol = tg3_set_wol,
9198 .get_msglevel = tg3_get_msglevel,
9199 .set_msglevel = tg3_set_msglevel,
9200 .nway_reset = tg3_nway_reset,
9201 .get_link = ethtool_op_get_link,
9202 .get_eeprom_len = tg3_get_eeprom_len,
9203 .get_eeprom = tg3_get_eeprom,
9204 .set_eeprom = tg3_set_eeprom,
9205 .get_ringparam = tg3_get_ringparam,
9206 .set_ringparam = tg3_set_ringparam,
9207 .get_pauseparam = tg3_get_pauseparam,
9208 .set_pauseparam = tg3_set_pauseparam,
9209 .get_rx_csum = tg3_get_rx_csum,
9210 .set_rx_csum = tg3_set_rx_csum,
9211 .get_tx_csum = ethtool_op_get_tx_csum,
9212 .set_tx_csum = tg3_set_tx_csum,
9213 .get_sg = ethtool_op_get_sg,
9214 .set_sg = ethtool_op_set_sg,
9215 #if TG3_TSO_SUPPORT != 0
9216 .get_tso = ethtool_op_get_tso,
9217 .set_tso = tg3_set_tso,
9218 #endif
9219 .self_test_count = tg3_get_test_count,
9220 .self_test = tg3_self_test,
9221 .get_strings = tg3_get_strings,
9222 .phys_id = tg3_phys_id,
9223 .get_stats_count = tg3_get_stats_count,
9224 .get_ethtool_stats = tg3_get_ethtool_stats,
9225 .get_coalesce = tg3_get_coalesce,
9226 .set_coalesce = tg3_set_coalesce,
9227 .get_perm_addr = ethtool_op_get_perm_addr,
9230 static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
9232 u32 cursize, val, magic;
9234 tp->nvram_size = EEPROM_CHIP_SIZE;
9236 if (tg3_nvram_read_swab(tp, 0, &magic) != 0)
9237 return;
9239 if ((magic != TG3_EEPROM_MAGIC) &&
9240 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
9241 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
9242 return;
9245 * Size the chip by reading offsets at increasing powers of two.
9246 * When we encounter our validation signature, we know the addressing
9247 * has wrapped around, and thus have our chip size.
9249 cursize = 0x10;
9251 while (cursize < tp->nvram_size) {
9252 if (tg3_nvram_read_swab(tp, cursize, &val) != 0)
9253 return;
9255 if (val == magic)
9256 break;
9258 cursize <<= 1;
9261 tp->nvram_size = cursize;
9264 static void __devinit tg3_get_nvram_size(struct tg3 *tp)
9266 u32 val;
9268 if (tg3_nvram_read_swab(tp, 0, &val) != 0)
9269 return;
9271 /* Selfboot format */
9272 if (val != TG3_EEPROM_MAGIC) {
9273 tg3_get_eeprom_size(tp);
9274 return;
9277 if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
9278 if (val != 0) {
9279 tp->nvram_size = (val >> 16) * 1024;
9280 return;
9283 tp->nvram_size = 0x20000;
9286 static void __devinit tg3_get_nvram_info(struct tg3 *tp)
9288 u32 nvcfg1;
9290 nvcfg1 = tr32(NVRAM_CFG1);
9291 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
9292 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9294 else {
9295 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
9296 tw32(NVRAM_CFG1, nvcfg1);
9299 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) ||
9300 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
9301 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
9302 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
9303 tp->nvram_jedecnum = JEDEC_ATMEL;
9304 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
9305 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9306 break;
9307 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
9308 tp->nvram_jedecnum = JEDEC_ATMEL;
9309 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
9310 break;
9311 case FLASH_VENDOR_ATMEL_EEPROM:
9312 tp->nvram_jedecnum = JEDEC_ATMEL;
9313 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
9314 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9315 break;
9316 case FLASH_VENDOR_ST:
9317 tp->nvram_jedecnum = JEDEC_ST;
9318 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
9319 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9320 break;
9321 case FLASH_VENDOR_SAIFUN:
9322 tp->nvram_jedecnum = JEDEC_SAIFUN;
9323 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
9324 break;
9325 case FLASH_VENDOR_SST_SMALL:
9326 case FLASH_VENDOR_SST_LARGE:
9327 tp->nvram_jedecnum = JEDEC_SST;
9328 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
9329 break;
9332 else {
9333 tp->nvram_jedecnum = JEDEC_ATMEL;
9334 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
9335 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9339 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
9341 u32 nvcfg1;
9343 nvcfg1 = tr32(NVRAM_CFG1);
9345 /* NVRAM protection for TPM */
9346 if (nvcfg1 & (1 << 27))
9347 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
9349 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
9350 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
9351 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
9352 tp->nvram_jedecnum = JEDEC_ATMEL;
9353 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9354 break;
9355 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
9356 tp->nvram_jedecnum = JEDEC_ATMEL;
9357 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9358 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9359 break;
9360 case FLASH_5752VENDOR_ST_M45PE10:
9361 case FLASH_5752VENDOR_ST_M45PE20:
9362 case FLASH_5752VENDOR_ST_M45PE40:
9363 tp->nvram_jedecnum = JEDEC_ST;
9364 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9365 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9366 break;
9369 if (tp->tg3_flags2 & TG3_FLG2_FLASH) {
9370 switch (nvcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
9371 case FLASH_5752PAGE_SIZE_256:
9372 tp->nvram_pagesize = 256;
9373 break;
9374 case FLASH_5752PAGE_SIZE_512:
9375 tp->nvram_pagesize = 512;
9376 break;
9377 case FLASH_5752PAGE_SIZE_1K:
9378 tp->nvram_pagesize = 1024;
9379 break;
9380 case FLASH_5752PAGE_SIZE_2K:
9381 tp->nvram_pagesize = 2048;
9382 break;
9383 case FLASH_5752PAGE_SIZE_4K:
9384 tp->nvram_pagesize = 4096;
9385 break;
9386 case FLASH_5752PAGE_SIZE_264:
9387 tp->nvram_pagesize = 264;
9388 break;
9391 else {
9392 /* For eeprom, set pagesize to maximum eeprom size */
9393 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
9395 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
9396 tw32(NVRAM_CFG1, nvcfg1);
9400 static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp)
9402 u32 nvcfg1;
9404 nvcfg1 = tr32(NVRAM_CFG1);
9406 /* NVRAM protection for TPM */
9407 if (nvcfg1 & (1 << 27))
9408 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
9410 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
9411 case FLASH_5755VENDOR_ATMEL_EEPROM_64KHZ:
9412 case FLASH_5755VENDOR_ATMEL_EEPROM_376KHZ:
9413 tp->nvram_jedecnum = JEDEC_ATMEL;
9414 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9415 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
9417 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
9418 tw32(NVRAM_CFG1, nvcfg1);
9419 break;
9420 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
9421 case FLASH_5755VENDOR_ATMEL_FLASH_1:
9422 case FLASH_5755VENDOR_ATMEL_FLASH_2:
9423 case FLASH_5755VENDOR_ATMEL_FLASH_3:
9424 case FLASH_5755VENDOR_ATMEL_FLASH_4:
9425 tp->nvram_jedecnum = JEDEC_ATMEL;
9426 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9427 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9428 tp->nvram_pagesize = 264;
9429 break;
9430 case FLASH_5752VENDOR_ST_M45PE10:
9431 case FLASH_5752VENDOR_ST_M45PE20:
9432 case FLASH_5752VENDOR_ST_M45PE40:
9433 tp->nvram_jedecnum = JEDEC_ST;
9434 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9435 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9436 tp->nvram_pagesize = 256;
9437 break;
9441 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
9443 u32 nvcfg1;
9445 nvcfg1 = tr32(NVRAM_CFG1);
9447 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
9448 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
9449 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
9450 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
9451 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
9452 tp->nvram_jedecnum = JEDEC_ATMEL;
9453 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9454 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
9456 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
9457 tw32(NVRAM_CFG1, nvcfg1);
9458 break;
9459 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
9460 case FLASH_5755VENDOR_ATMEL_FLASH_1:
9461 case FLASH_5755VENDOR_ATMEL_FLASH_2:
9462 case FLASH_5755VENDOR_ATMEL_FLASH_3:
9463 tp->nvram_jedecnum = JEDEC_ATMEL;
9464 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9465 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9466 tp->nvram_pagesize = 264;
9467 break;
9468 case FLASH_5752VENDOR_ST_M45PE10:
9469 case FLASH_5752VENDOR_ST_M45PE20:
9470 case FLASH_5752VENDOR_ST_M45PE40:
9471 tp->nvram_jedecnum = JEDEC_ST;
9472 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9473 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9474 tp->nvram_pagesize = 256;
9475 break;
9479 static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp)
9481 tp->nvram_jedecnum = JEDEC_ATMEL;
9482 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9483 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
9486 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
9487 static void __devinit tg3_nvram_init(struct tg3 *tp)
9489 tw32_f(GRC_EEPROM_ADDR,
9490 (EEPROM_ADDR_FSM_RESET |
9491 (EEPROM_DEFAULT_CLOCK_PERIOD <<
9492 EEPROM_ADDR_CLKPERD_SHIFT)));
9494 msleep(1);
9496 /* Enable seeprom accesses. */
9497 tw32_f(GRC_LOCAL_CTRL,
9498 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
9499 udelay(100);
9501 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
9502 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
9503 tp->tg3_flags |= TG3_FLAG_NVRAM;
9505 if (tg3_nvram_lock(tp)) {
9506 printk(KERN_WARNING PFX "%s: Cannot get nvarm lock, "
9507 "tg3_nvram_init failed.\n", tp->dev->name);
9508 return;
9510 tg3_enable_nvram_access(tp);
9512 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
9513 tg3_get_5752_nvram_info(tp);
9514 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
9515 tg3_get_5755_nvram_info(tp);
9516 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
9517 tg3_get_5787_nvram_info(tp);
9518 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
9519 tg3_get_5906_nvram_info(tp);
9520 else
9521 tg3_get_nvram_info(tp);
9523 tg3_get_nvram_size(tp);
9525 tg3_disable_nvram_access(tp);
9526 tg3_nvram_unlock(tp);
9528 } else {
9529 tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED);
9531 tg3_get_eeprom_size(tp);
9535 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
9536 u32 offset, u32 *val)
9538 u32 tmp;
9539 int i;
9541 if (offset > EEPROM_ADDR_ADDR_MASK ||
9542 (offset % 4) != 0)
9543 return -EINVAL;
9545 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
9546 EEPROM_ADDR_DEVID_MASK |
9547 EEPROM_ADDR_READ);
9548 tw32(GRC_EEPROM_ADDR,
9549 tmp |
9550 (0 << EEPROM_ADDR_DEVID_SHIFT) |
9551 ((offset << EEPROM_ADDR_ADDR_SHIFT) &
9552 EEPROM_ADDR_ADDR_MASK) |
9553 EEPROM_ADDR_READ | EEPROM_ADDR_START);
9555 for (i = 0; i < 1000; i++) {
9556 tmp = tr32(GRC_EEPROM_ADDR);
9558 if (tmp & EEPROM_ADDR_COMPLETE)
9559 break;
9560 msleep(1);
9562 if (!(tmp & EEPROM_ADDR_COMPLETE))
9563 return -EBUSY;
9565 *val = tr32(GRC_EEPROM_DATA);
9566 return 0;
9569 #define NVRAM_CMD_TIMEOUT 10000
9571 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
9573 int i;
9575 tw32(NVRAM_CMD, nvram_cmd);
9576 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
9577 udelay(10);
9578 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
9579 udelay(10);
9580 break;
9583 if (i == NVRAM_CMD_TIMEOUT) {
9584 return -EBUSY;
9586 return 0;
9589 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
9591 if ((tp->tg3_flags & TG3_FLAG_NVRAM) &&
9592 (tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) &&
9593 (tp->tg3_flags2 & TG3_FLG2_FLASH) &&
9594 (tp->nvram_jedecnum == JEDEC_ATMEL))
9596 addr = ((addr / tp->nvram_pagesize) <<
9597 ATMEL_AT45DB0X1B_PAGE_POS) +
9598 (addr % tp->nvram_pagesize);
9600 return addr;
9603 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
9605 if ((tp->tg3_flags & TG3_FLAG_NVRAM) &&
9606 (tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) &&
9607 (tp->tg3_flags2 & TG3_FLG2_FLASH) &&
9608 (tp->nvram_jedecnum == JEDEC_ATMEL))
9610 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
9611 tp->nvram_pagesize) +
9612 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
9614 return addr;
9617 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
9619 int ret;
9621 if (!(tp->tg3_flags & TG3_FLAG_NVRAM))
9622 return tg3_nvram_read_using_eeprom(tp, offset, val);
9624 offset = tg3_nvram_phys_addr(tp, offset);
9626 if (offset > NVRAM_ADDR_MSK)
9627 return -EINVAL;
9629 ret = tg3_nvram_lock(tp);
9630 if (ret)
9631 return ret;
9633 tg3_enable_nvram_access(tp);
9635 tw32(NVRAM_ADDR, offset);
9636 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
9637 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
9639 if (ret == 0)
9640 *val = swab32(tr32(NVRAM_RDDATA));
9642 tg3_disable_nvram_access(tp);
9644 tg3_nvram_unlock(tp);
9646 return ret;
9649 static int tg3_nvram_read_swab(struct tg3 *tp, u32 offset, u32 *val)
9651 int err;
9652 u32 tmp;
9654 err = tg3_nvram_read(tp, offset, &tmp);
9655 *val = swab32(tmp);
9656 return err;
9659 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
9660 u32 offset, u32 len, u8 *buf)
9662 int i, j, rc = 0;
9663 u32 val;
9665 for (i = 0; i < len; i += 4) {
9666 u32 addr, data;
9668 addr = offset + i;
9670 memcpy(&data, buf + i, 4);
9672 tw32(GRC_EEPROM_DATA, cpu_to_le32(data));
9674 val = tr32(GRC_EEPROM_ADDR);
9675 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
9677 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
9678 EEPROM_ADDR_READ);
9679 tw32(GRC_EEPROM_ADDR, val |
9680 (0 << EEPROM_ADDR_DEVID_SHIFT) |
9681 (addr & EEPROM_ADDR_ADDR_MASK) |
9682 EEPROM_ADDR_START |
9683 EEPROM_ADDR_WRITE);
9685 for (j = 0; j < 1000; j++) {
9686 val = tr32(GRC_EEPROM_ADDR);
9688 if (val & EEPROM_ADDR_COMPLETE)
9689 break;
9690 msleep(1);
9692 if (!(val & EEPROM_ADDR_COMPLETE)) {
9693 rc = -EBUSY;
9694 break;
9698 return rc;
9701 /* offset and length are dword aligned */
9702 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
9703 u8 *buf)
9705 int ret = 0;
9706 u32 pagesize = tp->nvram_pagesize;
9707 u32 pagemask = pagesize - 1;
9708 u32 nvram_cmd;
9709 u8 *tmp;
9711 tmp = kmalloc(pagesize, GFP_KERNEL);
9712 if (tmp == NULL)
9713 return -ENOMEM;
9715 while (len) {
9716 int j;
9717 u32 phy_addr, page_off, size;
9719 phy_addr = offset & ~pagemask;
9721 for (j = 0; j < pagesize; j += 4) {
9722 if ((ret = tg3_nvram_read(tp, phy_addr + j,
9723 (u32 *) (tmp + j))))
9724 break;
9726 if (ret)
9727 break;
9729 page_off = offset & pagemask;
9730 size = pagesize;
9731 if (len < size)
9732 size = len;
9734 len -= size;
9736 memcpy(tmp + page_off, buf, size);
9738 offset = offset + (pagesize - page_off);
9740 tg3_enable_nvram_access(tp);
9743 * Before we can erase the flash page, we need
9744 * to issue a special "write enable" command.
9746 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
9748 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
9749 break;
9751 /* Erase the target page */
9752 tw32(NVRAM_ADDR, phy_addr);
9754 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
9755 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
9757 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
9758 break;
9760 /* Issue another write enable to start the write. */
9761 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
9763 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
9764 break;
9766 for (j = 0; j < pagesize; j += 4) {
9767 u32 data;
9769 data = *((u32 *) (tmp + j));
9770 tw32(NVRAM_WRDATA, cpu_to_be32(data));
9772 tw32(NVRAM_ADDR, phy_addr + j);
9774 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
9775 NVRAM_CMD_WR;
9777 if (j == 0)
9778 nvram_cmd |= NVRAM_CMD_FIRST;
9779 else if (j == (pagesize - 4))
9780 nvram_cmd |= NVRAM_CMD_LAST;
9782 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
9783 break;
9785 if (ret)
9786 break;
9789 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
9790 tg3_nvram_exec_cmd(tp, nvram_cmd);
9792 kfree(tmp);
9794 return ret;
9797 /* offset and length are dword aligned */
9798 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
9799 u8 *buf)
9801 int i, ret = 0;
9803 for (i = 0; i < len; i += 4, offset += 4) {
9804 u32 data, page_off, phy_addr, nvram_cmd;
9806 memcpy(&data, buf + i, 4);
9807 tw32(NVRAM_WRDATA, cpu_to_be32(data));
9809 page_off = offset % tp->nvram_pagesize;
9811 phy_addr = tg3_nvram_phys_addr(tp, offset);
9813 tw32(NVRAM_ADDR, phy_addr);
9815 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
9817 if ((page_off == 0) || (i == 0))
9818 nvram_cmd |= NVRAM_CMD_FIRST;
9819 if (page_off == (tp->nvram_pagesize - 4))
9820 nvram_cmd |= NVRAM_CMD_LAST;
9822 if (i == (len - 4))
9823 nvram_cmd |= NVRAM_CMD_LAST;
9825 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752) &&
9826 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5755) &&
9827 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787) &&
9828 (tp->nvram_jedecnum == JEDEC_ST) &&
9829 (nvram_cmd & NVRAM_CMD_FIRST)) {
9831 if ((ret = tg3_nvram_exec_cmd(tp,
9832 NVRAM_CMD_WREN | NVRAM_CMD_GO |
9833 NVRAM_CMD_DONE)))
9835 break;
9837 if (!(tp->tg3_flags2 & TG3_FLG2_FLASH)) {
9838 /* We always do complete word writes to eeprom. */
9839 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
9842 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
9843 break;
9845 return ret;
9848 /* offset and length are dword aligned */
9849 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
9851 int ret;
9853 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
9854 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
9855 ~GRC_LCLCTRL_GPIO_OUTPUT1);
9856 udelay(40);
9859 if (!(tp->tg3_flags & TG3_FLAG_NVRAM)) {
9860 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
9862 else {
9863 u32 grc_mode;
9865 ret = tg3_nvram_lock(tp);
9866 if (ret)
9867 return ret;
9869 tg3_enable_nvram_access(tp);
9870 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
9871 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM))
9872 tw32(NVRAM_WRITE1, 0x406);
9874 grc_mode = tr32(GRC_MODE);
9875 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
9877 if ((tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) ||
9878 !(tp->tg3_flags2 & TG3_FLG2_FLASH)) {
9880 ret = tg3_nvram_write_block_buffered(tp, offset, len,
9881 buf);
9883 else {
9884 ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
9885 buf);
9888 grc_mode = tr32(GRC_MODE);
9889 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
9891 tg3_disable_nvram_access(tp);
9892 tg3_nvram_unlock(tp);
9895 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
9896 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
9897 udelay(40);
9900 return ret;
9903 struct subsys_tbl_ent {
9904 u16 subsys_vendor, subsys_devid;
9905 u32 phy_id;
9908 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
9909 /* Broadcom boards. */
9910 { PCI_VENDOR_ID_BROADCOM, 0x1644, PHY_ID_BCM5401 }, /* BCM95700A6 */
9911 { PCI_VENDOR_ID_BROADCOM, 0x0001, PHY_ID_BCM5701 }, /* BCM95701A5 */
9912 { PCI_VENDOR_ID_BROADCOM, 0x0002, PHY_ID_BCM8002 }, /* BCM95700T6 */
9913 { PCI_VENDOR_ID_BROADCOM, 0x0003, 0 }, /* BCM95700A9 */
9914 { PCI_VENDOR_ID_BROADCOM, 0x0005, PHY_ID_BCM5701 }, /* BCM95701T1 */
9915 { PCI_VENDOR_ID_BROADCOM, 0x0006, PHY_ID_BCM5701 }, /* BCM95701T8 */
9916 { PCI_VENDOR_ID_BROADCOM, 0x0007, 0 }, /* BCM95701A7 */
9917 { PCI_VENDOR_ID_BROADCOM, 0x0008, PHY_ID_BCM5701 }, /* BCM95701A10 */
9918 { PCI_VENDOR_ID_BROADCOM, 0x8008, PHY_ID_BCM5701 }, /* BCM95701A12 */
9919 { PCI_VENDOR_ID_BROADCOM, 0x0009, PHY_ID_BCM5703 }, /* BCM95703Ax1 */
9920 { PCI_VENDOR_ID_BROADCOM, 0x8009, PHY_ID_BCM5703 }, /* BCM95703Ax2 */
9922 /* 3com boards. */
9923 { PCI_VENDOR_ID_3COM, 0x1000, PHY_ID_BCM5401 }, /* 3C996T */
9924 { PCI_VENDOR_ID_3COM, 0x1006, PHY_ID_BCM5701 }, /* 3C996BT */
9925 { PCI_VENDOR_ID_3COM, 0x1004, 0 }, /* 3C996SX */
9926 { PCI_VENDOR_ID_3COM, 0x1007, PHY_ID_BCM5701 }, /* 3C1000T */
9927 { PCI_VENDOR_ID_3COM, 0x1008, PHY_ID_BCM5701 }, /* 3C940BR01 */
9929 /* DELL boards. */
9930 { PCI_VENDOR_ID_DELL, 0x00d1, PHY_ID_BCM5401 }, /* VIPER */
9931 { PCI_VENDOR_ID_DELL, 0x0106, PHY_ID_BCM5401 }, /* JAGUAR */
9932 { PCI_VENDOR_ID_DELL, 0x0109, PHY_ID_BCM5411 }, /* MERLOT */
9933 { PCI_VENDOR_ID_DELL, 0x010a, PHY_ID_BCM5411 }, /* SLIM_MERLOT */
9935 /* Compaq boards. */
9936 { PCI_VENDOR_ID_COMPAQ, 0x007c, PHY_ID_BCM5701 }, /* BANSHEE */
9937 { PCI_VENDOR_ID_COMPAQ, 0x009a, PHY_ID_BCM5701 }, /* BANSHEE_2 */
9938 { PCI_VENDOR_ID_COMPAQ, 0x007d, 0 }, /* CHANGELING */
9939 { PCI_VENDOR_ID_COMPAQ, 0x0085, PHY_ID_BCM5701 }, /* NC7780 */
9940 { PCI_VENDOR_ID_COMPAQ, 0x0099, PHY_ID_BCM5701 }, /* NC7780_2 */
9942 /* IBM boards. */
9943 { PCI_VENDOR_ID_IBM, 0x0281, 0 } /* IBM??? */
9946 static inline struct subsys_tbl_ent *lookup_by_subsys(struct tg3 *tp)
9948 int i;
9950 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
9951 if ((subsys_id_to_phy_id[i].subsys_vendor ==
9952 tp->pdev->subsystem_vendor) &&
9953 (subsys_id_to_phy_id[i].subsys_devid ==
9954 tp->pdev->subsystem_device))
9955 return &subsys_id_to_phy_id[i];
9957 return NULL;
9960 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
9962 u32 val;
9963 u16 pmcsr;
9965 /* On some early chips the SRAM cannot be accessed in D3hot state,
9966 * so need make sure we're in D0.
9968 pci_read_config_word(tp->pdev, tp->pm_cap + PCI_PM_CTRL, &pmcsr);
9969 pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
9970 pci_write_config_word(tp->pdev, tp->pm_cap + PCI_PM_CTRL, pmcsr);
9971 msleep(1);
9973 /* Make sure register accesses (indirect or otherwise)
9974 * will function correctly.
9976 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
9977 tp->misc_host_ctrl);
9979 /* The memory arbiter has to be enabled in order for SRAM accesses
9980 * to succeed. Normally on powerup the tg3 chip firmware will make
9981 * sure it is enabled, but other entities such as system netboot
9982 * code might disable it.
9984 val = tr32(MEMARB_MODE);
9985 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
9987 tp->phy_id = PHY_ID_INVALID;
9988 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
9990 /* Assume an onboard device by default. */
9991 tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT;
9993 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
9994 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
9995 tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT;
9996 tp->tg3_flags2 |= TG3_FLG2_IS_NIC;
9998 return;
10001 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
10002 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
10003 u32 nic_cfg, led_cfg;
10004 u32 nic_phy_id, ver, cfg2 = 0, eeprom_phy_id;
10005 int eeprom_phy_serdes = 0;
10007 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
10008 tp->nic_sram_data_cfg = nic_cfg;
10010 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
10011 ver >>= NIC_SRAM_DATA_VER_SHIFT;
10012 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) &&
10013 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) &&
10014 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703) &&
10015 (ver > 0) && (ver < 0x100))
10016 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
10018 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
10019 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
10020 eeprom_phy_serdes = 1;
10022 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
10023 if (nic_phy_id != 0) {
10024 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
10025 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
10027 eeprom_phy_id = (id1 >> 16) << 10;
10028 eeprom_phy_id |= (id2 & 0xfc00) << 16;
10029 eeprom_phy_id |= (id2 & 0x03ff) << 0;
10030 } else
10031 eeprom_phy_id = 0;
10033 tp->phy_id = eeprom_phy_id;
10034 if (eeprom_phy_serdes) {
10035 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
10036 tp->tg3_flags2 |= TG3_FLG2_MII_SERDES;
10037 else
10038 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
10041 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
10042 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
10043 SHASTA_EXT_LED_MODE_MASK);
10044 else
10045 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
10047 switch (led_cfg) {
10048 default:
10049 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
10050 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10051 break;
10053 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
10054 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
10055 break;
10057 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
10058 tp->led_ctrl = LED_CTRL_MODE_MAC;
10060 /* Default to PHY_1_MODE if 0 (MAC_MODE) is
10061 * read on some older 5700/5701 bootcode.
10063 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
10064 ASIC_REV_5700 ||
10065 GET_ASIC_REV(tp->pci_chip_rev_id) ==
10066 ASIC_REV_5701)
10067 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10069 break;
10071 case SHASTA_EXT_LED_SHARED:
10072 tp->led_ctrl = LED_CTRL_MODE_SHARED;
10073 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
10074 tp->pci_chip_rev_id != CHIPREV_ID_5750_A1)
10075 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
10076 LED_CTRL_MODE_PHY_2);
10077 break;
10079 case SHASTA_EXT_LED_MAC:
10080 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
10081 break;
10083 case SHASTA_EXT_LED_COMBO:
10084 tp->led_ctrl = LED_CTRL_MODE_COMBO;
10085 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)
10086 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
10087 LED_CTRL_MODE_PHY_2);
10088 break;
10092 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10093 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) &&
10094 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
10095 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
10097 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
10098 tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT;
10099 if ((tp->pdev->subsystem_vendor ==
10100 PCI_VENDOR_ID_ARIMA) &&
10101 (tp->pdev->subsystem_device == 0x205a ||
10102 tp->pdev->subsystem_device == 0x2063))
10103 tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT;
10104 } else {
10105 tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT;
10106 tp->tg3_flags2 |= TG3_FLG2_IS_NIC;
10109 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
10110 tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
10111 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
10112 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
10114 if (nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)
10115 tp->tg3_flags |= TG3_FLAG_SERDES_WOL_CAP;
10117 if (cfg2 & (1 << 17))
10118 tp->tg3_flags2 |= TG3_FLG2_CAPACITIVE_COUPLING;
10120 /* serdes signal pre-emphasis in register 0x590 set by */
10121 /* bootcode if bit 18 is set */
10122 if (cfg2 & (1 << 18))
10123 tp->tg3_flags2 |= TG3_FLG2_SERDES_PREEMPHASIS;
10127 static int __devinit tg3_phy_probe(struct tg3 *tp)
10129 u32 hw_phy_id_1, hw_phy_id_2;
10130 u32 hw_phy_id, hw_phy_id_masked;
10131 int err;
10133 /* Reading the PHY ID register can conflict with ASF
10134 * firwmare access to the PHY hardware.
10136 err = 0;
10137 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
10138 hw_phy_id = hw_phy_id_masked = PHY_ID_INVALID;
10139 } else {
10140 /* Now read the physical PHY_ID from the chip and verify
10141 * that it is sane. If it doesn't look good, we fall back
10142 * to either the hard-coded table based PHY_ID and failing
10143 * that the value found in the eeprom area.
10145 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
10146 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
10148 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10;
10149 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
10150 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0;
10152 hw_phy_id_masked = hw_phy_id & PHY_ID_MASK;
10155 if (!err && KNOWN_PHY_ID(hw_phy_id_masked)) {
10156 tp->phy_id = hw_phy_id;
10157 if (hw_phy_id_masked == PHY_ID_BCM8002)
10158 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
10159 else
10160 tp->tg3_flags2 &= ~TG3_FLG2_PHY_SERDES;
10161 } else {
10162 if (tp->phy_id != PHY_ID_INVALID) {
10163 /* Do nothing, phy ID already set up in
10164 * tg3_get_eeprom_hw_cfg().
10166 } else {
10167 struct subsys_tbl_ent *p;
10169 /* No eeprom signature? Try the hardcoded
10170 * subsys device table.
10172 p = lookup_by_subsys(tp);
10173 if (!p)
10174 return -ENODEV;
10176 tp->phy_id = p->phy_id;
10177 if (!tp->phy_id ||
10178 tp->phy_id == PHY_ID_BCM8002)
10179 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
10183 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) &&
10184 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
10185 u32 bmsr, adv_reg, tg3_ctrl, mask;
10187 tg3_readphy(tp, MII_BMSR, &bmsr);
10188 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
10189 (bmsr & BMSR_LSTATUS))
10190 goto skip_phy_reset;
10192 err = tg3_phy_reset(tp);
10193 if (err)
10194 return err;
10196 adv_reg = (ADVERTISE_10HALF | ADVERTISE_10FULL |
10197 ADVERTISE_100HALF | ADVERTISE_100FULL |
10198 ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
10199 tg3_ctrl = 0;
10200 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY)) {
10201 tg3_ctrl = (MII_TG3_CTRL_ADV_1000_HALF |
10202 MII_TG3_CTRL_ADV_1000_FULL);
10203 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
10204 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
10205 tg3_ctrl |= (MII_TG3_CTRL_AS_MASTER |
10206 MII_TG3_CTRL_ENABLE_AS_MASTER);
10209 mask = (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
10210 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
10211 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full);
10212 if (!tg3_copper_is_advertising_all(tp, mask)) {
10213 tg3_writephy(tp, MII_ADVERTISE, adv_reg);
10215 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
10216 tg3_writephy(tp, MII_TG3_CTRL, tg3_ctrl);
10218 tg3_writephy(tp, MII_BMCR,
10219 BMCR_ANENABLE | BMCR_ANRESTART);
10221 tg3_phy_set_wirespeed(tp);
10223 tg3_writephy(tp, MII_ADVERTISE, adv_reg);
10224 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
10225 tg3_writephy(tp, MII_TG3_CTRL, tg3_ctrl);
10228 skip_phy_reset:
10229 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
10230 err = tg3_init_5401phy_dsp(tp);
10231 if (err)
10232 return err;
10235 if (!err && ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401)) {
10236 err = tg3_init_5401phy_dsp(tp);
10239 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
10240 tp->link_config.advertising =
10241 (ADVERTISED_1000baseT_Half |
10242 ADVERTISED_1000baseT_Full |
10243 ADVERTISED_Autoneg |
10244 ADVERTISED_FIBRE);
10245 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
10246 tp->link_config.advertising &=
10247 ~(ADVERTISED_1000baseT_Half |
10248 ADVERTISED_1000baseT_Full);
10250 return err;
10253 static void __devinit tg3_read_partno(struct tg3 *tp)
10255 unsigned char vpd_data[256];
10256 unsigned int i;
10257 u32 magic;
10259 if (tg3_nvram_read_swab(tp, 0x0, &magic))
10260 goto out_not_found;
10262 if (magic == TG3_EEPROM_MAGIC) {
10263 for (i = 0; i < 256; i += 4) {
10264 u32 tmp;
10266 if (tg3_nvram_read(tp, 0x100 + i, &tmp))
10267 goto out_not_found;
10269 vpd_data[i + 0] = ((tmp >> 0) & 0xff);
10270 vpd_data[i + 1] = ((tmp >> 8) & 0xff);
10271 vpd_data[i + 2] = ((tmp >> 16) & 0xff);
10272 vpd_data[i + 3] = ((tmp >> 24) & 0xff);
10274 } else {
10275 int vpd_cap;
10277 vpd_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_VPD);
10278 for (i = 0; i < 256; i += 4) {
10279 u32 tmp, j = 0;
10280 u16 tmp16;
10282 pci_write_config_word(tp->pdev, vpd_cap + PCI_VPD_ADDR,
10284 while (j++ < 100) {
10285 pci_read_config_word(tp->pdev, vpd_cap +
10286 PCI_VPD_ADDR, &tmp16);
10287 if (tmp16 & 0x8000)
10288 break;
10289 msleep(1);
10291 if (!(tmp16 & 0x8000))
10292 goto out_not_found;
10294 pci_read_config_dword(tp->pdev, vpd_cap + PCI_VPD_DATA,
10295 &tmp);
10296 tmp = cpu_to_le32(tmp);
10297 memcpy(&vpd_data[i], &tmp, 4);
10301 /* Now parse and find the part number. */
10302 for (i = 0; i < 254; ) {
10303 unsigned char val = vpd_data[i];
10304 unsigned int block_end;
10306 if (val == 0x82 || val == 0x91) {
10307 i = (i + 3 +
10308 (vpd_data[i + 1] +
10309 (vpd_data[i + 2] << 8)));
10310 continue;
10313 if (val != 0x90)
10314 goto out_not_found;
10316 block_end = (i + 3 +
10317 (vpd_data[i + 1] +
10318 (vpd_data[i + 2] << 8)));
10319 i += 3;
10321 if (block_end > 256)
10322 goto out_not_found;
10324 while (i < (block_end - 2)) {
10325 if (vpd_data[i + 0] == 'P' &&
10326 vpd_data[i + 1] == 'N') {
10327 int partno_len = vpd_data[i + 2];
10329 i += 3;
10330 if (partno_len > 24 || (partno_len + i) > 256)
10331 goto out_not_found;
10333 memcpy(tp->board_part_number,
10334 &vpd_data[i], partno_len);
10336 /* Success. */
10337 return;
10339 i += 3 + vpd_data[i + 2];
10342 /* Part number not found. */
10343 goto out_not_found;
10346 out_not_found:
10347 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
10348 strcpy(tp->board_part_number, "BCM95906");
10349 else
10350 strcpy(tp->board_part_number, "none");
10353 static void __devinit tg3_read_fw_ver(struct tg3 *tp)
10355 u32 val, offset, start;
10357 if (tg3_nvram_read_swab(tp, 0, &val))
10358 return;
10360 if (val != TG3_EEPROM_MAGIC)
10361 return;
10363 if (tg3_nvram_read_swab(tp, 0xc, &offset) ||
10364 tg3_nvram_read_swab(tp, 0x4, &start))
10365 return;
10367 offset = tg3_nvram_logical_addr(tp, offset);
10368 if (tg3_nvram_read_swab(tp, offset, &val))
10369 return;
10371 if ((val & 0xfc000000) == 0x0c000000) {
10372 u32 ver_offset, addr;
10373 int i;
10375 if (tg3_nvram_read_swab(tp, offset + 4, &val) ||
10376 tg3_nvram_read_swab(tp, offset + 8, &ver_offset))
10377 return;
10379 if (val != 0)
10380 return;
10382 addr = offset + ver_offset - start;
10383 for (i = 0; i < 16; i += 4) {
10384 if (tg3_nvram_read(tp, addr + i, &val))
10385 return;
10387 val = cpu_to_le32(val);
10388 memcpy(tp->fw_ver + i, &val, 4);
10393 static int __devinit tg3_get_invariants(struct tg3 *tp)
10395 static struct pci_device_id write_reorder_chipsets[] = {
10396 { PCI_DEVICE(PCI_VENDOR_ID_AMD,
10397 PCI_DEVICE_ID_AMD_FE_GATE_700C) },
10398 { PCI_DEVICE(PCI_VENDOR_ID_AMD,
10399 PCI_DEVICE_ID_AMD_8131_BRIDGE) },
10400 { PCI_DEVICE(PCI_VENDOR_ID_VIA,
10401 PCI_DEVICE_ID_VIA_8385_0) },
10402 { },
10404 u32 misc_ctrl_reg;
10405 u32 cacheline_sz_reg;
10406 u32 pci_state_reg, grc_misc_cfg;
10407 u32 val;
10408 u16 pci_cmd;
10409 int err, pcie_cap;
10411 /* Force memory write invalidate off. If we leave it on,
10412 * then on 5700_BX chips we have to enable a workaround.
10413 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
10414 * to match the cacheline size. The Broadcom driver have this
10415 * workaround but turns MWI off all the times so never uses
10416 * it. This seems to suggest that the workaround is insufficient.
10418 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
10419 pci_cmd &= ~PCI_COMMAND_INVALIDATE;
10420 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
10422 /* It is absolutely critical that TG3PCI_MISC_HOST_CTRL
10423 * has the register indirect write enable bit set before
10424 * we try to access any of the MMIO registers. It is also
10425 * critical that the PCI-X hw workaround situation is decided
10426 * before that as well.
10428 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
10429 &misc_ctrl_reg);
10431 tp->pci_chip_rev_id = (misc_ctrl_reg >>
10432 MISC_HOST_CTRL_CHIPREV_SHIFT);
10434 /* Wrong chip ID in 5752 A0. This code can be removed later
10435 * as A0 is not in production.
10437 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
10438 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
10440 /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
10441 * we need to disable memory and use config. cycles
10442 * only to access all registers. The 5702/03 chips
10443 * can mistakenly decode the special cycles from the
10444 * ICH chipsets as memory write cycles, causing corruption
10445 * of register and memory space. Only certain ICH bridges
10446 * will drive special cycles with non-zero data during the
10447 * address phase which can fall within the 5703's address
10448 * range. This is not an ICH bug as the PCI spec allows
10449 * non-zero address during special cycles. However, only
10450 * these ICH bridges are known to drive non-zero addresses
10451 * during special cycles.
10453 * Since special cycles do not cross PCI bridges, we only
10454 * enable this workaround if the 5703 is on the secondary
10455 * bus of these ICH bridges.
10457 if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
10458 (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) {
10459 static struct tg3_dev_id {
10460 u32 vendor;
10461 u32 device;
10462 u32 rev;
10463 } ich_chipsets[] = {
10464 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
10465 PCI_ANY_ID },
10466 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
10467 PCI_ANY_ID },
10468 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
10469 0xa },
10470 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
10471 PCI_ANY_ID },
10472 { },
10474 struct tg3_dev_id *pci_id = &ich_chipsets[0];
10475 struct pci_dev *bridge = NULL;
10477 while (pci_id->vendor != 0) {
10478 bridge = pci_get_device(pci_id->vendor, pci_id->device,
10479 bridge);
10480 if (!bridge) {
10481 pci_id++;
10482 continue;
10484 if (pci_id->rev != PCI_ANY_ID) {
10485 u8 rev;
10487 pci_read_config_byte(bridge, PCI_REVISION_ID,
10488 &rev);
10489 if (rev > pci_id->rev)
10490 continue;
10492 if (bridge->subordinate &&
10493 (bridge->subordinate->number ==
10494 tp->pdev->bus->number)) {
10496 tp->tg3_flags2 |= TG3_FLG2_ICH_WORKAROUND;
10497 pci_dev_put(bridge);
10498 break;
10503 /* The EPB bridge inside 5714, 5715, and 5780 cannot support
10504 * DMA addresses > 40-bit. This bridge may have other additional
10505 * 57xx devices behind it in some 4-port NIC designs for example.
10506 * Any tg3 device found behind the bridge will also need the 40-bit
10507 * DMA workaround.
10509 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 ||
10510 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
10511 tp->tg3_flags2 |= TG3_FLG2_5780_CLASS;
10512 tp->tg3_flags |= TG3_FLAG_40BIT_DMA_BUG;
10513 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
10515 else {
10516 struct pci_dev *bridge = NULL;
10518 do {
10519 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
10520 PCI_DEVICE_ID_SERVERWORKS_EPB,
10521 bridge);
10522 if (bridge && bridge->subordinate &&
10523 (bridge->subordinate->number <=
10524 tp->pdev->bus->number) &&
10525 (bridge->subordinate->subordinate >=
10526 tp->pdev->bus->number)) {
10527 tp->tg3_flags |= TG3_FLAG_40BIT_DMA_BUG;
10528 pci_dev_put(bridge);
10529 break;
10531 } while (bridge);
10534 /* Initialize misc host control in PCI block. */
10535 tp->misc_host_ctrl |= (misc_ctrl_reg &
10536 MISC_HOST_CTRL_CHIPREV);
10537 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
10538 tp->misc_host_ctrl);
10540 pci_read_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
10541 &cacheline_sz_reg);
10543 tp->pci_cacheline_sz = (cacheline_sz_reg >> 0) & 0xff;
10544 tp->pci_lat_timer = (cacheline_sz_reg >> 8) & 0xff;
10545 tp->pci_hdr_type = (cacheline_sz_reg >> 16) & 0xff;
10546 tp->pci_bist = (cacheline_sz_reg >> 24) & 0xff;
10548 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
10549 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
10550 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
10551 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
10552 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
10553 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
10554 tp->tg3_flags2 |= TG3_FLG2_5750_PLUS;
10556 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) ||
10557 (tp->tg3_flags2 & TG3_FLG2_5750_PLUS))
10558 tp->tg3_flags2 |= TG3_FLG2_5705_PLUS;
10560 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
10561 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
10562 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
10563 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
10564 tp->tg3_flags2 |= TG3_FLG2_HW_TSO_2;
10565 tp->tg3_flags2 |= TG3_FLG2_1SHOT_MSI;
10566 } else {
10567 tp->tg3_flags2 |= TG3_FLG2_HW_TSO_1 |
10568 TG3_FLG2_HW_TSO_1_BUG;
10569 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
10570 ASIC_REV_5750 &&
10571 tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2)
10572 tp->tg3_flags2 &= ~TG3_FLG2_HW_TSO_1_BUG;
10576 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 &&
10577 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750 &&
10578 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
10579 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5755 &&
10580 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787 &&
10581 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)
10582 tp->tg3_flags2 |= TG3_FLG2_JUMBO_CAPABLE;
10584 pcie_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_EXP);
10585 if (pcie_cap != 0) {
10586 tp->tg3_flags2 |= TG3_FLG2_PCI_EXPRESS;
10587 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
10588 u16 lnkctl;
10590 pci_read_config_word(tp->pdev,
10591 pcie_cap + PCI_EXP_LNKCTL,
10592 &lnkctl);
10593 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN)
10594 tp->tg3_flags2 &= ~TG3_FLG2_HW_TSO_2;
10598 /* If we have an AMD 762 or VIA K8T800 chipset, write
10599 * reordering to the mailbox registers done by the host
10600 * controller can cause major troubles. We read back from
10601 * every mailbox register write to force the writes to be
10602 * posted to the chip in order.
10604 if (pci_dev_present(write_reorder_chipsets) &&
10605 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
10606 tp->tg3_flags |= TG3_FLAG_MBOX_WRITE_REORDER;
10608 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
10609 tp->pci_lat_timer < 64) {
10610 tp->pci_lat_timer = 64;
10612 cacheline_sz_reg = ((tp->pci_cacheline_sz & 0xff) << 0);
10613 cacheline_sz_reg |= ((tp->pci_lat_timer & 0xff) << 8);
10614 cacheline_sz_reg |= ((tp->pci_hdr_type & 0xff) << 16);
10615 cacheline_sz_reg |= ((tp->pci_bist & 0xff) << 24);
10617 pci_write_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
10618 cacheline_sz_reg);
10621 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
10622 &pci_state_reg);
10624 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0) {
10625 tp->tg3_flags |= TG3_FLAG_PCIX_MODE;
10627 /* If this is a 5700 BX chipset, and we are in PCI-X
10628 * mode, enable register write workaround.
10630 * The workaround is to use indirect register accesses
10631 * for all chip writes not to mailbox registers.
10633 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
10634 u32 pm_reg;
10635 u16 pci_cmd;
10637 tp->tg3_flags |= TG3_FLAG_PCIX_TARGET_HWBUG;
10639 /* The chip can have it's power management PCI config
10640 * space registers clobbered due to this bug.
10641 * So explicitly force the chip into D0 here.
10643 pci_read_config_dword(tp->pdev, TG3PCI_PM_CTRL_STAT,
10644 &pm_reg);
10645 pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
10646 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
10647 pci_write_config_dword(tp->pdev, TG3PCI_PM_CTRL_STAT,
10648 pm_reg);
10650 /* Also, force SERR#/PERR# in PCI command. */
10651 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
10652 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
10653 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
10657 /* 5700 BX chips need to have their TX producer index mailboxes
10658 * written twice to workaround a bug.
10660 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX)
10661 tp->tg3_flags |= TG3_FLAG_TXD_MBOX_HWBUG;
10663 /* Back to back register writes can cause problems on this chip,
10664 * the workaround is to read back all reg writes except those to
10665 * mailbox regs. See tg3_write_indirect_reg32().
10667 * PCI Express 5750_A0 rev chips need this workaround too.
10669 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
10670 ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
10671 tp->pci_chip_rev_id == CHIPREV_ID_5750_A0))
10672 tp->tg3_flags |= TG3_FLAG_5701_REG_WRITE_BUG;
10674 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
10675 tp->tg3_flags |= TG3_FLAG_PCI_HIGH_SPEED;
10676 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
10677 tp->tg3_flags |= TG3_FLAG_PCI_32BIT;
10679 /* Chip-specific fixup from Broadcom driver */
10680 if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
10681 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
10682 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
10683 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
10686 /* Default fast path register access methods */
10687 tp->read32 = tg3_read32;
10688 tp->write32 = tg3_write32;
10689 tp->read32_mbox = tg3_read32;
10690 tp->write32_mbox = tg3_write32;
10691 tp->write32_tx_mbox = tg3_write32;
10692 tp->write32_rx_mbox = tg3_write32;
10694 /* Various workaround register access methods */
10695 if (tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG)
10696 tp->write32 = tg3_write_indirect_reg32;
10697 else if (tp->tg3_flags & TG3_FLAG_5701_REG_WRITE_BUG)
10698 tp->write32 = tg3_write_flush_reg32;
10700 if ((tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG) ||
10701 (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)) {
10702 tp->write32_tx_mbox = tg3_write32_tx_mbox;
10703 if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
10704 tp->write32_rx_mbox = tg3_write_flush_reg32;
10707 if (tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND) {
10708 tp->read32 = tg3_read_indirect_reg32;
10709 tp->write32 = tg3_write_indirect_reg32;
10710 tp->read32_mbox = tg3_read_indirect_mbox;
10711 tp->write32_mbox = tg3_write_indirect_mbox;
10712 tp->write32_tx_mbox = tg3_write_indirect_mbox;
10713 tp->write32_rx_mbox = tg3_write_indirect_mbox;
10715 iounmap(tp->regs);
10716 tp->regs = NULL;
10718 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
10719 pci_cmd &= ~PCI_COMMAND_MEMORY;
10720 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
10722 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
10723 tp->read32_mbox = tg3_read32_mbox_5906;
10724 tp->write32_mbox = tg3_write32_mbox_5906;
10725 tp->write32_tx_mbox = tg3_write32_mbox_5906;
10726 tp->write32_rx_mbox = tg3_write32_mbox_5906;
10729 if (tp->write32 == tg3_write_indirect_reg32 ||
10730 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) &&
10731 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10732 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)))
10733 tp->tg3_flags |= TG3_FLAG_SRAM_USE_CONFIG;
10735 /* Get eeprom hw config before calling tg3_set_power_state().
10736 * In particular, the TG3_FLG2_IS_NIC flag must be
10737 * determined before calling tg3_set_power_state() so that
10738 * we know whether or not to switch out of Vaux power.
10739 * When the flag is set, it means that GPIO1 is used for eeprom
10740 * write protect and also implies that it is a LOM where GPIOs
10741 * are not used to switch power.
10743 tg3_get_eeprom_hw_cfg(tp);
10745 /* Set up tp->grc_local_ctrl before calling tg3_set_power_state().
10746 * GPIO1 driven high will bring 5700's external PHY out of reset.
10747 * It is also used as eeprom write protect on LOMs.
10749 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
10750 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) ||
10751 (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
10752 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
10753 GRC_LCLCTRL_GPIO_OUTPUT1);
10754 /* Unused GPIO3 must be driven as output on 5752 because there
10755 * are no pull-up resistors on unused GPIO pins.
10757 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
10758 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
10760 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
10761 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
10763 /* Force the chip into D0. */
10764 err = tg3_set_power_state(tp, PCI_D0);
10765 if (err) {
10766 printk(KERN_ERR PFX "(%s) transition to D0 failed\n",
10767 pci_name(tp->pdev));
10768 return err;
10771 /* 5700 B0 chips do not support checksumming correctly due
10772 * to hardware bugs.
10774 if (tp->pci_chip_rev_id == CHIPREV_ID_5700_B0)
10775 tp->tg3_flags |= TG3_FLAG_BROKEN_CHECKSUMS;
10777 /* Derive initial jumbo mode from MTU assigned in
10778 * ether_setup() via the alloc_etherdev() call
10780 if (tp->dev->mtu > ETH_DATA_LEN &&
10781 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
10782 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
10784 /* Determine WakeOnLan speed to use. */
10785 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10786 tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
10787 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 ||
10788 tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) {
10789 tp->tg3_flags &= ~(TG3_FLAG_WOL_SPEED_100MB);
10790 } else {
10791 tp->tg3_flags |= TG3_FLAG_WOL_SPEED_100MB;
10794 /* A few boards don't want Ethernet@WireSpeed phy feature */
10795 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) ||
10796 ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
10797 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
10798 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
10799 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) ||
10800 (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES))
10801 tp->tg3_flags2 |= TG3_FLG2_NO_ETH_WIRE_SPEED;
10803 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX ||
10804 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX)
10805 tp->tg3_flags2 |= TG3_FLG2_PHY_ADC_BUG;
10806 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
10807 tp->tg3_flags2 |= TG3_FLG2_PHY_5704_A0_BUG;
10809 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
10810 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
10811 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) {
10812 tp->tg3_flags2 |= TG3_FLG2_PHY_JITTER_BUG;
10813 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
10814 tp->tg3_flags2 |= TG3_FLG2_PHY_ADJUST_TRIM;
10815 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)
10816 tp->tg3_flags2 |= TG3_FLG2_PHY_BER_BUG;
10819 tp->coalesce_mode = 0;
10820 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX &&
10821 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX)
10822 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
10824 /* Initialize MAC MI mode, polling disabled. */
10825 tw32_f(MAC_MI_MODE, tp->mi_mode);
10826 udelay(80);
10828 /* Initialize data/descriptor byte/word swapping. */
10829 val = tr32(GRC_MODE);
10830 val &= GRC_MODE_HOST_STACKUP;
10831 tw32(GRC_MODE, val | tp->grc_mode);
10833 tg3_switch_clocks(tp);
10835 /* Clear this out for sanity. */
10836 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
10838 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
10839 &pci_state_reg);
10840 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
10841 (tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) == 0) {
10842 u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
10844 if (chiprevid == CHIPREV_ID_5701_A0 ||
10845 chiprevid == CHIPREV_ID_5701_B0 ||
10846 chiprevid == CHIPREV_ID_5701_B2 ||
10847 chiprevid == CHIPREV_ID_5701_B5) {
10848 void __iomem *sram_base;
10850 /* Write some dummy words into the SRAM status block
10851 * area, see if it reads back correctly. If the return
10852 * value is bad, force enable the PCIX workaround.
10854 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
10856 writel(0x00000000, sram_base);
10857 writel(0x00000000, sram_base + 4);
10858 writel(0xffffffff, sram_base + 4);
10859 if (readl(sram_base) != 0x00000000)
10860 tp->tg3_flags |= TG3_FLAG_PCIX_TARGET_HWBUG;
10864 udelay(50);
10865 tg3_nvram_init(tp);
10867 grc_misc_cfg = tr32(GRC_MISC_CFG);
10868 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
10870 /* Broadcom's driver says that CIOBE multisplit has a bug */
10871 #if 0
10872 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
10873 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5704CIOBE) {
10874 tp->tg3_flags |= TG3_FLAG_SPLIT_MODE;
10875 tp->split_mode_max_reqs = SPLIT_MODE_5704_MAX_REQ;
10877 #endif
10878 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
10879 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
10880 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
10881 tp->tg3_flags2 |= TG3_FLG2_IS_5788;
10883 if (!(tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
10884 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700))
10885 tp->tg3_flags |= TG3_FLAG_TAGGED_STATUS;
10886 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) {
10887 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
10888 HOSTCC_MODE_CLRTICK_TXBD);
10890 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
10891 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
10892 tp->misc_host_ctrl);
10895 /* these are limited to 10/100 only */
10896 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
10897 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
10898 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
10899 tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
10900 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
10901 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
10902 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
10903 (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
10904 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
10905 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F ||
10906 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) ||
10907 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
10908 tp->tg3_flags |= TG3_FLAG_10_100_ONLY;
10910 err = tg3_phy_probe(tp);
10911 if (err) {
10912 printk(KERN_ERR PFX "(%s) phy probe failed, err %d\n",
10913 pci_name(tp->pdev), err);
10914 /* ... but do not return immediately ... */
10917 tg3_read_partno(tp);
10918 tg3_read_fw_ver(tp);
10920 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
10921 tp->tg3_flags &= ~TG3_FLAG_USE_MI_INTERRUPT;
10922 } else {
10923 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
10924 tp->tg3_flags |= TG3_FLAG_USE_MI_INTERRUPT;
10925 else
10926 tp->tg3_flags &= ~TG3_FLAG_USE_MI_INTERRUPT;
10929 /* 5700 {AX,BX} chips have a broken status block link
10930 * change bit implementation, so we must use the
10931 * status register in those cases.
10933 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
10934 tp->tg3_flags |= TG3_FLAG_USE_LINKCHG_REG;
10935 else
10936 tp->tg3_flags &= ~TG3_FLAG_USE_LINKCHG_REG;
10938 /* The led_ctrl is set during tg3_phy_probe, here we might
10939 * have to force the link status polling mechanism based
10940 * upon subsystem IDs.
10942 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
10943 !(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
10944 tp->tg3_flags |= (TG3_FLAG_USE_MI_INTERRUPT |
10945 TG3_FLAG_USE_LINKCHG_REG);
10948 /* For all SERDES we poll the MAC status register. */
10949 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
10950 tp->tg3_flags |= TG3_FLAG_POLL_SERDES;
10951 else
10952 tp->tg3_flags &= ~TG3_FLAG_POLL_SERDES;
10954 /* All chips before 5787 can get confused if TX buffers
10955 * straddle the 4GB address boundary in some cases.
10957 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
10958 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
10959 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
10960 tp->dev->hard_start_xmit = tg3_start_xmit;
10961 else
10962 tp->dev->hard_start_xmit = tg3_start_xmit_dma_bug;
10964 tp->rx_offset = 2;
10965 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
10966 (tp->tg3_flags & TG3_FLAG_PCIX_MODE) != 0)
10967 tp->rx_offset = 0;
10969 tp->rx_std_max_post = TG3_RX_RING_SIZE;
10971 /* Increment the rx prod index on the rx std ring by at most
10972 * 8 for these chips to workaround hw errata.
10974 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
10975 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
10976 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
10977 tp->rx_std_max_post = 8;
10979 /* By default, disable wake-on-lan. User can change this
10980 * using ETHTOOL_SWOL.
10982 tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE;
10984 return err;
10987 #ifdef CONFIG_SPARC64
10988 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
10990 struct net_device *dev = tp->dev;
10991 struct pci_dev *pdev = tp->pdev;
10992 struct pcidev_cookie *pcp = pdev->sysdata;
10994 if (pcp != NULL) {
10995 unsigned char *addr;
10996 int len;
10998 addr = of_get_property(pcp->prom_node, "local-mac-address",
10999 &len);
11000 if (addr && len == 6) {
11001 memcpy(dev->dev_addr, addr, 6);
11002 memcpy(dev->perm_addr, dev->dev_addr, 6);
11003 return 0;
11006 return -ENODEV;
11009 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
11011 struct net_device *dev = tp->dev;
11013 memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
11014 memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
11015 return 0;
11017 #endif
11019 static int __devinit tg3_get_device_address(struct tg3 *tp)
11021 struct net_device *dev = tp->dev;
11022 u32 hi, lo, mac_offset;
11023 int addr_ok = 0;
11025 #ifdef CONFIG_SPARC64
11026 if (!tg3_get_macaddr_sparc(tp))
11027 return 0;
11028 #endif
11030 mac_offset = 0x7c;
11031 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
11032 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
11033 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
11034 mac_offset = 0xcc;
11035 if (tg3_nvram_lock(tp))
11036 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
11037 else
11038 tg3_nvram_unlock(tp);
11040 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11041 mac_offset = 0x10;
11043 /* First try to get it from MAC address mailbox. */
11044 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
11045 if ((hi >> 16) == 0x484b) {
11046 dev->dev_addr[0] = (hi >> 8) & 0xff;
11047 dev->dev_addr[1] = (hi >> 0) & 0xff;
11049 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
11050 dev->dev_addr[2] = (lo >> 24) & 0xff;
11051 dev->dev_addr[3] = (lo >> 16) & 0xff;
11052 dev->dev_addr[4] = (lo >> 8) & 0xff;
11053 dev->dev_addr[5] = (lo >> 0) & 0xff;
11055 /* Some old bootcode may report a 0 MAC address in SRAM */
11056 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
11058 if (!addr_ok) {
11059 /* Next, try NVRAM. */
11060 if (!tg3_nvram_read(tp, mac_offset + 0, &hi) &&
11061 !tg3_nvram_read(tp, mac_offset + 4, &lo)) {
11062 dev->dev_addr[0] = ((hi >> 16) & 0xff);
11063 dev->dev_addr[1] = ((hi >> 24) & 0xff);
11064 dev->dev_addr[2] = ((lo >> 0) & 0xff);
11065 dev->dev_addr[3] = ((lo >> 8) & 0xff);
11066 dev->dev_addr[4] = ((lo >> 16) & 0xff);
11067 dev->dev_addr[5] = ((lo >> 24) & 0xff);
11069 /* Finally just fetch it out of the MAC control regs. */
11070 else {
11071 hi = tr32(MAC_ADDR_0_HIGH);
11072 lo = tr32(MAC_ADDR_0_LOW);
11074 dev->dev_addr[5] = lo & 0xff;
11075 dev->dev_addr[4] = (lo >> 8) & 0xff;
11076 dev->dev_addr[3] = (lo >> 16) & 0xff;
11077 dev->dev_addr[2] = (lo >> 24) & 0xff;
11078 dev->dev_addr[1] = hi & 0xff;
11079 dev->dev_addr[0] = (hi >> 8) & 0xff;
11083 if (!is_valid_ether_addr(&dev->dev_addr[0])) {
11084 #ifdef CONFIG_SPARC64
11085 if (!tg3_get_default_macaddr_sparc(tp))
11086 return 0;
11087 #endif
11088 return -EINVAL;
11090 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
11091 return 0;
11094 #define BOUNDARY_SINGLE_CACHELINE 1
11095 #define BOUNDARY_MULTI_CACHELINE 2
11097 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
11099 int cacheline_size;
11100 u8 byte;
11101 int goal;
11103 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
11104 if (byte == 0)
11105 cacheline_size = 1024;
11106 else
11107 cacheline_size = (int) byte * 4;
11109 /* On 5703 and later chips, the boundary bits have no
11110 * effect.
11112 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
11113 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
11114 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
11115 goto out;
11117 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
11118 goal = BOUNDARY_MULTI_CACHELINE;
11119 #else
11120 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
11121 goal = BOUNDARY_SINGLE_CACHELINE;
11122 #else
11123 goal = 0;
11124 #endif
11125 #endif
11127 if (!goal)
11128 goto out;
11130 /* PCI controllers on most RISC systems tend to disconnect
11131 * when a device tries to burst across a cache-line boundary.
11132 * Therefore, letting tg3 do so just wastes PCI bandwidth.
11134 * Unfortunately, for PCI-E there are only limited
11135 * write-side controls for this, and thus for reads
11136 * we will still get the disconnects. We'll also waste
11137 * these PCI cycles for both read and write for chips
11138 * other than 5700 and 5701 which do not implement the
11139 * boundary bits.
11141 if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) &&
11142 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) {
11143 switch (cacheline_size) {
11144 case 16:
11145 case 32:
11146 case 64:
11147 case 128:
11148 if (goal == BOUNDARY_SINGLE_CACHELINE) {
11149 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
11150 DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
11151 } else {
11152 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
11153 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
11155 break;
11157 case 256:
11158 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
11159 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
11160 break;
11162 default:
11163 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
11164 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
11165 break;
11167 } else if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
11168 switch (cacheline_size) {
11169 case 16:
11170 case 32:
11171 case 64:
11172 if (goal == BOUNDARY_SINGLE_CACHELINE) {
11173 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
11174 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
11175 break;
11177 /* fallthrough */
11178 case 128:
11179 default:
11180 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
11181 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
11182 break;
11184 } else {
11185 switch (cacheline_size) {
11186 case 16:
11187 if (goal == BOUNDARY_SINGLE_CACHELINE) {
11188 val |= (DMA_RWCTRL_READ_BNDRY_16 |
11189 DMA_RWCTRL_WRITE_BNDRY_16);
11190 break;
11192 /* fallthrough */
11193 case 32:
11194 if (goal == BOUNDARY_SINGLE_CACHELINE) {
11195 val |= (DMA_RWCTRL_READ_BNDRY_32 |
11196 DMA_RWCTRL_WRITE_BNDRY_32);
11197 break;
11199 /* fallthrough */
11200 case 64:
11201 if (goal == BOUNDARY_SINGLE_CACHELINE) {
11202 val |= (DMA_RWCTRL_READ_BNDRY_64 |
11203 DMA_RWCTRL_WRITE_BNDRY_64);
11204 break;
11206 /* fallthrough */
11207 case 128:
11208 if (goal == BOUNDARY_SINGLE_CACHELINE) {
11209 val |= (DMA_RWCTRL_READ_BNDRY_128 |
11210 DMA_RWCTRL_WRITE_BNDRY_128);
11211 break;
11213 /* fallthrough */
11214 case 256:
11215 val |= (DMA_RWCTRL_READ_BNDRY_256 |
11216 DMA_RWCTRL_WRITE_BNDRY_256);
11217 break;
11218 case 512:
11219 val |= (DMA_RWCTRL_READ_BNDRY_512 |
11220 DMA_RWCTRL_WRITE_BNDRY_512);
11221 break;
11222 case 1024:
11223 default:
11224 val |= (DMA_RWCTRL_READ_BNDRY_1024 |
11225 DMA_RWCTRL_WRITE_BNDRY_1024);
11226 break;
11230 out:
11231 return val;
11234 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
11236 struct tg3_internal_buffer_desc test_desc;
11237 u32 sram_dma_descs;
11238 int i, ret;
11240 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
11242 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
11243 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
11244 tw32(RDMAC_STATUS, 0);
11245 tw32(WDMAC_STATUS, 0);
11247 tw32(BUFMGR_MODE, 0);
11248 tw32(FTQ_RESET, 0);
11250 test_desc.addr_hi = ((u64) buf_dma) >> 32;
11251 test_desc.addr_lo = buf_dma & 0xffffffff;
11252 test_desc.nic_mbuf = 0x00002100;
11253 test_desc.len = size;
11256 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
11257 * the *second* time the tg3 driver was getting loaded after an
11258 * initial scan.
11260 * Broadcom tells me:
11261 * ...the DMA engine is connected to the GRC block and a DMA
11262 * reset may affect the GRC block in some unpredictable way...
11263 * The behavior of resets to individual blocks has not been tested.
11265 * Broadcom noted the GRC reset will also reset all sub-components.
11267 if (to_device) {
11268 test_desc.cqid_sqid = (13 << 8) | 2;
11270 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
11271 udelay(40);
11272 } else {
11273 test_desc.cqid_sqid = (16 << 8) | 7;
11275 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
11276 udelay(40);
11278 test_desc.flags = 0x00000005;
11280 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
11281 u32 val;
11283 val = *(((u32 *)&test_desc) + i);
11284 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
11285 sram_dma_descs + (i * sizeof(u32)));
11286 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
11288 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
11290 if (to_device) {
11291 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
11292 } else {
11293 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
11296 ret = -ENODEV;
11297 for (i = 0; i < 40; i++) {
11298 u32 val;
11300 if (to_device)
11301 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
11302 else
11303 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
11304 if ((val & 0xffff) == sram_dma_descs) {
11305 ret = 0;
11306 break;
11309 udelay(100);
11312 return ret;
11315 #define TEST_BUFFER_SIZE 0x2000
11317 static int __devinit tg3_test_dma(struct tg3 *tp)
11319 dma_addr_t buf_dma;
11320 u32 *buf, saved_dma_rwctrl;
11321 int ret;
11323 buf = pci_alloc_consistent(tp->pdev, TEST_BUFFER_SIZE, &buf_dma);
11324 if (!buf) {
11325 ret = -ENOMEM;
11326 goto out_nofree;
11329 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
11330 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
11332 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
11334 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
11335 /* DMA read watermark not used on PCIE */
11336 tp->dma_rwctrl |= 0x00180000;
11337 } else if (!(tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
11338 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
11339 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
11340 tp->dma_rwctrl |= 0x003f0000;
11341 else
11342 tp->dma_rwctrl |= 0x003f000f;
11343 } else {
11344 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
11345 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
11346 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
11348 /* If the 5704 is behind the EPB bridge, we can
11349 * do the less restrictive ONE_DMA workaround for
11350 * better performance.
11352 if ((tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) &&
11353 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
11354 tp->dma_rwctrl |= 0x8000;
11355 else if (ccval == 0x6 || ccval == 0x7)
11356 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
11358 /* Set bit 23 to enable PCIX hw bug fix */
11359 tp->dma_rwctrl |= 0x009f0000;
11360 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
11361 /* 5780 always in PCIX mode */
11362 tp->dma_rwctrl |= 0x00144000;
11363 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
11364 /* 5714 always in PCIX mode */
11365 tp->dma_rwctrl |= 0x00148000;
11366 } else {
11367 tp->dma_rwctrl |= 0x001b000f;
11371 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
11372 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
11373 tp->dma_rwctrl &= 0xfffffff0;
11375 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
11376 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
11377 /* Remove this if it causes problems for some boards. */
11378 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
11380 /* On 5700/5701 chips, we need to set this bit.
11381 * Otherwise the chip will issue cacheline transactions
11382 * to streamable DMA memory with not all the byte
11383 * enables turned on. This is an error on several
11384 * RISC PCI controllers, in particular sparc64.
11386 * On 5703/5704 chips, this bit has been reassigned
11387 * a different meaning. In particular, it is used
11388 * on those chips to enable a PCI-X workaround.
11390 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
11393 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
11395 #if 0
11396 /* Unneeded, already done by tg3_get_invariants. */
11397 tg3_switch_clocks(tp);
11398 #endif
11400 ret = 0;
11401 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
11402 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
11403 goto out;
11405 /* It is best to perform DMA test with maximum write burst size
11406 * to expose the 5700/5701 write DMA bug.
11408 saved_dma_rwctrl = tp->dma_rwctrl;
11409 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
11410 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
11412 while (1) {
11413 u32 *p = buf, i;
11415 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
11416 p[i] = i;
11418 /* Send the buffer to the chip. */
11419 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
11420 if (ret) {
11421 printk(KERN_ERR "tg3_test_dma() Write the buffer failed %d\n", ret);
11422 break;
11425 #if 0
11426 /* validate data reached card RAM correctly. */
11427 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
11428 u32 val;
11429 tg3_read_mem(tp, 0x2100 + (i*4), &val);
11430 if (le32_to_cpu(val) != p[i]) {
11431 printk(KERN_ERR " tg3_test_dma() Card buffer corrupted on write! (%d != %d)\n", val, i);
11432 /* ret = -ENODEV here? */
11434 p[i] = 0;
11436 #endif
11437 /* Now read it back. */
11438 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
11439 if (ret) {
11440 printk(KERN_ERR "tg3_test_dma() Read the buffer failed %d\n", ret);
11442 break;
11445 /* Verify it. */
11446 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
11447 if (p[i] == i)
11448 continue;
11450 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
11451 DMA_RWCTRL_WRITE_BNDRY_16) {
11452 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
11453 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
11454 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
11455 break;
11456 } else {
11457 printk(KERN_ERR "tg3_test_dma() buffer corrupted on read back! (%d != %d)\n", p[i], i);
11458 ret = -ENODEV;
11459 goto out;
11463 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
11464 /* Success. */
11465 ret = 0;
11466 break;
11469 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
11470 DMA_RWCTRL_WRITE_BNDRY_16) {
11471 static struct pci_device_id dma_wait_state_chipsets[] = {
11472 { PCI_DEVICE(PCI_VENDOR_ID_APPLE,
11473 PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
11474 { },
11477 /* DMA test passed without adjusting DMA boundary,
11478 * now look for chipsets that are known to expose the
11479 * DMA bug without failing the test.
11481 if (pci_dev_present(dma_wait_state_chipsets)) {
11482 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
11483 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
11485 else
11486 /* Safe to use the calculated DMA boundary. */
11487 tp->dma_rwctrl = saved_dma_rwctrl;
11489 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
11492 out:
11493 pci_free_consistent(tp->pdev, TEST_BUFFER_SIZE, buf, buf_dma);
11494 out_nofree:
11495 return ret;
11498 static void __devinit tg3_init_link_config(struct tg3 *tp)
11500 tp->link_config.advertising =
11501 (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
11502 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
11503 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full |
11504 ADVERTISED_Autoneg | ADVERTISED_MII);
11505 tp->link_config.speed = SPEED_INVALID;
11506 tp->link_config.duplex = DUPLEX_INVALID;
11507 tp->link_config.autoneg = AUTONEG_ENABLE;
11508 tp->link_config.active_speed = SPEED_INVALID;
11509 tp->link_config.active_duplex = DUPLEX_INVALID;
11510 tp->link_config.phy_is_low_power = 0;
11511 tp->link_config.orig_speed = SPEED_INVALID;
11512 tp->link_config.orig_duplex = DUPLEX_INVALID;
11513 tp->link_config.orig_autoneg = AUTONEG_INVALID;
11516 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
11518 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
11519 tp->bufmgr_config.mbuf_read_dma_low_water =
11520 DEFAULT_MB_RDMA_LOW_WATER_5705;
11521 tp->bufmgr_config.mbuf_mac_rx_low_water =
11522 DEFAULT_MB_MACRX_LOW_WATER_5705;
11523 tp->bufmgr_config.mbuf_high_water =
11524 DEFAULT_MB_HIGH_WATER_5705;
11525 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
11526 tp->bufmgr_config.mbuf_mac_rx_low_water =
11527 DEFAULT_MB_MACRX_LOW_WATER_5906;
11528 tp->bufmgr_config.mbuf_high_water =
11529 DEFAULT_MB_HIGH_WATER_5906;
11532 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
11533 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
11534 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
11535 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
11536 tp->bufmgr_config.mbuf_high_water_jumbo =
11537 DEFAULT_MB_HIGH_WATER_JUMBO_5780;
11538 } else {
11539 tp->bufmgr_config.mbuf_read_dma_low_water =
11540 DEFAULT_MB_RDMA_LOW_WATER;
11541 tp->bufmgr_config.mbuf_mac_rx_low_water =
11542 DEFAULT_MB_MACRX_LOW_WATER;
11543 tp->bufmgr_config.mbuf_high_water =
11544 DEFAULT_MB_HIGH_WATER;
11546 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
11547 DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
11548 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
11549 DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
11550 tp->bufmgr_config.mbuf_high_water_jumbo =
11551 DEFAULT_MB_HIGH_WATER_JUMBO;
11554 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
11555 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
11558 static char * __devinit tg3_phy_string(struct tg3 *tp)
11560 switch (tp->phy_id & PHY_ID_MASK) {
11561 case PHY_ID_BCM5400: return "5400";
11562 case PHY_ID_BCM5401: return "5401";
11563 case PHY_ID_BCM5411: return "5411";
11564 case PHY_ID_BCM5701: return "5701";
11565 case PHY_ID_BCM5703: return "5703";
11566 case PHY_ID_BCM5704: return "5704";
11567 case PHY_ID_BCM5705: return "5705";
11568 case PHY_ID_BCM5750: return "5750";
11569 case PHY_ID_BCM5752: return "5752";
11570 case PHY_ID_BCM5714: return "5714";
11571 case PHY_ID_BCM5780: return "5780";
11572 case PHY_ID_BCM5755: return "5755";
11573 case PHY_ID_BCM5787: return "5787";
11574 case PHY_ID_BCM5756: return "5722/5756";
11575 case PHY_ID_BCM5906: return "5906";
11576 case PHY_ID_BCM8002: return "8002/serdes";
11577 case 0: return "serdes";
11578 default: return "unknown";
11582 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
11584 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
11585 strcpy(str, "PCI Express");
11586 return str;
11587 } else if (tp->tg3_flags & TG3_FLAG_PCIX_MODE) {
11588 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
11590 strcpy(str, "PCIX:");
11592 if ((clock_ctrl == 7) ||
11593 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
11594 GRC_MISC_CFG_BOARD_ID_5704CIOBE))
11595 strcat(str, "133MHz");
11596 else if (clock_ctrl == 0)
11597 strcat(str, "33MHz");
11598 else if (clock_ctrl == 2)
11599 strcat(str, "50MHz");
11600 else if (clock_ctrl == 4)
11601 strcat(str, "66MHz");
11602 else if (clock_ctrl == 6)
11603 strcat(str, "100MHz");
11604 } else {
11605 strcpy(str, "PCI:");
11606 if (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED)
11607 strcat(str, "66MHz");
11608 else
11609 strcat(str, "33MHz");
11611 if (tp->tg3_flags & TG3_FLAG_PCI_32BIT)
11612 strcat(str, ":32-bit");
11613 else
11614 strcat(str, ":64-bit");
11615 return str;
11618 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
11620 struct pci_dev *peer;
11621 unsigned int func, devnr = tp->pdev->devfn & ~7;
11623 for (func = 0; func < 8; func++) {
11624 peer = pci_get_slot(tp->pdev->bus, devnr | func);
11625 if (peer && peer != tp->pdev)
11626 break;
11627 pci_dev_put(peer);
11629 /* 5704 can be configured in single-port mode, set peer to
11630 * tp->pdev in that case.
11632 if (!peer) {
11633 peer = tp->pdev;
11634 return peer;
11638 * We don't need to keep the refcount elevated; there's no way
11639 * to remove one half of this device without removing the other
11641 pci_dev_put(peer);
11643 return peer;
11646 static void __devinit tg3_init_coal(struct tg3 *tp)
11648 struct ethtool_coalesce *ec = &tp->coal;
11650 memset(ec, 0, sizeof(*ec));
11651 ec->cmd = ETHTOOL_GCOALESCE;
11652 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
11653 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
11654 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
11655 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
11656 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
11657 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
11658 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
11659 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
11660 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
11662 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
11663 HOSTCC_MODE_CLRTICK_TXBD)) {
11664 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
11665 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
11666 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
11667 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
11670 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
11671 ec->rx_coalesce_usecs_irq = 0;
11672 ec->tx_coalesce_usecs_irq = 0;
11673 ec->stats_block_coalesce_usecs = 0;
11677 static int __devinit tg3_init_one(struct pci_dev *pdev,
11678 const struct pci_device_id *ent)
11680 static int tg3_version_printed = 0;
11681 unsigned long tg3reg_base, tg3reg_len;
11682 struct net_device *dev;
11683 struct tg3 *tp;
11684 int i, err, pm_cap;
11685 char str[40];
11686 u64 dma_mask, persist_dma_mask;
11688 if (tg3_version_printed++ == 0)
11689 printk(KERN_INFO "%s", version);
11691 err = pci_enable_device(pdev);
11692 if (err) {
11693 printk(KERN_ERR PFX "Cannot enable PCI device, "
11694 "aborting.\n");
11695 return err;
11698 if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
11699 printk(KERN_ERR PFX "Cannot find proper PCI device "
11700 "base address, aborting.\n");
11701 err = -ENODEV;
11702 goto err_out_disable_pdev;
11705 err = pci_request_regions(pdev, DRV_MODULE_NAME);
11706 if (err) {
11707 printk(KERN_ERR PFX "Cannot obtain PCI resources, "
11708 "aborting.\n");
11709 goto err_out_disable_pdev;
11712 pci_set_master(pdev);
11714 /* Find power-management capability. */
11715 pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
11716 if (pm_cap == 0) {
11717 printk(KERN_ERR PFX "Cannot find PowerManagement capability, "
11718 "aborting.\n");
11719 err = -EIO;
11720 goto err_out_free_res;
11723 tg3reg_base = pci_resource_start(pdev, 0);
11724 tg3reg_len = pci_resource_len(pdev, 0);
11726 dev = alloc_etherdev(sizeof(*tp));
11727 if (!dev) {
11728 printk(KERN_ERR PFX "Etherdev alloc failed, aborting.\n");
11729 err = -ENOMEM;
11730 goto err_out_free_res;
11733 SET_MODULE_OWNER(dev);
11734 SET_NETDEV_DEV(dev, &pdev->dev);
11736 #if TG3_VLAN_TAG_USED
11737 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
11738 dev->vlan_rx_register = tg3_vlan_rx_register;
11739 dev->vlan_rx_kill_vid = tg3_vlan_rx_kill_vid;
11740 #endif
11742 tp = netdev_priv(dev);
11743 tp->pdev = pdev;
11744 tp->dev = dev;
11745 tp->pm_cap = pm_cap;
11746 tp->mac_mode = TG3_DEF_MAC_MODE;
11747 tp->rx_mode = TG3_DEF_RX_MODE;
11748 tp->tx_mode = TG3_DEF_TX_MODE;
11749 tp->mi_mode = MAC_MI_MODE_BASE;
11750 if (tg3_debug > 0)
11751 tp->msg_enable = tg3_debug;
11752 else
11753 tp->msg_enable = TG3_DEF_MSG_ENABLE;
11755 /* The word/byte swap controls here control register access byte
11756 * swapping. DMA data byte swapping is controlled in the GRC_MODE
11757 * setting below.
11759 tp->misc_host_ctrl =
11760 MISC_HOST_CTRL_MASK_PCI_INT |
11761 MISC_HOST_CTRL_WORD_SWAP |
11762 MISC_HOST_CTRL_INDIR_ACCESS |
11763 MISC_HOST_CTRL_PCISTATE_RW;
11765 /* The NONFRM (non-frame) byte/word swap controls take effect
11766 * on descriptor entries, anything which isn't packet data.
11768 * The StrongARM chips on the board (one for tx, one for rx)
11769 * are running in big-endian mode.
11771 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
11772 GRC_MODE_WSWAP_NONFRM_DATA);
11773 #ifdef __BIG_ENDIAN
11774 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
11775 #endif
11776 spin_lock_init(&tp->lock);
11777 spin_lock_init(&tp->indirect_lock);
11778 INIT_WORK(&tp->reset_task, tg3_reset_task);
11780 tp->regs = ioremap_nocache(tg3reg_base, tg3reg_len);
11781 if (tp->regs == 0UL) {
11782 printk(KERN_ERR PFX "Cannot map device registers, "
11783 "aborting.\n");
11784 err = -ENOMEM;
11785 goto err_out_free_dev;
11788 tg3_init_link_config(tp);
11790 tp->rx_pending = TG3_DEF_RX_RING_PENDING;
11791 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
11792 tp->tx_pending = TG3_DEF_TX_RING_PENDING;
11794 dev->open = tg3_open;
11795 dev->stop = tg3_close;
11796 dev->get_stats = tg3_get_stats;
11797 dev->set_multicast_list = tg3_set_rx_mode;
11798 dev->set_mac_address = tg3_set_mac_addr;
11799 dev->do_ioctl = tg3_ioctl;
11800 dev->tx_timeout = tg3_tx_timeout;
11801 dev->poll = tg3_poll;
11802 dev->ethtool_ops = &tg3_ethtool_ops;
11803 dev->weight = 64;
11804 dev->watchdog_timeo = TG3_TX_TIMEOUT;
11805 dev->change_mtu = tg3_change_mtu;
11806 dev->irq = pdev->irq;
11807 #ifdef CONFIG_NET_POLL_CONTROLLER
11808 dev->poll_controller = tg3_poll_controller;
11809 #endif
11811 err = tg3_get_invariants(tp);
11812 if (err) {
11813 printk(KERN_ERR PFX "Problem fetching invariants of chip, "
11814 "aborting.\n");
11815 goto err_out_iounmap;
11818 /* The EPB bridge inside 5714, 5715, and 5780 and any
11819 * device behind the EPB cannot support DMA addresses > 40-bit.
11820 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
11821 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
11822 * do DMA address check in tg3_start_xmit().
11824 if (tp->tg3_flags2 & TG3_FLG2_IS_5788)
11825 persist_dma_mask = dma_mask = DMA_32BIT_MASK;
11826 else if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) {
11827 persist_dma_mask = dma_mask = DMA_40BIT_MASK;
11828 #ifdef CONFIG_HIGHMEM
11829 dma_mask = DMA_64BIT_MASK;
11830 #endif
11831 } else
11832 persist_dma_mask = dma_mask = DMA_64BIT_MASK;
11834 /* Configure DMA attributes. */
11835 if (dma_mask > DMA_32BIT_MASK) {
11836 err = pci_set_dma_mask(pdev, dma_mask);
11837 if (!err) {
11838 dev->features |= NETIF_F_HIGHDMA;
11839 err = pci_set_consistent_dma_mask(pdev,
11840 persist_dma_mask);
11841 if (err < 0) {
11842 printk(KERN_ERR PFX "Unable to obtain 64 bit "
11843 "DMA for consistent allocations\n");
11844 goto err_out_iounmap;
11848 if (err || dma_mask == DMA_32BIT_MASK) {
11849 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
11850 if (err) {
11851 printk(KERN_ERR PFX "No usable DMA configuration, "
11852 "aborting.\n");
11853 goto err_out_iounmap;
11857 tg3_init_bufmgr_config(tp);
11859 #if TG3_TSO_SUPPORT != 0
11860 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
11861 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
11863 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
11864 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
11865 tp->pci_chip_rev_id == CHIPREV_ID_5705_A0 ||
11866 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
11867 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
11868 tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE;
11869 } else {
11870 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
11873 /* TSO is on by default on chips that support hardware TSO.
11874 * Firmware TSO on older chips gives lower performance, so it
11875 * is off by default, but can be enabled using ethtool.
11877 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
11878 dev->features |= NETIF_F_TSO;
11879 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) &&
11880 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906))
11881 dev->features |= NETIF_F_TSO6;
11884 #endif
11886 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
11887 !(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) &&
11888 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
11889 tp->tg3_flags2 |= TG3_FLG2_MAX_RXPEND_64;
11890 tp->rx_pending = 63;
11893 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
11894 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714))
11895 tp->pdev_peer = tg3_find_peer(tp);
11897 err = tg3_get_device_address(tp);
11898 if (err) {
11899 printk(KERN_ERR PFX "Could not obtain valid ethernet address, "
11900 "aborting.\n");
11901 goto err_out_iounmap;
11905 * Reset chip in case UNDI or EFI driver did not shutdown
11906 * DMA self test will enable WDMAC and we'll see (spurious)
11907 * pending DMA on the PCI bus at that point.
11909 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
11910 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
11911 pci_save_state(tp->pdev);
11912 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
11913 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11916 err = tg3_test_dma(tp);
11917 if (err) {
11918 printk(KERN_ERR PFX "DMA engine test failed, aborting.\n");
11919 goto err_out_iounmap;
11922 /* Tigon3 can do ipv4 only... and some chips have buggy
11923 * checksumming.
11925 if ((tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) == 0) {
11926 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
11927 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787)
11928 dev->features |= NETIF_F_HW_CSUM;
11929 else
11930 dev->features |= NETIF_F_IP_CSUM;
11931 dev->features |= NETIF_F_SG;
11932 tp->tg3_flags |= TG3_FLAG_RX_CHECKSUMS;
11933 } else
11934 tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
11936 /* flow control autonegotiation is default behavior */
11937 tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
11939 tg3_init_coal(tp);
11941 /* Now that we have fully setup the chip, save away a snapshot
11942 * of the PCI config space. We need to restore this after
11943 * GRC_MISC_CFG core clock resets and some resume events.
11945 pci_save_state(tp->pdev);
11947 pci_set_drvdata(pdev, dev);
11949 err = register_netdev(dev);
11950 if (err) {
11951 printk(KERN_ERR PFX "Cannot register net device, "
11952 "aborting.\n");
11953 goto err_out_iounmap;
11956 printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] (%s) %s Ethernet ",
11957 dev->name,
11958 tp->board_part_number,
11959 tp->pci_chip_rev_id,
11960 tg3_phy_string(tp),
11961 tg3_bus_string(tp, str),
11962 ((tp->tg3_flags & TG3_FLAG_10_100_ONLY) ? "10/100Base-TX" :
11963 ((tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) ? "1000Base-SX" :
11964 "10/100/1000Base-T")));
11966 for (i = 0; i < 6; i++)
11967 printk("%2.2x%c", dev->dev_addr[i],
11968 i == 5 ? '\n' : ':');
11970 printk(KERN_INFO "%s: RXcsums[%d] LinkChgREG[%d] "
11971 "MIirq[%d] ASF[%d] Split[%d] WireSpeed[%d] "
11972 "TSOcap[%d] \n",
11973 dev->name,
11974 (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0,
11975 (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) != 0,
11976 (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) != 0,
11977 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0,
11978 (tp->tg3_flags & TG3_FLAG_SPLIT_MODE) != 0,
11979 (tp->tg3_flags2 & TG3_FLG2_NO_ETH_WIRE_SPEED) == 0,
11980 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) != 0);
11981 printk(KERN_INFO "%s: dma_rwctrl[%08x] dma_mask[%d-bit]\n",
11982 dev->name, tp->dma_rwctrl,
11983 (pdev->dma_mask == DMA_32BIT_MASK) ? 32 :
11984 (((u64) pdev->dma_mask == DMA_40BIT_MASK) ? 40 : 64));
11986 return 0;
11988 err_out_iounmap:
11989 if (tp->regs) {
11990 iounmap(tp->regs);
11991 tp->regs = NULL;
11994 err_out_free_dev:
11995 free_netdev(dev);
11997 err_out_free_res:
11998 pci_release_regions(pdev);
12000 err_out_disable_pdev:
12001 pci_disable_device(pdev);
12002 pci_set_drvdata(pdev, NULL);
12003 return err;
12006 static void __devexit tg3_remove_one(struct pci_dev *pdev)
12008 struct net_device *dev = pci_get_drvdata(pdev);
12010 if (dev) {
12011 struct tg3 *tp = netdev_priv(dev);
12013 flush_scheduled_work();
12014 unregister_netdev(dev);
12015 if (tp->regs) {
12016 iounmap(tp->regs);
12017 tp->regs = NULL;
12019 free_netdev(dev);
12020 pci_release_regions(pdev);
12021 pci_disable_device(pdev);
12022 pci_set_drvdata(pdev, NULL);
12026 static int tg3_suspend(struct pci_dev *pdev, pm_message_t state)
12028 struct net_device *dev = pci_get_drvdata(pdev);
12029 struct tg3 *tp = netdev_priv(dev);
12030 int err;
12032 if (!netif_running(dev))
12033 return 0;
12035 flush_scheduled_work();
12036 tg3_netif_stop(tp);
12038 del_timer_sync(&tp->timer);
12040 tg3_full_lock(tp, 1);
12041 tg3_disable_ints(tp);
12042 tg3_full_unlock(tp);
12044 netif_device_detach(dev);
12046 tg3_full_lock(tp, 0);
12047 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12048 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
12049 tg3_full_unlock(tp);
12051 err = tg3_set_power_state(tp, pci_choose_state(pdev, state));
12052 if (err) {
12053 tg3_full_lock(tp, 0);
12055 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
12056 if (tg3_restart_hw(tp, 1))
12057 goto out;
12059 tp->timer.expires = jiffies + tp->timer_offset;
12060 add_timer(&tp->timer);
12062 netif_device_attach(dev);
12063 tg3_netif_start(tp);
12065 out:
12066 tg3_full_unlock(tp);
12069 return err;
12072 static int tg3_resume(struct pci_dev *pdev)
12074 struct net_device *dev = pci_get_drvdata(pdev);
12075 struct tg3 *tp = netdev_priv(dev);
12076 int err;
12078 if (!netif_running(dev))
12079 return 0;
12081 pci_restore_state(tp->pdev);
12083 err = tg3_set_power_state(tp, PCI_D0);
12084 if (err)
12085 return err;
12087 netif_device_attach(dev);
12089 tg3_full_lock(tp, 0);
12091 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
12092 err = tg3_restart_hw(tp, 1);
12093 if (err)
12094 goto out;
12096 tp->timer.expires = jiffies + tp->timer_offset;
12097 add_timer(&tp->timer);
12099 tg3_netif_start(tp);
12101 out:
12102 tg3_full_unlock(tp);
12104 return err;
12107 static struct pci_driver tg3_driver = {
12108 .name = DRV_MODULE_NAME,
12109 .id_table = tg3_pci_tbl,
12110 .probe = tg3_init_one,
12111 .remove = __devexit_p(tg3_remove_one),
12112 .suspend = tg3_suspend,
12113 .resume = tg3_resume
12116 static int __init tg3_init(void)
12118 return pci_register_driver(&tg3_driver);
12121 static void __exit tg3_cleanup(void)
12123 pci_unregister_driver(&tg3_driver);
12126 module_init(tg3_init);
12127 module_exit(tg3_cleanup);