x86: be more explicit in __put_user_x.
[linux-2.6/linux-loongson.git] / drivers / net / tg3.c
blobcc4bde8525421e614c90a49acd60ef8bed66f30c
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-2007 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>
43 #include <net/ip.h>
45 #include <asm/system.h>
46 #include <asm/io.h>
47 #include <asm/byteorder.h>
48 #include <asm/uaccess.h>
50 #ifdef CONFIG_SPARC
51 #include <asm/idprom.h>
52 #include <asm/prom.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 #define TG3_TSO_SUPPORT 1
63 #include "tg3.h"
65 #define DRV_MODULE_NAME "tg3"
66 #define PFX DRV_MODULE_NAME ": "
67 #define DRV_MODULE_VERSION "3.92.1"
68 #define DRV_MODULE_RELDATE "June 9, 2008"
70 #define TG3_DEF_MAC_MODE 0
71 #define TG3_DEF_RX_MODE 0
72 #define TG3_DEF_TX_MODE 0
73 #define TG3_DEF_MSG_ENABLE \
74 (NETIF_MSG_DRV | \
75 NETIF_MSG_PROBE | \
76 NETIF_MSG_LINK | \
77 NETIF_MSG_TIMER | \
78 NETIF_MSG_IFDOWN | \
79 NETIF_MSG_IFUP | \
80 NETIF_MSG_RX_ERR | \
81 NETIF_MSG_TX_ERR)
83 /* length of time before we decide the hardware is borked,
84 * and dev->tx_timeout() should be called to fix the problem
86 #define TG3_TX_TIMEOUT (5 * HZ)
88 /* hardware minimum and maximum for a single frame's data payload */
89 #define TG3_MIN_MTU 60
90 #define TG3_MAX_MTU(tp) \
91 ((tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) ? 9000 : 1500)
93 /* These numbers seem to be hard coded in the NIC firmware somehow.
94 * You can't change the ring sizes, but you can change where you place
95 * them in the NIC onboard memory.
97 #define TG3_RX_RING_SIZE 512
98 #define TG3_DEF_RX_RING_PENDING 200
99 #define TG3_RX_JUMBO_RING_SIZE 256
100 #define TG3_DEF_RX_JUMBO_RING_PENDING 100
102 /* Do not place this n-ring entries value into the tp struct itself,
103 * we really want to expose these constants to GCC so that modulo et
104 * al. operations are done with shifts and masks instead of with
105 * hw multiply/modulo instructions. Another solution would be to
106 * replace things like '% foo' with '& (foo - 1)'.
108 #define TG3_RX_RCB_RING_SIZE(tp) \
109 ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ? 512 : 1024)
111 #define TG3_TX_RING_SIZE 512
112 #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1)
114 #define TG3_RX_RING_BYTES (sizeof(struct tg3_rx_buffer_desc) * \
115 TG3_RX_RING_SIZE)
116 #define TG3_RX_JUMBO_RING_BYTES (sizeof(struct tg3_rx_buffer_desc) * \
117 TG3_RX_JUMBO_RING_SIZE)
118 #define TG3_RX_RCB_RING_BYTES(tp) (sizeof(struct tg3_rx_buffer_desc) * \
119 TG3_RX_RCB_RING_SIZE(tp))
120 #define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \
121 TG3_TX_RING_SIZE)
122 #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1))
124 #define RX_PKT_BUF_SZ (1536 + tp->rx_offset + 64)
125 #define RX_JUMBO_PKT_BUF_SZ (9046 + tp->rx_offset + 64)
127 /* minimum number of free TX descriptors required to wake up TX process */
128 #define TG3_TX_WAKEUP_THRESH(tp) ((tp)->tx_pending / 4)
130 /* number of ETHTOOL_GSTATS u64's */
131 #define TG3_NUM_STATS (sizeof(struct tg3_ethtool_stats)/sizeof(u64))
133 #define TG3_NUM_TEST 6
135 static char version[] __devinitdata =
136 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
138 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)");
139 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
140 MODULE_LICENSE("GPL");
141 MODULE_VERSION(DRV_MODULE_VERSION);
143 static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */
144 module_param(tg3_debug, int, 0);
145 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
147 static struct pci_device_id tg3_pci_tbl[] = {
148 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
149 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
150 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)},
151 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)},
152 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)},
153 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)},
154 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)},
155 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)},
156 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)},
157 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)},
158 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)},
159 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)},
160 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)},
161 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)},
162 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)},
163 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
164 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
165 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
166 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)},
167 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)},
168 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
169 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)},
170 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5720)},
171 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
172 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
173 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750)},
174 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
175 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5750M)},
176 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
177 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)},
178 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
179 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
180 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
181 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
182 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)},
183 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
184 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
185 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
186 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)},
187 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
188 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
189 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
190 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
191 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)},
192 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
193 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
194 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
195 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)},
196 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)},
197 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)},
198 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)},
199 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)},
200 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)},
201 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)},
202 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)},
203 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)},
204 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)},
205 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)},
206 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)},
207 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)},
208 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)},
209 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)},
210 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)},
211 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)},
212 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)},
216 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
218 static const struct {
219 const char string[ETH_GSTRING_LEN];
220 } ethtool_stats_keys[TG3_NUM_STATS] = {
221 { "rx_octets" },
222 { "rx_fragments" },
223 { "rx_ucast_packets" },
224 { "rx_mcast_packets" },
225 { "rx_bcast_packets" },
226 { "rx_fcs_errors" },
227 { "rx_align_errors" },
228 { "rx_xon_pause_rcvd" },
229 { "rx_xoff_pause_rcvd" },
230 { "rx_mac_ctrl_rcvd" },
231 { "rx_xoff_entered" },
232 { "rx_frame_too_long_errors" },
233 { "rx_jabbers" },
234 { "rx_undersize_packets" },
235 { "rx_in_length_errors" },
236 { "rx_out_length_errors" },
237 { "rx_64_or_less_octet_packets" },
238 { "rx_65_to_127_octet_packets" },
239 { "rx_128_to_255_octet_packets" },
240 { "rx_256_to_511_octet_packets" },
241 { "rx_512_to_1023_octet_packets" },
242 { "rx_1024_to_1522_octet_packets" },
243 { "rx_1523_to_2047_octet_packets" },
244 { "rx_2048_to_4095_octet_packets" },
245 { "rx_4096_to_8191_octet_packets" },
246 { "rx_8192_to_9022_octet_packets" },
248 { "tx_octets" },
249 { "tx_collisions" },
251 { "tx_xon_sent" },
252 { "tx_xoff_sent" },
253 { "tx_flow_control" },
254 { "tx_mac_errors" },
255 { "tx_single_collisions" },
256 { "tx_mult_collisions" },
257 { "tx_deferred" },
258 { "tx_excessive_collisions" },
259 { "tx_late_collisions" },
260 { "tx_collide_2times" },
261 { "tx_collide_3times" },
262 { "tx_collide_4times" },
263 { "tx_collide_5times" },
264 { "tx_collide_6times" },
265 { "tx_collide_7times" },
266 { "tx_collide_8times" },
267 { "tx_collide_9times" },
268 { "tx_collide_10times" },
269 { "tx_collide_11times" },
270 { "tx_collide_12times" },
271 { "tx_collide_13times" },
272 { "tx_collide_14times" },
273 { "tx_collide_15times" },
274 { "tx_ucast_packets" },
275 { "tx_mcast_packets" },
276 { "tx_bcast_packets" },
277 { "tx_carrier_sense_errors" },
278 { "tx_discards" },
279 { "tx_errors" },
281 { "dma_writeq_full" },
282 { "dma_write_prioq_full" },
283 { "rxbds_empty" },
284 { "rx_discards" },
285 { "rx_errors" },
286 { "rx_threshold_hit" },
288 { "dma_readq_full" },
289 { "dma_read_prioq_full" },
290 { "tx_comp_queue_full" },
292 { "ring_set_send_prod_index" },
293 { "ring_status_update" },
294 { "nic_irqs" },
295 { "nic_avoided_irqs" },
296 { "nic_tx_threshold_hit" }
299 static const struct {
300 const char string[ETH_GSTRING_LEN];
301 } ethtool_test_keys[TG3_NUM_TEST] = {
302 { "nvram test (online) " },
303 { "link test (online) " },
304 { "register test (offline)" },
305 { "memory test (offline)" },
306 { "loopback test (offline)" },
307 { "interrupt test (offline)" },
310 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
312 writel(val, tp->regs + off);
315 static u32 tg3_read32(struct tg3 *tp, u32 off)
317 return (readl(tp->regs + off));
320 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
322 writel(val, tp->aperegs + off);
325 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
327 return (readl(tp->aperegs + off));
330 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
332 unsigned long flags;
334 spin_lock_irqsave(&tp->indirect_lock, flags);
335 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
336 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
337 spin_unlock_irqrestore(&tp->indirect_lock, flags);
340 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
342 writel(val, tp->regs + off);
343 readl(tp->regs + off);
346 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
348 unsigned long flags;
349 u32 val;
351 spin_lock_irqsave(&tp->indirect_lock, flags);
352 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
353 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
354 spin_unlock_irqrestore(&tp->indirect_lock, flags);
355 return val;
358 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
360 unsigned long flags;
362 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) {
363 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
364 TG3_64BIT_REG_LOW, val);
365 return;
367 if (off == (MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW)) {
368 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
369 TG3_64BIT_REG_LOW, val);
370 return;
373 spin_lock_irqsave(&tp->indirect_lock, flags);
374 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
375 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
376 spin_unlock_irqrestore(&tp->indirect_lock, flags);
378 /* In indirect mode when disabling interrupts, we also need
379 * to clear the interrupt bit in the GRC local ctrl register.
381 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
382 (val == 0x1)) {
383 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
384 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT);
388 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
390 unsigned long flags;
391 u32 val;
393 spin_lock_irqsave(&tp->indirect_lock, flags);
394 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
395 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
396 spin_unlock_irqrestore(&tp->indirect_lock, flags);
397 return val;
400 /* usec_wait specifies the wait time in usec when writing to certain registers
401 * where it is unsafe to read back the register without some delay.
402 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
403 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
405 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
407 if ((tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) ||
408 (tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
409 /* Non-posted methods */
410 tp->write32(tp, off, val);
411 else {
412 /* Posted method */
413 tg3_write32(tp, off, val);
414 if (usec_wait)
415 udelay(usec_wait);
416 tp->read32(tp, off);
418 /* Wait again after the read for the posted method to guarantee that
419 * the wait time is met.
421 if (usec_wait)
422 udelay(usec_wait);
425 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
427 tp->write32_mbox(tp, off, val);
428 if (!(tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) &&
429 !(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
430 tp->read32_mbox(tp, off);
433 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
435 void __iomem *mbox = tp->regs + off;
436 writel(val, mbox);
437 if (tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG)
438 writel(val, mbox);
439 if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
440 readl(mbox);
443 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
445 return (readl(tp->regs + off + GRCMBOX_BASE));
448 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
450 writel(val, tp->regs + off + GRCMBOX_BASE);
453 #define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val)
454 #define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val))
455 #define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val)
456 #define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val)
457 #define tr32_mailbox(reg) tp->read32_mbox(tp, reg)
459 #define tw32(reg,val) tp->write32(tp, reg, val)
460 #define tw32_f(reg,val) _tw32_flush(tp,(reg),(val), 0)
461 #define tw32_wait_f(reg,val,us) _tw32_flush(tp,(reg),(val), (us))
462 #define tr32(reg) tp->read32(tp, reg)
464 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
466 unsigned long flags;
468 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) &&
469 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
470 return;
472 spin_lock_irqsave(&tp->indirect_lock, flags);
473 if (tp->tg3_flags & TG3_FLAG_SRAM_USE_CONFIG) {
474 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
475 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
477 /* Always leave this as zero. */
478 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
479 } else {
480 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
481 tw32_f(TG3PCI_MEM_WIN_DATA, val);
483 /* Always leave this as zero. */
484 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
486 spin_unlock_irqrestore(&tp->indirect_lock, flags);
489 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
491 unsigned long flags;
493 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) &&
494 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
495 *val = 0;
496 return;
499 spin_lock_irqsave(&tp->indirect_lock, flags);
500 if (tp->tg3_flags & TG3_FLAG_SRAM_USE_CONFIG) {
501 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
502 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
504 /* Always leave this as zero. */
505 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
506 } else {
507 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off);
508 *val = tr32(TG3PCI_MEM_WIN_DATA);
510 /* Always leave this as zero. */
511 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0);
513 spin_unlock_irqrestore(&tp->indirect_lock, flags);
516 static void tg3_ape_lock_init(struct tg3 *tp)
518 int i;
520 /* Make sure the driver hasn't any stale locks. */
521 for (i = 0; i < 8; i++)
522 tg3_ape_write32(tp, TG3_APE_LOCK_GRANT + 4 * i,
523 APE_LOCK_GRANT_DRIVER);
526 static int tg3_ape_lock(struct tg3 *tp, int locknum)
528 int i, off;
529 int ret = 0;
530 u32 status;
532 if (!(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE))
533 return 0;
535 switch (locknum) {
536 case TG3_APE_LOCK_MEM:
537 break;
538 default:
539 return -EINVAL;
542 off = 4 * locknum;
544 tg3_ape_write32(tp, TG3_APE_LOCK_REQ + off, APE_LOCK_REQ_DRIVER);
546 /* Wait for up to 1 millisecond to acquire lock. */
547 for (i = 0; i < 100; i++) {
548 status = tg3_ape_read32(tp, TG3_APE_LOCK_GRANT + off);
549 if (status == APE_LOCK_GRANT_DRIVER)
550 break;
551 udelay(10);
554 if (status != APE_LOCK_GRANT_DRIVER) {
555 /* Revoke the lock request. */
556 tg3_ape_write32(tp, TG3_APE_LOCK_GRANT + off,
557 APE_LOCK_GRANT_DRIVER);
559 ret = -EBUSY;
562 return ret;
565 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
567 int off;
569 if (!(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE))
570 return;
572 switch (locknum) {
573 case TG3_APE_LOCK_MEM:
574 break;
575 default:
576 return;
579 off = 4 * locknum;
580 tg3_ape_write32(tp, TG3_APE_LOCK_GRANT + off, APE_LOCK_GRANT_DRIVER);
583 static void tg3_disable_ints(struct tg3 *tp)
585 tw32(TG3PCI_MISC_HOST_CTRL,
586 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT));
587 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
590 static inline void tg3_cond_int(struct tg3 *tp)
592 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) &&
593 (tp->hw_status->status & SD_STATUS_UPDATED))
594 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
595 else
596 tw32(HOSTCC_MODE, tp->coalesce_mode |
597 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
600 static void tg3_enable_ints(struct tg3 *tp)
602 tp->irq_sync = 0;
603 wmb();
605 tw32(TG3PCI_MISC_HOST_CTRL,
606 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT));
607 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
608 (tp->last_tag << 24));
609 if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI)
610 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
611 (tp->last_tag << 24));
612 tg3_cond_int(tp);
615 static inline unsigned int tg3_has_work(struct tg3 *tp)
617 struct tg3_hw_status *sblk = tp->hw_status;
618 unsigned int work_exists = 0;
620 /* check for phy events */
621 if (!(tp->tg3_flags &
622 (TG3_FLAG_USE_LINKCHG_REG |
623 TG3_FLAG_POLL_SERDES))) {
624 if (sblk->status & SD_STATUS_LINK_CHG)
625 work_exists = 1;
627 /* check for RX/TX work to do */
628 if (sblk->idx[0].tx_consumer != tp->tx_cons ||
629 sblk->idx[0].rx_producer != tp->rx_rcb_ptr)
630 work_exists = 1;
632 return work_exists;
635 /* tg3_restart_ints
636 * similar to tg3_enable_ints, but it accurately determines whether there
637 * is new work pending and can return without flushing the PIO write
638 * which reenables interrupts
640 static void tg3_restart_ints(struct tg3 *tp)
642 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
643 tp->last_tag << 24);
644 mmiowb();
646 /* When doing tagged status, this work check is unnecessary.
647 * The last_tag we write above tells the chip which piece of
648 * work we've completed.
650 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) &&
651 tg3_has_work(tp))
652 tw32(HOSTCC_MODE, tp->coalesce_mode |
653 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
656 static inline void tg3_netif_stop(struct tg3 *tp)
658 tp->dev->trans_start = jiffies; /* prevent tx timeout */
659 napi_disable(&tp->napi);
660 netif_tx_disable(tp->dev);
663 static inline void tg3_netif_start(struct tg3 *tp)
665 netif_wake_queue(tp->dev);
666 /* NOTE: unconditional netif_wake_queue is only appropriate
667 * so long as all callers are assured to have free tx slots
668 * (such as after tg3_init_hw)
670 napi_enable(&tp->napi);
671 tp->hw_status->status |= SD_STATUS_UPDATED;
672 tg3_enable_ints(tp);
675 static void tg3_switch_clocks(struct tg3 *tp)
677 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
678 u32 orig_clock_ctrl;
680 if ((tp->tg3_flags & TG3_FLAG_CPMU_PRESENT) ||
681 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
682 return;
684 orig_clock_ctrl = clock_ctrl;
685 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
686 CLOCK_CTRL_CLKRUN_OENABLE |
687 0x1f);
688 tp->pci_clock_ctrl = clock_ctrl;
690 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
691 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
692 tw32_wait_f(TG3PCI_CLOCK_CTRL,
693 clock_ctrl | CLOCK_CTRL_625_CORE, 40);
695 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
696 tw32_wait_f(TG3PCI_CLOCK_CTRL,
697 clock_ctrl |
698 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
699 40);
700 tw32_wait_f(TG3PCI_CLOCK_CTRL,
701 clock_ctrl | (CLOCK_CTRL_ALTCLK),
702 40);
704 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
707 #define PHY_BUSY_LOOPS 5000
709 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
711 u32 frame_val;
712 unsigned int loops;
713 int ret;
715 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
716 tw32_f(MAC_MI_MODE,
717 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
718 udelay(80);
721 *val = 0x0;
723 frame_val = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) &
724 MI_COM_PHY_ADDR_MASK);
725 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
726 MI_COM_REG_ADDR_MASK);
727 frame_val |= (MI_COM_CMD_READ | MI_COM_START);
729 tw32_f(MAC_MI_COM, frame_val);
731 loops = PHY_BUSY_LOOPS;
732 while (loops != 0) {
733 udelay(10);
734 frame_val = tr32(MAC_MI_COM);
736 if ((frame_val & MI_COM_BUSY) == 0) {
737 udelay(5);
738 frame_val = tr32(MAC_MI_COM);
739 break;
741 loops -= 1;
744 ret = -EBUSY;
745 if (loops != 0) {
746 *val = frame_val & MI_COM_DATA_MASK;
747 ret = 0;
750 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
751 tw32_f(MAC_MI_MODE, tp->mi_mode);
752 udelay(80);
755 return ret;
758 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
760 u32 frame_val;
761 unsigned int loops;
762 int ret;
764 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 &&
765 (reg == MII_TG3_CTRL || reg == MII_TG3_AUX_CTRL))
766 return 0;
768 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
769 tw32_f(MAC_MI_MODE,
770 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
771 udelay(80);
774 frame_val = ((PHY_ADDR << MI_COM_PHY_ADDR_SHIFT) &
775 MI_COM_PHY_ADDR_MASK);
776 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
777 MI_COM_REG_ADDR_MASK);
778 frame_val |= (val & MI_COM_DATA_MASK);
779 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
781 tw32_f(MAC_MI_COM, frame_val);
783 loops = PHY_BUSY_LOOPS;
784 while (loops != 0) {
785 udelay(10);
786 frame_val = tr32(MAC_MI_COM);
787 if ((frame_val & MI_COM_BUSY) == 0) {
788 udelay(5);
789 frame_val = tr32(MAC_MI_COM);
790 break;
792 loops -= 1;
795 ret = -EBUSY;
796 if (loops != 0)
797 ret = 0;
799 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
800 tw32_f(MAC_MI_MODE, tp->mi_mode);
801 udelay(80);
804 return ret;
807 static void tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
809 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
810 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
813 static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable)
815 u32 phy;
817 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ||
818 (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES))
819 return;
821 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
822 u32 ephy;
824 if (!tg3_readphy(tp, MII_TG3_EPHY_TEST, &ephy)) {
825 tg3_writephy(tp, MII_TG3_EPHY_TEST,
826 ephy | MII_TG3_EPHY_SHADOW_EN);
827 if (!tg3_readphy(tp, MII_TG3_EPHYTST_MISCCTRL, &phy)) {
828 if (enable)
829 phy |= MII_TG3_EPHYTST_MISCCTRL_MDIX;
830 else
831 phy &= ~MII_TG3_EPHYTST_MISCCTRL_MDIX;
832 tg3_writephy(tp, MII_TG3_EPHYTST_MISCCTRL, phy);
834 tg3_writephy(tp, MII_TG3_EPHY_TEST, ephy);
836 } else {
837 phy = MII_TG3_AUXCTL_MISC_RDSEL_MISC |
838 MII_TG3_AUXCTL_SHDWSEL_MISC;
839 if (!tg3_writephy(tp, MII_TG3_AUX_CTRL, phy) &&
840 !tg3_readphy(tp, MII_TG3_AUX_CTRL, &phy)) {
841 if (enable)
842 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
843 else
844 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX;
845 phy |= MII_TG3_AUXCTL_MISC_WREN;
846 tg3_writephy(tp, MII_TG3_AUX_CTRL, phy);
851 static void tg3_phy_set_wirespeed(struct tg3 *tp)
853 u32 val;
855 if (tp->tg3_flags2 & TG3_FLG2_NO_ETH_WIRE_SPEED)
856 return;
858 if (!tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x7007) &&
859 !tg3_readphy(tp, MII_TG3_AUX_CTRL, &val))
860 tg3_writephy(tp, MII_TG3_AUX_CTRL,
861 (val | (1 << 15) | (1 << 4)));
864 static int tg3_bmcr_reset(struct tg3 *tp)
866 u32 phy_control;
867 int limit, err;
869 /* OK, reset it, and poll the BMCR_RESET bit until it
870 * clears or we time out.
872 phy_control = BMCR_RESET;
873 err = tg3_writephy(tp, MII_BMCR, phy_control);
874 if (err != 0)
875 return -EBUSY;
877 limit = 5000;
878 while (limit--) {
879 err = tg3_readphy(tp, MII_BMCR, &phy_control);
880 if (err != 0)
881 return -EBUSY;
883 if ((phy_control & BMCR_RESET) == 0) {
884 udelay(40);
885 break;
887 udelay(10);
889 if (limit <= 0)
890 return -EBUSY;
892 return 0;
895 static void tg3_phy_apply_otp(struct tg3 *tp)
897 u32 otp, phy;
899 if (!tp->phy_otp)
900 return;
902 otp = tp->phy_otp;
904 /* Enable SM_DSP clock and tx 6dB coding. */
905 phy = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
906 MII_TG3_AUXCTL_ACTL_SMDSP_ENA |
907 MII_TG3_AUXCTL_ACTL_TX_6DB;
908 tg3_writephy(tp, MII_TG3_AUX_CTRL, phy);
910 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
911 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT;
912 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
914 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
915 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT);
916 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
918 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
919 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ;
920 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
922 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
923 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
925 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
926 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
928 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
929 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT);
930 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
932 /* Turn off SM_DSP clock. */
933 phy = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
934 MII_TG3_AUXCTL_ACTL_TX_6DB;
935 tg3_writephy(tp, MII_TG3_AUX_CTRL, phy);
938 static int tg3_wait_macro_done(struct tg3 *tp)
940 int limit = 100;
942 while (limit--) {
943 u32 tmp32;
945 if (!tg3_readphy(tp, 0x16, &tmp32)) {
946 if ((tmp32 & 0x1000) == 0)
947 break;
950 if (limit <= 0)
951 return -EBUSY;
953 return 0;
956 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
958 static const u32 test_pat[4][6] = {
959 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
960 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
961 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
962 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
964 int chan;
966 for (chan = 0; chan < 4; chan++) {
967 int i;
969 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
970 (chan * 0x2000) | 0x0200);
971 tg3_writephy(tp, 0x16, 0x0002);
973 for (i = 0; i < 6; i++)
974 tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
975 test_pat[chan][i]);
977 tg3_writephy(tp, 0x16, 0x0202);
978 if (tg3_wait_macro_done(tp)) {
979 *resetp = 1;
980 return -EBUSY;
983 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
984 (chan * 0x2000) | 0x0200);
985 tg3_writephy(tp, 0x16, 0x0082);
986 if (tg3_wait_macro_done(tp)) {
987 *resetp = 1;
988 return -EBUSY;
991 tg3_writephy(tp, 0x16, 0x0802);
992 if (tg3_wait_macro_done(tp)) {
993 *resetp = 1;
994 return -EBUSY;
997 for (i = 0; i < 6; i += 2) {
998 u32 low, high;
1000 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
1001 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
1002 tg3_wait_macro_done(tp)) {
1003 *resetp = 1;
1004 return -EBUSY;
1006 low &= 0x7fff;
1007 high &= 0x000f;
1008 if (low != test_pat[chan][i] ||
1009 high != test_pat[chan][i+1]) {
1010 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
1011 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
1012 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
1014 return -EBUSY;
1019 return 0;
1022 static int tg3_phy_reset_chanpat(struct tg3 *tp)
1024 int chan;
1026 for (chan = 0; chan < 4; chan++) {
1027 int i;
1029 tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
1030 (chan * 0x2000) | 0x0200);
1031 tg3_writephy(tp, 0x16, 0x0002);
1032 for (i = 0; i < 6; i++)
1033 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
1034 tg3_writephy(tp, 0x16, 0x0202);
1035 if (tg3_wait_macro_done(tp))
1036 return -EBUSY;
1039 return 0;
1042 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
1044 u32 reg32, phy9_orig;
1045 int retries, do_phy_reset, err;
1047 retries = 10;
1048 do_phy_reset = 1;
1049 do {
1050 if (do_phy_reset) {
1051 err = tg3_bmcr_reset(tp);
1052 if (err)
1053 return err;
1054 do_phy_reset = 0;
1057 /* Disable transmitter and interrupt. */
1058 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
1059 continue;
1061 reg32 |= 0x3000;
1062 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
1064 /* Set full-duplex, 1000 mbps. */
1065 tg3_writephy(tp, MII_BMCR,
1066 BMCR_FULLDPLX | TG3_BMCR_SPEED1000);
1068 /* Set to master mode. */
1069 if (tg3_readphy(tp, MII_TG3_CTRL, &phy9_orig))
1070 continue;
1072 tg3_writephy(tp, MII_TG3_CTRL,
1073 (MII_TG3_CTRL_AS_MASTER |
1074 MII_TG3_CTRL_ENABLE_AS_MASTER));
1076 /* Enable SM_DSP_CLOCK and 6dB. */
1077 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
1079 /* Block the PHY control access. */
1080 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8005);
1081 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0800);
1083 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
1084 if (!err)
1085 break;
1086 } while (--retries);
1088 err = tg3_phy_reset_chanpat(tp);
1089 if (err)
1090 return err;
1092 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8005);
1093 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0000);
1095 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
1096 tg3_writephy(tp, 0x16, 0x0000);
1098 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
1099 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
1100 /* Set Extended packet length bit for jumbo frames */
1101 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4400);
1103 else {
1104 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
1107 tg3_writephy(tp, MII_TG3_CTRL, phy9_orig);
1109 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
1110 reg32 &= ~0x3000;
1111 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
1112 } else if (!err)
1113 err = -EBUSY;
1115 return err;
1118 static void tg3_link_report(struct tg3 *);
1120 /* This will reset the tigon3 PHY if there is no valid
1121 * link unless the FORCE argument is non-zero.
1123 static int tg3_phy_reset(struct tg3 *tp)
1125 u32 cpmuctrl;
1126 u32 phy_status;
1127 int err;
1129 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1130 u32 val;
1132 val = tr32(GRC_MISC_CFG);
1133 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ);
1134 udelay(40);
1136 err = tg3_readphy(tp, MII_BMSR, &phy_status);
1137 err |= tg3_readphy(tp, MII_BMSR, &phy_status);
1138 if (err != 0)
1139 return -EBUSY;
1141 if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) {
1142 netif_carrier_off(tp->dev);
1143 tg3_link_report(tp);
1146 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
1147 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
1148 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
1149 err = tg3_phy_reset_5703_4_5(tp);
1150 if (err)
1151 return err;
1152 goto out;
1155 cpmuctrl = 0;
1156 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
1157 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
1158 cpmuctrl = tr32(TG3_CPMU_CTRL);
1159 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
1160 tw32(TG3_CPMU_CTRL,
1161 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
1164 err = tg3_bmcr_reset(tp);
1165 if (err)
1166 return err;
1168 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
1169 u32 phy;
1171 phy = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz;
1172 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, phy);
1174 tw32(TG3_CPMU_CTRL, cpmuctrl);
1177 if (tp->tg3_flags3 & TG3_FLG3_5761_5784_AX_FIXES) {
1178 u32 val;
1180 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
1181 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
1182 CPMU_LSPD_1000MB_MACCLK_12_5) {
1183 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
1184 udelay(40);
1185 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
1188 /* Disable GPHY autopowerdown. */
1189 tg3_writephy(tp, MII_TG3_MISC_SHDW,
1190 MII_TG3_MISC_SHDW_WREN |
1191 MII_TG3_MISC_SHDW_APD_SEL |
1192 MII_TG3_MISC_SHDW_APD_WKTM_84MS);
1195 tg3_phy_apply_otp(tp);
1197 out:
1198 if (tp->tg3_flags2 & TG3_FLG2_PHY_ADC_BUG) {
1199 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
1200 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
1201 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x2aaa);
1202 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
1203 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0323);
1204 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
1206 if (tp->tg3_flags2 & TG3_FLG2_PHY_5704_A0_BUG) {
1207 tg3_writephy(tp, 0x1c, 0x8d68);
1208 tg3_writephy(tp, 0x1c, 0x8d68);
1210 if (tp->tg3_flags2 & TG3_FLG2_PHY_BER_BUG) {
1211 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
1212 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
1213 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x310b);
1214 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
1215 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x9506);
1216 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x401f);
1217 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x14e2);
1218 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
1220 else if (tp->tg3_flags2 & TG3_FLG2_PHY_JITTER_BUG) {
1221 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0c00);
1222 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
1223 if (tp->tg3_flags2 & TG3_FLG2_PHY_ADJUST_TRIM) {
1224 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
1225 tg3_writephy(tp, MII_TG3_TEST1,
1226 MII_TG3_TEST1_TRIM_EN | 0x4);
1227 } else
1228 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
1229 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0400);
1231 /* Set Extended packet length bit (bit 14) on all chips that */
1232 /* support jumbo frames */
1233 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
1234 /* Cannot do read-modify-write on 5401 */
1235 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20);
1236 } else if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) {
1237 u32 phy_reg;
1239 /* Set bit 14 with read-modify-write to preserve other bits */
1240 if (!tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x0007) &&
1241 !tg3_readphy(tp, MII_TG3_AUX_CTRL, &phy_reg))
1242 tg3_writephy(tp, MII_TG3_AUX_CTRL, phy_reg | 0x4000);
1245 /* Set phy register 0x10 bit 0 to high fifo elasticity to support
1246 * jumbo frames transmission.
1248 if (tp->tg3_flags2 & TG3_FLG2_JUMBO_CAPABLE) {
1249 u32 phy_reg;
1251 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &phy_reg))
1252 tg3_writephy(tp, MII_TG3_EXT_CTRL,
1253 phy_reg | MII_TG3_EXT_CTRL_FIFO_ELASTIC);
1256 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1257 /* adjust output voltage */
1258 tg3_writephy(tp, MII_TG3_EPHY_PTEST, 0x12);
1261 tg3_phy_toggle_automdix(tp, 1);
1262 tg3_phy_set_wirespeed(tp);
1263 return 0;
1266 static void tg3_frob_aux_power(struct tg3 *tp)
1268 struct tg3 *tp_peer = tp;
1270 if ((tp->tg3_flags2 & TG3_FLG2_IS_NIC) == 0)
1271 return;
1273 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
1274 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
1275 struct net_device *dev_peer;
1277 dev_peer = pci_get_drvdata(tp->pdev_peer);
1278 /* remove_one() may have been run on the peer. */
1279 if (!dev_peer)
1280 tp_peer = tp;
1281 else
1282 tp_peer = netdev_priv(dev_peer);
1285 if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
1286 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 ||
1287 (tp_peer->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
1288 (tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
1289 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1290 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1291 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1292 (GRC_LCLCTRL_GPIO_OE0 |
1293 GRC_LCLCTRL_GPIO_OE1 |
1294 GRC_LCLCTRL_GPIO_OE2 |
1295 GRC_LCLCTRL_GPIO_OUTPUT0 |
1296 GRC_LCLCTRL_GPIO_OUTPUT1),
1297 100);
1298 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761) {
1299 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
1300 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
1301 GRC_LCLCTRL_GPIO_OE1 |
1302 GRC_LCLCTRL_GPIO_OE2 |
1303 GRC_LCLCTRL_GPIO_OUTPUT0 |
1304 GRC_LCLCTRL_GPIO_OUTPUT1 |
1305 tp->grc_local_ctrl;
1306 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 100);
1308 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
1309 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 100);
1311 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
1312 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 100);
1313 } else {
1314 u32 no_gpio2;
1315 u32 grc_local_ctrl = 0;
1317 if (tp_peer != tp &&
1318 (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
1319 return;
1321 /* Workaround to prevent overdrawing Amps. */
1322 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
1323 ASIC_REV_5714) {
1324 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
1325 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1326 grc_local_ctrl, 100);
1329 /* On 5753 and variants, GPIO2 cannot be used. */
1330 no_gpio2 = tp->nic_sram_data_cfg &
1331 NIC_SRAM_DATA_CFG_NO_GPIO2;
1333 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
1334 GRC_LCLCTRL_GPIO_OE1 |
1335 GRC_LCLCTRL_GPIO_OE2 |
1336 GRC_LCLCTRL_GPIO_OUTPUT1 |
1337 GRC_LCLCTRL_GPIO_OUTPUT2;
1338 if (no_gpio2) {
1339 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
1340 GRC_LCLCTRL_GPIO_OUTPUT2);
1342 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1343 grc_local_ctrl, 100);
1345 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
1347 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1348 grc_local_ctrl, 100);
1350 if (!no_gpio2) {
1351 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
1352 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1353 grc_local_ctrl, 100);
1356 } else {
1357 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
1358 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
1359 if (tp_peer != tp &&
1360 (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
1361 return;
1363 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1364 (GRC_LCLCTRL_GPIO_OE1 |
1365 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1367 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1368 GRC_LCLCTRL_GPIO_OE1, 100);
1370 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1371 (GRC_LCLCTRL_GPIO_OE1 |
1372 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1377 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
1379 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
1380 return 1;
1381 else if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5411) {
1382 if (speed != SPEED_10)
1383 return 1;
1384 } else if (speed == SPEED_10)
1385 return 1;
1387 return 0;
1390 static int tg3_setup_phy(struct tg3 *, int);
1392 #define RESET_KIND_SHUTDOWN 0
1393 #define RESET_KIND_INIT 1
1394 #define RESET_KIND_SUSPEND 2
1396 static void tg3_write_sig_post_reset(struct tg3 *, int);
1397 static int tg3_halt_cpu(struct tg3 *, u32);
1398 static int tg3_nvram_lock(struct tg3 *);
1399 static void tg3_nvram_unlock(struct tg3 *);
1401 static void tg3_power_down_phy(struct tg3 *tp)
1403 u32 val;
1405 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
1406 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
1407 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
1408 u32 serdes_cfg = tr32(MAC_SERDES_CFG);
1410 sg_dig_ctrl |=
1411 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
1412 tw32(SG_DIG_CTRL, sg_dig_ctrl);
1413 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
1415 return;
1418 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1419 tg3_bmcr_reset(tp);
1420 val = tr32(GRC_MISC_CFG);
1421 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
1422 udelay(40);
1423 return;
1424 } else {
1425 tg3_writephy(tp, MII_TG3_EXT_CTRL,
1426 MII_TG3_EXT_CTRL_FORCE_LED_OFF);
1427 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2);
1430 /* The PHY should not be powered down on some chips because
1431 * of bugs.
1433 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1434 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
1435 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 &&
1436 (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)))
1437 return;
1439 if (tp->tg3_flags3 & TG3_FLG3_5761_5784_AX_FIXES) {
1440 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
1441 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
1442 val |= CPMU_LSPD_1000MB_MACCLK_12_5;
1443 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
1446 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
1449 static int tg3_set_power_state(struct tg3 *tp, pci_power_t state)
1451 u32 misc_host_ctrl;
1452 u16 power_control, power_caps;
1453 int pm = tp->pm_cap;
1455 /* Make sure register accesses (indirect or otherwise)
1456 * will function correctly.
1458 pci_write_config_dword(tp->pdev,
1459 TG3PCI_MISC_HOST_CTRL,
1460 tp->misc_host_ctrl);
1462 pci_read_config_word(tp->pdev,
1463 pm + PCI_PM_CTRL,
1464 &power_control);
1465 power_control |= PCI_PM_CTRL_PME_STATUS;
1466 power_control &= ~(PCI_PM_CTRL_STATE_MASK);
1467 switch (state) {
1468 case PCI_D0:
1469 power_control |= 0;
1470 pci_write_config_word(tp->pdev,
1471 pm + PCI_PM_CTRL,
1472 power_control);
1473 udelay(100); /* Delay after power state change */
1475 /* Switch out of Vaux if it is a NIC */
1476 if (tp->tg3_flags2 & TG3_FLG2_IS_NIC)
1477 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100);
1479 return 0;
1481 case PCI_D1:
1482 power_control |= 1;
1483 break;
1485 case PCI_D2:
1486 power_control |= 2;
1487 break;
1489 case PCI_D3hot:
1490 power_control |= 3;
1491 break;
1493 default:
1494 printk(KERN_WARNING PFX "%s: Invalid power state (%d) "
1495 "requested.\n",
1496 tp->dev->name, state);
1497 return -EINVAL;
1500 power_control |= PCI_PM_CTRL_PME_ENABLE;
1502 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
1503 tw32(TG3PCI_MISC_HOST_CTRL,
1504 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
1506 if (tp->link_config.phy_is_low_power == 0) {
1507 tp->link_config.phy_is_low_power = 1;
1508 tp->link_config.orig_speed = tp->link_config.speed;
1509 tp->link_config.orig_duplex = tp->link_config.duplex;
1510 tp->link_config.orig_autoneg = tp->link_config.autoneg;
1513 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) {
1514 tp->link_config.speed = SPEED_10;
1515 tp->link_config.duplex = DUPLEX_HALF;
1516 tp->link_config.autoneg = AUTONEG_ENABLE;
1517 tg3_setup_phy(tp, 0);
1520 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1521 u32 val;
1523 val = tr32(GRC_VCPU_EXT_CTRL);
1524 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
1525 } else if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1526 int i;
1527 u32 val;
1529 for (i = 0; i < 200; i++) {
1530 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
1531 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1532 break;
1533 msleep(1);
1536 if (tp->tg3_flags & TG3_FLAG_WOL_CAP)
1537 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
1538 WOL_DRV_STATE_SHUTDOWN |
1539 WOL_DRV_WOL |
1540 WOL_SET_MAGIC_PKT);
1542 pci_read_config_word(tp->pdev, pm + PCI_PM_PMC, &power_caps);
1544 if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE) {
1545 u32 mac_mode;
1547 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
1548 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x5a);
1549 udelay(40);
1551 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
1552 mac_mode = MAC_MODE_PORT_MODE_GMII;
1553 else
1554 mac_mode = MAC_MODE_PORT_MODE_MII;
1556 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
1557 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
1558 ASIC_REV_5700) {
1559 u32 speed = (tp->tg3_flags &
1560 TG3_FLAG_WOL_SPEED_100MB) ?
1561 SPEED_100 : SPEED_10;
1562 if (tg3_5700_link_polarity(tp, speed))
1563 mac_mode |= MAC_MODE_LINK_POLARITY;
1564 else
1565 mac_mode &= ~MAC_MODE_LINK_POLARITY;
1567 } else {
1568 mac_mode = MAC_MODE_PORT_MODE_TBI;
1571 if (!(tp->tg3_flags2 & TG3_FLG2_5750_PLUS))
1572 tw32(MAC_LED_CTRL, tp->led_ctrl);
1574 if (((power_caps & PCI_PM_CAP_PME_D3cold) &&
1575 (tp->tg3_flags & TG3_FLAG_WOL_ENABLE)))
1576 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
1578 tw32_f(MAC_MODE, mac_mode);
1579 udelay(100);
1581 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
1582 udelay(10);
1585 if (!(tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB) &&
1586 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1587 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
1588 u32 base_val;
1590 base_val = tp->pci_clock_ctrl;
1591 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
1592 CLOCK_CTRL_TXCLK_DISABLE);
1594 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
1595 CLOCK_CTRL_PWRDOWN_PLL133, 40);
1596 } else if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) ||
1597 (tp->tg3_flags & TG3_FLAG_CPMU_PRESENT) ||
1598 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)) {
1599 /* do nothing */
1600 } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
1601 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) {
1602 u32 newbits1, newbits2;
1604 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1605 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1606 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
1607 CLOCK_CTRL_TXCLK_DISABLE |
1608 CLOCK_CTRL_ALTCLK);
1609 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
1610 } else if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
1611 newbits1 = CLOCK_CTRL_625_CORE;
1612 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
1613 } else {
1614 newbits1 = CLOCK_CTRL_ALTCLK;
1615 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
1618 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
1619 40);
1621 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
1622 40);
1624 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
1625 u32 newbits3;
1627 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1628 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1629 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
1630 CLOCK_CTRL_TXCLK_DISABLE |
1631 CLOCK_CTRL_44MHZ_CORE);
1632 } else {
1633 newbits3 = CLOCK_CTRL_44MHZ_CORE;
1636 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1637 tp->pci_clock_ctrl | newbits3, 40);
1641 if (!(tp->tg3_flags & TG3_FLAG_WOL_ENABLE) &&
1642 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF) &&
1643 !(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE))
1644 tg3_power_down_phy(tp);
1646 tg3_frob_aux_power(tp);
1648 /* Workaround for unstable PLL clock */
1649 if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
1650 (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
1651 u32 val = tr32(0x7d00);
1653 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
1654 tw32(0x7d00, val);
1655 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1656 int err;
1658 err = tg3_nvram_lock(tp);
1659 tg3_halt_cpu(tp, RX_CPU_BASE);
1660 if (!err)
1661 tg3_nvram_unlock(tp);
1665 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
1667 /* Finally, set the new power state. */
1668 pci_write_config_word(tp->pdev, pm + PCI_PM_CTRL, power_control);
1669 udelay(100); /* Delay after power state change */
1671 return 0;
1674 /* tp->lock is held. */
1675 static void tg3_wait_for_event_ack(struct tg3 *tp)
1677 int i;
1679 /* Wait for up to 2.5 milliseconds */
1680 for (i = 0; i < 250000; i++) {
1681 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT))
1682 break;
1683 udelay(10);
1687 /* tp->lock is held. */
1688 static void tg3_ump_link_report(struct tg3 *tp)
1690 u32 reg;
1691 u32 val;
1693 if (!(tp->tg3_flags2 & TG3_FLG2_5780_CLASS) ||
1694 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
1695 return;
1697 tg3_wait_for_event_ack(tp);
1699 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1701 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1703 val = 0;
1704 if (!tg3_readphy(tp, MII_BMCR, &reg))
1705 val = reg << 16;
1706 if (!tg3_readphy(tp, MII_BMSR, &reg))
1707 val |= (reg & 0xffff);
1708 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, val);
1710 val = 0;
1711 if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1712 val = reg << 16;
1713 if (!tg3_readphy(tp, MII_LPA, &reg))
1714 val |= (reg & 0xffff);
1715 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 4, val);
1717 val = 0;
1718 if (!(tp->tg3_flags2 & TG3_FLG2_MII_SERDES)) {
1719 if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1720 val = reg << 16;
1721 if (!tg3_readphy(tp, MII_STAT1000, &reg))
1722 val |= (reg & 0xffff);
1724 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 8, val);
1726 if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1727 val = reg << 16;
1728 else
1729 val = 0;
1730 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 12, val);
1732 val = tr32(GRC_RX_CPU_EVENT);
1733 val |= GRC_RX_CPU_DRIVER_EVENT;
1734 tw32_f(GRC_RX_CPU_EVENT, val);
1737 static void tg3_link_report(struct tg3 *tp)
1739 if (!netif_carrier_ok(tp->dev)) {
1740 if (netif_msg_link(tp))
1741 printk(KERN_INFO PFX "%s: Link is down.\n",
1742 tp->dev->name);
1743 tg3_ump_link_report(tp);
1744 } else if (netif_msg_link(tp)) {
1745 printk(KERN_INFO PFX "%s: Link is up at %d Mbps, %s duplex.\n",
1746 tp->dev->name,
1747 (tp->link_config.active_speed == SPEED_1000 ?
1748 1000 :
1749 (tp->link_config.active_speed == SPEED_100 ?
1750 100 : 10)),
1751 (tp->link_config.active_duplex == DUPLEX_FULL ?
1752 "full" : "half"));
1754 printk(KERN_INFO PFX
1755 "%s: Flow control is %s for TX and %s for RX.\n",
1756 tp->dev->name,
1757 (tp->link_config.active_flowctrl & TG3_FLOW_CTRL_TX) ?
1758 "on" : "off",
1759 (tp->link_config.active_flowctrl & TG3_FLOW_CTRL_RX) ?
1760 "on" : "off");
1761 tg3_ump_link_report(tp);
1765 static u16 tg3_advert_flowctrl_1000T(u8 flow_ctrl)
1767 u16 miireg;
1769 if ((flow_ctrl & TG3_FLOW_CTRL_TX) && (flow_ctrl & TG3_FLOW_CTRL_RX))
1770 miireg = ADVERTISE_PAUSE_CAP;
1771 else if (flow_ctrl & TG3_FLOW_CTRL_TX)
1772 miireg = ADVERTISE_PAUSE_ASYM;
1773 else if (flow_ctrl & TG3_FLOW_CTRL_RX)
1774 miireg = ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
1775 else
1776 miireg = 0;
1778 return miireg;
1781 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1783 u16 miireg;
1785 if ((flow_ctrl & TG3_FLOW_CTRL_TX) && (flow_ctrl & TG3_FLOW_CTRL_RX))
1786 miireg = ADVERTISE_1000XPAUSE;
1787 else if (flow_ctrl & TG3_FLOW_CTRL_TX)
1788 miireg = ADVERTISE_1000XPSE_ASYM;
1789 else if (flow_ctrl & TG3_FLOW_CTRL_RX)
1790 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1791 else
1792 miireg = 0;
1794 return miireg;
1797 static u8 tg3_resolve_flowctrl_1000T(u16 lcladv, u16 rmtadv)
1799 u8 cap = 0;
1801 if (lcladv & ADVERTISE_PAUSE_CAP) {
1802 if (lcladv & ADVERTISE_PAUSE_ASYM) {
1803 if (rmtadv & LPA_PAUSE_CAP)
1804 cap = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
1805 else if (rmtadv & LPA_PAUSE_ASYM)
1806 cap = TG3_FLOW_CTRL_RX;
1807 } else {
1808 if (rmtadv & LPA_PAUSE_CAP)
1809 cap = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
1811 } else if (lcladv & ADVERTISE_PAUSE_ASYM) {
1812 if ((rmtadv & LPA_PAUSE_CAP) && (rmtadv & LPA_PAUSE_ASYM))
1813 cap = TG3_FLOW_CTRL_TX;
1816 return cap;
1819 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1821 u8 cap = 0;
1823 if (lcladv & ADVERTISE_1000XPAUSE) {
1824 if (lcladv & ADVERTISE_1000XPSE_ASYM) {
1825 if (rmtadv & LPA_1000XPAUSE)
1826 cap = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
1827 else if (rmtadv & LPA_1000XPAUSE_ASYM)
1828 cap = TG3_FLOW_CTRL_RX;
1829 } else {
1830 if (rmtadv & LPA_1000XPAUSE)
1831 cap = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
1833 } else if (lcladv & ADVERTISE_1000XPSE_ASYM) {
1834 if ((rmtadv & LPA_1000XPAUSE) && (rmtadv & LPA_1000XPAUSE_ASYM))
1835 cap = TG3_FLOW_CTRL_TX;
1838 return cap;
1841 static void tg3_setup_flow_control(struct tg3 *tp, u32 local_adv, u32 remote_adv)
1843 u8 new_tg3_flags = 0;
1844 u32 old_rx_mode = tp->rx_mode;
1845 u32 old_tx_mode = tp->tx_mode;
1847 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
1848 (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG)) {
1849 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
1850 new_tg3_flags = tg3_resolve_flowctrl_1000X(local_adv,
1851 remote_adv);
1852 else
1853 new_tg3_flags = tg3_resolve_flowctrl_1000T(local_adv,
1854 remote_adv);
1855 } else {
1856 new_tg3_flags = tp->link_config.flowctrl;
1859 tp->link_config.active_flowctrl = new_tg3_flags;
1861 if (new_tg3_flags & TG3_FLOW_CTRL_RX)
1862 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1863 else
1864 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1866 if (old_rx_mode != tp->rx_mode) {
1867 tw32_f(MAC_RX_MODE, tp->rx_mode);
1870 if (new_tg3_flags & TG3_FLOW_CTRL_TX)
1871 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1872 else
1873 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1875 if (old_tx_mode != tp->tx_mode) {
1876 tw32_f(MAC_TX_MODE, tp->tx_mode);
1880 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
1882 switch (val & MII_TG3_AUX_STAT_SPDMASK) {
1883 case MII_TG3_AUX_STAT_10HALF:
1884 *speed = SPEED_10;
1885 *duplex = DUPLEX_HALF;
1886 break;
1888 case MII_TG3_AUX_STAT_10FULL:
1889 *speed = SPEED_10;
1890 *duplex = DUPLEX_FULL;
1891 break;
1893 case MII_TG3_AUX_STAT_100HALF:
1894 *speed = SPEED_100;
1895 *duplex = DUPLEX_HALF;
1896 break;
1898 case MII_TG3_AUX_STAT_100FULL:
1899 *speed = SPEED_100;
1900 *duplex = DUPLEX_FULL;
1901 break;
1903 case MII_TG3_AUX_STAT_1000HALF:
1904 *speed = SPEED_1000;
1905 *duplex = DUPLEX_HALF;
1906 break;
1908 case MII_TG3_AUX_STAT_1000FULL:
1909 *speed = SPEED_1000;
1910 *duplex = DUPLEX_FULL;
1911 break;
1913 default:
1914 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1915 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
1916 SPEED_10;
1917 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
1918 DUPLEX_HALF;
1919 break;
1921 *speed = SPEED_INVALID;
1922 *duplex = DUPLEX_INVALID;
1923 break;
1927 static void tg3_phy_copper_begin(struct tg3 *tp)
1929 u32 new_adv;
1930 int i;
1932 if (tp->link_config.phy_is_low_power) {
1933 /* Entering low power mode. Disable gigabit and
1934 * 100baseT advertisements.
1936 tg3_writephy(tp, MII_TG3_CTRL, 0);
1938 new_adv = (ADVERTISE_10HALF | ADVERTISE_10FULL |
1939 ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
1940 if (tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB)
1941 new_adv |= (ADVERTISE_100HALF | ADVERTISE_100FULL);
1943 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1944 } else if (tp->link_config.speed == SPEED_INVALID) {
1945 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
1946 tp->link_config.advertising &=
1947 ~(ADVERTISED_1000baseT_Half |
1948 ADVERTISED_1000baseT_Full);
1950 new_adv = ADVERTISE_CSMA;
1951 if (tp->link_config.advertising & ADVERTISED_10baseT_Half)
1952 new_adv |= ADVERTISE_10HALF;
1953 if (tp->link_config.advertising & ADVERTISED_10baseT_Full)
1954 new_adv |= ADVERTISE_10FULL;
1955 if (tp->link_config.advertising & ADVERTISED_100baseT_Half)
1956 new_adv |= ADVERTISE_100HALF;
1957 if (tp->link_config.advertising & ADVERTISED_100baseT_Full)
1958 new_adv |= ADVERTISE_100FULL;
1960 new_adv |= tg3_advert_flowctrl_1000T(tp->link_config.flowctrl);
1962 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1964 if (tp->link_config.advertising &
1965 (ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full)) {
1966 new_adv = 0;
1967 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half)
1968 new_adv |= MII_TG3_CTRL_ADV_1000_HALF;
1969 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full)
1970 new_adv |= MII_TG3_CTRL_ADV_1000_FULL;
1971 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY) &&
1972 (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1973 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0))
1974 new_adv |= (MII_TG3_CTRL_AS_MASTER |
1975 MII_TG3_CTRL_ENABLE_AS_MASTER);
1976 tg3_writephy(tp, MII_TG3_CTRL, new_adv);
1977 } else {
1978 tg3_writephy(tp, MII_TG3_CTRL, 0);
1980 } else {
1981 new_adv = tg3_advert_flowctrl_1000T(tp->link_config.flowctrl);
1982 new_adv |= ADVERTISE_CSMA;
1984 /* Asking for a specific link mode. */
1985 if (tp->link_config.speed == SPEED_1000) {
1986 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1988 if (tp->link_config.duplex == DUPLEX_FULL)
1989 new_adv = MII_TG3_CTRL_ADV_1000_FULL;
1990 else
1991 new_adv = MII_TG3_CTRL_ADV_1000_HALF;
1992 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1993 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
1994 new_adv |= (MII_TG3_CTRL_AS_MASTER |
1995 MII_TG3_CTRL_ENABLE_AS_MASTER);
1996 } else {
1997 if (tp->link_config.speed == SPEED_100) {
1998 if (tp->link_config.duplex == DUPLEX_FULL)
1999 new_adv |= ADVERTISE_100FULL;
2000 else
2001 new_adv |= ADVERTISE_100HALF;
2002 } else {
2003 if (tp->link_config.duplex == DUPLEX_FULL)
2004 new_adv |= ADVERTISE_10FULL;
2005 else
2006 new_adv |= ADVERTISE_10HALF;
2008 tg3_writephy(tp, MII_ADVERTISE, new_adv);
2010 new_adv = 0;
2013 tg3_writephy(tp, MII_TG3_CTRL, new_adv);
2016 if (tp->link_config.autoneg == AUTONEG_DISABLE &&
2017 tp->link_config.speed != SPEED_INVALID) {
2018 u32 bmcr, orig_bmcr;
2020 tp->link_config.active_speed = tp->link_config.speed;
2021 tp->link_config.active_duplex = tp->link_config.duplex;
2023 bmcr = 0;
2024 switch (tp->link_config.speed) {
2025 default:
2026 case SPEED_10:
2027 break;
2029 case SPEED_100:
2030 bmcr |= BMCR_SPEED100;
2031 break;
2033 case SPEED_1000:
2034 bmcr |= TG3_BMCR_SPEED1000;
2035 break;
2038 if (tp->link_config.duplex == DUPLEX_FULL)
2039 bmcr |= BMCR_FULLDPLX;
2041 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
2042 (bmcr != orig_bmcr)) {
2043 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
2044 for (i = 0; i < 1500; i++) {
2045 u32 tmp;
2047 udelay(10);
2048 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
2049 tg3_readphy(tp, MII_BMSR, &tmp))
2050 continue;
2051 if (!(tmp & BMSR_LSTATUS)) {
2052 udelay(40);
2053 break;
2056 tg3_writephy(tp, MII_BMCR, bmcr);
2057 udelay(40);
2059 } else {
2060 tg3_writephy(tp, MII_BMCR,
2061 BMCR_ANENABLE | BMCR_ANRESTART);
2065 static int tg3_init_5401phy_dsp(struct tg3 *tp)
2067 int err;
2069 /* Turn off tap power management. */
2070 /* Set Extended packet length bit */
2071 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20);
2073 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0012);
2074 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1804);
2076 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0013);
2077 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1204);
2079 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
2080 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0132);
2082 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
2083 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0232);
2085 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
2086 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0a20);
2088 udelay(40);
2090 return err;
2093 static int tg3_copper_is_advertising_all(struct tg3 *tp, u32 mask)
2095 u32 adv_reg, all_mask = 0;
2097 if (mask & ADVERTISED_10baseT_Half)
2098 all_mask |= ADVERTISE_10HALF;
2099 if (mask & ADVERTISED_10baseT_Full)
2100 all_mask |= ADVERTISE_10FULL;
2101 if (mask & ADVERTISED_100baseT_Half)
2102 all_mask |= ADVERTISE_100HALF;
2103 if (mask & ADVERTISED_100baseT_Full)
2104 all_mask |= ADVERTISE_100FULL;
2106 if (tg3_readphy(tp, MII_ADVERTISE, &adv_reg))
2107 return 0;
2109 if ((adv_reg & all_mask) != all_mask)
2110 return 0;
2111 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY)) {
2112 u32 tg3_ctrl;
2114 all_mask = 0;
2115 if (mask & ADVERTISED_1000baseT_Half)
2116 all_mask |= ADVERTISE_1000HALF;
2117 if (mask & ADVERTISED_1000baseT_Full)
2118 all_mask |= ADVERTISE_1000FULL;
2120 if (tg3_readphy(tp, MII_TG3_CTRL, &tg3_ctrl))
2121 return 0;
2123 if ((tg3_ctrl & all_mask) != all_mask)
2124 return 0;
2126 return 1;
2129 static int tg3_adv_1000T_flowctrl_ok(struct tg3 *tp, u32 *lcladv, u32 *rmtadv)
2131 u32 curadv, reqadv;
2133 if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
2134 return 1;
2136 curadv = *lcladv & (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
2137 reqadv = tg3_advert_flowctrl_1000T(tp->link_config.flowctrl);
2139 if (tp->link_config.active_duplex == DUPLEX_FULL) {
2140 if (curadv != reqadv)
2141 return 0;
2143 if (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG)
2144 tg3_readphy(tp, MII_LPA, rmtadv);
2145 } else {
2146 /* Reprogram the advertisement register, even if it
2147 * does not affect the current link. If the link
2148 * gets renegotiated in the future, we can save an
2149 * additional renegotiation cycle by advertising
2150 * it correctly in the first place.
2152 if (curadv != reqadv) {
2153 *lcladv &= ~(ADVERTISE_PAUSE_CAP |
2154 ADVERTISE_PAUSE_ASYM);
2155 tg3_writephy(tp, MII_ADVERTISE, *lcladv | reqadv);
2159 return 1;
2162 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
2164 int current_link_up;
2165 u32 bmsr, dummy;
2166 u32 lcl_adv, rmt_adv;
2167 u16 current_speed;
2168 u8 current_duplex;
2169 int i, err;
2171 tw32(MAC_EVENT, 0);
2173 tw32_f(MAC_STATUS,
2174 (MAC_STATUS_SYNC_CHANGED |
2175 MAC_STATUS_CFG_CHANGED |
2176 MAC_STATUS_MI_COMPLETION |
2177 MAC_STATUS_LNKSTATE_CHANGED));
2178 udelay(40);
2180 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
2181 tw32_f(MAC_MI_MODE,
2182 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
2183 udelay(80);
2186 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x02);
2188 /* Some third-party PHYs need to be reset on link going
2189 * down.
2191 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
2192 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2193 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
2194 netif_carrier_ok(tp->dev)) {
2195 tg3_readphy(tp, MII_BMSR, &bmsr);
2196 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
2197 !(bmsr & BMSR_LSTATUS))
2198 force_reset = 1;
2200 if (force_reset)
2201 tg3_phy_reset(tp);
2203 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
2204 tg3_readphy(tp, MII_BMSR, &bmsr);
2205 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
2206 !(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE))
2207 bmsr = 0;
2209 if (!(bmsr & BMSR_LSTATUS)) {
2210 err = tg3_init_5401phy_dsp(tp);
2211 if (err)
2212 return err;
2214 tg3_readphy(tp, MII_BMSR, &bmsr);
2215 for (i = 0; i < 1000; i++) {
2216 udelay(10);
2217 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
2218 (bmsr & BMSR_LSTATUS)) {
2219 udelay(40);
2220 break;
2224 if ((tp->phy_id & PHY_ID_REV_MASK) == PHY_REV_BCM5401_B0 &&
2225 !(bmsr & BMSR_LSTATUS) &&
2226 tp->link_config.active_speed == SPEED_1000) {
2227 err = tg3_phy_reset(tp);
2228 if (!err)
2229 err = tg3_init_5401phy_dsp(tp);
2230 if (err)
2231 return err;
2234 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
2235 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
2236 /* 5701 {A0,B0} CRC bug workaround */
2237 tg3_writephy(tp, 0x15, 0x0a75);
2238 tg3_writephy(tp, 0x1c, 0x8c68);
2239 tg3_writephy(tp, 0x1c, 0x8d68);
2240 tg3_writephy(tp, 0x1c, 0x8c68);
2243 /* Clear pending interrupts... */
2244 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
2245 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
2247 if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT)
2248 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
2249 else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)
2250 tg3_writephy(tp, MII_TG3_IMASK, ~0);
2252 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2253 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
2254 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
2255 tg3_writephy(tp, MII_TG3_EXT_CTRL,
2256 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
2257 else
2258 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
2261 current_link_up = 0;
2262 current_speed = SPEED_INVALID;
2263 current_duplex = DUPLEX_INVALID;
2265 if (tp->tg3_flags2 & TG3_FLG2_CAPACITIVE_COUPLING) {
2266 u32 val;
2268 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4007);
2269 tg3_readphy(tp, MII_TG3_AUX_CTRL, &val);
2270 if (!(val & (1 << 10))) {
2271 val |= (1 << 10);
2272 tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
2273 goto relink;
2277 bmsr = 0;
2278 for (i = 0; i < 100; i++) {
2279 tg3_readphy(tp, MII_BMSR, &bmsr);
2280 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
2281 (bmsr & BMSR_LSTATUS))
2282 break;
2283 udelay(40);
2286 if (bmsr & BMSR_LSTATUS) {
2287 u32 aux_stat, bmcr;
2289 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
2290 for (i = 0; i < 2000; i++) {
2291 udelay(10);
2292 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
2293 aux_stat)
2294 break;
2297 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
2298 &current_speed,
2299 &current_duplex);
2301 bmcr = 0;
2302 for (i = 0; i < 200; i++) {
2303 tg3_readphy(tp, MII_BMCR, &bmcr);
2304 if (tg3_readphy(tp, MII_BMCR, &bmcr))
2305 continue;
2306 if (bmcr && bmcr != 0x7fff)
2307 break;
2308 udelay(10);
2311 lcl_adv = 0;
2312 rmt_adv = 0;
2314 tp->link_config.active_speed = current_speed;
2315 tp->link_config.active_duplex = current_duplex;
2317 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2318 if ((bmcr & BMCR_ANENABLE) &&
2319 tg3_copper_is_advertising_all(tp,
2320 tp->link_config.advertising)) {
2321 if (tg3_adv_1000T_flowctrl_ok(tp, &lcl_adv,
2322 &rmt_adv))
2323 current_link_up = 1;
2325 } else {
2326 if (!(bmcr & BMCR_ANENABLE) &&
2327 tp->link_config.speed == current_speed &&
2328 tp->link_config.duplex == current_duplex &&
2329 tp->link_config.flowctrl ==
2330 tp->link_config.active_flowctrl) {
2331 current_link_up = 1;
2335 if (current_link_up == 1 &&
2336 tp->link_config.active_duplex == DUPLEX_FULL)
2337 tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2340 relink:
2341 if (current_link_up == 0 || tp->link_config.phy_is_low_power) {
2342 u32 tmp;
2344 tg3_phy_copper_begin(tp);
2346 tg3_readphy(tp, MII_BMSR, &tmp);
2347 if (!tg3_readphy(tp, MII_BMSR, &tmp) &&
2348 (tmp & BMSR_LSTATUS))
2349 current_link_up = 1;
2352 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
2353 if (current_link_up == 1) {
2354 if (tp->link_config.active_speed == SPEED_100 ||
2355 tp->link_config.active_speed == SPEED_10)
2356 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
2357 else
2358 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
2359 } else
2360 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
2362 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
2363 if (tp->link_config.active_duplex == DUPLEX_HALF)
2364 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
2366 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
2367 if (current_link_up == 1 &&
2368 tg3_5700_link_polarity(tp, tp->link_config.active_speed))
2369 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
2370 else
2371 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
2374 /* ??? Without this setting Netgear GA302T PHY does not
2375 * ??? send/receive packets...
2377 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5411 &&
2378 tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
2379 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
2380 tw32_f(MAC_MI_MODE, tp->mi_mode);
2381 udelay(80);
2384 tw32_f(MAC_MODE, tp->mac_mode);
2385 udelay(40);
2387 if (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) {
2388 /* Polled via timer. */
2389 tw32_f(MAC_EVENT, 0);
2390 } else {
2391 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2393 udelay(40);
2395 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
2396 current_link_up == 1 &&
2397 tp->link_config.active_speed == SPEED_1000 &&
2398 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ||
2399 (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED))) {
2400 udelay(120);
2401 tw32_f(MAC_STATUS,
2402 (MAC_STATUS_SYNC_CHANGED |
2403 MAC_STATUS_CFG_CHANGED));
2404 udelay(40);
2405 tg3_write_mem(tp,
2406 NIC_SRAM_FIRMWARE_MBOX,
2407 NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
2410 if (current_link_up != netif_carrier_ok(tp->dev)) {
2411 if (current_link_up)
2412 netif_carrier_on(tp->dev);
2413 else
2414 netif_carrier_off(tp->dev);
2415 tg3_link_report(tp);
2418 return 0;
2421 struct tg3_fiber_aneginfo {
2422 int state;
2423 #define ANEG_STATE_UNKNOWN 0
2424 #define ANEG_STATE_AN_ENABLE 1
2425 #define ANEG_STATE_RESTART_INIT 2
2426 #define ANEG_STATE_RESTART 3
2427 #define ANEG_STATE_DISABLE_LINK_OK 4
2428 #define ANEG_STATE_ABILITY_DETECT_INIT 5
2429 #define ANEG_STATE_ABILITY_DETECT 6
2430 #define ANEG_STATE_ACK_DETECT_INIT 7
2431 #define ANEG_STATE_ACK_DETECT 8
2432 #define ANEG_STATE_COMPLETE_ACK_INIT 9
2433 #define ANEG_STATE_COMPLETE_ACK 10
2434 #define ANEG_STATE_IDLE_DETECT_INIT 11
2435 #define ANEG_STATE_IDLE_DETECT 12
2436 #define ANEG_STATE_LINK_OK 13
2437 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14
2438 #define ANEG_STATE_NEXT_PAGE_WAIT 15
2440 u32 flags;
2441 #define MR_AN_ENABLE 0x00000001
2442 #define MR_RESTART_AN 0x00000002
2443 #define MR_AN_COMPLETE 0x00000004
2444 #define MR_PAGE_RX 0x00000008
2445 #define MR_NP_LOADED 0x00000010
2446 #define MR_TOGGLE_TX 0x00000020
2447 #define MR_LP_ADV_FULL_DUPLEX 0x00000040
2448 #define MR_LP_ADV_HALF_DUPLEX 0x00000080
2449 #define MR_LP_ADV_SYM_PAUSE 0x00000100
2450 #define MR_LP_ADV_ASYM_PAUSE 0x00000200
2451 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400
2452 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800
2453 #define MR_LP_ADV_NEXT_PAGE 0x00001000
2454 #define MR_TOGGLE_RX 0x00002000
2455 #define MR_NP_RX 0x00004000
2457 #define MR_LINK_OK 0x80000000
2459 unsigned long link_time, cur_time;
2461 u32 ability_match_cfg;
2462 int ability_match_count;
2464 char ability_match, idle_match, ack_match;
2466 u32 txconfig, rxconfig;
2467 #define ANEG_CFG_NP 0x00000080
2468 #define ANEG_CFG_ACK 0x00000040
2469 #define ANEG_CFG_RF2 0x00000020
2470 #define ANEG_CFG_RF1 0x00000010
2471 #define ANEG_CFG_PS2 0x00000001
2472 #define ANEG_CFG_PS1 0x00008000
2473 #define ANEG_CFG_HD 0x00004000
2474 #define ANEG_CFG_FD 0x00002000
2475 #define ANEG_CFG_INVAL 0x00001f06
2478 #define ANEG_OK 0
2479 #define ANEG_DONE 1
2480 #define ANEG_TIMER_ENAB 2
2481 #define ANEG_FAILED -1
2483 #define ANEG_STATE_SETTLE_TIME 10000
2485 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
2486 struct tg3_fiber_aneginfo *ap)
2488 u16 flowctrl;
2489 unsigned long delta;
2490 u32 rx_cfg_reg;
2491 int ret;
2493 if (ap->state == ANEG_STATE_UNKNOWN) {
2494 ap->rxconfig = 0;
2495 ap->link_time = 0;
2496 ap->cur_time = 0;
2497 ap->ability_match_cfg = 0;
2498 ap->ability_match_count = 0;
2499 ap->ability_match = 0;
2500 ap->idle_match = 0;
2501 ap->ack_match = 0;
2503 ap->cur_time++;
2505 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
2506 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
2508 if (rx_cfg_reg != ap->ability_match_cfg) {
2509 ap->ability_match_cfg = rx_cfg_reg;
2510 ap->ability_match = 0;
2511 ap->ability_match_count = 0;
2512 } else {
2513 if (++ap->ability_match_count > 1) {
2514 ap->ability_match = 1;
2515 ap->ability_match_cfg = rx_cfg_reg;
2518 if (rx_cfg_reg & ANEG_CFG_ACK)
2519 ap->ack_match = 1;
2520 else
2521 ap->ack_match = 0;
2523 ap->idle_match = 0;
2524 } else {
2525 ap->idle_match = 1;
2526 ap->ability_match_cfg = 0;
2527 ap->ability_match_count = 0;
2528 ap->ability_match = 0;
2529 ap->ack_match = 0;
2531 rx_cfg_reg = 0;
2534 ap->rxconfig = rx_cfg_reg;
2535 ret = ANEG_OK;
2537 switch(ap->state) {
2538 case ANEG_STATE_UNKNOWN:
2539 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
2540 ap->state = ANEG_STATE_AN_ENABLE;
2542 /* fallthru */
2543 case ANEG_STATE_AN_ENABLE:
2544 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
2545 if (ap->flags & MR_AN_ENABLE) {
2546 ap->link_time = 0;
2547 ap->cur_time = 0;
2548 ap->ability_match_cfg = 0;
2549 ap->ability_match_count = 0;
2550 ap->ability_match = 0;
2551 ap->idle_match = 0;
2552 ap->ack_match = 0;
2554 ap->state = ANEG_STATE_RESTART_INIT;
2555 } else {
2556 ap->state = ANEG_STATE_DISABLE_LINK_OK;
2558 break;
2560 case ANEG_STATE_RESTART_INIT:
2561 ap->link_time = ap->cur_time;
2562 ap->flags &= ~(MR_NP_LOADED);
2563 ap->txconfig = 0;
2564 tw32(MAC_TX_AUTO_NEG, 0);
2565 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2566 tw32_f(MAC_MODE, tp->mac_mode);
2567 udelay(40);
2569 ret = ANEG_TIMER_ENAB;
2570 ap->state = ANEG_STATE_RESTART;
2572 /* fallthru */
2573 case ANEG_STATE_RESTART:
2574 delta = ap->cur_time - ap->link_time;
2575 if (delta > ANEG_STATE_SETTLE_TIME) {
2576 ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
2577 } else {
2578 ret = ANEG_TIMER_ENAB;
2580 break;
2582 case ANEG_STATE_DISABLE_LINK_OK:
2583 ret = ANEG_DONE;
2584 break;
2586 case ANEG_STATE_ABILITY_DETECT_INIT:
2587 ap->flags &= ~(MR_TOGGLE_TX);
2588 ap->txconfig = ANEG_CFG_FD;
2589 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
2590 if (flowctrl & ADVERTISE_1000XPAUSE)
2591 ap->txconfig |= ANEG_CFG_PS1;
2592 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
2593 ap->txconfig |= ANEG_CFG_PS2;
2594 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
2595 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2596 tw32_f(MAC_MODE, tp->mac_mode);
2597 udelay(40);
2599 ap->state = ANEG_STATE_ABILITY_DETECT;
2600 break;
2602 case ANEG_STATE_ABILITY_DETECT:
2603 if (ap->ability_match != 0 && ap->rxconfig != 0) {
2604 ap->state = ANEG_STATE_ACK_DETECT_INIT;
2606 break;
2608 case ANEG_STATE_ACK_DETECT_INIT:
2609 ap->txconfig |= ANEG_CFG_ACK;
2610 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
2611 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2612 tw32_f(MAC_MODE, tp->mac_mode);
2613 udelay(40);
2615 ap->state = ANEG_STATE_ACK_DETECT;
2617 /* fallthru */
2618 case ANEG_STATE_ACK_DETECT:
2619 if (ap->ack_match != 0) {
2620 if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
2621 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
2622 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
2623 } else {
2624 ap->state = ANEG_STATE_AN_ENABLE;
2626 } else if (ap->ability_match != 0 &&
2627 ap->rxconfig == 0) {
2628 ap->state = ANEG_STATE_AN_ENABLE;
2630 break;
2632 case ANEG_STATE_COMPLETE_ACK_INIT:
2633 if (ap->rxconfig & ANEG_CFG_INVAL) {
2634 ret = ANEG_FAILED;
2635 break;
2637 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
2638 MR_LP_ADV_HALF_DUPLEX |
2639 MR_LP_ADV_SYM_PAUSE |
2640 MR_LP_ADV_ASYM_PAUSE |
2641 MR_LP_ADV_REMOTE_FAULT1 |
2642 MR_LP_ADV_REMOTE_FAULT2 |
2643 MR_LP_ADV_NEXT_PAGE |
2644 MR_TOGGLE_RX |
2645 MR_NP_RX);
2646 if (ap->rxconfig & ANEG_CFG_FD)
2647 ap->flags |= MR_LP_ADV_FULL_DUPLEX;
2648 if (ap->rxconfig & ANEG_CFG_HD)
2649 ap->flags |= MR_LP_ADV_HALF_DUPLEX;
2650 if (ap->rxconfig & ANEG_CFG_PS1)
2651 ap->flags |= MR_LP_ADV_SYM_PAUSE;
2652 if (ap->rxconfig & ANEG_CFG_PS2)
2653 ap->flags |= MR_LP_ADV_ASYM_PAUSE;
2654 if (ap->rxconfig & ANEG_CFG_RF1)
2655 ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
2656 if (ap->rxconfig & ANEG_CFG_RF2)
2657 ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
2658 if (ap->rxconfig & ANEG_CFG_NP)
2659 ap->flags |= MR_LP_ADV_NEXT_PAGE;
2661 ap->link_time = ap->cur_time;
2663 ap->flags ^= (MR_TOGGLE_TX);
2664 if (ap->rxconfig & 0x0008)
2665 ap->flags |= MR_TOGGLE_RX;
2666 if (ap->rxconfig & ANEG_CFG_NP)
2667 ap->flags |= MR_NP_RX;
2668 ap->flags |= MR_PAGE_RX;
2670 ap->state = ANEG_STATE_COMPLETE_ACK;
2671 ret = ANEG_TIMER_ENAB;
2672 break;
2674 case ANEG_STATE_COMPLETE_ACK:
2675 if (ap->ability_match != 0 &&
2676 ap->rxconfig == 0) {
2677 ap->state = ANEG_STATE_AN_ENABLE;
2678 break;
2680 delta = ap->cur_time - ap->link_time;
2681 if (delta > ANEG_STATE_SETTLE_TIME) {
2682 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
2683 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
2684 } else {
2685 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
2686 !(ap->flags & MR_NP_RX)) {
2687 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
2688 } else {
2689 ret = ANEG_FAILED;
2693 break;
2695 case ANEG_STATE_IDLE_DETECT_INIT:
2696 ap->link_time = ap->cur_time;
2697 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
2698 tw32_f(MAC_MODE, tp->mac_mode);
2699 udelay(40);
2701 ap->state = ANEG_STATE_IDLE_DETECT;
2702 ret = ANEG_TIMER_ENAB;
2703 break;
2705 case ANEG_STATE_IDLE_DETECT:
2706 if (ap->ability_match != 0 &&
2707 ap->rxconfig == 0) {
2708 ap->state = ANEG_STATE_AN_ENABLE;
2709 break;
2711 delta = ap->cur_time - ap->link_time;
2712 if (delta > ANEG_STATE_SETTLE_TIME) {
2713 /* XXX another gem from the Broadcom driver :( */
2714 ap->state = ANEG_STATE_LINK_OK;
2716 break;
2718 case ANEG_STATE_LINK_OK:
2719 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
2720 ret = ANEG_DONE;
2721 break;
2723 case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
2724 /* ??? unimplemented */
2725 break;
2727 case ANEG_STATE_NEXT_PAGE_WAIT:
2728 /* ??? unimplemented */
2729 break;
2731 default:
2732 ret = ANEG_FAILED;
2733 break;
2736 return ret;
2739 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
2741 int res = 0;
2742 struct tg3_fiber_aneginfo aninfo;
2743 int status = ANEG_FAILED;
2744 unsigned int tick;
2745 u32 tmp;
2747 tw32_f(MAC_TX_AUTO_NEG, 0);
2749 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
2750 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
2751 udelay(40);
2753 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
2754 udelay(40);
2756 memset(&aninfo, 0, sizeof(aninfo));
2757 aninfo.flags |= MR_AN_ENABLE;
2758 aninfo.state = ANEG_STATE_UNKNOWN;
2759 aninfo.cur_time = 0;
2760 tick = 0;
2761 while (++tick < 195000) {
2762 status = tg3_fiber_aneg_smachine(tp, &aninfo);
2763 if (status == ANEG_DONE || status == ANEG_FAILED)
2764 break;
2766 udelay(1);
2769 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
2770 tw32_f(MAC_MODE, tp->mac_mode);
2771 udelay(40);
2773 *txflags = aninfo.txconfig;
2774 *rxflags = aninfo.flags;
2776 if (status == ANEG_DONE &&
2777 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
2778 MR_LP_ADV_FULL_DUPLEX)))
2779 res = 1;
2781 return res;
2784 static void tg3_init_bcm8002(struct tg3 *tp)
2786 u32 mac_status = tr32(MAC_STATUS);
2787 int i;
2789 /* Reset when initting first time or we have a link. */
2790 if ((tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) &&
2791 !(mac_status & MAC_STATUS_PCS_SYNCED))
2792 return;
2794 /* Set PLL lock range. */
2795 tg3_writephy(tp, 0x16, 0x8007);
2797 /* SW reset */
2798 tg3_writephy(tp, MII_BMCR, BMCR_RESET);
2800 /* Wait for reset to complete. */
2801 /* XXX schedule_timeout() ... */
2802 for (i = 0; i < 500; i++)
2803 udelay(10);
2805 /* Config mode; select PMA/Ch 1 regs. */
2806 tg3_writephy(tp, 0x10, 0x8411);
2808 /* Enable auto-lock and comdet, select txclk for tx. */
2809 tg3_writephy(tp, 0x11, 0x0a10);
2811 tg3_writephy(tp, 0x18, 0x00a0);
2812 tg3_writephy(tp, 0x16, 0x41ff);
2814 /* Assert and deassert POR. */
2815 tg3_writephy(tp, 0x13, 0x0400);
2816 udelay(40);
2817 tg3_writephy(tp, 0x13, 0x0000);
2819 tg3_writephy(tp, 0x11, 0x0a50);
2820 udelay(40);
2821 tg3_writephy(tp, 0x11, 0x0a10);
2823 /* Wait for signal to stabilize */
2824 /* XXX schedule_timeout() ... */
2825 for (i = 0; i < 15000; i++)
2826 udelay(10);
2828 /* Deselect the channel register so we can read the PHYID
2829 * later.
2831 tg3_writephy(tp, 0x10, 0x8011);
2834 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
2836 u16 flowctrl;
2837 u32 sg_dig_ctrl, sg_dig_status;
2838 u32 serdes_cfg, expected_sg_dig_ctrl;
2839 int workaround, port_a;
2840 int current_link_up;
2842 serdes_cfg = 0;
2843 expected_sg_dig_ctrl = 0;
2844 workaround = 0;
2845 port_a = 1;
2846 current_link_up = 0;
2848 if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
2849 tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) {
2850 workaround = 1;
2851 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
2852 port_a = 0;
2854 /* preserve bits 0-11,13,14 for signal pre-emphasis */
2855 /* preserve bits 20-23 for voltage regulator */
2856 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
2859 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2861 if (tp->link_config.autoneg != AUTONEG_ENABLE) {
2862 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
2863 if (workaround) {
2864 u32 val = serdes_cfg;
2866 if (port_a)
2867 val |= 0xc010000;
2868 else
2869 val |= 0x4010000;
2870 tw32_f(MAC_SERDES_CFG, val);
2873 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
2875 if (mac_status & MAC_STATUS_PCS_SYNCED) {
2876 tg3_setup_flow_control(tp, 0, 0);
2877 current_link_up = 1;
2879 goto out;
2882 /* Want auto-negotiation. */
2883 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
2885 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
2886 if (flowctrl & ADVERTISE_1000XPAUSE)
2887 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
2888 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
2889 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
2891 if (sg_dig_ctrl != expected_sg_dig_ctrl) {
2892 if ((tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT) &&
2893 tp->serdes_counter &&
2894 ((mac_status & (MAC_STATUS_PCS_SYNCED |
2895 MAC_STATUS_RCVD_CFG)) ==
2896 MAC_STATUS_PCS_SYNCED)) {
2897 tp->serdes_counter--;
2898 current_link_up = 1;
2899 goto out;
2901 restart_autoneg:
2902 if (workaround)
2903 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
2904 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
2905 udelay(5);
2906 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
2908 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
2909 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2910 } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
2911 MAC_STATUS_SIGNAL_DET)) {
2912 sg_dig_status = tr32(SG_DIG_STATUS);
2913 mac_status = tr32(MAC_STATUS);
2915 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
2916 (mac_status & MAC_STATUS_PCS_SYNCED)) {
2917 u32 local_adv = 0, remote_adv = 0;
2919 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
2920 local_adv |= ADVERTISE_1000XPAUSE;
2921 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
2922 local_adv |= ADVERTISE_1000XPSE_ASYM;
2924 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
2925 remote_adv |= LPA_1000XPAUSE;
2926 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
2927 remote_adv |= LPA_1000XPAUSE_ASYM;
2929 tg3_setup_flow_control(tp, local_adv, remote_adv);
2930 current_link_up = 1;
2931 tp->serdes_counter = 0;
2932 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2933 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
2934 if (tp->serdes_counter)
2935 tp->serdes_counter--;
2936 else {
2937 if (workaround) {
2938 u32 val = serdes_cfg;
2940 if (port_a)
2941 val |= 0xc010000;
2942 else
2943 val |= 0x4010000;
2945 tw32_f(MAC_SERDES_CFG, val);
2948 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
2949 udelay(40);
2951 /* Link parallel detection - link is up */
2952 /* only if we have PCS_SYNC and not */
2953 /* receiving config code words */
2954 mac_status = tr32(MAC_STATUS);
2955 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
2956 !(mac_status & MAC_STATUS_RCVD_CFG)) {
2957 tg3_setup_flow_control(tp, 0, 0);
2958 current_link_up = 1;
2959 tp->tg3_flags2 |=
2960 TG3_FLG2_PARALLEL_DETECT;
2961 tp->serdes_counter =
2962 SERDES_PARALLEL_DET_TIMEOUT;
2963 } else
2964 goto restart_autoneg;
2967 } else {
2968 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
2969 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2972 out:
2973 return current_link_up;
2976 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
2978 int current_link_up = 0;
2980 if (!(mac_status & MAC_STATUS_PCS_SYNCED))
2981 goto out;
2983 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2984 u32 txflags, rxflags;
2985 int i;
2987 if (fiber_autoneg(tp, &txflags, &rxflags)) {
2988 u32 local_adv = 0, remote_adv = 0;
2990 if (txflags & ANEG_CFG_PS1)
2991 local_adv |= ADVERTISE_1000XPAUSE;
2992 if (txflags & ANEG_CFG_PS2)
2993 local_adv |= ADVERTISE_1000XPSE_ASYM;
2995 if (rxflags & MR_LP_ADV_SYM_PAUSE)
2996 remote_adv |= LPA_1000XPAUSE;
2997 if (rxflags & MR_LP_ADV_ASYM_PAUSE)
2998 remote_adv |= LPA_1000XPAUSE_ASYM;
3000 tg3_setup_flow_control(tp, local_adv, remote_adv);
3002 current_link_up = 1;
3004 for (i = 0; i < 30; i++) {
3005 udelay(20);
3006 tw32_f(MAC_STATUS,
3007 (MAC_STATUS_SYNC_CHANGED |
3008 MAC_STATUS_CFG_CHANGED));
3009 udelay(40);
3010 if ((tr32(MAC_STATUS) &
3011 (MAC_STATUS_SYNC_CHANGED |
3012 MAC_STATUS_CFG_CHANGED)) == 0)
3013 break;
3016 mac_status = tr32(MAC_STATUS);
3017 if (current_link_up == 0 &&
3018 (mac_status & MAC_STATUS_PCS_SYNCED) &&
3019 !(mac_status & MAC_STATUS_RCVD_CFG))
3020 current_link_up = 1;
3021 } else {
3022 tg3_setup_flow_control(tp, 0, 0);
3024 /* Forcing 1000FD link up. */
3025 current_link_up = 1;
3027 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
3028 udelay(40);
3030 tw32_f(MAC_MODE, tp->mac_mode);
3031 udelay(40);
3034 out:
3035 return current_link_up;
3038 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
3040 u32 orig_pause_cfg;
3041 u16 orig_active_speed;
3042 u8 orig_active_duplex;
3043 u32 mac_status;
3044 int current_link_up;
3045 int i;
3047 orig_pause_cfg = tp->link_config.active_flowctrl;
3048 orig_active_speed = tp->link_config.active_speed;
3049 orig_active_duplex = tp->link_config.active_duplex;
3051 if (!(tp->tg3_flags2 & TG3_FLG2_HW_AUTONEG) &&
3052 netif_carrier_ok(tp->dev) &&
3053 (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE)) {
3054 mac_status = tr32(MAC_STATUS);
3055 mac_status &= (MAC_STATUS_PCS_SYNCED |
3056 MAC_STATUS_SIGNAL_DET |
3057 MAC_STATUS_CFG_CHANGED |
3058 MAC_STATUS_RCVD_CFG);
3059 if (mac_status == (MAC_STATUS_PCS_SYNCED |
3060 MAC_STATUS_SIGNAL_DET)) {
3061 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
3062 MAC_STATUS_CFG_CHANGED));
3063 return 0;
3067 tw32_f(MAC_TX_AUTO_NEG, 0);
3069 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
3070 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
3071 tw32_f(MAC_MODE, tp->mac_mode);
3072 udelay(40);
3074 if (tp->phy_id == PHY_ID_BCM8002)
3075 tg3_init_bcm8002(tp);
3077 /* Enable link change event even when serdes polling. */
3078 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
3079 udelay(40);
3081 current_link_up = 0;
3082 mac_status = tr32(MAC_STATUS);
3084 if (tp->tg3_flags2 & TG3_FLG2_HW_AUTONEG)
3085 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
3086 else
3087 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
3089 tp->hw_status->status =
3090 (SD_STATUS_UPDATED |
3091 (tp->hw_status->status & ~SD_STATUS_LINK_CHG));
3093 for (i = 0; i < 100; i++) {
3094 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
3095 MAC_STATUS_CFG_CHANGED));
3096 udelay(5);
3097 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
3098 MAC_STATUS_CFG_CHANGED |
3099 MAC_STATUS_LNKSTATE_CHANGED)) == 0)
3100 break;
3103 mac_status = tr32(MAC_STATUS);
3104 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
3105 current_link_up = 0;
3106 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
3107 tp->serdes_counter == 0) {
3108 tw32_f(MAC_MODE, (tp->mac_mode |
3109 MAC_MODE_SEND_CONFIGS));
3110 udelay(1);
3111 tw32_f(MAC_MODE, tp->mac_mode);
3115 if (current_link_up == 1) {
3116 tp->link_config.active_speed = SPEED_1000;
3117 tp->link_config.active_duplex = DUPLEX_FULL;
3118 tw32(MAC_LED_CTRL, (tp->led_ctrl |
3119 LED_CTRL_LNKLED_OVERRIDE |
3120 LED_CTRL_1000MBPS_ON));
3121 } else {
3122 tp->link_config.active_speed = SPEED_INVALID;
3123 tp->link_config.active_duplex = DUPLEX_INVALID;
3124 tw32(MAC_LED_CTRL, (tp->led_ctrl |
3125 LED_CTRL_LNKLED_OVERRIDE |
3126 LED_CTRL_TRAFFIC_OVERRIDE));
3129 if (current_link_up != netif_carrier_ok(tp->dev)) {
3130 if (current_link_up)
3131 netif_carrier_on(tp->dev);
3132 else
3133 netif_carrier_off(tp->dev);
3134 tg3_link_report(tp);
3135 } else {
3136 u32 now_pause_cfg = tp->link_config.active_flowctrl;
3137 if (orig_pause_cfg != now_pause_cfg ||
3138 orig_active_speed != tp->link_config.active_speed ||
3139 orig_active_duplex != tp->link_config.active_duplex)
3140 tg3_link_report(tp);
3143 return 0;
3146 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
3148 int current_link_up, err = 0;
3149 u32 bmsr, bmcr;
3150 u16 current_speed;
3151 u8 current_duplex;
3152 u32 local_adv, remote_adv;
3154 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
3155 tw32_f(MAC_MODE, tp->mac_mode);
3156 udelay(40);
3158 tw32(MAC_EVENT, 0);
3160 tw32_f(MAC_STATUS,
3161 (MAC_STATUS_SYNC_CHANGED |
3162 MAC_STATUS_CFG_CHANGED |
3163 MAC_STATUS_MI_COMPLETION |
3164 MAC_STATUS_LNKSTATE_CHANGED));
3165 udelay(40);
3167 if (force_reset)
3168 tg3_phy_reset(tp);
3170 current_link_up = 0;
3171 current_speed = SPEED_INVALID;
3172 current_duplex = DUPLEX_INVALID;
3174 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
3175 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
3176 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
3177 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
3178 bmsr |= BMSR_LSTATUS;
3179 else
3180 bmsr &= ~BMSR_LSTATUS;
3183 err |= tg3_readphy(tp, MII_BMCR, &bmcr);
3185 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
3186 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) {
3187 /* do nothing, just check for link up at the end */
3188 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
3189 u32 adv, new_adv;
3191 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
3192 new_adv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
3193 ADVERTISE_1000XPAUSE |
3194 ADVERTISE_1000XPSE_ASYM |
3195 ADVERTISE_SLCT);
3197 new_adv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
3199 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half)
3200 new_adv |= ADVERTISE_1000XHALF;
3201 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full)
3202 new_adv |= ADVERTISE_1000XFULL;
3204 if ((new_adv != adv) || !(bmcr & BMCR_ANENABLE)) {
3205 tg3_writephy(tp, MII_ADVERTISE, new_adv);
3206 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
3207 tg3_writephy(tp, MII_BMCR, bmcr);
3209 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
3210 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
3211 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
3213 return err;
3215 } else {
3216 u32 new_bmcr;
3218 bmcr &= ~BMCR_SPEED1000;
3219 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
3221 if (tp->link_config.duplex == DUPLEX_FULL)
3222 new_bmcr |= BMCR_FULLDPLX;
3224 if (new_bmcr != bmcr) {
3225 /* BMCR_SPEED1000 is a reserved bit that needs
3226 * to be set on write.
3228 new_bmcr |= BMCR_SPEED1000;
3230 /* Force a linkdown */
3231 if (netif_carrier_ok(tp->dev)) {
3232 u32 adv;
3234 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
3235 adv &= ~(ADVERTISE_1000XFULL |
3236 ADVERTISE_1000XHALF |
3237 ADVERTISE_SLCT);
3238 tg3_writephy(tp, MII_ADVERTISE, adv);
3239 tg3_writephy(tp, MII_BMCR, bmcr |
3240 BMCR_ANRESTART |
3241 BMCR_ANENABLE);
3242 udelay(10);
3243 netif_carrier_off(tp->dev);
3245 tg3_writephy(tp, MII_BMCR, new_bmcr);
3246 bmcr = new_bmcr;
3247 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
3248 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
3249 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
3250 ASIC_REV_5714) {
3251 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
3252 bmsr |= BMSR_LSTATUS;
3253 else
3254 bmsr &= ~BMSR_LSTATUS;
3256 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
3260 if (bmsr & BMSR_LSTATUS) {
3261 current_speed = SPEED_1000;
3262 current_link_up = 1;
3263 if (bmcr & BMCR_FULLDPLX)
3264 current_duplex = DUPLEX_FULL;
3265 else
3266 current_duplex = DUPLEX_HALF;
3268 local_adv = 0;
3269 remote_adv = 0;
3271 if (bmcr & BMCR_ANENABLE) {
3272 u32 common;
3274 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
3275 err |= tg3_readphy(tp, MII_LPA, &remote_adv);
3276 common = local_adv & remote_adv;
3277 if (common & (ADVERTISE_1000XHALF |
3278 ADVERTISE_1000XFULL)) {
3279 if (common & ADVERTISE_1000XFULL)
3280 current_duplex = DUPLEX_FULL;
3281 else
3282 current_duplex = DUPLEX_HALF;
3284 else
3285 current_link_up = 0;
3289 if (current_link_up == 1 && current_duplex == DUPLEX_FULL)
3290 tg3_setup_flow_control(tp, local_adv, remote_adv);
3292 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
3293 if (tp->link_config.active_duplex == DUPLEX_HALF)
3294 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
3296 tw32_f(MAC_MODE, tp->mac_mode);
3297 udelay(40);
3299 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
3301 tp->link_config.active_speed = current_speed;
3302 tp->link_config.active_duplex = current_duplex;
3304 if (current_link_up != netif_carrier_ok(tp->dev)) {
3305 if (current_link_up)
3306 netif_carrier_on(tp->dev);
3307 else {
3308 netif_carrier_off(tp->dev);
3309 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
3311 tg3_link_report(tp);
3313 return err;
3316 static void tg3_serdes_parallel_detect(struct tg3 *tp)
3318 if (tp->serdes_counter) {
3319 /* Give autoneg time to complete. */
3320 tp->serdes_counter--;
3321 return;
3323 if (!netif_carrier_ok(tp->dev) &&
3324 (tp->link_config.autoneg == AUTONEG_ENABLE)) {
3325 u32 bmcr;
3327 tg3_readphy(tp, MII_BMCR, &bmcr);
3328 if (bmcr & BMCR_ANENABLE) {
3329 u32 phy1, phy2;
3331 /* Select shadow register 0x1f */
3332 tg3_writephy(tp, 0x1c, 0x7c00);
3333 tg3_readphy(tp, 0x1c, &phy1);
3335 /* Select expansion interrupt status register */
3336 tg3_writephy(tp, 0x17, 0x0f01);
3337 tg3_readphy(tp, 0x15, &phy2);
3338 tg3_readphy(tp, 0x15, &phy2);
3340 if ((phy1 & 0x10) && !(phy2 & 0x20)) {
3341 /* We have signal detect and not receiving
3342 * config code words, link is up by parallel
3343 * detection.
3346 bmcr &= ~BMCR_ANENABLE;
3347 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
3348 tg3_writephy(tp, MII_BMCR, bmcr);
3349 tp->tg3_flags2 |= TG3_FLG2_PARALLEL_DETECT;
3353 else if (netif_carrier_ok(tp->dev) &&
3354 (tp->link_config.autoneg == AUTONEG_ENABLE) &&
3355 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) {
3356 u32 phy2;
3358 /* Select expansion interrupt status register */
3359 tg3_writephy(tp, 0x17, 0x0f01);
3360 tg3_readphy(tp, 0x15, &phy2);
3361 if (phy2 & 0x20) {
3362 u32 bmcr;
3364 /* Config code words received, turn on autoneg. */
3365 tg3_readphy(tp, MII_BMCR, &bmcr);
3366 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
3368 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
3374 static int tg3_setup_phy(struct tg3 *tp, int force_reset)
3376 int err;
3378 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
3379 err = tg3_setup_fiber_phy(tp, force_reset);
3380 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
3381 err = tg3_setup_fiber_mii_phy(tp, force_reset);
3382 } else {
3383 err = tg3_setup_copper_phy(tp, force_reset);
3386 if (tp->pci_chip_rev_id == CHIPREV_ID_5784_A0 ||
3387 tp->pci_chip_rev_id == CHIPREV_ID_5784_A1) {
3388 u32 val, scale;
3390 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
3391 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
3392 scale = 65;
3393 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
3394 scale = 6;
3395 else
3396 scale = 12;
3398 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
3399 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
3400 tw32(GRC_MISC_CFG, val);
3403 if (tp->link_config.active_speed == SPEED_1000 &&
3404 tp->link_config.active_duplex == DUPLEX_HALF)
3405 tw32(MAC_TX_LENGTHS,
3406 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
3407 (6 << TX_LENGTHS_IPG_SHIFT) |
3408 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
3409 else
3410 tw32(MAC_TX_LENGTHS,
3411 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
3412 (6 << TX_LENGTHS_IPG_SHIFT) |
3413 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
3415 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
3416 if (netif_carrier_ok(tp->dev)) {
3417 tw32(HOSTCC_STAT_COAL_TICKS,
3418 tp->coal.stats_block_coalesce_usecs);
3419 } else {
3420 tw32(HOSTCC_STAT_COAL_TICKS, 0);
3424 if (tp->tg3_flags & TG3_FLAG_ASPM_WORKAROUND) {
3425 u32 val = tr32(PCIE_PWR_MGMT_THRESH);
3426 if (!netif_carrier_ok(tp->dev))
3427 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
3428 tp->pwrmgmt_thresh;
3429 else
3430 val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
3431 tw32(PCIE_PWR_MGMT_THRESH, val);
3434 return err;
3437 /* This is called whenever we suspect that the system chipset is re-
3438 * ordering the sequence of MMIO to the tx send mailbox. The symptom
3439 * is bogus tx completions. We try to recover by setting the
3440 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
3441 * in the workqueue.
3443 static void tg3_tx_recover(struct tg3 *tp)
3445 BUG_ON((tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) ||
3446 tp->write32_tx_mbox == tg3_write_indirect_mbox);
3448 printk(KERN_WARNING PFX "%s: The system may be re-ordering memory-"
3449 "mapped I/O cycles to the network device, attempting to "
3450 "recover. Please report the problem to the driver maintainer "
3451 "and include system chipset information.\n", tp->dev->name);
3453 spin_lock(&tp->lock);
3454 tp->tg3_flags |= TG3_FLAG_TX_RECOVERY_PENDING;
3455 spin_unlock(&tp->lock);
3458 static inline u32 tg3_tx_avail(struct tg3 *tp)
3460 smp_mb();
3461 return (tp->tx_pending -
3462 ((tp->tx_prod - tp->tx_cons) & (TG3_TX_RING_SIZE - 1)));
3465 /* Tigon3 never reports partial packet sends. So we do not
3466 * need special logic to handle SKBs that have not had all
3467 * of their frags sent yet, like SunGEM does.
3469 static void tg3_tx(struct tg3 *tp)
3471 u32 hw_idx = tp->hw_status->idx[0].tx_consumer;
3472 u32 sw_idx = tp->tx_cons;
3474 while (sw_idx != hw_idx) {
3475 struct tx_ring_info *ri = &tp->tx_buffers[sw_idx];
3476 struct sk_buff *skb = ri->skb;
3477 int i, tx_bug = 0;
3479 if (unlikely(skb == NULL)) {
3480 tg3_tx_recover(tp);
3481 return;
3484 pci_unmap_single(tp->pdev,
3485 pci_unmap_addr(ri, mapping),
3486 skb_headlen(skb),
3487 PCI_DMA_TODEVICE);
3489 ri->skb = NULL;
3491 sw_idx = NEXT_TX(sw_idx);
3493 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
3494 ri = &tp->tx_buffers[sw_idx];
3495 if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
3496 tx_bug = 1;
3498 pci_unmap_page(tp->pdev,
3499 pci_unmap_addr(ri, mapping),
3500 skb_shinfo(skb)->frags[i].size,
3501 PCI_DMA_TODEVICE);
3503 sw_idx = NEXT_TX(sw_idx);
3506 dev_kfree_skb(skb);
3508 if (unlikely(tx_bug)) {
3509 tg3_tx_recover(tp);
3510 return;
3514 tp->tx_cons = sw_idx;
3516 /* Need to make the tx_cons update visible to tg3_start_xmit()
3517 * before checking for netif_queue_stopped(). Without the
3518 * memory barrier, there is a small possibility that tg3_start_xmit()
3519 * will miss it and cause the queue to be stopped forever.
3521 smp_mb();
3523 if (unlikely(netif_queue_stopped(tp->dev) &&
3524 (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp)))) {
3525 netif_tx_lock(tp->dev);
3526 if (netif_queue_stopped(tp->dev) &&
3527 (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp)))
3528 netif_wake_queue(tp->dev);
3529 netif_tx_unlock(tp->dev);
3533 /* Returns size of skb allocated or < 0 on error.
3535 * We only need to fill in the address because the other members
3536 * of the RX descriptor are invariant, see tg3_init_rings.
3538 * Note the purposeful assymetry of cpu vs. chip accesses. For
3539 * posting buffers we only dirty the first cache line of the RX
3540 * descriptor (containing the address). Whereas for the RX status
3541 * buffers the cpu only reads the last cacheline of the RX descriptor
3542 * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
3544 static int tg3_alloc_rx_skb(struct tg3 *tp, u32 opaque_key,
3545 int src_idx, u32 dest_idx_unmasked)
3547 struct tg3_rx_buffer_desc *desc;
3548 struct ring_info *map, *src_map;
3549 struct sk_buff *skb;
3550 dma_addr_t mapping;
3551 int skb_size, dest_idx;
3553 src_map = NULL;
3554 switch (opaque_key) {
3555 case RXD_OPAQUE_RING_STD:
3556 dest_idx = dest_idx_unmasked % TG3_RX_RING_SIZE;
3557 desc = &tp->rx_std[dest_idx];
3558 map = &tp->rx_std_buffers[dest_idx];
3559 if (src_idx >= 0)
3560 src_map = &tp->rx_std_buffers[src_idx];
3561 skb_size = tp->rx_pkt_buf_sz;
3562 break;
3564 case RXD_OPAQUE_RING_JUMBO:
3565 dest_idx = dest_idx_unmasked % TG3_RX_JUMBO_RING_SIZE;
3566 desc = &tp->rx_jumbo[dest_idx];
3567 map = &tp->rx_jumbo_buffers[dest_idx];
3568 if (src_idx >= 0)
3569 src_map = &tp->rx_jumbo_buffers[src_idx];
3570 skb_size = RX_JUMBO_PKT_BUF_SZ;
3571 break;
3573 default:
3574 return -EINVAL;
3577 /* Do not overwrite any of the map or rp information
3578 * until we are sure we can commit to a new buffer.
3580 * Callers depend upon this behavior and assume that
3581 * we leave everything unchanged if we fail.
3583 skb = netdev_alloc_skb(tp->dev, skb_size);
3584 if (skb == NULL)
3585 return -ENOMEM;
3587 skb_reserve(skb, tp->rx_offset);
3589 mapping = pci_map_single(tp->pdev, skb->data,
3590 skb_size - tp->rx_offset,
3591 PCI_DMA_FROMDEVICE);
3593 map->skb = skb;
3594 pci_unmap_addr_set(map, mapping, mapping);
3596 if (src_map != NULL)
3597 src_map->skb = NULL;
3599 desc->addr_hi = ((u64)mapping >> 32);
3600 desc->addr_lo = ((u64)mapping & 0xffffffff);
3602 return skb_size;
3605 /* We only need to move over in the address because the other
3606 * members of the RX descriptor are invariant. See notes above
3607 * tg3_alloc_rx_skb for full details.
3609 static void tg3_recycle_rx(struct tg3 *tp, u32 opaque_key,
3610 int src_idx, u32 dest_idx_unmasked)
3612 struct tg3_rx_buffer_desc *src_desc, *dest_desc;
3613 struct ring_info *src_map, *dest_map;
3614 int dest_idx;
3616 switch (opaque_key) {
3617 case RXD_OPAQUE_RING_STD:
3618 dest_idx = dest_idx_unmasked % TG3_RX_RING_SIZE;
3619 dest_desc = &tp->rx_std[dest_idx];
3620 dest_map = &tp->rx_std_buffers[dest_idx];
3621 src_desc = &tp->rx_std[src_idx];
3622 src_map = &tp->rx_std_buffers[src_idx];
3623 break;
3625 case RXD_OPAQUE_RING_JUMBO:
3626 dest_idx = dest_idx_unmasked % TG3_RX_JUMBO_RING_SIZE;
3627 dest_desc = &tp->rx_jumbo[dest_idx];
3628 dest_map = &tp->rx_jumbo_buffers[dest_idx];
3629 src_desc = &tp->rx_jumbo[src_idx];
3630 src_map = &tp->rx_jumbo_buffers[src_idx];
3631 break;
3633 default:
3634 return;
3637 dest_map->skb = src_map->skb;
3638 pci_unmap_addr_set(dest_map, mapping,
3639 pci_unmap_addr(src_map, mapping));
3640 dest_desc->addr_hi = src_desc->addr_hi;
3641 dest_desc->addr_lo = src_desc->addr_lo;
3643 src_map->skb = NULL;
3646 #if TG3_VLAN_TAG_USED
3647 static int tg3_vlan_rx(struct tg3 *tp, struct sk_buff *skb, u16 vlan_tag)
3649 return vlan_hwaccel_receive_skb(skb, tp->vlgrp, vlan_tag);
3651 #endif
3653 /* The RX ring scheme is composed of multiple rings which post fresh
3654 * buffers to the chip, and one special ring the chip uses to report
3655 * status back to the host.
3657 * The special ring reports the status of received packets to the
3658 * host. The chip does not write into the original descriptor the
3659 * RX buffer was obtained from. The chip simply takes the original
3660 * descriptor as provided by the host, updates the status and length
3661 * field, then writes this into the next status ring entry.
3663 * Each ring the host uses to post buffers to the chip is described
3664 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives,
3665 * it is first placed into the on-chip ram. When the packet's length
3666 * is known, it walks down the TG3_BDINFO entries to select the ring.
3667 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
3668 * which is within the range of the new packet's length is chosen.
3670 * The "separate ring for rx status" scheme may sound queer, but it makes
3671 * sense from a cache coherency perspective. If only the host writes
3672 * to the buffer post rings, and only the chip writes to the rx status
3673 * rings, then cache lines never move beyond shared-modified state.
3674 * If both the host and chip were to write into the same ring, cache line
3675 * eviction could occur since both entities want it in an exclusive state.
3677 static int tg3_rx(struct tg3 *tp, int budget)
3679 u32 work_mask, rx_std_posted = 0;
3680 u32 sw_idx = tp->rx_rcb_ptr;
3681 u16 hw_idx;
3682 int received;
3684 hw_idx = tp->hw_status->idx[0].rx_producer;
3686 * We need to order the read of hw_idx and the read of
3687 * the opaque cookie.
3689 rmb();
3690 work_mask = 0;
3691 received = 0;
3692 while (sw_idx != hw_idx && budget > 0) {
3693 struct tg3_rx_buffer_desc *desc = &tp->rx_rcb[sw_idx];
3694 unsigned int len;
3695 struct sk_buff *skb;
3696 dma_addr_t dma_addr;
3697 u32 opaque_key, desc_idx, *post_ptr;
3699 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
3700 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
3701 if (opaque_key == RXD_OPAQUE_RING_STD) {
3702 dma_addr = pci_unmap_addr(&tp->rx_std_buffers[desc_idx],
3703 mapping);
3704 skb = tp->rx_std_buffers[desc_idx].skb;
3705 post_ptr = &tp->rx_std_ptr;
3706 rx_std_posted++;
3707 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
3708 dma_addr = pci_unmap_addr(&tp->rx_jumbo_buffers[desc_idx],
3709 mapping);
3710 skb = tp->rx_jumbo_buffers[desc_idx].skb;
3711 post_ptr = &tp->rx_jumbo_ptr;
3713 else {
3714 goto next_pkt_nopost;
3717 work_mask |= opaque_key;
3719 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
3720 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
3721 drop_it:
3722 tg3_recycle_rx(tp, opaque_key,
3723 desc_idx, *post_ptr);
3724 drop_it_no_recycle:
3725 /* Other statistics kept track of by card. */
3726 tp->net_stats.rx_dropped++;
3727 goto next_pkt;
3730 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4; /* omit crc */
3732 if (len > RX_COPY_THRESHOLD
3733 && tp->rx_offset == 2
3734 /* rx_offset != 2 iff this is a 5701 card running
3735 * in PCI-X mode [see tg3_get_invariants()] */
3737 int skb_size;
3739 skb_size = tg3_alloc_rx_skb(tp, opaque_key,
3740 desc_idx, *post_ptr);
3741 if (skb_size < 0)
3742 goto drop_it;
3744 pci_unmap_single(tp->pdev, dma_addr,
3745 skb_size - tp->rx_offset,
3746 PCI_DMA_FROMDEVICE);
3748 skb_put(skb, len);
3749 } else {
3750 struct sk_buff *copy_skb;
3752 tg3_recycle_rx(tp, opaque_key,
3753 desc_idx, *post_ptr);
3755 copy_skb = netdev_alloc_skb(tp->dev, len + 2);
3756 if (copy_skb == NULL)
3757 goto drop_it_no_recycle;
3759 skb_reserve(copy_skb, 2);
3760 skb_put(copy_skb, len);
3761 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
3762 skb_copy_from_linear_data(skb, copy_skb->data, len);
3763 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
3765 /* We'll reuse the original ring buffer. */
3766 skb = copy_skb;
3769 if ((tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) &&
3770 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
3771 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
3772 >> RXD_TCPCSUM_SHIFT) == 0xffff))
3773 skb->ip_summed = CHECKSUM_UNNECESSARY;
3774 else
3775 skb->ip_summed = CHECKSUM_NONE;
3777 skb->protocol = eth_type_trans(skb, tp->dev);
3778 #if TG3_VLAN_TAG_USED
3779 if (tp->vlgrp != NULL &&
3780 desc->type_flags & RXD_FLAG_VLAN) {
3781 tg3_vlan_rx(tp, skb,
3782 desc->err_vlan & RXD_VLAN_MASK);
3783 } else
3784 #endif
3785 netif_receive_skb(skb);
3787 tp->dev->last_rx = jiffies;
3788 received++;
3789 budget--;
3791 next_pkt:
3792 (*post_ptr)++;
3794 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
3795 u32 idx = *post_ptr % TG3_RX_RING_SIZE;
3797 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX +
3798 TG3_64BIT_REG_LOW, idx);
3799 work_mask &= ~RXD_OPAQUE_RING_STD;
3800 rx_std_posted = 0;
3802 next_pkt_nopost:
3803 sw_idx++;
3804 sw_idx &= (TG3_RX_RCB_RING_SIZE(tp) - 1);
3806 /* Refresh hw_idx to see if there is new work */
3807 if (sw_idx == hw_idx) {
3808 hw_idx = tp->hw_status->idx[0].rx_producer;
3809 rmb();
3813 /* ACK the status ring. */
3814 tp->rx_rcb_ptr = sw_idx;
3815 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, sw_idx);
3817 /* Refill RX ring(s). */
3818 if (work_mask & RXD_OPAQUE_RING_STD) {
3819 sw_idx = tp->rx_std_ptr % TG3_RX_RING_SIZE;
3820 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW,
3821 sw_idx);
3823 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
3824 sw_idx = tp->rx_jumbo_ptr % TG3_RX_JUMBO_RING_SIZE;
3825 tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW,
3826 sw_idx);
3828 mmiowb();
3830 return received;
3833 static int tg3_poll_work(struct tg3 *tp, int work_done, int budget)
3835 struct tg3_hw_status *sblk = tp->hw_status;
3837 /* handle link change and other phy events */
3838 if (!(tp->tg3_flags &
3839 (TG3_FLAG_USE_LINKCHG_REG |
3840 TG3_FLAG_POLL_SERDES))) {
3841 if (sblk->status & SD_STATUS_LINK_CHG) {
3842 sblk->status = SD_STATUS_UPDATED |
3843 (sblk->status & ~SD_STATUS_LINK_CHG);
3844 spin_lock(&tp->lock);
3845 tg3_setup_phy(tp, 0);
3846 spin_unlock(&tp->lock);
3850 /* run TX completion thread */
3851 if (sblk->idx[0].tx_consumer != tp->tx_cons) {
3852 tg3_tx(tp);
3853 if (unlikely(tp->tg3_flags & TG3_FLAG_TX_RECOVERY_PENDING))
3854 return work_done;
3857 /* run RX thread, within the bounds set by NAPI.
3858 * All RX "locking" is done by ensuring outside
3859 * code synchronizes with tg3->napi.poll()
3861 if (sblk->idx[0].rx_producer != tp->rx_rcb_ptr)
3862 work_done += tg3_rx(tp, budget - work_done);
3864 return work_done;
3867 static int tg3_poll(struct napi_struct *napi, int budget)
3869 struct tg3 *tp = container_of(napi, struct tg3, napi);
3870 int work_done = 0;
3871 struct tg3_hw_status *sblk = tp->hw_status;
3873 while (1) {
3874 work_done = tg3_poll_work(tp, work_done, budget);
3876 if (unlikely(tp->tg3_flags & TG3_FLAG_TX_RECOVERY_PENDING))
3877 goto tx_recovery;
3879 if (unlikely(work_done >= budget))
3880 break;
3882 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) {
3883 /* tp->last_tag is used in tg3_restart_ints() below
3884 * to tell the hw how much work has been processed,
3885 * so we must read it before checking for more work.
3887 tp->last_tag = sblk->status_tag;
3888 rmb();
3889 } else
3890 sblk->status &= ~SD_STATUS_UPDATED;
3892 if (likely(!tg3_has_work(tp))) {
3893 netif_rx_complete(tp->dev, napi);
3894 tg3_restart_ints(tp);
3895 break;
3899 return work_done;
3901 tx_recovery:
3902 /* work_done is guaranteed to be less than budget. */
3903 netif_rx_complete(tp->dev, napi);
3904 schedule_work(&tp->reset_task);
3905 return work_done;
3908 static void tg3_irq_quiesce(struct tg3 *tp)
3910 BUG_ON(tp->irq_sync);
3912 tp->irq_sync = 1;
3913 smp_mb();
3915 synchronize_irq(tp->pdev->irq);
3918 static inline int tg3_irq_sync(struct tg3 *tp)
3920 return tp->irq_sync;
3923 /* Fully shutdown all tg3 driver activity elsewhere in the system.
3924 * If irq_sync is non-zero, then the IRQ handler must be synchronized
3925 * with as well. Most of the time, this is not necessary except when
3926 * shutting down the device.
3928 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
3930 spin_lock_bh(&tp->lock);
3931 if (irq_sync)
3932 tg3_irq_quiesce(tp);
3935 static inline void tg3_full_unlock(struct tg3 *tp)
3937 spin_unlock_bh(&tp->lock);
3940 /* One-shot MSI handler - Chip automatically disables interrupt
3941 * after sending MSI so driver doesn't have to do it.
3943 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
3945 struct net_device *dev = dev_id;
3946 struct tg3 *tp = netdev_priv(dev);
3948 prefetch(tp->hw_status);
3949 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3951 if (likely(!tg3_irq_sync(tp)))
3952 netif_rx_schedule(dev, &tp->napi);
3954 return IRQ_HANDLED;
3957 /* MSI ISR - No need to check for interrupt sharing and no need to
3958 * flush status block and interrupt mailbox. PCI ordering rules
3959 * guarantee that MSI will arrive after the status block.
3961 static irqreturn_t tg3_msi(int irq, void *dev_id)
3963 struct net_device *dev = dev_id;
3964 struct tg3 *tp = netdev_priv(dev);
3966 prefetch(tp->hw_status);
3967 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3969 * Writing any value to intr-mbox-0 clears PCI INTA# and
3970 * chip-internal interrupt pending events.
3971 * Writing non-zero to intr-mbox-0 additional tells the
3972 * NIC to stop sending us irqs, engaging "in-intr-handler"
3973 * event coalescing.
3975 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
3976 if (likely(!tg3_irq_sync(tp)))
3977 netif_rx_schedule(dev, &tp->napi);
3979 return IRQ_RETVAL(1);
3982 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
3984 struct net_device *dev = dev_id;
3985 struct tg3 *tp = netdev_priv(dev);
3986 struct tg3_hw_status *sblk = tp->hw_status;
3987 unsigned int handled = 1;
3989 /* In INTx mode, it is possible for the interrupt to arrive at
3990 * the CPU before the status block posted prior to the interrupt.
3991 * Reading the PCI State register will confirm whether the
3992 * interrupt is ours and will flush the status block.
3994 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
3995 if ((tp->tg3_flags & TG3_FLAG_CHIP_RESETTING) ||
3996 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3997 handled = 0;
3998 goto out;
4003 * Writing any value to intr-mbox-0 clears PCI INTA# and
4004 * chip-internal interrupt pending events.
4005 * Writing non-zero to intr-mbox-0 additional tells the
4006 * NIC to stop sending us irqs, engaging "in-intr-handler"
4007 * event coalescing.
4009 * Flush the mailbox to de-assert the IRQ immediately to prevent
4010 * spurious interrupts. The flush impacts performance but
4011 * excessive spurious interrupts can be worse in some cases.
4013 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
4014 if (tg3_irq_sync(tp))
4015 goto out;
4016 sblk->status &= ~SD_STATUS_UPDATED;
4017 if (likely(tg3_has_work(tp))) {
4018 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
4019 netif_rx_schedule(dev, &tp->napi);
4020 } else {
4021 /* No work, shared interrupt perhaps? re-enable
4022 * interrupts, and flush that PCI write
4024 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
4025 0x00000000);
4027 out:
4028 return IRQ_RETVAL(handled);
4031 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
4033 struct net_device *dev = dev_id;
4034 struct tg3 *tp = netdev_priv(dev);
4035 struct tg3_hw_status *sblk = tp->hw_status;
4036 unsigned int handled = 1;
4038 /* In INTx mode, it is possible for the interrupt to arrive at
4039 * the CPU before the status block posted prior to the interrupt.
4040 * Reading the PCI State register will confirm whether the
4041 * interrupt is ours and will flush the status block.
4043 if (unlikely(sblk->status_tag == tp->last_tag)) {
4044 if ((tp->tg3_flags & TG3_FLAG_CHIP_RESETTING) ||
4045 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
4046 handled = 0;
4047 goto out;
4052 * writing any value to intr-mbox-0 clears PCI INTA# and
4053 * chip-internal interrupt pending events.
4054 * writing non-zero to intr-mbox-0 additional tells the
4055 * NIC to stop sending us irqs, engaging "in-intr-handler"
4056 * event coalescing.
4058 * Flush the mailbox to de-assert the IRQ immediately to prevent
4059 * spurious interrupts. The flush impacts performance but
4060 * excessive spurious interrupts can be worse in some cases.
4062 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
4063 if (tg3_irq_sync(tp))
4064 goto out;
4065 if (netif_rx_schedule_prep(dev, &tp->napi)) {
4066 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
4067 /* Update last_tag to mark that this status has been
4068 * seen. Because interrupt may be shared, we may be
4069 * racing with tg3_poll(), so only update last_tag
4070 * if tg3_poll() is not scheduled.
4072 tp->last_tag = sblk->status_tag;
4073 __netif_rx_schedule(dev, &tp->napi);
4075 out:
4076 return IRQ_RETVAL(handled);
4079 /* ISR for interrupt test */
4080 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
4082 struct net_device *dev = dev_id;
4083 struct tg3 *tp = netdev_priv(dev);
4084 struct tg3_hw_status *sblk = tp->hw_status;
4086 if ((sblk->status & SD_STATUS_UPDATED) ||
4087 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
4088 tg3_disable_ints(tp);
4089 return IRQ_RETVAL(1);
4091 return IRQ_RETVAL(0);
4094 static int tg3_init_hw(struct tg3 *, int);
4095 static int tg3_halt(struct tg3 *, int, int);
4097 /* Restart hardware after configuration changes, self-test, etc.
4098 * Invoked with tp->lock held.
4100 static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
4101 __releases(tp->lock)
4102 __acquires(tp->lock)
4104 int err;
4106 err = tg3_init_hw(tp, reset_phy);
4107 if (err) {
4108 printk(KERN_ERR PFX "%s: Failed to re-initialize device, "
4109 "aborting.\n", tp->dev->name);
4110 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
4111 tg3_full_unlock(tp);
4112 del_timer_sync(&tp->timer);
4113 tp->irq_sync = 0;
4114 napi_enable(&tp->napi);
4115 dev_close(tp->dev);
4116 tg3_full_lock(tp, 0);
4118 return err;
4121 #ifdef CONFIG_NET_POLL_CONTROLLER
4122 static void tg3_poll_controller(struct net_device *dev)
4124 struct tg3 *tp = netdev_priv(dev);
4126 tg3_interrupt(tp->pdev->irq, dev);
4128 #endif
4130 static void tg3_reset_task(struct work_struct *work)
4132 struct tg3 *tp = container_of(work, struct tg3, reset_task);
4133 unsigned int restart_timer;
4135 tg3_full_lock(tp, 0);
4137 if (!netif_running(tp->dev)) {
4138 tg3_full_unlock(tp);
4139 return;
4142 tg3_full_unlock(tp);
4144 tg3_netif_stop(tp);
4146 tg3_full_lock(tp, 1);
4148 restart_timer = tp->tg3_flags2 & TG3_FLG2_RESTART_TIMER;
4149 tp->tg3_flags2 &= ~TG3_FLG2_RESTART_TIMER;
4151 if (tp->tg3_flags & TG3_FLAG_TX_RECOVERY_PENDING) {
4152 tp->write32_tx_mbox = tg3_write32_tx_mbox;
4153 tp->write32_rx_mbox = tg3_write_flush_reg32;
4154 tp->tg3_flags |= TG3_FLAG_MBOX_WRITE_REORDER;
4155 tp->tg3_flags &= ~TG3_FLAG_TX_RECOVERY_PENDING;
4158 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
4159 if (tg3_init_hw(tp, 1))
4160 goto out;
4162 tg3_netif_start(tp);
4164 if (restart_timer)
4165 mod_timer(&tp->timer, jiffies + 1);
4167 out:
4168 tg3_full_unlock(tp);
4171 static void tg3_dump_short_state(struct tg3 *tp)
4173 printk(KERN_ERR PFX "DEBUG: MAC_TX_STATUS[%08x] MAC_RX_STATUS[%08x]\n",
4174 tr32(MAC_TX_STATUS), tr32(MAC_RX_STATUS));
4175 printk(KERN_ERR PFX "DEBUG: RDMAC_STATUS[%08x] WDMAC_STATUS[%08x]\n",
4176 tr32(RDMAC_STATUS), tr32(WDMAC_STATUS));
4179 static void tg3_tx_timeout(struct net_device *dev)
4181 struct tg3 *tp = netdev_priv(dev);
4183 if (netif_msg_tx_err(tp)) {
4184 printk(KERN_ERR PFX "%s: transmit timed out, resetting\n",
4185 dev->name);
4186 tg3_dump_short_state(tp);
4189 schedule_work(&tp->reset_task);
4192 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
4193 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
4195 u32 base = (u32) mapping & 0xffffffff;
4197 return ((base > 0xffffdcc0) &&
4198 (base + len + 8 < base));
4201 /* Test for DMA addresses > 40-bit */
4202 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
4203 int len)
4205 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
4206 if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG)
4207 return (((u64) mapping + len) > DMA_40BIT_MASK);
4208 return 0;
4209 #else
4210 return 0;
4211 #endif
4214 static void tg3_set_txd(struct tg3 *, int, dma_addr_t, int, u32, u32);
4216 /* Workaround 4GB and 40-bit hardware DMA bugs. */
4217 static int tigon3_dma_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb,
4218 u32 last_plus_one, u32 *start,
4219 u32 base_flags, u32 mss)
4221 struct sk_buff *new_skb;
4222 dma_addr_t new_addr = 0;
4223 u32 entry = *start;
4224 int i, ret = 0;
4226 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
4227 new_skb = skb_copy(skb, GFP_ATOMIC);
4228 else {
4229 int more_headroom = 4 - ((unsigned long)skb->data & 3);
4231 new_skb = skb_copy_expand(skb,
4232 skb_headroom(skb) + more_headroom,
4233 skb_tailroom(skb), GFP_ATOMIC);
4236 if (!new_skb) {
4237 ret = -1;
4238 } else {
4239 /* New SKB is guaranteed to be linear. */
4240 entry = *start;
4241 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
4242 PCI_DMA_TODEVICE);
4243 /* Make sure new skb does not cross any 4G boundaries.
4244 * Drop the packet if it does.
4246 if (tg3_4g_overflow_test(new_addr, new_skb->len)) {
4247 ret = -1;
4248 dev_kfree_skb(new_skb);
4249 new_skb = NULL;
4250 } else {
4251 tg3_set_txd(tp, entry, new_addr, new_skb->len,
4252 base_flags, 1 | (mss << 1));
4253 *start = NEXT_TX(entry);
4257 /* Now clean up the sw ring entries. */
4258 i = 0;
4259 while (entry != last_plus_one) {
4260 int len;
4262 if (i == 0)
4263 len = skb_headlen(skb);
4264 else
4265 len = skb_shinfo(skb)->frags[i-1].size;
4266 pci_unmap_single(tp->pdev,
4267 pci_unmap_addr(&tp->tx_buffers[entry], mapping),
4268 len, PCI_DMA_TODEVICE);
4269 if (i == 0) {
4270 tp->tx_buffers[entry].skb = new_skb;
4271 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, new_addr);
4272 } else {
4273 tp->tx_buffers[entry].skb = NULL;
4275 entry = NEXT_TX(entry);
4276 i++;
4279 dev_kfree_skb(skb);
4281 return ret;
4284 static void tg3_set_txd(struct tg3 *tp, int entry,
4285 dma_addr_t mapping, int len, u32 flags,
4286 u32 mss_and_is_end)
4288 struct tg3_tx_buffer_desc *txd = &tp->tx_ring[entry];
4289 int is_end = (mss_and_is_end & 0x1);
4290 u32 mss = (mss_and_is_end >> 1);
4291 u32 vlan_tag = 0;
4293 if (is_end)
4294 flags |= TXD_FLAG_END;
4295 if (flags & TXD_FLAG_VLAN) {
4296 vlan_tag = flags >> 16;
4297 flags &= 0xffff;
4299 vlan_tag |= (mss << TXD_MSS_SHIFT);
4301 txd->addr_hi = ((u64) mapping >> 32);
4302 txd->addr_lo = ((u64) mapping & 0xffffffff);
4303 txd->len_flags = (len << TXD_LEN_SHIFT) | flags;
4304 txd->vlan_tag = vlan_tag << TXD_VLAN_TAG_SHIFT;
4307 /* hard_start_xmit for devices that don't have any bugs and
4308 * support TG3_FLG2_HW_TSO_2 only.
4310 static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
4312 struct tg3 *tp = netdev_priv(dev);
4313 dma_addr_t mapping;
4314 u32 len, entry, base_flags, mss;
4316 len = skb_headlen(skb);
4318 /* We are running in BH disabled context with netif_tx_lock
4319 * and TX reclaim runs via tp->napi.poll inside of a software
4320 * interrupt. Furthermore, IRQ processing runs lockless so we have
4321 * no IRQ context deadlocks to worry about either. Rejoice!
4323 if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
4324 if (!netif_queue_stopped(dev)) {
4325 netif_stop_queue(dev);
4327 /* This is a hard error, log it. */
4328 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when "
4329 "queue awake!\n", dev->name);
4331 return NETDEV_TX_BUSY;
4334 entry = tp->tx_prod;
4335 base_flags = 0;
4336 mss = 0;
4337 if ((mss = skb_shinfo(skb)->gso_size) != 0) {
4338 int tcp_opt_len, ip_tcp_len;
4340 if (skb_header_cloned(skb) &&
4341 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
4342 dev_kfree_skb(skb);
4343 goto out_unlock;
4346 if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
4347 mss |= (skb_headlen(skb) - ETH_HLEN) << 9;
4348 else {
4349 struct iphdr *iph = ip_hdr(skb);
4351 tcp_opt_len = tcp_optlen(skb);
4352 ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr);
4354 iph->check = 0;
4355 iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len);
4356 mss |= (ip_tcp_len + tcp_opt_len) << 9;
4359 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
4360 TXD_FLAG_CPU_POST_DMA);
4362 tcp_hdr(skb)->check = 0;
4365 else if (skb->ip_summed == CHECKSUM_PARTIAL)
4366 base_flags |= TXD_FLAG_TCPUDP_CSUM;
4367 #if TG3_VLAN_TAG_USED
4368 if (tp->vlgrp != NULL && vlan_tx_tag_present(skb))
4369 base_flags |= (TXD_FLAG_VLAN |
4370 (vlan_tx_tag_get(skb) << 16));
4371 #endif
4373 /* Queue skb data, a.k.a. the main skb fragment. */
4374 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
4376 tp->tx_buffers[entry].skb = skb;
4377 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4379 tg3_set_txd(tp, entry, mapping, len, base_flags,
4380 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
4382 entry = NEXT_TX(entry);
4384 /* Now loop through additional data fragments, and queue them. */
4385 if (skb_shinfo(skb)->nr_frags > 0) {
4386 unsigned int i, last;
4388 last = skb_shinfo(skb)->nr_frags - 1;
4389 for (i = 0; i <= last; i++) {
4390 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4392 len = frag->size;
4393 mapping = pci_map_page(tp->pdev,
4394 frag->page,
4395 frag->page_offset,
4396 len, PCI_DMA_TODEVICE);
4398 tp->tx_buffers[entry].skb = NULL;
4399 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4401 tg3_set_txd(tp, entry, mapping, len,
4402 base_flags, (i == last) | (mss << 1));
4404 entry = NEXT_TX(entry);
4408 /* Packets are ready, update Tx producer idx local and on card. */
4409 tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
4411 tp->tx_prod = entry;
4412 if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
4413 netif_stop_queue(dev);
4414 if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp))
4415 netif_wake_queue(tp->dev);
4418 out_unlock:
4419 mmiowb();
4421 dev->trans_start = jiffies;
4423 return NETDEV_TX_OK;
4426 static int tg3_start_xmit_dma_bug(struct sk_buff *, struct net_device *);
4428 /* Use GSO to workaround a rare TSO bug that may be triggered when the
4429 * TSO header is greater than 80 bytes.
4431 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
4433 struct sk_buff *segs, *nskb;
4435 /* Estimate the number of fragments in the worst case */
4436 if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->gso_segs * 3))) {
4437 netif_stop_queue(tp->dev);
4438 if (tg3_tx_avail(tp) <= (skb_shinfo(skb)->gso_segs * 3))
4439 return NETDEV_TX_BUSY;
4441 netif_wake_queue(tp->dev);
4444 segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
4445 if (IS_ERR(segs))
4446 goto tg3_tso_bug_end;
4448 do {
4449 nskb = segs;
4450 segs = segs->next;
4451 nskb->next = NULL;
4452 tg3_start_xmit_dma_bug(nskb, tp->dev);
4453 } while (segs);
4455 tg3_tso_bug_end:
4456 dev_kfree_skb(skb);
4458 return NETDEV_TX_OK;
4461 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
4462 * support TG3_FLG2_HW_TSO_1 or firmware TSO only.
4464 static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
4466 struct tg3 *tp = netdev_priv(dev);
4467 dma_addr_t mapping;
4468 u32 len, entry, base_flags, mss;
4469 int would_hit_hwbug;
4471 len = skb_headlen(skb);
4473 /* We are running in BH disabled context with netif_tx_lock
4474 * and TX reclaim runs via tp->napi.poll inside of a software
4475 * interrupt. Furthermore, IRQ processing runs lockless so we have
4476 * no IRQ context deadlocks to worry about either. Rejoice!
4478 if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
4479 if (!netif_queue_stopped(dev)) {
4480 netif_stop_queue(dev);
4482 /* This is a hard error, log it. */
4483 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when "
4484 "queue awake!\n", dev->name);
4486 return NETDEV_TX_BUSY;
4489 entry = tp->tx_prod;
4490 base_flags = 0;
4491 if (skb->ip_summed == CHECKSUM_PARTIAL)
4492 base_flags |= TXD_FLAG_TCPUDP_CSUM;
4493 mss = 0;
4494 if ((mss = skb_shinfo(skb)->gso_size) != 0) {
4495 struct iphdr *iph;
4496 int tcp_opt_len, ip_tcp_len, hdr_len;
4498 if (skb_header_cloned(skb) &&
4499 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
4500 dev_kfree_skb(skb);
4501 goto out_unlock;
4504 tcp_opt_len = tcp_optlen(skb);
4505 ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr);
4507 hdr_len = ip_tcp_len + tcp_opt_len;
4508 if (unlikely((ETH_HLEN + hdr_len) > 80) &&
4509 (tp->tg3_flags2 & TG3_FLG2_TSO_BUG))
4510 return (tg3_tso_bug(tp, skb));
4512 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
4513 TXD_FLAG_CPU_POST_DMA);
4515 iph = ip_hdr(skb);
4516 iph->check = 0;
4517 iph->tot_len = htons(mss + hdr_len);
4518 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
4519 tcp_hdr(skb)->check = 0;
4520 base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
4521 } else
4522 tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
4523 iph->daddr, 0,
4524 IPPROTO_TCP,
4527 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO) ||
4528 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) {
4529 if (tcp_opt_len || iph->ihl > 5) {
4530 int tsflags;
4532 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
4533 mss |= (tsflags << 11);
4535 } else {
4536 if (tcp_opt_len || iph->ihl > 5) {
4537 int tsflags;
4539 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
4540 base_flags |= tsflags << 12;
4544 #if TG3_VLAN_TAG_USED
4545 if (tp->vlgrp != NULL && vlan_tx_tag_present(skb))
4546 base_flags |= (TXD_FLAG_VLAN |
4547 (vlan_tx_tag_get(skb) << 16));
4548 #endif
4550 /* Queue skb data, a.k.a. the main skb fragment. */
4551 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
4553 tp->tx_buffers[entry].skb = skb;
4554 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4556 would_hit_hwbug = 0;
4558 if (tp->tg3_flags3 & TG3_FLG3_5701_DMA_BUG)
4559 would_hit_hwbug = 1;
4560 else if (tg3_4g_overflow_test(mapping, len))
4561 would_hit_hwbug = 1;
4563 tg3_set_txd(tp, entry, mapping, len, base_flags,
4564 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
4566 entry = NEXT_TX(entry);
4568 /* Now loop through additional data fragments, and queue them. */
4569 if (skb_shinfo(skb)->nr_frags > 0) {
4570 unsigned int i, last;
4572 last = skb_shinfo(skb)->nr_frags - 1;
4573 for (i = 0; i <= last; i++) {
4574 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4576 len = frag->size;
4577 mapping = pci_map_page(tp->pdev,
4578 frag->page,
4579 frag->page_offset,
4580 len, PCI_DMA_TODEVICE);
4582 tp->tx_buffers[entry].skb = NULL;
4583 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4585 if (tg3_4g_overflow_test(mapping, len))
4586 would_hit_hwbug = 1;
4588 if (tg3_40bit_overflow_test(tp, mapping, len))
4589 would_hit_hwbug = 1;
4591 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
4592 tg3_set_txd(tp, entry, mapping, len,
4593 base_flags, (i == last)|(mss << 1));
4594 else
4595 tg3_set_txd(tp, entry, mapping, len,
4596 base_flags, (i == last));
4598 entry = NEXT_TX(entry);
4602 if (would_hit_hwbug) {
4603 u32 last_plus_one = entry;
4604 u32 start;
4606 start = entry - 1 - skb_shinfo(skb)->nr_frags;
4607 start &= (TG3_TX_RING_SIZE - 1);
4609 /* If the workaround fails due to memory/mapping
4610 * failure, silently drop this packet.
4612 if (tigon3_dma_hwbug_workaround(tp, skb, last_plus_one,
4613 &start, base_flags, mss))
4614 goto out_unlock;
4616 entry = start;
4619 /* Packets are ready, update Tx producer idx local and on card. */
4620 tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
4622 tp->tx_prod = entry;
4623 if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
4624 netif_stop_queue(dev);
4625 if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp))
4626 netif_wake_queue(tp->dev);
4629 out_unlock:
4630 mmiowb();
4632 dev->trans_start = jiffies;
4634 return NETDEV_TX_OK;
4637 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
4638 int new_mtu)
4640 dev->mtu = new_mtu;
4642 if (new_mtu > ETH_DATA_LEN) {
4643 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
4644 tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE;
4645 ethtool_op_set_tso(dev, 0);
4647 else
4648 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
4649 } else {
4650 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
4651 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
4652 tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE;
4656 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
4658 struct tg3 *tp = netdev_priv(dev);
4659 int err;
4661 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
4662 return -EINVAL;
4664 if (!netif_running(dev)) {
4665 /* We'll just catch it later when the
4666 * device is up'd.
4668 tg3_set_mtu(dev, tp, new_mtu);
4669 return 0;
4672 tg3_netif_stop(tp);
4674 tg3_full_lock(tp, 1);
4676 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
4678 tg3_set_mtu(dev, tp, new_mtu);
4680 err = tg3_restart_hw(tp, 0);
4682 if (!err)
4683 tg3_netif_start(tp);
4685 tg3_full_unlock(tp);
4687 return err;
4690 /* Free up pending packets in all rx/tx rings.
4692 * The chip has been shut down and the driver detached from
4693 * the networking, so no interrupts or new tx packets will
4694 * end up in the driver. tp->{tx,}lock is not held and we are not
4695 * in an interrupt context and thus may sleep.
4697 static void tg3_free_rings(struct tg3 *tp)
4699 struct ring_info *rxp;
4700 int i;
4702 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4703 rxp = &tp->rx_std_buffers[i];
4705 if (rxp->skb == NULL)
4706 continue;
4707 pci_unmap_single(tp->pdev,
4708 pci_unmap_addr(rxp, mapping),
4709 tp->rx_pkt_buf_sz - tp->rx_offset,
4710 PCI_DMA_FROMDEVICE);
4711 dev_kfree_skb_any(rxp->skb);
4712 rxp->skb = NULL;
4715 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4716 rxp = &tp->rx_jumbo_buffers[i];
4718 if (rxp->skb == NULL)
4719 continue;
4720 pci_unmap_single(tp->pdev,
4721 pci_unmap_addr(rxp, mapping),
4722 RX_JUMBO_PKT_BUF_SZ - tp->rx_offset,
4723 PCI_DMA_FROMDEVICE);
4724 dev_kfree_skb_any(rxp->skb);
4725 rxp->skb = NULL;
4728 for (i = 0; i < TG3_TX_RING_SIZE; ) {
4729 struct tx_ring_info *txp;
4730 struct sk_buff *skb;
4731 int j;
4733 txp = &tp->tx_buffers[i];
4734 skb = txp->skb;
4736 if (skb == NULL) {
4737 i++;
4738 continue;
4741 pci_unmap_single(tp->pdev,
4742 pci_unmap_addr(txp, mapping),
4743 skb_headlen(skb),
4744 PCI_DMA_TODEVICE);
4745 txp->skb = NULL;
4747 i++;
4749 for (j = 0; j < skb_shinfo(skb)->nr_frags; j++) {
4750 txp = &tp->tx_buffers[i & (TG3_TX_RING_SIZE - 1)];
4751 pci_unmap_page(tp->pdev,
4752 pci_unmap_addr(txp, mapping),
4753 skb_shinfo(skb)->frags[j].size,
4754 PCI_DMA_TODEVICE);
4755 i++;
4758 dev_kfree_skb_any(skb);
4762 /* Initialize tx/rx rings for packet processing.
4764 * The chip has been shut down and the driver detached from
4765 * the networking, so no interrupts or new tx packets will
4766 * end up in the driver. tp->{tx,}lock are held and thus
4767 * we may not sleep.
4769 static int tg3_init_rings(struct tg3 *tp)
4771 u32 i;
4773 /* Free up all the SKBs. */
4774 tg3_free_rings(tp);
4776 /* Zero out all descriptors. */
4777 memset(tp->rx_std, 0, TG3_RX_RING_BYTES);
4778 memset(tp->rx_jumbo, 0, TG3_RX_JUMBO_RING_BYTES);
4779 memset(tp->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
4780 memset(tp->tx_ring, 0, TG3_TX_RING_BYTES);
4782 tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ;
4783 if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) &&
4784 (tp->dev->mtu > ETH_DATA_LEN))
4785 tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ;
4787 /* Initialize invariants of the rings, we only set this
4788 * stuff once. This works because the card does not
4789 * write into the rx buffer posting rings.
4791 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4792 struct tg3_rx_buffer_desc *rxd;
4794 rxd = &tp->rx_std[i];
4795 rxd->idx_len = (tp->rx_pkt_buf_sz - tp->rx_offset - 64)
4796 << RXD_LEN_SHIFT;
4797 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
4798 rxd->opaque = (RXD_OPAQUE_RING_STD |
4799 (i << RXD_OPAQUE_INDEX_SHIFT));
4802 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
4803 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4804 struct tg3_rx_buffer_desc *rxd;
4806 rxd = &tp->rx_jumbo[i];
4807 rxd->idx_len = (RX_JUMBO_PKT_BUF_SZ - tp->rx_offset - 64)
4808 << RXD_LEN_SHIFT;
4809 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
4810 RXD_FLAG_JUMBO;
4811 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
4812 (i << RXD_OPAQUE_INDEX_SHIFT));
4816 /* Now allocate fresh SKBs for each rx ring. */
4817 for (i = 0; i < tp->rx_pending; i++) {
4818 if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_STD, -1, i) < 0) {
4819 printk(KERN_WARNING PFX
4820 "%s: Using a smaller RX standard ring, "
4821 "only %d out of %d buffers were allocated "
4822 "successfully.\n",
4823 tp->dev->name, i, tp->rx_pending);
4824 if (i == 0)
4825 return -ENOMEM;
4826 tp->rx_pending = i;
4827 break;
4831 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
4832 for (i = 0; i < tp->rx_jumbo_pending; i++) {
4833 if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_JUMBO,
4834 -1, i) < 0) {
4835 printk(KERN_WARNING PFX
4836 "%s: Using a smaller RX jumbo ring, "
4837 "only %d out of %d buffers were "
4838 "allocated successfully.\n",
4839 tp->dev->name, i, tp->rx_jumbo_pending);
4840 if (i == 0) {
4841 tg3_free_rings(tp);
4842 return -ENOMEM;
4844 tp->rx_jumbo_pending = i;
4845 break;
4849 return 0;
4853 * Must not be invoked with interrupt sources disabled and
4854 * the hardware shutdown down.
4856 static void tg3_free_consistent(struct tg3 *tp)
4858 kfree(tp->rx_std_buffers);
4859 tp->rx_std_buffers = NULL;
4860 if (tp->rx_std) {
4861 pci_free_consistent(tp->pdev, TG3_RX_RING_BYTES,
4862 tp->rx_std, tp->rx_std_mapping);
4863 tp->rx_std = NULL;
4865 if (tp->rx_jumbo) {
4866 pci_free_consistent(tp->pdev, TG3_RX_JUMBO_RING_BYTES,
4867 tp->rx_jumbo, tp->rx_jumbo_mapping);
4868 tp->rx_jumbo = NULL;
4870 if (tp->rx_rcb) {
4871 pci_free_consistent(tp->pdev, TG3_RX_RCB_RING_BYTES(tp),
4872 tp->rx_rcb, tp->rx_rcb_mapping);
4873 tp->rx_rcb = NULL;
4875 if (tp->tx_ring) {
4876 pci_free_consistent(tp->pdev, TG3_TX_RING_BYTES,
4877 tp->tx_ring, tp->tx_desc_mapping);
4878 tp->tx_ring = NULL;
4880 if (tp->hw_status) {
4881 pci_free_consistent(tp->pdev, TG3_HW_STATUS_SIZE,
4882 tp->hw_status, tp->status_mapping);
4883 tp->hw_status = NULL;
4885 if (tp->hw_stats) {
4886 pci_free_consistent(tp->pdev, sizeof(struct tg3_hw_stats),
4887 tp->hw_stats, tp->stats_mapping);
4888 tp->hw_stats = NULL;
4893 * Must not be invoked with interrupt sources disabled and
4894 * the hardware shutdown down. Can sleep.
4896 static int tg3_alloc_consistent(struct tg3 *tp)
4898 tp->rx_std_buffers = kzalloc((sizeof(struct ring_info) *
4899 (TG3_RX_RING_SIZE +
4900 TG3_RX_JUMBO_RING_SIZE)) +
4901 (sizeof(struct tx_ring_info) *
4902 TG3_TX_RING_SIZE),
4903 GFP_KERNEL);
4904 if (!tp->rx_std_buffers)
4905 return -ENOMEM;
4907 tp->rx_jumbo_buffers = &tp->rx_std_buffers[TG3_RX_RING_SIZE];
4908 tp->tx_buffers = (struct tx_ring_info *)
4909 &tp->rx_jumbo_buffers[TG3_RX_JUMBO_RING_SIZE];
4911 tp->rx_std = pci_alloc_consistent(tp->pdev, TG3_RX_RING_BYTES,
4912 &tp->rx_std_mapping);
4913 if (!tp->rx_std)
4914 goto err_out;
4916 tp->rx_jumbo = pci_alloc_consistent(tp->pdev, TG3_RX_JUMBO_RING_BYTES,
4917 &tp->rx_jumbo_mapping);
4919 if (!tp->rx_jumbo)
4920 goto err_out;
4922 tp->rx_rcb = pci_alloc_consistent(tp->pdev, TG3_RX_RCB_RING_BYTES(tp),
4923 &tp->rx_rcb_mapping);
4924 if (!tp->rx_rcb)
4925 goto err_out;
4927 tp->tx_ring = pci_alloc_consistent(tp->pdev, TG3_TX_RING_BYTES,
4928 &tp->tx_desc_mapping);
4929 if (!tp->tx_ring)
4930 goto err_out;
4932 tp->hw_status = pci_alloc_consistent(tp->pdev,
4933 TG3_HW_STATUS_SIZE,
4934 &tp->status_mapping);
4935 if (!tp->hw_status)
4936 goto err_out;
4938 tp->hw_stats = pci_alloc_consistent(tp->pdev,
4939 sizeof(struct tg3_hw_stats),
4940 &tp->stats_mapping);
4941 if (!tp->hw_stats)
4942 goto err_out;
4944 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
4945 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
4947 return 0;
4949 err_out:
4950 tg3_free_consistent(tp);
4951 return -ENOMEM;
4954 #define MAX_WAIT_CNT 1000
4956 /* To stop a block, clear the enable bit and poll till it
4957 * clears. tp->lock is held.
4959 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
4961 unsigned int i;
4962 u32 val;
4964 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
4965 switch (ofs) {
4966 case RCVLSC_MODE:
4967 case DMAC_MODE:
4968 case MBFREE_MODE:
4969 case BUFMGR_MODE:
4970 case MEMARB_MODE:
4971 /* We can't enable/disable these bits of the
4972 * 5705/5750, just say success.
4974 return 0;
4976 default:
4977 break;
4981 val = tr32(ofs);
4982 val &= ~enable_bit;
4983 tw32_f(ofs, val);
4985 for (i = 0; i < MAX_WAIT_CNT; i++) {
4986 udelay(100);
4987 val = tr32(ofs);
4988 if ((val & enable_bit) == 0)
4989 break;
4992 if (i == MAX_WAIT_CNT && !silent) {
4993 printk(KERN_ERR PFX "tg3_stop_block timed out, "
4994 "ofs=%lx enable_bit=%x\n",
4995 ofs, enable_bit);
4996 return -ENODEV;
4999 return 0;
5002 /* tp->lock is held. */
5003 static int tg3_abort_hw(struct tg3 *tp, int silent)
5005 int i, err;
5007 tg3_disable_ints(tp);
5009 tp->rx_mode &= ~RX_MODE_ENABLE;
5010 tw32_f(MAC_RX_MODE, tp->rx_mode);
5011 udelay(10);
5013 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
5014 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
5015 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
5016 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
5017 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
5018 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
5020 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
5021 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
5022 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
5023 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
5024 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
5025 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
5026 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
5028 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
5029 tw32_f(MAC_MODE, tp->mac_mode);
5030 udelay(40);
5032 tp->tx_mode &= ~TX_MODE_ENABLE;
5033 tw32_f(MAC_TX_MODE, tp->tx_mode);
5035 for (i = 0; i < MAX_WAIT_CNT; i++) {
5036 udelay(100);
5037 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
5038 break;
5040 if (i >= MAX_WAIT_CNT) {
5041 printk(KERN_ERR PFX "tg3_abort_hw timed out for %s, "
5042 "TX_MODE_ENABLE will not clear MAC_TX_MODE=%08x\n",
5043 tp->dev->name, tr32(MAC_TX_MODE));
5044 err |= -ENODEV;
5047 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
5048 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
5049 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
5051 tw32(FTQ_RESET, 0xffffffff);
5052 tw32(FTQ_RESET, 0x00000000);
5054 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
5055 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
5057 if (tp->hw_status)
5058 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
5059 if (tp->hw_stats)
5060 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
5062 return err;
5065 /* tp->lock is held. */
5066 static int tg3_nvram_lock(struct tg3 *tp)
5068 if (tp->tg3_flags & TG3_FLAG_NVRAM) {
5069 int i;
5071 if (tp->nvram_lock_cnt == 0) {
5072 tw32(NVRAM_SWARB, SWARB_REQ_SET1);
5073 for (i = 0; i < 8000; i++) {
5074 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
5075 break;
5076 udelay(20);
5078 if (i == 8000) {
5079 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
5080 return -ENODEV;
5083 tp->nvram_lock_cnt++;
5085 return 0;
5088 /* tp->lock is held. */
5089 static void tg3_nvram_unlock(struct tg3 *tp)
5091 if (tp->tg3_flags & TG3_FLAG_NVRAM) {
5092 if (tp->nvram_lock_cnt > 0)
5093 tp->nvram_lock_cnt--;
5094 if (tp->nvram_lock_cnt == 0)
5095 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
5099 /* tp->lock is held. */
5100 static void tg3_enable_nvram_access(struct tg3 *tp)
5102 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
5103 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
5104 u32 nvaccess = tr32(NVRAM_ACCESS);
5106 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
5110 /* tp->lock is held. */
5111 static void tg3_disable_nvram_access(struct tg3 *tp)
5113 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
5114 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
5115 u32 nvaccess = tr32(NVRAM_ACCESS);
5117 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
5121 static void tg3_ape_send_event(struct tg3 *tp, u32 event)
5123 int i;
5124 u32 apedata;
5126 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
5127 if (apedata != APE_SEG_SIG_MAGIC)
5128 return;
5130 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
5131 if (apedata != APE_FW_STATUS_READY)
5132 return;
5134 /* Wait for up to 1 millisecond for APE to service previous event. */
5135 for (i = 0; i < 10; i++) {
5136 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
5137 return;
5139 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
5141 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
5142 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
5143 event | APE_EVENT_STATUS_EVENT_PENDING);
5145 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
5147 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
5148 break;
5150 udelay(100);
5153 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
5154 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
5157 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
5159 u32 event;
5160 u32 apedata;
5162 if (!(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE))
5163 return;
5165 switch (kind) {
5166 case RESET_KIND_INIT:
5167 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
5168 APE_HOST_SEG_SIG_MAGIC);
5169 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
5170 APE_HOST_SEG_LEN_MAGIC);
5171 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
5172 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
5173 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
5174 APE_HOST_DRIVER_ID_MAGIC);
5175 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
5176 APE_HOST_BEHAV_NO_PHYLOCK);
5178 event = APE_EVENT_STATUS_STATE_START;
5179 break;
5180 case RESET_KIND_SHUTDOWN:
5181 event = APE_EVENT_STATUS_STATE_UNLOAD;
5182 break;
5183 case RESET_KIND_SUSPEND:
5184 event = APE_EVENT_STATUS_STATE_SUSPEND;
5185 break;
5186 default:
5187 return;
5190 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
5192 tg3_ape_send_event(tp, event);
5195 /* tp->lock is held. */
5196 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
5198 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
5199 NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
5201 if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) {
5202 switch (kind) {
5203 case RESET_KIND_INIT:
5204 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5205 DRV_STATE_START);
5206 break;
5208 case RESET_KIND_SHUTDOWN:
5209 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5210 DRV_STATE_UNLOAD);
5211 break;
5213 case RESET_KIND_SUSPEND:
5214 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5215 DRV_STATE_SUSPEND);
5216 break;
5218 default:
5219 break;
5223 if (kind == RESET_KIND_INIT ||
5224 kind == RESET_KIND_SUSPEND)
5225 tg3_ape_driver_state_change(tp, kind);
5228 /* tp->lock is held. */
5229 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
5231 if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) {
5232 switch (kind) {
5233 case RESET_KIND_INIT:
5234 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5235 DRV_STATE_START_DONE);
5236 break;
5238 case RESET_KIND_SHUTDOWN:
5239 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5240 DRV_STATE_UNLOAD_DONE);
5241 break;
5243 default:
5244 break;
5248 if (kind == RESET_KIND_SHUTDOWN)
5249 tg3_ape_driver_state_change(tp, kind);
5252 /* tp->lock is held. */
5253 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
5255 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
5256 switch (kind) {
5257 case RESET_KIND_INIT:
5258 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5259 DRV_STATE_START);
5260 break;
5262 case RESET_KIND_SHUTDOWN:
5263 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5264 DRV_STATE_UNLOAD);
5265 break;
5267 case RESET_KIND_SUSPEND:
5268 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5269 DRV_STATE_SUSPEND);
5270 break;
5272 default:
5273 break;
5278 static int tg3_poll_fw(struct tg3 *tp)
5280 int i;
5281 u32 val;
5283 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
5284 /* Wait up to 20ms for init done. */
5285 for (i = 0; i < 200; i++) {
5286 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
5287 return 0;
5288 udelay(100);
5290 return -ENODEV;
5293 /* Wait for firmware initialization to complete. */
5294 for (i = 0; i < 100000; i++) {
5295 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
5296 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
5297 break;
5298 udelay(10);
5301 /* Chip might not be fitted with firmware. Some Sun onboard
5302 * parts are configured like that. So don't signal the timeout
5303 * of the above loop as an error, but do report the lack of
5304 * running firmware once.
5306 if (i >= 100000 &&
5307 !(tp->tg3_flags2 & TG3_FLG2_NO_FWARE_REPORTED)) {
5308 tp->tg3_flags2 |= TG3_FLG2_NO_FWARE_REPORTED;
5310 printk(KERN_INFO PFX "%s: No firmware running.\n",
5311 tp->dev->name);
5314 return 0;
5317 /* Save PCI command register before chip reset */
5318 static void tg3_save_pci_state(struct tg3 *tp)
5320 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
5323 /* Restore PCI state after chip reset */
5324 static void tg3_restore_pci_state(struct tg3 *tp)
5326 u32 val;
5328 /* Re-enable indirect register accesses. */
5329 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
5330 tp->misc_host_ctrl);
5332 /* Set MAX PCI retry to zero. */
5333 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
5334 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
5335 (tp->tg3_flags & TG3_FLAG_PCIX_MODE))
5336 val |= PCISTATE_RETRY_SAME_DMA;
5337 /* Allow reads and writes to the APE register and memory space. */
5338 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE)
5339 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
5340 PCISTATE_ALLOW_APE_SHMEM_WR;
5341 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
5343 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
5345 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)
5346 pcie_set_readrq(tp->pdev, 4096);
5347 else {
5348 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
5349 tp->pci_cacheline_sz);
5350 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
5351 tp->pci_lat_timer);
5354 /* Make sure PCI-X relaxed ordering bit is clear. */
5355 if (tp->pcix_cap) {
5356 u16 pcix_cmd;
5358 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
5359 &pcix_cmd);
5360 pcix_cmd &= ~PCI_X_CMD_ERO;
5361 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
5362 pcix_cmd);
5365 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
5367 /* Chip reset on 5780 will reset MSI enable bit,
5368 * so need to restore it.
5370 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
5371 u16 ctrl;
5373 pci_read_config_word(tp->pdev,
5374 tp->msi_cap + PCI_MSI_FLAGS,
5375 &ctrl);
5376 pci_write_config_word(tp->pdev,
5377 tp->msi_cap + PCI_MSI_FLAGS,
5378 ctrl | PCI_MSI_FLAGS_ENABLE);
5379 val = tr32(MSGINT_MODE);
5380 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
5385 static void tg3_stop_fw(struct tg3 *);
5387 /* tp->lock is held. */
5388 static int tg3_chip_reset(struct tg3 *tp)
5390 u32 val;
5391 void (*write_op)(struct tg3 *, u32, u32);
5392 int err;
5394 tg3_nvram_lock(tp);
5396 /* No matching tg3_nvram_unlock() after this because
5397 * chip reset below will undo the nvram lock.
5399 tp->nvram_lock_cnt = 0;
5401 /* GRC_MISC_CFG core clock reset will clear the memory
5402 * enable bit in PCI register 4 and the MSI enable bit
5403 * on some chips, so we save relevant registers here.
5405 tg3_save_pci_state(tp);
5407 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
5408 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
5409 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
5410 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
5411 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
5412 tw32(GRC_FASTBOOT_PC, 0);
5415 * We must avoid the readl() that normally takes place.
5416 * It locks machines, causes machine checks, and other
5417 * fun things. So, temporarily disable the 5701
5418 * hardware workaround, while we do the reset.
5420 write_op = tp->write32;
5421 if (write_op == tg3_write_flush_reg32)
5422 tp->write32 = tg3_write32;
5424 /* Prevent the irq handler from reading or writing PCI registers
5425 * during chip reset when the memory enable bit in the PCI command
5426 * register may be cleared. The chip does not generate interrupt
5427 * at this time, but the irq handler may still be called due to irq
5428 * sharing or irqpoll.
5430 tp->tg3_flags |= TG3_FLAG_CHIP_RESETTING;
5431 if (tp->hw_status) {
5432 tp->hw_status->status = 0;
5433 tp->hw_status->status_tag = 0;
5435 tp->last_tag = 0;
5436 smp_mb();
5437 synchronize_irq(tp->pdev->irq);
5439 /* do the reset */
5440 val = GRC_MISC_CFG_CORECLK_RESET;
5442 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
5443 if (tr32(0x7e2c) == 0x60) {
5444 tw32(0x7e2c, 0x20);
5446 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
5447 tw32(GRC_MISC_CFG, (1 << 29));
5448 val |= (1 << 29);
5452 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
5453 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
5454 tw32(GRC_VCPU_EXT_CTRL,
5455 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
5458 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
5459 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
5460 tw32(GRC_MISC_CFG, val);
5462 /* restore 5701 hardware bug workaround write method */
5463 tp->write32 = write_op;
5465 /* Unfortunately, we have to delay before the PCI read back.
5466 * Some 575X chips even will not respond to a PCI cfg access
5467 * when the reset command is given to the chip.
5469 * How do these hardware designers expect things to work
5470 * properly if the PCI write is posted for a long period
5471 * of time? It is always necessary to have some method by
5472 * which a register read back can occur to push the write
5473 * out which does the reset.
5475 * For most tg3 variants the trick below was working.
5476 * Ho hum...
5478 udelay(120);
5480 /* Flush PCI posted writes. The normal MMIO registers
5481 * are inaccessible at this time so this is the only
5482 * way to make this reliably (actually, this is no longer
5483 * the case, see above). I tried to use indirect
5484 * register read/write but this upset some 5701 variants.
5486 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
5488 udelay(120);
5490 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
5491 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
5492 int i;
5493 u32 cfg_val;
5495 /* Wait for link training to complete. */
5496 for (i = 0; i < 5000; i++)
5497 udelay(100);
5499 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
5500 pci_write_config_dword(tp->pdev, 0xc4,
5501 cfg_val | (1 << 15));
5503 /* Set PCIE max payload size and clear error status. */
5504 pci_write_config_dword(tp->pdev, 0xd8, 0xf5000);
5507 tg3_restore_pci_state(tp);
5509 tp->tg3_flags &= ~TG3_FLAG_CHIP_RESETTING;
5511 val = 0;
5512 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
5513 val = tr32(MEMARB_MODE);
5514 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
5516 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
5517 tg3_stop_fw(tp);
5518 tw32(0x5000, 0x400);
5521 tw32(GRC_MODE, tp->grc_mode);
5523 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
5524 val = tr32(0xc4);
5526 tw32(0xc4, val | (1 << 15));
5529 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
5530 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
5531 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
5532 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)
5533 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
5534 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
5537 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
5538 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
5539 tw32_f(MAC_MODE, tp->mac_mode);
5540 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
5541 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
5542 tw32_f(MAC_MODE, tp->mac_mode);
5543 } else
5544 tw32_f(MAC_MODE, 0);
5545 udelay(40);
5547 err = tg3_poll_fw(tp);
5548 if (err)
5549 return err;
5551 if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
5552 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
5553 val = tr32(0x7c00);
5555 tw32(0x7c00, val | (1 << 25));
5558 /* Reprobe ASF enable state. */
5559 tp->tg3_flags &= ~TG3_FLAG_ENABLE_ASF;
5560 tp->tg3_flags2 &= ~TG3_FLG2_ASF_NEW_HANDSHAKE;
5561 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
5562 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
5563 u32 nic_cfg;
5565 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
5566 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
5567 tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
5568 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
5569 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
5573 return 0;
5576 /* tp->lock is held. */
5577 static void tg3_stop_fw(struct tg3 *tp)
5579 if ((tp->tg3_flags & TG3_FLAG_ENABLE_ASF) &&
5580 !(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE)) {
5581 u32 val;
5583 /* Wait for RX cpu to ACK the previous event. */
5584 tg3_wait_for_event_ack(tp);
5586 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
5587 val = tr32(GRC_RX_CPU_EVENT);
5588 val |= GRC_RX_CPU_DRIVER_EVENT;
5589 tw32(GRC_RX_CPU_EVENT, val);
5591 /* Wait for RX cpu to ACK this event. */
5592 tg3_wait_for_event_ack(tp);
5596 /* tp->lock is held. */
5597 static int tg3_halt(struct tg3 *tp, int kind, int silent)
5599 int err;
5601 tg3_stop_fw(tp);
5603 tg3_write_sig_pre_reset(tp, kind);
5605 tg3_abort_hw(tp, silent);
5606 err = tg3_chip_reset(tp);
5608 tg3_write_sig_legacy(tp, kind);
5609 tg3_write_sig_post_reset(tp, kind);
5611 if (err)
5612 return err;
5614 return 0;
5617 #define TG3_FW_RELEASE_MAJOR 0x0
5618 #define TG3_FW_RELASE_MINOR 0x0
5619 #define TG3_FW_RELEASE_FIX 0x0
5620 #define TG3_FW_START_ADDR 0x08000000
5621 #define TG3_FW_TEXT_ADDR 0x08000000
5622 #define TG3_FW_TEXT_LEN 0x9c0
5623 #define TG3_FW_RODATA_ADDR 0x080009c0
5624 #define TG3_FW_RODATA_LEN 0x60
5625 #define TG3_FW_DATA_ADDR 0x08000a40
5626 #define TG3_FW_DATA_LEN 0x20
5627 #define TG3_FW_SBSS_ADDR 0x08000a60
5628 #define TG3_FW_SBSS_LEN 0xc
5629 #define TG3_FW_BSS_ADDR 0x08000a70
5630 #define TG3_FW_BSS_LEN 0x10
5632 static const u32 tg3FwText[(TG3_FW_TEXT_LEN / sizeof(u32)) + 1] = {
5633 0x00000000, 0x10000003, 0x00000000, 0x0000000d, 0x0000000d, 0x3c1d0800,
5634 0x37bd3ffc, 0x03a0f021, 0x3c100800, 0x26100000, 0x0e000018, 0x00000000,
5635 0x0000000d, 0x3c1d0800, 0x37bd3ffc, 0x03a0f021, 0x3c100800, 0x26100034,
5636 0x0e00021c, 0x00000000, 0x0000000d, 0x00000000, 0x00000000, 0x00000000,
5637 0x27bdffe0, 0x3c1cc000, 0xafbf0018, 0xaf80680c, 0x0e00004c, 0x241b2105,
5638 0x97850000, 0x97870002, 0x9782002c, 0x9783002e, 0x3c040800, 0x248409c0,
5639 0xafa00014, 0x00021400, 0x00621825, 0x00052c00, 0xafa30010, 0x8f860010,
5640 0x00e52825, 0x0e000060, 0x24070102, 0x3c02ac00, 0x34420100, 0x3c03ac01,
5641 0x34630100, 0xaf820490, 0x3c02ffff, 0xaf820494, 0xaf830498, 0xaf82049c,
5642 0x24020001, 0xaf825ce0, 0x0e00003f, 0xaf825d00, 0x0e000140, 0x00000000,
5643 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x2402ffff, 0xaf825404, 0x8f835400,
5644 0x34630400, 0xaf835400, 0xaf825404, 0x3c020800, 0x24420034, 0xaf82541c,
5645 0x03e00008, 0xaf805400, 0x00000000, 0x00000000, 0x3c020800, 0x34423000,
5646 0x3c030800, 0x34633000, 0x3c040800, 0x348437ff, 0x3c010800, 0xac220a64,
5647 0x24020040, 0x3c010800, 0xac220a68, 0x3c010800, 0xac200a60, 0xac600000,
5648 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000,
5649 0x00804821, 0x8faa0010, 0x3c020800, 0x8c420a60, 0x3c040800, 0x8c840a68,
5650 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010800, 0xac230a60, 0x14400003,
5651 0x00004021, 0x3c010800, 0xac200a60, 0x3c020800, 0x8c420a60, 0x3c030800,
5652 0x8c630a64, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001,
5653 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020800, 0x8c420a60,
5654 0x3c030800, 0x8c630a64, 0x8f84680c, 0x00021140, 0x00431021, 0xac440008,
5655 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c,
5656 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5657 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5658 0, 0, 0, 0, 0, 0,
5659 0x02000008, 0x00000000, 0x0a0001e3, 0x3c0a0001, 0x0a0001e3, 0x3c0a0002,
5660 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5661 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5662 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5663 0x0a0001e3, 0x3c0a0007, 0x0a0001e3, 0x3c0a0008, 0x0a0001e3, 0x3c0a0009,
5664 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a000b,
5665 0x0a0001e3, 0x3c0a000c, 0x0a0001e3, 0x3c0a000d, 0x0a0001e3, 0x00000000,
5666 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a000e, 0x0a0001e3, 0x00000000,
5667 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5668 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5669 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a0013, 0x0a0001e3, 0x3c0a0014,
5670 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5671 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5672 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5673 0x27bdffe0, 0x00001821, 0x00001021, 0xafbf0018, 0xafb10014, 0xafb00010,
5674 0x3c010800, 0x00220821, 0xac200a70, 0x3c010800, 0x00220821, 0xac200a74,
5675 0x3c010800, 0x00220821, 0xac200a78, 0x24630001, 0x1860fff5, 0x2442000c,
5676 0x24110001, 0x8f906810, 0x32020004, 0x14400005, 0x24040001, 0x3c020800,
5677 0x8c420a78, 0x18400003, 0x00002021, 0x0e000182, 0x00000000, 0x32020001,
5678 0x10400003, 0x00000000, 0x0e000169, 0x00000000, 0x0a000153, 0xaf915028,
5679 0x8fbf0018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020, 0x3c050800,
5680 0x8ca50a70, 0x3c060800, 0x8cc60a80, 0x3c070800, 0x8ce70a78, 0x27bdffe0,
5681 0x3c040800, 0x248409d0, 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014,
5682 0x0e00017b, 0x00002021, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x24020001,
5683 0x8f836810, 0x00821004, 0x00021027, 0x00621824, 0x03e00008, 0xaf836810,
5684 0x27bdffd8, 0xafbf0024, 0x1080002e, 0xafb00020, 0x8f825cec, 0xafa20018,
5685 0x8f825cec, 0x3c100800, 0x26100a78, 0xafa2001c, 0x34028000, 0xaf825cec,
5686 0x8e020000, 0x18400016, 0x00000000, 0x3c020800, 0x94420a74, 0x8fa3001c,
5687 0x000221c0, 0xac830004, 0x8fa2001c, 0x3c010800, 0x0e000201, 0xac220a74,
5688 0x10400005, 0x00000000, 0x8e020000, 0x24420001, 0x0a0001df, 0xae020000,
5689 0x3c020800, 0x8c420a70, 0x00021c02, 0x000321c0, 0x0a0001c5, 0xafa2001c,
5690 0x0e000201, 0x00000000, 0x1040001f, 0x00000000, 0x8e020000, 0x8fa3001c,
5691 0x24420001, 0x3c010800, 0xac230a70, 0x3c010800, 0xac230a74, 0x0a0001df,
5692 0xae020000, 0x3c100800, 0x26100a78, 0x8e020000, 0x18400028, 0x00000000,
5693 0x0e000201, 0x00000000, 0x14400024, 0x00000000, 0x8e020000, 0x3c030800,
5694 0x8c630a70, 0x2442ffff, 0xafa3001c, 0x18400006, 0xae020000, 0x00031402,
5695 0x000221c0, 0x8c820004, 0x3c010800, 0xac220a70, 0x97a2001e, 0x2442ff00,
5696 0x2c420300, 0x1440000b, 0x24024000, 0x3c040800, 0x248409dc, 0xafa00010,
5697 0xafa00014, 0x8fa6001c, 0x24050008, 0x0e000060, 0x00003821, 0x0a0001df,
5698 0x00000000, 0xaf825cf8, 0x3c020800, 0x8c420a40, 0x8fa3001c, 0x24420001,
5699 0xaf835cf8, 0x3c010800, 0xac220a40, 0x8fbf0024, 0x8fb00020, 0x03e00008,
5700 0x27bd0028, 0x27bdffe0, 0x3c040800, 0x248409e8, 0x00002821, 0x00003021,
5701 0x00003821, 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014, 0x8fbf0018,
5702 0x03e00008, 0x27bd0020, 0x8f82680c, 0x8f85680c, 0x00021827, 0x0003182b,
5703 0x00031823, 0x00431024, 0x00441021, 0x00a2282b, 0x10a00006, 0x00000000,
5704 0x00401821, 0x8f82680c, 0x0043102b, 0x1440fffd, 0x00000000, 0x03e00008,
5705 0x00000000, 0x3c040800, 0x8c840000, 0x3c030800, 0x8c630a40, 0x0064102b,
5706 0x54400002, 0x00831023, 0x00641023, 0x2c420008, 0x03e00008, 0x38420001,
5707 0x27bdffe0, 0x00802821, 0x3c040800, 0x24840a00, 0x00003021, 0x00003821,
5708 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014, 0x0a000216, 0x00000000,
5709 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000, 0x27bdffe0, 0x3c1cc000,
5710 0xafbf0018, 0x0e00004c, 0xaf80680c, 0x3c040800, 0x24840a10, 0x03802821,
5711 0x00003021, 0x00003821, 0xafa00010, 0x0e000060, 0xafa00014, 0x2402ffff,
5712 0xaf825404, 0x3c0200aa, 0x0e000234, 0xaf825434, 0x8fbf0018, 0x03e00008,
5713 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe8, 0xafb00010,
5714 0x24100001, 0xafbf0014, 0x3c01c003, 0xac200000, 0x8f826810, 0x30422000,
5715 0x10400003, 0x00000000, 0x0e000246, 0x00000000, 0x0a00023a, 0xaf905428,
5716 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x27bdfff8, 0x8f845d0c,
5717 0x3c0200ff, 0x3c030800, 0x8c630a50, 0x3442fff8, 0x00821024, 0x1043001e,
5718 0x3c0500ff, 0x34a5fff8, 0x3c06c003, 0x3c074000, 0x00851824, 0x8c620010,
5719 0x3c010800, 0xac230a50, 0x30420008, 0x10400005, 0x00871025, 0x8cc20000,
5720 0x24420001, 0xacc20000, 0x00871025, 0xaf825d0c, 0x8fa20000, 0x24420001,
5721 0xafa20000, 0x8fa20000, 0x8fa20000, 0x24420001, 0xafa20000, 0x8fa20000,
5722 0x8f845d0c, 0x3c030800, 0x8c630a50, 0x00851024, 0x1443ffe8, 0x00851824,
5723 0x27bd0008, 0x03e00008, 0x00000000, 0x00000000, 0x00000000
5726 static const u32 tg3FwRodata[(TG3_FW_RODATA_LEN / sizeof(u32)) + 1] = {
5727 0x35373031, 0x726c7341, 0x00000000, 0x00000000, 0x53774576, 0x656e7430,
5728 0x00000000, 0x726c7045, 0x76656e74, 0x31000000, 0x556e6b6e, 0x45766e74,
5729 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66617461, 0x6c457272,
5730 0x00000000, 0x00000000, 0x4d61696e, 0x43707542, 0x00000000, 0x00000000,
5731 0x00000000
5734 #if 0 /* All zeros, don't eat up space with it. */
5735 u32 tg3FwData[(TG3_FW_DATA_LEN / sizeof(u32)) + 1] = {
5736 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
5737 0x00000000, 0x00000000, 0x00000000, 0x00000000
5739 #endif
5741 #define RX_CPU_SCRATCH_BASE 0x30000
5742 #define RX_CPU_SCRATCH_SIZE 0x04000
5743 #define TX_CPU_SCRATCH_BASE 0x34000
5744 #define TX_CPU_SCRATCH_SIZE 0x04000
5746 /* tp->lock is held. */
5747 static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
5749 int i;
5751 BUG_ON(offset == TX_CPU_BASE &&
5752 (tp->tg3_flags2 & TG3_FLG2_5705_PLUS));
5754 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
5755 u32 val = tr32(GRC_VCPU_EXT_CTRL);
5757 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
5758 return 0;
5760 if (offset == RX_CPU_BASE) {
5761 for (i = 0; i < 10000; i++) {
5762 tw32(offset + CPU_STATE, 0xffffffff);
5763 tw32(offset + CPU_MODE, CPU_MODE_HALT);
5764 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
5765 break;
5768 tw32(offset + CPU_STATE, 0xffffffff);
5769 tw32_f(offset + CPU_MODE, CPU_MODE_HALT);
5770 udelay(10);
5771 } else {
5772 for (i = 0; i < 10000; i++) {
5773 tw32(offset + CPU_STATE, 0xffffffff);
5774 tw32(offset + CPU_MODE, CPU_MODE_HALT);
5775 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
5776 break;
5780 if (i >= 10000) {
5781 printk(KERN_ERR PFX "tg3_reset_cpu timed out for %s, "
5782 "and %s CPU\n",
5783 tp->dev->name,
5784 (offset == RX_CPU_BASE ? "RX" : "TX"));
5785 return -ENODEV;
5788 /* Clear firmware's nvram arbitration. */
5789 if (tp->tg3_flags & TG3_FLAG_NVRAM)
5790 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
5791 return 0;
5794 struct fw_info {
5795 unsigned int text_base;
5796 unsigned int text_len;
5797 const u32 *text_data;
5798 unsigned int rodata_base;
5799 unsigned int rodata_len;
5800 const u32 *rodata_data;
5801 unsigned int data_base;
5802 unsigned int data_len;
5803 const u32 *data_data;
5806 /* tp->lock is held. */
5807 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, u32 cpu_scratch_base,
5808 int cpu_scratch_size, struct fw_info *info)
5810 int err, lock_err, i;
5811 void (*write_op)(struct tg3 *, u32, u32);
5813 if (cpu_base == TX_CPU_BASE &&
5814 (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
5815 printk(KERN_ERR PFX "tg3_load_firmware_cpu: Trying to load "
5816 "TX cpu firmware on %s which is 5705.\n",
5817 tp->dev->name);
5818 return -EINVAL;
5821 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
5822 write_op = tg3_write_mem;
5823 else
5824 write_op = tg3_write_indirect_reg32;
5826 /* It is possible that bootcode is still loading at this point.
5827 * Get the nvram lock first before halting the cpu.
5829 lock_err = tg3_nvram_lock(tp);
5830 err = tg3_halt_cpu(tp, cpu_base);
5831 if (!lock_err)
5832 tg3_nvram_unlock(tp);
5833 if (err)
5834 goto out;
5836 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
5837 write_op(tp, cpu_scratch_base + i, 0);
5838 tw32(cpu_base + CPU_STATE, 0xffffffff);
5839 tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
5840 for (i = 0; i < (info->text_len / sizeof(u32)); i++)
5841 write_op(tp, (cpu_scratch_base +
5842 (info->text_base & 0xffff) +
5843 (i * sizeof(u32))),
5844 (info->text_data ?
5845 info->text_data[i] : 0));
5846 for (i = 0; i < (info->rodata_len / sizeof(u32)); i++)
5847 write_op(tp, (cpu_scratch_base +
5848 (info->rodata_base & 0xffff) +
5849 (i * sizeof(u32))),
5850 (info->rodata_data ?
5851 info->rodata_data[i] : 0));
5852 for (i = 0; i < (info->data_len / sizeof(u32)); i++)
5853 write_op(tp, (cpu_scratch_base +
5854 (info->data_base & 0xffff) +
5855 (i * sizeof(u32))),
5856 (info->data_data ?
5857 info->data_data[i] : 0));
5859 err = 0;
5861 out:
5862 return err;
5865 /* tp->lock is held. */
5866 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
5868 struct fw_info info;
5869 int err, i;
5871 info.text_base = TG3_FW_TEXT_ADDR;
5872 info.text_len = TG3_FW_TEXT_LEN;
5873 info.text_data = &tg3FwText[0];
5874 info.rodata_base = TG3_FW_RODATA_ADDR;
5875 info.rodata_len = TG3_FW_RODATA_LEN;
5876 info.rodata_data = &tg3FwRodata[0];
5877 info.data_base = TG3_FW_DATA_ADDR;
5878 info.data_len = TG3_FW_DATA_LEN;
5879 info.data_data = NULL;
5881 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
5882 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
5883 &info);
5884 if (err)
5885 return err;
5887 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
5888 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
5889 &info);
5890 if (err)
5891 return err;
5893 /* Now startup only the RX cpu. */
5894 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5895 tw32_f(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
5897 for (i = 0; i < 5; i++) {
5898 if (tr32(RX_CPU_BASE + CPU_PC) == TG3_FW_TEXT_ADDR)
5899 break;
5900 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5901 tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT);
5902 tw32_f(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
5903 udelay(1000);
5905 if (i >= 5) {
5906 printk(KERN_ERR PFX "tg3_load_firmware fails for %s "
5907 "to set RX CPU PC, is %08x should be %08x\n",
5908 tp->dev->name, tr32(RX_CPU_BASE + CPU_PC),
5909 TG3_FW_TEXT_ADDR);
5910 return -ENODEV;
5912 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5913 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000);
5915 return 0;
5919 #define TG3_TSO_FW_RELEASE_MAJOR 0x1
5920 #define TG3_TSO_FW_RELASE_MINOR 0x6
5921 #define TG3_TSO_FW_RELEASE_FIX 0x0
5922 #define TG3_TSO_FW_START_ADDR 0x08000000
5923 #define TG3_TSO_FW_TEXT_ADDR 0x08000000
5924 #define TG3_TSO_FW_TEXT_LEN 0x1aa0
5925 #define TG3_TSO_FW_RODATA_ADDR 0x08001aa0
5926 #define TG3_TSO_FW_RODATA_LEN 0x60
5927 #define TG3_TSO_FW_DATA_ADDR 0x08001b20
5928 #define TG3_TSO_FW_DATA_LEN 0x30
5929 #define TG3_TSO_FW_SBSS_ADDR 0x08001b50
5930 #define TG3_TSO_FW_SBSS_LEN 0x2c
5931 #define TG3_TSO_FW_BSS_ADDR 0x08001b80
5932 #define TG3_TSO_FW_BSS_LEN 0x894
5934 static const u32 tg3TsoFwText[(TG3_TSO_FW_TEXT_LEN / 4) + 1] = {
5935 0x0e000003, 0x00000000, 0x08001b24, 0x00000000, 0x10000003, 0x00000000,
5936 0x0000000d, 0x0000000d, 0x3c1d0800, 0x37bd4000, 0x03a0f021, 0x3c100800,
5937 0x26100000, 0x0e000010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe,
5938 0xafbf0018, 0x0e0005d8, 0x34840002, 0x0e000668, 0x00000000, 0x3c030800,
5939 0x90631b68, 0x24020002, 0x3c040800, 0x24841aac, 0x14620003, 0x24050001,
5940 0x3c040800, 0x24841aa0, 0x24060006, 0x00003821, 0xafa00010, 0x0e00067c,
5941 0xafa00014, 0x8f625c50, 0x34420001, 0xaf625c50, 0x8f625c90, 0x34420001,
5942 0xaf625c90, 0x2402ffff, 0x0e000034, 0xaf625404, 0x8fbf0018, 0x03e00008,
5943 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c,
5944 0xafb20018, 0xafb10014, 0x0e00005b, 0xafb00010, 0x24120002, 0x24110001,
5945 0x8f706820, 0x32020100, 0x10400003, 0x00000000, 0x0e0000bb, 0x00000000,
5946 0x8f706820, 0x32022000, 0x10400004, 0x32020001, 0x0e0001f0, 0x24040001,
5947 0x32020001, 0x10400003, 0x00000000, 0x0e0000a3, 0x00000000, 0x3c020800,
5948 0x90421b98, 0x14520003, 0x00000000, 0x0e0004c0, 0x00000000, 0x0a00003c,
5949 0xaf715028, 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008,
5950 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ac0, 0x00002821, 0x00003021,
5951 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x3c040800,
5952 0x248423d8, 0xa4800000, 0x3c010800, 0xa0201b98, 0x3c010800, 0xac201b9c,
5953 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac,
5954 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bbc, 0x8f624434, 0x3c010800,
5955 0xac221b88, 0x8f624438, 0x3c010800, 0xac221b8c, 0x8f624410, 0xac80f7a8,
5956 0x3c010800, 0xac201b84, 0x3c010800, 0xac2023e0, 0x3c010800, 0xac2023c8,
5957 0x3c010800, 0xac2023cc, 0x3c010800, 0xac202400, 0x3c010800, 0xac221b90,
5958 0x8f620068, 0x24030007, 0x00021702, 0x10430005, 0x00000000, 0x8f620068,
5959 0x00021702, 0x14400004, 0x24020001, 0x3c010800, 0x0a000097, 0xac20240c,
5960 0xac820034, 0x3c040800, 0x24841acc, 0x3c050800, 0x8ca5240c, 0x00003021,
5961 0x00003821, 0xafa00010, 0x0e00067c, 0xafa00014, 0x8fbf0018, 0x03e00008,
5962 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ad8, 0x00002821, 0x00003021,
5963 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x0e00005b,
5964 0x00000000, 0x0e0000b4, 0x00002021, 0x8fbf0018, 0x03e00008, 0x27bd0020,
5965 0x24020001, 0x8f636820, 0x00821004, 0x00021027, 0x00621824, 0x03e00008,
5966 0xaf636820, 0x27bdffd0, 0xafbf002c, 0xafb60028, 0xafb50024, 0xafb40020,
5967 0xafb3001c, 0xafb20018, 0xafb10014, 0xafb00010, 0x8f675c5c, 0x3c030800,
5968 0x24631bbc, 0x8c620000, 0x14470005, 0x3c0200ff, 0x3c020800, 0x90421b98,
5969 0x14400119, 0x3c0200ff, 0x3442fff8, 0x00e28824, 0xac670000, 0x00111902,
5970 0x306300ff, 0x30e20003, 0x000211c0, 0x00622825, 0x00a04021, 0x00071602,
5971 0x3c030800, 0x90631b98, 0x3044000f, 0x14600036, 0x00804821, 0x24020001,
5972 0x3c010800, 0xa0221b98, 0x00051100, 0x00821025, 0x3c010800, 0xac201b9c,
5973 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac,
5974 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bb0, 0x3c010800, 0xac201bb4,
5975 0x3c010800, 0xa42223d8, 0x9622000c, 0x30437fff, 0x3c010800, 0xa4222410,
5976 0x30428000, 0x3c010800, 0xa4231bc6, 0x10400005, 0x24020001, 0x3c010800,
5977 0xac2223f4, 0x0a000102, 0x2406003e, 0x24060036, 0x3c010800, 0xac2023f4,
5978 0x9622000a, 0x3c030800, 0x94631bc6, 0x3c010800, 0xac2023f0, 0x3c010800,
5979 0xac2023f8, 0x00021302, 0x00021080, 0x00c21021, 0x00621821, 0x3c010800,
5980 0xa42223d0, 0x3c010800, 0x0a000115, 0xa4231b96, 0x9622000c, 0x3c010800,
5981 0xa42223ec, 0x3c040800, 0x24841b9c, 0x8c820000, 0x00021100, 0x3c010800,
5982 0x00220821, 0xac311bc8, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821,
5983 0xac271bcc, 0x8c820000, 0x25030001, 0x306601ff, 0x00021100, 0x3c010800,
5984 0x00220821, 0xac261bd0, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821,
5985 0xac291bd4, 0x96230008, 0x3c020800, 0x8c421bac, 0x00432821, 0x3c010800,
5986 0xac251bac, 0x9622000a, 0x30420004, 0x14400018, 0x00061100, 0x8f630c14,
5987 0x3063000f, 0x2c620002, 0x1440000b, 0x3c02c000, 0x8f630c14, 0x3c020800,
5988 0x8c421b40, 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002,
5989 0x1040fff7, 0x3c02c000, 0x00e21825, 0xaf635c5c, 0x8f625c50, 0x30420002,
5990 0x10400014, 0x00000000, 0x0a000147, 0x00000000, 0x3c030800, 0x8c631b80,
5991 0x3c040800, 0x94841b94, 0x01221025, 0x3c010800, 0xa42223da, 0x24020001,
5992 0x3c010800, 0xac221bb8, 0x24630001, 0x0085202a, 0x3c010800, 0x10800003,
5993 0xac231b80, 0x3c010800, 0xa4251b94, 0x3c060800, 0x24c61b9c, 0x8cc20000,
5994 0x24420001, 0xacc20000, 0x28420080, 0x14400005, 0x00000000, 0x0e000656,
5995 0x24040002, 0x0a0001e6, 0x00000000, 0x3c020800, 0x8c421bb8, 0x10400078,
5996 0x24020001, 0x3c050800, 0x90a51b98, 0x14a20072, 0x00000000, 0x3c150800,
5997 0x96b51b96, 0x3c040800, 0x8c841bac, 0x32a3ffff, 0x0083102a, 0x1440006c,
5998 0x00000000, 0x14830003, 0x00000000, 0x3c010800, 0xac2523f0, 0x1060005c,
5999 0x00009021, 0x24d60004, 0x0060a021, 0x24d30014, 0x8ec20000, 0x00028100,
6000 0x3c110800, 0x02308821, 0x0e000625, 0x8e311bc8, 0x00402821, 0x10a00054,
6001 0x00000000, 0x9628000a, 0x31020040, 0x10400005, 0x2407180c, 0x8e22000c,
6002 0x2407188c, 0x00021400, 0xaca20018, 0x3c030800, 0x00701821, 0x8c631bd0,
6003 0x3c020800, 0x00501021, 0x8c421bd4, 0x00031d00, 0x00021400, 0x00621825,
6004 0xaca30014, 0x8ec30004, 0x96220008, 0x00432023, 0x3242ffff, 0x3083ffff,
6005 0x00431021, 0x0282102a, 0x14400002, 0x02b23023, 0x00803021, 0x8e620000,
6006 0x30c4ffff, 0x00441021, 0xae620000, 0x8e220000, 0xaca20000, 0x8e220004,
6007 0x8e63fff4, 0x00431021, 0xaca20004, 0xa4a6000e, 0x8e62fff4, 0x00441021,
6008 0xae62fff4, 0x96230008, 0x0043102a, 0x14400005, 0x02469021, 0x8e62fff0,
6009 0xae60fff4, 0x24420001, 0xae62fff0, 0xaca00008, 0x3242ffff, 0x14540008,
6010 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x24020905, 0xa4a2000c,
6011 0x0a0001cb, 0x34e70020, 0xa4a2000c, 0x3c020800, 0x8c4223f0, 0x10400003,
6012 0x3c024b65, 0x0a0001d3, 0x34427654, 0x3c02b49a, 0x344289ab, 0xaca2001c,
6013 0x30e2ffff, 0xaca20010, 0x0e0005a2, 0x00a02021, 0x3242ffff, 0x0054102b,
6014 0x1440ffa9, 0x00000000, 0x24020002, 0x3c010800, 0x0a0001e6, 0xa0221b98,
6015 0x8ec2083c, 0x24420001, 0x0a0001e6, 0xaec2083c, 0x0e0004c0, 0x00000000,
6016 0x8fbf002c, 0x8fb60028, 0x8fb50024, 0x8fb40020, 0x8fb3001c, 0x8fb20018,
6017 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0030, 0x27bdffd0, 0xafbf0028,
6018 0xafb30024, 0xafb20020, 0xafb1001c, 0xafb00018, 0x8f725c9c, 0x3c0200ff,
6019 0x3442fff8, 0x3c070800, 0x24e71bb4, 0x02428824, 0x9623000e, 0x8ce20000,
6020 0x00431021, 0xace20000, 0x8e220010, 0x30420020, 0x14400011, 0x00809821,
6021 0x0e00063b, 0x02202021, 0x3c02c000, 0x02421825, 0xaf635c9c, 0x8f625c90,
6022 0x30420002, 0x1040011e, 0x00000000, 0xaf635c9c, 0x8f625c90, 0x30420002,
6023 0x10400119, 0x00000000, 0x0a00020d, 0x00000000, 0x8e240008, 0x8e230014,
6024 0x00041402, 0x000231c0, 0x00031502, 0x304201ff, 0x2442ffff, 0x3042007f,
6025 0x00031942, 0x30637800, 0x00021100, 0x24424000, 0x00624821, 0x9522000a,
6026 0x3084ffff, 0x30420008, 0x104000b0, 0x000429c0, 0x3c020800, 0x8c422400,
6027 0x14400024, 0x24c50008, 0x94c20014, 0x3c010800, 0xa42223d0, 0x8cc40010,
6028 0x00041402, 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42423d4, 0x94c2000e,
6029 0x3083ffff, 0x00431023, 0x3c010800, 0xac222408, 0x94c2001a, 0x3c010800,
6030 0xac262400, 0x3c010800, 0xac322404, 0x3c010800, 0xac2223fc, 0x3c02c000,
6031 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e5, 0x00000000,
6032 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e0, 0x00000000, 0x0a000246,
6033 0x00000000, 0x94c2000e, 0x3c030800, 0x946323d4, 0x00434023, 0x3103ffff,
6034 0x2c620008, 0x1040001c, 0x00000000, 0x94c20014, 0x24420028, 0x00a22821,
6035 0x00031042, 0x1840000b, 0x00002021, 0x24e60848, 0x00403821, 0x94a30000,
6036 0x8cc20000, 0x24840001, 0x00431021, 0xacc20000, 0x0087102a, 0x1440fff9,
6037 0x24a50002, 0x31020001, 0x1040001f, 0x3c024000, 0x3c040800, 0x248423fc,
6038 0xa0a00001, 0x94a30000, 0x8c820000, 0x00431021, 0x0a000285, 0xac820000,
6039 0x8f626800, 0x3c030010, 0x00431024, 0x10400009, 0x00000000, 0x94c2001a,
6040 0x3c030800, 0x8c6323fc, 0x00431021, 0x3c010800, 0xac2223fc, 0x0a000286,
6041 0x3c024000, 0x94c2001a, 0x94c4001c, 0x3c030800, 0x8c6323fc, 0x00441023,
6042 0x00621821, 0x3c010800, 0xac2323fc, 0x3c024000, 0x02421825, 0xaf635c9c,
6043 0x8f625c90, 0x30420002, 0x1440fffc, 0x00000000, 0x9522000a, 0x30420010,
6044 0x1040009b, 0x00000000, 0x3c030800, 0x946323d4, 0x3c070800, 0x24e72400,
6045 0x8ce40000, 0x8f626800, 0x24630030, 0x00832821, 0x3c030010, 0x00431024,
6046 0x1440000a, 0x00000000, 0x94a20004, 0x3c040800, 0x8c842408, 0x3c030800,
6047 0x8c6323fc, 0x00441023, 0x00621821, 0x3c010800, 0xac2323fc, 0x3c040800,
6048 0x8c8423fc, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402, 0x00822021,
6049 0x00041027, 0xa4a20006, 0x3c030800, 0x8c632404, 0x3c0200ff, 0x3442fff8,
6050 0x00628824, 0x96220008, 0x24050001, 0x24034000, 0x000231c0, 0x00801021,
6051 0xa4c2001a, 0xa4c0001c, 0xace00000, 0x3c010800, 0xac251b60, 0xaf635cb8,
6052 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000, 0x3c010800, 0xac201b60,
6053 0x8e220008, 0xaf625cb8, 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000,
6054 0x3c010800, 0xac201b60, 0x3c020800, 0x8c421b60, 0x1040ffec, 0x00000000,
6055 0x3c040800, 0x0e00063b, 0x8c842404, 0x0a00032a, 0x00000000, 0x3c030800,
6056 0x90631b98, 0x24020002, 0x14620003, 0x3c034b65, 0x0a0002e1, 0x00008021,
6057 0x8e22001c, 0x34637654, 0x10430002, 0x24100002, 0x24100001, 0x00c02021,
6058 0x0e000350, 0x02003021, 0x24020003, 0x3c010800, 0xa0221b98, 0x24020002,
6059 0x1202000a, 0x24020001, 0x3c030800, 0x8c6323f0, 0x10620006, 0x00000000,
6060 0x3c020800, 0x944223d8, 0x00021400, 0x0a00031f, 0xae220014, 0x3c040800,
6061 0x248423da, 0x94820000, 0x00021400, 0xae220014, 0x3c020800, 0x8c421bbc,
6062 0x3c03c000, 0x3c010800, 0xa0201b98, 0x00431025, 0xaf625c5c, 0x8f625c50,
6063 0x30420002, 0x10400009, 0x00000000, 0x2484f7e2, 0x8c820000, 0x00431025,
6064 0xaf625c5c, 0x8f625c50, 0x30420002, 0x1440fffa, 0x00000000, 0x3c020800,
6065 0x24421b84, 0x8c430000, 0x24630001, 0xac430000, 0x8f630c14, 0x3063000f,
6066 0x2c620002, 0x1440000c, 0x3c024000, 0x8f630c14, 0x3c020800, 0x8c421b40,
6067 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7,
6068 0x00000000, 0x3c024000, 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002,
6069 0x1440fffc, 0x00000000, 0x12600003, 0x00000000, 0x0e0004c0, 0x00000000,
6070 0x8fbf0028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x03e00008,
6071 0x27bd0030, 0x8f634450, 0x3c040800, 0x24841b88, 0x8c820000, 0x00031c02,
6072 0x0043102b, 0x14400007, 0x3c038000, 0x8c840004, 0x8f624450, 0x00021c02,
6073 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024,
6074 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3c024000,
6075 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00000000,
6076 0x03e00008, 0x00000000, 0x27bdffe0, 0x00805821, 0x14c00011, 0x256e0008,
6077 0x3c020800, 0x8c4223f4, 0x10400007, 0x24020016, 0x3c010800, 0xa42223d2,
6078 0x2402002a, 0x3c010800, 0x0a000364, 0xa42223d4, 0x8d670010, 0x00071402,
6079 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42723d4, 0x3c040800, 0x948423d4,
6080 0x3c030800, 0x946323d2, 0x95cf0006, 0x3c020800, 0x944223d0, 0x00832023,
6081 0x01e2c023, 0x3065ffff, 0x24a20028, 0x01c24821, 0x3082ffff, 0x14c0001a,
6082 0x01226021, 0x9582000c, 0x3042003f, 0x3c010800, 0xa42223d6, 0x95820004,
6083 0x95830006, 0x3c010800, 0xac2023e4, 0x3c010800, 0xac2023e8, 0x00021400,
6084 0x00431025, 0x3c010800, 0xac221bc0, 0x95220004, 0x3c010800, 0xa4221bc4,
6085 0x95230002, 0x01e51023, 0x0043102a, 0x10400010, 0x24020001, 0x3c010800,
6086 0x0a000398, 0xac2223f8, 0x3c030800, 0x8c6323e8, 0x3c020800, 0x94421bc4,
6087 0x00431021, 0xa5220004, 0x3c020800, 0x94421bc0, 0xa5820004, 0x3c020800,
6088 0x8c421bc0, 0xa5820006, 0x3c020800, 0x8c4223f0, 0x3c0d0800, 0x8dad23e4,
6089 0x3c0a0800, 0x144000e5, 0x8d4a23e8, 0x3c020800, 0x94421bc4, 0x004a1821,
6090 0x3063ffff, 0x0062182b, 0x24020002, 0x10c2000d, 0x01435023, 0x3c020800,
6091 0x944223d6, 0x30420009, 0x10400008, 0x00000000, 0x9582000c, 0x3042fff6,
6092 0xa582000c, 0x3c020800, 0x944223d6, 0x30420009, 0x01a26823, 0x3c020800,
6093 0x8c4223f8, 0x1040004a, 0x01203821, 0x3c020800, 0x944223d2, 0x00004021,
6094 0xa520000a, 0x01e21023, 0xa5220002, 0x3082ffff, 0x00021042, 0x18400008,
6095 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021, 0x0103102a,
6096 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061402,
6097 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021, 0x2527000c,
6098 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004, 0x1440fffb,
6099 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023, 0x01803821,
6100 0x3082ffff, 0xa4e00010, 0x00621821, 0x00021042, 0x18400010, 0x00c33021,
6101 0x00404821, 0x94e20000, 0x24e70002, 0x00c23021, 0x30e2007f, 0x14400006,
6102 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80, 0x00625824, 0x25670008,
6103 0x0109102a, 0x1440fff3, 0x00000000, 0x30820001, 0x10400005, 0x00061c02,
6104 0xa0e00001, 0x94e20000, 0x00c23021, 0x00061c02, 0x30c2ffff, 0x00623021,
6105 0x00061402, 0x00c23021, 0x0a00047d, 0x30c6ffff, 0x24020002, 0x14c20081,
6106 0x00000000, 0x3c020800, 0x8c42240c, 0x14400007, 0x00000000, 0x3c020800,
6107 0x944223d2, 0x95230002, 0x01e21023, 0x10620077, 0x00000000, 0x3c020800,
6108 0x944223d2, 0x01e21023, 0xa5220002, 0x3c020800, 0x8c42240c, 0x1040001a,
6109 0x31e3ffff, 0x8dc70010, 0x3c020800, 0x94421b96, 0x00e04021, 0x00072c02,
6110 0x00aa2021, 0x00431023, 0x00823823, 0x00072402, 0x30e2ffff, 0x00823821,
6111 0x00071027, 0xa522000a, 0x3102ffff, 0x3c040800, 0x948423d4, 0x00453023,
6112 0x00e02821, 0x00641823, 0x006d1821, 0x00c33021, 0x00061c02, 0x30c2ffff,
6113 0x0a00047d, 0x00623021, 0x01203821, 0x00004021, 0x3082ffff, 0x00021042,
6114 0x18400008, 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021,
6115 0x0103102a, 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021,
6116 0x00061402, 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021,
6117 0x2527000c, 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004,
6118 0x1440fffb, 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023,
6119 0x01803821, 0x3082ffff, 0xa4e00010, 0x3c040800, 0x948423d4, 0x00621821,
6120 0x00c33021, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061c02, 0x3c020800,
6121 0x944223d0, 0x00c34821, 0x00441023, 0x00021fc2, 0x00431021, 0x00021043,
6122 0x18400010, 0x00003021, 0x00402021, 0x94e20000, 0x24e70002, 0x00c23021,
6123 0x30e2007f, 0x14400006, 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80,
6124 0x00625824, 0x25670008, 0x0104102a, 0x1440fff3, 0x00000000, 0x3c020800,
6125 0x944223ec, 0x00c23021, 0x3122ffff, 0x00c23021, 0x00061c02, 0x30c2ffff,
6126 0x00623021, 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010,
6127 0xadc00014, 0x0a00049d, 0xadc00000, 0x8dc70010, 0x00e04021, 0x11400007,
6128 0x00072c02, 0x00aa3021, 0x00061402, 0x30c3ffff, 0x00433021, 0x00061402,
6129 0x00c22821, 0x00051027, 0xa522000a, 0x3c030800, 0x946323d4, 0x3102ffff,
6130 0x01e21021, 0x00433023, 0x00cd3021, 0x00061c02, 0x30c2ffff, 0x00623021,
6131 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010, 0x3102ffff,
6132 0x00051c00, 0x00431025, 0xadc20010, 0x3c020800, 0x8c4223f4, 0x10400005,
6133 0x2de205eb, 0x14400002, 0x25e2fff2, 0x34028870, 0xa5c20034, 0x3c030800,
6134 0x246323e8, 0x8c620000, 0x24420001, 0xac620000, 0x3c040800, 0x8c8423e4,
6135 0x3c020800, 0x8c421bc0, 0x3303ffff, 0x00832021, 0x00431821, 0x0062102b,
6136 0x3c010800, 0xac2423e4, 0x10400003, 0x2482ffff, 0x3c010800, 0xac2223e4,
6137 0x3c010800, 0xac231bc0, 0x03e00008, 0x27bd0020, 0x27bdffb8, 0x3c050800,
6138 0x24a51b96, 0xafbf0044, 0xafbe0040, 0xafb7003c, 0xafb60038, 0xafb50034,
6139 0xafb40030, 0xafb3002c, 0xafb20028, 0xafb10024, 0xafb00020, 0x94a90000,
6140 0x3c020800, 0x944223d0, 0x3c030800, 0x8c631bb0, 0x3c040800, 0x8c841bac,
6141 0x01221023, 0x0064182a, 0xa7a9001e, 0x106000be, 0xa7a20016, 0x24be0022,
6142 0x97b6001e, 0x24b3001a, 0x24b70016, 0x8fc20000, 0x14400008, 0x00000000,
6143 0x8fc2fff8, 0x97a30016, 0x8fc4fff4, 0x00431021, 0x0082202a, 0x148000b0,
6144 0x00000000, 0x97d50818, 0x32a2ffff, 0x104000a3, 0x00009021, 0x0040a021,
6145 0x00008821, 0x0e000625, 0x00000000, 0x00403021, 0x14c00007, 0x00000000,
6146 0x3c020800, 0x8c4223dc, 0x24420001, 0x3c010800, 0x0a000596, 0xac2223dc,
6147 0x3c100800, 0x02118021, 0x8e101bc8, 0x9608000a, 0x31020040, 0x10400005,
6148 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x31020080,
6149 0x54400001, 0x34e70010, 0x3c020800, 0x00511021, 0x8c421bd0, 0x3c030800,
6150 0x00711821, 0x8c631bd4, 0x00021500, 0x00031c00, 0x00431025, 0xacc20014,
6151 0x96040008, 0x3242ffff, 0x00821021, 0x0282102a, 0x14400002, 0x02b22823,
6152 0x00802821, 0x8e020000, 0x02459021, 0xacc20000, 0x8e020004, 0x00c02021,
6153 0x26310010, 0xac820004, 0x30e2ffff, 0xac800008, 0xa485000e, 0xac820010,
6154 0x24020305, 0x0e0005a2, 0xa482000c, 0x3242ffff, 0x0054102b, 0x1440ffc5,
6155 0x3242ffff, 0x0a00058e, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a,
6156 0x10400067, 0x00000000, 0x8e62fff0, 0x00028900, 0x3c100800, 0x02118021,
6157 0x0e000625, 0x8e101bc8, 0x00403021, 0x14c00005, 0x00000000, 0x8e62082c,
6158 0x24420001, 0x0a000596, 0xae62082c, 0x9608000a, 0x31020040, 0x10400005,
6159 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x3c020800,
6160 0x00511021, 0x8c421bd0, 0x3c030800, 0x00711821, 0x8c631bd4, 0x00021500,
6161 0x00031c00, 0x00431025, 0xacc20014, 0x8e63fff4, 0x96020008, 0x00432023,
6162 0x3242ffff, 0x3083ffff, 0x00431021, 0x02c2102a, 0x10400003, 0x00802821,
6163 0x97a9001e, 0x01322823, 0x8e620000, 0x30a4ffff, 0x00441021, 0xae620000,
6164 0xa4c5000e, 0x8e020000, 0xacc20000, 0x8e020004, 0x8e63fff4, 0x00431021,
6165 0xacc20004, 0x8e63fff4, 0x96020008, 0x00641821, 0x0062102a, 0x14400006,
6166 0x02459021, 0x8e62fff0, 0xae60fff4, 0x24420001, 0x0a000571, 0xae62fff0,
6167 0xae63fff4, 0xacc00008, 0x3242ffff, 0x10560003, 0x31020004, 0x10400006,
6168 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x34e70020, 0x24020905,
6169 0xa4c2000c, 0x8ee30000, 0x8ee20004, 0x14620007, 0x3c02b49a, 0x8ee20860,
6170 0x54400001, 0x34e70400, 0x3c024b65, 0x0a000588, 0x34427654, 0x344289ab,
6171 0xacc2001c, 0x30e2ffff, 0xacc20010, 0x0e0005a2, 0x00c02021, 0x3242ffff,
6172 0x0056102b, 0x1440ff9b, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a,
6173 0x1440ff48, 0x00000000, 0x8fbf0044, 0x8fbe0040, 0x8fb7003c, 0x8fb60038,
6174 0x8fb50034, 0x8fb40030, 0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020,
6175 0x03e00008, 0x27bd0048, 0x27bdffe8, 0xafbf0014, 0xafb00010, 0x8f624450,
6176 0x8f634410, 0x0a0005b1, 0x00808021, 0x8f626820, 0x30422000, 0x10400003,
6177 0x00000000, 0x0e0001f0, 0x00002021, 0x8f624450, 0x8f634410, 0x3042ffff,
6178 0x0043102b, 0x1440fff5, 0x00000000, 0x8f630c14, 0x3063000f, 0x2c620002,
6179 0x1440000b, 0x00000000, 0x8f630c14, 0x3c020800, 0x8c421b40, 0x3063000f,
6180 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7, 0x00000000,
6181 0xaf705c18, 0x8f625c10, 0x30420002, 0x10400009, 0x00000000, 0x8f626820,
6182 0x30422000, 0x1040fff8, 0x00000000, 0x0e0001f0, 0x00002021, 0x0a0005c4,
6183 0x00000000, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000,
6184 0x00000000, 0x00000000, 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010,
6185 0xaf60680c, 0x8f626804, 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50,
6186 0x3c010800, 0xac221b54, 0x24020b78, 0x3c010800, 0xac221b64, 0x34630002,
6187 0xaf634000, 0x0e000605, 0x00808021, 0x3c010800, 0xa0221b68, 0x304200ff,
6188 0x24030002, 0x14430005, 0x00000000, 0x3c020800, 0x8c421b54, 0x0a0005f8,
6189 0xac5000c0, 0x3c020800, 0x8c421b54, 0xac5000bc, 0x8f624434, 0x8f634438,
6190 0x8f644410, 0x3c010800, 0xac221b5c, 0x3c010800, 0xac231b6c, 0x3c010800,
6191 0xac241b58, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x3c040800,
6192 0x8c870000, 0x3c03aa55, 0x3463aa55, 0x3c06c003, 0xac830000, 0x8cc20000,
6193 0x14430007, 0x24050002, 0x3c0355aa, 0x346355aa, 0xac830000, 0x8cc20000,
6194 0x50430001, 0x24050001, 0x3c020800, 0xac470000, 0x03e00008, 0x00a01021,
6195 0x27bdfff8, 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe,
6196 0x00000000, 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008,
6197 0x27bd0008, 0x8f634450, 0x3c020800, 0x8c421b5c, 0x00031c02, 0x0043102b,
6198 0x14400008, 0x3c038000, 0x3c040800, 0x8c841b6c, 0x8f624450, 0x00021c02,
6199 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024,
6200 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff,
6201 0x2442e000, 0x2c422001, 0x14400003, 0x3c024000, 0x0a000648, 0x2402ffff,
6202 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021,
6203 0x03e00008, 0x00000000, 0x8f624450, 0x3c030800, 0x8c631b58, 0x0a000651,
6204 0x3042ffff, 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000,
6205 0x03e00008, 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040800, 0x24841af0,
6206 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014,
6207 0x0a000660, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000,
6208 0x00000000, 0x00000000, 0x3c020800, 0x34423000, 0x3c030800, 0x34633000,
6209 0x3c040800, 0x348437ff, 0x3c010800, 0xac221b74, 0x24020040, 0x3c010800,
6210 0xac221b78, 0x3c010800, 0xac201b70, 0xac600000, 0x24630004, 0x0083102b,
6211 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000, 0x00804821, 0x8faa0010,
6212 0x3c020800, 0x8c421b70, 0x3c040800, 0x8c841b78, 0x8fab0014, 0x24430001,
6213 0x0044102b, 0x3c010800, 0xac231b70, 0x14400003, 0x00004021, 0x3c010800,
6214 0xac201b70, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74, 0x91240000,
6215 0x00021140, 0x00431021, 0x00481021, 0x25080001, 0xa0440000, 0x29020008,
6216 0x1440fff4, 0x25290001, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74,
6217 0x8f64680c, 0x00021140, 0x00431021, 0xac440008, 0xac45000c, 0xac460010,
6218 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c, 0x00000000, 0x00000000,
6221 static const u32 tg3TsoFwRodata[] = {
6222 0x4d61696e, 0x43707542, 0x00000000, 0x4d61696e, 0x43707541, 0x00000000,
6223 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x496e0000, 0x73746b6f,
6224 0x66662a2a, 0x00000000, 0x53774576, 0x656e7430, 0x00000000, 0x00000000,
6225 0x00000000, 0x00000000, 0x66617461, 0x6c457272, 0x00000000, 0x00000000,
6226 0x00000000,
6229 static const u32 tg3TsoFwData[] = {
6230 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x362e3000, 0x00000000,
6231 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
6232 0x00000000,
6235 /* 5705 needs a special version of the TSO firmware. */
6236 #define TG3_TSO5_FW_RELEASE_MAJOR 0x1
6237 #define TG3_TSO5_FW_RELASE_MINOR 0x2
6238 #define TG3_TSO5_FW_RELEASE_FIX 0x0
6239 #define TG3_TSO5_FW_START_ADDR 0x00010000
6240 #define TG3_TSO5_FW_TEXT_ADDR 0x00010000
6241 #define TG3_TSO5_FW_TEXT_LEN 0xe90
6242 #define TG3_TSO5_FW_RODATA_ADDR 0x00010e90
6243 #define TG3_TSO5_FW_RODATA_LEN 0x50
6244 #define TG3_TSO5_FW_DATA_ADDR 0x00010f00
6245 #define TG3_TSO5_FW_DATA_LEN 0x20
6246 #define TG3_TSO5_FW_SBSS_ADDR 0x00010f20
6247 #define TG3_TSO5_FW_SBSS_LEN 0x28
6248 #define TG3_TSO5_FW_BSS_ADDR 0x00010f50
6249 #define TG3_TSO5_FW_BSS_LEN 0x88
6251 static const u32 tg3Tso5FwText[(TG3_TSO5_FW_TEXT_LEN / 4) + 1] = {
6252 0x0c004003, 0x00000000, 0x00010f04, 0x00000000, 0x10000003, 0x00000000,
6253 0x0000000d, 0x0000000d, 0x3c1d0001, 0x37bde000, 0x03a0f021, 0x3c100001,
6254 0x26100000, 0x0c004010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe,
6255 0xafbf0018, 0x0c0042e8, 0x34840002, 0x0c004364, 0x00000000, 0x3c030001,
6256 0x90630f34, 0x24020002, 0x3c040001, 0x24840e9c, 0x14620003, 0x24050001,
6257 0x3c040001, 0x24840e90, 0x24060002, 0x00003821, 0xafa00010, 0x0c004378,
6258 0xafa00014, 0x0c00402c, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020,
6259 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c, 0xafb20018, 0xafb10014,
6260 0x0c0042d4, 0xafb00010, 0x3c128000, 0x24110001, 0x8f706810, 0x32020400,
6261 0x10400007, 0x00000000, 0x8f641008, 0x00921024, 0x14400003, 0x00000000,
6262 0x0c004064, 0x00000000, 0x3c020001, 0x90420f56, 0x10510003, 0x32020200,
6263 0x1040fff1, 0x00000000, 0x0c0041b4, 0x00000000, 0x08004034, 0x00000000,
6264 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020,
6265 0x27bdffe0, 0x3c040001, 0x24840eb0, 0x00002821, 0x00003021, 0x00003821,
6266 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130,
6267 0xaf625000, 0x3c010001, 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018,
6268 0x03e00008, 0x27bd0020, 0x00000000, 0x00000000, 0x3c030001, 0x24630f60,
6269 0x90620000, 0x27bdfff0, 0x14400003, 0x0080c021, 0x08004073, 0x00004821,
6270 0x3c022000, 0x03021024, 0x10400003, 0x24090002, 0x08004073, 0xa0600000,
6271 0x24090001, 0x00181040, 0x30431f80, 0x346f8008, 0x1520004b, 0x25eb0028,
6272 0x3c040001, 0x00832021, 0x8c848010, 0x3c050001, 0x24a50f7a, 0x00041402,
6273 0xa0a20000, 0x3c010001, 0xa0240f7b, 0x3c020001, 0x00431021, 0x94428014,
6274 0x3c010001, 0xa0220f7c, 0x3c0c0001, 0x01836021, 0x8d8c8018, 0x304200ff,
6275 0x24420008, 0x000220c3, 0x24020001, 0x3c010001, 0xa0220f60, 0x0124102b,
6276 0x1040000c, 0x00003821, 0x24a6000e, 0x01602821, 0x8ca20000, 0x8ca30004,
6277 0x24a50008, 0x24e70001, 0xacc20000, 0xacc30004, 0x00e4102b, 0x1440fff8,
6278 0x24c60008, 0x00003821, 0x3c080001, 0x25080f7b, 0x91060000, 0x3c020001,
6279 0x90420f7c, 0x2503000d, 0x00c32821, 0x00461023, 0x00021fc2, 0x00431021,
6280 0x00021043, 0x1840000c, 0x00002021, 0x91020001, 0x00461023, 0x00021fc2,
6281 0x00431021, 0x00021843, 0x94a20000, 0x24e70001, 0x00822021, 0x00e3102a,
6282 0x1440fffb, 0x24a50002, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402,
6283 0x00822021, 0x3c02ffff, 0x01821024, 0x3083ffff, 0x00431025, 0x3c010001,
6284 0x080040fa, 0xac220f80, 0x3c050001, 0x24a50f7c, 0x90a20000, 0x3c0c0001,
6285 0x01836021, 0x8d8c8018, 0x000220c2, 0x1080000e, 0x00003821, 0x01603021,
6286 0x24a5000c, 0x8ca20000, 0x8ca30004, 0x24a50008, 0x24e70001, 0xacc20000,
6287 0xacc30004, 0x00e4102b, 0x1440fff8, 0x24c60008, 0x3c050001, 0x24a50f7c,
6288 0x90a20000, 0x30430007, 0x24020004, 0x10620011, 0x28620005, 0x10400005,
6289 0x24020002, 0x10620008, 0x000710c0, 0x080040fa, 0x00000000, 0x24020006,
6290 0x1062000e, 0x000710c0, 0x080040fa, 0x00000000, 0x00a21821, 0x9463000c,
6291 0x004b1021, 0x080040fa, 0xa4430000, 0x000710c0, 0x00a21821, 0x8c63000c,
6292 0x004b1021, 0x080040fa, 0xac430000, 0x00a21821, 0x8c63000c, 0x004b2021,
6293 0x00a21021, 0xac830000, 0x94420010, 0xa4820004, 0x95e70006, 0x3c020001,
6294 0x90420f7c, 0x3c030001, 0x90630f7a, 0x00e2c823, 0x3c020001, 0x90420f7b,
6295 0x24630028, 0x01e34021, 0x24420028, 0x15200012, 0x01e23021, 0x94c2000c,
6296 0x3c010001, 0xa4220f78, 0x94c20004, 0x94c30006, 0x3c010001, 0xa4200f76,
6297 0x3c010001, 0xa4200f72, 0x00021400, 0x00431025, 0x3c010001, 0xac220f6c,
6298 0x95020004, 0x3c010001, 0x08004124, 0xa4220f70, 0x3c020001, 0x94420f70,
6299 0x3c030001, 0x94630f72, 0x00431021, 0xa5020004, 0x3c020001, 0x94420f6c,
6300 0xa4c20004, 0x3c020001, 0x8c420f6c, 0xa4c20006, 0x3c040001, 0x94840f72,
6301 0x3c020001, 0x94420f70, 0x3c0a0001, 0x954a0f76, 0x00441821, 0x3063ffff,
6302 0x0062182a, 0x24020002, 0x1122000b, 0x00832023, 0x3c030001, 0x94630f78,
6303 0x30620009, 0x10400006, 0x3062fff6, 0xa4c2000c, 0x3c020001, 0x94420f78,
6304 0x30420009, 0x01425023, 0x24020001, 0x1122001b, 0x29220002, 0x50400005,
6305 0x24020002, 0x11200007, 0x31a2ffff, 0x08004197, 0x00000000, 0x1122001d,
6306 0x24020016, 0x08004197, 0x31a2ffff, 0x3c0e0001, 0x95ce0f80, 0x10800005,
6307 0x01806821, 0x01c42021, 0x00041c02, 0x3082ffff, 0x00627021, 0x000e1027,
6308 0xa502000a, 0x3c030001, 0x90630f7b, 0x31a2ffff, 0x00e21021, 0x0800418d,
6309 0x00432023, 0x3c020001, 0x94420f80, 0x00442021, 0x00041c02, 0x3082ffff,
6310 0x00622021, 0x00807021, 0x00041027, 0x08004185, 0xa502000a, 0x3c050001,
6311 0x24a50f7a, 0x90a30000, 0x14620002, 0x24e2fff2, 0xa5e20034, 0x90a20000,
6312 0x00e21023, 0xa5020002, 0x3c030001, 0x94630f80, 0x3c020001, 0x94420f5a,
6313 0x30e5ffff, 0x00641821, 0x00451023, 0x00622023, 0x00041c02, 0x3082ffff,
6314 0x00622021, 0x00041027, 0xa502000a, 0x3c030001, 0x90630f7c, 0x24620001,
6315 0x14a20005, 0x00807021, 0x01631021, 0x90420000, 0x08004185, 0x00026200,
6316 0x24620002, 0x14a20003, 0x306200fe, 0x004b1021, 0x944c0000, 0x3c020001,
6317 0x94420f82, 0x3183ffff, 0x3c040001, 0x90840f7b, 0x00431021, 0x00e21021,
6318 0x00442023, 0x008a2021, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402,
6319 0x00822021, 0x00806821, 0x00041027, 0xa4c20010, 0x31a2ffff, 0x000e1c00,
6320 0x00431025, 0x3c040001, 0x24840f72, 0xade20010, 0x94820000, 0x3c050001,
6321 0x94a50f76, 0x3c030001, 0x8c630f6c, 0x24420001, 0x00b92821, 0xa4820000,
6322 0x3322ffff, 0x00622021, 0x0083182b, 0x3c010001, 0xa4250f76, 0x10600003,
6323 0x24a2ffff, 0x3c010001, 0xa4220f76, 0x3c024000, 0x03021025, 0x3c010001,
6324 0xac240f6c, 0xaf621008, 0x03e00008, 0x27bd0010, 0x3c030001, 0x90630f56,
6325 0x27bdffe8, 0x24020001, 0xafbf0014, 0x10620026, 0xafb00010, 0x8f620cf4,
6326 0x2442ffff, 0x3042007f, 0x00021100, 0x8c434000, 0x3c010001, 0xac230f64,
6327 0x8c434008, 0x24444000, 0x8c5c4004, 0x30620040, 0x14400002, 0x24020088,
6328 0x24020008, 0x3c010001, 0xa4220f68, 0x30620004, 0x10400005, 0x24020001,
6329 0x3c010001, 0xa0220f57, 0x080041d5, 0x00031402, 0x3c010001, 0xa0200f57,
6330 0x00031402, 0x3c010001, 0xa4220f54, 0x9483000c, 0x24020001, 0x3c010001,
6331 0xa4200f50, 0x3c010001, 0xa0220f56, 0x3c010001, 0xa4230f62, 0x24020001,
6332 0x1342001e, 0x00000000, 0x13400005, 0x24020003, 0x13420067, 0x00000000,
6333 0x080042cf, 0x00000000, 0x3c020001, 0x94420f62, 0x241a0001, 0x3c010001,
6334 0xa4200f5e, 0x3c010001, 0xa4200f52, 0x304407ff, 0x00021bc2, 0x00031823,
6335 0x3063003e, 0x34630036, 0x00021242, 0x3042003c, 0x00621821, 0x3c010001,
6336 0xa4240f58, 0x00832021, 0x24630030, 0x3c010001, 0xa4240f5a, 0x3c010001,
6337 0xa4230f5c, 0x3c060001, 0x24c60f52, 0x94c50000, 0x94c30002, 0x3c040001,
6338 0x94840f5a, 0x00651021, 0x0044102a, 0x10400013, 0x3c108000, 0x00a31021,
6339 0xa4c20000, 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008,
6340 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4,
6341 0x00501024, 0x104000b7, 0x00000000, 0x0800420f, 0x00000000, 0x3c030001,
6342 0x94630f50, 0x00851023, 0xa4c40000, 0x00621821, 0x3042ffff, 0x3c010001,
6343 0xa4230f50, 0xaf620ce8, 0x3c020001, 0x94420f68, 0x34420024, 0xaf620cec,
6344 0x94c30002, 0x3c020001, 0x94420f50, 0x14620012, 0x3c028000, 0x3c108000,
6345 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008, 0x00901024,
6346 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024,
6347 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003, 0xaf620cf4, 0x3c108000,
6348 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000,
6349 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003,
6350 0x3c070001, 0x24e70f50, 0x94e20000, 0x03821021, 0xaf620ce0, 0x3c020001,
6351 0x8c420f64, 0xaf620ce4, 0x3c050001, 0x94a50f54, 0x94e30000, 0x3c040001,
6352 0x94840f58, 0x3c020001, 0x94420f5e, 0x00a32823, 0x00822023, 0x30a6ffff,
6353 0x3083ffff, 0x00c3102b, 0x14400043, 0x00000000, 0x3c020001, 0x94420f5c,
6354 0x00021400, 0x00621025, 0xaf620ce8, 0x94e20000, 0x3c030001, 0x94630f54,
6355 0x00441021, 0xa4e20000, 0x3042ffff, 0x14430021, 0x3c020008, 0x3c020001,
6356 0x90420f57, 0x10400006, 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624,
6357 0x0800427c, 0x0000d021, 0x3c020001, 0x94420f68, 0x3c030008, 0x34630624,
6358 0x00431025, 0xaf620cec, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001,
6359 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064,
6360 0x00000000, 0x8f620cf4, 0x00501024, 0x10400015, 0x00000000, 0x08004283,
6361 0x00000000, 0x3c030001, 0x94630f68, 0x34420624, 0x3c108000, 0x00621825,
6362 0x3c028000, 0xaf630cec, 0xaf620cf4, 0x8f641008, 0x00901024, 0x14400003,
6363 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7,
6364 0x00000000, 0x3c010001, 0x080042cf, 0xa4200f5e, 0x3c020001, 0x94420f5c,
6365 0x00021400, 0x00c21025, 0xaf620ce8, 0x3c020001, 0x90420f57, 0x10400009,
6366 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624, 0x0000d021, 0x00431025,
6367 0xaf620cec, 0x080042c1, 0x3c108000, 0x3c020001, 0x94420f68, 0x3c030008,
6368 0x34630604, 0x00431025, 0xaf620cec, 0x3c020001, 0x94420f5e, 0x00451021,
6369 0x3c010001, 0xa4220f5e, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001,
6370 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064,
6371 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x8fbf0014,
6372 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000, 0x27bdffe0, 0x3c040001,
6373 0x24840ec0, 0x00002821, 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010,
6374 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130, 0xaf625000, 0x3c010001,
6375 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018, 0x03e00008, 0x27bd0020,
6376 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010, 0xaf60680c, 0x8f626804,
6377 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50, 0x3c010001, 0xac220f20,
6378 0x24020b78, 0x3c010001, 0xac220f30, 0x34630002, 0xaf634000, 0x0c004315,
6379 0x00808021, 0x3c010001, 0xa0220f34, 0x304200ff, 0x24030002, 0x14430005,
6380 0x00000000, 0x3c020001, 0x8c420f20, 0x08004308, 0xac5000c0, 0x3c020001,
6381 0x8c420f20, 0xac5000bc, 0x8f624434, 0x8f634438, 0x8f644410, 0x3c010001,
6382 0xac220f28, 0x3c010001, 0xac230f38, 0x3c010001, 0xac240f24, 0x8fbf0014,
6383 0x8fb00010, 0x03e00008, 0x27bd0018, 0x03e00008, 0x24020001, 0x27bdfff8,
6384 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe, 0x00000000,
6385 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008, 0x27bd0008,
6386 0x8f634450, 0x3c020001, 0x8c420f28, 0x00031c02, 0x0043102b, 0x14400008,
6387 0x3c038000, 0x3c040001, 0x8c840f38, 0x8f624450, 0x00021c02, 0x0083102b,
6388 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024, 0x1440fffd,
6389 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff, 0x2442e000,
6390 0x2c422001, 0x14400003, 0x3c024000, 0x08004347, 0x2402ffff, 0x00822025,
6391 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021, 0x03e00008,
6392 0x00000000, 0x8f624450, 0x3c030001, 0x8c630f24, 0x08004350, 0x3042ffff,
6393 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000, 0x03e00008,
6394 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040001, 0x24840ed0, 0x00003021,
6395 0x00003821, 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0800435f,
6396 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x3c020001, 0x3442d600,
6397 0x3c030001, 0x3463d600, 0x3c040001, 0x3484ddff, 0x3c010001, 0xac220f40,
6398 0x24020040, 0x3c010001, 0xac220f44, 0x3c010001, 0xac200f3c, 0xac600000,
6399 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000,
6400 0x00804821, 0x8faa0010, 0x3c020001, 0x8c420f3c, 0x3c040001, 0x8c840f44,
6401 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010001, 0xac230f3c, 0x14400003,
6402 0x00004021, 0x3c010001, 0xac200f3c, 0x3c020001, 0x8c420f3c, 0x3c030001,
6403 0x8c630f40, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001,
6404 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020001, 0x8c420f3c,
6405 0x3c030001, 0x8c630f40, 0x8f64680c, 0x00021140, 0x00431021, 0xac440008,
6406 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c,
6407 0x00000000, 0x00000000, 0x00000000,
6410 static const u32 tg3Tso5FwRodata[(TG3_TSO5_FW_RODATA_LEN / 4) + 1] = {
6411 0x4d61696e, 0x43707542, 0x00000000, 0x4d61696e, 0x43707541, 0x00000000,
6412 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000,
6413 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000, 0x66617461, 0x6c457272,
6414 0x00000000, 0x00000000, 0x00000000,
6417 static const u32 tg3Tso5FwData[(TG3_TSO5_FW_DATA_LEN / 4) + 1] = {
6418 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x322e3000, 0x00000000,
6419 0x00000000, 0x00000000, 0x00000000,
6422 /* tp->lock is held. */
6423 static int tg3_load_tso_firmware(struct tg3 *tp)
6425 struct fw_info info;
6426 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
6427 int err, i;
6429 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
6430 return 0;
6432 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
6433 info.text_base = TG3_TSO5_FW_TEXT_ADDR;
6434 info.text_len = TG3_TSO5_FW_TEXT_LEN;
6435 info.text_data = &tg3Tso5FwText[0];
6436 info.rodata_base = TG3_TSO5_FW_RODATA_ADDR;
6437 info.rodata_len = TG3_TSO5_FW_RODATA_LEN;
6438 info.rodata_data = &tg3Tso5FwRodata[0];
6439 info.data_base = TG3_TSO5_FW_DATA_ADDR;
6440 info.data_len = TG3_TSO5_FW_DATA_LEN;
6441 info.data_data = &tg3Tso5FwData[0];
6442 cpu_base = RX_CPU_BASE;
6443 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
6444 cpu_scratch_size = (info.text_len +
6445 info.rodata_len +
6446 info.data_len +
6447 TG3_TSO5_FW_SBSS_LEN +
6448 TG3_TSO5_FW_BSS_LEN);
6449 } else {
6450 info.text_base = TG3_TSO_FW_TEXT_ADDR;
6451 info.text_len = TG3_TSO_FW_TEXT_LEN;
6452 info.text_data = &tg3TsoFwText[0];
6453 info.rodata_base = TG3_TSO_FW_RODATA_ADDR;
6454 info.rodata_len = TG3_TSO_FW_RODATA_LEN;
6455 info.rodata_data = &tg3TsoFwRodata[0];
6456 info.data_base = TG3_TSO_FW_DATA_ADDR;
6457 info.data_len = TG3_TSO_FW_DATA_LEN;
6458 info.data_data = &tg3TsoFwData[0];
6459 cpu_base = TX_CPU_BASE;
6460 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
6461 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
6464 err = tg3_load_firmware_cpu(tp, cpu_base,
6465 cpu_scratch_base, cpu_scratch_size,
6466 &info);
6467 if (err)
6468 return err;
6470 /* Now startup the cpu. */
6471 tw32(cpu_base + CPU_STATE, 0xffffffff);
6472 tw32_f(cpu_base + CPU_PC, info.text_base);
6474 for (i = 0; i < 5; i++) {
6475 if (tr32(cpu_base + CPU_PC) == info.text_base)
6476 break;
6477 tw32(cpu_base + CPU_STATE, 0xffffffff);
6478 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT);
6479 tw32_f(cpu_base + CPU_PC, info.text_base);
6480 udelay(1000);
6482 if (i >= 5) {
6483 printk(KERN_ERR PFX "tg3_load_tso_firmware fails for %s "
6484 "to set CPU PC, is %08x should be %08x\n",
6485 tp->dev->name, tr32(cpu_base + CPU_PC),
6486 info.text_base);
6487 return -ENODEV;
6489 tw32(cpu_base + CPU_STATE, 0xffffffff);
6490 tw32_f(cpu_base + CPU_MODE, 0x00000000);
6491 return 0;
6495 /* tp->lock is held. */
6496 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1)
6498 u32 addr_high, addr_low;
6499 int i;
6501 addr_high = ((tp->dev->dev_addr[0] << 8) |
6502 tp->dev->dev_addr[1]);
6503 addr_low = ((tp->dev->dev_addr[2] << 24) |
6504 (tp->dev->dev_addr[3] << 16) |
6505 (tp->dev->dev_addr[4] << 8) |
6506 (tp->dev->dev_addr[5] << 0));
6507 for (i = 0; i < 4; i++) {
6508 if (i == 1 && skip_mac_1)
6509 continue;
6510 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
6511 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
6514 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
6515 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
6516 for (i = 0; i < 12; i++) {
6517 tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
6518 tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
6522 addr_high = (tp->dev->dev_addr[0] +
6523 tp->dev->dev_addr[1] +
6524 tp->dev->dev_addr[2] +
6525 tp->dev->dev_addr[3] +
6526 tp->dev->dev_addr[4] +
6527 tp->dev->dev_addr[5]) &
6528 TX_BACKOFF_SEED_MASK;
6529 tw32(MAC_TX_BACKOFF_SEED, addr_high);
6532 static int tg3_set_mac_addr(struct net_device *dev, void *p)
6534 struct tg3 *tp = netdev_priv(dev);
6535 struct sockaddr *addr = p;
6536 int err = 0, skip_mac_1 = 0;
6538 if (!is_valid_ether_addr(addr->sa_data))
6539 return -EINVAL;
6541 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
6543 if (!netif_running(dev))
6544 return 0;
6546 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
6547 u32 addr0_high, addr0_low, addr1_high, addr1_low;
6549 addr0_high = tr32(MAC_ADDR_0_HIGH);
6550 addr0_low = tr32(MAC_ADDR_0_LOW);
6551 addr1_high = tr32(MAC_ADDR_1_HIGH);
6552 addr1_low = tr32(MAC_ADDR_1_LOW);
6554 /* Skip MAC addr 1 if ASF is using it. */
6555 if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
6556 !(addr1_high == 0 && addr1_low == 0))
6557 skip_mac_1 = 1;
6559 spin_lock_bh(&tp->lock);
6560 __tg3_set_mac_addr(tp, skip_mac_1);
6561 spin_unlock_bh(&tp->lock);
6563 return err;
6566 /* tp->lock is held. */
6567 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
6568 dma_addr_t mapping, u32 maxlen_flags,
6569 u32 nic_addr)
6571 tg3_write_mem(tp,
6572 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
6573 ((u64) mapping >> 32));
6574 tg3_write_mem(tp,
6575 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
6576 ((u64) mapping & 0xffffffff));
6577 tg3_write_mem(tp,
6578 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
6579 maxlen_flags);
6581 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
6582 tg3_write_mem(tp,
6583 (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
6584 nic_addr);
6587 static void __tg3_set_rx_mode(struct net_device *);
6588 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
6590 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
6591 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
6592 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
6593 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
6594 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6595 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
6596 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
6598 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
6599 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
6600 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6601 u32 val = ec->stats_block_coalesce_usecs;
6603 if (!netif_carrier_ok(tp->dev))
6604 val = 0;
6606 tw32(HOSTCC_STAT_COAL_TICKS, val);
6610 /* tp->lock is held. */
6611 static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
6613 u32 val, rdmac_mode;
6614 int i, err, limit;
6616 tg3_disable_ints(tp);
6618 tg3_stop_fw(tp);
6620 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
6622 if (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) {
6623 tg3_abort_hw(tp, 1);
6626 if (reset_phy)
6627 tg3_phy_reset(tp);
6629 err = tg3_chip_reset(tp);
6630 if (err)
6631 return err;
6633 tg3_write_sig_legacy(tp, RESET_KIND_INIT);
6635 if (tp->pci_chip_rev_id == CHIPREV_ID_5784_A0 ||
6636 tp->pci_chip_rev_id == CHIPREV_ID_5784_A1) {
6637 val = tr32(TG3_CPMU_CTRL);
6638 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
6639 tw32(TG3_CPMU_CTRL, val);
6641 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
6642 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
6643 val |= CPMU_LSPD_10MB_MACCLK_6_25;
6644 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
6646 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
6647 val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
6648 val |= CPMU_LNK_AWARE_MACCLK_6_25;
6649 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
6651 val = tr32(TG3_CPMU_HST_ACC);
6652 val &= ~CPMU_HST_ACC_MACCLK_MASK;
6653 val |= CPMU_HST_ACC_MACCLK_6_25;
6654 tw32(TG3_CPMU_HST_ACC, val);
6657 /* This works around an issue with Athlon chipsets on
6658 * B3 tigon3 silicon. This bit has no effect on any
6659 * other revision. But do not set this on PCI Express
6660 * chips and don't even touch the clocks if the CPMU is present.
6662 if (!(tp->tg3_flags & TG3_FLAG_CPMU_PRESENT)) {
6663 if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
6664 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
6665 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
6668 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
6669 (tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
6670 val = tr32(TG3PCI_PCISTATE);
6671 val |= PCISTATE_RETRY_SAME_DMA;
6672 tw32(TG3PCI_PCISTATE, val);
6675 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) {
6676 /* Allow reads and writes to the
6677 * APE register and memory space.
6679 val = tr32(TG3PCI_PCISTATE);
6680 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
6681 PCISTATE_ALLOW_APE_SHMEM_WR;
6682 tw32(TG3PCI_PCISTATE, val);
6685 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) {
6686 /* Enable some hw fixes. */
6687 val = tr32(TG3PCI_MSI_DATA);
6688 val |= (1 << 26) | (1 << 28) | (1 << 29);
6689 tw32(TG3PCI_MSI_DATA, val);
6692 /* Descriptor ring init may make accesses to the
6693 * NIC SRAM area to setup the TX descriptors, so we
6694 * can only do this after the hardware has been
6695 * successfully reset.
6697 err = tg3_init_rings(tp);
6698 if (err)
6699 return err;
6701 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
6702 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) {
6703 /* This value is determined during the probe time DMA
6704 * engine test, tg3_test_dma.
6706 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
6709 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
6710 GRC_MODE_4X_NIC_SEND_RINGS |
6711 GRC_MODE_NO_TX_PHDR_CSUM |
6712 GRC_MODE_NO_RX_PHDR_CSUM);
6713 tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
6715 /* Pseudo-header checksum is done by hardware logic and not
6716 * the offload processers, so make the chip do the pseudo-
6717 * header checksums on receive. For transmit it is more
6718 * convenient to do the pseudo-header checksum in software
6719 * as Linux does that on transmit for us in all cases.
6721 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
6723 tw32(GRC_MODE,
6724 tp->grc_mode |
6725 (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
6727 /* Setup the timer prescalar register. Clock is always 66Mhz. */
6728 val = tr32(GRC_MISC_CFG);
6729 val &= ~0xff;
6730 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
6731 tw32(GRC_MISC_CFG, val);
6733 /* Initialize MBUF/DESC pool. */
6734 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
6735 /* Do nothing. */
6736 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
6737 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
6738 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
6739 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
6740 else
6741 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
6742 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
6743 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
6745 else if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
6746 int fw_len;
6748 fw_len = (TG3_TSO5_FW_TEXT_LEN +
6749 TG3_TSO5_FW_RODATA_LEN +
6750 TG3_TSO5_FW_DATA_LEN +
6751 TG3_TSO5_FW_SBSS_LEN +
6752 TG3_TSO5_FW_BSS_LEN);
6753 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
6754 tw32(BUFMGR_MB_POOL_ADDR,
6755 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
6756 tw32(BUFMGR_MB_POOL_SIZE,
6757 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
6760 if (tp->dev->mtu <= ETH_DATA_LEN) {
6761 tw32(BUFMGR_MB_RDMA_LOW_WATER,
6762 tp->bufmgr_config.mbuf_read_dma_low_water);
6763 tw32(BUFMGR_MB_MACRX_LOW_WATER,
6764 tp->bufmgr_config.mbuf_mac_rx_low_water);
6765 tw32(BUFMGR_MB_HIGH_WATER,
6766 tp->bufmgr_config.mbuf_high_water);
6767 } else {
6768 tw32(BUFMGR_MB_RDMA_LOW_WATER,
6769 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
6770 tw32(BUFMGR_MB_MACRX_LOW_WATER,
6771 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
6772 tw32(BUFMGR_MB_HIGH_WATER,
6773 tp->bufmgr_config.mbuf_high_water_jumbo);
6775 tw32(BUFMGR_DMA_LOW_WATER,
6776 tp->bufmgr_config.dma_low_water);
6777 tw32(BUFMGR_DMA_HIGH_WATER,
6778 tp->bufmgr_config.dma_high_water);
6780 tw32(BUFMGR_MODE, BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE);
6781 for (i = 0; i < 2000; i++) {
6782 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
6783 break;
6784 udelay(10);
6786 if (i >= 2000) {
6787 printk(KERN_ERR PFX "tg3_reset_hw cannot enable BUFMGR for %s.\n",
6788 tp->dev->name);
6789 return -ENODEV;
6792 /* Setup replenish threshold. */
6793 val = tp->rx_pending / 8;
6794 if (val == 0)
6795 val = 1;
6796 else if (val > tp->rx_std_max_post)
6797 val = tp->rx_std_max_post;
6798 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
6799 if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1)
6800 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
6802 if (val > (TG3_RX_INTERNAL_RING_SZ_5906 / 2))
6803 val = TG3_RX_INTERNAL_RING_SZ_5906 / 2;
6806 tw32(RCVBDI_STD_THRESH, val);
6808 /* Initialize TG3_BDINFO's at:
6809 * RCVDBDI_STD_BD: standard eth size rx ring
6810 * RCVDBDI_JUMBO_BD: jumbo frame rx ring
6811 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work)
6813 * like so:
6814 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring
6815 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) |
6816 * ring attribute flags
6817 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM
6819 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
6820 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
6822 * The size of each ring is fixed in the firmware, but the location is
6823 * configurable.
6825 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
6826 ((u64) tp->rx_std_mapping >> 32));
6827 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
6828 ((u64) tp->rx_std_mapping & 0xffffffff));
6829 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
6830 NIC_SRAM_RX_BUFFER_DESC);
6832 /* Don't even try to program the JUMBO/MINI buffer descriptor
6833 * configs on 5705.
6835 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
6836 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS,
6837 RX_STD_MAX_SIZE_5705 << BDINFO_FLAGS_MAXLEN_SHIFT);
6838 } else {
6839 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS,
6840 RX_STD_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT);
6842 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
6843 BDINFO_FLAGS_DISABLED);
6845 /* Setup replenish threshold. */
6846 tw32(RCVBDI_JUMBO_THRESH, tp->rx_jumbo_pending / 8);
6848 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
6849 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
6850 ((u64) tp->rx_jumbo_mapping >> 32));
6851 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
6852 ((u64) tp->rx_jumbo_mapping & 0xffffffff));
6853 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
6854 RX_JUMBO_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT);
6855 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
6856 NIC_SRAM_RX_JUMBO_BUFFER_DESC);
6857 } else {
6858 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
6859 BDINFO_FLAGS_DISABLED);
6864 /* There is only one send ring on 5705/5750, no need to explicitly
6865 * disable the others.
6867 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6868 /* Clear out send RCB ring in SRAM. */
6869 for (i = NIC_SRAM_SEND_RCB; i < NIC_SRAM_RCV_RET_RCB; i += TG3_BDINFO_SIZE)
6870 tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS,
6871 BDINFO_FLAGS_DISABLED);
6874 tp->tx_prod = 0;
6875 tp->tx_cons = 0;
6876 tw32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
6877 tw32_tx_mbox(MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
6879 tg3_set_bdinfo(tp, NIC_SRAM_SEND_RCB,
6880 tp->tx_desc_mapping,
6881 (TG3_TX_RING_SIZE <<
6882 BDINFO_FLAGS_MAXLEN_SHIFT),
6883 NIC_SRAM_TX_BUFFER_DESC);
6885 /* There is only one receive return ring on 5705/5750, no need
6886 * to explicitly disable the others.
6888 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6889 for (i = NIC_SRAM_RCV_RET_RCB; i < NIC_SRAM_STATS_BLK;
6890 i += TG3_BDINFO_SIZE) {
6891 tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS,
6892 BDINFO_FLAGS_DISABLED);
6896 tp->rx_rcb_ptr = 0;
6897 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, 0);
6899 tg3_set_bdinfo(tp, NIC_SRAM_RCV_RET_RCB,
6900 tp->rx_rcb_mapping,
6901 (TG3_RX_RCB_RING_SIZE(tp) <<
6902 BDINFO_FLAGS_MAXLEN_SHIFT),
6905 tp->rx_std_ptr = tp->rx_pending;
6906 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW,
6907 tp->rx_std_ptr);
6909 tp->rx_jumbo_ptr = (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) ?
6910 tp->rx_jumbo_pending : 0;
6911 tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW,
6912 tp->rx_jumbo_ptr);
6914 /* Initialize MAC address and backoff seed. */
6915 __tg3_set_mac_addr(tp, 0);
6917 /* MTU + ethernet header + FCS + optional VLAN tag */
6918 tw32(MAC_RX_MTU_SIZE, tp->dev->mtu + ETH_HLEN + 8);
6920 /* The slot time is changed by tg3_setup_phy if we
6921 * run at gigabit with half duplex.
6923 tw32(MAC_TX_LENGTHS,
6924 (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6925 (6 << TX_LENGTHS_IPG_SHIFT) |
6926 (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6928 /* Receive rules. */
6929 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
6930 tw32(RCVLPC_CONFIG, 0x0181);
6932 /* Calculate RDMAC_MODE setting early, we need it to determine
6933 * the RCVLPC_STATE_ENABLE mask.
6935 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
6936 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
6937 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
6938 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
6939 RDMAC_MODE_LNGREAD_ENAB);
6941 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784)
6942 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
6943 RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
6944 RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
6946 /* If statement applies to 5705 and 5750 PCI devices only */
6947 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
6948 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) ||
6949 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)) {
6950 if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE &&
6951 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
6952 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
6953 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
6954 !(tp->tg3_flags2 & TG3_FLG2_IS_5788)) {
6955 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
6959 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)
6960 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
6962 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
6963 rdmac_mode |= (1 << 27);
6965 /* Receive/send statistics. */
6966 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
6967 val = tr32(RCVLPC_STATS_ENABLE);
6968 val &= ~RCVLPC_STATSENAB_DACK_FIX;
6969 tw32(RCVLPC_STATS_ENABLE, val);
6970 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
6971 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) {
6972 val = tr32(RCVLPC_STATS_ENABLE);
6973 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
6974 tw32(RCVLPC_STATS_ENABLE, val);
6975 } else {
6976 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
6978 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
6979 tw32(SNDDATAI_STATSENAB, 0xffffff);
6980 tw32(SNDDATAI_STATSCTRL,
6981 (SNDDATAI_SCTRL_ENABLE |
6982 SNDDATAI_SCTRL_FASTUPD));
6984 /* Setup host coalescing engine. */
6985 tw32(HOSTCC_MODE, 0);
6986 for (i = 0; i < 2000; i++) {
6987 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
6988 break;
6989 udelay(10);
6992 __tg3_set_coalesce(tp, &tp->coal);
6994 /* set status block DMA address */
6995 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
6996 ((u64) tp->status_mapping >> 32));
6997 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
6998 ((u64) tp->status_mapping & 0xffffffff));
7000 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
7001 /* Status/statistics block address. See tg3_timer,
7002 * the tg3_periodic_fetch_stats call there, and
7003 * tg3_get_stats to see how this works for 5705/5750 chips.
7005 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
7006 ((u64) tp->stats_mapping >> 32));
7007 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
7008 ((u64) tp->stats_mapping & 0xffffffff));
7009 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
7010 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
7013 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
7015 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
7016 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
7017 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
7018 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
7020 /* Clear statistics/status block in chip, and status block in ram. */
7021 for (i = NIC_SRAM_STATS_BLK;
7022 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
7023 i += sizeof(u32)) {
7024 tg3_write_mem(tp, i, 0);
7025 udelay(40);
7027 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
7029 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
7030 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
7031 /* reset to prevent losing 1st rx packet intermittently */
7032 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
7033 udelay(10);
7036 tp->mac_mode = MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
7037 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | MAC_MODE_FHDE_ENABLE;
7038 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
7039 !(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) &&
7040 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
7041 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
7042 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
7043 udelay(40);
7045 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
7046 * If TG3_FLG2_IS_NIC is zero, we should read the
7047 * register to preserve the GPIO settings for LOMs. The GPIOs,
7048 * whether used as inputs or outputs, are set by boot code after
7049 * reset.
7051 if (!(tp->tg3_flags2 & TG3_FLG2_IS_NIC)) {
7052 u32 gpio_mask;
7054 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
7055 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
7056 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
7058 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
7059 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
7060 GRC_LCLCTRL_GPIO_OUTPUT3;
7062 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
7063 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
7065 tp->grc_local_ctrl &= ~gpio_mask;
7066 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
7068 /* GPIO1 must be driven high for eeprom write protect */
7069 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT)
7070 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
7071 GRC_LCLCTRL_GPIO_OUTPUT1);
7073 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
7074 udelay(100);
7076 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0);
7077 tp->last_tag = 0;
7079 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
7080 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
7081 udelay(40);
7084 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
7085 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
7086 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
7087 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
7088 WDMAC_MODE_LNGREAD_ENAB);
7090 /* If statement applies to 5705 and 5750 PCI devices only */
7091 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
7092 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) ||
7093 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) {
7094 if ((tp->tg3_flags & TG3_FLG2_TSO_CAPABLE) &&
7095 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
7096 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
7097 /* nothing */
7098 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
7099 !(tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
7100 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) {
7101 val |= WDMAC_MODE_RX_ACCEL;
7105 /* Enable host coalescing bug fix */
7106 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) ||
7107 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) ||
7108 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784) ||
7109 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761))
7110 val |= (1 << 29);
7112 tw32_f(WDMAC_MODE, val);
7113 udelay(40);
7115 if (tp->tg3_flags & TG3_FLAG_PCIX_MODE) {
7116 u16 pcix_cmd;
7118 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7119 &pcix_cmd);
7120 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
7121 pcix_cmd &= ~PCI_X_CMD_MAX_READ;
7122 pcix_cmd |= PCI_X_CMD_READ_2K;
7123 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
7124 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
7125 pcix_cmd |= PCI_X_CMD_READ_2K;
7127 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7128 pcix_cmd);
7131 tw32_f(RDMAC_MODE, rdmac_mode);
7132 udelay(40);
7134 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
7135 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
7136 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
7138 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
7139 tw32(SNDDATAC_MODE,
7140 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
7141 else
7142 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
7144 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
7145 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
7146 tw32(RCVDBDI_MODE, RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ);
7147 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
7148 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
7149 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
7150 tw32(SNDBDI_MODE, SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE);
7151 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
7153 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
7154 err = tg3_load_5701_a0_firmware_fix(tp);
7155 if (err)
7156 return err;
7159 if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
7160 err = tg3_load_tso_firmware(tp);
7161 if (err)
7162 return err;
7165 tp->tx_mode = TX_MODE_ENABLE;
7166 tw32_f(MAC_TX_MODE, tp->tx_mode);
7167 udelay(100);
7169 tp->rx_mode = RX_MODE_ENABLE;
7170 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
7171 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
7172 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
7174 tw32_f(MAC_RX_MODE, tp->rx_mode);
7175 udelay(10);
7177 if (tp->link_config.phy_is_low_power) {
7178 tp->link_config.phy_is_low_power = 0;
7179 tp->link_config.speed = tp->link_config.orig_speed;
7180 tp->link_config.duplex = tp->link_config.orig_duplex;
7181 tp->link_config.autoneg = tp->link_config.orig_autoneg;
7184 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL;
7185 tw32_f(MAC_MI_MODE, tp->mi_mode);
7186 udelay(80);
7188 tw32(MAC_LED_CTRL, tp->led_ctrl);
7190 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
7191 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
7192 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
7193 udelay(10);
7195 tw32_f(MAC_RX_MODE, tp->rx_mode);
7196 udelay(10);
7198 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
7199 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
7200 !(tp->tg3_flags2 & TG3_FLG2_SERDES_PREEMPHASIS)) {
7201 /* Set drive transmission level to 1.2V */
7202 /* only if the signal pre-emphasis bit is not set */
7203 val = tr32(MAC_SERDES_CFG);
7204 val &= 0xfffff000;
7205 val |= 0x880;
7206 tw32(MAC_SERDES_CFG, val);
7208 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
7209 tw32(MAC_SERDES_CFG, 0x616000);
7212 /* Prevent chip from dropping frames when flow control
7213 * is enabled.
7215 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, 2);
7217 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
7218 (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
7219 /* Use hardware link auto-negotiation */
7220 tp->tg3_flags2 |= TG3_FLG2_HW_AUTONEG;
7223 if ((tp->tg3_flags2 & TG3_FLG2_MII_SERDES) &&
7224 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
7225 u32 tmp;
7227 tmp = tr32(SERDES_RX_CTRL);
7228 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
7229 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
7230 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
7231 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
7234 err = tg3_setup_phy(tp, 0);
7235 if (err)
7236 return err;
7238 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) &&
7239 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906) {
7240 u32 tmp;
7242 /* Clear CRC stats. */
7243 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
7244 tg3_writephy(tp, MII_TG3_TEST1,
7245 tmp | MII_TG3_TEST1_CRC_EN);
7246 tg3_readphy(tp, 0x14, &tmp);
7250 __tg3_set_rx_mode(tp->dev);
7252 /* Initialize receive rules. */
7253 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK);
7254 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
7255 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK);
7256 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
7258 if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
7259 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
7260 limit = 8;
7261 else
7262 limit = 16;
7263 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF)
7264 limit -= 4;
7265 switch (limit) {
7266 case 16:
7267 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0);
7268 case 15:
7269 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0);
7270 case 14:
7271 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0);
7272 case 13:
7273 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0);
7274 case 12:
7275 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0);
7276 case 11:
7277 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0);
7278 case 10:
7279 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0);
7280 case 9:
7281 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0);
7282 case 8:
7283 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0);
7284 case 7:
7285 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0);
7286 case 6:
7287 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0);
7288 case 5:
7289 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0);
7290 case 4:
7291 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */
7292 case 3:
7293 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */
7294 case 2:
7295 case 1:
7297 default:
7298 break;
7301 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE)
7302 /* Write our heartbeat update interval to APE. */
7303 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
7304 APE_HOST_HEARTBEAT_INT_DISABLE);
7306 tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
7308 return 0;
7311 /* Called at device open time to get the chip ready for
7312 * packet processing. Invoked with tp->lock held.
7314 static int tg3_init_hw(struct tg3 *tp, int reset_phy)
7316 int err;
7318 /* Force the chip into D0. */
7319 err = tg3_set_power_state(tp, PCI_D0);
7320 if (err)
7321 goto out;
7323 tg3_switch_clocks(tp);
7325 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
7327 err = tg3_reset_hw(tp, reset_phy);
7329 out:
7330 return err;
7333 #define TG3_STAT_ADD32(PSTAT, REG) \
7334 do { u32 __val = tr32(REG); \
7335 (PSTAT)->low += __val; \
7336 if ((PSTAT)->low < __val) \
7337 (PSTAT)->high += 1; \
7338 } while (0)
7340 static void tg3_periodic_fetch_stats(struct tg3 *tp)
7342 struct tg3_hw_stats *sp = tp->hw_stats;
7344 if (!netif_carrier_ok(tp->dev))
7345 return;
7347 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
7348 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
7349 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
7350 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
7351 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
7352 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
7353 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
7354 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
7355 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
7356 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
7357 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
7358 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
7359 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
7361 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
7362 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
7363 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
7364 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
7365 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
7366 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
7367 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
7368 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
7369 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
7370 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
7371 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
7372 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
7373 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
7374 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
7376 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
7377 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
7378 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
7381 static void tg3_timer(unsigned long __opaque)
7383 struct tg3 *tp = (struct tg3 *) __opaque;
7385 if (tp->irq_sync)
7386 goto restart_timer;
7388 spin_lock(&tp->lock);
7390 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
7391 /* All of this garbage is because when using non-tagged
7392 * IRQ status the mailbox/status_block protocol the chip
7393 * uses with the cpu is race prone.
7395 if (tp->hw_status->status & SD_STATUS_UPDATED) {
7396 tw32(GRC_LOCAL_CTRL,
7397 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
7398 } else {
7399 tw32(HOSTCC_MODE, tp->coalesce_mode |
7400 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
7403 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
7404 tp->tg3_flags2 |= TG3_FLG2_RESTART_TIMER;
7405 spin_unlock(&tp->lock);
7406 schedule_work(&tp->reset_task);
7407 return;
7411 /* This part only runs once per second. */
7412 if (!--tp->timer_counter) {
7413 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
7414 tg3_periodic_fetch_stats(tp);
7416 if (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) {
7417 u32 mac_stat;
7418 int phy_event;
7420 mac_stat = tr32(MAC_STATUS);
7422 phy_event = 0;
7423 if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) {
7424 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
7425 phy_event = 1;
7426 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
7427 phy_event = 1;
7429 if (phy_event)
7430 tg3_setup_phy(tp, 0);
7431 } else if (tp->tg3_flags & TG3_FLAG_POLL_SERDES) {
7432 u32 mac_stat = tr32(MAC_STATUS);
7433 int need_setup = 0;
7435 if (netif_carrier_ok(tp->dev) &&
7436 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
7437 need_setup = 1;
7439 if (! netif_carrier_ok(tp->dev) &&
7440 (mac_stat & (MAC_STATUS_PCS_SYNCED |
7441 MAC_STATUS_SIGNAL_DET))) {
7442 need_setup = 1;
7444 if (need_setup) {
7445 if (!tp->serdes_counter) {
7446 tw32_f(MAC_MODE,
7447 (tp->mac_mode &
7448 ~MAC_MODE_PORT_MODE_MASK));
7449 udelay(40);
7450 tw32_f(MAC_MODE, tp->mac_mode);
7451 udelay(40);
7453 tg3_setup_phy(tp, 0);
7455 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
7456 tg3_serdes_parallel_detect(tp);
7458 tp->timer_counter = tp->timer_multiplier;
7461 /* Heartbeat is only sent once every 2 seconds.
7463 * The heartbeat is to tell the ASF firmware that the host
7464 * driver is still alive. In the event that the OS crashes,
7465 * ASF needs to reset the hardware to free up the FIFO space
7466 * that may be filled with rx packets destined for the host.
7467 * If the FIFO is full, ASF will no longer function properly.
7469 * Unintended resets have been reported on real time kernels
7470 * where the timer doesn't run on time. Netpoll will also have
7471 * same problem.
7473 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
7474 * to check the ring condition when the heartbeat is expiring
7475 * before doing the reset. This will prevent most unintended
7476 * resets.
7478 if (!--tp->asf_counter) {
7479 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
7480 u32 val;
7482 tg3_wait_for_event_ack(tp);
7484 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
7485 FWCMD_NICDRV_ALIVE3);
7486 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
7487 /* 5 seconds timeout */
7488 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 5);
7489 val = tr32(GRC_RX_CPU_EVENT);
7490 val |= GRC_RX_CPU_DRIVER_EVENT;
7491 tw32_f(GRC_RX_CPU_EVENT, val);
7493 tp->asf_counter = tp->asf_multiplier;
7496 spin_unlock(&tp->lock);
7498 restart_timer:
7499 tp->timer.expires = jiffies + tp->timer_offset;
7500 add_timer(&tp->timer);
7503 static int tg3_request_irq(struct tg3 *tp)
7505 irq_handler_t fn;
7506 unsigned long flags;
7507 struct net_device *dev = tp->dev;
7509 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7510 fn = tg3_msi;
7511 if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI)
7512 fn = tg3_msi_1shot;
7513 flags = IRQF_SAMPLE_RANDOM;
7514 } else {
7515 fn = tg3_interrupt;
7516 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
7517 fn = tg3_interrupt_tagged;
7518 flags = IRQF_SHARED | IRQF_SAMPLE_RANDOM;
7520 return (request_irq(tp->pdev->irq, fn, flags, dev->name, dev));
7523 static int tg3_test_interrupt(struct tg3 *tp)
7525 struct net_device *dev = tp->dev;
7526 int err, i, intr_ok = 0;
7528 if (!netif_running(dev))
7529 return -ENODEV;
7531 tg3_disable_ints(tp);
7533 free_irq(tp->pdev->irq, dev);
7535 err = request_irq(tp->pdev->irq, tg3_test_isr,
7536 IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, dev);
7537 if (err)
7538 return err;
7540 tp->hw_status->status &= ~SD_STATUS_UPDATED;
7541 tg3_enable_ints(tp);
7543 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
7544 HOSTCC_MODE_NOW);
7546 for (i = 0; i < 5; i++) {
7547 u32 int_mbox, misc_host_ctrl;
7549 int_mbox = tr32_mailbox(MAILBOX_INTERRUPT_0 +
7550 TG3_64BIT_REG_LOW);
7551 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
7553 if ((int_mbox != 0) ||
7554 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
7555 intr_ok = 1;
7556 break;
7559 msleep(10);
7562 tg3_disable_ints(tp);
7564 free_irq(tp->pdev->irq, dev);
7566 err = tg3_request_irq(tp);
7568 if (err)
7569 return err;
7571 if (intr_ok)
7572 return 0;
7574 return -EIO;
7577 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
7578 * successfully restored
7580 static int tg3_test_msi(struct tg3 *tp)
7582 struct net_device *dev = tp->dev;
7583 int err;
7584 u16 pci_cmd;
7586 if (!(tp->tg3_flags2 & TG3_FLG2_USING_MSI))
7587 return 0;
7589 /* Turn off SERR reporting in case MSI terminates with Master
7590 * Abort.
7592 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
7593 pci_write_config_word(tp->pdev, PCI_COMMAND,
7594 pci_cmd & ~PCI_COMMAND_SERR);
7596 err = tg3_test_interrupt(tp);
7598 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
7600 if (!err)
7601 return 0;
7603 /* other failures */
7604 if (err != -EIO)
7605 return err;
7607 /* MSI test failed, go back to INTx mode */
7608 printk(KERN_WARNING PFX "%s: No interrupt was generated using MSI, "
7609 "switching to INTx mode. Please report this failure to "
7610 "the PCI maintainer and include system chipset information.\n",
7611 tp->dev->name);
7613 free_irq(tp->pdev->irq, dev);
7614 pci_disable_msi(tp->pdev);
7616 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7618 err = tg3_request_irq(tp);
7619 if (err)
7620 return err;
7622 /* Need to reset the chip because the MSI cycle may have terminated
7623 * with Master Abort.
7625 tg3_full_lock(tp, 1);
7627 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7628 err = tg3_init_hw(tp, 1);
7630 tg3_full_unlock(tp);
7632 if (err)
7633 free_irq(tp->pdev->irq, dev);
7635 return err;
7638 static int tg3_open(struct net_device *dev)
7640 struct tg3 *tp = netdev_priv(dev);
7641 int err;
7643 netif_carrier_off(tp->dev);
7645 tg3_full_lock(tp, 0);
7647 err = tg3_set_power_state(tp, PCI_D0);
7648 if (err) {
7649 tg3_full_unlock(tp);
7650 return err;
7653 tg3_disable_ints(tp);
7654 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
7656 tg3_full_unlock(tp);
7658 /* The placement of this call is tied
7659 * to the setup and use of Host TX descriptors.
7661 err = tg3_alloc_consistent(tp);
7662 if (err)
7663 return err;
7665 if (tp->tg3_flags & TG3_FLAG_SUPPORT_MSI) {
7666 /* All MSI supporting chips should support tagged
7667 * status. Assert that this is the case.
7669 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
7670 printk(KERN_WARNING PFX "%s: MSI without TAGGED? "
7671 "Not using MSI.\n", tp->dev->name);
7672 } else if (pci_enable_msi(tp->pdev) == 0) {
7673 u32 msi_mode;
7675 msi_mode = tr32(MSGINT_MODE);
7676 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
7677 tp->tg3_flags2 |= TG3_FLG2_USING_MSI;
7680 err = tg3_request_irq(tp);
7682 if (err) {
7683 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7684 pci_disable_msi(tp->pdev);
7685 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7687 tg3_free_consistent(tp);
7688 return err;
7691 napi_enable(&tp->napi);
7693 tg3_full_lock(tp, 0);
7695 err = tg3_init_hw(tp, 1);
7696 if (err) {
7697 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7698 tg3_free_rings(tp);
7699 } else {
7700 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
7701 tp->timer_offset = HZ;
7702 else
7703 tp->timer_offset = HZ / 10;
7705 BUG_ON(tp->timer_offset > HZ);
7706 tp->timer_counter = tp->timer_multiplier =
7707 (HZ / tp->timer_offset);
7708 tp->asf_counter = tp->asf_multiplier =
7709 ((HZ / tp->timer_offset) * 2);
7711 init_timer(&tp->timer);
7712 tp->timer.expires = jiffies + tp->timer_offset;
7713 tp->timer.data = (unsigned long) tp;
7714 tp->timer.function = tg3_timer;
7717 tg3_full_unlock(tp);
7719 if (err) {
7720 napi_disable(&tp->napi);
7721 free_irq(tp->pdev->irq, dev);
7722 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7723 pci_disable_msi(tp->pdev);
7724 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7726 tg3_free_consistent(tp);
7727 return err;
7730 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7731 err = tg3_test_msi(tp);
7733 if (err) {
7734 tg3_full_lock(tp, 0);
7736 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7737 pci_disable_msi(tp->pdev);
7738 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7740 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7741 tg3_free_rings(tp);
7742 tg3_free_consistent(tp);
7744 tg3_full_unlock(tp);
7746 napi_disable(&tp->napi);
7748 return err;
7751 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7752 if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI) {
7753 u32 val = tr32(PCIE_TRANSACTION_CFG);
7755 tw32(PCIE_TRANSACTION_CFG,
7756 val | PCIE_TRANS_CFG_1SHOT_MSI);
7761 tg3_full_lock(tp, 0);
7763 add_timer(&tp->timer);
7764 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
7765 tg3_enable_ints(tp);
7767 tg3_full_unlock(tp);
7769 netif_start_queue(dev);
7771 return 0;
7774 #if 0
7775 /*static*/ void tg3_dump_state(struct tg3 *tp)
7777 u32 val32, val32_2, val32_3, val32_4, val32_5;
7778 u16 val16;
7779 int i;
7781 pci_read_config_word(tp->pdev, PCI_STATUS, &val16);
7782 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, &val32);
7783 printk("DEBUG: PCI status [%04x] TG3PCI state[%08x]\n",
7784 val16, val32);
7786 /* MAC block */
7787 printk("DEBUG: MAC_MODE[%08x] MAC_STATUS[%08x]\n",
7788 tr32(MAC_MODE), tr32(MAC_STATUS));
7789 printk(" MAC_EVENT[%08x] MAC_LED_CTRL[%08x]\n",
7790 tr32(MAC_EVENT), tr32(MAC_LED_CTRL));
7791 printk("DEBUG: MAC_TX_MODE[%08x] MAC_TX_STATUS[%08x]\n",
7792 tr32(MAC_TX_MODE), tr32(MAC_TX_STATUS));
7793 printk(" MAC_RX_MODE[%08x] MAC_RX_STATUS[%08x]\n",
7794 tr32(MAC_RX_MODE), tr32(MAC_RX_STATUS));
7796 /* Send data initiator control block */
7797 printk("DEBUG: SNDDATAI_MODE[%08x] SNDDATAI_STATUS[%08x]\n",
7798 tr32(SNDDATAI_MODE), tr32(SNDDATAI_STATUS));
7799 printk(" SNDDATAI_STATSCTRL[%08x]\n",
7800 tr32(SNDDATAI_STATSCTRL));
7802 /* Send data completion control block */
7803 printk("DEBUG: SNDDATAC_MODE[%08x]\n", tr32(SNDDATAC_MODE));
7805 /* Send BD ring selector block */
7806 printk("DEBUG: SNDBDS_MODE[%08x] SNDBDS_STATUS[%08x]\n",
7807 tr32(SNDBDS_MODE), tr32(SNDBDS_STATUS));
7809 /* Send BD initiator control block */
7810 printk("DEBUG: SNDBDI_MODE[%08x] SNDBDI_STATUS[%08x]\n",
7811 tr32(SNDBDI_MODE), tr32(SNDBDI_STATUS));
7813 /* Send BD completion control block */
7814 printk("DEBUG: SNDBDC_MODE[%08x]\n", tr32(SNDBDC_MODE));
7816 /* Receive list placement control block */
7817 printk("DEBUG: RCVLPC_MODE[%08x] RCVLPC_STATUS[%08x]\n",
7818 tr32(RCVLPC_MODE), tr32(RCVLPC_STATUS));
7819 printk(" RCVLPC_STATSCTRL[%08x]\n",
7820 tr32(RCVLPC_STATSCTRL));
7822 /* Receive data and receive BD initiator control block */
7823 printk("DEBUG: RCVDBDI_MODE[%08x] RCVDBDI_STATUS[%08x]\n",
7824 tr32(RCVDBDI_MODE), tr32(RCVDBDI_STATUS));
7826 /* Receive data completion control block */
7827 printk("DEBUG: RCVDCC_MODE[%08x]\n",
7828 tr32(RCVDCC_MODE));
7830 /* Receive BD initiator control block */
7831 printk("DEBUG: RCVBDI_MODE[%08x] RCVBDI_STATUS[%08x]\n",
7832 tr32(RCVBDI_MODE), tr32(RCVBDI_STATUS));
7834 /* Receive BD completion control block */
7835 printk("DEBUG: RCVCC_MODE[%08x] RCVCC_STATUS[%08x]\n",
7836 tr32(RCVCC_MODE), tr32(RCVCC_STATUS));
7838 /* Receive list selector control block */
7839 printk("DEBUG: RCVLSC_MODE[%08x] RCVLSC_STATUS[%08x]\n",
7840 tr32(RCVLSC_MODE), tr32(RCVLSC_STATUS));
7842 /* Mbuf cluster free block */
7843 printk("DEBUG: MBFREE_MODE[%08x] MBFREE_STATUS[%08x]\n",
7844 tr32(MBFREE_MODE), tr32(MBFREE_STATUS));
7846 /* Host coalescing control block */
7847 printk("DEBUG: HOSTCC_MODE[%08x] HOSTCC_STATUS[%08x]\n",
7848 tr32(HOSTCC_MODE), tr32(HOSTCC_STATUS));
7849 printk("DEBUG: HOSTCC_STATS_BLK_HOST_ADDR[%08x%08x]\n",
7850 tr32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH),
7851 tr32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW));
7852 printk("DEBUG: HOSTCC_STATUS_BLK_HOST_ADDR[%08x%08x]\n",
7853 tr32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH),
7854 tr32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW));
7855 printk("DEBUG: HOSTCC_STATS_BLK_NIC_ADDR[%08x]\n",
7856 tr32(HOSTCC_STATS_BLK_NIC_ADDR));
7857 printk("DEBUG: HOSTCC_STATUS_BLK_NIC_ADDR[%08x]\n",
7858 tr32(HOSTCC_STATUS_BLK_NIC_ADDR));
7860 /* Memory arbiter control block */
7861 printk("DEBUG: MEMARB_MODE[%08x] MEMARB_STATUS[%08x]\n",
7862 tr32(MEMARB_MODE), tr32(MEMARB_STATUS));
7864 /* Buffer manager control block */
7865 printk("DEBUG: BUFMGR_MODE[%08x] BUFMGR_STATUS[%08x]\n",
7866 tr32(BUFMGR_MODE), tr32(BUFMGR_STATUS));
7867 printk("DEBUG: BUFMGR_MB_POOL_ADDR[%08x] BUFMGR_MB_POOL_SIZE[%08x]\n",
7868 tr32(BUFMGR_MB_POOL_ADDR), tr32(BUFMGR_MB_POOL_SIZE));
7869 printk("DEBUG: BUFMGR_DMA_DESC_POOL_ADDR[%08x] "
7870 "BUFMGR_DMA_DESC_POOL_SIZE[%08x]\n",
7871 tr32(BUFMGR_DMA_DESC_POOL_ADDR),
7872 tr32(BUFMGR_DMA_DESC_POOL_SIZE));
7874 /* Read DMA control block */
7875 printk("DEBUG: RDMAC_MODE[%08x] RDMAC_STATUS[%08x]\n",
7876 tr32(RDMAC_MODE), tr32(RDMAC_STATUS));
7878 /* Write DMA control block */
7879 printk("DEBUG: WDMAC_MODE[%08x] WDMAC_STATUS[%08x]\n",
7880 tr32(WDMAC_MODE), tr32(WDMAC_STATUS));
7882 /* DMA completion block */
7883 printk("DEBUG: DMAC_MODE[%08x]\n",
7884 tr32(DMAC_MODE));
7886 /* GRC block */
7887 printk("DEBUG: GRC_MODE[%08x] GRC_MISC_CFG[%08x]\n",
7888 tr32(GRC_MODE), tr32(GRC_MISC_CFG));
7889 printk("DEBUG: GRC_LOCAL_CTRL[%08x]\n",
7890 tr32(GRC_LOCAL_CTRL));
7892 /* TG3_BDINFOs */
7893 printk("DEBUG: RCVDBDI_JUMBO_BD[%08x%08x:%08x:%08x]\n",
7894 tr32(RCVDBDI_JUMBO_BD + 0x0),
7895 tr32(RCVDBDI_JUMBO_BD + 0x4),
7896 tr32(RCVDBDI_JUMBO_BD + 0x8),
7897 tr32(RCVDBDI_JUMBO_BD + 0xc));
7898 printk("DEBUG: RCVDBDI_STD_BD[%08x%08x:%08x:%08x]\n",
7899 tr32(RCVDBDI_STD_BD + 0x0),
7900 tr32(RCVDBDI_STD_BD + 0x4),
7901 tr32(RCVDBDI_STD_BD + 0x8),
7902 tr32(RCVDBDI_STD_BD + 0xc));
7903 printk("DEBUG: RCVDBDI_MINI_BD[%08x%08x:%08x:%08x]\n",
7904 tr32(RCVDBDI_MINI_BD + 0x0),
7905 tr32(RCVDBDI_MINI_BD + 0x4),
7906 tr32(RCVDBDI_MINI_BD + 0x8),
7907 tr32(RCVDBDI_MINI_BD + 0xc));
7909 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x0, &val32);
7910 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x4, &val32_2);
7911 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x8, &val32_3);
7912 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0xc, &val32_4);
7913 printk("DEBUG: SRAM_SEND_RCB_0[%08x%08x:%08x:%08x]\n",
7914 val32, val32_2, val32_3, val32_4);
7916 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x0, &val32);
7917 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x4, &val32_2);
7918 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x8, &val32_3);
7919 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0xc, &val32_4);
7920 printk("DEBUG: SRAM_RCV_RET_RCB_0[%08x%08x:%08x:%08x]\n",
7921 val32, val32_2, val32_3, val32_4);
7923 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x0, &val32);
7924 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x4, &val32_2);
7925 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x8, &val32_3);
7926 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0xc, &val32_4);
7927 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x10, &val32_5);
7928 printk("DEBUG: SRAM_STATUS_BLK[%08x:%08x:%08x:%08x:%08x]\n",
7929 val32, val32_2, val32_3, val32_4, val32_5);
7931 /* SW status block */
7932 printk("DEBUG: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
7933 tp->hw_status->status,
7934 tp->hw_status->status_tag,
7935 tp->hw_status->rx_jumbo_consumer,
7936 tp->hw_status->rx_consumer,
7937 tp->hw_status->rx_mini_consumer,
7938 tp->hw_status->idx[0].rx_producer,
7939 tp->hw_status->idx[0].tx_consumer);
7941 /* SW statistics block */
7942 printk("DEBUG: Host statistics block [%08x:%08x:%08x:%08x]\n",
7943 ((u32 *)tp->hw_stats)[0],
7944 ((u32 *)tp->hw_stats)[1],
7945 ((u32 *)tp->hw_stats)[2],
7946 ((u32 *)tp->hw_stats)[3]);
7948 /* Mailboxes */
7949 printk("DEBUG: SNDHOST_PROD[%08x%08x] SNDNIC_PROD[%08x%08x]\n",
7950 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + 0x0),
7951 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + 0x4),
7952 tr32_mailbox(MAILBOX_SNDNIC_PROD_IDX_0 + 0x0),
7953 tr32_mailbox(MAILBOX_SNDNIC_PROD_IDX_0 + 0x4));
7955 /* NIC side send descriptors. */
7956 for (i = 0; i < 6; i++) {
7957 unsigned long txd;
7959 txd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_TX_BUFFER_DESC
7960 + (i * sizeof(struct tg3_tx_buffer_desc));
7961 printk("DEBUG: NIC TXD(%d)[%08x:%08x:%08x:%08x]\n",
7963 readl(txd + 0x0), readl(txd + 0x4),
7964 readl(txd + 0x8), readl(txd + 0xc));
7967 /* NIC side RX descriptors. */
7968 for (i = 0; i < 6; i++) {
7969 unsigned long rxd;
7971 rxd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_RX_BUFFER_DESC
7972 + (i * sizeof(struct tg3_rx_buffer_desc));
7973 printk("DEBUG: NIC RXD_STD(%d)[0][%08x:%08x:%08x:%08x]\n",
7975 readl(rxd + 0x0), readl(rxd + 0x4),
7976 readl(rxd + 0x8), readl(rxd + 0xc));
7977 rxd += (4 * sizeof(u32));
7978 printk("DEBUG: NIC RXD_STD(%d)[1][%08x:%08x:%08x:%08x]\n",
7980 readl(rxd + 0x0), readl(rxd + 0x4),
7981 readl(rxd + 0x8), readl(rxd + 0xc));
7984 for (i = 0; i < 6; i++) {
7985 unsigned long rxd;
7987 rxd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_RX_JUMBO_BUFFER_DESC
7988 + (i * sizeof(struct tg3_rx_buffer_desc));
7989 printk("DEBUG: NIC RXD_JUMBO(%d)[0][%08x:%08x:%08x:%08x]\n",
7991 readl(rxd + 0x0), readl(rxd + 0x4),
7992 readl(rxd + 0x8), readl(rxd + 0xc));
7993 rxd += (4 * sizeof(u32));
7994 printk("DEBUG: NIC RXD_JUMBO(%d)[1][%08x:%08x:%08x:%08x]\n",
7996 readl(rxd + 0x0), readl(rxd + 0x4),
7997 readl(rxd + 0x8), readl(rxd + 0xc));
8000 #endif
8002 static struct net_device_stats *tg3_get_stats(struct net_device *);
8003 static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *);
8005 static int tg3_close(struct net_device *dev)
8007 struct tg3 *tp = netdev_priv(dev);
8009 napi_disable(&tp->napi);
8010 cancel_work_sync(&tp->reset_task);
8012 netif_stop_queue(dev);
8014 del_timer_sync(&tp->timer);
8016 tg3_full_lock(tp, 1);
8017 #if 0
8018 tg3_dump_state(tp);
8019 #endif
8021 tg3_disable_ints(tp);
8023 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
8024 tg3_free_rings(tp);
8025 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
8027 tg3_full_unlock(tp);
8029 free_irq(tp->pdev->irq, dev);
8030 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
8031 pci_disable_msi(tp->pdev);
8032 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
8035 memcpy(&tp->net_stats_prev, tg3_get_stats(tp->dev),
8036 sizeof(tp->net_stats_prev));
8037 memcpy(&tp->estats_prev, tg3_get_estats(tp),
8038 sizeof(tp->estats_prev));
8040 tg3_free_consistent(tp);
8042 tg3_set_power_state(tp, PCI_D3hot);
8044 netif_carrier_off(tp->dev);
8046 return 0;
8049 static inline unsigned long get_stat64(tg3_stat64_t *val)
8051 unsigned long ret;
8053 #if (BITS_PER_LONG == 32)
8054 ret = val->low;
8055 #else
8056 ret = ((u64)val->high << 32) | ((u64)val->low);
8057 #endif
8058 return ret;
8061 static unsigned long calc_crc_errors(struct tg3 *tp)
8063 struct tg3_hw_stats *hw_stats = tp->hw_stats;
8065 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) &&
8066 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
8067 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
8068 u32 val;
8070 spin_lock_bh(&tp->lock);
8071 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
8072 tg3_writephy(tp, MII_TG3_TEST1,
8073 val | MII_TG3_TEST1_CRC_EN);
8074 tg3_readphy(tp, 0x14, &val);
8075 } else
8076 val = 0;
8077 spin_unlock_bh(&tp->lock);
8079 tp->phy_crc_errors += val;
8081 return tp->phy_crc_errors;
8084 return get_stat64(&hw_stats->rx_fcs_errors);
8087 #define ESTAT_ADD(member) \
8088 estats->member = old_estats->member + \
8089 get_stat64(&hw_stats->member)
8091 static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp)
8093 struct tg3_ethtool_stats *estats = &tp->estats;
8094 struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
8095 struct tg3_hw_stats *hw_stats = tp->hw_stats;
8097 if (!hw_stats)
8098 return old_estats;
8100 ESTAT_ADD(rx_octets);
8101 ESTAT_ADD(rx_fragments);
8102 ESTAT_ADD(rx_ucast_packets);
8103 ESTAT_ADD(rx_mcast_packets);
8104 ESTAT_ADD(rx_bcast_packets);
8105 ESTAT_ADD(rx_fcs_errors);
8106 ESTAT_ADD(rx_align_errors);
8107 ESTAT_ADD(rx_xon_pause_rcvd);
8108 ESTAT_ADD(rx_xoff_pause_rcvd);
8109 ESTAT_ADD(rx_mac_ctrl_rcvd);
8110 ESTAT_ADD(rx_xoff_entered);
8111 ESTAT_ADD(rx_frame_too_long_errors);
8112 ESTAT_ADD(rx_jabbers);
8113 ESTAT_ADD(rx_undersize_packets);
8114 ESTAT_ADD(rx_in_length_errors);
8115 ESTAT_ADD(rx_out_length_errors);
8116 ESTAT_ADD(rx_64_or_less_octet_packets);
8117 ESTAT_ADD(rx_65_to_127_octet_packets);
8118 ESTAT_ADD(rx_128_to_255_octet_packets);
8119 ESTAT_ADD(rx_256_to_511_octet_packets);
8120 ESTAT_ADD(rx_512_to_1023_octet_packets);
8121 ESTAT_ADD(rx_1024_to_1522_octet_packets);
8122 ESTAT_ADD(rx_1523_to_2047_octet_packets);
8123 ESTAT_ADD(rx_2048_to_4095_octet_packets);
8124 ESTAT_ADD(rx_4096_to_8191_octet_packets);
8125 ESTAT_ADD(rx_8192_to_9022_octet_packets);
8127 ESTAT_ADD(tx_octets);
8128 ESTAT_ADD(tx_collisions);
8129 ESTAT_ADD(tx_xon_sent);
8130 ESTAT_ADD(tx_xoff_sent);
8131 ESTAT_ADD(tx_flow_control);
8132 ESTAT_ADD(tx_mac_errors);
8133 ESTAT_ADD(tx_single_collisions);
8134 ESTAT_ADD(tx_mult_collisions);
8135 ESTAT_ADD(tx_deferred);
8136 ESTAT_ADD(tx_excessive_collisions);
8137 ESTAT_ADD(tx_late_collisions);
8138 ESTAT_ADD(tx_collide_2times);
8139 ESTAT_ADD(tx_collide_3times);
8140 ESTAT_ADD(tx_collide_4times);
8141 ESTAT_ADD(tx_collide_5times);
8142 ESTAT_ADD(tx_collide_6times);
8143 ESTAT_ADD(tx_collide_7times);
8144 ESTAT_ADD(tx_collide_8times);
8145 ESTAT_ADD(tx_collide_9times);
8146 ESTAT_ADD(tx_collide_10times);
8147 ESTAT_ADD(tx_collide_11times);
8148 ESTAT_ADD(tx_collide_12times);
8149 ESTAT_ADD(tx_collide_13times);
8150 ESTAT_ADD(tx_collide_14times);
8151 ESTAT_ADD(tx_collide_15times);
8152 ESTAT_ADD(tx_ucast_packets);
8153 ESTAT_ADD(tx_mcast_packets);
8154 ESTAT_ADD(tx_bcast_packets);
8155 ESTAT_ADD(tx_carrier_sense_errors);
8156 ESTAT_ADD(tx_discards);
8157 ESTAT_ADD(tx_errors);
8159 ESTAT_ADD(dma_writeq_full);
8160 ESTAT_ADD(dma_write_prioq_full);
8161 ESTAT_ADD(rxbds_empty);
8162 ESTAT_ADD(rx_discards);
8163 ESTAT_ADD(rx_errors);
8164 ESTAT_ADD(rx_threshold_hit);
8166 ESTAT_ADD(dma_readq_full);
8167 ESTAT_ADD(dma_read_prioq_full);
8168 ESTAT_ADD(tx_comp_queue_full);
8170 ESTAT_ADD(ring_set_send_prod_index);
8171 ESTAT_ADD(ring_status_update);
8172 ESTAT_ADD(nic_irqs);
8173 ESTAT_ADD(nic_avoided_irqs);
8174 ESTAT_ADD(nic_tx_threshold_hit);
8176 return estats;
8179 static struct net_device_stats *tg3_get_stats(struct net_device *dev)
8181 struct tg3 *tp = netdev_priv(dev);
8182 struct net_device_stats *stats = &tp->net_stats;
8183 struct net_device_stats *old_stats = &tp->net_stats_prev;
8184 struct tg3_hw_stats *hw_stats = tp->hw_stats;
8186 if (!hw_stats)
8187 return old_stats;
8189 stats->rx_packets = old_stats->rx_packets +
8190 get_stat64(&hw_stats->rx_ucast_packets) +
8191 get_stat64(&hw_stats->rx_mcast_packets) +
8192 get_stat64(&hw_stats->rx_bcast_packets);
8194 stats->tx_packets = old_stats->tx_packets +
8195 get_stat64(&hw_stats->tx_ucast_packets) +
8196 get_stat64(&hw_stats->tx_mcast_packets) +
8197 get_stat64(&hw_stats->tx_bcast_packets);
8199 stats->rx_bytes = old_stats->rx_bytes +
8200 get_stat64(&hw_stats->rx_octets);
8201 stats->tx_bytes = old_stats->tx_bytes +
8202 get_stat64(&hw_stats->tx_octets);
8204 stats->rx_errors = old_stats->rx_errors +
8205 get_stat64(&hw_stats->rx_errors);
8206 stats->tx_errors = old_stats->tx_errors +
8207 get_stat64(&hw_stats->tx_errors) +
8208 get_stat64(&hw_stats->tx_mac_errors) +
8209 get_stat64(&hw_stats->tx_carrier_sense_errors) +
8210 get_stat64(&hw_stats->tx_discards);
8212 stats->multicast = old_stats->multicast +
8213 get_stat64(&hw_stats->rx_mcast_packets);
8214 stats->collisions = old_stats->collisions +
8215 get_stat64(&hw_stats->tx_collisions);
8217 stats->rx_length_errors = old_stats->rx_length_errors +
8218 get_stat64(&hw_stats->rx_frame_too_long_errors) +
8219 get_stat64(&hw_stats->rx_undersize_packets);
8221 stats->rx_over_errors = old_stats->rx_over_errors +
8222 get_stat64(&hw_stats->rxbds_empty);
8223 stats->rx_frame_errors = old_stats->rx_frame_errors +
8224 get_stat64(&hw_stats->rx_align_errors);
8225 stats->tx_aborted_errors = old_stats->tx_aborted_errors +
8226 get_stat64(&hw_stats->tx_discards);
8227 stats->tx_carrier_errors = old_stats->tx_carrier_errors +
8228 get_stat64(&hw_stats->tx_carrier_sense_errors);
8230 stats->rx_crc_errors = old_stats->rx_crc_errors +
8231 calc_crc_errors(tp);
8233 stats->rx_missed_errors = old_stats->rx_missed_errors +
8234 get_stat64(&hw_stats->rx_discards);
8236 return stats;
8239 static inline u32 calc_crc(unsigned char *buf, int len)
8241 u32 reg;
8242 u32 tmp;
8243 int j, k;
8245 reg = 0xffffffff;
8247 for (j = 0; j < len; j++) {
8248 reg ^= buf[j];
8250 for (k = 0; k < 8; k++) {
8251 tmp = reg & 0x01;
8253 reg >>= 1;
8255 if (tmp) {
8256 reg ^= 0xedb88320;
8261 return ~reg;
8264 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
8266 /* accept or reject all multicast frames */
8267 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
8268 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
8269 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
8270 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
8273 static void __tg3_set_rx_mode(struct net_device *dev)
8275 struct tg3 *tp = netdev_priv(dev);
8276 u32 rx_mode;
8278 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
8279 RX_MODE_KEEP_VLAN_TAG);
8281 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
8282 * flag clear.
8284 #if TG3_VLAN_TAG_USED
8285 if (!tp->vlgrp &&
8286 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
8287 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
8288 #else
8289 /* By definition, VLAN is disabled always in this
8290 * case.
8292 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
8293 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
8294 #endif
8296 if (dev->flags & IFF_PROMISC) {
8297 /* Promiscuous mode. */
8298 rx_mode |= RX_MODE_PROMISC;
8299 } else if (dev->flags & IFF_ALLMULTI) {
8300 /* Accept all multicast. */
8301 tg3_set_multi (tp, 1);
8302 } else if (dev->mc_count < 1) {
8303 /* Reject all multicast. */
8304 tg3_set_multi (tp, 0);
8305 } else {
8306 /* Accept one or more multicast(s). */
8307 struct dev_mc_list *mclist;
8308 unsigned int i;
8309 u32 mc_filter[4] = { 0, };
8310 u32 regidx;
8311 u32 bit;
8312 u32 crc;
8314 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
8315 i++, mclist = mclist->next) {
8317 crc = calc_crc (mclist->dmi_addr, ETH_ALEN);
8318 bit = ~crc & 0x7f;
8319 regidx = (bit & 0x60) >> 5;
8320 bit &= 0x1f;
8321 mc_filter[regidx] |= (1 << bit);
8324 tw32(MAC_HASH_REG_0, mc_filter[0]);
8325 tw32(MAC_HASH_REG_1, mc_filter[1]);
8326 tw32(MAC_HASH_REG_2, mc_filter[2]);
8327 tw32(MAC_HASH_REG_3, mc_filter[3]);
8330 if (rx_mode != tp->rx_mode) {
8331 tp->rx_mode = rx_mode;
8332 tw32_f(MAC_RX_MODE, rx_mode);
8333 udelay(10);
8337 static void tg3_set_rx_mode(struct net_device *dev)
8339 struct tg3 *tp = netdev_priv(dev);
8341 if (!netif_running(dev))
8342 return;
8344 tg3_full_lock(tp, 0);
8345 __tg3_set_rx_mode(dev);
8346 tg3_full_unlock(tp);
8349 #define TG3_REGDUMP_LEN (32 * 1024)
8351 static int tg3_get_regs_len(struct net_device *dev)
8353 return TG3_REGDUMP_LEN;
8356 static void tg3_get_regs(struct net_device *dev,
8357 struct ethtool_regs *regs, void *_p)
8359 u32 *p = _p;
8360 struct tg3 *tp = netdev_priv(dev);
8361 u8 *orig_p = _p;
8362 int i;
8364 regs->version = 0;
8366 memset(p, 0, TG3_REGDUMP_LEN);
8368 if (tp->link_config.phy_is_low_power)
8369 return;
8371 tg3_full_lock(tp, 0);
8373 #define __GET_REG32(reg) (*(p)++ = tr32(reg))
8374 #define GET_REG32_LOOP(base,len) \
8375 do { p = (u32 *)(orig_p + (base)); \
8376 for (i = 0; i < len; i += 4) \
8377 __GET_REG32((base) + i); \
8378 } while (0)
8379 #define GET_REG32_1(reg) \
8380 do { p = (u32 *)(orig_p + (reg)); \
8381 __GET_REG32((reg)); \
8382 } while (0)
8384 GET_REG32_LOOP(TG3PCI_VENDOR, 0xb0);
8385 GET_REG32_LOOP(MAILBOX_INTERRUPT_0, 0x200);
8386 GET_REG32_LOOP(MAC_MODE, 0x4f0);
8387 GET_REG32_LOOP(SNDDATAI_MODE, 0xe0);
8388 GET_REG32_1(SNDDATAC_MODE);
8389 GET_REG32_LOOP(SNDBDS_MODE, 0x80);
8390 GET_REG32_LOOP(SNDBDI_MODE, 0x48);
8391 GET_REG32_1(SNDBDC_MODE);
8392 GET_REG32_LOOP(RCVLPC_MODE, 0x20);
8393 GET_REG32_LOOP(RCVLPC_SELLST_BASE, 0x15c);
8394 GET_REG32_LOOP(RCVDBDI_MODE, 0x0c);
8395 GET_REG32_LOOP(RCVDBDI_JUMBO_BD, 0x3c);
8396 GET_REG32_LOOP(RCVDBDI_BD_PROD_IDX_0, 0x44);
8397 GET_REG32_1(RCVDCC_MODE);
8398 GET_REG32_LOOP(RCVBDI_MODE, 0x20);
8399 GET_REG32_LOOP(RCVCC_MODE, 0x14);
8400 GET_REG32_LOOP(RCVLSC_MODE, 0x08);
8401 GET_REG32_1(MBFREE_MODE);
8402 GET_REG32_LOOP(HOSTCC_MODE, 0x100);
8403 GET_REG32_LOOP(MEMARB_MODE, 0x10);
8404 GET_REG32_LOOP(BUFMGR_MODE, 0x58);
8405 GET_REG32_LOOP(RDMAC_MODE, 0x08);
8406 GET_REG32_LOOP(WDMAC_MODE, 0x08);
8407 GET_REG32_1(RX_CPU_MODE);
8408 GET_REG32_1(RX_CPU_STATE);
8409 GET_REG32_1(RX_CPU_PGMCTR);
8410 GET_REG32_1(RX_CPU_HWBKPT);
8411 GET_REG32_1(TX_CPU_MODE);
8412 GET_REG32_1(TX_CPU_STATE);
8413 GET_REG32_1(TX_CPU_PGMCTR);
8414 GET_REG32_LOOP(GRCMBOX_INTERRUPT_0, 0x110);
8415 GET_REG32_LOOP(FTQ_RESET, 0x120);
8416 GET_REG32_LOOP(MSGINT_MODE, 0x0c);
8417 GET_REG32_1(DMAC_MODE);
8418 GET_REG32_LOOP(GRC_MODE, 0x4c);
8419 if (tp->tg3_flags & TG3_FLAG_NVRAM)
8420 GET_REG32_LOOP(NVRAM_CMD, 0x24);
8422 #undef __GET_REG32
8423 #undef GET_REG32_LOOP
8424 #undef GET_REG32_1
8426 tg3_full_unlock(tp);
8429 static int tg3_get_eeprom_len(struct net_device *dev)
8431 struct tg3 *tp = netdev_priv(dev);
8433 return tp->nvram_size;
8436 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val);
8437 static int tg3_nvram_read_le(struct tg3 *tp, u32 offset, __le32 *val);
8438 static int tg3_nvram_read_swab(struct tg3 *tp, u32 offset, u32 *val);
8440 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
8442 struct tg3 *tp = netdev_priv(dev);
8443 int ret;
8444 u8 *pd;
8445 u32 i, offset, len, b_offset, b_count;
8446 __le32 val;
8448 if (tp->link_config.phy_is_low_power)
8449 return -EAGAIN;
8451 offset = eeprom->offset;
8452 len = eeprom->len;
8453 eeprom->len = 0;
8455 eeprom->magic = TG3_EEPROM_MAGIC;
8457 if (offset & 3) {
8458 /* adjustments to start on required 4 byte boundary */
8459 b_offset = offset & 3;
8460 b_count = 4 - b_offset;
8461 if (b_count > len) {
8462 /* i.e. offset=1 len=2 */
8463 b_count = len;
8465 ret = tg3_nvram_read_le(tp, offset-b_offset, &val);
8466 if (ret)
8467 return ret;
8468 memcpy(data, ((char*)&val) + b_offset, b_count);
8469 len -= b_count;
8470 offset += b_count;
8471 eeprom->len += b_count;
8474 /* read bytes upto the last 4 byte boundary */
8475 pd = &data[eeprom->len];
8476 for (i = 0; i < (len - (len & 3)); i += 4) {
8477 ret = tg3_nvram_read_le(tp, offset + i, &val);
8478 if (ret) {
8479 eeprom->len += i;
8480 return ret;
8482 memcpy(pd + i, &val, 4);
8484 eeprom->len += i;
8486 if (len & 3) {
8487 /* read last bytes not ending on 4 byte boundary */
8488 pd = &data[eeprom->len];
8489 b_count = len & 3;
8490 b_offset = offset + len - b_count;
8491 ret = tg3_nvram_read_le(tp, b_offset, &val);
8492 if (ret)
8493 return ret;
8494 memcpy(pd, &val, b_count);
8495 eeprom->len += b_count;
8497 return 0;
8500 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf);
8502 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
8504 struct tg3 *tp = netdev_priv(dev);
8505 int ret;
8506 u32 offset, len, b_offset, odd_len;
8507 u8 *buf;
8508 __le32 start, end;
8510 if (tp->link_config.phy_is_low_power)
8511 return -EAGAIN;
8513 if (eeprom->magic != TG3_EEPROM_MAGIC)
8514 return -EINVAL;
8516 offset = eeprom->offset;
8517 len = eeprom->len;
8519 if ((b_offset = (offset & 3))) {
8520 /* adjustments to start on required 4 byte boundary */
8521 ret = tg3_nvram_read_le(tp, offset-b_offset, &start);
8522 if (ret)
8523 return ret;
8524 len += b_offset;
8525 offset &= ~3;
8526 if (len < 4)
8527 len = 4;
8530 odd_len = 0;
8531 if (len & 3) {
8532 /* adjustments to end on required 4 byte boundary */
8533 odd_len = 1;
8534 len = (len + 3) & ~3;
8535 ret = tg3_nvram_read_le(tp, offset+len-4, &end);
8536 if (ret)
8537 return ret;
8540 buf = data;
8541 if (b_offset || odd_len) {
8542 buf = kmalloc(len, GFP_KERNEL);
8543 if (!buf)
8544 return -ENOMEM;
8545 if (b_offset)
8546 memcpy(buf, &start, 4);
8547 if (odd_len)
8548 memcpy(buf+len-4, &end, 4);
8549 memcpy(buf + b_offset, data, eeprom->len);
8552 ret = tg3_nvram_write_block(tp, offset, len, buf);
8554 if (buf != data)
8555 kfree(buf);
8557 return ret;
8560 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
8562 struct tg3 *tp = netdev_priv(dev);
8564 cmd->supported = (SUPPORTED_Autoneg);
8566 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
8567 cmd->supported |= (SUPPORTED_1000baseT_Half |
8568 SUPPORTED_1000baseT_Full);
8570 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) {
8571 cmd->supported |= (SUPPORTED_100baseT_Half |
8572 SUPPORTED_100baseT_Full |
8573 SUPPORTED_10baseT_Half |
8574 SUPPORTED_10baseT_Full |
8575 SUPPORTED_TP);
8576 cmd->port = PORT_TP;
8577 } else {
8578 cmd->supported |= SUPPORTED_FIBRE;
8579 cmd->port = PORT_FIBRE;
8582 cmd->advertising = tp->link_config.advertising;
8583 if (netif_running(dev)) {
8584 cmd->speed = tp->link_config.active_speed;
8585 cmd->duplex = tp->link_config.active_duplex;
8587 cmd->phy_address = PHY_ADDR;
8588 cmd->transceiver = 0;
8589 cmd->autoneg = tp->link_config.autoneg;
8590 cmd->maxtxpkt = 0;
8591 cmd->maxrxpkt = 0;
8592 return 0;
8595 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
8597 struct tg3 *tp = netdev_priv(dev);
8599 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) {
8600 /* These are the only valid advertisement bits allowed. */
8601 if (cmd->autoneg == AUTONEG_ENABLE &&
8602 (cmd->advertising & ~(ADVERTISED_1000baseT_Half |
8603 ADVERTISED_1000baseT_Full |
8604 ADVERTISED_Autoneg |
8605 ADVERTISED_FIBRE)))
8606 return -EINVAL;
8607 /* Fiber can only do SPEED_1000. */
8608 else if ((cmd->autoneg != AUTONEG_ENABLE) &&
8609 (cmd->speed != SPEED_1000))
8610 return -EINVAL;
8611 /* Copper cannot force SPEED_1000. */
8612 } else if ((cmd->autoneg != AUTONEG_ENABLE) &&
8613 (cmd->speed == SPEED_1000))
8614 return -EINVAL;
8615 else if ((cmd->speed == SPEED_1000) &&
8616 (tp->tg3_flags & TG3_FLAG_10_100_ONLY))
8617 return -EINVAL;
8619 tg3_full_lock(tp, 0);
8621 tp->link_config.autoneg = cmd->autoneg;
8622 if (cmd->autoneg == AUTONEG_ENABLE) {
8623 tp->link_config.advertising = (cmd->advertising |
8624 ADVERTISED_Autoneg);
8625 tp->link_config.speed = SPEED_INVALID;
8626 tp->link_config.duplex = DUPLEX_INVALID;
8627 } else {
8628 tp->link_config.advertising = 0;
8629 tp->link_config.speed = cmd->speed;
8630 tp->link_config.duplex = cmd->duplex;
8633 tp->link_config.orig_speed = tp->link_config.speed;
8634 tp->link_config.orig_duplex = tp->link_config.duplex;
8635 tp->link_config.orig_autoneg = tp->link_config.autoneg;
8637 if (netif_running(dev))
8638 tg3_setup_phy(tp, 1);
8640 tg3_full_unlock(tp);
8642 return 0;
8645 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
8647 struct tg3 *tp = netdev_priv(dev);
8649 strcpy(info->driver, DRV_MODULE_NAME);
8650 strcpy(info->version, DRV_MODULE_VERSION);
8651 strcpy(info->fw_version, tp->fw_ver);
8652 strcpy(info->bus_info, pci_name(tp->pdev));
8655 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
8657 struct tg3 *tp = netdev_priv(dev);
8659 if (tp->tg3_flags & TG3_FLAG_WOL_CAP)
8660 wol->supported = WAKE_MAGIC;
8661 else
8662 wol->supported = 0;
8663 wol->wolopts = 0;
8664 if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE)
8665 wol->wolopts = WAKE_MAGIC;
8666 memset(&wol->sopass, 0, sizeof(wol->sopass));
8669 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
8671 struct tg3 *tp = netdev_priv(dev);
8673 if (wol->wolopts & ~WAKE_MAGIC)
8674 return -EINVAL;
8675 if ((wol->wolopts & WAKE_MAGIC) &&
8676 !(tp->tg3_flags & TG3_FLAG_WOL_CAP))
8677 return -EINVAL;
8679 spin_lock_bh(&tp->lock);
8680 if (wol->wolopts & WAKE_MAGIC)
8681 tp->tg3_flags |= TG3_FLAG_WOL_ENABLE;
8682 else
8683 tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE;
8684 spin_unlock_bh(&tp->lock);
8686 return 0;
8689 static u32 tg3_get_msglevel(struct net_device *dev)
8691 struct tg3 *tp = netdev_priv(dev);
8692 return tp->msg_enable;
8695 static void tg3_set_msglevel(struct net_device *dev, u32 value)
8697 struct tg3 *tp = netdev_priv(dev);
8698 tp->msg_enable = value;
8701 static int tg3_set_tso(struct net_device *dev, u32 value)
8703 struct tg3 *tp = netdev_priv(dev);
8705 if (!(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) {
8706 if (value)
8707 return -EINVAL;
8708 return 0;
8710 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) &&
8711 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)) {
8712 if (value) {
8713 dev->features |= NETIF_F_TSO6;
8714 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
8715 dev->features |= NETIF_F_TSO_ECN;
8716 } else
8717 dev->features &= ~(NETIF_F_TSO6 | NETIF_F_TSO_ECN);
8719 return ethtool_op_set_tso(dev, value);
8722 static int tg3_nway_reset(struct net_device *dev)
8724 struct tg3 *tp = netdev_priv(dev);
8725 u32 bmcr;
8726 int r;
8728 if (!netif_running(dev))
8729 return -EAGAIN;
8731 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
8732 return -EINVAL;
8734 spin_lock_bh(&tp->lock);
8735 r = -EINVAL;
8736 tg3_readphy(tp, MII_BMCR, &bmcr);
8737 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
8738 ((bmcr & BMCR_ANENABLE) ||
8739 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT))) {
8740 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
8741 BMCR_ANENABLE);
8742 r = 0;
8744 spin_unlock_bh(&tp->lock);
8746 return r;
8749 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
8751 struct tg3 *tp = netdev_priv(dev);
8753 ering->rx_max_pending = TG3_RX_RING_SIZE - 1;
8754 ering->rx_mini_max_pending = 0;
8755 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE)
8756 ering->rx_jumbo_max_pending = TG3_RX_JUMBO_RING_SIZE - 1;
8757 else
8758 ering->rx_jumbo_max_pending = 0;
8760 ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
8762 ering->rx_pending = tp->rx_pending;
8763 ering->rx_mini_pending = 0;
8764 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE)
8765 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
8766 else
8767 ering->rx_jumbo_pending = 0;
8769 ering->tx_pending = tp->tx_pending;
8772 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
8774 struct tg3 *tp = netdev_priv(dev);
8775 int irq_sync = 0, err = 0;
8777 if ((ering->rx_pending > TG3_RX_RING_SIZE - 1) ||
8778 (ering->rx_jumbo_pending > TG3_RX_JUMBO_RING_SIZE - 1) ||
8779 (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
8780 (ering->tx_pending <= MAX_SKB_FRAGS) ||
8781 ((tp->tg3_flags2 & TG3_FLG2_TSO_BUG) &&
8782 (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
8783 return -EINVAL;
8785 if (netif_running(dev)) {
8786 tg3_netif_stop(tp);
8787 irq_sync = 1;
8790 tg3_full_lock(tp, irq_sync);
8792 tp->rx_pending = ering->rx_pending;
8794 if ((tp->tg3_flags2 & TG3_FLG2_MAX_RXPEND_64) &&
8795 tp->rx_pending > 63)
8796 tp->rx_pending = 63;
8797 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
8798 tp->tx_pending = ering->tx_pending;
8800 if (netif_running(dev)) {
8801 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
8802 err = tg3_restart_hw(tp, 1);
8803 if (!err)
8804 tg3_netif_start(tp);
8807 tg3_full_unlock(tp);
8809 return err;
8812 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
8814 struct tg3 *tp = netdev_priv(dev);
8816 epause->autoneg = (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) != 0;
8818 if (tp->link_config.active_flowctrl & TG3_FLOW_CTRL_RX)
8819 epause->rx_pause = 1;
8820 else
8821 epause->rx_pause = 0;
8823 if (tp->link_config.active_flowctrl & TG3_FLOW_CTRL_TX)
8824 epause->tx_pause = 1;
8825 else
8826 epause->tx_pause = 0;
8829 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
8831 struct tg3 *tp = netdev_priv(dev);
8832 int irq_sync = 0, err = 0;
8834 if (netif_running(dev)) {
8835 tg3_netif_stop(tp);
8836 irq_sync = 1;
8839 tg3_full_lock(tp, irq_sync);
8841 if (epause->autoneg)
8842 tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
8843 else
8844 tp->tg3_flags &= ~TG3_FLAG_PAUSE_AUTONEG;
8845 if (epause->rx_pause)
8846 tp->link_config.flowctrl |= TG3_FLOW_CTRL_RX;
8847 else
8848 tp->link_config.flowctrl &= ~TG3_FLOW_CTRL_RX;
8849 if (epause->tx_pause)
8850 tp->link_config.flowctrl |= TG3_FLOW_CTRL_TX;
8851 else
8852 tp->link_config.flowctrl &= ~TG3_FLOW_CTRL_TX;
8854 if (netif_running(dev)) {
8855 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
8856 err = tg3_restart_hw(tp, 1);
8857 if (!err)
8858 tg3_netif_start(tp);
8861 tg3_full_unlock(tp);
8863 return err;
8866 static u32 tg3_get_rx_csum(struct net_device *dev)
8868 struct tg3 *tp = netdev_priv(dev);
8869 return (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0;
8872 static int tg3_set_rx_csum(struct net_device *dev, u32 data)
8874 struct tg3 *tp = netdev_priv(dev);
8876 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
8877 if (data != 0)
8878 return -EINVAL;
8879 return 0;
8882 spin_lock_bh(&tp->lock);
8883 if (data)
8884 tp->tg3_flags |= TG3_FLAG_RX_CHECKSUMS;
8885 else
8886 tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
8887 spin_unlock_bh(&tp->lock);
8889 return 0;
8892 static int tg3_set_tx_csum(struct net_device *dev, u32 data)
8894 struct tg3 *tp = netdev_priv(dev);
8896 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
8897 if (data != 0)
8898 return -EINVAL;
8899 return 0;
8902 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8903 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
8904 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
8905 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
8906 ethtool_op_set_tx_ipv6_csum(dev, data);
8907 else
8908 ethtool_op_set_tx_csum(dev, data);
8910 return 0;
8913 static int tg3_get_sset_count (struct net_device *dev, int sset)
8915 switch (sset) {
8916 case ETH_SS_TEST:
8917 return TG3_NUM_TEST;
8918 case ETH_SS_STATS:
8919 return TG3_NUM_STATS;
8920 default:
8921 return -EOPNOTSUPP;
8925 static void tg3_get_strings (struct net_device *dev, u32 stringset, u8 *buf)
8927 switch (stringset) {
8928 case ETH_SS_STATS:
8929 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
8930 break;
8931 case ETH_SS_TEST:
8932 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
8933 break;
8934 default:
8935 WARN_ON(1); /* we need a WARN() */
8936 break;
8940 static int tg3_phys_id(struct net_device *dev, u32 data)
8942 struct tg3 *tp = netdev_priv(dev);
8943 int i;
8945 if (!netif_running(tp->dev))
8946 return -EAGAIN;
8948 if (data == 0)
8949 data = UINT_MAX / 2;
8951 for (i = 0; i < (data * 2); i++) {
8952 if ((i % 2) == 0)
8953 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
8954 LED_CTRL_1000MBPS_ON |
8955 LED_CTRL_100MBPS_ON |
8956 LED_CTRL_10MBPS_ON |
8957 LED_CTRL_TRAFFIC_OVERRIDE |
8958 LED_CTRL_TRAFFIC_BLINK |
8959 LED_CTRL_TRAFFIC_LED);
8961 else
8962 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
8963 LED_CTRL_TRAFFIC_OVERRIDE);
8965 if (msleep_interruptible(500))
8966 break;
8968 tw32(MAC_LED_CTRL, tp->led_ctrl);
8969 return 0;
8972 static void tg3_get_ethtool_stats (struct net_device *dev,
8973 struct ethtool_stats *estats, u64 *tmp_stats)
8975 struct tg3 *tp = netdev_priv(dev);
8976 memcpy(tmp_stats, tg3_get_estats(tp), sizeof(tp->estats));
8979 #define NVRAM_TEST_SIZE 0x100
8980 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14
8981 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18
8982 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c
8983 #define NVRAM_SELFBOOT_HW_SIZE 0x20
8984 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
8986 static int tg3_test_nvram(struct tg3 *tp)
8988 u32 csum, magic;
8989 __le32 *buf;
8990 int i, j, k, err = 0, size;
8992 if (tg3_nvram_read_swab(tp, 0, &magic) != 0)
8993 return -EIO;
8995 if (magic == TG3_EEPROM_MAGIC)
8996 size = NVRAM_TEST_SIZE;
8997 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
8998 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
8999 TG3_EEPROM_SB_FORMAT_1) {
9000 switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
9001 case TG3_EEPROM_SB_REVISION_0:
9002 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
9003 break;
9004 case TG3_EEPROM_SB_REVISION_2:
9005 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
9006 break;
9007 case TG3_EEPROM_SB_REVISION_3:
9008 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
9009 break;
9010 default:
9011 return 0;
9013 } else
9014 return 0;
9015 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
9016 size = NVRAM_SELFBOOT_HW_SIZE;
9017 else
9018 return -EIO;
9020 buf = kmalloc(size, GFP_KERNEL);
9021 if (buf == NULL)
9022 return -ENOMEM;
9024 err = -EIO;
9025 for (i = 0, j = 0; i < size; i += 4, j++) {
9026 if ((err = tg3_nvram_read_le(tp, i, &buf[j])) != 0)
9027 break;
9029 if (i < size)
9030 goto out;
9032 /* Selfboot format */
9033 magic = swab32(le32_to_cpu(buf[0]));
9034 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
9035 TG3_EEPROM_MAGIC_FW) {
9036 u8 *buf8 = (u8 *) buf, csum8 = 0;
9038 if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
9039 TG3_EEPROM_SB_REVISION_2) {
9040 /* For rev 2, the csum doesn't include the MBA. */
9041 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
9042 csum8 += buf8[i];
9043 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
9044 csum8 += buf8[i];
9045 } else {
9046 for (i = 0; i < size; i++)
9047 csum8 += buf8[i];
9050 if (csum8 == 0) {
9051 err = 0;
9052 goto out;
9055 err = -EIO;
9056 goto out;
9059 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
9060 TG3_EEPROM_MAGIC_HW) {
9061 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
9062 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
9063 u8 *buf8 = (u8 *) buf;
9065 /* Separate the parity bits and the data bytes. */
9066 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
9067 if ((i == 0) || (i == 8)) {
9068 int l;
9069 u8 msk;
9071 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
9072 parity[k++] = buf8[i] & msk;
9073 i++;
9075 else if (i == 16) {
9076 int l;
9077 u8 msk;
9079 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
9080 parity[k++] = buf8[i] & msk;
9081 i++;
9083 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
9084 parity[k++] = buf8[i] & msk;
9085 i++;
9087 data[j++] = buf8[i];
9090 err = -EIO;
9091 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
9092 u8 hw8 = hweight8(data[i]);
9094 if ((hw8 & 0x1) && parity[i])
9095 goto out;
9096 else if (!(hw8 & 0x1) && !parity[i])
9097 goto out;
9099 err = 0;
9100 goto out;
9103 /* Bootstrap checksum at offset 0x10 */
9104 csum = calc_crc((unsigned char *) buf, 0x10);
9105 if(csum != le32_to_cpu(buf[0x10/4]))
9106 goto out;
9108 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
9109 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
9110 if (csum != le32_to_cpu(buf[0xfc/4]))
9111 goto out;
9113 err = 0;
9115 out:
9116 kfree(buf);
9117 return err;
9120 #define TG3_SERDES_TIMEOUT_SEC 2
9121 #define TG3_COPPER_TIMEOUT_SEC 6
9123 static int tg3_test_link(struct tg3 *tp)
9125 int i, max;
9127 if (!netif_running(tp->dev))
9128 return -ENODEV;
9130 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
9131 max = TG3_SERDES_TIMEOUT_SEC;
9132 else
9133 max = TG3_COPPER_TIMEOUT_SEC;
9135 for (i = 0; i < max; i++) {
9136 if (netif_carrier_ok(tp->dev))
9137 return 0;
9139 if (msleep_interruptible(1000))
9140 break;
9143 return -EIO;
9146 /* Only test the commonly used registers */
9147 static int tg3_test_registers(struct tg3 *tp)
9149 int i, is_5705, is_5750;
9150 u32 offset, read_mask, write_mask, val, save_val, read_val;
9151 static struct {
9152 u16 offset;
9153 u16 flags;
9154 #define TG3_FL_5705 0x1
9155 #define TG3_FL_NOT_5705 0x2
9156 #define TG3_FL_NOT_5788 0x4
9157 #define TG3_FL_NOT_5750 0x8
9158 u32 read_mask;
9159 u32 write_mask;
9160 } reg_tbl[] = {
9161 /* MAC Control Registers */
9162 { MAC_MODE, TG3_FL_NOT_5705,
9163 0x00000000, 0x00ef6f8c },
9164 { MAC_MODE, TG3_FL_5705,
9165 0x00000000, 0x01ef6b8c },
9166 { MAC_STATUS, TG3_FL_NOT_5705,
9167 0x03800107, 0x00000000 },
9168 { MAC_STATUS, TG3_FL_5705,
9169 0x03800100, 0x00000000 },
9170 { MAC_ADDR_0_HIGH, 0x0000,
9171 0x00000000, 0x0000ffff },
9172 { MAC_ADDR_0_LOW, 0x0000,
9173 0x00000000, 0xffffffff },
9174 { MAC_RX_MTU_SIZE, 0x0000,
9175 0x00000000, 0x0000ffff },
9176 { MAC_TX_MODE, 0x0000,
9177 0x00000000, 0x00000070 },
9178 { MAC_TX_LENGTHS, 0x0000,
9179 0x00000000, 0x00003fff },
9180 { MAC_RX_MODE, TG3_FL_NOT_5705,
9181 0x00000000, 0x000007fc },
9182 { MAC_RX_MODE, TG3_FL_5705,
9183 0x00000000, 0x000007dc },
9184 { MAC_HASH_REG_0, 0x0000,
9185 0x00000000, 0xffffffff },
9186 { MAC_HASH_REG_1, 0x0000,
9187 0x00000000, 0xffffffff },
9188 { MAC_HASH_REG_2, 0x0000,
9189 0x00000000, 0xffffffff },
9190 { MAC_HASH_REG_3, 0x0000,
9191 0x00000000, 0xffffffff },
9193 /* Receive Data and Receive BD Initiator Control Registers. */
9194 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
9195 0x00000000, 0xffffffff },
9196 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
9197 0x00000000, 0xffffffff },
9198 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
9199 0x00000000, 0x00000003 },
9200 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
9201 0x00000000, 0xffffffff },
9202 { RCVDBDI_STD_BD+0, 0x0000,
9203 0x00000000, 0xffffffff },
9204 { RCVDBDI_STD_BD+4, 0x0000,
9205 0x00000000, 0xffffffff },
9206 { RCVDBDI_STD_BD+8, 0x0000,
9207 0x00000000, 0xffff0002 },
9208 { RCVDBDI_STD_BD+0xc, 0x0000,
9209 0x00000000, 0xffffffff },
9211 /* Receive BD Initiator Control Registers. */
9212 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
9213 0x00000000, 0xffffffff },
9214 { RCVBDI_STD_THRESH, TG3_FL_5705,
9215 0x00000000, 0x000003ff },
9216 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
9217 0x00000000, 0xffffffff },
9219 /* Host Coalescing Control Registers. */
9220 { HOSTCC_MODE, TG3_FL_NOT_5705,
9221 0x00000000, 0x00000004 },
9222 { HOSTCC_MODE, TG3_FL_5705,
9223 0x00000000, 0x000000f6 },
9224 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
9225 0x00000000, 0xffffffff },
9226 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
9227 0x00000000, 0x000003ff },
9228 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
9229 0x00000000, 0xffffffff },
9230 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
9231 0x00000000, 0x000003ff },
9232 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
9233 0x00000000, 0xffffffff },
9234 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
9235 0x00000000, 0x000000ff },
9236 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
9237 0x00000000, 0xffffffff },
9238 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
9239 0x00000000, 0x000000ff },
9240 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
9241 0x00000000, 0xffffffff },
9242 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
9243 0x00000000, 0xffffffff },
9244 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
9245 0x00000000, 0xffffffff },
9246 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
9247 0x00000000, 0x000000ff },
9248 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
9249 0x00000000, 0xffffffff },
9250 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
9251 0x00000000, 0x000000ff },
9252 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
9253 0x00000000, 0xffffffff },
9254 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
9255 0x00000000, 0xffffffff },
9256 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
9257 0x00000000, 0xffffffff },
9258 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
9259 0x00000000, 0xffffffff },
9260 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
9261 0x00000000, 0xffffffff },
9262 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
9263 0xffffffff, 0x00000000 },
9264 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
9265 0xffffffff, 0x00000000 },
9267 /* Buffer Manager Control Registers. */
9268 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
9269 0x00000000, 0x007fff80 },
9270 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
9271 0x00000000, 0x007fffff },
9272 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
9273 0x00000000, 0x0000003f },
9274 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
9275 0x00000000, 0x000001ff },
9276 { BUFMGR_MB_HIGH_WATER, 0x0000,
9277 0x00000000, 0x000001ff },
9278 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
9279 0xffffffff, 0x00000000 },
9280 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
9281 0xffffffff, 0x00000000 },
9283 /* Mailbox Registers */
9284 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
9285 0x00000000, 0x000001ff },
9286 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
9287 0x00000000, 0x000001ff },
9288 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
9289 0x00000000, 0x000007ff },
9290 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
9291 0x00000000, 0x000001ff },
9293 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
9296 is_5705 = is_5750 = 0;
9297 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
9298 is_5705 = 1;
9299 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
9300 is_5750 = 1;
9303 for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
9304 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
9305 continue;
9307 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
9308 continue;
9310 if ((tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
9311 (reg_tbl[i].flags & TG3_FL_NOT_5788))
9312 continue;
9314 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
9315 continue;
9317 offset = (u32) reg_tbl[i].offset;
9318 read_mask = reg_tbl[i].read_mask;
9319 write_mask = reg_tbl[i].write_mask;
9321 /* Save the original register content */
9322 save_val = tr32(offset);
9324 /* Determine the read-only value. */
9325 read_val = save_val & read_mask;
9327 /* Write zero to the register, then make sure the read-only bits
9328 * are not changed and the read/write bits are all zeros.
9330 tw32(offset, 0);
9332 val = tr32(offset);
9334 /* Test the read-only and read/write bits. */
9335 if (((val & read_mask) != read_val) || (val & write_mask))
9336 goto out;
9338 /* Write ones to all the bits defined by RdMask and WrMask, then
9339 * make sure the read-only bits are not changed and the
9340 * read/write bits are all ones.
9342 tw32(offset, read_mask | write_mask);
9344 val = tr32(offset);
9346 /* Test the read-only bits. */
9347 if ((val & read_mask) != read_val)
9348 goto out;
9350 /* Test the read/write bits. */
9351 if ((val & write_mask) != write_mask)
9352 goto out;
9354 tw32(offset, save_val);
9357 return 0;
9359 out:
9360 if (netif_msg_hw(tp))
9361 printk(KERN_ERR PFX "Register test failed at offset %x\n",
9362 offset);
9363 tw32(offset, save_val);
9364 return -EIO;
9367 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
9369 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
9370 int i;
9371 u32 j;
9373 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
9374 for (j = 0; j < len; j += 4) {
9375 u32 val;
9377 tg3_write_mem(tp, offset + j, test_pattern[i]);
9378 tg3_read_mem(tp, offset + j, &val);
9379 if (val != test_pattern[i])
9380 return -EIO;
9383 return 0;
9386 static int tg3_test_memory(struct tg3 *tp)
9388 static struct mem_entry {
9389 u32 offset;
9390 u32 len;
9391 } mem_tbl_570x[] = {
9392 { 0x00000000, 0x00b50},
9393 { 0x00002000, 0x1c000},
9394 { 0xffffffff, 0x00000}
9395 }, mem_tbl_5705[] = {
9396 { 0x00000100, 0x0000c},
9397 { 0x00000200, 0x00008},
9398 { 0x00004000, 0x00800},
9399 { 0x00006000, 0x01000},
9400 { 0x00008000, 0x02000},
9401 { 0x00010000, 0x0e000},
9402 { 0xffffffff, 0x00000}
9403 }, mem_tbl_5755[] = {
9404 { 0x00000200, 0x00008},
9405 { 0x00004000, 0x00800},
9406 { 0x00006000, 0x00800},
9407 { 0x00008000, 0x02000},
9408 { 0x00010000, 0x0c000},
9409 { 0xffffffff, 0x00000}
9410 }, mem_tbl_5906[] = {
9411 { 0x00000200, 0x00008},
9412 { 0x00004000, 0x00400},
9413 { 0x00006000, 0x00400},
9414 { 0x00008000, 0x01000},
9415 { 0x00010000, 0x01000},
9416 { 0xffffffff, 0x00000}
9418 struct mem_entry *mem_tbl;
9419 int err = 0;
9420 int i;
9422 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
9423 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
9424 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
9425 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9426 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
9427 mem_tbl = mem_tbl_5755;
9428 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
9429 mem_tbl = mem_tbl_5906;
9430 else
9431 mem_tbl = mem_tbl_5705;
9432 } else
9433 mem_tbl = mem_tbl_570x;
9435 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
9436 if ((err = tg3_do_mem_test(tp, mem_tbl[i].offset,
9437 mem_tbl[i].len)) != 0)
9438 break;
9441 return err;
9444 #define TG3_MAC_LOOPBACK 0
9445 #define TG3_PHY_LOOPBACK 1
9447 static int tg3_run_loopback(struct tg3 *tp, int loopback_mode)
9449 u32 mac_mode, rx_start_idx, rx_idx, tx_idx, opaque_key;
9450 u32 desc_idx;
9451 struct sk_buff *skb, *rx_skb;
9452 u8 *tx_data;
9453 dma_addr_t map;
9454 int num_pkts, tx_len, rx_len, i, err;
9455 struct tg3_rx_buffer_desc *desc;
9457 if (loopback_mode == TG3_MAC_LOOPBACK) {
9458 /* HW errata - mac loopback fails in some cases on 5780.
9459 * Normal traffic and PHY loopback are not affected by
9460 * errata.
9462 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780)
9463 return 0;
9465 mac_mode = (tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK) |
9466 MAC_MODE_PORT_INT_LPBACK;
9467 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
9468 mac_mode |= MAC_MODE_LINK_POLARITY;
9469 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
9470 mac_mode |= MAC_MODE_PORT_MODE_MII;
9471 else
9472 mac_mode |= MAC_MODE_PORT_MODE_GMII;
9473 tw32(MAC_MODE, mac_mode);
9474 } else if (loopback_mode == TG3_PHY_LOOPBACK) {
9475 u32 val;
9477 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
9478 u32 phytest;
9480 if (!tg3_readphy(tp, MII_TG3_EPHY_TEST, &phytest)) {
9481 u32 phy;
9483 tg3_writephy(tp, MII_TG3_EPHY_TEST,
9484 phytest | MII_TG3_EPHY_SHADOW_EN);
9485 if (!tg3_readphy(tp, 0x1b, &phy))
9486 tg3_writephy(tp, 0x1b, phy & ~0x20);
9487 tg3_writephy(tp, MII_TG3_EPHY_TEST, phytest);
9489 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED100;
9490 } else
9491 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED1000;
9493 tg3_phy_toggle_automdix(tp, 0);
9495 tg3_writephy(tp, MII_BMCR, val);
9496 udelay(40);
9498 mac_mode = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
9499 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
9500 tg3_writephy(tp, MII_TG3_EPHY_PTEST, 0x1800);
9501 mac_mode |= MAC_MODE_PORT_MODE_MII;
9502 } else
9503 mac_mode |= MAC_MODE_PORT_MODE_GMII;
9505 /* reset to prevent losing 1st rx packet intermittently */
9506 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
9507 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9508 udelay(10);
9509 tw32_f(MAC_RX_MODE, tp->rx_mode);
9511 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
9512 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401)
9513 mac_mode &= ~MAC_MODE_LINK_POLARITY;
9514 else if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5411)
9515 mac_mode |= MAC_MODE_LINK_POLARITY;
9516 tg3_writephy(tp, MII_TG3_EXT_CTRL,
9517 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
9519 tw32(MAC_MODE, mac_mode);
9521 else
9522 return -EINVAL;
9524 err = -EIO;
9526 tx_len = 1514;
9527 skb = netdev_alloc_skb(tp->dev, tx_len);
9528 if (!skb)
9529 return -ENOMEM;
9531 tx_data = skb_put(skb, tx_len);
9532 memcpy(tx_data, tp->dev->dev_addr, 6);
9533 memset(tx_data + 6, 0x0, 8);
9535 tw32(MAC_RX_MTU_SIZE, tx_len + 4);
9537 for (i = 14; i < tx_len; i++)
9538 tx_data[i] = (u8) (i & 0xff);
9540 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
9542 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
9543 HOSTCC_MODE_NOW);
9545 udelay(10);
9547 rx_start_idx = tp->hw_status->idx[0].rx_producer;
9549 num_pkts = 0;
9551 tg3_set_txd(tp, tp->tx_prod, map, tx_len, 0, 1);
9553 tp->tx_prod++;
9554 num_pkts++;
9556 tw32_tx_mbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW,
9557 tp->tx_prod);
9558 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW);
9560 udelay(10);
9562 /* 250 usec to allow enough time on some 10/100 Mbps devices. */
9563 for (i = 0; i < 25; i++) {
9564 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
9565 HOSTCC_MODE_NOW);
9567 udelay(10);
9569 tx_idx = tp->hw_status->idx[0].tx_consumer;
9570 rx_idx = tp->hw_status->idx[0].rx_producer;
9571 if ((tx_idx == tp->tx_prod) &&
9572 (rx_idx == (rx_start_idx + num_pkts)))
9573 break;
9576 pci_unmap_single(tp->pdev, map, tx_len, PCI_DMA_TODEVICE);
9577 dev_kfree_skb(skb);
9579 if (tx_idx != tp->tx_prod)
9580 goto out;
9582 if (rx_idx != rx_start_idx + num_pkts)
9583 goto out;
9585 desc = &tp->rx_rcb[rx_start_idx];
9586 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
9587 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
9588 if (opaque_key != RXD_OPAQUE_RING_STD)
9589 goto out;
9591 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
9592 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
9593 goto out;
9595 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4;
9596 if (rx_len != tx_len)
9597 goto out;
9599 rx_skb = tp->rx_std_buffers[desc_idx].skb;
9601 map = pci_unmap_addr(&tp->rx_std_buffers[desc_idx], mapping);
9602 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, PCI_DMA_FROMDEVICE);
9604 for (i = 14; i < tx_len; i++) {
9605 if (*(rx_skb->data + i) != (u8) (i & 0xff))
9606 goto out;
9608 err = 0;
9610 /* tg3_free_rings will unmap and free the rx_skb */
9611 out:
9612 return err;
9615 #define TG3_MAC_LOOPBACK_FAILED 1
9616 #define TG3_PHY_LOOPBACK_FAILED 2
9617 #define TG3_LOOPBACK_FAILED (TG3_MAC_LOOPBACK_FAILED | \
9618 TG3_PHY_LOOPBACK_FAILED)
9620 static int tg3_test_loopback(struct tg3 *tp)
9622 int err = 0;
9623 u32 cpmuctrl = 0;
9625 if (!netif_running(tp->dev))
9626 return TG3_LOOPBACK_FAILED;
9628 err = tg3_reset_hw(tp, 1);
9629 if (err)
9630 return TG3_LOOPBACK_FAILED;
9632 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9633 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
9634 int i;
9635 u32 status;
9637 tw32(TG3_CPMU_MUTEX_REQ, CPMU_MUTEX_REQ_DRIVER);
9639 /* Wait for up to 40 microseconds to acquire lock. */
9640 for (i = 0; i < 4; i++) {
9641 status = tr32(TG3_CPMU_MUTEX_GNT);
9642 if (status == CPMU_MUTEX_GNT_DRIVER)
9643 break;
9644 udelay(10);
9647 if (status != CPMU_MUTEX_GNT_DRIVER)
9648 return TG3_LOOPBACK_FAILED;
9650 /* Turn off link-based power management. */
9651 cpmuctrl = tr32(TG3_CPMU_CTRL);
9652 tw32(TG3_CPMU_CTRL,
9653 cpmuctrl & ~(CPMU_CTRL_LINK_SPEED_MODE |
9654 CPMU_CTRL_LINK_AWARE_MODE));
9657 if (tg3_run_loopback(tp, TG3_MAC_LOOPBACK))
9658 err |= TG3_MAC_LOOPBACK_FAILED;
9660 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9661 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
9662 tw32(TG3_CPMU_CTRL, cpmuctrl);
9664 /* Release the mutex */
9665 tw32(TG3_CPMU_MUTEX_GNT, CPMU_MUTEX_GNT_DRIVER);
9668 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
9669 if (tg3_run_loopback(tp, TG3_PHY_LOOPBACK))
9670 err |= TG3_PHY_LOOPBACK_FAILED;
9673 return err;
9676 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
9677 u64 *data)
9679 struct tg3 *tp = netdev_priv(dev);
9681 if (tp->link_config.phy_is_low_power)
9682 tg3_set_power_state(tp, PCI_D0);
9684 memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
9686 if (tg3_test_nvram(tp) != 0) {
9687 etest->flags |= ETH_TEST_FL_FAILED;
9688 data[0] = 1;
9690 if (tg3_test_link(tp) != 0) {
9691 etest->flags |= ETH_TEST_FL_FAILED;
9692 data[1] = 1;
9694 if (etest->flags & ETH_TEST_FL_OFFLINE) {
9695 int err, irq_sync = 0;
9697 if (netif_running(dev)) {
9698 tg3_netif_stop(tp);
9699 irq_sync = 1;
9702 tg3_full_lock(tp, irq_sync);
9704 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
9705 err = tg3_nvram_lock(tp);
9706 tg3_halt_cpu(tp, RX_CPU_BASE);
9707 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
9708 tg3_halt_cpu(tp, TX_CPU_BASE);
9709 if (!err)
9710 tg3_nvram_unlock(tp);
9712 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
9713 tg3_phy_reset(tp);
9715 if (tg3_test_registers(tp) != 0) {
9716 etest->flags |= ETH_TEST_FL_FAILED;
9717 data[2] = 1;
9719 if (tg3_test_memory(tp) != 0) {
9720 etest->flags |= ETH_TEST_FL_FAILED;
9721 data[3] = 1;
9723 if ((data[4] = tg3_test_loopback(tp)) != 0)
9724 etest->flags |= ETH_TEST_FL_FAILED;
9726 tg3_full_unlock(tp);
9728 if (tg3_test_interrupt(tp) != 0) {
9729 etest->flags |= ETH_TEST_FL_FAILED;
9730 data[5] = 1;
9733 tg3_full_lock(tp, 0);
9735 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
9736 if (netif_running(dev)) {
9737 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
9738 if (!tg3_restart_hw(tp, 1))
9739 tg3_netif_start(tp);
9742 tg3_full_unlock(tp);
9744 if (tp->link_config.phy_is_low_power)
9745 tg3_set_power_state(tp, PCI_D3hot);
9749 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
9751 struct mii_ioctl_data *data = if_mii(ifr);
9752 struct tg3 *tp = netdev_priv(dev);
9753 int err;
9755 switch(cmd) {
9756 case SIOCGMIIPHY:
9757 data->phy_id = PHY_ADDR;
9759 /* fallthru */
9760 case SIOCGMIIREG: {
9761 u32 mii_regval;
9763 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
9764 break; /* We have no PHY */
9766 if (tp->link_config.phy_is_low_power)
9767 return -EAGAIN;
9769 spin_lock_bh(&tp->lock);
9770 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
9771 spin_unlock_bh(&tp->lock);
9773 data->val_out = mii_regval;
9775 return err;
9778 case SIOCSMIIREG:
9779 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
9780 break; /* We have no PHY */
9782 if (!capable(CAP_NET_ADMIN))
9783 return -EPERM;
9785 if (tp->link_config.phy_is_low_power)
9786 return -EAGAIN;
9788 spin_lock_bh(&tp->lock);
9789 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
9790 spin_unlock_bh(&tp->lock);
9792 return err;
9794 default:
9795 /* do nothing */
9796 break;
9798 return -EOPNOTSUPP;
9801 #if TG3_VLAN_TAG_USED
9802 static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
9804 struct tg3 *tp = netdev_priv(dev);
9806 if (netif_running(dev))
9807 tg3_netif_stop(tp);
9809 tg3_full_lock(tp, 0);
9811 tp->vlgrp = grp;
9813 /* Update RX_MODE_KEEP_VLAN_TAG bit in RX_MODE register. */
9814 __tg3_set_rx_mode(dev);
9816 if (netif_running(dev))
9817 tg3_netif_start(tp);
9819 tg3_full_unlock(tp);
9821 #endif
9823 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
9825 struct tg3 *tp = netdev_priv(dev);
9827 memcpy(ec, &tp->coal, sizeof(*ec));
9828 return 0;
9831 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
9833 struct tg3 *tp = netdev_priv(dev);
9834 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
9835 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
9837 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
9838 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
9839 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
9840 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
9841 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
9844 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
9845 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
9846 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
9847 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
9848 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
9849 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
9850 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
9851 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
9852 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
9853 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
9854 return -EINVAL;
9856 /* No rx interrupts will be generated if both are zero */
9857 if ((ec->rx_coalesce_usecs == 0) &&
9858 (ec->rx_max_coalesced_frames == 0))
9859 return -EINVAL;
9861 /* No tx interrupts will be generated if both are zero */
9862 if ((ec->tx_coalesce_usecs == 0) &&
9863 (ec->tx_max_coalesced_frames == 0))
9864 return -EINVAL;
9866 /* Only copy relevant parameters, ignore all others. */
9867 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
9868 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
9869 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
9870 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
9871 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
9872 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
9873 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
9874 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
9875 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
9877 if (netif_running(dev)) {
9878 tg3_full_lock(tp, 0);
9879 __tg3_set_coalesce(tp, &tp->coal);
9880 tg3_full_unlock(tp);
9882 return 0;
9885 static const struct ethtool_ops tg3_ethtool_ops = {
9886 .get_settings = tg3_get_settings,
9887 .set_settings = tg3_set_settings,
9888 .get_drvinfo = tg3_get_drvinfo,
9889 .get_regs_len = tg3_get_regs_len,
9890 .get_regs = tg3_get_regs,
9891 .get_wol = tg3_get_wol,
9892 .set_wol = tg3_set_wol,
9893 .get_msglevel = tg3_get_msglevel,
9894 .set_msglevel = tg3_set_msglevel,
9895 .nway_reset = tg3_nway_reset,
9896 .get_link = ethtool_op_get_link,
9897 .get_eeprom_len = tg3_get_eeprom_len,
9898 .get_eeprom = tg3_get_eeprom,
9899 .set_eeprom = tg3_set_eeprom,
9900 .get_ringparam = tg3_get_ringparam,
9901 .set_ringparam = tg3_set_ringparam,
9902 .get_pauseparam = tg3_get_pauseparam,
9903 .set_pauseparam = tg3_set_pauseparam,
9904 .get_rx_csum = tg3_get_rx_csum,
9905 .set_rx_csum = tg3_set_rx_csum,
9906 .set_tx_csum = tg3_set_tx_csum,
9907 .set_sg = ethtool_op_set_sg,
9908 .set_tso = tg3_set_tso,
9909 .self_test = tg3_self_test,
9910 .get_strings = tg3_get_strings,
9911 .phys_id = tg3_phys_id,
9912 .get_ethtool_stats = tg3_get_ethtool_stats,
9913 .get_coalesce = tg3_get_coalesce,
9914 .set_coalesce = tg3_set_coalesce,
9915 .get_sset_count = tg3_get_sset_count,
9918 static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
9920 u32 cursize, val, magic;
9922 tp->nvram_size = EEPROM_CHIP_SIZE;
9924 if (tg3_nvram_read_swab(tp, 0, &magic) != 0)
9925 return;
9927 if ((magic != TG3_EEPROM_MAGIC) &&
9928 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
9929 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
9930 return;
9933 * Size the chip by reading offsets at increasing powers of two.
9934 * When we encounter our validation signature, we know the addressing
9935 * has wrapped around, and thus have our chip size.
9937 cursize = 0x10;
9939 while (cursize < tp->nvram_size) {
9940 if (tg3_nvram_read_swab(tp, cursize, &val) != 0)
9941 return;
9943 if (val == magic)
9944 break;
9946 cursize <<= 1;
9949 tp->nvram_size = cursize;
9952 static void __devinit tg3_get_nvram_size(struct tg3 *tp)
9954 u32 val;
9956 if (tg3_nvram_read_swab(tp, 0, &val) != 0)
9957 return;
9959 /* Selfboot format */
9960 if (val != TG3_EEPROM_MAGIC) {
9961 tg3_get_eeprom_size(tp);
9962 return;
9965 if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
9966 if (val != 0) {
9967 tp->nvram_size = (val >> 16) * 1024;
9968 return;
9971 tp->nvram_size = TG3_NVRAM_SIZE_512KB;
9974 static void __devinit tg3_get_nvram_info(struct tg3 *tp)
9976 u32 nvcfg1;
9978 nvcfg1 = tr32(NVRAM_CFG1);
9979 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
9980 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9982 else {
9983 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
9984 tw32(NVRAM_CFG1, nvcfg1);
9987 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) ||
9988 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
9989 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
9990 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
9991 tp->nvram_jedecnum = JEDEC_ATMEL;
9992 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
9993 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9994 break;
9995 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
9996 tp->nvram_jedecnum = JEDEC_ATMEL;
9997 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
9998 break;
9999 case FLASH_VENDOR_ATMEL_EEPROM:
10000 tp->nvram_jedecnum = JEDEC_ATMEL;
10001 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
10002 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10003 break;
10004 case FLASH_VENDOR_ST:
10005 tp->nvram_jedecnum = JEDEC_ST;
10006 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
10007 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10008 break;
10009 case FLASH_VENDOR_SAIFUN:
10010 tp->nvram_jedecnum = JEDEC_SAIFUN;
10011 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
10012 break;
10013 case FLASH_VENDOR_SST_SMALL:
10014 case FLASH_VENDOR_SST_LARGE:
10015 tp->nvram_jedecnum = JEDEC_SST;
10016 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
10017 break;
10020 else {
10021 tp->nvram_jedecnum = JEDEC_ATMEL;
10022 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
10023 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10027 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
10029 u32 nvcfg1;
10031 nvcfg1 = tr32(NVRAM_CFG1);
10033 /* NVRAM protection for TPM */
10034 if (nvcfg1 & (1 << 27))
10035 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
10037 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
10038 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
10039 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
10040 tp->nvram_jedecnum = JEDEC_ATMEL;
10041 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10042 break;
10043 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
10044 tp->nvram_jedecnum = JEDEC_ATMEL;
10045 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10046 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10047 break;
10048 case FLASH_5752VENDOR_ST_M45PE10:
10049 case FLASH_5752VENDOR_ST_M45PE20:
10050 case FLASH_5752VENDOR_ST_M45PE40:
10051 tp->nvram_jedecnum = JEDEC_ST;
10052 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10053 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10054 break;
10057 if (tp->tg3_flags2 & TG3_FLG2_FLASH) {
10058 switch (nvcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
10059 case FLASH_5752PAGE_SIZE_256:
10060 tp->nvram_pagesize = 256;
10061 break;
10062 case FLASH_5752PAGE_SIZE_512:
10063 tp->nvram_pagesize = 512;
10064 break;
10065 case FLASH_5752PAGE_SIZE_1K:
10066 tp->nvram_pagesize = 1024;
10067 break;
10068 case FLASH_5752PAGE_SIZE_2K:
10069 tp->nvram_pagesize = 2048;
10070 break;
10071 case FLASH_5752PAGE_SIZE_4K:
10072 tp->nvram_pagesize = 4096;
10073 break;
10074 case FLASH_5752PAGE_SIZE_264:
10075 tp->nvram_pagesize = 264;
10076 break;
10079 else {
10080 /* For eeprom, set pagesize to maximum eeprom size */
10081 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
10083 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
10084 tw32(NVRAM_CFG1, nvcfg1);
10088 static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp)
10090 u32 nvcfg1, protect = 0;
10092 nvcfg1 = tr32(NVRAM_CFG1);
10094 /* NVRAM protection for TPM */
10095 if (nvcfg1 & (1 << 27)) {
10096 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
10097 protect = 1;
10100 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
10101 switch (nvcfg1) {
10102 case FLASH_5755VENDOR_ATMEL_FLASH_1:
10103 case FLASH_5755VENDOR_ATMEL_FLASH_2:
10104 case FLASH_5755VENDOR_ATMEL_FLASH_3:
10105 case FLASH_5755VENDOR_ATMEL_FLASH_5:
10106 tp->nvram_jedecnum = JEDEC_ATMEL;
10107 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10108 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10109 tp->nvram_pagesize = 264;
10110 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
10111 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
10112 tp->nvram_size = (protect ? 0x3e200 :
10113 TG3_NVRAM_SIZE_512KB);
10114 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
10115 tp->nvram_size = (protect ? 0x1f200 :
10116 TG3_NVRAM_SIZE_256KB);
10117 else
10118 tp->nvram_size = (protect ? 0x1f200 :
10119 TG3_NVRAM_SIZE_128KB);
10120 break;
10121 case FLASH_5752VENDOR_ST_M45PE10:
10122 case FLASH_5752VENDOR_ST_M45PE20:
10123 case FLASH_5752VENDOR_ST_M45PE40:
10124 tp->nvram_jedecnum = JEDEC_ST;
10125 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10126 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10127 tp->nvram_pagesize = 256;
10128 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
10129 tp->nvram_size = (protect ?
10130 TG3_NVRAM_SIZE_64KB :
10131 TG3_NVRAM_SIZE_128KB);
10132 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
10133 tp->nvram_size = (protect ?
10134 TG3_NVRAM_SIZE_64KB :
10135 TG3_NVRAM_SIZE_256KB);
10136 else
10137 tp->nvram_size = (protect ?
10138 TG3_NVRAM_SIZE_128KB :
10139 TG3_NVRAM_SIZE_512KB);
10140 break;
10144 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
10146 u32 nvcfg1;
10148 nvcfg1 = tr32(NVRAM_CFG1);
10150 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
10151 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
10152 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
10153 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
10154 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
10155 tp->nvram_jedecnum = JEDEC_ATMEL;
10156 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10157 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
10159 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
10160 tw32(NVRAM_CFG1, nvcfg1);
10161 break;
10162 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
10163 case FLASH_5755VENDOR_ATMEL_FLASH_1:
10164 case FLASH_5755VENDOR_ATMEL_FLASH_2:
10165 case FLASH_5755VENDOR_ATMEL_FLASH_3:
10166 tp->nvram_jedecnum = JEDEC_ATMEL;
10167 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10168 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10169 tp->nvram_pagesize = 264;
10170 break;
10171 case FLASH_5752VENDOR_ST_M45PE10:
10172 case FLASH_5752VENDOR_ST_M45PE20:
10173 case FLASH_5752VENDOR_ST_M45PE40:
10174 tp->nvram_jedecnum = JEDEC_ST;
10175 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10176 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10177 tp->nvram_pagesize = 256;
10178 break;
10182 static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp)
10184 u32 nvcfg1, protect = 0;
10186 nvcfg1 = tr32(NVRAM_CFG1);
10188 /* NVRAM protection for TPM */
10189 if (nvcfg1 & (1 << 27)) {
10190 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
10191 protect = 1;
10194 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
10195 switch (nvcfg1) {
10196 case FLASH_5761VENDOR_ATMEL_ADB021D:
10197 case FLASH_5761VENDOR_ATMEL_ADB041D:
10198 case FLASH_5761VENDOR_ATMEL_ADB081D:
10199 case FLASH_5761VENDOR_ATMEL_ADB161D:
10200 case FLASH_5761VENDOR_ATMEL_MDB021D:
10201 case FLASH_5761VENDOR_ATMEL_MDB041D:
10202 case FLASH_5761VENDOR_ATMEL_MDB081D:
10203 case FLASH_5761VENDOR_ATMEL_MDB161D:
10204 tp->nvram_jedecnum = JEDEC_ATMEL;
10205 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10206 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10207 tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM_ADDR_TRANS;
10208 tp->nvram_pagesize = 256;
10209 break;
10210 case FLASH_5761VENDOR_ST_A_M45PE20:
10211 case FLASH_5761VENDOR_ST_A_M45PE40:
10212 case FLASH_5761VENDOR_ST_A_M45PE80:
10213 case FLASH_5761VENDOR_ST_A_M45PE16:
10214 case FLASH_5761VENDOR_ST_M_M45PE20:
10215 case FLASH_5761VENDOR_ST_M_M45PE40:
10216 case FLASH_5761VENDOR_ST_M_M45PE80:
10217 case FLASH_5761VENDOR_ST_M_M45PE16:
10218 tp->nvram_jedecnum = JEDEC_ST;
10219 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10220 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10221 tp->nvram_pagesize = 256;
10222 break;
10225 if (protect) {
10226 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
10227 } else {
10228 switch (nvcfg1) {
10229 case FLASH_5761VENDOR_ATMEL_ADB161D:
10230 case FLASH_5761VENDOR_ATMEL_MDB161D:
10231 case FLASH_5761VENDOR_ST_A_M45PE16:
10232 case FLASH_5761VENDOR_ST_M_M45PE16:
10233 tp->nvram_size = TG3_NVRAM_SIZE_2MB;
10234 break;
10235 case FLASH_5761VENDOR_ATMEL_ADB081D:
10236 case FLASH_5761VENDOR_ATMEL_MDB081D:
10237 case FLASH_5761VENDOR_ST_A_M45PE80:
10238 case FLASH_5761VENDOR_ST_M_M45PE80:
10239 tp->nvram_size = TG3_NVRAM_SIZE_1MB;
10240 break;
10241 case FLASH_5761VENDOR_ATMEL_ADB041D:
10242 case FLASH_5761VENDOR_ATMEL_MDB041D:
10243 case FLASH_5761VENDOR_ST_A_M45PE40:
10244 case FLASH_5761VENDOR_ST_M_M45PE40:
10245 tp->nvram_size = TG3_NVRAM_SIZE_512KB;
10246 break;
10247 case FLASH_5761VENDOR_ATMEL_ADB021D:
10248 case FLASH_5761VENDOR_ATMEL_MDB021D:
10249 case FLASH_5761VENDOR_ST_A_M45PE20:
10250 case FLASH_5761VENDOR_ST_M_M45PE20:
10251 tp->nvram_size = TG3_NVRAM_SIZE_256KB;
10252 break;
10257 static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp)
10259 tp->nvram_jedecnum = JEDEC_ATMEL;
10260 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10261 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
10264 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
10265 static void __devinit tg3_nvram_init(struct tg3 *tp)
10267 tw32_f(GRC_EEPROM_ADDR,
10268 (EEPROM_ADDR_FSM_RESET |
10269 (EEPROM_DEFAULT_CLOCK_PERIOD <<
10270 EEPROM_ADDR_CLKPERD_SHIFT)));
10272 msleep(1);
10274 /* Enable seeprom accesses. */
10275 tw32_f(GRC_LOCAL_CTRL,
10276 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
10277 udelay(100);
10279 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
10280 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
10281 tp->tg3_flags |= TG3_FLAG_NVRAM;
10283 if (tg3_nvram_lock(tp)) {
10284 printk(KERN_WARNING PFX "%s: Cannot get nvarm lock, "
10285 "tg3_nvram_init failed.\n", tp->dev->name);
10286 return;
10288 tg3_enable_nvram_access(tp);
10290 tp->nvram_size = 0;
10292 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
10293 tg3_get_5752_nvram_info(tp);
10294 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
10295 tg3_get_5755_nvram_info(tp);
10296 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
10297 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784)
10298 tg3_get_5787_nvram_info(tp);
10299 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
10300 tg3_get_5761_nvram_info(tp);
10301 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
10302 tg3_get_5906_nvram_info(tp);
10303 else
10304 tg3_get_nvram_info(tp);
10306 if (tp->nvram_size == 0)
10307 tg3_get_nvram_size(tp);
10309 tg3_disable_nvram_access(tp);
10310 tg3_nvram_unlock(tp);
10312 } else {
10313 tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED);
10315 tg3_get_eeprom_size(tp);
10319 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
10320 u32 offset, u32 *val)
10322 u32 tmp;
10323 int i;
10325 if (offset > EEPROM_ADDR_ADDR_MASK ||
10326 (offset % 4) != 0)
10327 return -EINVAL;
10329 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
10330 EEPROM_ADDR_DEVID_MASK |
10331 EEPROM_ADDR_READ);
10332 tw32(GRC_EEPROM_ADDR,
10333 tmp |
10334 (0 << EEPROM_ADDR_DEVID_SHIFT) |
10335 ((offset << EEPROM_ADDR_ADDR_SHIFT) &
10336 EEPROM_ADDR_ADDR_MASK) |
10337 EEPROM_ADDR_READ | EEPROM_ADDR_START);
10339 for (i = 0; i < 1000; i++) {
10340 tmp = tr32(GRC_EEPROM_ADDR);
10342 if (tmp & EEPROM_ADDR_COMPLETE)
10343 break;
10344 msleep(1);
10346 if (!(tmp & EEPROM_ADDR_COMPLETE))
10347 return -EBUSY;
10349 *val = tr32(GRC_EEPROM_DATA);
10350 return 0;
10353 #define NVRAM_CMD_TIMEOUT 10000
10355 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
10357 int i;
10359 tw32(NVRAM_CMD, nvram_cmd);
10360 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
10361 udelay(10);
10362 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
10363 udelay(10);
10364 break;
10367 if (i == NVRAM_CMD_TIMEOUT) {
10368 return -EBUSY;
10370 return 0;
10373 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
10375 if ((tp->tg3_flags & TG3_FLAG_NVRAM) &&
10376 (tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) &&
10377 (tp->tg3_flags2 & TG3_FLG2_FLASH) &&
10378 !(tp->tg3_flags3 & TG3_FLG3_NO_NVRAM_ADDR_TRANS) &&
10379 (tp->nvram_jedecnum == JEDEC_ATMEL))
10381 addr = ((addr / tp->nvram_pagesize) <<
10382 ATMEL_AT45DB0X1B_PAGE_POS) +
10383 (addr % tp->nvram_pagesize);
10385 return addr;
10388 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
10390 if ((tp->tg3_flags & TG3_FLAG_NVRAM) &&
10391 (tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) &&
10392 (tp->tg3_flags2 & TG3_FLG2_FLASH) &&
10393 !(tp->tg3_flags3 & TG3_FLG3_NO_NVRAM_ADDR_TRANS) &&
10394 (tp->nvram_jedecnum == JEDEC_ATMEL))
10396 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
10397 tp->nvram_pagesize) +
10398 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
10400 return addr;
10403 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
10405 int ret;
10407 if (!(tp->tg3_flags & TG3_FLAG_NVRAM))
10408 return tg3_nvram_read_using_eeprom(tp, offset, val);
10410 offset = tg3_nvram_phys_addr(tp, offset);
10412 if (offset > NVRAM_ADDR_MSK)
10413 return -EINVAL;
10415 ret = tg3_nvram_lock(tp);
10416 if (ret)
10417 return ret;
10419 tg3_enable_nvram_access(tp);
10421 tw32(NVRAM_ADDR, offset);
10422 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
10423 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
10425 if (ret == 0)
10426 *val = swab32(tr32(NVRAM_RDDATA));
10428 tg3_disable_nvram_access(tp);
10430 tg3_nvram_unlock(tp);
10432 return ret;
10435 static int tg3_nvram_read_le(struct tg3 *tp, u32 offset, __le32 *val)
10437 u32 v;
10438 int res = tg3_nvram_read(tp, offset, &v);
10439 if (!res)
10440 *val = cpu_to_le32(v);
10441 return res;
10444 static int tg3_nvram_read_swab(struct tg3 *tp, u32 offset, u32 *val)
10446 int err;
10447 u32 tmp;
10449 err = tg3_nvram_read(tp, offset, &tmp);
10450 *val = swab32(tmp);
10451 return err;
10454 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
10455 u32 offset, u32 len, u8 *buf)
10457 int i, j, rc = 0;
10458 u32 val;
10460 for (i = 0; i < len; i += 4) {
10461 u32 addr;
10462 __le32 data;
10464 addr = offset + i;
10466 memcpy(&data, buf + i, 4);
10468 tw32(GRC_EEPROM_DATA, le32_to_cpu(data));
10470 val = tr32(GRC_EEPROM_ADDR);
10471 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
10473 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
10474 EEPROM_ADDR_READ);
10475 tw32(GRC_EEPROM_ADDR, val |
10476 (0 << EEPROM_ADDR_DEVID_SHIFT) |
10477 (addr & EEPROM_ADDR_ADDR_MASK) |
10478 EEPROM_ADDR_START |
10479 EEPROM_ADDR_WRITE);
10481 for (j = 0; j < 1000; j++) {
10482 val = tr32(GRC_EEPROM_ADDR);
10484 if (val & EEPROM_ADDR_COMPLETE)
10485 break;
10486 msleep(1);
10488 if (!(val & EEPROM_ADDR_COMPLETE)) {
10489 rc = -EBUSY;
10490 break;
10494 return rc;
10497 /* offset and length are dword aligned */
10498 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
10499 u8 *buf)
10501 int ret = 0;
10502 u32 pagesize = tp->nvram_pagesize;
10503 u32 pagemask = pagesize - 1;
10504 u32 nvram_cmd;
10505 u8 *tmp;
10507 tmp = kmalloc(pagesize, GFP_KERNEL);
10508 if (tmp == NULL)
10509 return -ENOMEM;
10511 while (len) {
10512 int j;
10513 u32 phy_addr, page_off, size;
10515 phy_addr = offset & ~pagemask;
10517 for (j = 0; j < pagesize; j += 4) {
10518 if ((ret = tg3_nvram_read_le(tp, phy_addr + j,
10519 (__le32 *) (tmp + j))))
10520 break;
10522 if (ret)
10523 break;
10525 page_off = offset & pagemask;
10526 size = pagesize;
10527 if (len < size)
10528 size = len;
10530 len -= size;
10532 memcpy(tmp + page_off, buf, size);
10534 offset = offset + (pagesize - page_off);
10536 tg3_enable_nvram_access(tp);
10539 * Before we can erase the flash page, we need
10540 * to issue a special "write enable" command.
10542 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
10544 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
10545 break;
10547 /* Erase the target page */
10548 tw32(NVRAM_ADDR, phy_addr);
10550 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
10551 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
10553 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
10554 break;
10556 /* Issue another write enable to start the write. */
10557 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
10559 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
10560 break;
10562 for (j = 0; j < pagesize; j += 4) {
10563 __be32 data;
10565 data = *((__be32 *) (tmp + j));
10566 /* swab32(le32_to_cpu(data)), actually */
10567 tw32(NVRAM_WRDATA, be32_to_cpu(data));
10569 tw32(NVRAM_ADDR, phy_addr + j);
10571 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
10572 NVRAM_CMD_WR;
10574 if (j == 0)
10575 nvram_cmd |= NVRAM_CMD_FIRST;
10576 else if (j == (pagesize - 4))
10577 nvram_cmd |= NVRAM_CMD_LAST;
10579 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
10580 break;
10582 if (ret)
10583 break;
10586 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
10587 tg3_nvram_exec_cmd(tp, nvram_cmd);
10589 kfree(tmp);
10591 return ret;
10594 /* offset and length are dword aligned */
10595 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
10596 u8 *buf)
10598 int i, ret = 0;
10600 for (i = 0; i < len; i += 4, offset += 4) {
10601 u32 page_off, phy_addr, nvram_cmd;
10602 __be32 data;
10604 memcpy(&data, buf + i, 4);
10605 tw32(NVRAM_WRDATA, be32_to_cpu(data));
10607 page_off = offset % tp->nvram_pagesize;
10609 phy_addr = tg3_nvram_phys_addr(tp, offset);
10611 tw32(NVRAM_ADDR, phy_addr);
10613 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
10615 if ((page_off == 0) || (i == 0))
10616 nvram_cmd |= NVRAM_CMD_FIRST;
10617 if (page_off == (tp->nvram_pagesize - 4))
10618 nvram_cmd |= NVRAM_CMD_LAST;
10620 if (i == (len - 4))
10621 nvram_cmd |= NVRAM_CMD_LAST;
10623 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752) &&
10624 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5755) &&
10625 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787) &&
10626 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784) &&
10627 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) &&
10628 (tp->nvram_jedecnum == JEDEC_ST) &&
10629 (nvram_cmd & NVRAM_CMD_FIRST)) {
10631 if ((ret = tg3_nvram_exec_cmd(tp,
10632 NVRAM_CMD_WREN | NVRAM_CMD_GO |
10633 NVRAM_CMD_DONE)))
10635 break;
10637 if (!(tp->tg3_flags2 & TG3_FLG2_FLASH)) {
10638 /* We always do complete word writes to eeprom. */
10639 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
10642 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
10643 break;
10645 return ret;
10648 /* offset and length are dword aligned */
10649 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
10651 int ret;
10653 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
10654 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
10655 ~GRC_LCLCTRL_GPIO_OUTPUT1);
10656 udelay(40);
10659 if (!(tp->tg3_flags & TG3_FLAG_NVRAM)) {
10660 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
10662 else {
10663 u32 grc_mode;
10665 ret = tg3_nvram_lock(tp);
10666 if (ret)
10667 return ret;
10669 tg3_enable_nvram_access(tp);
10670 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
10671 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM))
10672 tw32(NVRAM_WRITE1, 0x406);
10674 grc_mode = tr32(GRC_MODE);
10675 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
10677 if ((tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) ||
10678 !(tp->tg3_flags2 & TG3_FLG2_FLASH)) {
10680 ret = tg3_nvram_write_block_buffered(tp, offset, len,
10681 buf);
10683 else {
10684 ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
10685 buf);
10688 grc_mode = tr32(GRC_MODE);
10689 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
10691 tg3_disable_nvram_access(tp);
10692 tg3_nvram_unlock(tp);
10695 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
10696 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10697 udelay(40);
10700 return ret;
10703 struct subsys_tbl_ent {
10704 u16 subsys_vendor, subsys_devid;
10705 u32 phy_id;
10708 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
10709 /* Broadcom boards. */
10710 { PCI_VENDOR_ID_BROADCOM, 0x1644, PHY_ID_BCM5401 }, /* BCM95700A6 */
10711 { PCI_VENDOR_ID_BROADCOM, 0x0001, PHY_ID_BCM5701 }, /* BCM95701A5 */
10712 { PCI_VENDOR_ID_BROADCOM, 0x0002, PHY_ID_BCM8002 }, /* BCM95700T6 */
10713 { PCI_VENDOR_ID_BROADCOM, 0x0003, 0 }, /* BCM95700A9 */
10714 { PCI_VENDOR_ID_BROADCOM, 0x0005, PHY_ID_BCM5701 }, /* BCM95701T1 */
10715 { PCI_VENDOR_ID_BROADCOM, 0x0006, PHY_ID_BCM5701 }, /* BCM95701T8 */
10716 { PCI_VENDOR_ID_BROADCOM, 0x0007, 0 }, /* BCM95701A7 */
10717 { PCI_VENDOR_ID_BROADCOM, 0x0008, PHY_ID_BCM5701 }, /* BCM95701A10 */
10718 { PCI_VENDOR_ID_BROADCOM, 0x8008, PHY_ID_BCM5701 }, /* BCM95701A12 */
10719 { PCI_VENDOR_ID_BROADCOM, 0x0009, PHY_ID_BCM5703 }, /* BCM95703Ax1 */
10720 { PCI_VENDOR_ID_BROADCOM, 0x8009, PHY_ID_BCM5703 }, /* BCM95703Ax2 */
10722 /* 3com boards. */
10723 { PCI_VENDOR_ID_3COM, 0x1000, PHY_ID_BCM5401 }, /* 3C996T */
10724 { PCI_VENDOR_ID_3COM, 0x1006, PHY_ID_BCM5701 }, /* 3C996BT */
10725 { PCI_VENDOR_ID_3COM, 0x1004, 0 }, /* 3C996SX */
10726 { PCI_VENDOR_ID_3COM, 0x1007, PHY_ID_BCM5701 }, /* 3C1000T */
10727 { PCI_VENDOR_ID_3COM, 0x1008, PHY_ID_BCM5701 }, /* 3C940BR01 */
10729 /* DELL boards. */
10730 { PCI_VENDOR_ID_DELL, 0x00d1, PHY_ID_BCM5401 }, /* VIPER */
10731 { PCI_VENDOR_ID_DELL, 0x0106, PHY_ID_BCM5401 }, /* JAGUAR */
10732 { PCI_VENDOR_ID_DELL, 0x0109, PHY_ID_BCM5411 }, /* MERLOT */
10733 { PCI_VENDOR_ID_DELL, 0x010a, PHY_ID_BCM5411 }, /* SLIM_MERLOT */
10735 /* Compaq boards. */
10736 { PCI_VENDOR_ID_COMPAQ, 0x007c, PHY_ID_BCM5701 }, /* BANSHEE */
10737 { PCI_VENDOR_ID_COMPAQ, 0x009a, PHY_ID_BCM5701 }, /* BANSHEE_2 */
10738 { PCI_VENDOR_ID_COMPAQ, 0x007d, 0 }, /* CHANGELING */
10739 { PCI_VENDOR_ID_COMPAQ, 0x0085, PHY_ID_BCM5701 }, /* NC7780 */
10740 { PCI_VENDOR_ID_COMPAQ, 0x0099, PHY_ID_BCM5701 }, /* NC7780_2 */
10742 /* IBM boards. */
10743 { PCI_VENDOR_ID_IBM, 0x0281, 0 } /* IBM??? */
10746 static inline struct subsys_tbl_ent *lookup_by_subsys(struct tg3 *tp)
10748 int i;
10750 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
10751 if ((subsys_id_to_phy_id[i].subsys_vendor ==
10752 tp->pdev->subsystem_vendor) &&
10753 (subsys_id_to_phy_id[i].subsys_devid ==
10754 tp->pdev->subsystem_device))
10755 return &subsys_id_to_phy_id[i];
10757 return NULL;
10760 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
10762 u32 val;
10763 u16 pmcsr;
10765 /* On some early chips the SRAM cannot be accessed in D3hot state,
10766 * so need make sure we're in D0.
10768 pci_read_config_word(tp->pdev, tp->pm_cap + PCI_PM_CTRL, &pmcsr);
10769 pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
10770 pci_write_config_word(tp->pdev, tp->pm_cap + PCI_PM_CTRL, pmcsr);
10771 msleep(1);
10773 /* Make sure register accesses (indirect or otherwise)
10774 * will function correctly.
10776 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
10777 tp->misc_host_ctrl);
10779 /* The memory arbiter has to be enabled in order for SRAM accesses
10780 * to succeed. Normally on powerup the tg3 chip firmware will make
10781 * sure it is enabled, but other entities such as system netboot
10782 * code might disable it.
10784 val = tr32(MEMARB_MODE);
10785 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
10787 tp->phy_id = PHY_ID_INVALID;
10788 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10790 /* Assume an onboard device and WOL capable by default. */
10791 tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT | TG3_FLAG_WOL_CAP;
10793 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
10794 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
10795 tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT;
10796 tp->tg3_flags2 |= TG3_FLG2_IS_NIC;
10798 val = tr32(VCPU_CFGSHDW);
10799 if (val & VCPU_CFGSHDW_ASPM_DBNC)
10800 tp->tg3_flags |= TG3_FLAG_ASPM_WORKAROUND;
10801 if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
10802 (val & VCPU_CFGSHDW_WOL_MAGPKT))
10803 tp->tg3_flags |= TG3_FLAG_WOL_ENABLE;
10804 return;
10807 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
10808 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
10809 u32 nic_cfg, led_cfg;
10810 u32 nic_phy_id, ver, cfg2 = 0, eeprom_phy_id;
10811 int eeprom_phy_serdes = 0;
10813 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
10814 tp->nic_sram_data_cfg = nic_cfg;
10816 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
10817 ver >>= NIC_SRAM_DATA_VER_SHIFT;
10818 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) &&
10819 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) &&
10820 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703) &&
10821 (ver > 0) && (ver < 0x100))
10822 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
10824 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
10825 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
10826 eeprom_phy_serdes = 1;
10828 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
10829 if (nic_phy_id != 0) {
10830 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
10831 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
10833 eeprom_phy_id = (id1 >> 16) << 10;
10834 eeprom_phy_id |= (id2 & 0xfc00) << 16;
10835 eeprom_phy_id |= (id2 & 0x03ff) << 0;
10836 } else
10837 eeprom_phy_id = 0;
10839 tp->phy_id = eeprom_phy_id;
10840 if (eeprom_phy_serdes) {
10841 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
10842 tp->tg3_flags2 |= TG3_FLG2_MII_SERDES;
10843 else
10844 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
10847 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
10848 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
10849 SHASTA_EXT_LED_MODE_MASK);
10850 else
10851 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
10853 switch (led_cfg) {
10854 default:
10855 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
10856 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10857 break;
10859 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
10860 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
10861 break;
10863 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
10864 tp->led_ctrl = LED_CTRL_MODE_MAC;
10866 /* Default to PHY_1_MODE if 0 (MAC_MODE) is
10867 * read on some older 5700/5701 bootcode.
10869 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
10870 ASIC_REV_5700 ||
10871 GET_ASIC_REV(tp->pci_chip_rev_id) ==
10872 ASIC_REV_5701)
10873 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10875 break;
10877 case SHASTA_EXT_LED_SHARED:
10878 tp->led_ctrl = LED_CTRL_MODE_SHARED;
10879 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
10880 tp->pci_chip_rev_id != CHIPREV_ID_5750_A1)
10881 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
10882 LED_CTRL_MODE_PHY_2);
10883 break;
10885 case SHASTA_EXT_LED_MAC:
10886 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
10887 break;
10889 case SHASTA_EXT_LED_COMBO:
10890 tp->led_ctrl = LED_CTRL_MODE_COMBO;
10891 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)
10892 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
10893 LED_CTRL_MODE_PHY_2);
10894 break;
10898 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10899 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) &&
10900 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
10901 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
10903 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX)
10904 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10906 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
10907 tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT;
10908 if ((tp->pdev->subsystem_vendor ==
10909 PCI_VENDOR_ID_ARIMA) &&
10910 (tp->pdev->subsystem_device == 0x205a ||
10911 tp->pdev->subsystem_device == 0x2063))
10912 tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT;
10913 } else {
10914 tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT;
10915 tp->tg3_flags2 |= TG3_FLG2_IS_NIC;
10918 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
10919 tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
10920 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
10921 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
10923 if (nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE)
10924 tp->tg3_flags3 |= TG3_FLG3_ENABLE_APE;
10925 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES &&
10926 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
10927 tp->tg3_flags &= ~TG3_FLAG_WOL_CAP;
10929 if (tp->tg3_flags & TG3_FLAG_WOL_CAP &&
10930 nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)
10931 tp->tg3_flags |= TG3_FLAG_WOL_ENABLE;
10933 if (cfg2 & (1 << 17))
10934 tp->tg3_flags2 |= TG3_FLG2_CAPACITIVE_COUPLING;
10936 /* serdes signal pre-emphasis in register 0x590 set by */
10937 /* bootcode if bit 18 is set */
10938 if (cfg2 & (1 << 18))
10939 tp->tg3_flags2 |= TG3_FLG2_SERDES_PREEMPHASIS;
10941 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
10942 u32 cfg3;
10944 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
10945 if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)
10946 tp->tg3_flags |= TG3_FLAG_ASPM_WORKAROUND;
10951 static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
10953 int i;
10954 u32 val;
10956 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
10957 tw32(OTP_CTRL, cmd);
10959 /* Wait for up to 1 ms for command to execute. */
10960 for (i = 0; i < 100; i++) {
10961 val = tr32(OTP_STATUS);
10962 if (val & OTP_STATUS_CMD_DONE)
10963 break;
10964 udelay(10);
10967 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
10970 /* Read the gphy configuration from the OTP region of the chip. The gphy
10971 * configuration is a 32-bit value that straddles the alignment boundary.
10972 * We do two 32-bit reads and then shift and merge the results.
10974 static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp)
10976 u32 bhalf_otp, thalf_otp;
10978 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
10980 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
10981 return 0;
10983 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
10985 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
10986 return 0;
10988 thalf_otp = tr32(OTP_READ_DATA);
10990 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
10992 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
10993 return 0;
10995 bhalf_otp = tr32(OTP_READ_DATA);
10997 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
11000 static int __devinit tg3_phy_probe(struct tg3 *tp)
11002 u32 hw_phy_id_1, hw_phy_id_2;
11003 u32 hw_phy_id, hw_phy_id_masked;
11004 int err;
11006 /* Reading the PHY ID register can conflict with ASF
11007 * firwmare access to the PHY hardware.
11009 err = 0;
11010 if ((tp->tg3_flags & TG3_FLAG_ENABLE_ASF) ||
11011 (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE)) {
11012 hw_phy_id = hw_phy_id_masked = PHY_ID_INVALID;
11013 } else {
11014 /* Now read the physical PHY_ID from the chip and verify
11015 * that it is sane. If it doesn't look good, we fall back
11016 * to either the hard-coded table based PHY_ID and failing
11017 * that the value found in the eeprom area.
11019 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
11020 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
11022 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10;
11023 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
11024 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0;
11026 hw_phy_id_masked = hw_phy_id & PHY_ID_MASK;
11029 if (!err && KNOWN_PHY_ID(hw_phy_id_masked)) {
11030 tp->phy_id = hw_phy_id;
11031 if (hw_phy_id_masked == PHY_ID_BCM8002)
11032 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
11033 else
11034 tp->tg3_flags2 &= ~TG3_FLG2_PHY_SERDES;
11035 } else {
11036 if (tp->phy_id != PHY_ID_INVALID) {
11037 /* Do nothing, phy ID already set up in
11038 * tg3_get_eeprom_hw_cfg().
11040 } else {
11041 struct subsys_tbl_ent *p;
11043 /* No eeprom signature? Try the hardcoded
11044 * subsys device table.
11046 p = lookup_by_subsys(tp);
11047 if (!p)
11048 return -ENODEV;
11050 tp->phy_id = p->phy_id;
11051 if (!tp->phy_id ||
11052 tp->phy_id == PHY_ID_BCM8002)
11053 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
11057 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) &&
11058 !(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) &&
11059 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
11060 u32 bmsr, adv_reg, tg3_ctrl, mask;
11062 tg3_readphy(tp, MII_BMSR, &bmsr);
11063 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
11064 (bmsr & BMSR_LSTATUS))
11065 goto skip_phy_reset;
11067 err = tg3_phy_reset(tp);
11068 if (err)
11069 return err;
11071 adv_reg = (ADVERTISE_10HALF | ADVERTISE_10FULL |
11072 ADVERTISE_100HALF | ADVERTISE_100FULL |
11073 ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
11074 tg3_ctrl = 0;
11075 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY)) {
11076 tg3_ctrl = (MII_TG3_CTRL_ADV_1000_HALF |
11077 MII_TG3_CTRL_ADV_1000_FULL);
11078 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
11079 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
11080 tg3_ctrl |= (MII_TG3_CTRL_AS_MASTER |
11081 MII_TG3_CTRL_ENABLE_AS_MASTER);
11084 mask = (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
11085 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
11086 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full);
11087 if (!tg3_copper_is_advertising_all(tp, mask)) {
11088 tg3_writephy(tp, MII_ADVERTISE, adv_reg);
11090 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
11091 tg3_writephy(tp, MII_TG3_CTRL, tg3_ctrl);
11093 tg3_writephy(tp, MII_BMCR,
11094 BMCR_ANENABLE | BMCR_ANRESTART);
11096 tg3_phy_set_wirespeed(tp);
11098 tg3_writephy(tp, MII_ADVERTISE, adv_reg);
11099 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
11100 tg3_writephy(tp, MII_TG3_CTRL, tg3_ctrl);
11103 skip_phy_reset:
11104 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
11105 err = tg3_init_5401phy_dsp(tp);
11106 if (err)
11107 return err;
11110 if (!err && ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401)) {
11111 err = tg3_init_5401phy_dsp(tp);
11114 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
11115 tp->link_config.advertising =
11116 (ADVERTISED_1000baseT_Half |
11117 ADVERTISED_1000baseT_Full |
11118 ADVERTISED_Autoneg |
11119 ADVERTISED_FIBRE);
11120 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
11121 tp->link_config.advertising &=
11122 ~(ADVERTISED_1000baseT_Half |
11123 ADVERTISED_1000baseT_Full);
11125 return err;
11128 static void __devinit tg3_read_partno(struct tg3 *tp)
11130 unsigned char vpd_data[256];
11131 unsigned int i;
11132 u32 magic;
11134 if (tg3_nvram_read_swab(tp, 0x0, &magic))
11135 goto out_not_found;
11137 if (magic == TG3_EEPROM_MAGIC) {
11138 for (i = 0; i < 256; i += 4) {
11139 u32 tmp;
11141 if (tg3_nvram_read(tp, 0x100 + i, &tmp))
11142 goto out_not_found;
11144 vpd_data[i + 0] = ((tmp >> 0) & 0xff);
11145 vpd_data[i + 1] = ((tmp >> 8) & 0xff);
11146 vpd_data[i + 2] = ((tmp >> 16) & 0xff);
11147 vpd_data[i + 3] = ((tmp >> 24) & 0xff);
11149 } else {
11150 int vpd_cap;
11152 vpd_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_VPD);
11153 for (i = 0; i < 256; i += 4) {
11154 u32 tmp, j = 0;
11155 __le32 v;
11156 u16 tmp16;
11158 pci_write_config_word(tp->pdev, vpd_cap + PCI_VPD_ADDR,
11160 while (j++ < 100) {
11161 pci_read_config_word(tp->pdev, vpd_cap +
11162 PCI_VPD_ADDR, &tmp16);
11163 if (tmp16 & 0x8000)
11164 break;
11165 msleep(1);
11167 if (!(tmp16 & 0x8000))
11168 goto out_not_found;
11170 pci_read_config_dword(tp->pdev, vpd_cap + PCI_VPD_DATA,
11171 &tmp);
11172 v = cpu_to_le32(tmp);
11173 memcpy(&vpd_data[i], &v, 4);
11177 /* Now parse and find the part number. */
11178 for (i = 0; i < 254; ) {
11179 unsigned char val = vpd_data[i];
11180 unsigned int block_end;
11182 if (val == 0x82 || val == 0x91) {
11183 i = (i + 3 +
11184 (vpd_data[i + 1] +
11185 (vpd_data[i + 2] << 8)));
11186 continue;
11189 if (val != 0x90)
11190 goto out_not_found;
11192 block_end = (i + 3 +
11193 (vpd_data[i + 1] +
11194 (vpd_data[i + 2] << 8)));
11195 i += 3;
11197 if (block_end > 256)
11198 goto out_not_found;
11200 while (i < (block_end - 2)) {
11201 if (vpd_data[i + 0] == 'P' &&
11202 vpd_data[i + 1] == 'N') {
11203 int partno_len = vpd_data[i + 2];
11205 i += 3;
11206 if (partno_len > 24 || (partno_len + i) > 256)
11207 goto out_not_found;
11209 memcpy(tp->board_part_number,
11210 &vpd_data[i], partno_len);
11212 /* Success. */
11213 return;
11215 i += 3 + vpd_data[i + 2];
11218 /* Part number not found. */
11219 goto out_not_found;
11222 out_not_found:
11223 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11224 strcpy(tp->board_part_number, "BCM95906");
11225 else
11226 strcpy(tp->board_part_number, "none");
11229 static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
11231 u32 val;
11233 if (tg3_nvram_read_swab(tp, offset, &val) ||
11234 (val & 0xfc000000) != 0x0c000000 ||
11235 tg3_nvram_read_swab(tp, offset + 4, &val) ||
11236 val != 0)
11237 return 0;
11239 return 1;
11242 static void __devinit tg3_read_fw_ver(struct tg3 *tp)
11244 u32 val, offset, start;
11245 u32 ver_offset;
11246 int i, bcnt;
11248 if (tg3_nvram_read_swab(tp, 0, &val))
11249 return;
11251 if (val != TG3_EEPROM_MAGIC)
11252 return;
11254 if (tg3_nvram_read_swab(tp, 0xc, &offset) ||
11255 tg3_nvram_read_swab(tp, 0x4, &start))
11256 return;
11258 offset = tg3_nvram_logical_addr(tp, offset);
11260 if (!tg3_fw_img_is_valid(tp, offset) ||
11261 tg3_nvram_read_swab(tp, offset + 8, &ver_offset))
11262 return;
11264 offset = offset + ver_offset - start;
11265 for (i = 0; i < 16; i += 4) {
11266 __le32 v;
11267 if (tg3_nvram_read_le(tp, offset + i, &v))
11268 return;
11270 memcpy(tp->fw_ver + i, &v, 4);
11273 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF) ||
11274 (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE))
11275 return;
11277 for (offset = TG3_NVM_DIR_START;
11278 offset < TG3_NVM_DIR_END;
11279 offset += TG3_NVM_DIRENT_SIZE) {
11280 if (tg3_nvram_read_swab(tp, offset, &val))
11281 return;
11283 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
11284 break;
11287 if (offset == TG3_NVM_DIR_END)
11288 return;
11290 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
11291 start = 0x08000000;
11292 else if (tg3_nvram_read_swab(tp, offset - 4, &start))
11293 return;
11295 if (tg3_nvram_read_swab(tp, offset + 4, &offset) ||
11296 !tg3_fw_img_is_valid(tp, offset) ||
11297 tg3_nvram_read_swab(tp, offset + 8, &val))
11298 return;
11300 offset += val - start;
11302 bcnt = strlen(tp->fw_ver);
11304 tp->fw_ver[bcnt++] = ',';
11305 tp->fw_ver[bcnt++] = ' ';
11307 for (i = 0; i < 4; i++) {
11308 __le32 v;
11309 if (tg3_nvram_read_le(tp, offset, &v))
11310 return;
11312 offset += sizeof(v);
11314 if (bcnt > TG3_VER_SIZE - sizeof(v)) {
11315 memcpy(&tp->fw_ver[bcnt], &v, TG3_VER_SIZE - bcnt);
11316 break;
11319 memcpy(&tp->fw_ver[bcnt], &v, sizeof(v));
11320 bcnt += sizeof(v);
11323 tp->fw_ver[TG3_VER_SIZE - 1] = 0;
11326 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *);
11328 static int __devinit tg3_get_invariants(struct tg3 *tp)
11330 static struct pci_device_id write_reorder_chipsets[] = {
11331 { PCI_DEVICE(PCI_VENDOR_ID_AMD,
11332 PCI_DEVICE_ID_AMD_FE_GATE_700C) },
11333 { PCI_DEVICE(PCI_VENDOR_ID_AMD,
11334 PCI_DEVICE_ID_AMD_8131_BRIDGE) },
11335 { PCI_DEVICE(PCI_VENDOR_ID_VIA,
11336 PCI_DEVICE_ID_VIA_8385_0) },
11337 { },
11339 u32 misc_ctrl_reg;
11340 u32 cacheline_sz_reg;
11341 u32 pci_state_reg, grc_misc_cfg;
11342 u32 val;
11343 u16 pci_cmd;
11344 int err, pcie_cap;
11346 /* Force memory write invalidate off. If we leave it on,
11347 * then on 5700_BX chips we have to enable a workaround.
11348 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
11349 * to match the cacheline size. The Broadcom driver have this
11350 * workaround but turns MWI off all the times so never uses
11351 * it. This seems to suggest that the workaround is insufficient.
11353 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11354 pci_cmd &= ~PCI_COMMAND_INVALIDATE;
11355 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11357 /* It is absolutely critical that TG3PCI_MISC_HOST_CTRL
11358 * has the register indirect write enable bit set before
11359 * we try to access any of the MMIO registers. It is also
11360 * critical that the PCI-X hw workaround situation is decided
11361 * before that as well.
11363 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
11364 &misc_ctrl_reg);
11366 tp->pci_chip_rev_id = (misc_ctrl_reg >>
11367 MISC_HOST_CTRL_CHIPREV_SHIFT);
11368 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) {
11369 u32 prod_id_asic_rev;
11371 pci_read_config_dword(tp->pdev, TG3PCI_PRODID_ASICREV,
11372 &prod_id_asic_rev);
11373 tp->pci_chip_rev_id = prod_id_asic_rev & PROD_ID_ASIC_REV_MASK;
11376 /* Wrong chip ID in 5752 A0. This code can be removed later
11377 * as A0 is not in production.
11379 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
11380 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
11382 /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
11383 * we need to disable memory and use config. cycles
11384 * only to access all registers. The 5702/03 chips
11385 * can mistakenly decode the special cycles from the
11386 * ICH chipsets as memory write cycles, causing corruption
11387 * of register and memory space. Only certain ICH bridges
11388 * will drive special cycles with non-zero data during the
11389 * address phase which can fall within the 5703's address
11390 * range. This is not an ICH bug as the PCI spec allows
11391 * non-zero address during special cycles. However, only
11392 * these ICH bridges are known to drive non-zero addresses
11393 * during special cycles.
11395 * Since special cycles do not cross PCI bridges, we only
11396 * enable this workaround if the 5703 is on the secondary
11397 * bus of these ICH bridges.
11399 if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
11400 (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) {
11401 static struct tg3_dev_id {
11402 u32 vendor;
11403 u32 device;
11404 u32 rev;
11405 } ich_chipsets[] = {
11406 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
11407 PCI_ANY_ID },
11408 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
11409 PCI_ANY_ID },
11410 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
11411 0xa },
11412 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
11413 PCI_ANY_ID },
11414 { },
11416 struct tg3_dev_id *pci_id = &ich_chipsets[0];
11417 struct pci_dev *bridge = NULL;
11419 while (pci_id->vendor != 0) {
11420 bridge = pci_get_device(pci_id->vendor, pci_id->device,
11421 bridge);
11422 if (!bridge) {
11423 pci_id++;
11424 continue;
11426 if (pci_id->rev != PCI_ANY_ID) {
11427 if (bridge->revision > pci_id->rev)
11428 continue;
11430 if (bridge->subordinate &&
11431 (bridge->subordinate->number ==
11432 tp->pdev->bus->number)) {
11434 tp->tg3_flags2 |= TG3_FLG2_ICH_WORKAROUND;
11435 pci_dev_put(bridge);
11436 break;
11441 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
11442 static struct tg3_dev_id {
11443 u32 vendor;
11444 u32 device;
11445 } bridge_chipsets[] = {
11446 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
11447 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
11448 { },
11450 struct tg3_dev_id *pci_id = &bridge_chipsets[0];
11451 struct pci_dev *bridge = NULL;
11453 while (pci_id->vendor != 0) {
11454 bridge = pci_get_device(pci_id->vendor,
11455 pci_id->device,
11456 bridge);
11457 if (!bridge) {
11458 pci_id++;
11459 continue;
11461 if (bridge->subordinate &&
11462 (bridge->subordinate->number <=
11463 tp->pdev->bus->number) &&
11464 (bridge->subordinate->subordinate >=
11465 tp->pdev->bus->number)) {
11466 tp->tg3_flags3 |= TG3_FLG3_5701_DMA_BUG;
11467 pci_dev_put(bridge);
11468 break;
11473 /* The EPB bridge inside 5714, 5715, and 5780 cannot support
11474 * DMA addresses > 40-bit. This bridge may have other additional
11475 * 57xx devices behind it in some 4-port NIC designs for example.
11476 * Any tg3 device found behind the bridge will also need the 40-bit
11477 * DMA workaround.
11479 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 ||
11480 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
11481 tp->tg3_flags2 |= TG3_FLG2_5780_CLASS;
11482 tp->tg3_flags |= TG3_FLAG_40BIT_DMA_BUG;
11483 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
11485 else {
11486 struct pci_dev *bridge = NULL;
11488 do {
11489 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
11490 PCI_DEVICE_ID_SERVERWORKS_EPB,
11491 bridge);
11492 if (bridge && bridge->subordinate &&
11493 (bridge->subordinate->number <=
11494 tp->pdev->bus->number) &&
11495 (bridge->subordinate->subordinate >=
11496 tp->pdev->bus->number)) {
11497 tp->tg3_flags |= TG3_FLAG_40BIT_DMA_BUG;
11498 pci_dev_put(bridge);
11499 break;
11501 } while (bridge);
11504 /* Initialize misc host control in PCI block. */
11505 tp->misc_host_ctrl |= (misc_ctrl_reg &
11506 MISC_HOST_CTRL_CHIPREV);
11507 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
11508 tp->misc_host_ctrl);
11510 pci_read_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
11511 &cacheline_sz_reg);
11513 tp->pci_cacheline_sz = (cacheline_sz_reg >> 0) & 0xff;
11514 tp->pci_lat_timer = (cacheline_sz_reg >> 8) & 0xff;
11515 tp->pci_hdr_type = (cacheline_sz_reg >> 16) & 0xff;
11516 tp->pci_bist = (cacheline_sz_reg >> 24) & 0xff;
11518 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
11519 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714))
11520 tp->pdev_peer = tg3_find_peer(tp);
11522 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
11523 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
11524 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
11525 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
11526 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11527 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
11528 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
11529 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
11530 tp->tg3_flags2 |= TG3_FLG2_5750_PLUS;
11532 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) ||
11533 (tp->tg3_flags2 & TG3_FLG2_5750_PLUS))
11534 tp->tg3_flags2 |= TG3_FLG2_5705_PLUS;
11536 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
11537 tp->tg3_flags |= TG3_FLAG_SUPPORT_MSI;
11538 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX ||
11539 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX ||
11540 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 &&
11541 tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 &&
11542 tp->pdev_peer == tp->pdev))
11543 tp->tg3_flags &= ~TG3_FLAG_SUPPORT_MSI;
11545 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
11546 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
11547 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11548 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
11549 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
11550 tp->tg3_flags2 |= TG3_FLG2_HW_TSO_2;
11551 tp->tg3_flags2 |= TG3_FLG2_1SHOT_MSI;
11552 } else {
11553 tp->tg3_flags2 |= TG3_FLG2_HW_TSO_1 | TG3_FLG2_TSO_BUG;
11554 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
11555 ASIC_REV_5750 &&
11556 tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2)
11557 tp->tg3_flags2 &= ~TG3_FLG2_TSO_BUG;
11561 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 &&
11562 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750 &&
11563 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
11564 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5755 &&
11565 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787 &&
11566 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
11567 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761 &&
11568 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)
11569 tp->tg3_flags2 |= TG3_FLG2_JUMBO_CAPABLE;
11571 pcie_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_EXP);
11572 if (pcie_cap != 0) {
11573 tp->tg3_flags2 |= TG3_FLG2_PCI_EXPRESS;
11575 pcie_set_readrq(tp->pdev, 4096);
11577 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
11578 u16 lnkctl;
11580 pci_read_config_word(tp->pdev,
11581 pcie_cap + PCI_EXP_LNKCTL,
11582 &lnkctl);
11583 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN)
11584 tp->tg3_flags2 &= ~TG3_FLG2_HW_TSO_2;
11588 /* If we have an AMD 762 or VIA K8T800 chipset, write
11589 * reordering to the mailbox registers done by the host
11590 * controller can cause major troubles. We read back from
11591 * every mailbox register write to force the writes to be
11592 * posted to the chip in order.
11594 if (pci_dev_present(write_reorder_chipsets) &&
11595 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
11596 tp->tg3_flags |= TG3_FLAG_MBOX_WRITE_REORDER;
11598 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
11599 tp->pci_lat_timer < 64) {
11600 tp->pci_lat_timer = 64;
11602 cacheline_sz_reg = ((tp->pci_cacheline_sz & 0xff) << 0);
11603 cacheline_sz_reg |= ((tp->pci_lat_timer & 0xff) << 8);
11604 cacheline_sz_reg |= ((tp->pci_hdr_type & 0xff) << 16);
11605 cacheline_sz_reg |= ((tp->pci_bist & 0xff) << 24);
11607 pci_write_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
11608 cacheline_sz_reg);
11611 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ||
11612 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
11613 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
11614 if (!tp->pcix_cap) {
11615 printk(KERN_ERR PFX "Cannot find PCI-X "
11616 "capability, aborting.\n");
11617 return -EIO;
11621 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
11622 &pci_state_reg);
11624 if (tp->pcix_cap && (pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0) {
11625 tp->tg3_flags |= TG3_FLAG_PCIX_MODE;
11627 /* If this is a 5700 BX chipset, and we are in PCI-X
11628 * mode, enable register write workaround.
11630 * The workaround is to use indirect register accesses
11631 * for all chip writes not to mailbox registers.
11633 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
11634 u32 pm_reg;
11636 tp->tg3_flags |= TG3_FLAG_PCIX_TARGET_HWBUG;
11638 /* The chip can have it's power management PCI config
11639 * space registers clobbered due to this bug.
11640 * So explicitly force the chip into D0 here.
11642 pci_read_config_dword(tp->pdev,
11643 tp->pm_cap + PCI_PM_CTRL,
11644 &pm_reg);
11645 pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
11646 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
11647 pci_write_config_dword(tp->pdev,
11648 tp->pm_cap + PCI_PM_CTRL,
11649 pm_reg);
11651 /* Also, force SERR#/PERR# in PCI command. */
11652 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11653 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
11654 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11658 /* 5700 BX chips need to have their TX producer index mailboxes
11659 * written twice to workaround a bug.
11661 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX)
11662 tp->tg3_flags |= TG3_FLAG_TXD_MBOX_HWBUG;
11664 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
11665 tp->tg3_flags |= TG3_FLAG_PCI_HIGH_SPEED;
11666 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
11667 tp->tg3_flags |= TG3_FLAG_PCI_32BIT;
11669 /* Chip-specific fixup from Broadcom driver */
11670 if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
11671 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
11672 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
11673 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
11676 /* Default fast path register access methods */
11677 tp->read32 = tg3_read32;
11678 tp->write32 = tg3_write32;
11679 tp->read32_mbox = tg3_read32;
11680 tp->write32_mbox = tg3_write32;
11681 tp->write32_tx_mbox = tg3_write32;
11682 tp->write32_rx_mbox = tg3_write32;
11684 /* Various workaround register access methods */
11685 if (tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG)
11686 tp->write32 = tg3_write_indirect_reg32;
11687 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
11688 ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
11689 tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) {
11691 * Back to back register writes can cause problems on these
11692 * chips, the workaround is to read back all reg writes
11693 * except those to mailbox regs.
11695 * See tg3_write_indirect_reg32().
11697 tp->write32 = tg3_write_flush_reg32;
11701 if ((tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG) ||
11702 (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)) {
11703 tp->write32_tx_mbox = tg3_write32_tx_mbox;
11704 if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
11705 tp->write32_rx_mbox = tg3_write_flush_reg32;
11708 if (tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND) {
11709 tp->read32 = tg3_read_indirect_reg32;
11710 tp->write32 = tg3_write_indirect_reg32;
11711 tp->read32_mbox = tg3_read_indirect_mbox;
11712 tp->write32_mbox = tg3_write_indirect_mbox;
11713 tp->write32_tx_mbox = tg3_write_indirect_mbox;
11714 tp->write32_rx_mbox = tg3_write_indirect_mbox;
11716 iounmap(tp->regs);
11717 tp->regs = NULL;
11719 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11720 pci_cmd &= ~PCI_COMMAND_MEMORY;
11721 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11723 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
11724 tp->read32_mbox = tg3_read32_mbox_5906;
11725 tp->write32_mbox = tg3_write32_mbox_5906;
11726 tp->write32_tx_mbox = tg3_write32_mbox_5906;
11727 tp->write32_rx_mbox = tg3_write32_mbox_5906;
11730 if (tp->write32 == tg3_write_indirect_reg32 ||
11731 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) &&
11732 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
11733 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)))
11734 tp->tg3_flags |= TG3_FLAG_SRAM_USE_CONFIG;
11736 /* Get eeprom hw config before calling tg3_set_power_state().
11737 * In particular, the TG3_FLG2_IS_NIC flag must be
11738 * determined before calling tg3_set_power_state() so that
11739 * we know whether or not to switch out of Vaux power.
11740 * When the flag is set, it means that GPIO1 is used for eeprom
11741 * write protect and also implies that it is a LOM where GPIOs
11742 * are not used to switch power.
11744 tg3_get_eeprom_hw_cfg(tp);
11746 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) {
11747 /* Allow reads and writes to the
11748 * APE register and memory space.
11750 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
11751 PCISTATE_ALLOW_APE_SHMEM_WR;
11752 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
11753 pci_state_reg);
11756 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11757 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
11758 tp->tg3_flags |= TG3_FLAG_CPMU_PRESENT;
11760 if (tp->pci_chip_rev_id == CHIPREV_ID_5784_A0 ||
11761 tp->pci_chip_rev_id == CHIPREV_ID_5784_A1 ||
11762 tp->pci_chip_rev_id == CHIPREV_ID_5761_A0 ||
11763 tp->pci_chip_rev_id == CHIPREV_ID_5761_A1)
11764 tp->tg3_flags3 |= TG3_FLG3_5761_5784_AX_FIXES;
11767 /* Set up tp->grc_local_ctrl before calling tg3_set_power_state().
11768 * GPIO1 driven high will bring 5700's external PHY out of reset.
11769 * It is also used as eeprom write protect on LOMs.
11771 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
11772 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) ||
11773 (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
11774 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
11775 GRC_LCLCTRL_GPIO_OUTPUT1);
11776 /* Unused GPIO3 must be driven as output on 5752 because there
11777 * are no pull-up resistors on unused GPIO pins.
11779 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
11780 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
11782 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
11783 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
11785 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761) {
11786 /* Turn off the debug UART. */
11787 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
11788 if (tp->tg3_flags2 & TG3_FLG2_IS_NIC)
11789 /* Keep VMain power. */
11790 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
11791 GRC_LCLCTRL_GPIO_OUTPUT0;
11794 /* Force the chip into D0. */
11795 err = tg3_set_power_state(tp, PCI_D0);
11796 if (err) {
11797 printk(KERN_ERR PFX "(%s) transition to D0 failed\n",
11798 pci_name(tp->pdev));
11799 return err;
11802 /* 5700 B0 chips do not support checksumming correctly due
11803 * to hardware bugs.
11805 if (tp->pci_chip_rev_id == CHIPREV_ID_5700_B0)
11806 tp->tg3_flags |= TG3_FLAG_BROKEN_CHECKSUMS;
11808 /* Derive initial jumbo mode from MTU assigned in
11809 * ether_setup() via the alloc_etherdev() call
11811 if (tp->dev->mtu > ETH_DATA_LEN &&
11812 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
11813 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
11815 /* Determine WakeOnLan speed to use. */
11816 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
11817 tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
11818 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 ||
11819 tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) {
11820 tp->tg3_flags &= ~(TG3_FLAG_WOL_SPEED_100MB);
11821 } else {
11822 tp->tg3_flags |= TG3_FLAG_WOL_SPEED_100MB;
11825 /* A few boards don't want Ethernet@WireSpeed phy feature */
11826 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) ||
11827 ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
11828 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
11829 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
11830 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) ||
11831 (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES))
11832 tp->tg3_flags2 |= TG3_FLG2_NO_ETH_WIRE_SPEED;
11834 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX ||
11835 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX)
11836 tp->tg3_flags2 |= TG3_FLG2_PHY_ADC_BUG;
11837 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
11838 tp->tg3_flags2 |= TG3_FLG2_PHY_5704_A0_BUG;
11840 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
11841 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
11842 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
11843 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11844 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
11845 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
11846 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
11847 tp->tg3_flags2 |= TG3_FLG2_PHY_JITTER_BUG;
11848 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
11849 tp->tg3_flags2 |= TG3_FLG2_PHY_ADJUST_TRIM;
11850 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)
11851 tp->tg3_flags2 |= TG3_FLG2_PHY_BER_BUG;
11854 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
11855 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
11856 tp->phy_otp = tg3_read_otp_phycfg(tp);
11857 if (tp->phy_otp == 0)
11858 tp->phy_otp = TG3_OTP_DEFAULT;
11861 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11862 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
11863 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST;
11864 else
11865 tp->mi_mode = MAC_MI_MODE_BASE;
11867 tp->coalesce_mode = 0;
11868 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX &&
11869 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX)
11870 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
11872 /* Initialize MAC MI mode, polling disabled. */
11873 tw32_f(MAC_MI_MODE, tp->mi_mode);
11874 udelay(80);
11876 /* Initialize data/descriptor byte/word swapping. */
11877 val = tr32(GRC_MODE);
11878 val &= GRC_MODE_HOST_STACKUP;
11879 tw32(GRC_MODE, val | tp->grc_mode);
11881 tg3_switch_clocks(tp);
11883 /* Clear this out for sanity. */
11884 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
11886 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
11887 &pci_state_reg);
11888 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
11889 (tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) == 0) {
11890 u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
11892 if (chiprevid == CHIPREV_ID_5701_A0 ||
11893 chiprevid == CHIPREV_ID_5701_B0 ||
11894 chiprevid == CHIPREV_ID_5701_B2 ||
11895 chiprevid == CHIPREV_ID_5701_B5) {
11896 void __iomem *sram_base;
11898 /* Write some dummy words into the SRAM status block
11899 * area, see if it reads back correctly. If the return
11900 * value is bad, force enable the PCIX workaround.
11902 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
11904 writel(0x00000000, sram_base);
11905 writel(0x00000000, sram_base + 4);
11906 writel(0xffffffff, sram_base + 4);
11907 if (readl(sram_base) != 0x00000000)
11908 tp->tg3_flags |= TG3_FLAG_PCIX_TARGET_HWBUG;
11912 udelay(50);
11913 tg3_nvram_init(tp);
11915 grc_misc_cfg = tr32(GRC_MISC_CFG);
11916 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
11918 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
11919 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
11920 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
11921 tp->tg3_flags2 |= TG3_FLG2_IS_5788;
11923 if (!(tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
11924 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700))
11925 tp->tg3_flags |= TG3_FLAG_TAGGED_STATUS;
11926 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) {
11927 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
11928 HOSTCC_MODE_CLRTICK_TXBD);
11930 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
11931 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
11932 tp->misc_host_ctrl);
11935 /* these are limited to 10/100 only */
11936 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
11937 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
11938 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
11939 tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
11940 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
11941 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
11942 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
11943 (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
11944 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
11945 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F ||
11946 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) ||
11947 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11948 tp->tg3_flags |= TG3_FLAG_10_100_ONLY;
11950 err = tg3_phy_probe(tp);
11951 if (err) {
11952 printk(KERN_ERR PFX "(%s) phy probe failed, err %d\n",
11953 pci_name(tp->pdev), err);
11954 /* ... but do not return immediately ... */
11957 tg3_read_partno(tp);
11958 tg3_read_fw_ver(tp);
11960 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
11961 tp->tg3_flags &= ~TG3_FLAG_USE_MI_INTERRUPT;
11962 } else {
11963 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
11964 tp->tg3_flags |= TG3_FLAG_USE_MI_INTERRUPT;
11965 else
11966 tp->tg3_flags &= ~TG3_FLAG_USE_MI_INTERRUPT;
11969 /* 5700 {AX,BX} chips have a broken status block link
11970 * change bit implementation, so we must use the
11971 * status register in those cases.
11973 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
11974 tp->tg3_flags |= TG3_FLAG_USE_LINKCHG_REG;
11975 else
11976 tp->tg3_flags &= ~TG3_FLAG_USE_LINKCHG_REG;
11978 /* The led_ctrl is set during tg3_phy_probe, here we might
11979 * have to force the link status polling mechanism based
11980 * upon subsystem IDs.
11982 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
11983 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
11984 !(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
11985 tp->tg3_flags |= (TG3_FLAG_USE_MI_INTERRUPT |
11986 TG3_FLAG_USE_LINKCHG_REG);
11989 /* For all SERDES we poll the MAC status register. */
11990 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
11991 tp->tg3_flags |= TG3_FLAG_POLL_SERDES;
11992 else
11993 tp->tg3_flags &= ~TG3_FLAG_POLL_SERDES;
11995 /* All chips before 5787 can get confused if TX buffers
11996 * straddle the 4GB address boundary in some cases.
11998 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
11999 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
12000 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
12001 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
12002 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
12003 tp->dev->hard_start_xmit = tg3_start_xmit;
12004 else
12005 tp->dev->hard_start_xmit = tg3_start_xmit_dma_bug;
12007 tp->rx_offset = 2;
12008 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
12009 (tp->tg3_flags & TG3_FLAG_PCIX_MODE) != 0)
12010 tp->rx_offset = 0;
12012 tp->rx_std_max_post = TG3_RX_RING_SIZE;
12014 /* Increment the rx prod index on the rx std ring by at most
12015 * 8 for these chips to workaround hw errata.
12017 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
12018 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
12019 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
12020 tp->rx_std_max_post = 8;
12022 if (tp->tg3_flags & TG3_FLAG_ASPM_WORKAROUND)
12023 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
12024 PCIE_PWR_MGMT_L1_THRESH_MSK;
12026 return err;
12029 #ifdef CONFIG_SPARC
12030 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
12032 struct net_device *dev = tp->dev;
12033 struct pci_dev *pdev = tp->pdev;
12034 struct device_node *dp = pci_device_to_OF_node(pdev);
12035 const unsigned char *addr;
12036 int len;
12038 addr = of_get_property(dp, "local-mac-address", &len);
12039 if (addr && len == 6) {
12040 memcpy(dev->dev_addr, addr, 6);
12041 memcpy(dev->perm_addr, dev->dev_addr, 6);
12042 return 0;
12044 return -ENODEV;
12047 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
12049 struct net_device *dev = tp->dev;
12051 memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
12052 memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
12053 return 0;
12055 #endif
12057 static int __devinit tg3_get_device_address(struct tg3 *tp)
12059 struct net_device *dev = tp->dev;
12060 u32 hi, lo, mac_offset;
12061 int addr_ok = 0;
12063 #ifdef CONFIG_SPARC
12064 if (!tg3_get_macaddr_sparc(tp))
12065 return 0;
12066 #endif
12068 mac_offset = 0x7c;
12069 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
12070 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
12071 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
12072 mac_offset = 0xcc;
12073 if (tg3_nvram_lock(tp))
12074 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
12075 else
12076 tg3_nvram_unlock(tp);
12078 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
12079 mac_offset = 0x10;
12081 /* First try to get it from MAC address mailbox. */
12082 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
12083 if ((hi >> 16) == 0x484b) {
12084 dev->dev_addr[0] = (hi >> 8) & 0xff;
12085 dev->dev_addr[1] = (hi >> 0) & 0xff;
12087 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
12088 dev->dev_addr[2] = (lo >> 24) & 0xff;
12089 dev->dev_addr[3] = (lo >> 16) & 0xff;
12090 dev->dev_addr[4] = (lo >> 8) & 0xff;
12091 dev->dev_addr[5] = (lo >> 0) & 0xff;
12093 /* Some old bootcode may report a 0 MAC address in SRAM */
12094 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
12096 if (!addr_ok) {
12097 /* Next, try NVRAM. */
12098 if (!tg3_nvram_read(tp, mac_offset + 0, &hi) &&
12099 !tg3_nvram_read(tp, mac_offset + 4, &lo)) {
12100 dev->dev_addr[0] = ((hi >> 16) & 0xff);
12101 dev->dev_addr[1] = ((hi >> 24) & 0xff);
12102 dev->dev_addr[2] = ((lo >> 0) & 0xff);
12103 dev->dev_addr[3] = ((lo >> 8) & 0xff);
12104 dev->dev_addr[4] = ((lo >> 16) & 0xff);
12105 dev->dev_addr[5] = ((lo >> 24) & 0xff);
12107 /* Finally just fetch it out of the MAC control regs. */
12108 else {
12109 hi = tr32(MAC_ADDR_0_HIGH);
12110 lo = tr32(MAC_ADDR_0_LOW);
12112 dev->dev_addr[5] = lo & 0xff;
12113 dev->dev_addr[4] = (lo >> 8) & 0xff;
12114 dev->dev_addr[3] = (lo >> 16) & 0xff;
12115 dev->dev_addr[2] = (lo >> 24) & 0xff;
12116 dev->dev_addr[1] = hi & 0xff;
12117 dev->dev_addr[0] = (hi >> 8) & 0xff;
12121 if (!is_valid_ether_addr(&dev->dev_addr[0])) {
12122 #ifdef CONFIG_SPARC
12123 if (!tg3_get_default_macaddr_sparc(tp))
12124 return 0;
12125 #endif
12126 return -EINVAL;
12128 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
12129 return 0;
12132 #define BOUNDARY_SINGLE_CACHELINE 1
12133 #define BOUNDARY_MULTI_CACHELINE 2
12135 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
12137 int cacheline_size;
12138 u8 byte;
12139 int goal;
12141 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
12142 if (byte == 0)
12143 cacheline_size = 1024;
12144 else
12145 cacheline_size = (int) byte * 4;
12147 /* On 5703 and later chips, the boundary bits have no
12148 * effect.
12150 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
12151 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
12152 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
12153 goto out;
12155 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
12156 goal = BOUNDARY_MULTI_CACHELINE;
12157 #else
12158 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
12159 goal = BOUNDARY_SINGLE_CACHELINE;
12160 #else
12161 goal = 0;
12162 #endif
12163 #endif
12165 if (!goal)
12166 goto out;
12168 /* PCI controllers on most RISC systems tend to disconnect
12169 * when a device tries to burst across a cache-line boundary.
12170 * Therefore, letting tg3 do so just wastes PCI bandwidth.
12172 * Unfortunately, for PCI-E there are only limited
12173 * write-side controls for this, and thus for reads
12174 * we will still get the disconnects. We'll also waste
12175 * these PCI cycles for both read and write for chips
12176 * other than 5700 and 5701 which do not implement the
12177 * boundary bits.
12179 if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) &&
12180 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) {
12181 switch (cacheline_size) {
12182 case 16:
12183 case 32:
12184 case 64:
12185 case 128:
12186 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12187 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
12188 DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
12189 } else {
12190 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
12191 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
12193 break;
12195 case 256:
12196 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
12197 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
12198 break;
12200 default:
12201 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
12202 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
12203 break;
12205 } else if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
12206 switch (cacheline_size) {
12207 case 16:
12208 case 32:
12209 case 64:
12210 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12211 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
12212 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
12213 break;
12215 /* fallthrough */
12216 case 128:
12217 default:
12218 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
12219 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
12220 break;
12222 } else {
12223 switch (cacheline_size) {
12224 case 16:
12225 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12226 val |= (DMA_RWCTRL_READ_BNDRY_16 |
12227 DMA_RWCTRL_WRITE_BNDRY_16);
12228 break;
12230 /* fallthrough */
12231 case 32:
12232 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12233 val |= (DMA_RWCTRL_READ_BNDRY_32 |
12234 DMA_RWCTRL_WRITE_BNDRY_32);
12235 break;
12237 /* fallthrough */
12238 case 64:
12239 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12240 val |= (DMA_RWCTRL_READ_BNDRY_64 |
12241 DMA_RWCTRL_WRITE_BNDRY_64);
12242 break;
12244 /* fallthrough */
12245 case 128:
12246 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12247 val |= (DMA_RWCTRL_READ_BNDRY_128 |
12248 DMA_RWCTRL_WRITE_BNDRY_128);
12249 break;
12251 /* fallthrough */
12252 case 256:
12253 val |= (DMA_RWCTRL_READ_BNDRY_256 |
12254 DMA_RWCTRL_WRITE_BNDRY_256);
12255 break;
12256 case 512:
12257 val |= (DMA_RWCTRL_READ_BNDRY_512 |
12258 DMA_RWCTRL_WRITE_BNDRY_512);
12259 break;
12260 case 1024:
12261 default:
12262 val |= (DMA_RWCTRL_READ_BNDRY_1024 |
12263 DMA_RWCTRL_WRITE_BNDRY_1024);
12264 break;
12268 out:
12269 return val;
12272 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
12274 struct tg3_internal_buffer_desc test_desc;
12275 u32 sram_dma_descs;
12276 int i, ret;
12278 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
12280 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
12281 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
12282 tw32(RDMAC_STATUS, 0);
12283 tw32(WDMAC_STATUS, 0);
12285 tw32(BUFMGR_MODE, 0);
12286 tw32(FTQ_RESET, 0);
12288 test_desc.addr_hi = ((u64) buf_dma) >> 32;
12289 test_desc.addr_lo = buf_dma & 0xffffffff;
12290 test_desc.nic_mbuf = 0x00002100;
12291 test_desc.len = size;
12294 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
12295 * the *second* time the tg3 driver was getting loaded after an
12296 * initial scan.
12298 * Broadcom tells me:
12299 * ...the DMA engine is connected to the GRC block and a DMA
12300 * reset may affect the GRC block in some unpredictable way...
12301 * The behavior of resets to individual blocks has not been tested.
12303 * Broadcom noted the GRC reset will also reset all sub-components.
12305 if (to_device) {
12306 test_desc.cqid_sqid = (13 << 8) | 2;
12308 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
12309 udelay(40);
12310 } else {
12311 test_desc.cqid_sqid = (16 << 8) | 7;
12313 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
12314 udelay(40);
12316 test_desc.flags = 0x00000005;
12318 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
12319 u32 val;
12321 val = *(((u32 *)&test_desc) + i);
12322 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
12323 sram_dma_descs + (i * sizeof(u32)));
12324 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
12326 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
12328 if (to_device) {
12329 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
12330 } else {
12331 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
12334 ret = -ENODEV;
12335 for (i = 0; i < 40; i++) {
12336 u32 val;
12338 if (to_device)
12339 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
12340 else
12341 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
12342 if ((val & 0xffff) == sram_dma_descs) {
12343 ret = 0;
12344 break;
12347 udelay(100);
12350 return ret;
12353 #define TEST_BUFFER_SIZE 0x2000
12355 static int __devinit tg3_test_dma(struct tg3 *tp)
12357 dma_addr_t buf_dma;
12358 u32 *buf, saved_dma_rwctrl;
12359 int ret;
12361 buf = pci_alloc_consistent(tp->pdev, TEST_BUFFER_SIZE, &buf_dma);
12362 if (!buf) {
12363 ret = -ENOMEM;
12364 goto out_nofree;
12367 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
12368 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
12370 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
12372 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
12373 /* DMA read watermark not used on PCIE */
12374 tp->dma_rwctrl |= 0x00180000;
12375 } else if (!(tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
12376 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
12377 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
12378 tp->dma_rwctrl |= 0x003f0000;
12379 else
12380 tp->dma_rwctrl |= 0x003f000f;
12381 } else {
12382 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
12383 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
12384 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
12385 u32 read_water = 0x7;
12387 /* If the 5704 is behind the EPB bridge, we can
12388 * do the less restrictive ONE_DMA workaround for
12389 * better performance.
12391 if ((tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) &&
12392 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
12393 tp->dma_rwctrl |= 0x8000;
12394 else if (ccval == 0x6 || ccval == 0x7)
12395 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
12397 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703)
12398 read_water = 4;
12399 /* Set bit 23 to enable PCIX hw bug fix */
12400 tp->dma_rwctrl |=
12401 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
12402 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
12403 (1 << 23);
12404 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
12405 /* 5780 always in PCIX mode */
12406 tp->dma_rwctrl |= 0x00144000;
12407 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
12408 /* 5714 always in PCIX mode */
12409 tp->dma_rwctrl |= 0x00148000;
12410 } else {
12411 tp->dma_rwctrl |= 0x001b000f;
12415 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
12416 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
12417 tp->dma_rwctrl &= 0xfffffff0;
12419 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
12420 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
12421 /* Remove this if it causes problems for some boards. */
12422 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
12424 /* On 5700/5701 chips, we need to set this bit.
12425 * Otherwise the chip will issue cacheline transactions
12426 * to streamable DMA memory with not all the byte
12427 * enables turned on. This is an error on several
12428 * RISC PCI controllers, in particular sparc64.
12430 * On 5703/5704 chips, this bit has been reassigned
12431 * a different meaning. In particular, it is used
12432 * on those chips to enable a PCI-X workaround.
12434 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
12437 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
12439 #if 0
12440 /* Unneeded, already done by tg3_get_invariants. */
12441 tg3_switch_clocks(tp);
12442 #endif
12444 ret = 0;
12445 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
12446 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
12447 goto out;
12449 /* It is best to perform DMA test with maximum write burst size
12450 * to expose the 5700/5701 write DMA bug.
12452 saved_dma_rwctrl = tp->dma_rwctrl;
12453 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
12454 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
12456 while (1) {
12457 u32 *p = buf, i;
12459 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
12460 p[i] = i;
12462 /* Send the buffer to the chip. */
12463 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
12464 if (ret) {
12465 printk(KERN_ERR "tg3_test_dma() Write the buffer failed %d\n", ret);
12466 break;
12469 #if 0
12470 /* validate data reached card RAM correctly. */
12471 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
12472 u32 val;
12473 tg3_read_mem(tp, 0x2100 + (i*4), &val);
12474 if (le32_to_cpu(val) != p[i]) {
12475 printk(KERN_ERR " tg3_test_dma() Card buffer corrupted on write! (%d != %d)\n", val, i);
12476 /* ret = -ENODEV here? */
12478 p[i] = 0;
12480 #endif
12481 /* Now read it back. */
12482 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
12483 if (ret) {
12484 printk(KERN_ERR "tg3_test_dma() Read the buffer failed %d\n", ret);
12486 break;
12489 /* Verify it. */
12490 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
12491 if (p[i] == i)
12492 continue;
12494 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
12495 DMA_RWCTRL_WRITE_BNDRY_16) {
12496 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
12497 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
12498 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
12499 break;
12500 } else {
12501 printk(KERN_ERR "tg3_test_dma() buffer corrupted on read back! (%d != %d)\n", p[i], i);
12502 ret = -ENODEV;
12503 goto out;
12507 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
12508 /* Success. */
12509 ret = 0;
12510 break;
12513 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
12514 DMA_RWCTRL_WRITE_BNDRY_16) {
12515 static struct pci_device_id dma_wait_state_chipsets[] = {
12516 { PCI_DEVICE(PCI_VENDOR_ID_APPLE,
12517 PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
12518 { },
12521 /* DMA test passed without adjusting DMA boundary,
12522 * now look for chipsets that are known to expose the
12523 * DMA bug without failing the test.
12525 if (pci_dev_present(dma_wait_state_chipsets)) {
12526 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
12527 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
12529 else
12530 /* Safe to use the calculated DMA boundary. */
12531 tp->dma_rwctrl = saved_dma_rwctrl;
12533 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
12536 out:
12537 pci_free_consistent(tp->pdev, TEST_BUFFER_SIZE, buf, buf_dma);
12538 out_nofree:
12539 return ret;
12542 static void __devinit tg3_init_link_config(struct tg3 *tp)
12544 tp->link_config.advertising =
12545 (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
12546 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
12547 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full |
12548 ADVERTISED_Autoneg | ADVERTISED_MII);
12549 tp->link_config.speed = SPEED_INVALID;
12550 tp->link_config.duplex = DUPLEX_INVALID;
12551 tp->link_config.autoneg = AUTONEG_ENABLE;
12552 tp->link_config.active_speed = SPEED_INVALID;
12553 tp->link_config.active_duplex = DUPLEX_INVALID;
12554 tp->link_config.phy_is_low_power = 0;
12555 tp->link_config.orig_speed = SPEED_INVALID;
12556 tp->link_config.orig_duplex = DUPLEX_INVALID;
12557 tp->link_config.orig_autoneg = AUTONEG_INVALID;
12560 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
12562 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
12563 tp->bufmgr_config.mbuf_read_dma_low_water =
12564 DEFAULT_MB_RDMA_LOW_WATER_5705;
12565 tp->bufmgr_config.mbuf_mac_rx_low_water =
12566 DEFAULT_MB_MACRX_LOW_WATER_5705;
12567 tp->bufmgr_config.mbuf_high_water =
12568 DEFAULT_MB_HIGH_WATER_5705;
12569 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
12570 tp->bufmgr_config.mbuf_mac_rx_low_water =
12571 DEFAULT_MB_MACRX_LOW_WATER_5906;
12572 tp->bufmgr_config.mbuf_high_water =
12573 DEFAULT_MB_HIGH_WATER_5906;
12576 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
12577 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
12578 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
12579 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
12580 tp->bufmgr_config.mbuf_high_water_jumbo =
12581 DEFAULT_MB_HIGH_WATER_JUMBO_5780;
12582 } else {
12583 tp->bufmgr_config.mbuf_read_dma_low_water =
12584 DEFAULT_MB_RDMA_LOW_WATER;
12585 tp->bufmgr_config.mbuf_mac_rx_low_water =
12586 DEFAULT_MB_MACRX_LOW_WATER;
12587 tp->bufmgr_config.mbuf_high_water =
12588 DEFAULT_MB_HIGH_WATER;
12590 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
12591 DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
12592 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
12593 DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
12594 tp->bufmgr_config.mbuf_high_water_jumbo =
12595 DEFAULT_MB_HIGH_WATER_JUMBO;
12598 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
12599 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
12602 static char * __devinit tg3_phy_string(struct tg3 *tp)
12604 switch (tp->phy_id & PHY_ID_MASK) {
12605 case PHY_ID_BCM5400: return "5400";
12606 case PHY_ID_BCM5401: return "5401";
12607 case PHY_ID_BCM5411: return "5411";
12608 case PHY_ID_BCM5701: return "5701";
12609 case PHY_ID_BCM5703: return "5703";
12610 case PHY_ID_BCM5704: return "5704";
12611 case PHY_ID_BCM5705: return "5705";
12612 case PHY_ID_BCM5750: return "5750";
12613 case PHY_ID_BCM5752: return "5752";
12614 case PHY_ID_BCM5714: return "5714";
12615 case PHY_ID_BCM5780: return "5780";
12616 case PHY_ID_BCM5755: return "5755";
12617 case PHY_ID_BCM5787: return "5787";
12618 case PHY_ID_BCM5784: return "5784";
12619 case PHY_ID_BCM5756: return "5722/5756";
12620 case PHY_ID_BCM5906: return "5906";
12621 case PHY_ID_BCM5761: return "5761";
12622 case PHY_ID_BCM8002: return "8002/serdes";
12623 case 0: return "serdes";
12624 default: return "unknown";
12628 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
12630 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
12631 strcpy(str, "PCI Express");
12632 return str;
12633 } else if (tp->tg3_flags & TG3_FLAG_PCIX_MODE) {
12634 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
12636 strcpy(str, "PCIX:");
12638 if ((clock_ctrl == 7) ||
12639 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
12640 GRC_MISC_CFG_BOARD_ID_5704CIOBE))
12641 strcat(str, "133MHz");
12642 else if (clock_ctrl == 0)
12643 strcat(str, "33MHz");
12644 else if (clock_ctrl == 2)
12645 strcat(str, "50MHz");
12646 else if (clock_ctrl == 4)
12647 strcat(str, "66MHz");
12648 else if (clock_ctrl == 6)
12649 strcat(str, "100MHz");
12650 } else {
12651 strcpy(str, "PCI:");
12652 if (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED)
12653 strcat(str, "66MHz");
12654 else
12655 strcat(str, "33MHz");
12657 if (tp->tg3_flags & TG3_FLAG_PCI_32BIT)
12658 strcat(str, ":32-bit");
12659 else
12660 strcat(str, ":64-bit");
12661 return str;
12664 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
12666 struct pci_dev *peer;
12667 unsigned int func, devnr = tp->pdev->devfn & ~7;
12669 for (func = 0; func < 8; func++) {
12670 peer = pci_get_slot(tp->pdev->bus, devnr | func);
12671 if (peer && peer != tp->pdev)
12672 break;
12673 pci_dev_put(peer);
12675 /* 5704 can be configured in single-port mode, set peer to
12676 * tp->pdev in that case.
12678 if (!peer) {
12679 peer = tp->pdev;
12680 return peer;
12684 * We don't need to keep the refcount elevated; there's no way
12685 * to remove one half of this device without removing the other
12687 pci_dev_put(peer);
12689 return peer;
12692 static void __devinit tg3_init_coal(struct tg3 *tp)
12694 struct ethtool_coalesce *ec = &tp->coal;
12696 memset(ec, 0, sizeof(*ec));
12697 ec->cmd = ETHTOOL_GCOALESCE;
12698 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
12699 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
12700 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
12701 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
12702 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
12703 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
12704 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
12705 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
12706 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
12708 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
12709 HOSTCC_MODE_CLRTICK_TXBD)) {
12710 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
12711 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
12712 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
12713 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
12716 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
12717 ec->rx_coalesce_usecs_irq = 0;
12718 ec->tx_coalesce_usecs_irq = 0;
12719 ec->stats_block_coalesce_usecs = 0;
12723 static int __devinit tg3_init_one(struct pci_dev *pdev,
12724 const struct pci_device_id *ent)
12726 static int tg3_version_printed = 0;
12727 resource_size_t tg3reg_base;
12728 unsigned long tg3reg_len;
12729 struct net_device *dev;
12730 struct tg3 *tp;
12731 int err, pm_cap;
12732 char str[40];
12733 u64 dma_mask, persist_dma_mask;
12734 DECLARE_MAC_BUF(mac);
12736 if (tg3_version_printed++ == 0)
12737 printk(KERN_INFO "%s", version);
12739 err = pci_enable_device(pdev);
12740 if (err) {
12741 printk(KERN_ERR PFX "Cannot enable PCI device, "
12742 "aborting.\n");
12743 return err;
12746 if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
12747 printk(KERN_ERR PFX "Cannot find proper PCI device "
12748 "base address, aborting.\n");
12749 err = -ENODEV;
12750 goto err_out_disable_pdev;
12753 err = pci_request_regions(pdev, DRV_MODULE_NAME);
12754 if (err) {
12755 printk(KERN_ERR PFX "Cannot obtain PCI resources, "
12756 "aborting.\n");
12757 goto err_out_disable_pdev;
12760 pci_set_master(pdev);
12762 /* Find power-management capability. */
12763 pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
12764 if (pm_cap == 0) {
12765 printk(KERN_ERR PFX "Cannot find PowerManagement capability, "
12766 "aborting.\n");
12767 err = -EIO;
12768 goto err_out_free_res;
12771 tg3reg_base = pci_resource_start(pdev, 0);
12772 tg3reg_len = pci_resource_len(pdev, 0);
12774 dev = alloc_etherdev(sizeof(*tp));
12775 if (!dev) {
12776 printk(KERN_ERR PFX "Etherdev alloc failed, aborting.\n");
12777 err = -ENOMEM;
12778 goto err_out_free_res;
12781 SET_NETDEV_DEV(dev, &pdev->dev);
12783 #if TG3_VLAN_TAG_USED
12784 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
12785 dev->vlan_rx_register = tg3_vlan_rx_register;
12786 #endif
12788 tp = netdev_priv(dev);
12789 tp->pdev = pdev;
12790 tp->dev = dev;
12791 tp->pm_cap = pm_cap;
12792 tp->mac_mode = TG3_DEF_MAC_MODE;
12793 tp->rx_mode = TG3_DEF_RX_MODE;
12794 tp->tx_mode = TG3_DEF_TX_MODE;
12796 if (tg3_debug > 0)
12797 tp->msg_enable = tg3_debug;
12798 else
12799 tp->msg_enable = TG3_DEF_MSG_ENABLE;
12801 /* The word/byte swap controls here control register access byte
12802 * swapping. DMA data byte swapping is controlled in the GRC_MODE
12803 * setting below.
12805 tp->misc_host_ctrl =
12806 MISC_HOST_CTRL_MASK_PCI_INT |
12807 MISC_HOST_CTRL_WORD_SWAP |
12808 MISC_HOST_CTRL_INDIR_ACCESS |
12809 MISC_HOST_CTRL_PCISTATE_RW;
12811 /* The NONFRM (non-frame) byte/word swap controls take effect
12812 * on descriptor entries, anything which isn't packet data.
12814 * The StrongARM chips on the board (one for tx, one for rx)
12815 * are running in big-endian mode.
12817 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
12818 GRC_MODE_WSWAP_NONFRM_DATA);
12819 #ifdef __BIG_ENDIAN
12820 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
12821 #endif
12822 spin_lock_init(&tp->lock);
12823 spin_lock_init(&tp->indirect_lock);
12824 INIT_WORK(&tp->reset_task, tg3_reset_task);
12826 tp->regs = ioremap_nocache(tg3reg_base, tg3reg_len);
12827 if (!tp->regs) {
12828 printk(KERN_ERR PFX "Cannot map device registers, "
12829 "aborting.\n");
12830 err = -ENOMEM;
12831 goto err_out_free_dev;
12834 tg3_init_link_config(tp);
12836 tp->rx_pending = TG3_DEF_RX_RING_PENDING;
12837 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
12838 tp->tx_pending = TG3_DEF_TX_RING_PENDING;
12840 dev->open = tg3_open;
12841 dev->stop = tg3_close;
12842 dev->get_stats = tg3_get_stats;
12843 dev->set_multicast_list = tg3_set_rx_mode;
12844 dev->set_mac_address = tg3_set_mac_addr;
12845 dev->do_ioctl = tg3_ioctl;
12846 dev->tx_timeout = tg3_tx_timeout;
12847 netif_napi_add(dev, &tp->napi, tg3_poll, 64);
12848 dev->ethtool_ops = &tg3_ethtool_ops;
12849 dev->watchdog_timeo = TG3_TX_TIMEOUT;
12850 dev->change_mtu = tg3_change_mtu;
12851 dev->irq = pdev->irq;
12852 #ifdef CONFIG_NET_POLL_CONTROLLER
12853 dev->poll_controller = tg3_poll_controller;
12854 #endif
12856 err = tg3_get_invariants(tp);
12857 if (err) {
12858 printk(KERN_ERR PFX "Problem fetching invariants of chip, "
12859 "aborting.\n");
12860 goto err_out_iounmap;
12863 /* The EPB bridge inside 5714, 5715, and 5780 and any
12864 * device behind the EPB cannot support DMA addresses > 40-bit.
12865 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
12866 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
12867 * do DMA address check in tg3_start_xmit().
12869 if (tp->tg3_flags2 & TG3_FLG2_IS_5788)
12870 persist_dma_mask = dma_mask = DMA_32BIT_MASK;
12871 else if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) {
12872 persist_dma_mask = dma_mask = DMA_40BIT_MASK;
12873 #ifdef CONFIG_HIGHMEM
12874 dma_mask = DMA_64BIT_MASK;
12875 #endif
12876 } else
12877 persist_dma_mask = dma_mask = DMA_64BIT_MASK;
12879 /* Configure DMA attributes. */
12880 if (dma_mask > DMA_32BIT_MASK) {
12881 err = pci_set_dma_mask(pdev, dma_mask);
12882 if (!err) {
12883 dev->features |= NETIF_F_HIGHDMA;
12884 err = pci_set_consistent_dma_mask(pdev,
12885 persist_dma_mask);
12886 if (err < 0) {
12887 printk(KERN_ERR PFX "Unable to obtain 64 bit "
12888 "DMA for consistent allocations\n");
12889 goto err_out_iounmap;
12893 if (err || dma_mask == DMA_32BIT_MASK) {
12894 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
12895 if (err) {
12896 printk(KERN_ERR PFX "No usable DMA configuration, "
12897 "aborting.\n");
12898 goto err_out_iounmap;
12902 tg3_init_bufmgr_config(tp);
12904 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
12905 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
12907 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
12908 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
12909 tp->pci_chip_rev_id == CHIPREV_ID_5705_A0 ||
12910 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
12911 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
12912 tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE;
12913 } else {
12914 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE | TG3_FLG2_TSO_BUG;
12917 /* TSO is on by default on chips that support hardware TSO.
12918 * Firmware TSO on older chips gives lower performance, so it
12919 * is off by default, but can be enabled using ethtool.
12921 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
12922 dev->features |= NETIF_F_TSO;
12923 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) &&
12924 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906))
12925 dev->features |= NETIF_F_TSO6;
12926 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
12927 dev->features |= NETIF_F_TSO_ECN;
12931 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
12932 !(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) &&
12933 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
12934 tp->tg3_flags2 |= TG3_FLG2_MAX_RXPEND_64;
12935 tp->rx_pending = 63;
12938 err = tg3_get_device_address(tp);
12939 if (err) {
12940 printk(KERN_ERR PFX "Could not obtain valid ethernet address, "
12941 "aborting.\n");
12942 goto err_out_iounmap;
12945 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) {
12946 if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) {
12947 printk(KERN_ERR PFX "Cannot find proper PCI device "
12948 "base address for APE, aborting.\n");
12949 err = -ENODEV;
12950 goto err_out_iounmap;
12953 tg3reg_base = pci_resource_start(pdev, 2);
12954 tg3reg_len = pci_resource_len(pdev, 2);
12956 tp->aperegs = ioremap_nocache(tg3reg_base, tg3reg_len);
12957 if (!tp->aperegs) {
12958 printk(KERN_ERR PFX "Cannot map APE registers, "
12959 "aborting.\n");
12960 err = -ENOMEM;
12961 goto err_out_iounmap;
12964 tg3_ape_lock_init(tp);
12968 * Reset chip in case UNDI or EFI driver did not shutdown
12969 * DMA self test will enable WDMAC and we'll see (spurious)
12970 * pending DMA on the PCI bus at that point.
12972 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
12973 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
12974 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
12975 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12978 err = tg3_test_dma(tp);
12979 if (err) {
12980 printk(KERN_ERR PFX "DMA engine test failed, aborting.\n");
12981 goto err_out_apeunmap;
12984 /* Tigon3 can do ipv4 only... and some chips have buggy
12985 * checksumming.
12987 if ((tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) == 0) {
12988 dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
12989 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
12990 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
12991 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
12992 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
12993 dev->features |= NETIF_F_IPV6_CSUM;
12995 tp->tg3_flags |= TG3_FLAG_RX_CHECKSUMS;
12996 } else
12997 tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
12999 /* flow control autonegotiation is default behavior */
13000 tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
13001 tp->link_config.flowctrl = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
13003 tg3_init_coal(tp);
13005 pci_set_drvdata(pdev, dev);
13007 err = register_netdev(dev);
13008 if (err) {
13009 printk(KERN_ERR PFX "Cannot register net device, "
13010 "aborting.\n");
13011 goto err_out_apeunmap;
13014 printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] "
13015 "(%s) %s Ethernet %s\n",
13016 dev->name,
13017 tp->board_part_number,
13018 tp->pci_chip_rev_id,
13019 tg3_phy_string(tp),
13020 tg3_bus_string(tp, str),
13021 ((tp->tg3_flags & TG3_FLAG_10_100_ONLY) ? "10/100Base-TX" :
13022 ((tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) ? "1000Base-SX" :
13023 "10/100/1000Base-T")),
13024 print_mac(mac, dev->dev_addr));
13026 printk(KERN_INFO "%s: RXcsums[%d] LinkChgREG[%d] "
13027 "MIirq[%d] ASF[%d] WireSpeed[%d] TSOcap[%d]\n",
13028 dev->name,
13029 (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0,
13030 (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) != 0,
13031 (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) != 0,
13032 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0,
13033 (tp->tg3_flags2 & TG3_FLG2_NO_ETH_WIRE_SPEED) == 0,
13034 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) != 0);
13035 printk(KERN_INFO "%s: dma_rwctrl[%08x] dma_mask[%d-bit]\n",
13036 dev->name, tp->dma_rwctrl,
13037 (pdev->dma_mask == DMA_32BIT_MASK) ? 32 :
13038 (((u64) pdev->dma_mask == DMA_40BIT_MASK) ? 40 : 64));
13040 return 0;
13042 err_out_apeunmap:
13043 if (tp->aperegs) {
13044 iounmap(tp->aperegs);
13045 tp->aperegs = NULL;
13048 err_out_iounmap:
13049 if (tp->regs) {
13050 iounmap(tp->regs);
13051 tp->regs = NULL;
13054 err_out_free_dev:
13055 free_netdev(dev);
13057 err_out_free_res:
13058 pci_release_regions(pdev);
13060 err_out_disable_pdev:
13061 pci_disable_device(pdev);
13062 pci_set_drvdata(pdev, NULL);
13063 return err;
13066 static void __devexit tg3_remove_one(struct pci_dev *pdev)
13068 struct net_device *dev = pci_get_drvdata(pdev);
13070 if (dev) {
13071 struct tg3 *tp = netdev_priv(dev);
13073 flush_scheduled_work();
13074 unregister_netdev(dev);
13075 if (tp->aperegs) {
13076 iounmap(tp->aperegs);
13077 tp->aperegs = NULL;
13079 if (tp->regs) {
13080 iounmap(tp->regs);
13081 tp->regs = NULL;
13083 free_netdev(dev);
13084 pci_release_regions(pdev);
13085 pci_disable_device(pdev);
13086 pci_set_drvdata(pdev, NULL);
13090 static int tg3_suspend(struct pci_dev *pdev, pm_message_t state)
13092 struct net_device *dev = pci_get_drvdata(pdev);
13093 struct tg3 *tp = netdev_priv(dev);
13094 int err;
13096 /* PCI register 4 needs to be saved whether netif_running() or not.
13097 * MSI address and data need to be saved if using MSI and
13098 * netif_running().
13100 pci_save_state(pdev);
13102 if (!netif_running(dev))
13103 return 0;
13105 flush_scheduled_work();
13106 tg3_netif_stop(tp);
13108 del_timer_sync(&tp->timer);
13110 tg3_full_lock(tp, 1);
13111 tg3_disable_ints(tp);
13112 tg3_full_unlock(tp);
13114 netif_device_detach(dev);
13116 tg3_full_lock(tp, 0);
13117 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13118 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
13119 tg3_full_unlock(tp);
13121 err = tg3_set_power_state(tp, pci_choose_state(pdev, state));
13122 if (err) {
13123 tg3_full_lock(tp, 0);
13125 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
13126 if (tg3_restart_hw(tp, 1))
13127 goto out;
13129 tp->timer.expires = jiffies + tp->timer_offset;
13130 add_timer(&tp->timer);
13132 netif_device_attach(dev);
13133 tg3_netif_start(tp);
13135 out:
13136 tg3_full_unlock(tp);
13139 return err;
13142 static int tg3_resume(struct pci_dev *pdev)
13144 struct net_device *dev = pci_get_drvdata(pdev);
13145 struct tg3 *tp = netdev_priv(dev);
13146 int err;
13148 pci_restore_state(tp->pdev);
13150 if (!netif_running(dev))
13151 return 0;
13153 err = tg3_set_power_state(tp, PCI_D0);
13154 if (err)
13155 return err;
13157 netif_device_attach(dev);
13159 tg3_full_lock(tp, 0);
13161 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
13162 err = tg3_restart_hw(tp, 1);
13163 if (err)
13164 goto out;
13166 tp->timer.expires = jiffies + tp->timer_offset;
13167 add_timer(&tp->timer);
13169 tg3_netif_start(tp);
13171 out:
13172 tg3_full_unlock(tp);
13174 return err;
13177 static struct pci_driver tg3_driver = {
13178 .name = DRV_MODULE_NAME,
13179 .id_table = tg3_pci_tbl,
13180 .probe = tg3_init_one,
13181 .remove = __devexit_p(tg3_remove_one),
13182 .suspend = tg3_suspend,
13183 .resume = tg3_resume
13186 static int __init tg3_init(void)
13188 return pci_register_driver(&tg3_driver);
13191 static void __exit tg3_cleanup(void)
13193 pci_unregister_driver(&tg3_driver);
13196 module_init(tg3_init);
13197 module_exit(tg3_cleanup);