ISAPNP: remove unused pnp_dev->regs field
[linux-2.6/mini2440.git] / drivers / net / tg3.c
blobe3f74c9f78bd848f1e61aa6647f7109e7282fd7c
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.91"
68 #define DRV_MODULE_RELDATE "April 18, 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 {
1299 u32 no_gpio2;
1300 u32 grc_local_ctrl = 0;
1302 if (tp_peer != tp &&
1303 (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
1304 return;
1306 /* Workaround to prevent overdrawing Amps. */
1307 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
1308 ASIC_REV_5714) {
1309 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
1310 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1311 grc_local_ctrl, 100);
1314 /* On 5753 and variants, GPIO2 cannot be used. */
1315 no_gpio2 = tp->nic_sram_data_cfg &
1316 NIC_SRAM_DATA_CFG_NO_GPIO2;
1318 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
1319 GRC_LCLCTRL_GPIO_OE1 |
1320 GRC_LCLCTRL_GPIO_OE2 |
1321 GRC_LCLCTRL_GPIO_OUTPUT1 |
1322 GRC_LCLCTRL_GPIO_OUTPUT2;
1323 if (no_gpio2) {
1324 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
1325 GRC_LCLCTRL_GPIO_OUTPUT2);
1327 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1328 grc_local_ctrl, 100);
1330 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
1332 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1333 grc_local_ctrl, 100);
1335 if (!no_gpio2) {
1336 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
1337 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1338 grc_local_ctrl, 100);
1341 } else {
1342 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
1343 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
1344 if (tp_peer != tp &&
1345 (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
1346 return;
1348 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1349 (GRC_LCLCTRL_GPIO_OE1 |
1350 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1352 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1353 GRC_LCLCTRL_GPIO_OE1, 100);
1355 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
1356 (GRC_LCLCTRL_GPIO_OE1 |
1357 GRC_LCLCTRL_GPIO_OUTPUT1), 100);
1362 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
1364 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
1365 return 1;
1366 else if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5411) {
1367 if (speed != SPEED_10)
1368 return 1;
1369 } else if (speed == SPEED_10)
1370 return 1;
1372 return 0;
1375 static int tg3_setup_phy(struct tg3 *, int);
1377 #define RESET_KIND_SHUTDOWN 0
1378 #define RESET_KIND_INIT 1
1379 #define RESET_KIND_SUSPEND 2
1381 static void tg3_write_sig_post_reset(struct tg3 *, int);
1382 static int tg3_halt_cpu(struct tg3 *, u32);
1383 static int tg3_nvram_lock(struct tg3 *);
1384 static void tg3_nvram_unlock(struct tg3 *);
1386 static void tg3_power_down_phy(struct tg3 *tp)
1388 u32 val;
1390 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
1391 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
1392 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
1393 u32 serdes_cfg = tr32(MAC_SERDES_CFG);
1395 sg_dig_ctrl |=
1396 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET;
1397 tw32(SG_DIG_CTRL, sg_dig_ctrl);
1398 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
1400 return;
1403 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1404 tg3_bmcr_reset(tp);
1405 val = tr32(GRC_MISC_CFG);
1406 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ);
1407 udelay(40);
1408 return;
1409 } else {
1410 tg3_writephy(tp, MII_TG3_EXT_CTRL,
1411 MII_TG3_EXT_CTRL_FORCE_LED_OFF);
1412 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x01b2);
1415 /* The PHY should not be powered down on some chips because
1416 * of bugs.
1418 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1419 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
1420 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 &&
1421 (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)))
1422 return;
1424 if (tp->tg3_flags3 & TG3_FLG3_5761_5784_AX_FIXES) {
1425 val = tr32(TG3_CPMU_LSPD_1000MB_CLK);
1426 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
1427 val |= CPMU_LSPD_1000MB_MACCLK_12_5;
1428 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val);
1431 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
1434 static int tg3_set_power_state(struct tg3 *tp, pci_power_t state)
1436 u32 misc_host_ctrl;
1437 u16 power_control, power_caps;
1438 int pm = tp->pm_cap;
1440 /* Make sure register accesses (indirect or otherwise)
1441 * will function correctly.
1443 pci_write_config_dword(tp->pdev,
1444 TG3PCI_MISC_HOST_CTRL,
1445 tp->misc_host_ctrl);
1447 pci_read_config_word(tp->pdev,
1448 pm + PCI_PM_CTRL,
1449 &power_control);
1450 power_control |= PCI_PM_CTRL_PME_STATUS;
1451 power_control &= ~(PCI_PM_CTRL_STATE_MASK);
1452 switch (state) {
1453 case PCI_D0:
1454 power_control |= 0;
1455 pci_write_config_word(tp->pdev,
1456 pm + PCI_PM_CTRL,
1457 power_control);
1458 udelay(100); /* Delay after power state change */
1460 /* Switch out of Vaux if it is a NIC */
1461 if (tp->tg3_flags2 & TG3_FLG2_IS_NIC)
1462 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 100);
1464 return 0;
1466 case PCI_D1:
1467 power_control |= 1;
1468 break;
1470 case PCI_D2:
1471 power_control |= 2;
1472 break;
1474 case PCI_D3hot:
1475 power_control |= 3;
1476 break;
1478 default:
1479 printk(KERN_WARNING PFX "%s: Invalid power state (%d) "
1480 "requested.\n",
1481 tp->dev->name, state);
1482 return -EINVAL;
1485 power_control |= PCI_PM_CTRL_PME_ENABLE;
1487 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
1488 tw32(TG3PCI_MISC_HOST_CTRL,
1489 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
1491 if (tp->link_config.phy_is_low_power == 0) {
1492 tp->link_config.phy_is_low_power = 1;
1493 tp->link_config.orig_speed = tp->link_config.speed;
1494 tp->link_config.orig_duplex = tp->link_config.duplex;
1495 tp->link_config.orig_autoneg = tp->link_config.autoneg;
1498 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) {
1499 tp->link_config.speed = SPEED_10;
1500 tp->link_config.duplex = DUPLEX_HALF;
1501 tp->link_config.autoneg = AUTONEG_ENABLE;
1502 tg3_setup_phy(tp, 0);
1505 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1506 u32 val;
1508 val = tr32(GRC_VCPU_EXT_CTRL);
1509 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL);
1510 } else if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1511 int i;
1512 u32 val;
1514 for (i = 0; i < 200; i++) {
1515 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
1516 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1517 break;
1518 msleep(1);
1521 if (tp->tg3_flags & TG3_FLAG_WOL_CAP)
1522 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
1523 WOL_DRV_STATE_SHUTDOWN |
1524 WOL_DRV_WOL |
1525 WOL_SET_MAGIC_PKT);
1527 pci_read_config_word(tp->pdev, pm + PCI_PM_PMC, &power_caps);
1529 if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE) {
1530 u32 mac_mode;
1532 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
1533 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x5a);
1534 udelay(40);
1536 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
1537 mac_mode = MAC_MODE_PORT_MODE_GMII;
1538 else
1539 mac_mode = MAC_MODE_PORT_MODE_MII;
1541 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
1542 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
1543 ASIC_REV_5700) {
1544 u32 speed = (tp->tg3_flags &
1545 TG3_FLAG_WOL_SPEED_100MB) ?
1546 SPEED_100 : SPEED_10;
1547 if (tg3_5700_link_polarity(tp, speed))
1548 mac_mode |= MAC_MODE_LINK_POLARITY;
1549 else
1550 mac_mode &= ~MAC_MODE_LINK_POLARITY;
1552 } else {
1553 mac_mode = MAC_MODE_PORT_MODE_TBI;
1556 if (!(tp->tg3_flags2 & TG3_FLG2_5750_PLUS))
1557 tw32(MAC_LED_CTRL, tp->led_ctrl);
1559 if (((power_caps & PCI_PM_CAP_PME_D3cold) &&
1560 (tp->tg3_flags & TG3_FLAG_WOL_ENABLE)))
1561 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
1563 tw32_f(MAC_MODE, mac_mode);
1564 udelay(100);
1566 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE);
1567 udelay(10);
1570 if (!(tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB) &&
1571 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1572 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
1573 u32 base_val;
1575 base_val = tp->pci_clock_ctrl;
1576 base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
1577 CLOCK_CTRL_TXCLK_DISABLE);
1579 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK |
1580 CLOCK_CTRL_PWRDOWN_PLL133, 40);
1581 } else if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) ||
1582 (tp->tg3_flags & TG3_FLAG_CPMU_PRESENT) ||
1583 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)) {
1584 /* do nothing */
1585 } else if (!((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
1586 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF))) {
1587 u32 newbits1, newbits2;
1589 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1590 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1591 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
1592 CLOCK_CTRL_TXCLK_DISABLE |
1593 CLOCK_CTRL_ALTCLK);
1594 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
1595 } else if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
1596 newbits1 = CLOCK_CTRL_625_CORE;
1597 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
1598 } else {
1599 newbits1 = CLOCK_CTRL_ALTCLK;
1600 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
1603 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1,
1604 40);
1606 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2,
1607 40);
1609 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
1610 u32 newbits3;
1612 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
1613 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
1614 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
1615 CLOCK_CTRL_TXCLK_DISABLE |
1616 CLOCK_CTRL_44MHZ_CORE);
1617 } else {
1618 newbits3 = CLOCK_CTRL_44MHZ_CORE;
1621 tw32_wait_f(TG3PCI_CLOCK_CTRL,
1622 tp->pci_clock_ctrl | newbits3, 40);
1626 if (!(tp->tg3_flags & TG3_FLAG_WOL_ENABLE) &&
1627 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF) &&
1628 !(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE))
1629 tg3_power_down_phy(tp);
1631 tg3_frob_aux_power(tp);
1633 /* Workaround for unstable PLL clock */
1634 if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
1635 (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
1636 u32 val = tr32(0x7d00);
1638 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
1639 tw32(0x7d00, val);
1640 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
1641 int err;
1643 err = tg3_nvram_lock(tp);
1644 tg3_halt_cpu(tp, RX_CPU_BASE);
1645 if (!err)
1646 tg3_nvram_unlock(tp);
1650 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
1652 /* Finally, set the new power state. */
1653 pci_write_config_word(tp->pdev, pm + PCI_PM_CTRL, power_control);
1654 udelay(100); /* Delay after power state change */
1656 return 0;
1659 static void tg3_link_report(struct tg3 *tp)
1661 if (!netif_carrier_ok(tp->dev)) {
1662 if (netif_msg_link(tp))
1663 printk(KERN_INFO PFX "%s: Link is down.\n",
1664 tp->dev->name);
1665 } else if (netif_msg_link(tp)) {
1666 printk(KERN_INFO PFX "%s: Link is up at %d Mbps, %s duplex.\n",
1667 tp->dev->name,
1668 (tp->link_config.active_speed == SPEED_1000 ?
1669 1000 :
1670 (tp->link_config.active_speed == SPEED_100 ?
1671 100 : 10)),
1672 (tp->link_config.active_duplex == DUPLEX_FULL ?
1673 "full" : "half"));
1675 printk(KERN_INFO PFX
1676 "%s: Flow control is %s for TX and %s for RX.\n",
1677 tp->dev->name,
1678 (tp->link_config.active_flowctrl & TG3_FLOW_CTRL_TX) ?
1679 "on" : "off",
1680 (tp->link_config.active_flowctrl & TG3_FLOW_CTRL_RX) ?
1681 "on" : "off");
1685 static u16 tg3_advert_flowctrl_1000T(u8 flow_ctrl)
1687 u16 miireg;
1689 if ((flow_ctrl & TG3_FLOW_CTRL_TX) && (flow_ctrl & TG3_FLOW_CTRL_RX))
1690 miireg = ADVERTISE_PAUSE_CAP;
1691 else if (flow_ctrl & TG3_FLOW_CTRL_TX)
1692 miireg = ADVERTISE_PAUSE_ASYM;
1693 else if (flow_ctrl & TG3_FLOW_CTRL_RX)
1694 miireg = ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
1695 else
1696 miireg = 0;
1698 return miireg;
1701 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1703 u16 miireg;
1705 if ((flow_ctrl & TG3_FLOW_CTRL_TX) && (flow_ctrl & TG3_FLOW_CTRL_RX))
1706 miireg = ADVERTISE_1000XPAUSE;
1707 else if (flow_ctrl & TG3_FLOW_CTRL_TX)
1708 miireg = ADVERTISE_1000XPSE_ASYM;
1709 else if (flow_ctrl & TG3_FLOW_CTRL_RX)
1710 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM;
1711 else
1712 miireg = 0;
1714 return miireg;
1717 static u8 tg3_resolve_flowctrl_1000T(u16 lcladv, u16 rmtadv)
1719 u8 cap = 0;
1721 if (lcladv & ADVERTISE_PAUSE_CAP) {
1722 if (lcladv & ADVERTISE_PAUSE_ASYM) {
1723 if (rmtadv & LPA_PAUSE_CAP)
1724 cap = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
1725 else if (rmtadv & LPA_PAUSE_ASYM)
1726 cap = TG3_FLOW_CTRL_RX;
1727 } else {
1728 if (rmtadv & LPA_PAUSE_CAP)
1729 cap = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
1731 } else if (lcladv & ADVERTISE_PAUSE_ASYM) {
1732 if ((rmtadv & LPA_PAUSE_CAP) && (rmtadv & LPA_PAUSE_ASYM))
1733 cap = TG3_FLOW_CTRL_TX;
1736 return cap;
1739 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1741 u8 cap = 0;
1743 if (lcladv & ADVERTISE_1000XPAUSE) {
1744 if (lcladv & ADVERTISE_1000XPSE_ASYM) {
1745 if (rmtadv & LPA_1000XPAUSE)
1746 cap = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
1747 else if (rmtadv & LPA_1000XPAUSE_ASYM)
1748 cap = TG3_FLOW_CTRL_RX;
1749 } else {
1750 if (rmtadv & LPA_1000XPAUSE)
1751 cap = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
1753 } else if (lcladv & ADVERTISE_1000XPSE_ASYM) {
1754 if ((rmtadv & LPA_1000XPAUSE) && (rmtadv & LPA_1000XPAUSE_ASYM))
1755 cap = TG3_FLOW_CTRL_TX;
1758 return cap;
1761 static void tg3_setup_flow_control(struct tg3 *tp, u32 local_adv, u32 remote_adv)
1763 u8 new_tg3_flags = 0;
1764 u32 old_rx_mode = tp->rx_mode;
1765 u32 old_tx_mode = tp->tx_mode;
1767 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
1768 (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG)) {
1769 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
1770 new_tg3_flags = tg3_resolve_flowctrl_1000X(local_adv,
1771 remote_adv);
1772 else
1773 new_tg3_flags = tg3_resolve_flowctrl_1000T(local_adv,
1774 remote_adv);
1775 } else {
1776 new_tg3_flags = tp->link_config.flowctrl;
1779 tp->link_config.active_flowctrl = new_tg3_flags;
1781 if (new_tg3_flags & TG3_FLOW_CTRL_RX)
1782 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE;
1783 else
1784 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE;
1786 if (old_rx_mode != tp->rx_mode) {
1787 tw32_f(MAC_RX_MODE, tp->rx_mode);
1790 if (new_tg3_flags & TG3_FLOW_CTRL_TX)
1791 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE;
1792 else
1793 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE;
1795 if (old_tx_mode != tp->tx_mode) {
1796 tw32_f(MAC_TX_MODE, tp->tx_mode);
1800 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
1802 switch (val & MII_TG3_AUX_STAT_SPDMASK) {
1803 case MII_TG3_AUX_STAT_10HALF:
1804 *speed = SPEED_10;
1805 *duplex = DUPLEX_HALF;
1806 break;
1808 case MII_TG3_AUX_STAT_10FULL:
1809 *speed = SPEED_10;
1810 *duplex = DUPLEX_FULL;
1811 break;
1813 case MII_TG3_AUX_STAT_100HALF:
1814 *speed = SPEED_100;
1815 *duplex = DUPLEX_HALF;
1816 break;
1818 case MII_TG3_AUX_STAT_100FULL:
1819 *speed = SPEED_100;
1820 *duplex = DUPLEX_FULL;
1821 break;
1823 case MII_TG3_AUX_STAT_1000HALF:
1824 *speed = SPEED_1000;
1825 *duplex = DUPLEX_HALF;
1826 break;
1828 case MII_TG3_AUX_STAT_1000FULL:
1829 *speed = SPEED_1000;
1830 *duplex = DUPLEX_FULL;
1831 break;
1833 default:
1834 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
1835 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
1836 SPEED_10;
1837 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
1838 DUPLEX_HALF;
1839 break;
1841 *speed = SPEED_INVALID;
1842 *duplex = DUPLEX_INVALID;
1843 break;
1847 static void tg3_phy_copper_begin(struct tg3 *tp)
1849 u32 new_adv;
1850 int i;
1852 if (tp->link_config.phy_is_low_power) {
1853 /* Entering low power mode. Disable gigabit and
1854 * 100baseT advertisements.
1856 tg3_writephy(tp, MII_TG3_CTRL, 0);
1858 new_adv = (ADVERTISE_10HALF | ADVERTISE_10FULL |
1859 ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
1860 if (tp->tg3_flags & TG3_FLAG_WOL_SPEED_100MB)
1861 new_adv |= (ADVERTISE_100HALF | ADVERTISE_100FULL);
1863 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1864 } else if (tp->link_config.speed == SPEED_INVALID) {
1865 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
1866 tp->link_config.advertising &=
1867 ~(ADVERTISED_1000baseT_Half |
1868 ADVERTISED_1000baseT_Full);
1870 new_adv = ADVERTISE_CSMA;
1871 if (tp->link_config.advertising & ADVERTISED_10baseT_Half)
1872 new_adv |= ADVERTISE_10HALF;
1873 if (tp->link_config.advertising & ADVERTISED_10baseT_Full)
1874 new_adv |= ADVERTISE_10FULL;
1875 if (tp->link_config.advertising & ADVERTISED_100baseT_Half)
1876 new_adv |= ADVERTISE_100HALF;
1877 if (tp->link_config.advertising & ADVERTISED_100baseT_Full)
1878 new_adv |= ADVERTISE_100FULL;
1880 new_adv |= tg3_advert_flowctrl_1000T(tp->link_config.flowctrl);
1882 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1884 if (tp->link_config.advertising &
1885 (ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full)) {
1886 new_adv = 0;
1887 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half)
1888 new_adv |= MII_TG3_CTRL_ADV_1000_HALF;
1889 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full)
1890 new_adv |= MII_TG3_CTRL_ADV_1000_FULL;
1891 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY) &&
1892 (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1893 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0))
1894 new_adv |= (MII_TG3_CTRL_AS_MASTER |
1895 MII_TG3_CTRL_ENABLE_AS_MASTER);
1896 tg3_writephy(tp, MII_TG3_CTRL, new_adv);
1897 } else {
1898 tg3_writephy(tp, MII_TG3_CTRL, 0);
1900 } else {
1901 new_adv = tg3_advert_flowctrl_1000T(tp->link_config.flowctrl);
1902 new_adv |= ADVERTISE_CSMA;
1904 /* Asking for a specific link mode. */
1905 if (tp->link_config.speed == SPEED_1000) {
1906 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1908 if (tp->link_config.duplex == DUPLEX_FULL)
1909 new_adv = MII_TG3_CTRL_ADV_1000_FULL;
1910 else
1911 new_adv = MII_TG3_CTRL_ADV_1000_HALF;
1912 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
1913 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
1914 new_adv |= (MII_TG3_CTRL_AS_MASTER |
1915 MII_TG3_CTRL_ENABLE_AS_MASTER);
1916 } else {
1917 if (tp->link_config.speed == SPEED_100) {
1918 if (tp->link_config.duplex == DUPLEX_FULL)
1919 new_adv |= ADVERTISE_100FULL;
1920 else
1921 new_adv |= ADVERTISE_100HALF;
1922 } else {
1923 if (tp->link_config.duplex == DUPLEX_FULL)
1924 new_adv |= ADVERTISE_10FULL;
1925 else
1926 new_adv |= ADVERTISE_10HALF;
1928 tg3_writephy(tp, MII_ADVERTISE, new_adv);
1930 new_adv = 0;
1933 tg3_writephy(tp, MII_TG3_CTRL, new_adv);
1936 if (tp->link_config.autoneg == AUTONEG_DISABLE &&
1937 tp->link_config.speed != SPEED_INVALID) {
1938 u32 bmcr, orig_bmcr;
1940 tp->link_config.active_speed = tp->link_config.speed;
1941 tp->link_config.active_duplex = tp->link_config.duplex;
1943 bmcr = 0;
1944 switch (tp->link_config.speed) {
1945 default:
1946 case SPEED_10:
1947 break;
1949 case SPEED_100:
1950 bmcr |= BMCR_SPEED100;
1951 break;
1953 case SPEED_1000:
1954 bmcr |= TG3_BMCR_SPEED1000;
1955 break;
1958 if (tp->link_config.duplex == DUPLEX_FULL)
1959 bmcr |= BMCR_FULLDPLX;
1961 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
1962 (bmcr != orig_bmcr)) {
1963 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
1964 for (i = 0; i < 1500; i++) {
1965 u32 tmp;
1967 udelay(10);
1968 if (tg3_readphy(tp, MII_BMSR, &tmp) ||
1969 tg3_readphy(tp, MII_BMSR, &tmp))
1970 continue;
1971 if (!(tmp & BMSR_LSTATUS)) {
1972 udelay(40);
1973 break;
1976 tg3_writephy(tp, MII_BMCR, bmcr);
1977 udelay(40);
1979 } else {
1980 tg3_writephy(tp, MII_BMCR,
1981 BMCR_ANENABLE | BMCR_ANRESTART);
1985 static int tg3_init_5401phy_dsp(struct tg3 *tp)
1987 int err;
1989 /* Turn off tap power management. */
1990 /* Set Extended packet length bit */
1991 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4c20);
1993 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0012);
1994 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1804);
1996 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x0013);
1997 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x1204);
1999 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
2000 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0132);
2002 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8006);
2003 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0232);
2005 err |= tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x201f);
2006 err |= tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x0a20);
2008 udelay(40);
2010 return err;
2013 static int tg3_copper_is_advertising_all(struct tg3 *tp, u32 mask)
2015 u32 adv_reg, all_mask = 0;
2017 if (mask & ADVERTISED_10baseT_Half)
2018 all_mask |= ADVERTISE_10HALF;
2019 if (mask & ADVERTISED_10baseT_Full)
2020 all_mask |= ADVERTISE_10FULL;
2021 if (mask & ADVERTISED_100baseT_Half)
2022 all_mask |= ADVERTISE_100HALF;
2023 if (mask & ADVERTISED_100baseT_Full)
2024 all_mask |= ADVERTISE_100FULL;
2026 if (tg3_readphy(tp, MII_ADVERTISE, &adv_reg))
2027 return 0;
2029 if ((adv_reg & all_mask) != all_mask)
2030 return 0;
2031 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY)) {
2032 u32 tg3_ctrl;
2034 all_mask = 0;
2035 if (mask & ADVERTISED_1000baseT_Half)
2036 all_mask |= ADVERTISE_1000HALF;
2037 if (mask & ADVERTISED_1000baseT_Full)
2038 all_mask |= ADVERTISE_1000FULL;
2040 if (tg3_readphy(tp, MII_TG3_CTRL, &tg3_ctrl))
2041 return 0;
2043 if ((tg3_ctrl & all_mask) != all_mask)
2044 return 0;
2046 return 1;
2049 static int tg3_adv_1000T_flowctrl_ok(struct tg3 *tp, u32 *lcladv, u32 *rmtadv)
2051 u32 curadv, reqadv;
2053 if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
2054 return 1;
2056 curadv = *lcladv & (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM);
2057 reqadv = tg3_advert_flowctrl_1000T(tp->link_config.flowctrl);
2059 if (tp->link_config.active_duplex == DUPLEX_FULL) {
2060 if (curadv != reqadv)
2061 return 0;
2063 if (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG)
2064 tg3_readphy(tp, MII_LPA, rmtadv);
2065 } else {
2066 /* Reprogram the advertisement register, even if it
2067 * does not affect the current link. If the link
2068 * gets renegotiated in the future, we can save an
2069 * additional renegotiation cycle by advertising
2070 * it correctly in the first place.
2072 if (curadv != reqadv) {
2073 *lcladv &= ~(ADVERTISE_PAUSE_CAP |
2074 ADVERTISE_PAUSE_ASYM);
2075 tg3_writephy(tp, MII_ADVERTISE, *lcladv | reqadv);
2079 return 1;
2082 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
2084 int current_link_up;
2085 u32 bmsr, dummy;
2086 u32 lcl_adv, rmt_adv;
2087 u16 current_speed;
2088 u8 current_duplex;
2089 int i, err;
2091 tw32(MAC_EVENT, 0);
2093 tw32_f(MAC_STATUS,
2094 (MAC_STATUS_SYNC_CHANGED |
2095 MAC_STATUS_CFG_CHANGED |
2096 MAC_STATUS_MI_COMPLETION |
2097 MAC_STATUS_LNKSTATE_CHANGED));
2098 udelay(40);
2100 tp->mi_mode = MAC_MI_MODE_BASE;
2101 tw32_f(MAC_MI_MODE, tp->mi_mode);
2102 udelay(80);
2104 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x02);
2106 /* Some third-party PHYs need to be reset on link going
2107 * down.
2109 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
2110 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
2111 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
2112 netif_carrier_ok(tp->dev)) {
2113 tg3_readphy(tp, MII_BMSR, &bmsr);
2114 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
2115 !(bmsr & BMSR_LSTATUS))
2116 force_reset = 1;
2118 if (force_reset)
2119 tg3_phy_reset(tp);
2121 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
2122 tg3_readphy(tp, MII_BMSR, &bmsr);
2123 if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
2124 !(tp->tg3_flags & TG3_FLAG_INIT_COMPLETE))
2125 bmsr = 0;
2127 if (!(bmsr & BMSR_LSTATUS)) {
2128 err = tg3_init_5401phy_dsp(tp);
2129 if (err)
2130 return err;
2132 tg3_readphy(tp, MII_BMSR, &bmsr);
2133 for (i = 0; i < 1000; i++) {
2134 udelay(10);
2135 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
2136 (bmsr & BMSR_LSTATUS)) {
2137 udelay(40);
2138 break;
2142 if ((tp->phy_id & PHY_ID_REV_MASK) == PHY_REV_BCM5401_B0 &&
2143 !(bmsr & BMSR_LSTATUS) &&
2144 tp->link_config.active_speed == SPEED_1000) {
2145 err = tg3_phy_reset(tp);
2146 if (!err)
2147 err = tg3_init_5401phy_dsp(tp);
2148 if (err)
2149 return err;
2152 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
2153 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) {
2154 /* 5701 {A0,B0} CRC bug workaround */
2155 tg3_writephy(tp, 0x15, 0x0a75);
2156 tg3_writephy(tp, 0x1c, 0x8c68);
2157 tg3_writephy(tp, 0x1c, 0x8d68);
2158 tg3_writephy(tp, 0x1c, 0x8c68);
2161 /* Clear pending interrupts... */
2162 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
2163 tg3_readphy(tp, MII_TG3_ISTAT, &dummy);
2165 if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT)
2166 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
2167 else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)
2168 tg3_writephy(tp, MII_TG3_IMASK, ~0);
2170 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
2171 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
2172 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
2173 tg3_writephy(tp, MII_TG3_EXT_CTRL,
2174 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
2175 else
2176 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
2179 current_link_up = 0;
2180 current_speed = SPEED_INVALID;
2181 current_duplex = DUPLEX_INVALID;
2183 if (tp->tg3_flags2 & TG3_FLG2_CAPACITIVE_COUPLING) {
2184 u32 val;
2186 tg3_writephy(tp, MII_TG3_AUX_CTRL, 0x4007);
2187 tg3_readphy(tp, MII_TG3_AUX_CTRL, &val);
2188 if (!(val & (1 << 10))) {
2189 val |= (1 << 10);
2190 tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
2191 goto relink;
2195 bmsr = 0;
2196 for (i = 0; i < 100; i++) {
2197 tg3_readphy(tp, MII_BMSR, &bmsr);
2198 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
2199 (bmsr & BMSR_LSTATUS))
2200 break;
2201 udelay(40);
2204 if (bmsr & BMSR_LSTATUS) {
2205 u32 aux_stat, bmcr;
2207 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
2208 for (i = 0; i < 2000; i++) {
2209 udelay(10);
2210 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
2211 aux_stat)
2212 break;
2215 tg3_aux_stat_to_speed_duplex(tp, aux_stat,
2216 &current_speed,
2217 &current_duplex);
2219 bmcr = 0;
2220 for (i = 0; i < 200; i++) {
2221 tg3_readphy(tp, MII_BMCR, &bmcr);
2222 if (tg3_readphy(tp, MII_BMCR, &bmcr))
2223 continue;
2224 if (bmcr && bmcr != 0x7fff)
2225 break;
2226 udelay(10);
2229 lcl_adv = 0;
2230 rmt_adv = 0;
2232 tp->link_config.active_speed = current_speed;
2233 tp->link_config.active_duplex = current_duplex;
2235 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2236 if ((bmcr & BMCR_ANENABLE) &&
2237 tg3_copper_is_advertising_all(tp,
2238 tp->link_config.advertising)) {
2239 if (tg3_adv_1000T_flowctrl_ok(tp, &lcl_adv,
2240 &rmt_adv))
2241 current_link_up = 1;
2243 } else {
2244 if (!(bmcr & BMCR_ANENABLE) &&
2245 tp->link_config.speed == current_speed &&
2246 tp->link_config.duplex == current_duplex &&
2247 tp->link_config.flowctrl ==
2248 tp->link_config.active_flowctrl) {
2249 current_link_up = 1;
2253 if (current_link_up == 1 &&
2254 tp->link_config.active_duplex == DUPLEX_FULL)
2255 tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
2258 relink:
2259 if (current_link_up == 0 || tp->link_config.phy_is_low_power) {
2260 u32 tmp;
2262 tg3_phy_copper_begin(tp);
2264 tg3_readphy(tp, MII_BMSR, &tmp);
2265 if (!tg3_readphy(tp, MII_BMSR, &tmp) &&
2266 (tmp & BMSR_LSTATUS))
2267 current_link_up = 1;
2270 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK;
2271 if (current_link_up == 1) {
2272 if (tp->link_config.active_speed == SPEED_100 ||
2273 tp->link_config.active_speed == SPEED_10)
2274 tp->mac_mode |= MAC_MODE_PORT_MODE_MII;
2275 else
2276 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
2277 } else
2278 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
2280 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
2281 if (tp->link_config.active_duplex == DUPLEX_HALF)
2282 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
2284 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
2285 if (current_link_up == 1 &&
2286 tg3_5700_link_polarity(tp, tp->link_config.active_speed))
2287 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
2288 else
2289 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY;
2292 /* ??? Without this setting Netgear GA302T PHY does not
2293 * ??? send/receive packets...
2295 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5411 &&
2296 tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) {
2297 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL;
2298 tw32_f(MAC_MI_MODE, tp->mi_mode);
2299 udelay(80);
2302 tw32_f(MAC_MODE, tp->mac_mode);
2303 udelay(40);
2305 if (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) {
2306 /* Polled via timer. */
2307 tw32_f(MAC_EVENT, 0);
2308 } else {
2309 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2311 udelay(40);
2313 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 &&
2314 current_link_up == 1 &&
2315 tp->link_config.active_speed == SPEED_1000 &&
2316 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ||
2317 (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED))) {
2318 udelay(120);
2319 tw32_f(MAC_STATUS,
2320 (MAC_STATUS_SYNC_CHANGED |
2321 MAC_STATUS_CFG_CHANGED));
2322 udelay(40);
2323 tg3_write_mem(tp,
2324 NIC_SRAM_FIRMWARE_MBOX,
2325 NIC_SRAM_FIRMWARE_MBOX_MAGIC2);
2328 if (current_link_up != netif_carrier_ok(tp->dev)) {
2329 if (current_link_up)
2330 netif_carrier_on(tp->dev);
2331 else
2332 netif_carrier_off(tp->dev);
2333 tg3_link_report(tp);
2336 return 0;
2339 struct tg3_fiber_aneginfo {
2340 int state;
2341 #define ANEG_STATE_UNKNOWN 0
2342 #define ANEG_STATE_AN_ENABLE 1
2343 #define ANEG_STATE_RESTART_INIT 2
2344 #define ANEG_STATE_RESTART 3
2345 #define ANEG_STATE_DISABLE_LINK_OK 4
2346 #define ANEG_STATE_ABILITY_DETECT_INIT 5
2347 #define ANEG_STATE_ABILITY_DETECT 6
2348 #define ANEG_STATE_ACK_DETECT_INIT 7
2349 #define ANEG_STATE_ACK_DETECT 8
2350 #define ANEG_STATE_COMPLETE_ACK_INIT 9
2351 #define ANEG_STATE_COMPLETE_ACK 10
2352 #define ANEG_STATE_IDLE_DETECT_INIT 11
2353 #define ANEG_STATE_IDLE_DETECT 12
2354 #define ANEG_STATE_LINK_OK 13
2355 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14
2356 #define ANEG_STATE_NEXT_PAGE_WAIT 15
2358 u32 flags;
2359 #define MR_AN_ENABLE 0x00000001
2360 #define MR_RESTART_AN 0x00000002
2361 #define MR_AN_COMPLETE 0x00000004
2362 #define MR_PAGE_RX 0x00000008
2363 #define MR_NP_LOADED 0x00000010
2364 #define MR_TOGGLE_TX 0x00000020
2365 #define MR_LP_ADV_FULL_DUPLEX 0x00000040
2366 #define MR_LP_ADV_HALF_DUPLEX 0x00000080
2367 #define MR_LP_ADV_SYM_PAUSE 0x00000100
2368 #define MR_LP_ADV_ASYM_PAUSE 0x00000200
2369 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400
2370 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800
2371 #define MR_LP_ADV_NEXT_PAGE 0x00001000
2372 #define MR_TOGGLE_RX 0x00002000
2373 #define MR_NP_RX 0x00004000
2375 #define MR_LINK_OK 0x80000000
2377 unsigned long link_time, cur_time;
2379 u32 ability_match_cfg;
2380 int ability_match_count;
2382 char ability_match, idle_match, ack_match;
2384 u32 txconfig, rxconfig;
2385 #define ANEG_CFG_NP 0x00000080
2386 #define ANEG_CFG_ACK 0x00000040
2387 #define ANEG_CFG_RF2 0x00000020
2388 #define ANEG_CFG_RF1 0x00000010
2389 #define ANEG_CFG_PS2 0x00000001
2390 #define ANEG_CFG_PS1 0x00008000
2391 #define ANEG_CFG_HD 0x00004000
2392 #define ANEG_CFG_FD 0x00002000
2393 #define ANEG_CFG_INVAL 0x00001f06
2396 #define ANEG_OK 0
2397 #define ANEG_DONE 1
2398 #define ANEG_TIMER_ENAB 2
2399 #define ANEG_FAILED -1
2401 #define ANEG_STATE_SETTLE_TIME 10000
2403 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
2404 struct tg3_fiber_aneginfo *ap)
2406 u16 flowctrl;
2407 unsigned long delta;
2408 u32 rx_cfg_reg;
2409 int ret;
2411 if (ap->state == ANEG_STATE_UNKNOWN) {
2412 ap->rxconfig = 0;
2413 ap->link_time = 0;
2414 ap->cur_time = 0;
2415 ap->ability_match_cfg = 0;
2416 ap->ability_match_count = 0;
2417 ap->ability_match = 0;
2418 ap->idle_match = 0;
2419 ap->ack_match = 0;
2421 ap->cur_time++;
2423 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) {
2424 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
2426 if (rx_cfg_reg != ap->ability_match_cfg) {
2427 ap->ability_match_cfg = rx_cfg_reg;
2428 ap->ability_match = 0;
2429 ap->ability_match_count = 0;
2430 } else {
2431 if (++ap->ability_match_count > 1) {
2432 ap->ability_match = 1;
2433 ap->ability_match_cfg = rx_cfg_reg;
2436 if (rx_cfg_reg & ANEG_CFG_ACK)
2437 ap->ack_match = 1;
2438 else
2439 ap->ack_match = 0;
2441 ap->idle_match = 0;
2442 } else {
2443 ap->idle_match = 1;
2444 ap->ability_match_cfg = 0;
2445 ap->ability_match_count = 0;
2446 ap->ability_match = 0;
2447 ap->ack_match = 0;
2449 rx_cfg_reg = 0;
2452 ap->rxconfig = rx_cfg_reg;
2453 ret = ANEG_OK;
2455 switch(ap->state) {
2456 case ANEG_STATE_UNKNOWN:
2457 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
2458 ap->state = ANEG_STATE_AN_ENABLE;
2460 /* fallthru */
2461 case ANEG_STATE_AN_ENABLE:
2462 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
2463 if (ap->flags & MR_AN_ENABLE) {
2464 ap->link_time = 0;
2465 ap->cur_time = 0;
2466 ap->ability_match_cfg = 0;
2467 ap->ability_match_count = 0;
2468 ap->ability_match = 0;
2469 ap->idle_match = 0;
2470 ap->ack_match = 0;
2472 ap->state = ANEG_STATE_RESTART_INIT;
2473 } else {
2474 ap->state = ANEG_STATE_DISABLE_LINK_OK;
2476 break;
2478 case ANEG_STATE_RESTART_INIT:
2479 ap->link_time = ap->cur_time;
2480 ap->flags &= ~(MR_NP_LOADED);
2481 ap->txconfig = 0;
2482 tw32(MAC_TX_AUTO_NEG, 0);
2483 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2484 tw32_f(MAC_MODE, tp->mac_mode);
2485 udelay(40);
2487 ret = ANEG_TIMER_ENAB;
2488 ap->state = ANEG_STATE_RESTART;
2490 /* fallthru */
2491 case ANEG_STATE_RESTART:
2492 delta = ap->cur_time - ap->link_time;
2493 if (delta > ANEG_STATE_SETTLE_TIME) {
2494 ap->state = ANEG_STATE_ABILITY_DETECT_INIT;
2495 } else {
2496 ret = ANEG_TIMER_ENAB;
2498 break;
2500 case ANEG_STATE_DISABLE_LINK_OK:
2501 ret = ANEG_DONE;
2502 break;
2504 case ANEG_STATE_ABILITY_DETECT_INIT:
2505 ap->flags &= ~(MR_TOGGLE_TX);
2506 ap->txconfig = ANEG_CFG_FD;
2507 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
2508 if (flowctrl & ADVERTISE_1000XPAUSE)
2509 ap->txconfig |= ANEG_CFG_PS1;
2510 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
2511 ap->txconfig |= ANEG_CFG_PS2;
2512 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
2513 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2514 tw32_f(MAC_MODE, tp->mac_mode);
2515 udelay(40);
2517 ap->state = ANEG_STATE_ABILITY_DETECT;
2518 break;
2520 case ANEG_STATE_ABILITY_DETECT:
2521 if (ap->ability_match != 0 && ap->rxconfig != 0) {
2522 ap->state = ANEG_STATE_ACK_DETECT_INIT;
2524 break;
2526 case ANEG_STATE_ACK_DETECT_INIT:
2527 ap->txconfig |= ANEG_CFG_ACK;
2528 tw32(MAC_TX_AUTO_NEG, ap->txconfig);
2529 tp->mac_mode |= MAC_MODE_SEND_CONFIGS;
2530 tw32_f(MAC_MODE, tp->mac_mode);
2531 udelay(40);
2533 ap->state = ANEG_STATE_ACK_DETECT;
2535 /* fallthru */
2536 case ANEG_STATE_ACK_DETECT:
2537 if (ap->ack_match != 0) {
2538 if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
2539 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
2540 ap->state = ANEG_STATE_COMPLETE_ACK_INIT;
2541 } else {
2542 ap->state = ANEG_STATE_AN_ENABLE;
2544 } else if (ap->ability_match != 0 &&
2545 ap->rxconfig == 0) {
2546 ap->state = ANEG_STATE_AN_ENABLE;
2548 break;
2550 case ANEG_STATE_COMPLETE_ACK_INIT:
2551 if (ap->rxconfig & ANEG_CFG_INVAL) {
2552 ret = ANEG_FAILED;
2553 break;
2555 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
2556 MR_LP_ADV_HALF_DUPLEX |
2557 MR_LP_ADV_SYM_PAUSE |
2558 MR_LP_ADV_ASYM_PAUSE |
2559 MR_LP_ADV_REMOTE_FAULT1 |
2560 MR_LP_ADV_REMOTE_FAULT2 |
2561 MR_LP_ADV_NEXT_PAGE |
2562 MR_TOGGLE_RX |
2563 MR_NP_RX);
2564 if (ap->rxconfig & ANEG_CFG_FD)
2565 ap->flags |= MR_LP_ADV_FULL_DUPLEX;
2566 if (ap->rxconfig & ANEG_CFG_HD)
2567 ap->flags |= MR_LP_ADV_HALF_DUPLEX;
2568 if (ap->rxconfig & ANEG_CFG_PS1)
2569 ap->flags |= MR_LP_ADV_SYM_PAUSE;
2570 if (ap->rxconfig & ANEG_CFG_PS2)
2571 ap->flags |= MR_LP_ADV_ASYM_PAUSE;
2572 if (ap->rxconfig & ANEG_CFG_RF1)
2573 ap->flags |= MR_LP_ADV_REMOTE_FAULT1;
2574 if (ap->rxconfig & ANEG_CFG_RF2)
2575 ap->flags |= MR_LP_ADV_REMOTE_FAULT2;
2576 if (ap->rxconfig & ANEG_CFG_NP)
2577 ap->flags |= MR_LP_ADV_NEXT_PAGE;
2579 ap->link_time = ap->cur_time;
2581 ap->flags ^= (MR_TOGGLE_TX);
2582 if (ap->rxconfig & 0x0008)
2583 ap->flags |= MR_TOGGLE_RX;
2584 if (ap->rxconfig & ANEG_CFG_NP)
2585 ap->flags |= MR_NP_RX;
2586 ap->flags |= MR_PAGE_RX;
2588 ap->state = ANEG_STATE_COMPLETE_ACK;
2589 ret = ANEG_TIMER_ENAB;
2590 break;
2592 case ANEG_STATE_COMPLETE_ACK:
2593 if (ap->ability_match != 0 &&
2594 ap->rxconfig == 0) {
2595 ap->state = ANEG_STATE_AN_ENABLE;
2596 break;
2598 delta = ap->cur_time - ap->link_time;
2599 if (delta > ANEG_STATE_SETTLE_TIME) {
2600 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
2601 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
2602 } else {
2603 if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
2604 !(ap->flags & MR_NP_RX)) {
2605 ap->state = ANEG_STATE_IDLE_DETECT_INIT;
2606 } else {
2607 ret = ANEG_FAILED;
2611 break;
2613 case ANEG_STATE_IDLE_DETECT_INIT:
2614 ap->link_time = ap->cur_time;
2615 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
2616 tw32_f(MAC_MODE, tp->mac_mode);
2617 udelay(40);
2619 ap->state = ANEG_STATE_IDLE_DETECT;
2620 ret = ANEG_TIMER_ENAB;
2621 break;
2623 case ANEG_STATE_IDLE_DETECT:
2624 if (ap->ability_match != 0 &&
2625 ap->rxconfig == 0) {
2626 ap->state = ANEG_STATE_AN_ENABLE;
2627 break;
2629 delta = ap->cur_time - ap->link_time;
2630 if (delta > ANEG_STATE_SETTLE_TIME) {
2631 /* XXX another gem from the Broadcom driver :( */
2632 ap->state = ANEG_STATE_LINK_OK;
2634 break;
2636 case ANEG_STATE_LINK_OK:
2637 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
2638 ret = ANEG_DONE;
2639 break;
2641 case ANEG_STATE_NEXT_PAGE_WAIT_INIT:
2642 /* ??? unimplemented */
2643 break;
2645 case ANEG_STATE_NEXT_PAGE_WAIT:
2646 /* ??? unimplemented */
2647 break;
2649 default:
2650 ret = ANEG_FAILED;
2651 break;
2654 return ret;
2657 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
2659 int res = 0;
2660 struct tg3_fiber_aneginfo aninfo;
2661 int status = ANEG_FAILED;
2662 unsigned int tick;
2663 u32 tmp;
2665 tw32_f(MAC_TX_AUTO_NEG, 0);
2667 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
2668 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII);
2669 udelay(40);
2671 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS);
2672 udelay(40);
2674 memset(&aninfo, 0, sizeof(aninfo));
2675 aninfo.flags |= MR_AN_ENABLE;
2676 aninfo.state = ANEG_STATE_UNKNOWN;
2677 aninfo.cur_time = 0;
2678 tick = 0;
2679 while (++tick < 195000) {
2680 status = tg3_fiber_aneg_smachine(tp, &aninfo);
2681 if (status == ANEG_DONE || status == ANEG_FAILED)
2682 break;
2684 udelay(1);
2687 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS;
2688 tw32_f(MAC_MODE, tp->mac_mode);
2689 udelay(40);
2691 *txflags = aninfo.txconfig;
2692 *rxflags = aninfo.flags;
2694 if (status == ANEG_DONE &&
2695 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
2696 MR_LP_ADV_FULL_DUPLEX)))
2697 res = 1;
2699 return res;
2702 static void tg3_init_bcm8002(struct tg3 *tp)
2704 u32 mac_status = tr32(MAC_STATUS);
2705 int i;
2707 /* Reset when initting first time or we have a link. */
2708 if ((tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) &&
2709 !(mac_status & MAC_STATUS_PCS_SYNCED))
2710 return;
2712 /* Set PLL lock range. */
2713 tg3_writephy(tp, 0x16, 0x8007);
2715 /* SW reset */
2716 tg3_writephy(tp, MII_BMCR, BMCR_RESET);
2718 /* Wait for reset to complete. */
2719 /* XXX schedule_timeout() ... */
2720 for (i = 0; i < 500; i++)
2721 udelay(10);
2723 /* Config mode; select PMA/Ch 1 regs. */
2724 tg3_writephy(tp, 0x10, 0x8411);
2726 /* Enable auto-lock and comdet, select txclk for tx. */
2727 tg3_writephy(tp, 0x11, 0x0a10);
2729 tg3_writephy(tp, 0x18, 0x00a0);
2730 tg3_writephy(tp, 0x16, 0x41ff);
2732 /* Assert and deassert POR. */
2733 tg3_writephy(tp, 0x13, 0x0400);
2734 udelay(40);
2735 tg3_writephy(tp, 0x13, 0x0000);
2737 tg3_writephy(tp, 0x11, 0x0a50);
2738 udelay(40);
2739 tg3_writephy(tp, 0x11, 0x0a10);
2741 /* Wait for signal to stabilize */
2742 /* XXX schedule_timeout() ... */
2743 for (i = 0; i < 15000; i++)
2744 udelay(10);
2746 /* Deselect the channel register so we can read the PHYID
2747 * later.
2749 tg3_writephy(tp, 0x10, 0x8011);
2752 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
2754 u16 flowctrl;
2755 u32 sg_dig_ctrl, sg_dig_status;
2756 u32 serdes_cfg, expected_sg_dig_ctrl;
2757 int workaround, port_a;
2758 int current_link_up;
2760 serdes_cfg = 0;
2761 expected_sg_dig_ctrl = 0;
2762 workaround = 0;
2763 port_a = 1;
2764 current_link_up = 0;
2766 if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
2767 tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) {
2768 workaround = 1;
2769 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
2770 port_a = 0;
2772 /* preserve bits 0-11,13,14 for signal pre-emphasis */
2773 /* preserve bits 20-23 for voltage regulator */
2774 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
2777 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2779 if (tp->link_config.autoneg != AUTONEG_ENABLE) {
2780 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
2781 if (workaround) {
2782 u32 val = serdes_cfg;
2784 if (port_a)
2785 val |= 0xc010000;
2786 else
2787 val |= 0x4010000;
2788 tw32_f(MAC_SERDES_CFG, val);
2791 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
2793 if (mac_status & MAC_STATUS_PCS_SYNCED) {
2794 tg3_setup_flow_control(tp, 0, 0);
2795 current_link_up = 1;
2797 goto out;
2800 /* Want auto-negotiation. */
2801 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
2803 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
2804 if (flowctrl & ADVERTISE_1000XPAUSE)
2805 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
2806 if (flowctrl & ADVERTISE_1000XPSE_ASYM)
2807 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
2809 if (sg_dig_ctrl != expected_sg_dig_ctrl) {
2810 if ((tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT) &&
2811 tp->serdes_counter &&
2812 ((mac_status & (MAC_STATUS_PCS_SYNCED |
2813 MAC_STATUS_RCVD_CFG)) ==
2814 MAC_STATUS_PCS_SYNCED)) {
2815 tp->serdes_counter--;
2816 current_link_up = 1;
2817 goto out;
2819 restart_autoneg:
2820 if (workaround)
2821 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
2822 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
2823 udelay(5);
2824 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
2826 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
2827 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2828 } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
2829 MAC_STATUS_SIGNAL_DET)) {
2830 sg_dig_status = tr32(SG_DIG_STATUS);
2831 mac_status = tr32(MAC_STATUS);
2833 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
2834 (mac_status & MAC_STATUS_PCS_SYNCED)) {
2835 u32 local_adv = 0, remote_adv = 0;
2837 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
2838 local_adv |= ADVERTISE_1000XPAUSE;
2839 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
2840 local_adv |= ADVERTISE_1000XPSE_ASYM;
2842 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
2843 remote_adv |= LPA_1000XPAUSE;
2844 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
2845 remote_adv |= LPA_1000XPAUSE_ASYM;
2847 tg3_setup_flow_control(tp, local_adv, remote_adv);
2848 current_link_up = 1;
2849 tp->serdes_counter = 0;
2850 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2851 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
2852 if (tp->serdes_counter)
2853 tp->serdes_counter--;
2854 else {
2855 if (workaround) {
2856 u32 val = serdes_cfg;
2858 if (port_a)
2859 val |= 0xc010000;
2860 else
2861 val |= 0x4010000;
2863 tw32_f(MAC_SERDES_CFG, val);
2866 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP);
2867 udelay(40);
2869 /* Link parallel detection - link is up */
2870 /* only if we have PCS_SYNC and not */
2871 /* receiving config code words */
2872 mac_status = tr32(MAC_STATUS);
2873 if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
2874 !(mac_status & MAC_STATUS_RCVD_CFG)) {
2875 tg3_setup_flow_control(tp, 0, 0);
2876 current_link_up = 1;
2877 tp->tg3_flags2 |=
2878 TG3_FLG2_PARALLEL_DETECT;
2879 tp->serdes_counter =
2880 SERDES_PARALLEL_DET_TIMEOUT;
2881 } else
2882 goto restart_autoneg;
2885 } else {
2886 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S;
2887 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
2890 out:
2891 return current_link_up;
2894 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
2896 int current_link_up = 0;
2898 if (!(mac_status & MAC_STATUS_PCS_SYNCED))
2899 goto out;
2901 if (tp->link_config.autoneg == AUTONEG_ENABLE) {
2902 u32 txflags, rxflags;
2903 int i;
2905 if (fiber_autoneg(tp, &txflags, &rxflags)) {
2906 u32 local_adv = 0, remote_adv = 0;
2908 if (txflags & ANEG_CFG_PS1)
2909 local_adv |= ADVERTISE_1000XPAUSE;
2910 if (txflags & ANEG_CFG_PS2)
2911 local_adv |= ADVERTISE_1000XPSE_ASYM;
2913 if (rxflags & MR_LP_ADV_SYM_PAUSE)
2914 remote_adv |= LPA_1000XPAUSE;
2915 if (rxflags & MR_LP_ADV_ASYM_PAUSE)
2916 remote_adv |= LPA_1000XPAUSE_ASYM;
2918 tg3_setup_flow_control(tp, local_adv, remote_adv);
2920 current_link_up = 1;
2922 for (i = 0; i < 30; i++) {
2923 udelay(20);
2924 tw32_f(MAC_STATUS,
2925 (MAC_STATUS_SYNC_CHANGED |
2926 MAC_STATUS_CFG_CHANGED));
2927 udelay(40);
2928 if ((tr32(MAC_STATUS) &
2929 (MAC_STATUS_SYNC_CHANGED |
2930 MAC_STATUS_CFG_CHANGED)) == 0)
2931 break;
2934 mac_status = tr32(MAC_STATUS);
2935 if (current_link_up == 0 &&
2936 (mac_status & MAC_STATUS_PCS_SYNCED) &&
2937 !(mac_status & MAC_STATUS_RCVD_CFG))
2938 current_link_up = 1;
2939 } else {
2940 tg3_setup_flow_control(tp, 0, 0);
2942 /* Forcing 1000FD link up. */
2943 current_link_up = 1;
2945 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS));
2946 udelay(40);
2948 tw32_f(MAC_MODE, tp->mac_mode);
2949 udelay(40);
2952 out:
2953 return current_link_up;
2956 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
2958 u32 orig_pause_cfg;
2959 u16 orig_active_speed;
2960 u8 orig_active_duplex;
2961 u32 mac_status;
2962 int current_link_up;
2963 int i;
2965 orig_pause_cfg = tp->link_config.active_flowctrl;
2966 orig_active_speed = tp->link_config.active_speed;
2967 orig_active_duplex = tp->link_config.active_duplex;
2969 if (!(tp->tg3_flags2 & TG3_FLG2_HW_AUTONEG) &&
2970 netif_carrier_ok(tp->dev) &&
2971 (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE)) {
2972 mac_status = tr32(MAC_STATUS);
2973 mac_status &= (MAC_STATUS_PCS_SYNCED |
2974 MAC_STATUS_SIGNAL_DET |
2975 MAC_STATUS_CFG_CHANGED |
2976 MAC_STATUS_RCVD_CFG);
2977 if (mac_status == (MAC_STATUS_PCS_SYNCED |
2978 MAC_STATUS_SIGNAL_DET)) {
2979 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
2980 MAC_STATUS_CFG_CHANGED));
2981 return 0;
2985 tw32_f(MAC_TX_AUTO_NEG, 0);
2987 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX);
2988 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI;
2989 tw32_f(MAC_MODE, tp->mac_mode);
2990 udelay(40);
2992 if (tp->phy_id == PHY_ID_BCM8002)
2993 tg3_init_bcm8002(tp);
2995 /* Enable link change event even when serdes polling. */
2996 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
2997 udelay(40);
2999 current_link_up = 0;
3000 mac_status = tr32(MAC_STATUS);
3002 if (tp->tg3_flags2 & TG3_FLG2_HW_AUTONEG)
3003 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
3004 else
3005 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
3007 tp->hw_status->status =
3008 (SD_STATUS_UPDATED |
3009 (tp->hw_status->status & ~SD_STATUS_LINK_CHG));
3011 for (i = 0; i < 100; i++) {
3012 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED |
3013 MAC_STATUS_CFG_CHANGED));
3014 udelay(5);
3015 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED |
3016 MAC_STATUS_CFG_CHANGED |
3017 MAC_STATUS_LNKSTATE_CHANGED)) == 0)
3018 break;
3021 mac_status = tr32(MAC_STATUS);
3022 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
3023 current_link_up = 0;
3024 if (tp->link_config.autoneg == AUTONEG_ENABLE &&
3025 tp->serdes_counter == 0) {
3026 tw32_f(MAC_MODE, (tp->mac_mode |
3027 MAC_MODE_SEND_CONFIGS));
3028 udelay(1);
3029 tw32_f(MAC_MODE, tp->mac_mode);
3033 if (current_link_up == 1) {
3034 tp->link_config.active_speed = SPEED_1000;
3035 tp->link_config.active_duplex = DUPLEX_FULL;
3036 tw32(MAC_LED_CTRL, (tp->led_ctrl |
3037 LED_CTRL_LNKLED_OVERRIDE |
3038 LED_CTRL_1000MBPS_ON));
3039 } else {
3040 tp->link_config.active_speed = SPEED_INVALID;
3041 tp->link_config.active_duplex = DUPLEX_INVALID;
3042 tw32(MAC_LED_CTRL, (tp->led_ctrl |
3043 LED_CTRL_LNKLED_OVERRIDE |
3044 LED_CTRL_TRAFFIC_OVERRIDE));
3047 if (current_link_up != netif_carrier_ok(tp->dev)) {
3048 if (current_link_up)
3049 netif_carrier_on(tp->dev);
3050 else
3051 netif_carrier_off(tp->dev);
3052 tg3_link_report(tp);
3053 } else {
3054 u32 now_pause_cfg = tp->link_config.active_flowctrl;
3055 if (orig_pause_cfg != now_pause_cfg ||
3056 orig_active_speed != tp->link_config.active_speed ||
3057 orig_active_duplex != tp->link_config.active_duplex)
3058 tg3_link_report(tp);
3061 return 0;
3064 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
3066 int current_link_up, err = 0;
3067 u32 bmsr, bmcr;
3068 u16 current_speed;
3069 u8 current_duplex;
3070 u32 local_adv, remote_adv;
3072 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII;
3073 tw32_f(MAC_MODE, tp->mac_mode);
3074 udelay(40);
3076 tw32(MAC_EVENT, 0);
3078 tw32_f(MAC_STATUS,
3079 (MAC_STATUS_SYNC_CHANGED |
3080 MAC_STATUS_CFG_CHANGED |
3081 MAC_STATUS_MI_COMPLETION |
3082 MAC_STATUS_LNKSTATE_CHANGED));
3083 udelay(40);
3085 if (force_reset)
3086 tg3_phy_reset(tp);
3088 current_link_up = 0;
3089 current_speed = SPEED_INVALID;
3090 current_duplex = DUPLEX_INVALID;
3092 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
3093 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
3094 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
3095 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
3096 bmsr |= BMSR_LSTATUS;
3097 else
3098 bmsr &= ~BMSR_LSTATUS;
3101 err |= tg3_readphy(tp, MII_BMCR, &bmcr);
3103 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
3104 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT) &&
3105 tp->link_config.flowctrl == tp->link_config.active_flowctrl) {
3106 /* do nothing, just check for link up at the end */
3107 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
3108 u32 adv, new_adv;
3110 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
3111 new_adv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
3112 ADVERTISE_1000XPAUSE |
3113 ADVERTISE_1000XPSE_ASYM |
3114 ADVERTISE_SLCT);
3116 new_adv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
3118 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half)
3119 new_adv |= ADVERTISE_1000XHALF;
3120 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full)
3121 new_adv |= ADVERTISE_1000XFULL;
3123 if ((new_adv != adv) || !(bmcr & BMCR_ANENABLE)) {
3124 tg3_writephy(tp, MII_ADVERTISE, new_adv);
3125 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
3126 tg3_writephy(tp, MII_BMCR, bmcr);
3128 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
3129 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S;
3130 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
3132 return err;
3134 } else {
3135 u32 new_bmcr;
3137 bmcr &= ~BMCR_SPEED1000;
3138 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
3140 if (tp->link_config.duplex == DUPLEX_FULL)
3141 new_bmcr |= BMCR_FULLDPLX;
3143 if (new_bmcr != bmcr) {
3144 /* BMCR_SPEED1000 is a reserved bit that needs
3145 * to be set on write.
3147 new_bmcr |= BMCR_SPEED1000;
3149 /* Force a linkdown */
3150 if (netif_carrier_ok(tp->dev)) {
3151 u32 adv;
3153 err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
3154 adv &= ~(ADVERTISE_1000XFULL |
3155 ADVERTISE_1000XHALF |
3156 ADVERTISE_SLCT);
3157 tg3_writephy(tp, MII_ADVERTISE, adv);
3158 tg3_writephy(tp, MII_BMCR, bmcr |
3159 BMCR_ANRESTART |
3160 BMCR_ANENABLE);
3161 udelay(10);
3162 netif_carrier_off(tp->dev);
3164 tg3_writephy(tp, MII_BMCR, new_bmcr);
3165 bmcr = new_bmcr;
3166 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
3167 err |= tg3_readphy(tp, MII_BMSR, &bmsr);
3168 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
3169 ASIC_REV_5714) {
3170 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP)
3171 bmsr |= BMSR_LSTATUS;
3172 else
3173 bmsr &= ~BMSR_LSTATUS;
3175 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
3179 if (bmsr & BMSR_LSTATUS) {
3180 current_speed = SPEED_1000;
3181 current_link_up = 1;
3182 if (bmcr & BMCR_FULLDPLX)
3183 current_duplex = DUPLEX_FULL;
3184 else
3185 current_duplex = DUPLEX_HALF;
3187 local_adv = 0;
3188 remote_adv = 0;
3190 if (bmcr & BMCR_ANENABLE) {
3191 u32 common;
3193 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
3194 err |= tg3_readphy(tp, MII_LPA, &remote_adv);
3195 common = local_adv & remote_adv;
3196 if (common & (ADVERTISE_1000XHALF |
3197 ADVERTISE_1000XFULL)) {
3198 if (common & ADVERTISE_1000XFULL)
3199 current_duplex = DUPLEX_FULL;
3200 else
3201 current_duplex = DUPLEX_HALF;
3203 else
3204 current_link_up = 0;
3208 if (current_link_up == 1 && current_duplex == DUPLEX_FULL)
3209 tg3_setup_flow_control(tp, local_adv, remote_adv);
3211 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX;
3212 if (tp->link_config.active_duplex == DUPLEX_HALF)
3213 tp->mac_mode |= MAC_MODE_HALF_DUPLEX;
3215 tw32_f(MAC_MODE, tp->mac_mode);
3216 udelay(40);
3218 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED);
3220 tp->link_config.active_speed = current_speed;
3221 tp->link_config.active_duplex = current_duplex;
3223 if (current_link_up != netif_carrier_ok(tp->dev)) {
3224 if (current_link_up)
3225 netif_carrier_on(tp->dev);
3226 else {
3227 netif_carrier_off(tp->dev);
3228 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
3230 tg3_link_report(tp);
3232 return err;
3235 static void tg3_serdes_parallel_detect(struct tg3 *tp)
3237 if (tp->serdes_counter) {
3238 /* Give autoneg time to complete. */
3239 tp->serdes_counter--;
3240 return;
3242 if (!netif_carrier_ok(tp->dev) &&
3243 (tp->link_config.autoneg == AUTONEG_ENABLE)) {
3244 u32 bmcr;
3246 tg3_readphy(tp, MII_BMCR, &bmcr);
3247 if (bmcr & BMCR_ANENABLE) {
3248 u32 phy1, phy2;
3250 /* Select shadow register 0x1f */
3251 tg3_writephy(tp, 0x1c, 0x7c00);
3252 tg3_readphy(tp, 0x1c, &phy1);
3254 /* Select expansion interrupt status register */
3255 tg3_writephy(tp, 0x17, 0x0f01);
3256 tg3_readphy(tp, 0x15, &phy2);
3257 tg3_readphy(tp, 0x15, &phy2);
3259 if ((phy1 & 0x10) && !(phy2 & 0x20)) {
3260 /* We have signal detect and not receiving
3261 * config code words, link is up by parallel
3262 * detection.
3265 bmcr &= ~BMCR_ANENABLE;
3266 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
3267 tg3_writephy(tp, MII_BMCR, bmcr);
3268 tp->tg3_flags2 |= TG3_FLG2_PARALLEL_DETECT;
3272 else if (netif_carrier_ok(tp->dev) &&
3273 (tp->link_config.autoneg == AUTONEG_ENABLE) &&
3274 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) {
3275 u32 phy2;
3277 /* Select expansion interrupt status register */
3278 tg3_writephy(tp, 0x17, 0x0f01);
3279 tg3_readphy(tp, 0x15, &phy2);
3280 if (phy2 & 0x20) {
3281 u32 bmcr;
3283 /* Config code words received, turn on autoneg. */
3284 tg3_readphy(tp, MII_BMCR, &bmcr);
3285 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
3287 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
3293 static int tg3_setup_phy(struct tg3 *tp, int force_reset)
3295 int err;
3297 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
3298 err = tg3_setup_fiber_phy(tp, force_reset);
3299 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
3300 err = tg3_setup_fiber_mii_phy(tp, force_reset);
3301 } else {
3302 err = tg3_setup_copper_phy(tp, force_reset);
3305 if (tp->pci_chip_rev_id == CHIPREV_ID_5784_A0 ||
3306 tp->pci_chip_rev_id == CHIPREV_ID_5784_A1) {
3307 u32 val, scale;
3309 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK;
3310 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
3311 scale = 65;
3312 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
3313 scale = 6;
3314 else
3315 scale = 12;
3317 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK;
3318 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
3319 tw32(GRC_MISC_CFG, val);
3322 if (tp->link_config.active_speed == SPEED_1000 &&
3323 tp->link_config.active_duplex == DUPLEX_HALF)
3324 tw32(MAC_TX_LENGTHS,
3325 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
3326 (6 << TX_LENGTHS_IPG_SHIFT) |
3327 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
3328 else
3329 tw32(MAC_TX_LENGTHS,
3330 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
3331 (6 << TX_LENGTHS_IPG_SHIFT) |
3332 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
3334 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
3335 if (netif_carrier_ok(tp->dev)) {
3336 tw32(HOSTCC_STAT_COAL_TICKS,
3337 tp->coal.stats_block_coalesce_usecs);
3338 } else {
3339 tw32(HOSTCC_STAT_COAL_TICKS, 0);
3343 if (tp->tg3_flags & TG3_FLAG_ASPM_WORKAROUND) {
3344 u32 val = tr32(PCIE_PWR_MGMT_THRESH);
3345 if (!netif_carrier_ok(tp->dev))
3346 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
3347 tp->pwrmgmt_thresh;
3348 else
3349 val |= PCIE_PWR_MGMT_L1_THRESH_MSK;
3350 tw32(PCIE_PWR_MGMT_THRESH, val);
3353 return err;
3356 /* This is called whenever we suspect that the system chipset is re-
3357 * ordering the sequence of MMIO to the tx send mailbox. The symptom
3358 * is bogus tx completions. We try to recover by setting the
3359 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
3360 * in the workqueue.
3362 static void tg3_tx_recover(struct tg3 *tp)
3364 BUG_ON((tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) ||
3365 tp->write32_tx_mbox == tg3_write_indirect_mbox);
3367 printk(KERN_WARNING PFX "%s: The system may be re-ordering memory-"
3368 "mapped I/O cycles to the network device, attempting to "
3369 "recover. Please report the problem to the driver maintainer "
3370 "and include system chipset information.\n", tp->dev->name);
3372 spin_lock(&tp->lock);
3373 tp->tg3_flags |= TG3_FLAG_TX_RECOVERY_PENDING;
3374 spin_unlock(&tp->lock);
3377 static inline u32 tg3_tx_avail(struct tg3 *tp)
3379 smp_mb();
3380 return (tp->tx_pending -
3381 ((tp->tx_prod - tp->tx_cons) & (TG3_TX_RING_SIZE - 1)));
3384 /* Tigon3 never reports partial packet sends. So we do not
3385 * need special logic to handle SKBs that have not had all
3386 * of their frags sent yet, like SunGEM does.
3388 static void tg3_tx(struct tg3 *tp)
3390 u32 hw_idx = tp->hw_status->idx[0].tx_consumer;
3391 u32 sw_idx = tp->tx_cons;
3393 while (sw_idx != hw_idx) {
3394 struct tx_ring_info *ri = &tp->tx_buffers[sw_idx];
3395 struct sk_buff *skb = ri->skb;
3396 int i, tx_bug = 0;
3398 if (unlikely(skb == NULL)) {
3399 tg3_tx_recover(tp);
3400 return;
3403 pci_unmap_single(tp->pdev,
3404 pci_unmap_addr(ri, mapping),
3405 skb_headlen(skb),
3406 PCI_DMA_TODEVICE);
3408 ri->skb = NULL;
3410 sw_idx = NEXT_TX(sw_idx);
3412 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
3413 ri = &tp->tx_buffers[sw_idx];
3414 if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
3415 tx_bug = 1;
3417 pci_unmap_page(tp->pdev,
3418 pci_unmap_addr(ri, mapping),
3419 skb_shinfo(skb)->frags[i].size,
3420 PCI_DMA_TODEVICE);
3422 sw_idx = NEXT_TX(sw_idx);
3425 dev_kfree_skb(skb);
3427 if (unlikely(tx_bug)) {
3428 tg3_tx_recover(tp);
3429 return;
3433 tp->tx_cons = sw_idx;
3435 /* Need to make the tx_cons update visible to tg3_start_xmit()
3436 * before checking for netif_queue_stopped(). Without the
3437 * memory barrier, there is a small possibility that tg3_start_xmit()
3438 * will miss it and cause the queue to be stopped forever.
3440 smp_mb();
3442 if (unlikely(netif_queue_stopped(tp->dev) &&
3443 (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp)))) {
3444 netif_tx_lock(tp->dev);
3445 if (netif_queue_stopped(tp->dev) &&
3446 (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp)))
3447 netif_wake_queue(tp->dev);
3448 netif_tx_unlock(tp->dev);
3452 /* Returns size of skb allocated or < 0 on error.
3454 * We only need to fill in the address because the other members
3455 * of the RX descriptor are invariant, see tg3_init_rings.
3457 * Note the purposeful assymetry of cpu vs. chip accesses. For
3458 * posting buffers we only dirty the first cache line of the RX
3459 * descriptor (containing the address). Whereas for the RX status
3460 * buffers the cpu only reads the last cacheline of the RX descriptor
3461 * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
3463 static int tg3_alloc_rx_skb(struct tg3 *tp, u32 opaque_key,
3464 int src_idx, u32 dest_idx_unmasked)
3466 struct tg3_rx_buffer_desc *desc;
3467 struct ring_info *map, *src_map;
3468 struct sk_buff *skb;
3469 dma_addr_t mapping;
3470 int skb_size, dest_idx;
3472 src_map = NULL;
3473 switch (opaque_key) {
3474 case RXD_OPAQUE_RING_STD:
3475 dest_idx = dest_idx_unmasked % TG3_RX_RING_SIZE;
3476 desc = &tp->rx_std[dest_idx];
3477 map = &tp->rx_std_buffers[dest_idx];
3478 if (src_idx >= 0)
3479 src_map = &tp->rx_std_buffers[src_idx];
3480 skb_size = tp->rx_pkt_buf_sz;
3481 break;
3483 case RXD_OPAQUE_RING_JUMBO:
3484 dest_idx = dest_idx_unmasked % TG3_RX_JUMBO_RING_SIZE;
3485 desc = &tp->rx_jumbo[dest_idx];
3486 map = &tp->rx_jumbo_buffers[dest_idx];
3487 if (src_idx >= 0)
3488 src_map = &tp->rx_jumbo_buffers[src_idx];
3489 skb_size = RX_JUMBO_PKT_BUF_SZ;
3490 break;
3492 default:
3493 return -EINVAL;
3496 /* Do not overwrite any of the map or rp information
3497 * until we are sure we can commit to a new buffer.
3499 * Callers depend upon this behavior and assume that
3500 * we leave everything unchanged if we fail.
3502 skb = netdev_alloc_skb(tp->dev, skb_size);
3503 if (skb == NULL)
3504 return -ENOMEM;
3506 skb_reserve(skb, tp->rx_offset);
3508 mapping = pci_map_single(tp->pdev, skb->data,
3509 skb_size - tp->rx_offset,
3510 PCI_DMA_FROMDEVICE);
3512 map->skb = skb;
3513 pci_unmap_addr_set(map, mapping, mapping);
3515 if (src_map != NULL)
3516 src_map->skb = NULL;
3518 desc->addr_hi = ((u64)mapping >> 32);
3519 desc->addr_lo = ((u64)mapping & 0xffffffff);
3521 return skb_size;
3524 /* We only need to move over in the address because the other
3525 * members of the RX descriptor are invariant. See notes above
3526 * tg3_alloc_rx_skb for full details.
3528 static void tg3_recycle_rx(struct tg3 *tp, u32 opaque_key,
3529 int src_idx, u32 dest_idx_unmasked)
3531 struct tg3_rx_buffer_desc *src_desc, *dest_desc;
3532 struct ring_info *src_map, *dest_map;
3533 int dest_idx;
3535 switch (opaque_key) {
3536 case RXD_OPAQUE_RING_STD:
3537 dest_idx = dest_idx_unmasked % TG3_RX_RING_SIZE;
3538 dest_desc = &tp->rx_std[dest_idx];
3539 dest_map = &tp->rx_std_buffers[dest_idx];
3540 src_desc = &tp->rx_std[src_idx];
3541 src_map = &tp->rx_std_buffers[src_idx];
3542 break;
3544 case RXD_OPAQUE_RING_JUMBO:
3545 dest_idx = dest_idx_unmasked % TG3_RX_JUMBO_RING_SIZE;
3546 dest_desc = &tp->rx_jumbo[dest_idx];
3547 dest_map = &tp->rx_jumbo_buffers[dest_idx];
3548 src_desc = &tp->rx_jumbo[src_idx];
3549 src_map = &tp->rx_jumbo_buffers[src_idx];
3550 break;
3552 default:
3553 return;
3556 dest_map->skb = src_map->skb;
3557 pci_unmap_addr_set(dest_map, mapping,
3558 pci_unmap_addr(src_map, mapping));
3559 dest_desc->addr_hi = src_desc->addr_hi;
3560 dest_desc->addr_lo = src_desc->addr_lo;
3562 src_map->skb = NULL;
3565 #if TG3_VLAN_TAG_USED
3566 static int tg3_vlan_rx(struct tg3 *tp, struct sk_buff *skb, u16 vlan_tag)
3568 return vlan_hwaccel_receive_skb(skb, tp->vlgrp, vlan_tag);
3570 #endif
3572 /* The RX ring scheme is composed of multiple rings which post fresh
3573 * buffers to the chip, and one special ring the chip uses to report
3574 * status back to the host.
3576 * The special ring reports the status of received packets to the
3577 * host. The chip does not write into the original descriptor the
3578 * RX buffer was obtained from. The chip simply takes the original
3579 * descriptor as provided by the host, updates the status and length
3580 * field, then writes this into the next status ring entry.
3582 * Each ring the host uses to post buffers to the chip is described
3583 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives,
3584 * it is first placed into the on-chip ram. When the packet's length
3585 * is known, it walks down the TG3_BDINFO entries to select the ring.
3586 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
3587 * which is within the range of the new packet's length is chosen.
3589 * The "separate ring for rx status" scheme may sound queer, but it makes
3590 * sense from a cache coherency perspective. If only the host writes
3591 * to the buffer post rings, and only the chip writes to the rx status
3592 * rings, then cache lines never move beyond shared-modified state.
3593 * If both the host and chip were to write into the same ring, cache line
3594 * eviction could occur since both entities want it in an exclusive state.
3596 static int tg3_rx(struct tg3 *tp, int budget)
3598 u32 work_mask, rx_std_posted = 0;
3599 u32 sw_idx = tp->rx_rcb_ptr;
3600 u16 hw_idx;
3601 int received;
3603 hw_idx = tp->hw_status->idx[0].rx_producer;
3605 * We need to order the read of hw_idx and the read of
3606 * the opaque cookie.
3608 rmb();
3609 work_mask = 0;
3610 received = 0;
3611 while (sw_idx != hw_idx && budget > 0) {
3612 struct tg3_rx_buffer_desc *desc = &tp->rx_rcb[sw_idx];
3613 unsigned int len;
3614 struct sk_buff *skb;
3615 dma_addr_t dma_addr;
3616 u32 opaque_key, desc_idx, *post_ptr;
3618 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
3619 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
3620 if (opaque_key == RXD_OPAQUE_RING_STD) {
3621 dma_addr = pci_unmap_addr(&tp->rx_std_buffers[desc_idx],
3622 mapping);
3623 skb = tp->rx_std_buffers[desc_idx].skb;
3624 post_ptr = &tp->rx_std_ptr;
3625 rx_std_posted++;
3626 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
3627 dma_addr = pci_unmap_addr(&tp->rx_jumbo_buffers[desc_idx],
3628 mapping);
3629 skb = tp->rx_jumbo_buffers[desc_idx].skb;
3630 post_ptr = &tp->rx_jumbo_ptr;
3632 else {
3633 goto next_pkt_nopost;
3636 work_mask |= opaque_key;
3638 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
3639 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) {
3640 drop_it:
3641 tg3_recycle_rx(tp, opaque_key,
3642 desc_idx, *post_ptr);
3643 drop_it_no_recycle:
3644 /* Other statistics kept track of by card. */
3645 tp->net_stats.rx_dropped++;
3646 goto next_pkt;
3649 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4; /* omit crc */
3651 if (len > RX_COPY_THRESHOLD
3652 && tp->rx_offset == 2
3653 /* rx_offset != 2 iff this is a 5701 card running
3654 * in PCI-X mode [see tg3_get_invariants()] */
3656 int skb_size;
3658 skb_size = tg3_alloc_rx_skb(tp, opaque_key,
3659 desc_idx, *post_ptr);
3660 if (skb_size < 0)
3661 goto drop_it;
3663 pci_unmap_single(tp->pdev, dma_addr,
3664 skb_size - tp->rx_offset,
3665 PCI_DMA_FROMDEVICE);
3667 skb_put(skb, len);
3668 } else {
3669 struct sk_buff *copy_skb;
3671 tg3_recycle_rx(tp, opaque_key,
3672 desc_idx, *post_ptr);
3674 copy_skb = netdev_alloc_skb(tp->dev, len + 2);
3675 if (copy_skb == NULL)
3676 goto drop_it_no_recycle;
3678 skb_reserve(copy_skb, 2);
3679 skb_put(copy_skb, len);
3680 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
3681 skb_copy_from_linear_data(skb, copy_skb->data, len);
3682 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
3684 /* We'll reuse the original ring buffer. */
3685 skb = copy_skb;
3688 if ((tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) &&
3689 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
3690 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
3691 >> RXD_TCPCSUM_SHIFT) == 0xffff))
3692 skb->ip_summed = CHECKSUM_UNNECESSARY;
3693 else
3694 skb->ip_summed = CHECKSUM_NONE;
3696 skb->protocol = eth_type_trans(skb, tp->dev);
3697 #if TG3_VLAN_TAG_USED
3698 if (tp->vlgrp != NULL &&
3699 desc->type_flags & RXD_FLAG_VLAN) {
3700 tg3_vlan_rx(tp, skb,
3701 desc->err_vlan & RXD_VLAN_MASK);
3702 } else
3703 #endif
3704 netif_receive_skb(skb);
3706 tp->dev->last_rx = jiffies;
3707 received++;
3708 budget--;
3710 next_pkt:
3711 (*post_ptr)++;
3713 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
3714 u32 idx = *post_ptr % TG3_RX_RING_SIZE;
3716 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX +
3717 TG3_64BIT_REG_LOW, idx);
3718 work_mask &= ~RXD_OPAQUE_RING_STD;
3719 rx_std_posted = 0;
3721 next_pkt_nopost:
3722 sw_idx++;
3723 sw_idx &= (TG3_RX_RCB_RING_SIZE(tp) - 1);
3725 /* Refresh hw_idx to see if there is new work */
3726 if (sw_idx == hw_idx) {
3727 hw_idx = tp->hw_status->idx[0].rx_producer;
3728 rmb();
3732 /* ACK the status ring. */
3733 tp->rx_rcb_ptr = sw_idx;
3734 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, sw_idx);
3736 /* Refill RX ring(s). */
3737 if (work_mask & RXD_OPAQUE_RING_STD) {
3738 sw_idx = tp->rx_std_ptr % TG3_RX_RING_SIZE;
3739 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW,
3740 sw_idx);
3742 if (work_mask & RXD_OPAQUE_RING_JUMBO) {
3743 sw_idx = tp->rx_jumbo_ptr % TG3_RX_JUMBO_RING_SIZE;
3744 tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW,
3745 sw_idx);
3747 mmiowb();
3749 return received;
3752 static int tg3_poll_work(struct tg3 *tp, int work_done, int budget)
3754 struct tg3_hw_status *sblk = tp->hw_status;
3756 /* handle link change and other phy events */
3757 if (!(tp->tg3_flags &
3758 (TG3_FLAG_USE_LINKCHG_REG |
3759 TG3_FLAG_POLL_SERDES))) {
3760 if (sblk->status & SD_STATUS_LINK_CHG) {
3761 sblk->status = SD_STATUS_UPDATED |
3762 (sblk->status & ~SD_STATUS_LINK_CHG);
3763 spin_lock(&tp->lock);
3764 tg3_setup_phy(tp, 0);
3765 spin_unlock(&tp->lock);
3769 /* run TX completion thread */
3770 if (sblk->idx[0].tx_consumer != tp->tx_cons) {
3771 tg3_tx(tp);
3772 if (unlikely(tp->tg3_flags & TG3_FLAG_TX_RECOVERY_PENDING))
3773 return work_done;
3776 /* run RX thread, within the bounds set by NAPI.
3777 * All RX "locking" is done by ensuring outside
3778 * code synchronizes with tg3->napi.poll()
3780 if (sblk->idx[0].rx_producer != tp->rx_rcb_ptr)
3781 work_done += tg3_rx(tp, budget - work_done);
3783 return work_done;
3786 static int tg3_poll(struct napi_struct *napi, int budget)
3788 struct tg3 *tp = container_of(napi, struct tg3, napi);
3789 int work_done = 0;
3790 struct tg3_hw_status *sblk = tp->hw_status;
3792 while (1) {
3793 work_done = tg3_poll_work(tp, work_done, budget);
3795 if (unlikely(tp->tg3_flags & TG3_FLAG_TX_RECOVERY_PENDING))
3796 goto tx_recovery;
3798 if (unlikely(work_done >= budget))
3799 break;
3801 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) {
3802 /* tp->last_tag is used in tg3_restart_ints() below
3803 * to tell the hw how much work has been processed,
3804 * so we must read it before checking for more work.
3806 tp->last_tag = sblk->status_tag;
3807 rmb();
3808 } else
3809 sblk->status &= ~SD_STATUS_UPDATED;
3811 if (likely(!tg3_has_work(tp))) {
3812 netif_rx_complete(tp->dev, napi);
3813 tg3_restart_ints(tp);
3814 break;
3818 return work_done;
3820 tx_recovery:
3821 /* work_done is guaranteed to be less than budget. */
3822 netif_rx_complete(tp->dev, napi);
3823 schedule_work(&tp->reset_task);
3824 return work_done;
3827 static void tg3_irq_quiesce(struct tg3 *tp)
3829 BUG_ON(tp->irq_sync);
3831 tp->irq_sync = 1;
3832 smp_mb();
3834 synchronize_irq(tp->pdev->irq);
3837 static inline int tg3_irq_sync(struct tg3 *tp)
3839 return tp->irq_sync;
3842 /* Fully shutdown all tg3 driver activity elsewhere in the system.
3843 * If irq_sync is non-zero, then the IRQ handler must be synchronized
3844 * with as well. Most of the time, this is not necessary except when
3845 * shutting down the device.
3847 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
3849 spin_lock_bh(&tp->lock);
3850 if (irq_sync)
3851 tg3_irq_quiesce(tp);
3854 static inline void tg3_full_unlock(struct tg3 *tp)
3856 spin_unlock_bh(&tp->lock);
3859 /* One-shot MSI handler - Chip automatically disables interrupt
3860 * after sending MSI so driver doesn't have to do it.
3862 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
3864 struct net_device *dev = dev_id;
3865 struct tg3 *tp = netdev_priv(dev);
3867 prefetch(tp->hw_status);
3868 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3870 if (likely(!tg3_irq_sync(tp)))
3871 netif_rx_schedule(dev, &tp->napi);
3873 return IRQ_HANDLED;
3876 /* MSI ISR - No need to check for interrupt sharing and no need to
3877 * flush status block and interrupt mailbox. PCI ordering rules
3878 * guarantee that MSI will arrive after the status block.
3880 static irqreturn_t tg3_msi(int irq, void *dev_id)
3882 struct net_device *dev = dev_id;
3883 struct tg3 *tp = netdev_priv(dev);
3885 prefetch(tp->hw_status);
3886 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3888 * Writing any value to intr-mbox-0 clears PCI INTA# and
3889 * chip-internal interrupt pending events.
3890 * Writing non-zero to intr-mbox-0 additional tells the
3891 * NIC to stop sending us irqs, engaging "in-intr-handler"
3892 * event coalescing.
3894 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
3895 if (likely(!tg3_irq_sync(tp)))
3896 netif_rx_schedule(dev, &tp->napi);
3898 return IRQ_RETVAL(1);
3901 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
3903 struct net_device *dev = dev_id;
3904 struct tg3 *tp = netdev_priv(dev);
3905 struct tg3_hw_status *sblk = tp->hw_status;
3906 unsigned int handled = 1;
3908 /* In INTx mode, it is possible for the interrupt to arrive at
3909 * the CPU before the status block posted prior to the interrupt.
3910 * Reading the PCI State register will confirm whether the
3911 * interrupt is ours and will flush the status block.
3913 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
3914 if ((tp->tg3_flags & TG3_FLAG_CHIP_RESETTING) ||
3915 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3916 handled = 0;
3917 goto out;
3922 * Writing any value to intr-mbox-0 clears PCI INTA# and
3923 * chip-internal interrupt pending events.
3924 * Writing non-zero to intr-mbox-0 additional tells the
3925 * NIC to stop sending us irqs, engaging "in-intr-handler"
3926 * event coalescing.
3928 * Flush the mailbox to de-assert the IRQ immediately to prevent
3929 * spurious interrupts. The flush impacts performance but
3930 * excessive spurious interrupts can be worse in some cases.
3932 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
3933 if (tg3_irq_sync(tp))
3934 goto out;
3935 sblk->status &= ~SD_STATUS_UPDATED;
3936 if (likely(tg3_has_work(tp))) {
3937 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3938 netif_rx_schedule(dev, &tp->napi);
3939 } else {
3940 /* No work, shared interrupt perhaps? re-enable
3941 * interrupts, and flush that PCI write
3943 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3944 0x00000000);
3946 out:
3947 return IRQ_RETVAL(handled);
3950 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
3952 struct net_device *dev = dev_id;
3953 struct tg3 *tp = netdev_priv(dev);
3954 struct tg3_hw_status *sblk = tp->hw_status;
3955 unsigned int handled = 1;
3957 /* In INTx mode, it is possible for the interrupt to arrive at
3958 * the CPU before the status block posted prior to the interrupt.
3959 * Reading the PCI State register will confirm whether the
3960 * interrupt is ours and will flush the status block.
3962 if (unlikely(sblk->status_tag == tp->last_tag)) {
3963 if ((tp->tg3_flags & TG3_FLAG_CHIP_RESETTING) ||
3964 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3965 handled = 0;
3966 goto out;
3971 * writing any value to intr-mbox-0 clears PCI INTA# and
3972 * chip-internal interrupt pending events.
3973 * writing non-zero to intr-mbox-0 additional tells the
3974 * NIC to stop sending us irqs, engaging "in-intr-handler"
3975 * event coalescing.
3977 * Flush the mailbox to de-assert the IRQ immediately to prevent
3978 * spurious interrupts. The flush impacts performance but
3979 * excessive spurious interrupts can be worse in some cases.
3981 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001);
3982 if (tg3_irq_sync(tp))
3983 goto out;
3984 if (netif_rx_schedule_prep(dev, &tp->napi)) {
3985 prefetch(&tp->rx_rcb[tp->rx_rcb_ptr]);
3986 /* Update last_tag to mark that this status has been
3987 * seen. Because interrupt may be shared, we may be
3988 * racing with tg3_poll(), so only update last_tag
3989 * if tg3_poll() is not scheduled.
3991 tp->last_tag = sblk->status_tag;
3992 __netif_rx_schedule(dev, &tp->napi);
3994 out:
3995 return IRQ_RETVAL(handled);
3998 /* ISR for interrupt test */
3999 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
4001 struct net_device *dev = dev_id;
4002 struct tg3 *tp = netdev_priv(dev);
4003 struct tg3_hw_status *sblk = tp->hw_status;
4005 if ((sblk->status & SD_STATUS_UPDATED) ||
4006 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
4007 tg3_disable_ints(tp);
4008 return IRQ_RETVAL(1);
4010 return IRQ_RETVAL(0);
4013 static int tg3_init_hw(struct tg3 *, int);
4014 static int tg3_halt(struct tg3 *, int, int);
4016 /* Restart hardware after configuration changes, self-test, etc.
4017 * Invoked with tp->lock held.
4019 static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
4020 __releases(tp->lock)
4021 __acquires(tp->lock)
4023 int err;
4025 err = tg3_init_hw(tp, reset_phy);
4026 if (err) {
4027 printk(KERN_ERR PFX "%s: Failed to re-initialize device, "
4028 "aborting.\n", tp->dev->name);
4029 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
4030 tg3_full_unlock(tp);
4031 del_timer_sync(&tp->timer);
4032 tp->irq_sync = 0;
4033 napi_enable(&tp->napi);
4034 dev_close(tp->dev);
4035 tg3_full_lock(tp, 0);
4037 return err;
4040 #ifdef CONFIG_NET_POLL_CONTROLLER
4041 static void tg3_poll_controller(struct net_device *dev)
4043 struct tg3 *tp = netdev_priv(dev);
4045 tg3_interrupt(tp->pdev->irq, dev);
4047 #endif
4049 static void tg3_reset_task(struct work_struct *work)
4051 struct tg3 *tp = container_of(work, struct tg3, reset_task);
4052 unsigned int restart_timer;
4054 tg3_full_lock(tp, 0);
4056 if (!netif_running(tp->dev)) {
4057 tg3_full_unlock(tp);
4058 return;
4061 tg3_full_unlock(tp);
4063 tg3_netif_stop(tp);
4065 tg3_full_lock(tp, 1);
4067 restart_timer = tp->tg3_flags2 & TG3_FLG2_RESTART_TIMER;
4068 tp->tg3_flags2 &= ~TG3_FLG2_RESTART_TIMER;
4070 if (tp->tg3_flags & TG3_FLAG_TX_RECOVERY_PENDING) {
4071 tp->write32_tx_mbox = tg3_write32_tx_mbox;
4072 tp->write32_rx_mbox = tg3_write_flush_reg32;
4073 tp->tg3_flags |= TG3_FLAG_MBOX_WRITE_REORDER;
4074 tp->tg3_flags &= ~TG3_FLAG_TX_RECOVERY_PENDING;
4077 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
4078 if (tg3_init_hw(tp, 1))
4079 goto out;
4081 tg3_netif_start(tp);
4083 if (restart_timer)
4084 mod_timer(&tp->timer, jiffies + 1);
4086 out:
4087 tg3_full_unlock(tp);
4090 static void tg3_dump_short_state(struct tg3 *tp)
4092 printk(KERN_ERR PFX "DEBUG: MAC_TX_STATUS[%08x] MAC_RX_STATUS[%08x]\n",
4093 tr32(MAC_TX_STATUS), tr32(MAC_RX_STATUS));
4094 printk(KERN_ERR PFX "DEBUG: RDMAC_STATUS[%08x] WDMAC_STATUS[%08x]\n",
4095 tr32(RDMAC_STATUS), tr32(WDMAC_STATUS));
4098 static void tg3_tx_timeout(struct net_device *dev)
4100 struct tg3 *tp = netdev_priv(dev);
4102 if (netif_msg_tx_err(tp)) {
4103 printk(KERN_ERR PFX "%s: transmit timed out, resetting\n",
4104 dev->name);
4105 tg3_dump_short_state(tp);
4108 schedule_work(&tp->reset_task);
4111 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
4112 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
4114 u32 base = (u32) mapping & 0xffffffff;
4116 return ((base > 0xffffdcc0) &&
4117 (base + len + 8 < base));
4120 /* Test for DMA addresses > 40-bit */
4121 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
4122 int len)
4124 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
4125 if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG)
4126 return (((u64) mapping + len) > DMA_40BIT_MASK);
4127 return 0;
4128 #else
4129 return 0;
4130 #endif
4133 static void tg3_set_txd(struct tg3 *, int, dma_addr_t, int, u32, u32);
4135 /* Workaround 4GB and 40-bit hardware DMA bugs. */
4136 static int tigon3_dma_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb,
4137 u32 last_plus_one, u32 *start,
4138 u32 base_flags, u32 mss)
4140 struct sk_buff *new_skb;
4141 dma_addr_t new_addr = 0;
4142 u32 entry = *start;
4143 int i, ret = 0;
4145 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
4146 new_skb = skb_copy(skb, GFP_ATOMIC);
4147 else {
4148 int more_headroom = 4 - ((unsigned long)skb->data & 3);
4150 new_skb = skb_copy_expand(skb,
4151 skb_headroom(skb) + more_headroom,
4152 skb_tailroom(skb), GFP_ATOMIC);
4155 if (!new_skb) {
4156 ret = -1;
4157 } else {
4158 /* New SKB is guaranteed to be linear. */
4159 entry = *start;
4160 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
4161 PCI_DMA_TODEVICE);
4162 /* Make sure new skb does not cross any 4G boundaries.
4163 * Drop the packet if it does.
4165 if (tg3_4g_overflow_test(new_addr, new_skb->len)) {
4166 ret = -1;
4167 dev_kfree_skb(new_skb);
4168 new_skb = NULL;
4169 } else {
4170 tg3_set_txd(tp, entry, new_addr, new_skb->len,
4171 base_flags, 1 | (mss << 1));
4172 *start = NEXT_TX(entry);
4176 /* Now clean up the sw ring entries. */
4177 i = 0;
4178 while (entry != last_plus_one) {
4179 int len;
4181 if (i == 0)
4182 len = skb_headlen(skb);
4183 else
4184 len = skb_shinfo(skb)->frags[i-1].size;
4185 pci_unmap_single(tp->pdev,
4186 pci_unmap_addr(&tp->tx_buffers[entry], mapping),
4187 len, PCI_DMA_TODEVICE);
4188 if (i == 0) {
4189 tp->tx_buffers[entry].skb = new_skb;
4190 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, new_addr);
4191 } else {
4192 tp->tx_buffers[entry].skb = NULL;
4194 entry = NEXT_TX(entry);
4195 i++;
4198 dev_kfree_skb(skb);
4200 return ret;
4203 static void tg3_set_txd(struct tg3 *tp, int entry,
4204 dma_addr_t mapping, int len, u32 flags,
4205 u32 mss_and_is_end)
4207 struct tg3_tx_buffer_desc *txd = &tp->tx_ring[entry];
4208 int is_end = (mss_and_is_end & 0x1);
4209 u32 mss = (mss_and_is_end >> 1);
4210 u32 vlan_tag = 0;
4212 if (is_end)
4213 flags |= TXD_FLAG_END;
4214 if (flags & TXD_FLAG_VLAN) {
4215 vlan_tag = flags >> 16;
4216 flags &= 0xffff;
4218 vlan_tag |= (mss << TXD_MSS_SHIFT);
4220 txd->addr_hi = ((u64) mapping >> 32);
4221 txd->addr_lo = ((u64) mapping & 0xffffffff);
4222 txd->len_flags = (len << TXD_LEN_SHIFT) | flags;
4223 txd->vlan_tag = vlan_tag << TXD_VLAN_TAG_SHIFT;
4226 /* hard_start_xmit for devices that don't have any bugs and
4227 * support TG3_FLG2_HW_TSO_2 only.
4229 static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
4231 struct tg3 *tp = netdev_priv(dev);
4232 dma_addr_t mapping;
4233 u32 len, entry, base_flags, mss;
4235 len = skb_headlen(skb);
4237 /* We are running in BH disabled context with netif_tx_lock
4238 * and TX reclaim runs via tp->napi.poll inside of a software
4239 * interrupt. Furthermore, IRQ processing runs lockless so we have
4240 * no IRQ context deadlocks to worry about either. Rejoice!
4242 if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
4243 if (!netif_queue_stopped(dev)) {
4244 netif_stop_queue(dev);
4246 /* This is a hard error, log it. */
4247 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when "
4248 "queue awake!\n", dev->name);
4250 return NETDEV_TX_BUSY;
4253 entry = tp->tx_prod;
4254 base_flags = 0;
4255 mss = 0;
4256 if ((mss = skb_shinfo(skb)->gso_size) != 0) {
4257 int tcp_opt_len, ip_tcp_len;
4259 if (skb_header_cloned(skb) &&
4260 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
4261 dev_kfree_skb(skb);
4262 goto out_unlock;
4265 if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
4266 mss |= (skb_headlen(skb) - ETH_HLEN) << 9;
4267 else {
4268 struct iphdr *iph = ip_hdr(skb);
4270 tcp_opt_len = tcp_optlen(skb);
4271 ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr);
4273 iph->check = 0;
4274 iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len);
4275 mss |= (ip_tcp_len + tcp_opt_len) << 9;
4278 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
4279 TXD_FLAG_CPU_POST_DMA);
4281 tcp_hdr(skb)->check = 0;
4284 else if (skb->ip_summed == CHECKSUM_PARTIAL)
4285 base_flags |= TXD_FLAG_TCPUDP_CSUM;
4286 #if TG3_VLAN_TAG_USED
4287 if (tp->vlgrp != NULL && vlan_tx_tag_present(skb))
4288 base_flags |= (TXD_FLAG_VLAN |
4289 (vlan_tx_tag_get(skb) << 16));
4290 #endif
4292 /* Queue skb data, a.k.a. the main skb fragment. */
4293 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
4295 tp->tx_buffers[entry].skb = skb;
4296 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4298 tg3_set_txd(tp, entry, mapping, len, base_flags,
4299 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
4301 entry = NEXT_TX(entry);
4303 /* Now loop through additional data fragments, and queue them. */
4304 if (skb_shinfo(skb)->nr_frags > 0) {
4305 unsigned int i, last;
4307 last = skb_shinfo(skb)->nr_frags - 1;
4308 for (i = 0; i <= last; i++) {
4309 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4311 len = frag->size;
4312 mapping = pci_map_page(tp->pdev,
4313 frag->page,
4314 frag->page_offset,
4315 len, PCI_DMA_TODEVICE);
4317 tp->tx_buffers[entry].skb = NULL;
4318 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4320 tg3_set_txd(tp, entry, mapping, len,
4321 base_flags, (i == last) | (mss << 1));
4323 entry = NEXT_TX(entry);
4327 /* Packets are ready, update Tx producer idx local and on card. */
4328 tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
4330 tp->tx_prod = entry;
4331 if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
4332 netif_stop_queue(dev);
4333 if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp))
4334 netif_wake_queue(tp->dev);
4337 out_unlock:
4338 mmiowb();
4340 dev->trans_start = jiffies;
4342 return NETDEV_TX_OK;
4345 static int tg3_start_xmit_dma_bug(struct sk_buff *, struct net_device *);
4347 /* Use GSO to workaround a rare TSO bug that may be triggered when the
4348 * TSO header is greater than 80 bytes.
4350 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
4352 struct sk_buff *segs, *nskb;
4354 /* Estimate the number of fragments in the worst case */
4355 if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->gso_segs * 3))) {
4356 netif_stop_queue(tp->dev);
4357 if (tg3_tx_avail(tp) <= (skb_shinfo(skb)->gso_segs * 3))
4358 return NETDEV_TX_BUSY;
4360 netif_wake_queue(tp->dev);
4363 segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
4364 if (unlikely(IS_ERR(segs)))
4365 goto tg3_tso_bug_end;
4367 do {
4368 nskb = segs;
4369 segs = segs->next;
4370 nskb->next = NULL;
4371 tg3_start_xmit_dma_bug(nskb, tp->dev);
4372 } while (segs);
4374 tg3_tso_bug_end:
4375 dev_kfree_skb(skb);
4377 return NETDEV_TX_OK;
4380 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
4381 * support TG3_FLG2_HW_TSO_1 or firmware TSO only.
4383 static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
4385 struct tg3 *tp = netdev_priv(dev);
4386 dma_addr_t mapping;
4387 u32 len, entry, base_flags, mss;
4388 int would_hit_hwbug;
4390 len = skb_headlen(skb);
4392 /* We are running in BH disabled context with netif_tx_lock
4393 * and TX reclaim runs via tp->napi.poll inside of a software
4394 * interrupt. Furthermore, IRQ processing runs lockless so we have
4395 * no IRQ context deadlocks to worry about either. Rejoice!
4397 if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
4398 if (!netif_queue_stopped(dev)) {
4399 netif_stop_queue(dev);
4401 /* This is a hard error, log it. */
4402 printk(KERN_ERR PFX "%s: BUG! Tx Ring full when "
4403 "queue awake!\n", dev->name);
4405 return NETDEV_TX_BUSY;
4408 entry = tp->tx_prod;
4409 base_flags = 0;
4410 if (skb->ip_summed == CHECKSUM_PARTIAL)
4411 base_flags |= TXD_FLAG_TCPUDP_CSUM;
4412 mss = 0;
4413 if ((mss = skb_shinfo(skb)->gso_size) != 0) {
4414 struct iphdr *iph;
4415 int tcp_opt_len, ip_tcp_len, hdr_len;
4417 if (skb_header_cloned(skb) &&
4418 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) {
4419 dev_kfree_skb(skb);
4420 goto out_unlock;
4423 tcp_opt_len = tcp_optlen(skb);
4424 ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr);
4426 hdr_len = ip_tcp_len + tcp_opt_len;
4427 if (unlikely((ETH_HLEN + hdr_len) > 80) &&
4428 (tp->tg3_flags2 & TG3_FLG2_TSO_BUG))
4429 return (tg3_tso_bug(tp, skb));
4431 base_flags |= (TXD_FLAG_CPU_PRE_DMA |
4432 TXD_FLAG_CPU_POST_DMA);
4434 iph = ip_hdr(skb);
4435 iph->check = 0;
4436 iph->tot_len = htons(mss + hdr_len);
4437 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
4438 tcp_hdr(skb)->check = 0;
4439 base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
4440 } else
4441 tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
4442 iph->daddr, 0,
4443 IPPROTO_TCP,
4446 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO) ||
4447 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)) {
4448 if (tcp_opt_len || iph->ihl > 5) {
4449 int tsflags;
4451 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
4452 mss |= (tsflags << 11);
4454 } else {
4455 if (tcp_opt_len || iph->ihl > 5) {
4456 int tsflags;
4458 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
4459 base_flags |= tsflags << 12;
4463 #if TG3_VLAN_TAG_USED
4464 if (tp->vlgrp != NULL && vlan_tx_tag_present(skb))
4465 base_flags |= (TXD_FLAG_VLAN |
4466 (vlan_tx_tag_get(skb) << 16));
4467 #endif
4469 /* Queue skb data, a.k.a. the main skb fragment. */
4470 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
4472 tp->tx_buffers[entry].skb = skb;
4473 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4475 would_hit_hwbug = 0;
4477 if (tp->tg3_flags3 & TG3_FLG3_5701_DMA_BUG)
4478 would_hit_hwbug = 1;
4479 else if (tg3_4g_overflow_test(mapping, len))
4480 would_hit_hwbug = 1;
4482 tg3_set_txd(tp, entry, mapping, len, base_flags,
4483 (skb_shinfo(skb)->nr_frags == 0) | (mss << 1));
4485 entry = NEXT_TX(entry);
4487 /* Now loop through additional data fragments, and queue them. */
4488 if (skb_shinfo(skb)->nr_frags > 0) {
4489 unsigned int i, last;
4491 last = skb_shinfo(skb)->nr_frags - 1;
4492 for (i = 0; i <= last; i++) {
4493 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4495 len = frag->size;
4496 mapping = pci_map_page(tp->pdev,
4497 frag->page,
4498 frag->page_offset,
4499 len, PCI_DMA_TODEVICE);
4501 tp->tx_buffers[entry].skb = NULL;
4502 pci_unmap_addr_set(&tp->tx_buffers[entry], mapping, mapping);
4504 if (tg3_4g_overflow_test(mapping, len))
4505 would_hit_hwbug = 1;
4507 if (tg3_40bit_overflow_test(tp, mapping, len))
4508 would_hit_hwbug = 1;
4510 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
4511 tg3_set_txd(tp, entry, mapping, len,
4512 base_flags, (i == last)|(mss << 1));
4513 else
4514 tg3_set_txd(tp, entry, mapping, len,
4515 base_flags, (i == last));
4517 entry = NEXT_TX(entry);
4521 if (would_hit_hwbug) {
4522 u32 last_plus_one = entry;
4523 u32 start;
4525 start = entry - 1 - skb_shinfo(skb)->nr_frags;
4526 start &= (TG3_TX_RING_SIZE - 1);
4528 /* If the workaround fails due to memory/mapping
4529 * failure, silently drop this packet.
4531 if (tigon3_dma_hwbug_workaround(tp, skb, last_plus_one,
4532 &start, base_flags, mss))
4533 goto out_unlock;
4535 entry = start;
4538 /* Packets are ready, update Tx producer idx local and on card. */
4539 tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
4541 tp->tx_prod = entry;
4542 if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
4543 netif_stop_queue(dev);
4544 if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH(tp))
4545 netif_wake_queue(tp->dev);
4548 out_unlock:
4549 mmiowb();
4551 dev->trans_start = jiffies;
4553 return NETDEV_TX_OK;
4556 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
4557 int new_mtu)
4559 dev->mtu = new_mtu;
4561 if (new_mtu > ETH_DATA_LEN) {
4562 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
4563 tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE;
4564 ethtool_op_set_tso(dev, 0);
4566 else
4567 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
4568 } else {
4569 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
4570 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
4571 tp->tg3_flags &= ~TG3_FLAG_JUMBO_RING_ENABLE;
4575 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
4577 struct tg3 *tp = netdev_priv(dev);
4578 int err;
4580 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
4581 return -EINVAL;
4583 if (!netif_running(dev)) {
4584 /* We'll just catch it later when the
4585 * device is up'd.
4587 tg3_set_mtu(dev, tp, new_mtu);
4588 return 0;
4591 tg3_netif_stop(tp);
4593 tg3_full_lock(tp, 1);
4595 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
4597 tg3_set_mtu(dev, tp, new_mtu);
4599 err = tg3_restart_hw(tp, 0);
4601 if (!err)
4602 tg3_netif_start(tp);
4604 tg3_full_unlock(tp);
4606 return err;
4609 /* Free up pending packets in all rx/tx rings.
4611 * The chip has been shut down and the driver detached from
4612 * the networking, so no interrupts or new tx packets will
4613 * end up in the driver. tp->{tx,}lock is not held and we are not
4614 * in an interrupt context and thus may sleep.
4616 static void tg3_free_rings(struct tg3 *tp)
4618 struct ring_info *rxp;
4619 int i;
4621 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4622 rxp = &tp->rx_std_buffers[i];
4624 if (rxp->skb == NULL)
4625 continue;
4626 pci_unmap_single(tp->pdev,
4627 pci_unmap_addr(rxp, mapping),
4628 tp->rx_pkt_buf_sz - tp->rx_offset,
4629 PCI_DMA_FROMDEVICE);
4630 dev_kfree_skb_any(rxp->skb);
4631 rxp->skb = NULL;
4634 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4635 rxp = &tp->rx_jumbo_buffers[i];
4637 if (rxp->skb == NULL)
4638 continue;
4639 pci_unmap_single(tp->pdev,
4640 pci_unmap_addr(rxp, mapping),
4641 RX_JUMBO_PKT_BUF_SZ - tp->rx_offset,
4642 PCI_DMA_FROMDEVICE);
4643 dev_kfree_skb_any(rxp->skb);
4644 rxp->skb = NULL;
4647 for (i = 0; i < TG3_TX_RING_SIZE; ) {
4648 struct tx_ring_info *txp;
4649 struct sk_buff *skb;
4650 int j;
4652 txp = &tp->tx_buffers[i];
4653 skb = txp->skb;
4655 if (skb == NULL) {
4656 i++;
4657 continue;
4660 pci_unmap_single(tp->pdev,
4661 pci_unmap_addr(txp, mapping),
4662 skb_headlen(skb),
4663 PCI_DMA_TODEVICE);
4664 txp->skb = NULL;
4666 i++;
4668 for (j = 0; j < skb_shinfo(skb)->nr_frags; j++) {
4669 txp = &tp->tx_buffers[i & (TG3_TX_RING_SIZE - 1)];
4670 pci_unmap_page(tp->pdev,
4671 pci_unmap_addr(txp, mapping),
4672 skb_shinfo(skb)->frags[j].size,
4673 PCI_DMA_TODEVICE);
4674 i++;
4677 dev_kfree_skb_any(skb);
4681 /* Initialize tx/rx rings for packet processing.
4683 * The chip has been shut down and the driver detached from
4684 * the networking, so no interrupts or new tx packets will
4685 * end up in the driver. tp->{tx,}lock are held and thus
4686 * we may not sleep.
4688 static int tg3_init_rings(struct tg3 *tp)
4690 u32 i;
4692 /* Free up all the SKBs. */
4693 tg3_free_rings(tp);
4695 /* Zero out all descriptors. */
4696 memset(tp->rx_std, 0, TG3_RX_RING_BYTES);
4697 memset(tp->rx_jumbo, 0, TG3_RX_JUMBO_RING_BYTES);
4698 memset(tp->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
4699 memset(tp->tx_ring, 0, TG3_TX_RING_BYTES);
4701 tp->rx_pkt_buf_sz = RX_PKT_BUF_SZ;
4702 if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) &&
4703 (tp->dev->mtu > ETH_DATA_LEN))
4704 tp->rx_pkt_buf_sz = RX_JUMBO_PKT_BUF_SZ;
4706 /* Initialize invariants of the rings, we only set this
4707 * stuff once. This works because the card does not
4708 * write into the rx buffer posting rings.
4710 for (i = 0; i < TG3_RX_RING_SIZE; i++) {
4711 struct tg3_rx_buffer_desc *rxd;
4713 rxd = &tp->rx_std[i];
4714 rxd->idx_len = (tp->rx_pkt_buf_sz - tp->rx_offset - 64)
4715 << RXD_LEN_SHIFT;
4716 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT);
4717 rxd->opaque = (RXD_OPAQUE_RING_STD |
4718 (i << RXD_OPAQUE_INDEX_SHIFT));
4721 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
4722 for (i = 0; i < TG3_RX_JUMBO_RING_SIZE; i++) {
4723 struct tg3_rx_buffer_desc *rxd;
4725 rxd = &tp->rx_jumbo[i];
4726 rxd->idx_len = (RX_JUMBO_PKT_BUF_SZ - tp->rx_offset - 64)
4727 << RXD_LEN_SHIFT;
4728 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) |
4729 RXD_FLAG_JUMBO;
4730 rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
4731 (i << RXD_OPAQUE_INDEX_SHIFT));
4735 /* Now allocate fresh SKBs for each rx ring. */
4736 for (i = 0; i < tp->rx_pending; i++) {
4737 if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_STD, -1, i) < 0) {
4738 printk(KERN_WARNING PFX
4739 "%s: Using a smaller RX standard ring, "
4740 "only %d out of %d buffers were allocated "
4741 "successfully.\n",
4742 tp->dev->name, i, tp->rx_pending);
4743 if (i == 0)
4744 return -ENOMEM;
4745 tp->rx_pending = i;
4746 break;
4750 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
4751 for (i = 0; i < tp->rx_jumbo_pending; i++) {
4752 if (tg3_alloc_rx_skb(tp, RXD_OPAQUE_RING_JUMBO,
4753 -1, i) < 0) {
4754 printk(KERN_WARNING PFX
4755 "%s: Using a smaller RX jumbo ring, "
4756 "only %d out of %d buffers were "
4757 "allocated successfully.\n",
4758 tp->dev->name, i, tp->rx_jumbo_pending);
4759 if (i == 0) {
4760 tg3_free_rings(tp);
4761 return -ENOMEM;
4763 tp->rx_jumbo_pending = i;
4764 break;
4768 return 0;
4772 * Must not be invoked with interrupt sources disabled and
4773 * the hardware shutdown down.
4775 static void tg3_free_consistent(struct tg3 *tp)
4777 kfree(tp->rx_std_buffers);
4778 tp->rx_std_buffers = NULL;
4779 if (tp->rx_std) {
4780 pci_free_consistent(tp->pdev, TG3_RX_RING_BYTES,
4781 tp->rx_std, tp->rx_std_mapping);
4782 tp->rx_std = NULL;
4784 if (tp->rx_jumbo) {
4785 pci_free_consistent(tp->pdev, TG3_RX_JUMBO_RING_BYTES,
4786 tp->rx_jumbo, tp->rx_jumbo_mapping);
4787 tp->rx_jumbo = NULL;
4789 if (tp->rx_rcb) {
4790 pci_free_consistent(tp->pdev, TG3_RX_RCB_RING_BYTES(tp),
4791 tp->rx_rcb, tp->rx_rcb_mapping);
4792 tp->rx_rcb = NULL;
4794 if (tp->tx_ring) {
4795 pci_free_consistent(tp->pdev, TG3_TX_RING_BYTES,
4796 tp->tx_ring, tp->tx_desc_mapping);
4797 tp->tx_ring = NULL;
4799 if (tp->hw_status) {
4800 pci_free_consistent(tp->pdev, TG3_HW_STATUS_SIZE,
4801 tp->hw_status, tp->status_mapping);
4802 tp->hw_status = NULL;
4804 if (tp->hw_stats) {
4805 pci_free_consistent(tp->pdev, sizeof(struct tg3_hw_stats),
4806 tp->hw_stats, tp->stats_mapping);
4807 tp->hw_stats = NULL;
4812 * Must not be invoked with interrupt sources disabled and
4813 * the hardware shutdown down. Can sleep.
4815 static int tg3_alloc_consistent(struct tg3 *tp)
4817 tp->rx_std_buffers = kzalloc((sizeof(struct ring_info) *
4818 (TG3_RX_RING_SIZE +
4819 TG3_RX_JUMBO_RING_SIZE)) +
4820 (sizeof(struct tx_ring_info) *
4821 TG3_TX_RING_SIZE),
4822 GFP_KERNEL);
4823 if (!tp->rx_std_buffers)
4824 return -ENOMEM;
4826 tp->rx_jumbo_buffers = &tp->rx_std_buffers[TG3_RX_RING_SIZE];
4827 tp->tx_buffers = (struct tx_ring_info *)
4828 &tp->rx_jumbo_buffers[TG3_RX_JUMBO_RING_SIZE];
4830 tp->rx_std = pci_alloc_consistent(tp->pdev, TG3_RX_RING_BYTES,
4831 &tp->rx_std_mapping);
4832 if (!tp->rx_std)
4833 goto err_out;
4835 tp->rx_jumbo = pci_alloc_consistent(tp->pdev, TG3_RX_JUMBO_RING_BYTES,
4836 &tp->rx_jumbo_mapping);
4838 if (!tp->rx_jumbo)
4839 goto err_out;
4841 tp->rx_rcb = pci_alloc_consistent(tp->pdev, TG3_RX_RCB_RING_BYTES(tp),
4842 &tp->rx_rcb_mapping);
4843 if (!tp->rx_rcb)
4844 goto err_out;
4846 tp->tx_ring = pci_alloc_consistent(tp->pdev, TG3_TX_RING_BYTES,
4847 &tp->tx_desc_mapping);
4848 if (!tp->tx_ring)
4849 goto err_out;
4851 tp->hw_status = pci_alloc_consistent(tp->pdev,
4852 TG3_HW_STATUS_SIZE,
4853 &tp->status_mapping);
4854 if (!tp->hw_status)
4855 goto err_out;
4857 tp->hw_stats = pci_alloc_consistent(tp->pdev,
4858 sizeof(struct tg3_hw_stats),
4859 &tp->stats_mapping);
4860 if (!tp->hw_stats)
4861 goto err_out;
4863 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
4864 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
4866 return 0;
4868 err_out:
4869 tg3_free_consistent(tp);
4870 return -ENOMEM;
4873 #define MAX_WAIT_CNT 1000
4875 /* To stop a block, clear the enable bit and poll till it
4876 * clears. tp->lock is held.
4878 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
4880 unsigned int i;
4881 u32 val;
4883 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
4884 switch (ofs) {
4885 case RCVLSC_MODE:
4886 case DMAC_MODE:
4887 case MBFREE_MODE:
4888 case BUFMGR_MODE:
4889 case MEMARB_MODE:
4890 /* We can't enable/disable these bits of the
4891 * 5705/5750, just say success.
4893 return 0;
4895 default:
4896 break;
4900 val = tr32(ofs);
4901 val &= ~enable_bit;
4902 tw32_f(ofs, val);
4904 for (i = 0; i < MAX_WAIT_CNT; i++) {
4905 udelay(100);
4906 val = tr32(ofs);
4907 if ((val & enable_bit) == 0)
4908 break;
4911 if (i == MAX_WAIT_CNT && !silent) {
4912 printk(KERN_ERR PFX "tg3_stop_block timed out, "
4913 "ofs=%lx enable_bit=%x\n",
4914 ofs, enable_bit);
4915 return -ENODEV;
4918 return 0;
4921 /* tp->lock is held. */
4922 static int tg3_abort_hw(struct tg3 *tp, int silent)
4924 int i, err;
4926 tg3_disable_ints(tp);
4928 tp->rx_mode &= ~RX_MODE_ENABLE;
4929 tw32_f(MAC_RX_MODE, tp->rx_mode);
4930 udelay(10);
4932 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
4933 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
4934 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
4935 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
4936 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
4937 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
4939 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
4940 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
4941 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
4942 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
4943 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
4944 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
4945 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
4947 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
4948 tw32_f(MAC_MODE, tp->mac_mode);
4949 udelay(40);
4951 tp->tx_mode &= ~TX_MODE_ENABLE;
4952 tw32_f(MAC_TX_MODE, tp->tx_mode);
4954 for (i = 0; i < MAX_WAIT_CNT; i++) {
4955 udelay(100);
4956 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
4957 break;
4959 if (i >= MAX_WAIT_CNT) {
4960 printk(KERN_ERR PFX "tg3_abort_hw timed out for %s, "
4961 "TX_MODE_ENABLE will not clear MAC_TX_MODE=%08x\n",
4962 tp->dev->name, tr32(MAC_TX_MODE));
4963 err |= -ENODEV;
4966 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
4967 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
4968 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
4970 tw32(FTQ_RESET, 0xffffffff);
4971 tw32(FTQ_RESET, 0x00000000);
4973 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
4974 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
4976 if (tp->hw_status)
4977 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
4978 if (tp->hw_stats)
4979 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
4981 return err;
4984 /* tp->lock is held. */
4985 static int tg3_nvram_lock(struct tg3 *tp)
4987 if (tp->tg3_flags & TG3_FLAG_NVRAM) {
4988 int i;
4990 if (tp->nvram_lock_cnt == 0) {
4991 tw32(NVRAM_SWARB, SWARB_REQ_SET1);
4992 for (i = 0; i < 8000; i++) {
4993 if (tr32(NVRAM_SWARB) & SWARB_GNT1)
4994 break;
4995 udelay(20);
4997 if (i == 8000) {
4998 tw32(NVRAM_SWARB, SWARB_REQ_CLR1);
4999 return -ENODEV;
5002 tp->nvram_lock_cnt++;
5004 return 0;
5007 /* tp->lock is held. */
5008 static void tg3_nvram_unlock(struct tg3 *tp)
5010 if (tp->tg3_flags & TG3_FLAG_NVRAM) {
5011 if (tp->nvram_lock_cnt > 0)
5012 tp->nvram_lock_cnt--;
5013 if (tp->nvram_lock_cnt == 0)
5014 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1);
5018 /* tp->lock is held. */
5019 static void tg3_enable_nvram_access(struct tg3 *tp)
5021 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
5022 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
5023 u32 nvaccess = tr32(NVRAM_ACCESS);
5025 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
5029 /* tp->lock is held. */
5030 static void tg3_disable_nvram_access(struct tg3 *tp)
5032 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
5033 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM)) {
5034 u32 nvaccess = tr32(NVRAM_ACCESS);
5036 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
5040 static void tg3_ape_send_event(struct tg3 *tp, u32 event)
5042 int i;
5043 u32 apedata;
5045 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
5046 if (apedata != APE_SEG_SIG_MAGIC)
5047 return;
5049 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
5050 if (apedata != APE_FW_STATUS_READY)
5051 return;
5053 /* Wait for up to 1 millisecond for APE to service previous event. */
5054 for (i = 0; i < 10; i++) {
5055 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
5056 return;
5058 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
5060 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
5061 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
5062 event | APE_EVENT_STATUS_EVENT_PENDING);
5064 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
5066 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
5067 break;
5069 udelay(100);
5072 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
5073 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
5076 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
5078 u32 event;
5079 u32 apedata;
5081 if (!(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE))
5082 return;
5084 switch (kind) {
5085 case RESET_KIND_INIT:
5086 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
5087 APE_HOST_SEG_SIG_MAGIC);
5088 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
5089 APE_HOST_SEG_LEN_MAGIC);
5090 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
5091 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
5092 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
5093 APE_HOST_DRIVER_ID_MAGIC);
5094 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
5095 APE_HOST_BEHAV_NO_PHYLOCK);
5097 event = APE_EVENT_STATUS_STATE_START;
5098 break;
5099 case RESET_KIND_SHUTDOWN:
5100 event = APE_EVENT_STATUS_STATE_UNLOAD;
5101 break;
5102 case RESET_KIND_SUSPEND:
5103 event = APE_EVENT_STATUS_STATE_SUSPEND;
5104 break;
5105 default:
5106 return;
5109 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE;
5111 tg3_ape_send_event(tp, event);
5114 /* tp->lock is held. */
5115 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
5117 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
5118 NIC_SRAM_FIRMWARE_MBOX_MAGIC1);
5120 if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) {
5121 switch (kind) {
5122 case RESET_KIND_INIT:
5123 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5124 DRV_STATE_START);
5125 break;
5127 case RESET_KIND_SHUTDOWN:
5128 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5129 DRV_STATE_UNLOAD);
5130 break;
5132 case RESET_KIND_SUSPEND:
5133 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5134 DRV_STATE_SUSPEND);
5135 break;
5137 default:
5138 break;
5142 if (kind == RESET_KIND_INIT ||
5143 kind == RESET_KIND_SUSPEND)
5144 tg3_ape_driver_state_change(tp, kind);
5147 /* tp->lock is held. */
5148 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
5150 if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) {
5151 switch (kind) {
5152 case RESET_KIND_INIT:
5153 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5154 DRV_STATE_START_DONE);
5155 break;
5157 case RESET_KIND_SHUTDOWN:
5158 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5159 DRV_STATE_UNLOAD_DONE);
5160 break;
5162 default:
5163 break;
5167 if (kind == RESET_KIND_SHUTDOWN)
5168 tg3_ape_driver_state_change(tp, kind);
5171 /* tp->lock is held. */
5172 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
5174 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
5175 switch (kind) {
5176 case RESET_KIND_INIT:
5177 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5178 DRV_STATE_START);
5179 break;
5181 case RESET_KIND_SHUTDOWN:
5182 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5183 DRV_STATE_UNLOAD);
5184 break;
5186 case RESET_KIND_SUSPEND:
5187 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
5188 DRV_STATE_SUSPEND);
5189 break;
5191 default:
5192 break;
5197 static int tg3_poll_fw(struct tg3 *tp)
5199 int i;
5200 u32 val;
5202 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
5203 /* Wait up to 20ms for init done. */
5204 for (i = 0; i < 200; i++) {
5205 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE)
5206 return 0;
5207 udelay(100);
5209 return -ENODEV;
5212 /* Wait for firmware initialization to complete. */
5213 for (i = 0; i < 100000; i++) {
5214 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
5215 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
5216 break;
5217 udelay(10);
5220 /* Chip might not be fitted with firmware. Some Sun onboard
5221 * parts are configured like that. So don't signal the timeout
5222 * of the above loop as an error, but do report the lack of
5223 * running firmware once.
5225 if (i >= 100000 &&
5226 !(tp->tg3_flags2 & TG3_FLG2_NO_FWARE_REPORTED)) {
5227 tp->tg3_flags2 |= TG3_FLG2_NO_FWARE_REPORTED;
5229 printk(KERN_INFO PFX "%s: No firmware running.\n",
5230 tp->dev->name);
5233 return 0;
5236 /* Save PCI command register before chip reset */
5237 static void tg3_save_pci_state(struct tg3 *tp)
5239 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
5242 /* Restore PCI state after chip reset */
5243 static void tg3_restore_pci_state(struct tg3 *tp)
5245 u32 val;
5247 /* Re-enable indirect register accesses. */
5248 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
5249 tp->misc_host_ctrl);
5251 /* Set MAX PCI retry to zero. */
5252 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE);
5253 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
5254 (tp->tg3_flags & TG3_FLAG_PCIX_MODE))
5255 val |= PCISTATE_RETRY_SAME_DMA;
5256 /* Allow reads and writes to the APE register and memory space. */
5257 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE)
5258 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
5259 PCISTATE_ALLOW_APE_SHMEM_WR;
5260 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
5262 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
5264 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)
5265 pcie_set_readrq(tp->pdev, 4096);
5266 else {
5267 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
5268 tp->pci_cacheline_sz);
5269 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
5270 tp->pci_lat_timer);
5273 /* Make sure PCI-X relaxed ordering bit is clear. */
5274 if (tp->pcix_cap) {
5275 u16 pcix_cmd;
5277 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
5278 &pcix_cmd);
5279 pcix_cmd &= ~PCI_X_CMD_ERO;
5280 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
5281 pcix_cmd);
5284 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) {
5286 /* Chip reset on 5780 will reset MSI enable bit,
5287 * so need to restore it.
5289 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
5290 u16 ctrl;
5292 pci_read_config_word(tp->pdev,
5293 tp->msi_cap + PCI_MSI_FLAGS,
5294 &ctrl);
5295 pci_write_config_word(tp->pdev,
5296 tp->msi_cap + PCI_MSI_FLAGS,
5297 ctrl | PCI_MSI_FLAGS_ENABLE);
5298 val = tr32(MSGINT_MODE);
5299 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE);
5304 static void tg3_stop_fw(struct tg3 *);
5306 /* tp->lock is held. */
5307 static int tg3_chip_reset(struct tg3 *tp)
5309 u32 val;
5310 void (*write_op)(struct tg3 *, u32, u32);
5311 int err;
5313 tg3_nvram_lock(tp);
5315 /* No matching tg3_nvram_unlock() after this because
5316 * chip reset below will undo the nvram lock.
5318 tp->nvram_lock_cnt = 0;
5320 /* GRC_MISC_CFG core clock reset will clear the memory
5321 * enable bit in PCI register 4 and the MSI enable bit
5322 * on some chips, so we save relevant registers here.
5324 tg3_save_pci_state(tp);
5326 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
5327 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
5328 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
5329 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
5330 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
5331 tw32(GRC_FASTBOOT_PC, 0);
5334 * We must avoid the readl() that normally takes place.
5335 * It locks machines, causes machine checks, and other
5336 * fun things. So, temporarily disable the 5701
5337 * hardware workaround, while we do the reset.
5339 write_op = tp->write32;
5340 if (write_op == tg3_write_flush_reg32)
5341 tp->write32 = tg3_write32;
5343 /* Prevent the irq handler from reading or writing PCI registers
5344 * during chip reset when the memory enable bit in the PCI command
5345 * register may be cleared. The chip does not generate interrupt
5346 * at this time, but the irq handler may still be called due to irq
5347 * sharing or irqpoll.
5349 tp->tg3_flags |= TG3_FLAG_CHIP_RESETTING;
5350 if (tp->hw_status) {
5351 tp->hw_status->status = 0;
5352 tp->hw_status->status_tag = 0;
5354 tp->last_tag = 0;
5355 smp_mb();
5356 synchronize_irq(tp->pdev->irq);
5358 /* do the reset */
5359 val = GRC_MISC_CFG_CORECLK_RESET;
5361 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
5362 if (tr32(0x7e2c) == 0x60) {
5363 tw32(0x7e2c, 0x20);
5365 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
5366 tw32(GRC_MISC_CFG, (1 << 29));
5367 val |= (1 << 29);
5371 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
5372 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET);
5373 tw32(GRC_VCPU_EXT_CTRL,
5374 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU);
5377 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
5378 val |= GRC_MISC_CFG_KEEP_GPHY_POWER;
5379 tw32(GRC_MISC_CFG, val);
5381 /* restore 5701 hardware bug workaround write method */
5382 tp->write32 = write_op;
5384 /* Unfortunately, we have to delay before the PCI read back.
5385 * Some 575X chips even will not respond to a PCI cfg access
5386 * when the reset command is given to the chip.
5388 * How do these hardware designers expect things to work
5389 * properly if the PCI write is posted for a long period
5390 * of time? It is always necessary to have some method by
5391 * which a register read back can occur to push the write
5392 * out which does the reset.
5394 * For most tg3 variants the trick below was working.
5395 * Ho hum...
5397 udelay(120);
5399 /* Flush PCI posted writes. The normal MMIO registers
5400 * are inaccessible at this time so this is the only
5401 * way to make this reliably (actually, this is no longer
5402 * the case, see above). I tried to use indirect
5403 * register read/write but this upset some 5701 variants.
5405 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
5407 udelay(120);
5409 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
5410 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
5411 int i;
5412 u32 cfg_val;
5414 /* Wait for link training to complete. */
5415 for (i = 0; i < 5000; i++)
5416 udelay(100);
5418 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
5419 pci_write_config_dword(tp->pdev, 0xc4,
5420 cfg_val | (1 << 15));
5422 /* Set PCIE max payload size and clear error status. */
5423 pci_write_config_dword(tp->pdev, 0xd8, 0xf5000);
5426 tg3_restore_pci_state(tp);
5428 tp->tg3_flags &= ~TG3_FLAG_CHIP_RESETTING;
5430 val = 0;
5431 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
5432 val = tr32(MEMARB_MODE);
5433 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
5435 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
5436 tg3_stop_fw(tp);
5437 tw32(0x5000, 0x400);
5440 tw32(GRC_MODE, tp->grc_mode);
5442 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
5443 val = tr32(0xc4);
5445 tw32(0xc4, val | (1 << 15));
5448 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
5449 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
5450 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE;
5451 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0)
5452 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN;
5453 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
5456 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
5457 tp->mac_mode = MAC_MODE_PORT_MODE_TBI;
5458 tw32_f(MAC_MODE, tp->mac_mode);
5459 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
5460 tp->mac_mode = MAC_MODE_PORT_MODE_GMII;
5461 tw32_f(MAC_MODE, tp->mac_mode);
5462 } else
5463 tw32_f(MAC_MODE, 0);
5464 udelay(40);
5466 err = tg3_poll_fw(tp);
5467 if (err)
5468 return err;
5470 if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
5471 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
5472 val = tr32(0x7c00);
5474 tw32(0x7c00, val | (1 << 25));
5477 /* Reprobe ASF enable state. */
5478 tp->tg3_flags &= ~TG3_FLAG_ENABLE_ASF;
5479 tp->tg3_flags2 &= ~TG3_FLG2_ASF_NEW_HANDSHAKE;
5480 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
5481 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
5482 u32 nic_cfg;
5484 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
5485 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
5486 tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
5487 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
5488 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
5492 return 0;
5495 /* tp->lock is held. */
5496 static void tg3_stop_fw(struct tg3 *tp)
5498 if ((tp->tg3_flags & TG3_FLAG_ENABLE_ASF) &&
5499 !(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE)) {
5500 u32 val;
5501 int i;
5503 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
5504 val = tr32(GRC_RX_CPU_EVENT);
5505 val |= (1 << 14);
5506 tw32(GRC_RX_CPU_EVENT, val);
5508 /* Wait for RX cpu to ACK the event. */
5509 for (i = 0; i < 100; i++) {
5510 if (!(tr32(GRC_RX_CPU_EVENT) & (1 << 14)))
5511 break;
5512 udelay(1);
5517 /* tp->lock is held. */
5518 static int tg3_halt(struct tg3 *tp, int kind, int silent)
5520 int err;
5522 tg3_stop_fw(tp);
5524 tg3_write_sig_pre_reset(tp, kind);
5526 tg3_abort_hw(tp, silent);
5527 err = tg3_chip_reset(tp);
5529 tg3_write_sig_legacy(tp, kind);
5530 tg3_write_sig_post_reset(tp, kind);
5532 if (err)
5533 return err;
5535 return 0;
5538 #define TG3_FW_RELEASE_MAJOR 0x0
5539 #define TG3_FW_RELASE_MINOR 0x0
5540 #define TG3_FW_RELEASE_FIX 0x0
5541 #define TG3_FW_START_ADDR 0x08000000
5542 #define TG3_FW_TEXT_ADDR 0x08000000
5543 #define TG3_FW_TEXT_LEN 0x9c0
5544 #define TG3_FW_RODATA_ADDR 0x080009c0
5545 #define TG3_FW_RODATA_LEN 0x60
5546 #define TG3_FW_DATA_ADDR 0x08000a40
5547 #define TG3_FW_DATA_LEN 0x20
5548 #define TG3_FW_SBSS_ADDR 0x08000a60
5549 #define TG3_FW_SBSS_LEN 0xc
5550 #define TG3_FW_BSS_ADDR 0x08000a70
5551 #define TG3_FW_BSS_LEN 0x10
5553 static const u32 tg3FwText[(TG3_FW_TEXT_LEN / sizeof(u32)) + 1] = {
5554 0x00000000, 0x10000003, 0x00000000, 0x0000000d, 0x0000000d, 0x3c1d0800,
5555 0x37bd3ffc, 0x03a0f021, 0x3c100800, 0x26100000, 0x0e000018, 0x00000000,
5556 0x0000000d, 0x3c1d0800, 0x37bd3ffc, 0x03a0f021, 0x3c100800, 0x26100034,
5557 0x0e00021c, 0x00000000, 0x0000000d, 0x00000000, 0x00000000, 0x00000000,
5558 0x27bdffe0, 0x3c1cc000, 0xafbf0018, 0xaf80680c, 0x0e00004c, 0x241b2105,
5559 0x97850000, 0x97870002, 0x9782002c, 0x9783002e, 0x3c040800, 0x248409c0,
5560 0xafa00014, 0x00021400, 0x00621825, 0x00052c00, 0xafa30010, 0x8f860010,
5561 0x00e52825, 0x0e000060, 0x24070102, 0x3c02ac00, 0x34420100, 0x3c03ac01,
5562 0x34630100, 0xaf820490, 0x3c02ffff, 0xaf820494, 0xaf830498, 0xaf82049c,
5563 0x24020001, 0xaf825ce0, 0x0e00003f, 0xaf825d00, 0x0e000140, 0x00000000,
5564 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x2402ffff, 0xaf825404, 0x8f835400,
5565 0x34630400, 0xaf835400, 0xaf825404, 0x3c020800, 0x24420034, 0xaf82541c,
5566 0x03e00008, 0xaf805400, 0x00000000, 0x00000000, 0x3c020800, 0x34423000,
5567 0x3c030800, 0x34633000, 0x3c040800, 0x348437ff, 0x3c010800, 0xac220a64,
5568 0x24020040, 0x3c010800, 0xac220a68, 0x3c010800, 0xac200a60, 0xac600000,
5569 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000,
5570 0x00804821, 0x8faa0010, 0x3c020800, 0x8c420a60, 0x3c040800, 0x8c840a68,
5571 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010800, 0xac230a60, 0x14400003,
5572 0x00004021, 0x3c010800, 0xac200a60, 0x3c020800, 0x8c420a60, 0x3c030800,
5573 0x8c630a64, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001,
5574 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020800, 0x8c420a60,
5575 0x3c030800, 0x8c630a64, 0x8f84680c, 0x00021140, 0x00431021, 0xac440008,
5576 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c,
5577 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5578 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5579 0, 0, 0, 0, 0, 0,
5580 0x02000008, 0x00000000, 0x0a0001e3, 0x3c0a0001, 0x0a0001e3, 0x3c0a0002,
5581 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5582 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5583 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5584 0x0a0001e3, 0x3c0a0007, 0x0a0001e3, 0x3c0a0008, 0x0a0001e3, 0x3c0a0009,
5585 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a000b,
5586 0x0a0001e3, 0x3c0a000c, 0x0a0001e3, 0x3c0a000d, 0x0a0001e3, 0x00000000,
5587 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a000e, 0x0a0001e3, 0x00000000,
5588 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5589 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x00000000,
5590 0x0a0001e3, 0x00000000, 0x0a0001e3, 0x3c0a0013, 0x0a0001e3, 0x3c0a0014,
5591 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5592 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5593 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5594 0x27bdffe0, 0x00001821, 0x00001021, 0xafbf0018, 0xafb10014, 0xafb00010,
5595 0x3c010800, 0x00220821, 0xac200a70, 0x3c010800, 0x00220821, 0xac200a74,
5596 0x3c010800, 0x00220821, 0xac200a78, 0x24630001, 0x1860fff5, 0x2442000c,
5597 0x24110001, 0x8f906810, 0x32020004, 0x14400005, 0x24040001, 0x3c020800,
5598 0x8c420a78, 0x18400003, 0x00002021, 0x0e000182, 0x00000000, 0x32020001,
5599 0x10400003, 0x00000000, 0x0e000169, 0x00000000, 0x0a000153, 0xaf915028,
5600 0x8fbf0018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020, 0x3c050800,
5601 0x8ca50a70, 0x3c060800, 0x8cc60a80, 0x3c070800, 0x8ce70a78, 0x27bdffe0,
5602 0x3c040800, 0x248409d0, 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014,
5603 0x0e00017b, 0x00002021, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x24020001,
5604 0x8f836810, 0x00821004, 0x00021027, 0x00621824, 0x03e00008, 0xaf836810,
5605 0x27bdffd8, 0xafbf0024, 0x1080002e, 0xafb00020, 0x8f825cec, 0xafa20018,
5606 0x8f825cec, 0x3c100800, 0x26100a78, 0xafa2001c, 0x34028000, 0xaf825cec,
5607 0x8e020000, 0x18400016, 0x00000000, 0x3c020800, 0x94420a74, 0x8fa3001c,
5608 0x000221c0, 0xac830004, 0x8fa2001c, 0x3c010800, 0x0e000201, 0xac220a74,
5609 0x10400005, 0x00000000, 0x8e020000, 0x24420001, 0x0a0001df, 0xae020000,
5610 0x3c020800, 0x8c420a70, 0x00021c02, 0x000321c0, 0x0a0001c5, 0xafa2001c,
5611 0x0e000201, 0x00000000, 0x1040001f, 0x00000000, 0x8e020000, 0x8fa3001c,
5612 0x24420001, 0x3c010800, 0xac230a70, 0x3c010800, 0xac230a74, 0x0a0001df,
5613 0xae020000, 0x3c100800, 0x26100a78, 0x8e020000, 0x18400028, 0x00000000,
5614 0x0e000201, 0x00000000, 0x14400024, 0x00000000, 0x8e020000, 0x3c030800,
5615 0x8c630a70, 0x2442ffff, 0xafa3001c, 0x18400006, 0xae020000, 0x00031402,
5616 0x000221c0, 0x8c820004, 0x3c010800, 0xac220a70, 0x97a2001e, 0x2442ff00,
5617 0x2c420300, 0x1440000b, 0x24024000, 0x3c040800, 0x248409dc, 0xafa00010,
5618 0xafa00014, 0x8fa6001c, 0x24050008, 0x0e000060, 0x00003821, 0x0a0001df,
5619 0x00000000, 0xaf825cf8, 0x3c020800, 0x8c420a40, 0x8fa3001c, 0x24420001,
5620 0xaf835cf8, 0x3c010800, 0xac220a40, 0x8fbf0024, 0x8fb00020, 0x03e00008,
5621 0x27bd0028, 0x27bdffe0, 0x3c040800, 0x248409e8, 0x00002821, 0x00003021,
5622 0x00003821, 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014, 0x8fbf0018,
5623 0x03e00008, 0x27bd0020, 0x8f82680c, 0x8f85680c, 0x00021827, 0x0003182b,
5624 0x00031823, 0x00431024, 0x00441021, 0x00a2282b, 0x10a00006, 0x00000000,
5625 0x00401821, 0x8f82680c, 0x0043102b, 0x1440fffd, 0x00000000, 0x03e00008,
5626 0x00000000, 0x3c040800, 0x8c840000, 0x3c030800, 0x8c630a40, 0x0064102b,
5627 0x54400002, 0x00831023, 0x00641023, 0x2c420008, 0x03e00008, 0x38420001,
5628 0x27bdffe0, 0x00802821, 0x3c040800, 0x24840a00, 0x00003021, 0x00003821,
5629 0xafbf0018, 0xafa00010, 0x0e000060, 0xafa00014, 0x0a000216, 0x00000000,
5630 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000, 0x27bdffe0, 0x3c1cc000,
5631 0xafbf0018, 0x0e00004c, 0xaf80680c, 0x3c040800, 0x24840a10, 0x03802821,
5632 0x00003021, 0x00003821, 0xafa00010, 0x0e000060, 0xafa00014, 0x2402ffff,
5633 0xaf825404, 0x3c0200aa, 0x0e000234, 0xaf825434, 0x8fbf0018, 0x03e00008,
5634 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe8, 0xafb00010,
5635 0x24100001, 0xafbf0014, 0x3c01c003, 0xac200000, 0x8f826810, 0x30422000,
5636 0x10400003, 0x00000000, 0x0e000246, 0x00000000, 0x0a00023a, 0xaf905428,
5637 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x27bdfff8, 0x8f845d0c,
5638 0x3c0200ff, 0x3c030800, 0x8c630a50, 0x3442fff8, 0x00821024, 0x1043001e,
5639 0x3c0500ff, 0x34a5fff8, 0x3c06c003, 0x3c074000, 0x00851824, 0x8c620010,
5640 0x3c010800, 0xac230a50, 0x30420008, 0x10400005, 0x00871025, 0x8cc20000,
5641 0x24420001, 0xacc20000, 0x00871025, 0xaf825d0c, 0x8fa20000, 0x24420001,
5642 0xafa20000, 0x8fa20000, 0x8fa20000, 0x24420001, 0xafa20000, 0x8fa20000,
5643 0x8f845d0c, 0x3c030800, 0x8c630a50, 0x00851024, 0x1443ffe8, 0x00851824,
5644 0x27bd0008, 0x03e00008, 0x00000000, 0x00000000, 0x00000000
5647 static const u32 tg3FwRodata[(TG3_FW_RODATA_LEN / sizeof(u32)) + 1] = {
5648 0x35373031, 0x726c7341, 0x00000000, 0x00000000, 0x53774576, 0x656e7430,
5649 0x00000000, 0x726c7045, 0x76656e74, 0x31000000, 0x556e6b6e, 0x45766e74,
5650 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66617461, 0x6c457272,
5651 0x00000000, 0x00000000, 0x4d61696e, 0x43707542, 0x00000000, 0x00000000,
5652 0x00000000
5655 #if 0 /* All zeros, don't eat up space with it. */
5656 u32 tg3FwData[(TG3_FW_DATA_LEN / sizeof(u32)) + 1] = {
5657 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
5658 0x00000000, 0x00000000, 0x00000000, 0x00000000
5660 #endif
5662 #define RX_CPU_SCRATCH_BASE 0x30000
5663 #define RX_CPU_SCRATCH_SIZE 0x04000
5664 #define TX_CPU_SCRATCH_BASE 0x34000
5665 #define TX_CPU_SCRATCH_SIZE 0x04000
5667 /* tp->lock is held. */
5668 static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
5670 int i;
5672 BUG_ON(offset == TX_CPU_BASE &&
5673 (tp->tg3_flags2 & TG3_FLG2_5705_PLUS));
5675 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
5676 u32 val = tr32(GRC_VCPU_EXT_CTRL);
5678 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU);
5679 return 0;
5681 if (offset == RX_CPU_BASE) {
5682 for (i = 0; i < 10000; i++) {
5683 tw32(offset + CPU_STATE, 0xffffffff);
5684 tw32(offset + CPU_MODE, CPU_MODE_HALT);
5685 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
5686 break;
5689 tw32(offset + CPU_STATE, 0xffffffff);
5690 tw32_f(offset + CPU_MODE, CPU_MODE_HALT);
5691 udelay(10);
5692 } else {
5693 for (i = 0; i < 10000; i++) {
5694 tw32(offset + CPU_STATE, 0xffffffff);
5695 tw32(offset + CPU_MODE, CPU_MODE_HALT);
5696 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
5697 break;
5701 if (i >= 10000) {
5702 printk(KERN_ERR PFX "tg3_reset_cpu timed out for %s, "
5703 "and %s CPU\n",
5704 tp->dev->name,
5705 (offset == RX_CPU_BASE ? "RX" : "TX"));
5706 return -ENODEV;
5709 /* Clear firmware's nvram arbitration. */
5710 if (tp->tg3_flags & TG3_FLAG_NVRAM)
5711 tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
5712 return 0;
5715 struct fw_info {
5716 unsigned int text_base;
5717 unsigned int text_len;
5718 const u32 *text_data;
5719 unsigned int rodata_base;
5720 unsigned int rodata_len;
5721 const u32 *rodata_data;
5722 unsigned int data_base;
5723 unsigned int data_len;
5724 const u32 *data_data;
5727 /* tp->lock is held. */
5728 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, u32 cpu_scratch_base,
5729 int cpu_scratch_size, struct fw_info *info)
5731 int err, lock_err, i;
5732 void (*write_op)(struct tg3 *, u32, u32);
5734 if (cpu_base == TX_CPU_BASE &&
5735 (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
5736 printk(KERN_ERR PFX "tg3_load_firmware_cpu: Trying to load "
5737 "TX cpu firmware on %s which is 5705.\n",
5738 tp->dev->name);
5739 return -EINVAL;
5742 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
5743 write_op = tg3_write_mem;
5744 else
5745 write_op = tg3_write_indirect_reg32;
5747 /* It is possible that bootcode is still loading at this point.
5748 * Get the nvram lock first before halting the cpu.
5750 lock_err = tg3_nvram_lock(tp);
5751 err = tg3_halt_cpu(tp, cpu_base);
5752 if (!lock_err)
5753 tg3_nvram_unlock(tp);
5754 if (err)
5755 goto out;
5757 for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
5758 write_op(tp, cpu_scratch_base + i, 0);
5759 tw32(cpu_base + CPU_STATE, 0xffffffff);
5760 tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
5761 for (i = 0; i < (info->text_len / sizeof(u32)); i++)
5762 write_op(tp, (cpu_scratch_base +
5763 (info->text_base & 0xffff) +
5764 (i * sizeof(u32))),
5765 (info->text_data ?
5766 info->text_data[i] : 0));
5767 for (i = 0; i < (info->rodata_len / sizeof(u32)); i++)
5768 write_op(tp, (cpu_scratch_base +
5769 (info->rodata_base & 0xffff) +
5770 (i * sizeof(u32))),
5771 (info->rodata_data ?
5772 info->rodata_data[i] : 0));
5773 for (i = 0; i < (info->data_len / sizeof(u32)); i++)
5774 write_op(tp, (cpu_scratch_base +
5775 (info->data_base & 0xffff) +
5776 (i * sizeof(u32))),
5777 (info->data_data ?
5778 info->data_data[i] : 0));
5780 err = 0;
5782 out:
5783 return err;
5786 /* tp->lock is held. */
5787 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
5789 struct fw_info info;
5790 int err, i;
5792 info.text_base = TG3_FW_TEXT_ADDR;
5793 info.text_len = TG3_FW_TEXT_LEN;
5794 info.text_data = &tg3FwText[0];
5795 info.rodata_base = TG3_FW_RODATA_ADDR;
5796 info.rodata_len = TG3_FW_RODATA_LEN;
5797 info.rodata_data = &tg3FwRodata[0];
5798 info.data_base = TG3_FW_DATA_ADDR;
5799 info.data_len = TG3_FW_DATA_LEN;
5800 info.data_data = NULL;
5802 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
5803 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE,
5804 &info);
5805 if (err)
5806 return err;
5808 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
5809 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE,
5810 &info);
5811 if (err)
5812 return err;
5814 /* Now startup only the RX cpu. */
5815 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5816 tw32_f(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
5818 for (i = 0; i < 5; i++) {
5819 if (tr32(RX_CPU_BASE + CPU_PC) == TG3_FW_TEXT_ADDR)
5820 break;
5821 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5822 tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT);
5823 tw32_f(RX_CPU_BASE + CPU_PC, TG3_FW_TEXT_ADDR);
5824 udelay(1000);
5826 if (i >= 5) {
5827 printk(KERN_ERR PFX "tg3_load_firmware fails for %s "
5828 "to set RX CPU PC, is %08x should be %08x\n",
5829 tp->dev->name, tr32(RX_CPU_BASE + CPU_PC),
5830 TG3_FW_TEXT_ADDR);
5831 return -ENODEV;
5833 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
5834 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000);
5836 return 0;
5840 #define TG3_TSO_FW_RELEASE_MAJOR 0x1
5841 #define TG3_TSO_FW_RELASE_MINOR 0x6
5842 #define TG3_TSO_FW_RELEASE_FIX 0x0
5843 #define TG3_TSO_FW_START_ADDR 0x08000000
5844 #define TG3_TSO_FW_TEXT_ADDR 0x08000000
5845 #define TG3_TSO_FW_TEXT_LEN 0x1aa0
5846 #define TG3_TSO_FW_RODATA_ADDR 0x08001aa0
5847 #define TG3_TSO_FW_RODATA_LEN 0x60
5848 #define TG3_TSO_FW_DATA_ADDR 0x08001b20
5849 #define TG3_TSO_FW_DATA_LEN 0x30
5850 #define TG3_TSO_FW_SBSS_ADDR 0x08001b50
5851 #define TG3_TSO_FW_SBSS_LEN 0x2c
5852 #define TG3_TSO_FW_BSS_ADDR 0x08001b80
5853 #define TG3_TSO_FW_BSS_LEN 0x894
5855 static const u32 tg3TsoFwText[(TG3_TSO_FW_TEXT_LEN / 4) + 1] = {
5856 0x0e000003, 0x00000000, 0x08001b24, 0x00000000, 0x10000003, 0x00000000,
5857 0x0000000d, 0x0000000d, 0x3c1d0800, 0x37bd4000, 0x03a0f021, 0x3c100800,
5858 0x26100000, 0x0e000010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe,
5859 0xafbf0018, 0x0e0005d8, 0x34840002, 0x0e000668, 0x00000000, 0x3c030800,
5860 0x90631b68, 0x24020002, 0x3c040800, 0x24841aac, 0x14620003, 0x24050001,
5861 0x3c040800, 0x24841aa0, 0x24060006, 0x00003821, 0xafa00010, 0x0e00067c,
5862 0xafa00014, 0x8f625c50, 0x34420001, 0xaf625c50, 0x8f625c90, 0x34420001,
5863 0xaf625c90, 0x2402ffff, 0x0e000034, 0xaf625404, 0x8fbf0018, 0x03e00008,
5864 0x27bd0020, 0x00000000, 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c,
5865 0xafb20018, 0xafb10014, 0x0e00005b, 0xafb00010, 0x24120002, 0x24110001,
5866 0x8f706820, 0x32020100, 0x10400003, 0x00000000, 0x0e0000bb, 0x00000000,
5867 0x8f706820, 0x32022000, 0x10400004, 0x32020001, 0x0e0001f0, 0x24040001,
5868 0x32020001, 0x10400003, 0x00000000, 0x0e0000a3, 0x00000000, 0x3c020800,
5869 0x90421b98, 0x14520003, 0x00000000, 0x0e0004c0, 0x00000000, 0x0a00003c,
5870 0xaf715028, 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008,
5871 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ac0, 0x00002821, 0x00003021,
5872 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x3c040800,
5873 0x248423d8, 0xa4800000, 0x3c010800, 0xa0201b98, 0x3c010800, 0xac201b9c,
5874 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac,
5875 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bbc, 0x8f624434, 0x3c010800,
5876 0xac221b88, 0x8f624438, 0x3c010800, 0xac221b8c, 0x8f624410, 0xac80f7a8,
5877 0x3c010800, 0xac201b84, 0x3c010800, 0xac2023e0, 0x3c010800, 0xac2023c8,
5878 0x3c010800, 0xac2023cc, 0x3c010800, 0xac202400, 0x3c010800, 0xac221b90,
5879 0x8f620068, 0x24030007, 0x00021702, 0x10430005, 0x00000000, 0x8f620068,
5880 0x00021702, 0x14400004, 0x24020001, 0x3c010800, 0x0a000097, 0xac20240c,
5881 0xac820034, 0x3c040800, 0x24841acc, 0x3c050800, 0x8ca5240c, 0x00003021,
5882 0x00003821, 0xafa00010, 0x0e00067c, 0xafa00014, 0x8fbf0018, 0x03e00008,
5883 0x27bd0020, 0x27bdffe0, 0x3c040800, 0x24841ad8, 0x00002821, 0x00003021,
5884 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014, 0x0e00005b,
5885 0x00000000, 0x0e0000b4, 0x00002021, 0x8fbf0018, 0x03e00008, 0x27bd0020,
5886 0x24020001, 0x8f636820, 0x00821004, 0x00021027, 0x00621824, 0x03e00008,
5887 0xaf636820, 0x27bdffd0, 0xafbf002c, 0xafb60028, 0xafb50024, 0xafb40020,
5888 0xafb3001c, 0xafb20018, 0xafb10014, 0xafb00010, 0x8f675c5c, 0x3c030800,
5889 0x24631bbc, 0x8c620000, 0x14470005, 0x3c0200ff, 0x3c020800, 0x90421b98,
5890 0x14400119, 0x3c0200ff, 0x3442fff8, 0x00e28824, 0xac670000, 0x00111902,
5891 0x306300ff, 0x30e20003, 0x000211c0, 0x00622825, 0x00a04021, 0x00071602,
5892 0x3c030800, 0x90631b98, 0x3044000f, 0x14600036, 0x00804821, 0x24020001,
5893 0x3c010800, 0xa0221b98, 0x00051100, 0x00821025, 0x3c010800, 0xac201b9c,
5894 0x3c010800, 0xac201ba0, 0x3c010800, 0xac201ba4, 0x3c010800, 0xac201bac,
5895 0x3c010800, 0xac201bb8, 0x3c010800, 0xac201bb0, 0x3c010800, 0xac201bb4,
5896 0x3c010800, 0xa42223d8, 0x9622000c, 0x30437fff, 0x3c010800, 0xa4222410,
5897 0x30428000, 0x3c010800, 0xa4231bc6, 0x10400005, 0x24020001, 0x3c010800,
5898 0xac2223f4, 0x0a000102, 0x2406003e, 0x24060036, 0x3c010800, 0xac2023f4,
5899 0x9622000a, 0x3c030800, 0x94631bc6, 0x3c010800, 0xac2023f0, 0x3c010800,
5900 0xac2023f8, 0x00021302, 0x00021080, 0x00c21021, 0x00621821, 0x3c010800,
5901 0xa42223d0, 0x3c010800, 0x0a000115, 0xa4231b96, 0x9622000c, 0x3c010800,
5902 0xa42223ec, 0x3c040800, 0x24841b9c, 0x8c820000, 0x00021100, 0x3c010800,
5903 0x00220821, 0xac311bc8, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821,
5904 0xac271bcc, 0x8c820000, 0x25030001, 0x306601ff, 0x00021100, 0x3c010800,
5905 0x00220821, 0xac261bd0, 0x8c820000, 0x00021100, 0x3c010800, 0x00220821,
5906 0xac291bd4, 0x96230008, 0x3c020800, 0x8c421bac, 0x00432821, 0x3c010800,
5907 0xac251bac, 0x9622000a, 0x30420004, 0x14400018, 0x00061100, 0x8f630c14,
5908 0x3063000f, 0x2c620002, 0x1440000b, 0x3c02c000, 0x8f630c14, 0x3c020800,
5909 0x8c421b40, 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002,
5910 0x1040fff7, 0x3c02c000, 0x00e21825, 0xaf635c5c, 0x8f625c50, 0x30420002,
5911 0x10400014, 0x00000000, 0x0a000147, 0x00000000, 0x3c030800, 0x8c631b80,
5912 0x3c040800, 0x94841b94, 0x01221025, 0x3c010800, 0xa42223da, 0x24020001,
5913 0x3c010800, 0xac221bb8, 0x24630001, 0x0085202a, 0x3c010800, 0x10800003,
5914 0xac231b80, 0x3c010800, 0xa4251b94, 0x3c060800, 0x24c61b9c, 0x8cc20000,
5915 0x24420001, 0xacc20000, 0x28420080, 0x14400005, 0x00000000, 0x0e000656,
5916 0x24040002, 0x0a0001e6, 0x00000000, 0x3c020800, 0x8c421bb8, 0x10400078,
5917 0x24020001, 0x3c050800, 0x90a51b98, 0x14a20072, 0x00000000, 0x3c150800,
5918 0x96b51b96, 0x3c040800, 0x8c841bac, 0x32a3ffff, 0x0083102a, 0x1440006c,
5919 0x00000000, 0x14830003, 0x00000000, 0x3c010800, 0xac2523f0, 0x1060005c,
5920 0x00009021, 0x24d60004, 0x0060a021, 0x24d30014, 0x8ec20000, 0x00028100,
5921 0x3c110800, 0x02308821, 0x0e000625, 0x8e311bc8, 0x00402821, 0x10a00054,
5922 0x00000000, 0x9628000a, 0x31020040, 0x10400005, 0x2407180c, 0x8e22000c,
5923 0x2407188c, 0x00021400, 0xaca20018, 0x3c030800, 0x00701821, 0x8c631bd0,
5924 0x3c020800, 0x00501021, 0x8c421bd4, 0x00031d00, 0x00021400, 0x00621825,
5925 0xaca30014, 0x8ec30004, 0x96220008, 0x00432023, 0x3242ffff, 0x3083ffff,
5926 0x00431021, 0x0282102a, 0x14400002, 0x02b23023, 0x00803021, 0x8e620000,
5927 0x30c4ffff, 0x00441021, 0xae620000, 0x8e220000, 0xaca20000, 0x8e220004,
5928 0x8e63fff4, 0x00431021, 0xaca20004, 0xa4a6000e, 0x8e62fff4, 0x00441021,
5929 0xae62fff4, 0x96230008, 0x0043102a, 0x14400005, 0x02469021, 0x8e62fff0,
5930 0xae60fff4, 0x24420001, 0xae62fff0, 0xaca00008, 0x3242ffff, 0x14540008,
5931 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x24020905, 0xa4a2000c,
5932 0x0a0001cb, 0x34e70020, 0xa4a2000c, 0x3c020800, 0x8c4223f0, 0x10400003,
5933 0x3c024b65, 0x0a0001d3, 0x34427654, 0x3c02b49a, 0x344289ab, 0xaca2001c,
5934 0x30e2ffff, 0xaca20010, 0x0e0005a2, 0x00a02021, 0x3242ffff, 0x0054102b,
5935 0x1440ffa9, 0x00000000, 0x24020002, 0x3c010800, 0x0a0001e6, 0xa0221b98,
5936 0x8ec2083c, 0x24420001, 0x0a0001e6, 0xaec2083c, 0x0e0004c0, 0x00000000,
5937 0x8fbf002c, 0x8fb60028, 0x8fb50024, 0x8fb40020, 0x8fb3001c, 0x8fb20018,
5938 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0030, 0x27bdffd0, 0xafbf0028,
5939 0xafb30024, 0xafb20020, 0xafb1001c, 0xafb00018, 0x8f725c9c, 0x3c0200ff,
5940 0x3442fff8, 0x3c070800, 0x24e71bb4, 0x02428824, 0x9623000e, 0x8ce20000,
5941 0x00431021, 0xace20000, 0x8e220010, 0x30420020, 0x14400011, 0x00809821,
5942 0x0e00063b, 0x02202021, 0x3c02c000, 0x02421825, 0xaf635c9c, 0x8f625c90,
5943 0x30420002, 0x1040011e, 0x00000000, 0xaf635c9c, 0x8f625c90, 0x30420002,
5944 0x10400119, 0x00000000, 0x0a00020d, 0x00000000, 0x8e240008, 0x8e230014,
5945 0x00041402, 0x000231c0, 0x00031502, 0x304201ff, 0x2442ffff, 0x3042007f,
5946 0x00031942, 0x30637800, 0x00021100, 0x24424000, 0x00624821, 0x9522000a,
5947 0x3084ffff, 0x30420008, 0x104000b0, 0x000429c0, 0x3c020800, 0x8c422400,
5948 0x14400024, 0x24c50008, 0x94c20014, 0x3c010800, 0xa42223d0, 0x8cc40010,
5949 0x00041402, 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42423d4, 0x94c2000e,
5950 0x3083ffff, 0x00431023, 0x3c010800, 0xac222408, 0x94c2001a, 0x3c010800,
5951 0xac262400, 0x3c010800, 0xac322404, 0x3c010800, 0xac2223fc, 0x3c02c000,
5952 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e5, 0x00000000,
5953 0xaf635c9c, 0x8f625c90, 0x30420002, 0x104000e0, 0x00000000, 0x0a000246,
5954 0x00000000, 0x94c2000e, 0x3c030800, 0x946323d4, 0x00434023, 0x3103ffff,
5955 0x2c620008, 0x1040001c, 0x00000000, 0x94c20014, 0x24420028, 0x00a22821,
5956 0x00031042, 0x1840000b, 0x00002021, 0x24e60848, 0x00403821, 0x94a30000,
5957 0x8cc20000, 0x24840001, 0x00431021, 0xacc20000, 0x0087102a, 0x1440fff9,
5958 0x24a50002, 0x31020001, 0x1040001f, 0x3c024000, 0x3c040800, 0x248423fc,
5959 0xa0a00001, 0x94a30000, 0x8c820000, 0x00431021, 0x0a000285, 0xac820000,
5960 0x8f626800, 0x3c030010, 0x00431024, 0x10400009, 0x00000000, 0x94c2001a,
5961 0x3c030800, 0x8c6323fc, 0x00431021, 0x3c010800, 0xac2223fc, 0x0a000286,
5962 0x3c024000, 0x94c2001a, 0x94c4001c, 0x3c030800, 0x8c6323fc, 0x00441023,
5963 0x00621821, 0x3c010800, 0xac2323fc, 0x3c024000, 0x02421825, 0xaf635c9c,
5964 0x8f625c90, 0x30420002, 0x1440fffc, 0x00000000, 0x9522000a, 0x30420010,
5965 0x1040009b, 0x00000000, 0x3c030800, 0x946323d4, 0x3c070800, 0x24e72400,
5966 0x8ce40000, 0x8f626800, 0x24630030, 0x00832821, 0x3c030010, 0x00431024,
5967 0x1440000a, 0x00000000, 0x94a20004, 0x3c040800, 0x8c842408, 0x3c030800,
5968 0x8c6323fc, 0x00441023, 0x00621821, 0x3c010800, 0xac2323fc, 0x3c040800,
5969 0x8c8423fc, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402, 0x00822021,
5970 0x00041027, 0xa4a20006, 0x3c030800, 0x8c632404, 0x3c0200ff, 0x3442fff8,
5971 0x00628824, 0x96220008, 0x24050001, 0x24034000, 0x000231c0, 0x00801021,
5972 0xa4c2001a, 0xa4c0001c, 0xace00000, 0x3c010800, 0xac251b60, 0xaf635cb8,
5973 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000, 0x3c010800, 0xac201b60,
5974 0x8e220008, 0xaf625cb8, 0x8f625cb0, 0x30420002, 0x10400003, 0x00000000,
5975 0x3c010800, 0xac201b60, 0x3c020800, 0x8c421b60, 0x1040ffec, 0x00000000,
5976 0x3c040800, 0x0e00063b, 0x8c842404, 0x0a00032a, 0x00000000, 0x3c030800,
5977 0x90631b98, 0x24020002, 0x14620003, 0x3c034b65, 0x0a0002e1, 0x00008021,
5978 0x8e22001c, 0x34637654, 0x10430002, 0x24100002, 0x24100001, 0x00c02021,
5979 0x0e000350, 0x02003021, 0x24020003, 0x3c010800, 0xa0221b98, 0x24020002,
5980 0x1202000a, 0x24020001, 0x3c030800, 0x8c6323f0, 0x10620006, 0x00000000,
5981 0x3c020800, 0x944223d8, 0x00021400, 0x0a00031f, 0xae220014, 0x3c040800,
5982 0x248423da, 0x94820000, 0x00021400, 0xae220014, 0x3c020800, 0x8c421bbc,
5983 0x3c03c000, 0x3c010800, 0xa0201b98, 0x00431025, 0xaf625c5c, 0x8f625c50,
5984 0x30420002, 0x10400009, 0x00000000, 0x2484f7e2, 0x8c820000, 0x00431025,
5985 0xaf625c5c, 0x8f625c50, 0x30420002, 0x1440fffa, 0x00000000, 0x3c020800,
5986 0x24421b84, 0x8c430000, 0x24630001, 0xac430000, 0x8f630c14, 0x3063000f,
5987 0x2c620002, 0x1440000c, 0x3c024000, 0x8f630c14, 0x3c020800, 0x8c421b40,
5988 0x3063000f, 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7,
5989 0x00000000, 0x3c024000, 0x02421825, 0xaf635c9c, 0x8f625c90, 0x30420002,
5990 0x1440fffc, 0x00000000, 0x12600003, 0x00000000, 0x0e0004c0, 0x00000000,
5991 0x8fbf0028, 0x8fb30024, 0x8fb20020, 0x8fb1001c, 0x8fb00018, 0x03e00008,
5992 0x27bd0030, 0x8f634450, 0x3c040800, 0x24841b88, 0x8c820000, 0x00031c02,
5993 0x0043102b, 0x14400007, 0x3c038000, 0x8c840004, 0x8f624450, 0x00021c02,
5994 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024,
5995 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3c024000,
5996 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00000000,
5997 0x03e00008, 0x00000000, 0x27bdffe0, 0x00805821, 0x14c00011, 0x256e0008,
5998 0x3c020800, 0x8c4223f4, 0x10400007, 0x24020016, 0x3c010800, 0xa42223d2,
5999 0x2402002a, 0x3c010800, 0x0a000364, 0xa42223d4, 0x8d670010, 0x00071402,
6000 0x3c010800, 0xa42223d2, 0x3c010800, 0xa42723d4, 0x3c040800, 0x948423d4,
6001 0x3c030800, 0x946323d2, 0x95cf0006, 0x3c020800, 0x944223d0, 0x00832023,
6002 0x01e2c023, 0x3065ffff, 0x24a20028, 0x01c24821, 0x3082ffff, 0x14c0001a,
6003 0x01226021, 0x9582000c, 0x3042003f, 0x3c010800, 0xa42223d6, 0x95820004,
6004 0x95830006, 0x3c010800, 0xac2023e4, 0x3c010800, 0xac2023e8, 0x00021400,
6005 0x00431025, 0x3c010800, 0xac221bc0, 0x95220004, 0x3c010800, 0xa4221bc4,
6006 0x95230002, 0x01e51023, 0x0043102a, 0x10400010, 0x24020001, 0x3c010800,
6007 0x0a000398, 0xac2223f8, 0x3c030800, 0x8c6323e8, 0x3c020800, 0x94421bc4,
6008 0x00431021, 0xa5220004, 0x3c020800, 0x94421bc0, 0xa5820004, 0x3c020800,
6009 0x8c421bc0, 0xa5820006, 0x3c020800, 0x8c4223f0, 0x3c0d0800, 0x8dad23e4,
6010 0x3c0a0800, 0x144000e5, 0x8d4a23e8, 0x3c020800, 0x94421bc4, 0x004a1821,
6011 0x3063ffff, 0x0062182b, 0x24020002, 0x10c2000d, 0x01435023, 0x3c020800,
6012 0x944223d6, 0x30420009, 0x10400008, 0x00000000, 0x9582000c, 0x3042fff6,
6013 0xa582000c, 0x3c020800, 0x944223d6, 0x30420009, 0x01a26823, 0x3c020800,
6014 0x8c4223f8, 0x1040004a, 0x01203821, 0x3c020800, 0x944223d2, 0x00004021,
6015 0xa520000a, 0x01e21023, 0xa5220002, 0x3082ffff, 0x00021042, 0x18400008,
6016 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021, 0x0103102a,
6017 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061402,
6018 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021, 0x2527000c,
6019 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004, 0x1440fffb,
6020 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023, 0x01803821,
6021 0x3082ffff, 0xa4e00010, 0x00621821, 0x00021042, 0x18400010, 0x00c33021,
6022 0x00404821, 0x94e20000, 0x24e70002, 0x00c23021, 0x30e2007f, 0x14400006,
6023 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80, 0x00625824, 0x25670008,
6024 0x0109102a, 0x1440fff3, 0x00000000, 0x30820001, 0x10400005, 0x00061c02,
6025 0xa0e00001, 0x94e20000, 0x00c23021, 0x00061c02, 0x30c2ffff, 0x00623021,
6026 0x00061402, 0x00c23021, 0x0a00047d, 0x30c6ffff, 0x24020002, 0x14c20081,
6027 0x00000000, 0x3c020800, 0x8c42240c, 0x14400007, 0x00000000, 0x3c020800,
6028 0x944223d2, 0x95230002, 0x01e21023, 0x10620077, 0x00000000, 0x3c020800,
6029 0x944223d2, 0x01e21023, 0xa5220002, 0x3c020800, 0x8c42240c, 0x1040001a,
6030 0x31e3ffff, 0x8dc70010, 0x3c020800, 0x94421b96, 0x00e04021, 0x00072c02,
6031 0x00aa2021, 0x00431023, 0x00823823, 0x00072402, 0x30e2ffff, 0x00823821,
6032 0x00071027, 0xa522000a, 0x3102ffff, 0x3c040800, 0x948423d4, 0x00453023,
6033 0x00e02821, 0x00641823, 0x006d1821, 0x00c33021, 0x00061c02, 0x30c2ffff,
6034 0x0a00047d, 0x00623021, 0x01203821, 0x00004021, 0x3082ffff, 0x00021042,
6035 0x18400008, 0x00003021, 0x00401821, 0x94e20000, 0x25080001, 0x00c23021,
6036 0x0103102a, 0x1440fffb, 0x24e70002, 0x00061c02, 0x30c2ffff, 0x00623021,
6037 0x00061402, 0x00c23021, 0x00c02821, 0x00061027, 0xa522000a, 0x00003021,
6038 0x2527000c, 0x00004021, 0x94e20000, 0x25080001, 0x00c23021, 0x2d020004,
6039 0x1440fffb, 0x24e70002, 0x95220002, 0x00004021, 0x91230009, 0x00442023,
6040 0x01803821, 0x3082ffff, 0xa4e00010, 0x3c040800, 0x948423d4, 0x00621821,
6041 0x00c33021, 0x00061c02, 0x30c2ffff, 0x00623021, 0x00061c02, 0x3c020800,
6042 0x944223d0, 0x00c34821, 0x00441023, 0x00021fc2, 0x00431021, 0x00021043,
6043 0x18400010, 0x00003021, 0x00402021, 0x94e20000, 0x24e70002, 0x00c23021,
6044 0x30e2007f, 0x14400006, 0x25080001, 0x8d630000, 0x3c02007f, 0x3442ff80,
6045 0x00625824, 0x25670008, 0x0104102a, 0x1440fff3, 0x00000000, 0x3c020800,
6046 0x944223ec, 0x00c23021, 0x3122ffff, 0x00c23021, 0x00061c02, 0x30c2ffff,
6047 0x00623021, 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010,
6048 0xadc00014, 0x0a00049d, 0xadc00000, 0x8dc70010, 0x00e04021, 0x11400007,
6049 0x00072c02, 0x00aa3021, 0x00061402, 0x30c3ffff, 0x00433021, 0x00061402,
6050 0x00c22821, 0x00051027, 0xa522000a, 0x3c030800, 0x946323d4, 0x3102ffff,
6051 0x01e21021, 0x00433023, 0x00cd3021, 0x00061c02, 0x30c2ffff, 0x00623021,
6052 0x00061402, 0x00c23021, 0x00c04021, 0x00061027, 0xa5820010, 0x3102ffff,
6053 0x00051c00, 0x00431025, 0xadc20010, 0x3c020800, 0x8c4223f4, 0x10400005,
6054 0x2de205eb, 0x14400002, 0x25e2fff2, 0x34028870, 0xa5c20034, 0x3c030800,
6055 0x246323e8, 0x8c620000, 0x24420001, 0xac620000, 0x3c040800, 0x8c8423e4,
6056 0x3c020800, 0x8c421bc0, 0x3303ffff, 0x00832021, 0x00431821, 0x0062102b,
6057 0x3c010800, 0xac2423e4, 0x10400003, 0x2482ffff, 0x3c010800, 0xac2223e4,
6058 0x3c010800, 0xac231bc0, 0x03e00008, 0x27bd0020, 0x27bdffb8, 0x3c050800,
6059 0x24a51b96, 0xafbf0044, 0xafbe0040, 0xafb7003c, 0xafb60038, 0xafb50034,
6060 0xafb40030, 0xafb3002c, 0xafb20028, 0xafb10024, 0xafb00020, 0x94a90000,
6061 0x3c020800, 0x944223d0, 0x3c030800, 0x8c631bb0, 0x3c040800, 0x8c841bac,
6062 0x01221023, 0x0064182a, 0xa7a9001e, 0x106000be, 0xa7a20016, 0x24be0022,
6063 0x97b6001e, 0x24b3001a, 0x24b70016, 0x8fc20000, 0x14400008, 0x00000000,
6064 0x8fc2fff8, 0x97a30016, 0x8fc4fff4, 0x00431021, 0x0082202a, 0x148000b0,
6065 0x00000000, 0x97d50818, 0x32a2ffff, 0x104000a3, 0x00009021, 0x0040a021,
6066 0x00008821, 0x0e000625, 0x00000000, 0x00403021, 0x14c00007, 0x00000000,
6067 0x3c020800, 0x8c4223dc, 0x24420001, 0x3c010800, 0x0a000596, 0xac2223dc,
6068 0x3c100800, 0x02118021, 0x8e101bc8, 0x9608000a, 0x31020040, 0x10400005,
6069 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x31020080,
6070 0x54400001, 0x34e70010, 0x3c020800, 0x00511021, 0x8c421bd0, 0x3c030800,
6071 0x00711821, 0x8c631bd4, 0x00021500, 0x00031c00, 0x00431025, 0xacc20014,
6072 0x96040008, 0x3242ffff, 0x00821021, 0x0282102a, 0x14400002, 0x02b22823,
6073 0x00802821, 0x8e020000, 0x02459021, 0xacc20000, 0x8e020004, 0x00c02021,
6074 0x26310010, 0xac820004, 0x30e2ffff, 0xac800008, 0xa485000e, 0xac820010,
6075 0x24020305, 0x0e0005a2, 0xa482000c, 0x3242ffff, 0x0054102b, 0x1440ffc5,
6076 0x3242ffff, 0x0a00058e, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a,
6077 0x10400067, 0x00000000, 0x8e62fff0, 0x00028900, 0x3c100800, 0x02118021,
6078 0x0e000625, 0x8e101bc8, 0x00403021, 0x14c00005, 0x00000000, 0x8e62082c,
6079 0x24420001, 0x0a000596, 0xae62082c, 0x9608000a, 0x31020040, 0x10400005,
6080 0x2407180c, 0x8e02000c, 0x2407188c, 0x00021400, 0xacc20018, 0x3c020800,
6081 0x00511021, 0x8c421bd0, 0x3c030800, 0x00711821, 0x8c631bd4, 0x00021500,
6082 0x00031c00, 0x00431025, 0xacc20014, 0x8e63fff4, 0x96020008, 0x00432023,
6083 0x3242ffff, 0x3083ffff, 0x00431021, 0x02c2102a, 0x10400003, 0x00802821,
6084 0x97a9001e, 0x01322823, 0x8e620000, 0x30a4ffff, 0x00441021, 0xae620000,
6085 0xa4c5000e, 0x8e020000, 0xacc20000, 0x8e020004, 0x8e63fff4, 0x00431021,
6086 0xacc20004, 0x8e63fff4, 0x96020008, 0x00641821, 0x0062102a, 0x14400006,
6087 0x02459021, 0x8e62fff0, 0xae60fff4, 0x24420001, 0x0a000571, 0xae62fff0,
6088 0xae63fff4, 0xacc00008, 0x3242ffff, 0x10560003, 0x31020004, 0x10400006,
6089 0x24020305, 0x31020080, 0x54400001, 0x34e70010, 0x34e70020, 0x24020905,
6090 0xa4c2000c, 0x8ee30000, 0x8ee20004, 0x14620007, 0x3c02b49a, 0x8ee20860,
6091 0x54400001, 0x34e70400, 0x3c024b65, 0x0a000588, 0x34427654, 0x344289ab,
6092 0xacc2001c, 0x30e2ffff, 0xacc20010, 0x0e0005a2, 0x00c02021, 0x3242ffff,
6093 0x0056102b, 0x1440ff9b, 0x00000000, 0x8e620000, 0x8e63fffc, 0x0043102a,
6094 0x1440ff48, 0x00000000, 0x8fbf0044, 0x8fbe0040, 0x8fb7003c, 0x8fb60038,
6095 0x8fb50034, 0x8fb40030, 0x8fb3002c, 0x8fb20028, 0x8fb10024, 0x8fb00020,
6096 0x03e00008, 0x27bd0048, 0x27bdffe8, 0xafbf0014, 0xafb00010, 0x8f624450,
6097 0x8f634410, 0x0a0005b1, 0x00808021, 0x8f626820, 0x30422000, 0x10400003,
6098 0x00000000, 0x0e0001f0, 0x00002021, 0x8f624450, 0x8f634410, 0x3042ffff,
6099 0x0043102b, 0x1440fff5, 0x00000000, 0x8f630c14, 0x3063000f, 0x2c620002,
6100 0x1440000b, 0x00000000, 0x8f630c14, 0x3c020800, 0x8c421b40, 0x3063000f,
6101 0x24420001, 0x3c010800, 0xac221b40, 0x2c620002, 0x1040fff7, 0x00000000,
6102 0xaf705c18, 0x8f625c10, 0x30420002, 0x10400009, 0x00000000, 0x8f626820,
6103 0x30422000, 0x1040fff8, 0x00000000, 0x0e0001f0, 0x00002021, 0x0a0005c4,
6104 0x00000000, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000,
6105 0x00000000, 0x00000000, 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010,
6106 0xaf60680c, 0x8f626804, 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50,
6107 0x3c010800, 0xac221b54, 0x24020b78, 0x3c010800, 0xac221b64, 0x34630002,
6108 0xaf634000, 0x0e000605, 0x00808021, 0x3c010800, 0xa0221b68, 0x304200ff,
6109 0x24030002, 0x14430005, 0x00000000, 0x3c020800, 0x8c421b54, 0x0a0005f8,
6110 0xac5000c0, 0x3c020800, 0x8c421b54, 0xac5000bc, 0x8f624434, 0x8f634438,
6111 0x8f644410, 0x3c010800, 0xac221b5c, 0x3c010800, 0xac231b6c, 0x3c010800,
6112 0xac241b58, 0x8fbf0014, 0x8fb00010, 0x03e00008, 0x27bd0018, 0x3c040800,
6113 0x8c870000, 0x3c03aa55, 0x3463aa55, 0x3c06c003, 0xac830000, 0x8cc20000,
6114 0x14430007, 0x24050002, 0x3c0355aa, 0x346355aa, 0xac830000, 0x8cc20000,
6115 0x50430001, 0x24050001, 0x3c020800, 0xac470000, 0x03e00008, 0x00a01021,
6116 0x27bdfff8, 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe,
6117 0x00000000, 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008,
6118 0x27bd0008, 0x8f634450, 0x3c020800, 0x8c421b5c, 0x00031c02, 0x0043102b,
6119 0x14400008, 0x3c038000, 0x3c040800, 0x8c841b6c, 0x8f624450, 0x00021c02,
6120 0x0083102b, 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024,
6121 0x1440fffd, 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff,
6122 0x2442e000, 0x2c422001, 0x14400003, 0x3c024000, 0x0a000648, 0x2402ffff,
6123 0x00822025, 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021,
6124 0x03e00008, 0x00000000, 0x8f624450, 0x3c030800, 0x8c631b58, 0x0a000651,
6125 0x3042ffff, 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000,
6126 0x03e00008, 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040800, 0x24841af0,
6127 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010, 0x0e00067c, 0xafa00014,
6128 0x0a000660, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x00000000,
6129 0x00000000, 0x00000000, 0x3c020800, 0x34423000, 0x3c030800, 0x34633000,
6130 0x3c040800, 0x348437ff, 0x3c010800, 0xac221b74, 0x24020040, 0x3c010800,
6131 0xac221b78, 0x3c010800, 0xac201b70, 0xac600000, 0x24630004, 0x0083102b,
6132 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000, 0x00804821, 0x8faa0010,
6133 0x3c020800, 0x8c421b70, 0x3c040800, 0x8c841b78, 0x8fab0014, 0x24430001,
6134 0x0044102b, 0x3c010800, 0xac231b70, 0x14400003, 0x00004021, 0x3c010800,
6135 0xac201b70, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74, 0x91240000,
6136 0x00021140, 0x00431021, 0x00481021, 0x25080001, 0xa0440000, 0x29020008,
6137 0x1440fff4, 0x25290001, 0x3c020800, 0x8c421b70, 0x3c030800, 0x8c631b74,
6138 0x8f64680c, 0x00021140, 0x00431021, 0xac440008, 0xac45000c, 0xac460010,
6139 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c, 0x00000000, 0x00000000,
6142 static const u32 tg3TsoFwRodata[] = {
6143 0x4d61696e, 0x43707542, 0x00000000, 0x4d61696e, 0x43707541, 0x00000000,
6144 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x496e0000, 0x73746b6f,
6145 0x66662a2a, 0x00000000, 0x53774576, 0x656e7430, 0x00000000, 0x00000000,
6146 0x00000000, 0x00000000, 0x66617461, 0x6c457272, 0x00000000, 0x00000000,
6147 0x00000000,
6150 static const u32 tg3TsoFwData[] = {
6151 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x362e3000, 0x00000000,
6152 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
6153 0x00000000,
6156 /* 5705 needs a special version of the TSO firmware. */
6157 #define TG3_TSO5_FW_RELEASE_MAJOR 0x1
6158 #define TG3_TSO5_FW_RELASE_MINOR 0x2
6159 #define TG3_TSO5_FW_RELEASE_FIX 0x0
6160 #define TG3_TSO5_FW_START_ADDR 0x00010000
6161 #define TG3_TSO5_FW_TEXT_ADDR 0x00010000
6162 #define TG3_TSO5_FW_TEXT_LEN 0xe90
6163 #define TG3_TSO5_FW_RODATA_ADDR 0x00010e90
6164 #define TG3_TSO5_FW_RODATA_LEN 0x50
6165 #define TG3_TSO5_FW_DATA_ADDR 0x00010f00
6166 #define TG3_TSO5_FW_DATA_LEN 0x20
6167 #define TG3_TSO5_FW_SBSS_ADDR 0x00010f20
6168 #define TG3_TSO5_FW_SBSS_LEN 0x28
6169 #define TG3_TSO5_FW_BSS_ADDR 0x00010f50
6170 #define TG3_TSO5_FW_BSS_LEN 0x88
6172 static const u32 tg3Tso5FwText[(TG3_TSO5_FW_TEXT_LEN / 4) + 1] = {
6173 0x0c004003, 0x00000000, 0x00010f04, 0x00000000, 0x10000003, 0x00000000,
6174 0x0000000d, 0x0000000d, 0x3c1d0001, 0x37bde000, 0x03a0f021, 0x3c100001,
6175 0x26100000, 0x0c004010, 0x00000000, 0x0000000d, 0x27bdffe0, 0x3c04fefe,
6176 0xafbf0018, 0x0c0042e8, 0x34840002, 0x0c004364, 0x00000000, 0x3c030001,
6177 0x90630f34, 0x24020002, 0x3c040001, 0x24840e9c, 0x14620003, 0x24050001,
6178 0x3c040001, 0x24840e90, 0x24060002, 0x00003821, 0xafa00010, 0x0c004378,
6179 0xafa00014, 0x0c00402c, 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020,
6180 0x00000000, 0x00000000, 0x27bdffe0, 0xafbf001c, 0xafb20018, 0xafb10014,
6181 0x0c0042d4, 0xafb00010, 0x3c128000, 0x24110001, 0x8f706810, 0x32020400,
6182 0x10400007, 0x00000000, 0x8f641008, 0x00921024, 0x14400003, 0x00000000,
6183 0x0c004064, 0x00000000, 0x3c020001, 0x90420f56, 0x10510003, 0x32020200,
6184 0x1040fff1, 0x00000000, 0x0c0041b4, 0x00000000, 0x08004034, 0x00000000,
6185 0x8fbf001c, 0x8fb20018, 0x8fb10014, 0x8fb00010, 0x03e00008, 0x27bd0020,
6186 0x27bdffe0, 0x3c040001, 0x24840eb0, 0x00002821, 0x00003021, 0x00003821,
6187 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130,
6188 0xaf625000, 0x3c010001, 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018,
6189 0x03e00008, 0x27bd0020, 0x00000000, 0x00000000, 0x3c030001, 0x24630f60,
6190 0x90620000, 0x27bdfff0, 0x14400003, 0x0080c021, 0x08004073, 0x00004821,
6191 0x3c022000, 0x03021024, 0x10400003, 0x24090002, 0x08004073, 0xa0600000,
6192 0x24090001, 0x00181040, 0x30431f80, 0x346f8008, 0x1520004b, 0x25eb0028,
6193 0x3c040001, 0x00832021, 0x8c848010, 0x3c050001, 0x24a50f7a, 0x00041402,
6194 0xa0a20000, 0x3c010001, 0xa0240f7b, 0x3c020001, 0x00431021, 0x94428014,
6195 0x3c010001, 0xa0220f7c, 0x3c0c0001, 0x01836021, 0x8d8c8018, 0x304200ff,
6196 0x24420008, 0x000220c3, 0x24020001, 0x3c010001, 0xa0220f60, 0x0124102b,
6197 0x1040000c, 0x00003821, 0x24a6000e, 0x01602821, 0x8ca20000, 0x8ca30004,
6198 0x24a50008, 0x24e70001, 0xacc20000, 0xacc30004, 0x00e4102b, 0x1440fff8,
6199 0x24c60008, 0x00003821, 0x3c080001, 0x25080f7b, 0x91060000, 0x3c020001,
6200 0x90420f7c, 0x2503000d, 0x00c32821, 0x00461023, 0x00021fc2, 0x00431021,
6201 0x00021043, 0x1840000c, 0x00002021, 0x91020001, 0x00461023, 0x00021fc2,
6202 0x00431021, 0x00021843, 0x94a20000, 0x24e70001, 0x00822021, 0x00e3102a,
6203 0x1440fffb, 0x24a50002, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402,
6204 0x00822021, 0x3c02ffff, 0x01821024, 0x3083ffff, 0x00431025, 0x3c010001,
6205 0x080040fa, 0xac220f80, 0x3c050001, 0x24a50f7c, 0x90a20000, 0x3c0c0001,
6206 0x01836021, 0x8d8c8018, 0x000220c2, 0x1080000e, 0x00003821, 0x01603021,
6207 0x24a5000c, 0x8ca20000, 0x8ca30004, 0x24a50008, 0x24e70001, 0xacc20000,
6208 0xacc30004, 0x00e4102b, 0x1440fff8, 0x24c60008, 0x3c050001, 0x24a50f7c,
6209 0x90a20000, 0x30430007, 0x24020004, 0x10620011, 0x28620005, 0x10400005,
6210 0x24020002, 0x10620008, 0x000710c0, 0x080040fa, 0x00000000, 0x24020006,
6211 0x1062000e, 0x000710c0, 0x080040fa, 0x00000000, 0x00a21821, 0x9463000c,
6212 0x004b1021, 0x080040fa, 0xa4430000, 0x000710c0, 0x00a21821, 0x8c63000c,
6213 0x004b1021, 0x080040fa, 0xac430000, 0x00a21821, 0x8c63000c, 0x004b2021,
6214 0x00a21021, 0xac830000, 0x94420010, 0xa4820004, 0x95e70006, 0x3c020001,
6215 0x90420f7c, 0x3c030001, 0x90630f7a, 0x00e2c823, 0x3c020001, 0x90420f7b,
6216 0x24630028, 0x01e34021, 0x24420028, 0x15200012, 0x01e23021, 0x94c2000c,
6217 0x3c010001, 0xa4220f78, 0x94c20004, 0x94c30006, 0x3c010001, 0xa4200f76,
6218 0x3c010001, 0xa4200f72, 0x00021400, 0x00431025, 0x3c010001, 0xac220f6c,
6219 0x95020004, 0x3c010001, 0x08004124, 0xa4220f70, 0x3c020001, 0x94420f70,
6220 0x3c030001, 0x94630f72, 0x00431021, 0xa5020004, 0x3c020001, 0x94420f6c,
6221 0xa4c20004, 0x3c020001, 0x8c420f6c, 0xa4c20006, 0x3c040001, 0x94840f72,
6222 0x3c020001, 0x94420f70, 0x3c0a0001, 0x954a0f76, 0x00441821, 0x3063ffff,
6223 0x0062182a, 0x24020002, 0x1122000b, 0x00832023, 0x3c030001, 0x94630f78,
6224 0x30620009, 0x10400006, 0x3062fff6, 0xa4c2000c, 0x3c020001, 0x94420f78,
6225 0x30420009, 0x01425023, 0x24020001, 0x1122001b, 0x29220002, 0x50400005,
6226 0x24020002, 0x11200007, 0x31a2ffff, 0x08004197, 0x00000000, 0x1122001d,
6227 0x24020016, 0x08004197, 0x31a2ffff, 0x3c0e0001, 0x95ce0f80, 0x10800005,
6228 0x01806821, 0x01c42021, 0x00041c02, 0x3082ffff, 0x00627021, 0x000e1027,
6229 0xa502000a, 0x3c030001, 0x90630f7b, 0x31a2ffff, 0x00e21021, 0x0800418d,
6230 0x00432023, 0x3c020001, 0x94420f80, 0x00442021, 0x00041c02, 0x3082ffff,
6231 0x00622021, 0x00807021, 0x00041027, 0x08004185, 0xa502000a, 0x3c050001,
6232 0x24a50f7a, 0x90a30000, 0x14620002, 0x24e2fff2, 0xa5e20034, 0x90a20000,
6233 0x00e21023, 0xa5020002, 0x3c030001, 0x94630f80, 0x3c020001, 0x94420f5a,
6234 0x30e5ffff, 0x00641821, 0x00451023, 0x00622023, 0x00041c02, 0x3082ffff,
6235 0x00622021, 0x00041027, 0xa502000a, 0x3c030001, 0x90630f7c, 0x24620001,
6236 0x14a20005, 0x00807021, 0x01631021, 0x90420000, 0x08004185, 0x00026200,
6237 0x24620002, 0x14a20003, 0x306200fe, 0x004b1021, 0x944c0000, 0x3c020001,
6238 0x94420f82, 0x3183ffff, 0x3c040001, 0x90840f7b, 0x00431021, 0x00e21021,
6239 0x00442023, 0x008a2021, 0x00041c02, 0x3082ffff, 0x00622021, 0x00041402,
6240 0x00822021, 0x00806821, 0x00041027, 0xa4c20010, 0x31a2ffff, 0x000e1c00,
6241 0x00431025, 0x3c040001, 0x24840f72, 0xade20010, 0x94820000, 0x3c050001,
6242 0x94a50f76, 0x3c030001, 0x8c630f6c, 0x24420001, 0x00b92821, 0xa4820000,
6243 0x3322ffff, 0x00622021, 0x0083182b, 0x3c010001, 0xa4250f76, 0x10600003,
6244 0x24a2ffff, 0x3c010001, 0xa4220f76, 0x3c024000, 0x03021025, 0x3c010001,
6245 0xac240f6c, 0xaf621008, 0x03e00008, 0x27bd0010, 0x3c030001, 0x90630f56,
6246 0x27bdffe8, 0x24020001, 0xafbf0014, 0x10620026, 0xafb00010, 0x8f620cf4,
6247 0x2442ffff, 0x3042007f, 0x00021100, 0x8c434000, 0x3c010001, 0xac230f64,
6248 0x8c434008, 0x24444000, 0x8c5c4004, 0x30620040, 0x14400002, 0x24020088,
6249 0x24020008, 0x3c010001, 0xa4220f68, 0x30620004, 0x10400005, 0x24020001,
6250 0x3c010001, 0xa0220f57, 0x080041d5, 0x00031402, 0x3c010001, 0xa0200f57,
6251 0x00031402, 0x3c010001, 0xa4220f54, 0x9483000c, 0x24020001, 0x3c010001,
6252 0xa4200f50, 0x3c010001, 0xa0220f56, 0x3c010001, 0xa4230f62, 0x24020001,
6253 0x1342001e, 0x00000000, 0x13400005, 0x24020003, 0x13420067, 0x00000000,
6254 0x080042cf, 0x00000000, 0x3c020001, 0x94420f62, 0x241a0001, 0x3c010001,
6255 0xa4200f5e, 0x3c010001, 0xa4200f52, 0x304407ff, 0x00021bc2, 0x00031823,
6256 0x3063003e, 0x34630036, 0x00021242, 0x3042003c, 0x00621821, 0x3c010001,
6257 0xa4240f58, 0x00832021, 0x24630030, 0x3c010001, 0xa4240f5a, 0x3c010001,
6258 0xa4230f5c, 0x3c060001, 0x24c60f52, 0x94c50000, 0x94c30002, 0x3c040001,
6259 0x94840f5a, 0x00651021, 0x0044102a, 0x10400013, 0x3c108000, 0x00a31021,
6260 0xa4c20000, 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008,
6261 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4,
6262 0x00501024, 0x104000b7, 0x00000000, 0x0800420f, 0x00000000, 0x3c030001,
6263 0x94630f50, 0x00851023, 0xa4c40000, 0x00621821, 0x3042ffff, 0x3c010001,
6264 0xa4230f50, 0xaf620ce8, 0x3c020001, 0x94420f68, 0x34420024, 0xaf620cec,
6265 0x94c30002, 0x3c020001, 0x94420f50, 0x14620012, 0x3c028000, 0x3c108000,
6266 0x3c02a000, 0xaf620cf4, 0x3c010001, 0xa0200f56, 0x8f641008, 0x00901024,
6267 0x14400003, 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024,
6268 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003, 0xaf620cf4, 0x3c108000,
6269 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064, 0x00000000,
6270 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x080042cf, 0x241a0003,
6271 0x3c070001, 0x24e70f50, 0x94e20000, 0x03821021, 0xaf620ce0, 0x3c020001,
6272 0x8c420f64, 0xaf620ce4, 0x3c050001, 0x94a50f54, 0x94e30000, 0x3c040001,
6273 0x94840f58, 0x3c020001, 0x94420f5e, 0x00a32823, 0x00822023, 0x30a6ffff,
6274 0x3083ffff, 0x00c3102b, 0x14400043, 0x00000000, 0x3c020001, 0x94420f5c,
6275 0x00021400, 0x00621025, 0xaf620ce8, 0x94e20000, 0x3c030001, 0x94630f54,
6276 0x00441021, 0xa4e20000, 0x3042ffff, 0x14430021, 0x3c020008, 0x3c020001,
6277 0x90420f57, 0x10400006, 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624,
6278 0x0800427c, 0x0000d021, 0x3c020001, 0x94420f68, 0x3c030008, 0x34630624,
6279 0x00431025, 0xaf620cec, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001,
6280 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064,
6281 0x00000000, 0x8f620cf4, 0x00501024, 0x10400015, 0x00000000, 0x08004283,
6282 0x00000000, 0x3c030001, 0x94630f68, 0x34420624, 0x3c108000, 0x00621825,
6283 0x3c028000, 0xaf630cec, 0xaf620cf4, 0x8f641008, 0x00901024, 0x14400003,
6284 0x00000000, 0x0c004064, 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7,
6285 0x00000000, 0x3c010001, 0x080042cf, 0xa4200f5e, 0x3c020001, 0x94420f5c,
6286 0x00021400, 0x00c21025, 0xaf620ce8, 0x3c020001, 0x90420f57, 0x10400009,
6287 0x3c03000c, 0x3c020001, 0x94420f68, 0x34630624, 0x0000d021, 0x00431025,
6288 0xaf620cec, 0x080042c1, 0x3c108000, 0x3c020001, 0x94420f68, 0x3c030008,
6289 0x34630604, 0x00431025, 0xaf620cec, 0x3c020001, 0x94420f5e, 0x00451021,
6290 0x3c010001, 0xa4220f5e, 0x3c108000, 0x3c02a000, 0xaf620cf4, 0x3c010001,
6291 0xa0200f56, 0x8f641008, 0x00901024, 0x14400003, 0x00000000, 0x0c004064,
6292 0x00000000, 0x8f620cf4, 0x00501024, 0x1440fff7, 0x00000000, 0x8fbf0014,
6293 0x8fb00010, 0x03e00008, 0x27bd0018, 0x00000000, 0x27bdffe0, 0x3c040001,
6294 0x24840ec0, 0x00002821, 0x00003021, 0x00003821, 0xafbf0018, 0xafa00010,
6295 0x0c004378, 0xafa00014, 0x0000d021, 0x24020130, 0xaf625000, 0x3c010001,
6296 0xa4200f50, 0x3c010001, 0xa0200f57, 0x8fbf0018, 0x03e00008, 0x27bd0020,
6297 0x27bdffe8, 0x3c1bc000, 0xafbf0014, 0xafb00010, 0xaf60680c, 0x8f626804,
6298 0x34420082, 0xaf626804, 0x8f634000, 0x24020b50, 0x3c010001, 0xac220f20,
6299 0x24020b78, 0x3c010001, 0xac220f30, 0x34630002, 0xaf634000, 0x0c004315,
6300 0x00808021, 0x3c010001, 0xa0220f34, 0x304200ff, 0x24030002, 0x14430005,
6301 0x00000000, 0x3c020001, 0x8c420f20, 0x08004308, 0xac5000c0, 0x3c020001,
6302 0x8c420f20, 0xac5000bc, 0x8f624434, 0x8f634438, 0x8f644410, 0x3c010001,
6303 0xac220f28, 0x3c010001, 0xac230f38, 0x3c010001, 0xac240f24, 0x8fbf0014,
6304 0x8fb00010, 0x03e00008, 0x27bd0018, 0x03e00008, 0x24020001, 0x27bdfff8,
6305 0x18800009, 0x00002821, 0x8f63680c, 0x8f62680c, 0x1043fffe, 0x00000000,
6306 0x24a50001, 0x00a4102a, 0x1440fff9, 0x00000000, 0x03e00008, 0x27bd0008,
6307 0x8f634450, 0x3c020001, 0x8c420f28, 0x00031c02, 0x0043102b, 0x14400008,
6308 0x3c038000, 0x3c040001, 0x8c840f38, 0x8f624450, 0x00021c02, 0x0083102b,
6309 0x1040fffc, 0x3c038000, 0xaf634444, 0x8f624444, 0x00431024, 0x1440fffd,
6310 0x00000000, 0x8f624448, 0x03e00008, 0x3042ffff, 0x3082ffff, 0x2442e000,
6311 0x2c422001, 0x14400003, 0x3c024000, 0x08004347, 0x2402ffff, 0x00822025,
6312 0xaf645c38, 0x8f625c30, 0x30420002, 0x1440fffc, 0x00001021, 0x03e00008,
6313 0x00000000, 0x8f624450, 0x3c030001, 0x8c630f24, 0x08004350, 0x3042ffff,
6314 0x8f624450, 0x3042ffff, 0x0043102b, 0x1440fffc, 0x00000000, 0x03e00008,
6315 0x00000000, 0x27bdffe0, 0x00802821, 0x3c040001, 0x24840ed0, 0x00003021,
6316 0x00003821, 0xafbf0018, 0xafa00010, 0x0c004378, 0xafa00014, 0x0800435f,
6317 0x00000000, 0x8fbf0018, 0x03e00008, 0x27bd0020, 0x3c020001, 0x3442d600,
6318 0x3c030001, 0x3463d600, 0x3c040001, 0x3484ddff, 0x3c010001, 0xac220f40,
6319 0x24020040, 0x3c010001, 0xac220f44, 0x3c010001, 0xac200f3c, 0xac600000,
6320 0x24630004, 0x0083102b, 0x5040fffd, 0xac600000, 0x03e00008, 0x00000000,
6321 0x00804821, 0x8faa0010, 0x3c020001, 0x8c420f3c, 0x3c040001, 0x8c840f44,
6322 0x8fab0014, 0x24430001, 0x0044102b, 0x3c010001, 0xac230f3c, 0x14400003,
6323 0x00004021, 0x3c010001, 0xac200f3c, 0x3c020001, 0x8c420f3c, 0x3c030001,
6324 0x8c630f40, 0x91240000, 0x00021140, 0x00431021, 0x00481021, 0x25080001,
6325 0xa0440000, 0x29020008, 0x1440fff4, 0x25290001, 0x3c020001, 0x8c420f3c,
6326 0x3c030001, 0x8c630f40, 0x8f64680c, 0x00021140, 0x00431021, 0xac440008,
6327 0xac45000c, 0xac460010, 0xac470014, 0xac4a0018, 0x03e00008, 0xac4b001c,
6328 0x00000000, 0x00000000, 0x00000000,
6331 static const u32 tg3Tso5FwRodata[(TG3_TSO5_FW_RODATA_LEN / 4) + 1] = {
6332 0x4d61696e, 0x43707542, 0x00000000, 0x4d61696e, 0x43707541, 0x00000000,
6333 0x00000000, 0x00000000, 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000,
6334 0x73746b6f, 0x66666c64, 0x00000000, 0x00000000, 0x66617461, 0x6c457272,
6335 0x00000000, 0x00000000, 0x00000000,
6338 static const u32 tg3Tso5FwData[(TG3_TSO5_FW_DATA_LEN / 4) + 1] = {
6339 0x00000000, 0x73746b6f, 0x66666c64, 0x5f76312e, 0x322e3000, 0x00000000,
6340 0x00000000, 0x00000000, 0x00000000,
6343 /* tp->lock is held. */
6344 static int tg3_load_tso_firmware(struct tg3 *tp)
6346 struct fw_info info;
6347 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
6348 int err, i;
6350 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
6351 return 0;
6353 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
6354 info.text_base = TG3_TSO5_FW_TEXT_ADDR;
6355 info.text_len = TG3_TSO5_FW_TEXT_LEN;
6356 info.text_data = &tg3Tso5FwText[0];
6357 info.rodata_base = TG3_TSO5_FW_RODATA_ADDR;
6358 info.rodata_len = TG3_TSO5_FW_RODATA_LEN;
6359 info.rodata_data = &tg3Tso5FwRodata[0];
6360 info.data_base = TG3_TSO5_FW_DATA_ADDR;
6361 info.data_len = TG3_TSO5_FW_DATA_LEN;
6362 info.data_data = &tg3Tso5FwData[0];
6363 cpu_base = RX_CPU_BASE;
6364 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
6365 cpu_scratch_size = (info.text_len +
6366 info.rodata_len +
6367 info.data_len +
6368 TG3_TSO5_FW_SBSS_LEN +
6369 TG3_TSO5_FW_BSS_LEN);
6370 } else {
6371 info.text_base = TG3_TSO_FW_TEXT_ADDR;
6372 info.text_len = TG3_TSO_FW_TEXT_LEN;
6373 info.text_data = &tg3TsoFwText[0];
6374 info.rodata_base = TG3_TSO_FW_RODATA_ADDR;
6375 info.rodata_len = TG3_TSO_FW_RODATA_LEN;
6376 info.rodata_data = &tg3TsoFwRodata[0];
6377 info.data_base = TG3_TSO_FW_DATA_ADDR;
6378 info.data_len = TG3_TSO_FW_DATA_LEN;
6379 info.data_data = &tg3TsoFwData[0];
6380 cpu_base = TX_CPU_BASE;
6381 cpu_scratch_base = TX_CPU_SCRATCH_BASE;
6382 cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
6385 err = tg3_load_firmware_cpu(tp, cpu_base,
6386 cpu_scratch_base, cpu_scratch_size,
6387 &info);
6388 if (err)
6389 return err;
6391 /* Now startup the cpu. */
6392 tw32(cpu_base + CPU_STATE, 0xffffffff);
6393 tw32_f(cpu_base + CPU_PC, info.text_base);
6395 for (i = 0; i < 5; i++) {
6396 if (tr32(cpu_base + CPU_PC) == info.text_base)
6397 break;
6398 tw32(cpu_base + CPU_STATE, 0xffffffff);
6399 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT);
6400 tw32_f(cpu_base + CPU_PC, info.text_base);
6401 udelay(1000);
6403 if (i >= 5) {
6404 printk(KERN_ERR PFX "tg3_load_tso_firmware fails for %s "
6405 "to set CPU PC, is %08x should be %08x\n",
6406 tp->dev->name, tr32(cpu_base + CPU_PC),
6407 info.text_base);
6408 return -ENODEV;
6410 tw32(cpu_base + CPU_STATE, 0xffffffff);
6411 tw32_f(cpu_base + CPU_MODE, 0x00000000);
6412 return 0;
6416 /* tp->lock is held. */
6417 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1)
6419 u32 addr_high, addr_low;
6420 int i;
6422 addr_high = ((tp->dev->dev_addr[0] << 8) |
6423 tp->dev->dev_addr[1]);
6424 addr_low = ((tp->dev->dev_addr[2] << 24) |
6425 (tp->dev->dev_addr[3] << 16) |
6426 (tp->dev->dev_addr[4] << 8) |
6427 (tp->dev->dev_addr[5] << 0));
6428 for (i = 0; i < 4; i++) {
6429 if (i == 1 && skip_mac_1)
6430 continue;
6431 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
6432 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
6435 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
6436 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
6437 for (i = 0; i < 12; i++) {
6438 tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
6439 tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
6443 addr_high = (tp->dev->dev_addr[0] +
6444 tp->dev->dev_addr[1] +
6445 tp->dev->dev_addr[2] +
6446 tp->dev->dev_addr[3] +
6447 tp->dev->dev_addr[4] +
6448 tp->dev->dev_addr[5]) &
6449 TX_BACKOFF_SEED_MASK;
6450 tw32(MAC_TX_BACKOFF_SEED, addr_high);
6453 static int tg3_set_mac_addr(struct net_device *dev, void *p)
6455 struct tg3 *tp = netdev_priv(dev);
6456 struct sockaddr *addr = p;
6457 int err = 0, skip_mac_1 = 0;
6459 if (!is_valid_ether_addr(addr->sa_data))
6460 return -EINVAL;
6462 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
6464 if (!netif_running(dev))
6465 return 0;
6467 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
6468 u32 addr0_high, addr0_low, addr1_high, addr1_low;
6470 addr0_high = tr32(MAC_ADDR_0_HIGH);
6471 addr0_low = tr32(MAC_ADDR_0_LOW);
6472 addr1_high = tr32(MAC_ADDR_1_HIGH);
6473 addr1_low = tr32(MAC_ADDR_1_LOW);
6475 /* Skip MAC addr 1 if ASF is using it. */
6476 if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
6477 !(addr1_high == 0 && addr1_low == 0))
6478 skip_mac_1 = 1;
6480 spin_lock_bh(&tp->lock);
6481 __tg3_set_mac_addr(tp, skip_mac_1);
6482 spin_unlock_bh(&tp->lock);
6484 return err;
6487 /* tp->lock is held. */
6488 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
6489 dma_addr_t mapping, u32 maxlen_flags,
6490 u32 nic_addr)
6492 tg3_write_mem(tp,
6493 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
6494 ((u64) mapping >> 32));
6495 tg3_write_mem(tp,
6496 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
6497 ((u64) mapping & 0xffffffff));
6498 tg3_write_mem(tp,
6499 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
6500 maxlen_flags);
6502 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
6503 tg3_write_mem(tp,
6504 (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
6505 nic_addr);
6508 static void __tg3_set_rx_mode(struct net_device *);
6509 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
6511 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs);
6512 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs);
6513 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames);
6514 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames);
6515 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6516 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq);
6517 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq);
6519 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq);
6520 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq);
6521 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6522 u32 val = ec->stats_block_coalesce_usecs;
6524 if (!netif_carrier_ok(tp->dev))
6525 val = 0;
6527 tw32(HOSTCC_STAT_COAL_TICKS, val);
6531 /* tp->lock is held. */
6532 static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
6534 u32 val, rdmac_mode;
6535 int i, err, limit;
6537 tg3_disable_ints(tp);
6539 tg3_stop_fw(tp);
6541 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
6543 if (tp->tg3_flags & TG3_FLAG_INIT_COMPLETE) {
6544 tg3_abort_hw(tp, 1);
6547 if (reset_phy)
6548 tg3_phy_reset(tp);
6550 err = tg3_chip_reset(tp);
6551 if (err)
6552 return err;
6554 tg3_write_sig_legacy(tp, RESET_KIND_INIT);
6556 if (tp->pci_chip_rev_id == CHIPREV_ID_5784_A0 ||
6557 tp->pci_chip_rev_id == CHIPREV_ID_5784_A1) {
6558 val = tr32(TG3_CPMU_CTRL);
6559 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE);
6560 tw32(TG3_CPMU_CTRL, val);
6562 val = tr32(TG3_CPMU_LSPD_10MB_CLK);
6563 val &= ~CPMU_LSPD_10MB_MACCLK_MASK;
6564 val |= CPMU_LSPD_10MB_MACCLK_6_25;
6565 tw32(TG3_CPMU_LSPD_10MB_CLK, val);
6567 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD);
6568 val &= ~CPMU_LNK_AWARE_MACCLK_MASK;
6569 val |= CPMU_LNK_AWARE_MACCLK_6_25;
6570 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val);
6572 val = tr32(TG3_CPMU_HST_ACC);
6573 val &= ~CPMU_HST_ACC_MACCLK_MASK;
6574 val |= CPMU_HST_ACC_MACCLK_6_25;
6575 tw32(TG3_CPMU_HST_ACC, val);
6578 /* This works around an issue with Athlon chipsets on
6579 * B3 tigon3 silicon. This bit has no effect on any
6580 * other revision. But do not set this on PCI Express
6581 * chips and don't even touch the clocks if the CPMU is present.
6583 if (!(tp->tg3_flags & TG3_FLAG_CPMU_PRESENT)) {
6584 if (!(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
6585 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT;
6586 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl);
6589 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
6590 (tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
6591 val = tr32(TG3PCI_PCISTATE);
6592 val |= PCISTATE_RETRY_SAME_DMA;
6593 tw32(TG3PCI_PCISTATE, val);
6596 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) {
6597 /* Allow reads and writes to the
6598 * APE register and memory space.
6600 val = tr32(TG3PCI_PCISTATE);
6601 val |= PCISTATE_ALLOW_APE_CTLSPC_WR |
6602 PCISTATE_ALLOW_APE_SHMEM_WR;
6603 tw32(TG3PCI_PCISTATE, val);
6606 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) {
6607 /* Enable some hw fixes. */
6608 val = tr32(TG3PCI_MSI_DATA);
6609 val |= (1 << 26) | (1 << 28) | (1 << 29);
6610 tw32(TG3PCI_MSI_DATA, val);
6613 /* Descriptor ring init may make accesses to the
6614 * NIC SRAM area to setup the TX descriptors, so we
6615 * can only do this after the hardware has been
6616 * successfully reset.
6618 err = tg3_init_rings(tp);
6619 if (err)
6620 return err;
6622 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
6623 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) {
6624 /* This value is determined during the probe time DMA
6625 * engine test, tg3_test_dma.
6627 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
6630 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
6631 GRC_MODE_4X_NIC_SEND_RINGS |
6632 GRC_MODE_NO_TX_PHDR_CSUM |
6633 GRC_MODE_NO_RX_PHDR_CSUM);
6634 tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
6636 /* Pseudo-header checksum is done by hardware logic and not
6637 * the offload processers, so make the chip do the pseudo-
6638 * header checksums on receive. For transmit it is more
6639 * convenient to do the pseudo-header checksum in software
6640 * as Linux does that on transmit for us in all cases.
6642 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
6644 tw32(GRC_MODE,
6645 tp->grc_mode |
6646 (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP));
6648 /* Setup the timer prescalar register. Clock is always 66Mhz. */
6649 val = tr32(GRC_MISC_CFG);
6650 val &= ~0xff;
6651 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
6652 tw32(GRC_MISC_CFG, val);
6654 /* Initialize MBUF/DESC pool. */
6655 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
6656 /* Do nothing. */
6657 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
6658 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE);
6659 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
6660 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64);
6661 else
6662 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96);
6663 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE);
6664 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE);
6666 else if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
6667 int fw_len;
6669 fw_len = (TG3_TSO5_FW_TEXT_LEN +
6670 TG3_TSO5_FW_RODATA_LEN +
6671 TG3_TSO5_FW_DATA_LEN +
6672 TG3_TSO5_FW_SBSS_LEN +
6673 TG3_TSO5_FW_BSS_LEN);
6674 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
6675 tw32(BUFMGR_MB_POOL_ADDR,
6676 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
6677 tw32(BUFMGR_MB_POOL_SIZE,
6678 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
6681 if (tp->dev->mtu <= ETH_DATA_LEN) {
6682 tw32(BUFMGR_MB_RDMA_LOW_WATER,
6683 tp->bufmgr_config.mbuf_read_dma_low_water);
6684 tw32(BUFMGR_MB_MACRX_LOW_WATER,
6685 tp->bufmgr_config.mbuf_mac_rx_low_water);
6686 tw32(BUFMGR_MB_HIGH_WATER,
6687 tp->bufmgr_config.mbuf_high_water);
6688 } else {
6689 tw32(BUFMGR_MB_RDMA_LOW_WATER,
6690 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
6691 tw32(BUFMGR_MB_MACRX_LOW_WATER,
6692 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
6693 tw32(BUFMGR_MB_HIGH_WATER,
6694 tp->bufmgr_config.mbuf_high_water_jumbo);
6696 tw32(BUFMGR_DMA_LOW_WATER,
6697 tp->bufmgr_config.dma_low_water);
6698 tw32(BUFMGR_DMA_HIGH_WATER,
6699 tp->bufmgr_config.dma_high_water);
6701 tw32(BUFMGR_MODE, BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE);
6702 for (i = 0; i < 2000; i++) {
6703 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE)
6704 break;
6705 udelay(10);
6707 if (i >= 2000) {
6708 printk(KERN_ERR PFX "tg3_reset_hw cannot enable BUFMGR for %s.\n",
6709 tp->dev->name);
6710 return -ENODEV;
6713 /* Setup replenish threshold. */
6714 val = tp->rx_pending / 8;
6715 if (val == 0)
6716 val = 1;
6717 else if (val > tp->rx_std_max_post)
6718 val = tp->rx_std_max_post;
6719 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
6720 if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1)
6721 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
6723 if (val > (TG3_RX_INTERNAL_RING_SZ_5906 / 2))
6724 val = TG3_RX_INTERNAL_RING_SZ_5906 / 2;
6727 tw32(RCVBDI_STD_THRESH, val);
6729 /* Initialize TG3_BDINFO's at:
6730 * RCVDBDI_STD_BD: standard eth size rx ring
6731 * RCVDBDI_JUMBO_BD: jumbo frame rx ring
6732 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work)
6734 * like so:
6735 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring
6736 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) |
6737 * ring attribute flags
6738 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM
6740 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
6741 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
6743 * The size of each ring is fixed in the firmware, but the location is
6744 * configurable.
6746 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
6747 ((u64) tp->rx_std_mapping >> 32));
6748 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
6749 ((u64) tp->rx_std_mapping & 0xffffffff));
6750 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
6751 NIC_SRAM_RX_BUFFER_DESC);
6753 /* Don't even try to program the JUMBO/MINI buffer descriptor
6754 * configs on 5705.
6756 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
6757 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS,
6758 RX_STD_MAX_SIZE_5705 << BDINFO_FLAGS_MAXLEN_SHIFT);
6759 } else {
6760 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS,
6761 RX_STD_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT);
6763 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS,
6764 BDINFO_FLAGS_DISABLED);
6766 /* Setup replenish threshold. */
6767 tw32(RCVBDI_JUMBO_THRESH, tp->rx_jumbo_pending / 8);
6769 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) {
6770 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH,
6771 ((u64) tp->rx_jumbo_mapping >> 32));
6772 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
6773 ((u64) tp->rx_jumbo_mapping & 0xffffffff));
6774 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
6775 RX_JUMBO_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT);
6776 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR,
6777 NIC_SRAM_RX_JUMBO_BUFFER_DESC);
6778 } else {
6779 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS,
6780 BDINFO_FLAGS_DISABLED);
6785 /* There is only one send ring on 5705/5750, no need to explicitly
6786 * disable the others.
6788 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6789 /* Clear out send RCB ring in SRAM. */
6790 for (i = NIC_SRAM_SEND_RCB; i < NIC_SRAM_RCV_RET_RCB; i += TG3_BDINFO_SIZE)
6791 tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS,
6792 BDINFO_FLAGS_DISABLED);
6795 tp->tx_prod = 0;
6796 tp->tx_cons = 0;
6797 tw32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
6798 tw32_tx_mbox(MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
6800 tg3_set_bdinfo(tp, NIC_SRAM_SEND_RCB,
6801 tp->tx_desc_mapping,
6802 (TG3_TX_RING_SIZE <<
6803 BDINFO_FLAGS_MAXLEN_SHIFT),
6804 NIC_SRAM_TX_BUFFER_DESC);
6806 /* There is only one receive return ring on 5705/5750, no need
6807 * to explicitly disable the others.
6809 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6810 for (i = NIC_SRAM_RCV_RET_RCB; i < NIC_SRAM_STATS_BLK;
6811 i += TG3_BDINFO_SIZE) {
6812 tg3_write_mem(tp, i + TG3_BDINFO_MAXLEN_FLAGS,
6813 BDINFO_FLAGS_DISABLED);
6817 tp->rx_rcb_ptr = 0;
6818 tw32_rx_mbox(MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW, 0);
6820 tg3_set_bdinfo(tp, NIC_SRAM_RCV_RET_RCB,
6821 tp->rx_rcb_mapping,
6822 (TG3_RX_RCB_RING_SIZE(tp) <<
6823 BDINFO_FLAGS_MAXLEN_SHIFT),
6826 tp->rx_std_ptr = tp->rx_pending;
6827 tw32_rx_mbox(MAILBOX_RCV_STD_PROD_IDX + TG3_64BIT_REG_LOW,
6828 tp->rx_std_ptr);
6830 tp->rx_jumbo_ptr = (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE) ?
6831 tp->rx_jumbo_pending : 0;
6832 tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW,
6833 tp->rx_jumbo_ptr);
6835 /* Initialize MAC address and backoff seed. */
6836 __tg3_set_mac_addr(tp, 0);
6838 /* MTU + ethernet header + FCS + optional VLAN tag */
6839 tw32(MAC_RX_MTU_SIZE, tp->dev->mtu + ETH_HLEN + 8);
6841 /* The slot time is changed by tg3_setup_phy if we
6842 * run at gigabit with half duplex.
6844 tw32(MAC_TX_LENGTHS,
6845 (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
6846 (6 << TX_LENGTHS_IPG_SHIFT) |
6847 (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
6849 /* Receive rules. */
6850 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS);
6851 tw32(RCVLPC_CONFIG, 0x0181);
6853 /* Calculate RDMAC_MODE setting early, we need it to determine
6854 * the RCVLPC_STATE_ENABLE mask.
6856 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB |
6857 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB |
6858 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB |
6859 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB |
6860 RDMAC_MODE_LNGREAD_ENAB);
6862 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784)
6863 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
6864 RDMAC_MODE_MBUF_RBD_CRPT_ENAB |
6865 RDMAC_MODE_MBUF_SBD_CRPT_ENAB;
6867 /* If statement applies to 5705 and 5750 PCI devices only */
6868 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
6869 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) ||
6870 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)) {
6871 if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE &&
6872 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
6873 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
6874 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
6875 !(tp->tg3_flags2 & TG3_FLG2_IS_5788)) {
6876 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
6880 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)
6881 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
6883 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
6884 rdmac_mode |= (1 << 27);
6886 /* Receive/send statistics. */
6887 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
6888 val = tr32(RCVLPC_STATS_ENABLE);
6889 val &= ~RCVLPC_STATSENAB_DACK_FIX;
6890 tw32(RCVLPC_STATS_ENABLE, val);
6891 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
6892 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) {
6893 val = tr32(RCVLPC_STATS_ENABLE);
6894 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX;
6895 tw32(RCVLPC_STATS_ENABLE, val);
6896 } else {
6897 tw32(RCVLPC_STATS_ENABLE, 0xffffff);
6899 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE);
6900 tw32(SNDDATAI_STATSENAB, 0xffffff);
6901 tw32(SNDDATAI_STATSCTRL,
6902 (SNDDATAI_SCTRL_ENABLE |
6903 SNDDATAI_SCTRL_FASTUPD));
6905 /* Setup host coalescing engine. */
6906 tw32(HOSTCC_MODE, 0);
6907 for (i = 0; i < 2000; i++) {
6908 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE))
6909 break;
6910 udelay(10);
6913 __tg3_set_coalesce(tp, &tp->coal);
6915 /* set status block DMA address */
6916 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
6917 ((u64) tp->status_mapping >> 32));
6918 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
6919 ((u64) tp->status_mapping & 0xffffffff));
6921 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
6922 /* Status/statistics block address. See tg3_timer,
6923 * the tg3_periodic_fetch_stats call there, and
6924 * tg3_get_stats to see how this works for 5705/5750 chips.
6926 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH,
6927 ((u64) tp->stats_mapping >> 32));
6928 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
6929 ((u64) tp->stats_mapping & 0xffffffff));
6930 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK);
6931 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK);
6934 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode);
6936 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE);
6937 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE);
6938 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
6939 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE);
6941 /* Clear statistics/status block in chip, and status block in ram. */
6942 for (i = NIC_SRAM_STATS_BLK;
6943 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE;
6944 i += sizeof(u32)) {
6945 tg3_write_mem(tp, i, 0);
6946 udelay(40);
6948 memset(tp->hw_status, 0, TG3_HW_STATUS_SIZE);
6950 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
6951 tp->tg3_flags2 &= ~TG3_FLG2_PARALLEL_DETECT;
6952 /* reset to prevent losing 1st rx packet intermittently */
6953 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
6954 udelay(10);
6957 tp->mac_mode = MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE |
6958 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | MAC_MODE_FHDE_ENABLE;
6959 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
6960 !(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) &&
6961 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700)
6962 tp->mac_mode |= MAC_MODE_LINK_POLARITY;
6963 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR);
6964 udelay(40);
6966 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
6967 * If TG3_FLG2_IS_NIC is zero, we should read the
6968 * register to preserve the GPIO settings for LOMs. The GPIOs,
6969 * whether used as inputs or outputs, are set by boot code after
6970 * reset.
6972 if (!(tp->tg3_flags2 & TG3_FLG2_IS_NIC)) {
6973 u32 gpio_mask;
6975 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 |
6976 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 |
6977 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2;
6979 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
6980 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
6981 GRC_LCLCTRL_GPIO_OUTPUT3;
6983 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
6984 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
6986 tp->grc_local_ctrl &= ~gpio_mask;
6987 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
6989 /* GPIO1 must be driven high for eeprom write protect */
6990 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT)
6991 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
6992 GRC_LCLCTRL_GPIO_OUTPUT1);
6994 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
6995 udelay(100);
6997 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0);
6998 tp->last_tag = 0;
7000 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
7001 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE);
7002 udelay(40);
7005 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB |
7006 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB |
7007 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB |
7008 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB |
7009 WDMAC_MODE_LNGREAD_ENAB);
7011 /* If statement applies to 5705 and 5750 PCI devices only */
7012 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
7013 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) ||
7014 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) {
7015 if ((tp->tg3_flags & TG3_FLG2_TSO_CAPABLE) &&
7016 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 ||
7017 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) {
7018 /* nothing */
7019 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
7020 !(tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
7021 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) {
7022 val |= WDMAC_MODE_RX_ACCEL;
7026 /* Enable host coalescing bug fix */
7027 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) ||
7028 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) ||
7029 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784) ||
7030 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761))
7031 val |= (1 << 29);
7033 tw32_f(WDMAC_MODE, val);
7034 udelay(40);
7036 if (tp->tg3_flags & TG3_FLAG_PCIX_MODE) {
7037 u16 pcix_cmd;
7039 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7040 &pcix_cmd);
7041 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) {
7042 pcix_cmd &= ~PCI_X_CMD_MAX_READ;
7043 pcix_cmd |= PCI_X_CMD_READ_2K;
7044 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
7045 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
7046 pcix_cmd |= PCI_X_CMD_READ_2K;
7048 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7049 pcix_cmd);
7052 tw32_f(RDMAC_MODE, rdmac_mode);
7053 udelay(40);
7055 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE);
7056 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
7057 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE);
7059 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
7060 tw32(SNDDATAC_MODE,
7061 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY);
7062 else
7063 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE);
7065 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE);
7066 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB);
7067 tw32(RCVDBDI_MODE, RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ);
7068 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE);
7069 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
7070 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8);
7071 tw32(SNDBDI_MODE, SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE);
7072 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE);
7074 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
7075 err = tg3_load_5701_a0_firmware_fix(tp);
7076 if (err)
7077 return err;
7080 if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
7081 err = tg3_load_tso_firmware(tp);
7082 if (err)
7083 return err;
7086 tp->tx_mode = TX_MODE_ENABLE;
7087 tw32_f(MAC_TX_MODE, tp->tx_mode);
7088 udelay(100);
7090 tp->rx_mode = RX_MODE_ENABLE;
7091 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
7092 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
7093 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE;
7095 tw32_f(MAC_RX_MODE, tp->rx_mode);
7096 udelay(10);
7098 if (tp->link_config.phy_is_low_power) {
7099 tp->link_config.phy_is_low_power = 0;
7100 tp->link_config.speed = tp->link_config.orig_speed;
7101 tp->link_config.duplex = tp->link_config.orig_duplex;
7102 tp->link_config.autoneg = tp->link_config.orig_autoneg;
7105 tp->mi_mode = MAC_MI_MODE_BASE;
7106 tw32_f(MAC_MI_MODE, tp->mi_mode);
7107 udelay(80);
7109 tw32(MAC_LED_CTRL, tp->led_ctrl);
7111 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB);
7112 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
7113 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
7114 udelay(10);
7116 tw32_f(MAC_RX_MODE, tp->rx_mode);
7117 udelay(10);
7119 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
7120 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
7121 !(tp->tg3_flags2 & TG3_FLG2_SERDES_PREEMPHASIS)) {
7122 /* Set drive transmission level to 1.2V */
7123 /* only if the signal pre-emphasis bit is not set */
7124 val = tr32(MAC_SERDES_CFG);
7125 val &= 0xfffff000;
7126 val |= 0x880;
7127 tw32(MAC_SERDES_CFG, val);
7129 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1)
7130 tw32(MAC_SERDES_CFG, 0x616000);
7133 /* Prevent chip from dropping frames when flow control
7134 * is enabled.
7136 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, 2);
7138 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 &&
7139 (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
7140 /* Use hardware link auto-negotiation */
7141 tp->tg3_flags2 |= TG3_FLG2_HW_AUTONEG;
7144 if ((tp->tg3_flags2 & TG3_FLG2_MII_SERDES) &&
7145 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) {
7146 u32 tmp;
7148 tmp = tr32(SERDES_RX_CTRL);
7149 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT);
7150 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT;
7151 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT;
7152 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
7155 err = tg3_setup_phy(tp, 0);
7156 if (err)
7157 return err;
7159 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) &&
7160 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906) {
7161 u32 tmp;
7163 /* Clear CRC stats. */
7164 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
7165 tg3_writephy(tp, MII_TG3_TEST1,
7166 tmp | MII_TG3_TEST1_CRC_EN);
7167 tg3_readphy(tp, 0x14, &tmp);
7171 __tg3_set_rx_mode(tp->dev);
7173 /* Initialize receive rules. */
7174 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK);
7175 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK);
7176 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK);
7177 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK);
7179 if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) &&
7180 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
7181 limit = 8;
7182 else
7183 limit = 16;
7184 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF)
7185 limit -= 4;
7186 switch (limit) {
7187 case 16:
7188 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0);
7189 case 15:
7190 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0);
7191 case 14:
7192 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0);
7193 case 13:
7194 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0);
7195 case 12:
7196 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0);
7197 case 11:
7198 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0);
7199 case 10:
7200 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0);
7201 case 9:
7202 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0);
7203 case 8:
7204 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0);
7205 case 7:
7206 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0);
7207 case 6:
7208 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0);
7209 case 5:
7210 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0);
7211 case 4:
7212 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */
7213 case 3:
7214 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */
7215 case 2:
7216 case 1:
7218 default:
7219 break;
7222 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE)
7223 /* Write our heartbeat update interval to APE. */
7224 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
7225 APE_HOST_HEARTBEAT_INT_DISABLE);
7227 tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
7229 return 0;
7232 /* Called at device open time to get the chip ready for
7233 * packet processing. Invoked with tp->lock held.
7235 static int tg3_init_hw(struct tg3 *tp, int reset_phy)
7237 int err;
7239 /* Force the chip into D0. */
7240 err = tg3_set_power_state(tp, PCI_D0);
7241 if (err)
7242 goto out;
7244 tg3_switch_clocks(tp);
7246 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
7248 err = tg3_reset_hw(tp, reset_phy);
7250 out:
7251 return err;
7254 #define TG3_STAT_ADD32(PSTAT, REG) \
7255 do { u32 __val = tr32(REG); \
7256 (PSTAT)->low += __val; \
7257 if ((PSTAT)->low < __val) \
7258 (PSTAT)->high += 1; \
7259 } while (0)
7261 static void tg3_periodic_fetch_stats(struct tg3 *tp)
7263 struct tg3_hw_stats *sp = tp->hw_stats;
7265 if (!netif_carrier_ok(tp->dev))
7266 return;
7268 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS);
7269 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS);
7270 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT);
7271 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT);
7272 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS);
7273 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS);
7274 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS);
7275 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED);
7276 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL);
7277 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL);
7278 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST);
7279 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST);
7280 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST);
7282 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS);
7283 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS);
7284 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST);
7285 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST);
7286 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST);
7287 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS);
7288 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS);
7289 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD);
7290 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD);
7291 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD);
7292 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED);
7293 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG);
7294 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS);
7295 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE);
7297 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT);
7298 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT);
7299 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT);
7302 static void tg3_timer(unsigned long __opaque)
7304 struct tg3 *tp = (struct tg3 *) __opaque;
7306 if (tp->irq_sync)
7307 goto restart_timer;
7309 spin_lock(&tp->lock);
7311 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
7312 /* All of this garbage is because when using non-tagged
7313 * IRQ status the mailbox/status_block protocol the chip
7314 * uses with the cpu is race prone.
7316 if (tp->hw_status->status & SD_STATUS_UPDATED) {
7317 tw32(GRC_LOCAL_CTRL,
7318 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
7319 } else {
7320 tw32(HOSTCC_MODE, tp->coalesce_mode |
7321 (HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW));
7324 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
7325 tp->tg3_flags2 |= TG3_FLG2_RESTART_TIMER;
7326 spin_unlock(&tp->lock);
7327 schedule_work(&tp->reset_task);
7328 return;
7332 /* This part only runs once per second. */
7333 if (!--tp->timer_counter) {
7334 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS)
7335 tg3_periodic_fetch_stats(tp);
7337 if (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) {
7338 u32 mac_stat;
7339 int phy_event;
7341 mac_stat = tr32(MAC_STATUS);
7343 phy_event = 0;
7344 if (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) {
7345 if (mac_stat & MAC_STATUS_MI_INTERRUPT)
7346 phy_event = 1;
7347 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
7348 phy_event = 1;
7350 if (phy_event)
7351 tg3_setup_phy(tp, 0);
7352 } else if (tp->tg3_flags & TG3_FLAG_POLL_SERDES) {
7353 u32 mac_stat = tr32(MAC_STATUS);
7354 int need_setup = 0;
7356 if (netif_carrier_ok(tp->dev) &&
7357 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
7358 need_setup = 1;
7360 if (! netif_carrier_ok(tp->dev) &&
7361 (mac_stat & (MAC_STATUS_PCS_SYNCED |
7362 MAC_STATUS_SIGNAL_DET))) {
7363 need_setup = 1;
7365 if (need_setup) {
7366 if (!tp->serdes_counter) {
7367 tw32_f(MAC_MODE,
7368 (tp->mac_mode &
7369 ~MAC_MODE_PORT_MODE_MASK));
7370 udelay(40);
7371 tw32_f(MAC_MODE, tp->mac_mode);
7372 udelay(40);
7374 tg3_setup_phy(tp, 0);
7376 } else if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
7377 tg3_serdes_parallel_detect(tp);
7379 tp->timer_counter = tp->timer_multiplier;
7382 /* Heartbeat is only sent once every 2 seconds.
7384 * The heartbeat is to tell the ASF firmware that the host
7385 * driver is still alive. In the event that the OS crashes,
7386 * ASF needs to reset the hardware to free up the FIFO space
7387 * that may be filled with rx packets destined for the host.
7388 * If the FIFO is full, ASF will no longer function properly.
7390 * Unintended resets have been reported on real time kernels
7391 * where the timer doesn't run on time. Netpoll will also have
7392 * same problem.
7394 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
7395 * to check the ring condition when the heartbeat is expiring
7396 * before doing the reset. This will prevent most unintended
7397 * resets.
7399 if (!--tp->asf_counter) {
7400 if (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) {
7401 u32 val;
7403 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
7404 FWCMD_NICDRV_ALIVE3);
7405 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
7406 /* 5 seconds timeout */
7407 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 5);
7408 val = tr32(GRC_RX_CPU_EVENT);
7409 val |= (1 << 14);
7410 tw32(GRC_RX_CPU_EVENT, val);
7412 tp->asf_counter = tp->asf_multiplier;
7415 spin_unlock(&tp->lock);
7417 restart_timer:
7418 tp->timer.expires = jiffies + tp->timer_offset;
7419 add_timer(&tp->timer);
7422 static int tg3_request_irq(struct tg3 *tp)
7424 irq_handler_t fn;
7425 unsigned long flags;
7426 struct net_device *dev = tp->dev;
7428 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7429 fn = tg3_msi;
7430 if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI)
7431 fn = tg3_msi_1shot;
7432 flags = IRQF_SAMPLE_RANDOM;
7433 } else {
7434 fn = tg3_interrupt;
7435 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
7436 fn = tg3_interrupt_tagged;
7437 flags = IRQF_SHARED | IRQF_SAMPLE_RANDOM;
7439 return (request_irq(tp->pdev->irq, fn, flags, dev->name, dev));
7442 static int tg3_test_interrupt(struct tg3 *tp)
7444 struct net_device *dev = tp->dev;
7445 int err, i, intr_ok = 0;
7447 if (!netif_running(dev))
7448 return -ENODEV;
7450 tg3_disable_ints(tp);
7452 free_irq(tp->pdev->irq, dev);
7454 err = request_irq(tp->pdev->irq, tg3_test_isr,
7455 IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, dev);
7456 if (err)
7457 return err;
7459 tp->hw_status->status &= ~SD_STATUS_UPDATED;
7460 tg3_enable_ints(tp);
7462 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
7463 HOSTCC_MODE_NOW);
7465 for (i = 0; i < 5; i++) {
7466 u32 int_mbox, misc_host_ctrl;
7468 int_mbox = tr32_mailbox(MAILBOX_INTERRUPT_0 +
7469 TG3_64BIT_REG_LOW);
7470 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
7472 if ((int_mbox != 0) ||
7473 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
7474 intr_ok = 1;
7475 break;
7478 msleep(10);
7481 tg3_disable_ints(tp);
7483 free_irq(tp->pdev->irq, dev);
7485 err = tg3_request_irq(tp);
7487 if (err)
7488 return err;
7490 if (intr_ok)
7491 return 0;
7493 return -EIO;
7496 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
7497 * successfully restored
7499 static int tg3_test_msi(struct tg3 *tp)
7501 struct net_device *dev = tp->dev;
7502 int err;
7503 u16 pci_cmd;
7505 if (!(tp->tg3_flags2 & TG3_FLG2_USING_MSI))
7506 return 0;
7508 /* Turn off SERR reporting in case MSI terminates with Master
7509 * Abort.
7511 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
7512 pci_write_config_word(tp->pdev, PCI_COMMAND,
7513 pci_cmd & ~PCI_COMMAND_SERR);
7515 err = tg3_test_interrupt(tp);
7517 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
7519 if (!err)
7520 return 0;
7522 /* other failures */
7523 if (err != -EIO)
7524 return err;
7526 /* MSI test failed, go back to INTx mode */
7527 printk(KERN_WARNING PFX "%s: No interrupt was generated using MSI, "
7528 "switching to INTx mode. Please report this failure to "
7529 "the PCI maintainer and include system chipset information.\n",
7530 tp->dev->name);
7532 free_irq(tp->pdev->irq, dev);
7533 pci_disable_msi(tp->pdev);
7535 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7537 err = tg3_request_irq(tp);
7538 if (err)
7539 return err;
7541 /* Need to reset the chip because the MSI cycle may have terminated
7542 * with Master Abort.
7544 tg3_full_lock(tp, 1);
7546 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7547 err = tg3_init_hw(tp, 1);
7549 tg3_full_unlock(tp);
7551 if (err)
7552 free_irq(tp->pdev->irq, dev);
7554 return err;
7557 static int tg3_open(struct net_device *dev)
7559 struct tg3 *tp = netdev_priv(dev);
7560 int err;
7562 netif_carrier_off(tp->dev);
7564 tg3_full_lock(tp, 0);
7566 err = tg3_set_power_state(tp, PCI_D0);
7567 if (err) {
7568 tg3_full_unlock(tp);
7569 return err;
7572 tg3_disable_ints(tp);
7573 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
7575 tg3_full_unlock(tp);
7577 /* The placement of this call is tied
7578 * to the setup and use of Host TX descriptors.
7580 err = tg3_alloc_consistent(tp);
7581 if (err)
7582 return err;
7584 if (tp->tg3_flags & TG3_FLAG_SUPPORT_MSI) {
7585 /* All MSI supporting chips should support tagged
7586 * status. Assert that this is the case.
7588 if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
7589 printk(KERN_WARNING PFX "%s: MSI without TAGGED? "
7590 "Not using MSI.\n", tp->dev->name);
7591 } else if (pci_enable_msi(tp->pdev) == 0) {
7592 u32 msi_mode;
7594 msi_mode = tr32(MSGINT_MODE);
7595 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
7596 tp->tg3_flags2 |= TG3_FLG2_USING_MSI;
7599 err = tg3_request_irq(tp);
7601 if (err) {
7602 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7603 pci_disable_msi(tp->pdev);
7604 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7606 tg3_free_consistent(tp);
7607 return err;
7610 napi_enable(&tp->napi);
7612 tg3_full_lock(tp, 0);
7614 err = tg3_init_hw(tp, 1);
7615 if (err) {
7616 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7617 tg3_free_rings(tp);
7618 } else {
7619 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)
7620 tp->timer_offset = HZ;
7621 else
7622 tp->timer_offset = HZ / 10;
7624 BUG_ON(tp->timer_offset > HZ);
7625 tp->timer_counter = tp->timer_multiplier =
7626 (HZ / tp->timer_offset);
7627 tp->asf_counter = tp->asf_multiplier =
7628 ((HZ / tp->timer_offset) * 2);
7630 init_timer(&tp->timer);
7631 tp->timer.expires = jiffies + tp->timer_offset;
7632 tp->timer.data = (unsigned long) tp;
7633 tp->timer.function = tg3_timer;
7636 tg3_full_unlock(tp);
7638 if (err) {
7639 napi_disable(&tp->napi);
7640 free_irq(tp->pdev->irq, dev);
7641 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7642 pci_disable_msi(tp->pdev);
7643 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7645 tg3_free_consistent(tp);
7646 return err;
7649 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7650 err = tg3_test_msi(tp);
7652 if (err) {
7653 tg3_full_lock(tp, 0);
7655 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7656 pci_disable_msi(tp->pdev);
7657 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7659 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7660 tg3_free_rings(tp);
7661 tg3_free_consistent(tp);
7663 tg3_full_unlock(tp);
7665 napi_disable(&tp->napi);
7667 return err;
7670 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7671 if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI) {
7672 u32 val = tr32(PCIE_TRANSACTION_CFG);
7674 tw32(PCIE_TRANSACTION_CFG,
7675 val | PCIE_TRANS_CFG_1SHOT_MSI);
7680 tg3_full_lock(tp, 0);
7682 add_timer(&tp->timer);
7683 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
7684 tg3_enable_ints(tp);
7686 tg3_full_unlock(tp);
7688 netif_start_queue(dev);
7690 return 0;
7693 #if 0
7694 /*static*/ void tg3_dump_state(struct tg3 *tp)
7696 u32 val32, val32_2, val32_3, val32_4, val32_5;
7697 u16 val16;
7698 int i;
7700 pci_read_config_word(tp->pdev, PCI_STATUS, &val16);
7701 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, &val32);
7702 printk("DEBUG: PCI status [%04x] TG3PCI state[%08x]\n",
7703 val16, val32);
7705 /* MAC block */
7706 printk("DEBUG: MAC_MODE[%08x] MAC_STATUS[%08x]\n",
7707 tr32(MAC_MODE), tr32(MAC_STATUS));
7708 printk(" MAC_EVENT[%08x] MAC_LED_CTRL[%08x]\n",
7709 tr32(MAC_EVENT), tr32(MAC_LED_CTRL));
7710 printk("DEBUG: MAC_TX_MODE[%08x] MAC_TX_STATUS[%08x]\n",
7711 tr32(MAC_TX_MODE), tr32(MAC_TX_STATUS));
7712 printk(" MAC_RX_MODE[%08x] MAC_RX_STATUS[%08x]\n",
7713 tr32(MAC_RX_MODE), tr32(MAC_RX_STATUS));
7715 /* Send data initiator control block */
7716 printk("DEBUG: SNDDATAI_MODE[%08x] SNDDATAI_STATUS[%08x]\n",
7717 tr32(SNDDATAI_MODE), tr32(SNDDATAI_STATUS));
7718 printk(" SNDDATAI_STATSCTRL[%08x]\n",
7719 tr32(SNDDATAI_STATSCTRL));
7721 /* Send data completion control block */
7722 printk("DEBUG: SNDDATAC_MODE[%08x]\n", tr32(SNDDATAC_MODE));
7724 /* Send BD ring selector block */
7725 printk("DEBUG: SNDBDS_MODE[%08x] SNDBDS_STATUS[%08x]\n",
7726 tr32(SNDBDS_MODE), tr32(SNDBDS_STATUS));
7728 /* Send BD initiator control block */
7729 printk("DEBUG: SNDBDI_MODE[%08x] SNDBDI_STATUS[%08x]\n",
7730 tr32(SNDBDI_MODE), tr32(SNDBDI_STATUS));
7732 /* Send BD completion control block */
7733 printk("DEBUG: SNDBDC_MODE[%08x]\n", tr32(SNDBDC_MODE));
7735 /* Receive list placement control block */
7736 printk("DEBUG: RCVLPC_MODE[%08x] RCVLPC_STATUS[%08x]\n",
7737 tr32(RCVLPC_MODE), tr32(RCVLPC_STATUS));
7738 printk(" RCVLPC_STATSCTRL[%08x]\n",
7739 tr32(RCVLPC_STATSCTRL));
7741 /* Receive data and receive BD initiator control block */
7742 printk("DEBUG: RCVDBDI_MODE[%08x] RCVDBDI_STATUS[%08x]\n",
7743 tr32(RCVDBDI_MODE), tr32(RCVDBDI_STATUS));
7745 /* Receive data completion control block */
7746 printk("DEBUG: RCVDCC_MODE[%08x]\n",
7747 tr32(RCVDCC_MODE));
7749 /* Receive BD initiator control block */
7750 printk("DEBUG: RCVBDI_MODE[%08x] RCVBDI_STATUS[%08x]\n",
7751 tr32(RCVBDI_MODE), tr32(RCVBDI_STATUS));
7753 /* Receive BD completion control block */
7754 printk("DEBUG: RCVCC_MODE[%08x] RCVCC_STATUS[%08x]\n",
7755 tr32(RCVCC_MODE), tr32(RCVCC_STATUS));
7757 /* Receive list selector control block */
7758 printk("DEBUG: RCVLSC_MODE[%08x] RCVLSC_STATUS[%08x]\n",
7759 tr32(RCVLSC_MODE), tr32(RCVLSC_STATUS));
7761 /* Mbuf cluster free block */
7762 printk("DEBUG: MBFREE_MODE[%08x] MBFREE_STATUS[%08x]\n",
7763 tr32(MBFREE_MODE), tr32(MBFREE_STATUS));
7765 /* Host coalescing control block */
7766 printk("DEBUG: HOSTCC_MODE[%08x] HOSTCC_STATUS[%08x]\n",
7767 tr32(HOSTCC_MODE), tr32(HOSTCC_STATUS));
7768 printk("DEBUG: HOSTCC_STATS_BLK_HOST_ADDR[%08x%08x]\n",
7769 tr32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH),
7770 tr32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW));
7771 printk("DEBUG: HOSTCC_STATUS_BLK_HOST_ADDR[%08x%08x]\n",
7772 tr32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH),
7773 tr32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW));
7774 printk("DEBUG: HOSTCC_STATS_BLK_NIC_ADDR[%08x]\n",
7775 tr32(HOSTCC_STATS_BLK_NIC_ADDR));
7776 printk("DEBUG: HOSTCC_STATUS_BLK_NIC_ADDR[%08x]\n",
7777 tr32(HOSTCC_STATUS_BLK_NIC_ADDR));
7779 /* Memory arbiter control block */
7780 printk("DEBUG: MEMARB_MODE[%08x] MEMARB_STATUS[%08x]\n",
7781 tr32(MEMARB_MODE), tr32(MEMARB_STATUS));
7783 /* Buffer manager control block */
7784 printk("DEBUG: BUFMGR_MODE[%08x] BUFMGR_STATUS[%08x]\n",
7785 tr32(BUFMGR_MODE), tr32(BUFMGR_STATUS));
7786 printk("DEBUG: BUFMGR_MB_POOL_ADDR[%08x] BUFMGR_MB_POOL_SIZE[%08x]\n",
7787 tr32(BUFMGR_MB_POOL_ADDR), tr32(BUFMGR_MB_POOL_SIZE));
7788 printk("DEBUG: BUFMGR_DMA_DESC_POOL_ADDR[%08x] "
7789 "BUFMGR_DMA_DESC_POOL_SIZE[%08x]\n",
7790 tr32(BUFMGR_DMA_DESC_POOL_ADDR),
7791 tr32(BUFMGR_DMA_DESC_POOL_SIZE));
7793 /* Read DMA control block */
7794 printk("DEBUG: RDMAC_MODE[%08x] RDMAC_STATUS[%08x]\n",
7795 tr32(RDMAC_MODE), tr32(RDMAC_STATUS));
7797 /* Write DMA control block */
7798 printk("DEBUG: WDMAC_MODE[%08x] WDMAC_STATUS[%08x]\n",
7799 tr32(WDMAC_MODE), tr32(WDMAC_STATUS));
7801 /* DMA completion block */
7802 printk("DEBUG: DMAC_MODE[%08x]\n",
7803 tr32(DMAC_MODE));
7805 /* GRC block */
7806 printk("DEBUG: GRC_MODE[%08x] GRC_MISC_CFG[%08x]\n",
7807 tr32(GRC_MODE), tr32(GRC_MISC_CFG));
7808 printk("DEBUG: GRC_LOCAL_CTRL[%08x]\n",
7809 tr32(GRC_LOCAL_CTRL));
7811 /* TG3_BDINFOs */
7812 printk("DEBUG: RCVDBDI_JUMBO_BD[%08x%08x:%08x:%08x]\n",
7813 tr32(RCVDBDI_JUMBO_BD + 0x0),
7814 tr32(RCVDBDI_JUMBO_BD + 0x4),
7815 tr32(RCVDBDI_JUMBO_BD + 0x8),
7816 tr32(RCVDBDI_JUMBO_BD + 0xc));
7817 printk("DEBUG: RCVDBDI_STD_BD[%08x%08x:%08x:%08x]\n",
7818 tr32(RCVDBDI_STD_BD + 0x0),
7819 tr32(RCVDBDI_STD_BD + 0x4),
7820 tr32(RCVDBDI_STD_BD + 0x8),
7821 tr32(RCVDBDI_STD_BD + 0xc));
7822 printk("DEBUG: RCVDBDI_MINI_BD[%08x%08x:%08x:%08x]\n",
7823 tr32(RCVDBDI_MINI_BD + 0x0),
7824 tr32(RCVDBDI_MINI_BD + 0x4),
7825 tr32(RCVDBDI_MINI_BD + 0x8),
7826 tr32(RCVDBDI_MINI_BD + 0xc));
7828 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x0, &val32);
7829 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x4, &val32_2);
7830 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0x8, &val32_3);
7831 tg3_read_mem(tp, NIC_SRAM_SEND_RCB + 0xc, &val32_4);
7832 printk("DEBUG: SRAM_SEND_RCB_0[%08x%08x:%08x:%08x]\n",
7833 val32, val32_2, val32_3, val32_4);
7835 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x0, &val32);
7836 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x4, &val32_2);
7837 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0x8, &val32_3);
7838 tg3_read_mem(tp, NIC_SRAM_RCV_RET_RCB + 0xc, &val32_4);
7839 printk("DEBUG: SRAM_RCV_RET_RCB_0[%08x%08x:%08x:%08x]\n",
7840 val32, val32_2, val32_3, val32_4);
7842 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x0, &val32);
7843 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x4, &val32_2);
7844 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x8, &val32_3);
7845 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0xc, &val32_4);
7846 tg3_read_mem(tp, NIC_SRAM_STATUS_BLK + 0x10, &val32_5);
7847 printk("DEBUG: SRAM_STATUS_BLK[%08x:%08x:%08x:%08x:%08x]\n",
7848 val32, val32_2, val32_3, val32_4, val32_5);
7850 /* SW status block */
7851 printk("DEBUG: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
7852 tp->hw_status->status,
7853 tp->hw_status->status_tag,
7854 tp->hw_status->rx_jumbo_consumer,
7855 tp->hw_status->rx_consumer,
7856 tp->hw_status->rx_mini_consumer,
7857 tp->hw_status->idx[0].rx_producer,
7858 tp->hw_status->idx[0].tx_consumer);
7860 /* SW statistics block */
7861 printk("DEBUG: Host statistics block [%08x:%08x:%08x:%08x]\n",
7862 ((u32 *)tp->hw_stats)[0],
7863 ((u32 *)tp->hw_stats)[1],
7864 ((u32 *)tp->hw_stats)[2],
7865 ((u32 *)tp->hw_stats)[3]);
7867 /* Mailboxes */
7868 printk("DEBUG: SNDHOST_PROD[%08x%08x] SNDNIC_PROD[%08x%08x]\n",
7869 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + 0x0),
7870 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + 0x4),
7871 tr32_mailbox(MAILBOX_SNDNIC_PROD_IDX_0 + 0x0),
7872 tr32_mailbox(MAILBOX_SNDNIC_PROD_IDX_0 + 0x4));
7874 /* NIC side send descriptors. */
7875 for (i = 0; i < 6; i++) {
7876 unsigned long txd;
7878 txd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_TX_BUFFER_DESC
7879 + (i * sizeof(struct tg3_tx_buffer_desc));
7880 printk("DEBUG: NIC TXD(%d)[%08x:%08x:%08x:%08x]\n",
7882 readl(txd + 0x0), readl(txd + 0x4),
7883 readl(txd + 0x8), readl(txd + 0xc));
7886 /* NIC side RX descriptors. */
7887 for (i = 0; i < 6; i++) {
7888 unsigned long rxd;
7890 rxd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_RX_BUFFER_DESC
7891 + (i * sizeof(struct tg3_rx_buffer_desc));
7892 printk("DEBUG: NIC RXD_STD(%d)[0][%08x:%08x:%08x:%08x]\n",
7894 readl(rxd + 0x0), readl(rxd + 0x4),
7895 readl(rxd + 0x8), readl(rxd + 0xc));
7896 rxd += (4 * sizeof(u32));
7897 printk("DEBUG: NIC RXD_STD(%d)[1][%08x:%08x:%08x:%08x]\n",
7899 readl(rxd + 0x0), readl(rxd + 0x4),
7900 readl(rxd + 0x8), readl(rxd + 0xc));
7903 for (i = 0; i < 6; i++) {
7904 unsigned long rxd;
7906 rxd = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_RX_JUMBO_BUFFER_DESC
7907 + (i * sizeof(struct tg3_rx_buffer_desc));
7908 printk("DEBUG: NIC RXD_JUMBO(%d)[0][%08x:%08x:%08x:%08x]\n",
7910 readl(rxd + 0x0), readl(rxd + 0x4),
7911 readl(rxd + 0x8), readl(rxd + 0xc));
7912 rxd += (4 * sizeof(u32));
7913 printk("DEBUG: NIC RXD_JUMBO(%d)[1][%08x:%08x:%08x:%08x]\n",
7915 readl(rxd + 0x0), readl(rxd + 0x4),
7916 readl(rxd + 0x8), readl(rxd + 0xc));
7919 #endif
7921 static struct net_device_stats *tg3_get_stats(struct net_device *);
7922 static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *);
7924 static int tg3_close(struct net_device *dev)
7926 struct tg3 *tp = netdev_priv(dev);
7928 napi_disable(&tp->napi);
7929 cancel_work_sync(&tp->reset_task);
7931 netif_stop_queue(dev);
7933 del_timer_sync(&tp->timer);
7935 tg3_full_lock(tp, 1);
7936 #if 0
7937 tg3_dump_state(tp);
7938 #endif
7940 tg3_disable_ints(tp);
7942 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
7943 tg3_free_rings(tp);
7944 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
7946 tg3_full_unlock(tp);
7948 free_irq(tp->pdev->irq, dev);
7949 if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) {
7950 pci_disable_msi(tp->pdev);
7951 tp->tg3_flags2 &= ~TG3_FLG2_USING_MSI;
7954 memcpy(&tp->net_stats_prev, tg3_get_stats(tp->dev),
7955 sizeof(tp->net_stats_prev));
7956 memcpy(&tp->estats_prev, tg3_get_estats(tp),
7957 sizeof(tp->estats_prev));
7959 tg3_free_consistent(tp);
7961 tg3_set_power_state(tp, PCI_D3hot);
7963 netif_carrier_off(tp->dev);
7965 return 0;
7968 static inline unsigned long get_stat64(tg3_stat64_t *val)
7970 unsigned long ret;
7972 #if (BITS_PER_LONG == 32)
7973 ret = val->low;
7974 #else
7975 ret = ((u64)val->high << 32) | ((u64)val->low);
7976 #endif
7977 return ret;
7980 static unsigned long calc_crc_errors(struct tg3 *tp)
7982 struct tg3_hw_stats *hw_stats = tp->hw_stats;
7984 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) &&
7985 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
7986 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
7987 u32 val;
7989 spin_lock_bh(&tp->lock);
7990 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
7991 tg3_writephy(tp, MII_TG3_TEST1,
7992 val | MII_TG3_TEST1_CRC_EN);
7993 tg3_readphy(tp, 0x14, &val);
7994 } else
7995 val = 0;
7996 spin_unlock_bh(&tp->lock);
7998 tp->phy_crc_errors += val;
8000 return tp->phy_crc_errors;
8003 return get_stat64(&hw_stats->rx_fcs_errors);
8006 #define ESTAT_ADD(member) \
8007 estats->member = old_estats->member + \
8008 get_stat64(&hw_stats->member)
8010 static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp)
8012 struct tg3_ethtool_stats *estats = &tp->estats;
8013 struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
8014 struct tg3_hw_stats *hw_stats = tp->hw_stats;
8016 if (!hw_stats)
8017 return old_estats;
8019 ESTAT_ADD(rx_octets);
8020 ESTAT_ADD(rx_fragments);
8021 ESTAT_ADD(rx_ucast_packets);
8022 ESTAT_ADD(rx_mcast_packets);
8023 ESTAT_ADD(rx_bcast_packets);
8024 ESTAT_ADD(rx_fcs_errors);
8025 ESTAT_ADD(rx_align_errors);
8026 ESTAT_ADD(rx_xon_pause_rcvd);
8027 ESTAT_ADD(rx_xoff_pause_rcvd);
8028 ESTAT_ADD(rx_mac_ctrl_rcvd);
8029 ESTAT_ADD(rx_xoff_entered);
8030 ESTAT_ADD(rx_frame_too_long_errors);
8031 ESTAT_ADD(rx_jabbers);
8032 ESTAT_ADD(rx_undersize_packets);
8033 ESTAT_ADD(rx_in_length_errors);
8034 ESTAT_ADD(rx_out_length_errors);
8035 ESTAT_ADD(rx_64_or_less_octet_packets);
8036 ESTAT_ADD(rx_65_to_127_octet_packets);
8037 ESTAT_ADD(rx_128_to_255_octet_packets);
8038 ESTAT_ADD(rx_256_to_511_octet_packets);
8039 ESTAT_ADD(rx_512_to_1023_octet_packets);
8040 ESTAT_ADD(rx_1024_to_1522_octet_packets);
8041 ESTAT_ADD(rx_1523_to_2047_octet_packets);
8042 ESTAT_ADD(rx_2048_to_4095_octet_packets);
8043 ESTAT_ADD(rx_4096_to_8191_octet_packets);
8044 ESTAT_ADD(rx_8192_to_9022_octet_packets);
8046 ESTAT_ADD(tx_octets);
8047 ESTAT_ADD(tx_collisions);
8048 ESTAT_ADD(tx_xon_sent);
8049 ESTAT_ADD(tx_xoff_sent);
8050 ESTAT_ADD(tx_flow_control);
8051 ESTAT_ADD(tx_mac_errors);
8052 ESTAT_ADD(tx_single_collisions);
8053 ESTAT_ADD(tx_mult_collisions);
8054 ESTAT_ADD(tx_deferred);
8055 ESTAT_ADD(tx_excessive_collisions);
8056 ESTAT_ADD(tx_late_collisions);
8057 ESTAT_ADD(tx_collide_2times);
8058 ESTAT_ADD(tx_collide_3times);
8059 ESTAT_ADD(tx_collide_4times);
8060 ESTAT_ADD(tx_collide_5times);
8061 ESTAT_ADD(tx_collide_6times);
8062 ESTAT_ADD(tx_collide_7times);
8063 ESTAT_ADD(tx_collide_8times);
8064 ESTAT_ADD(tx_collide_9times);
8065 ESTAT_ADD(tx_collide_10times);
8066 ESTAT_ADD(tx_collide_11times);
8067 ESTAT_ADD(tx_collide_12times);
8068 ESTAT_ADD(tx_collide_13times);
8069 ESTAT_ADD(tx_collide_14times);
8070 ESTAT_ADD(tx_collide_15times);
8071 ESTAT_ADD(tx_ucast_packets);
8072 ESTAT_ADD(tx_mcast_packets);
8073 ESTAT_ADD(tx_bcast_packets);
8074 ESTAT_ADD(tx_carrier_sense_errors);
8075 ESTAT_ADD(tx_discards);
8076 ESTAT_ADD(tx_errors);
8078 ESTAT_ADD(dma_writeq_full);
8079 ESTAT_ADD(dma_write_prioq_full);
8080 ESTAT_ADD(rxbds_empty);
8081 ESTAT_ADD(rx_discards);
8082 ESTAT_ADD(rx_errors);
8083 ESTAT_ADD(rx_threshold_hit);
8085 ESTAT_ADD(dma_readq_full);
8086 ESTAT_ADD(dma_read_prioq_full);
8087 ESTAT_ADD(tx_comp_queue_full);
8089 ESTAT_ADD(ring_set_send_prod_index);
8090 ESTAT_ADD(ring_status_update);
8091 ESTAT_ADD(nic_irqs);
8092 ESTAT_ADD(nic_avoided_irqs);
8093 ESTAT_ADD(nic_tx_threshold_hit);
8095 return estats;
8098 static struct net_device_stats *tg3_get_stats(struct net_device *dev)
8100 struct tg3 *tp = netdev_priv(dev);
8101 struct net_device_stats *stats = &tp->net_stats;
8102 struct net_device_stats *old_stats = &tp->net_stats_prev;
8103 struct tg3_hw_stats *hw_stats = tp->hw_stats;
8105 if (!hw_stats)
8106 return old_stats;
8108 stats->rx_packets = old_stats->rx_packets +
8109 get_stat64(&hw_stats->rx_ucast_packets) +
8110 get_stat64(&hw_stats->rx_mcast_packets) +
8111 get_stat64(&hw_stats->rx_bcast_packets);
8113 stats->tx_packets = old_stats->tx_packets +
8114 get_stat64(&hw_stats->tx_ucast_packets) +
8115 get_stat64(&hw_stats->tx_mcast_packets) +
8116 get_stat64(&hw_stats->tx_bcast_packets);
8118 stats->rx_bytes = old_stats->rx_bytes +
8119 get_stat64(&hw_stats->rx_octets);
8120 stats->tx_bytes = old_stats->tx_bytes +
8121 get_stat64(&hw_stats->tx_octets);
8123 stats->rx_errors = old_stats->rx_errors +
8124 get_stat64(&hw_stats->rx_errors);
8125 stats->tx_errors = old_stats->tx_errors +
8126 get_stat64(&hw_stats->tx_errors) +
8127 get_stat64(&hw_stats->tx_mac_errors) +
8128 get_stat64(&hw_stats->tx_carrier_sense_errors) +
8129 get_stat64(&hw_stats->tx_discards);
8131 stats->multicast = old_stats->multicast +
8132 get_stat64(&hw_stats->rx_mcast_packets);
8133 stats->collisions = old_stats->collisions +
8134 get_stat64(&hw_stats->tx_collisions);
8136 stats->rx_length_errors = old_stats->rx_length_errors +
8137 get_stat64(&hw_stats->rx_frame_too_long_errors) +
8138 get_stat64(&hw_stats->rx_undersize_packets);
8140 stats->rx_over_errors = old_stats->rx_over_errors +
8141 get_stat64(&hw_stats->rxbds_empty);
8142 stats->rx_frame_errors = old_stats->rx_frame_errors +
8143 get_stat64(&hw_stats->rx_align_errors);
8144 stats->tx_aborted_errors = old_stats->tx_aborted_errors +
8145 get_stat64(&hw_stats->tx_discards);
8146 stats->tx_carrier_errors = old_stats->tx_carrier_errors +
8147 get_stat64(&hw_stats->tx_carrier_sense_errors);
8149 stats->rx_crc_errors = old_stats->rx_crc_errors +
8150 calc_crc_errors(tp);
8152 stats->rx_missed_errors = old_stats->rx_missed_errors +
8153 get_stat64(&hw_stats->rx_discards);
8155 return stats;
8158 static inline u32 calc_crc(unsigned char *buf, int len)
8160 u32 reg;
8161 u32 tmp;
8162 int j, k;
8164 reg = 0xffffffff;
8166 for (j = 0; j < len; j++) {
8167 reg ^= buf[j];
8169 for (k = 0; k < 8; k++) {
8170 tmp = reg & 0x01;
8172 reg >>= 1;
8174 if (tmp) {
8175 reg ^= 0xedb88320;
8180 return ~reg;
8183 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
8185 /* accept or reject all multicast frames */
8186 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
8187 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
8188 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
8189 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
8192 static void __tg3_set_rx_mode(struct net_device *dev)
8194 struct tg3 *tp = netdev_priv(dev);
8195 u32 rx_mode;
8197 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
8198 RX_MODE_KEEP_VLAN_TAG);
8200 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
8201 * flag clear.
8203 #if TG3_VLAN_TAG_USED
8204 if (!tp->vlgrp &&
8205 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
8206 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
8207 #else
8208 /* By definition, VLAN is disabled always in this
8209 * case.
8211 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
8212 rx_mode |= RX_MODE_KEEP_VLAN_TAG;
8213 #endif
8215 if (dev->flags & IFF_PROMISC) {
8216 /* Promiscuous mode. */
8217 rx_mode |= RX_MODE_PROMISC;
8218 } else if (dev->flags & IFF_ALLMULTI) {
8219 /* Accept all multicast. */
8220 tg3_set_multi (tp, 1);
8221 } else if (dev->mc_count < 1) {
8222 /* Reject all multicast. */
8223 tg3_set_multi (tp, 0);
8224 } else {
8225 /* Accept one or more multicast(s). */
8226 struct dev_mc_list *mclist;
8227 unsigned int i;
8228 u32 mc_filter[4] = { 0, };
8229 u32 regidx;
8230 u32 bit;
8231 u32 crc;
8233 for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
8234 i++, mclist = mclist->next) {
8236 crc = calc_crc (mclist->dmi_addr, ETH_ALEN);
8237 bit = ~crc & 0x7f;
8238 regidx = (bit & 0x60) >> 5;
8239 bit &= 0x1f;
8240 mc_filter[regidx] |= (1 << bit);
8243 tw32(MAC_HASH_REG_0, mc_filter[0]);
8244 tw32(MAC_HASH_REG_1, mc_filter[1]);
8245 tw32(MAC_HASH_REG_2, mc_filter[2]);
8246 tw32(MAC_HASH_REG_3, mc_filter[3]);
8249 if (rx_mode != tp->rx_mode) {
8250 tp->rx_mode = rx_mode;
8251 tw32_f(MAC_RX_MODE, rx_mode);
8252 udelay(10);
8256 static void tg3_set_rx_mode(struct net_device *dev)
8258 struct tg3 *tp = netdev_priv(dev);
8260 if (!netif_running(dev))
8261 return;
8263 tg3_full_lock(tp, 0);
8264 __tg3_set_rx_mode(dev);
8265 tg3_full_unlock(tp);
8268 #define TG3_REGDUMP_LEN (32 * 1024)
8270 static int tg3_get_regs_len(struct net_device *dev)
8272 return TG3_REGDUMP_LEN;
8275 static void tg3_get_regs(struct net_device *dev,
8276 struct ethtool_regs *regs, void *_p)
8278 u32 *p = _p;
8279 struct tg3 *tp = netdev_priv(dev);
8280 u8 *orig_p = _p;
8281 int i;
8283 regs->version = 0;
8285 memset(p, 0, TG3_REGDUMP_LEN);
8287 if (tp->link_config.phy_is_low_power)
8288 return;
8290 tg3_full_lock(tp, 0);
8292 #define __GET_REG32(reg) (*(p)++ = tr32(reg))
8293 #define GET_REG32_LOOP(base,len) \
8294 do { p = (u32 *)(orig_p + (base)); \
8295 for (i = 0; i < len; i += 4) \
8296 __GET_REG32((base) + i); \
8297 } while (0)
8298 #define GET_REG32_1(reg) \
8299 do { p = (u32 *)(orig_p + (reg)); \
8300 __GET_REG32((reg)); \
8301 } while (0)
8303 GET_REG32_LOOP(TG3PCI_VENDOR, 0xb0);
8304 GET_REG32_LOOP(MAILBOX_INTERRUPT_0, 0x200);
8305 GET_REG32_LOOP(MAC_MODE, 0x4f0);
8306 GET_REG32_LOOP(SNDDATAI_MODE, 0xe0);
8307 GET_REG32_1(SNDDATAC_MODE);
8308 GET_REG32_LOOP(SNDBDS_MODE, 0x80);
8309 GET_REG32_LOOP(SNDBDI_MODE, 0x48);
8310 GET_REG32_1(SNDBDC_MODE);
8311 GET_REG32_LOOP(RCVLPC_MODE, 0x20);
8312 GET_REG32_LOOP(RCVLPC_SELLST_BASE, 0x15c);
8313 GET_REG32_LOOP(RCVDBDI_MODE, 0x0c);
8314 GET_REG32_LOOP(RCVDBDI_JUMBO_BD, 0x3c);
8315 GET_REG32_LOOP(RCVDBDI_BD_PROD_IDX_0, 0x44);
8316 GET_REG32_1(RCVDCC_MODE);
8317 GET_REG32_LOOP(RCVBDI_MODE, 0x20);
8318 GET_REG32_LOOP(RCVCC_MODE, 0x14);
8319 GET_REG32_LOOP(RCVLSC_MODE, 0x08);
8320 GET_REG32_1(MBFREE_MODE);
8321 GET_REG32_LOOP(HOSTCC_MODE, 0x100);
8322 GET_REG32_LOOP(MEMARB_MODE, 0x10);
8323 GET_REG32_LOOP(BUFMGR_MODE, 0x58);
8324 GET_REG32_LOOP(RDMAC_MODE, 0x08);
8325 GET_REG32_LOOP(WDMAC_MODE, 0x08);
8326 GET_REG32_1(RX_CPU_MODE);
8327 GET_REG32_1(RX_CPU_STATE);
8328 GET_REG32_1(RX_CPU_PGMCTR);
8329 GET_REG32_1(RX_CPU_HWBKPT);
8330 GET_REG32_1(TX_CPU_MODE);
8331 GET_REG32_1(TX_CPU_STATE);
8332 GET_REG32_1(TX_CPU_PGMCTR);
8333 GET_REG32_LOOP(GRCMBOX_INTERRUPT_0, 0x110);
8334 GET_REG32_LOOP(FTQ_RESET, 0x120);
8335 GET_REG32_LOOP(MSGINT_MODE, 0x0c);
8336 GET_REG32_1(DMAC_MODE);
8337 GET_REG32_LOOP(GRC_MODE, 0x4c);
8338 if (tp->tg3_flags & TG3_FLAG_NVRAM)
8339 GET_REG32_LOOP(NVRAM_CMD, 0x24);
8341 #undef __GET_REG32
8342 #undef GET_REG32_LOOP
8343 #undef GET_REG32_1
8345 tg3_full_unlock(tp);
8348 static int tg3_get_eeprom_len(struct net_device *dev)
8350 struct tg3 *tp = netdev_priv(dev);
8352 return tp->nvram_size;
8355 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val);
8356 static int tg3_nvram_read_le(struct tg3 *tp, u32 offset, __le32 *val);
8357 static int tg3_nvram_read_swab(struct tg3 *tp, u32 offset, u32 *val);
8359 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
8361 struct tg3 *tp = netdev_priv(dev);
8362 int ret;
8363 u8 *pd;
8364 u32 i, offset, len, b_offset, b_count;
8365 __le32 val;
8367 if (tp->link_config.phy_is_low_power)
8368 return -EAGAIN;
8370 offset = eeprom->offset;
8371 len = eeprom->len;
8372 eeprom->len = 0;
8374 eeprom->magic = TG3_EEPROM_MAGIC;
8376 if (offset & 3) {
8377 /* adjustments to start on required 4 byte boundary */
8378 b_offset = offset & 3;
8379 b_count = 4 - b_offset;
8380 if (b_count > len) {
8381 /* i.e. offset=1 len=2 */
8382 b_count = len;
8384 ret = tg3_nvram_read_le(tp, offset-b_offset, &val);
8385 if (ret)
8386 return ret;
8387 memcpy(data, ((char*)&val) + b_offset, b_count);
8388 len -= b_count;
8389 offset += b_count;
8390 eeprom->len += b_count;
8393 /* read bytes upto the last 4 byte boundary */
8394 pd = &data[eeprom->len];
8395 for (i = 0; i < (len - (len & 3)); i += 4) {
8396 ret = tg3_nvram_read_le(tp, offset + i, &val);
8397 if (ret) {
8398 eeprom->len += i;
8399 return ret;
8401 memcpy(pd + i, &val, 4);
8403 eeprom->len += i;
8405 if (len & 3) {
8406 /* read last bytes not ending on 4 byte boundary */
8407 pd = &data[eeprom->len];
8408 b_count = len & 3;
8409 b_offset = offset + len - b_count;
8410 ret = tg3_nvram_read_le(tp, b_offset, &val);
8411 if (ret)
8412 return ret;
8413 memcpy(pd, &val, b_count);
8414 eeprom->len += b_count;
8416 return 0;
8419 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf);
8421 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
8423 struct tg3 *tp = netdev_priv(dev);
8424 int ret;
8425 u32 offset, len, b_offset, odd_len;
8426 u8 *buf;
8427 __le32 start, end;
8429 if (tp->link_config.phy_is_low_power)
8430 return -EAGAIN;
8432 if (eeprom->magic != TG3_EEPROM_MAGIC)
8433 return -EINVAL;
8435 offset = eeprom->offset;
8436 len = eeprom->len;
8438 if ((b_offset = (offset & 3))) {
8439 /* adjustments to start on required 4 byte boundary */
8440 ret = tg3_nvram_read_le(tp, offset-b_offset, &start);
8441 if (ret)
8442 return ret;
8443 len += b_offset;
8444 offset &= ~3;
8445 if (len < 4)
8446 len = 4;
8449 odd_len = 0;
8450 if (len & 3) {
8451 /* adjustments to end on required 4 byte boundary */
8452 odd_len = 1;
8453 len = (len + 3) & ~3;
8454 ret = tg3_nvram_read_le(tp, offset+len-4, &end);
8455 if (ret)
8456 return ret;
8459 buf = data;
8460 if (b_offset || odd_len) {
8461 buf = kmalloc(len, GFP_KERNEL);
8462 if (!buf)
8463 return -ENOMEM;
8464 if (b_offset)
8465 memcpy(buf, &start, 4);
8466 if (odd_len)
8467 memcpy(buf+len-4, &end, 4);
8468 memcpy(buf + b_offset, data, eeprom->len);
8471 ret = tg3_nvram_write_block(tp, offset, len, buf);
8473 if (buf != data)
8474 kfree(buf);
8476 return ret;
8479 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
8481 struct tg3 *tp = netdev_priv(dev);
8483 cmd->supported = (SUPPORTED_Autoneg);
8485 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
8486 cmd->supported |= (SUPPORTED_1000baseT_Half |
8487 SUPPORTED_1000baseT_Full);
8489 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)) {
8490 cmd->supported |= (SUPPORTED_100baseT_Half |
8491 SUPPORTED_100baseT_Full |
8492 SUPPORTED_10baseT_Half |
8493 SUPPORTED_10baseT_Full |
8494 SUPPORTED_TP);
8495 cmd->port = PORT_TP;
8496 } else {
8497 cmd->supported |= SUPPORTED_FIBRE;
8498 cmd->port = PORT_FIBRE;
8501 cmd->advertising = tp->link_config.advertising;
8502 if (netif_running(dev)) {
8503 cmd->speed = tp->link_config.active_speed;
8504 cmd->duplex = tp->link_config.active_duplex;
8506 cmd->phy_address = PHY_ADDR;
8507 cmd->transceiver = 0;
8508 cmd->autoneg = tp->link_config.autoneg;
8509 cmd->maxtxpkt = 0;
8510 cmd->maxrxpkt = 0;
8511 return 0;
8514 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
8516 struct tg3 *tp = netdev_priv(dev);
8518 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) {
8519 /* These are the only valid advertisement bits allowed. */
8520 if (cmd->autoneg == AUTONEG_ENABLE &&
8521 (cmd->advertising & ~(ADVERTISED_1000baseT_Half |
8522 ADVERTISED_1000baseT_Full |
8523 ADVERTISED_Autoneg |
8524 ADVERTISED_FIBRE)))
8525 return -EINVAL;
8526 /* Fiber can only do SPEED_1000. */
8527 else if ((cmd->autoneg != AUTONEG_ENABLE) &&
8528 (cmd->speed != SPEED_1000))
8529 return -EINVAL;
8530 /* Copper cannot force SPEED_1000. */
8531 } else if ((cmd->autoneg != AUTONEG_ENABLE) &&
8532 (cmd->speed == SPEED_1000))
8533 return -EINVAL;
8534 else if ((cmd->speed == SPEED_1000) &&
8535 (tp->tg3_flags2 & TG3_FLAG_10_100_ONLY))
8536 return -EINVAL;
8538 tg3_full_lock(tp, 0);
8540 tp->link_config.autoneg = cmd->autoneg;
8541 if (cmd->autoneg == AUTONEG_ENABLE) {
8542 tp->link_config.advertising = (cmd->advertising |
8543 ADVERTISED_Autoneg);
8544 tp->link_config.speed = SPEED_INVALID;
8545 tp->link_config.duplex = DUPLEX_INVALID;
8546 } else {
8547 tp->link_config.advertising = 0;
8548 tp->link_config.speed = cmd->speed;
8549 tp->link_config.duplex = cmd->duplex;
8552 tp->link_config.orig_speed = tp->link_config.speed;
8553 tp->link_config.orig_duplex = tp->link_config.duplex;
8554 tp->link_config.orig_autoneg = tp->link_config.autoneg;
8556 if (netif_running(dev))
8557 tg3_setup_phy(tp, 1);
8559 tg3_full_unlock(tp);
8561 return 0;
8564 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
8566 struct tg3 *tp = netdev_priv(dev);
8568 strcpy(info->driver, DRV_MODULE_NAME);
8569 strcpy(info->version, DRV_MODULE_VERSION);
8570 strcpy(info->fw_version, tp->fw_ver);
8571 strcpy(info->bus_info, pci_name(tp->pdev));
8574 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
8576 struct tg3 *tp = netdev_priv(dev);
8578 if (tp->tg3_flags & TG3_FLAG_WOL_CAP)
8579 wol->supported = WAKE_MAGIC;
8580 else
8581 wol->supported = 0;
8582 wol->wolopts = 0;
8583 if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE)
8584 wol->wolopts = WAKE_MAGIC;
8585 memset(&wol->sopass, 0, sizeof(wol->sopass));
8588 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
8590 struct tg3 *tp = netdev_priv(dev);
8592 if (wol->wolopts & ~WAKE_MAGIC)
8593 return -EINVAL;
8594 if ((wol->wolopts & WAKE_MAGIC) &&
8595 !(tp->tg3_flags & TG3_FLAG_WOL_CAP))
8596 return -EINVAL;
8598 spin_lock_bh(&tp->lock);
8599 if (wol->wolopts & WAKE_MAGIC)
8600 tp->tg3_flags |= TG3_FLAG_WOL_ENABLE;
8601 else
8602 tp->tg3_flags &= ~TG3_FLAG_WOL_ENABLE;
8603 spin_unlock_bh(&tp->lock);
8605 return 0;
8608 static u32 tg3_get_msglevel(struct net_device *dev)
8610 struct tg3 *tp = netdev_priv(dev);
8611 return tp->msg_enable;
8614 static void tg3_set_msglevel(struct net_device *dev, u32 value)
8616 struct tg3 *tp = netdev_priv(dev);
8617 tp->msg_enable = value;
8620 static int tg3_set_tso(struct net_device *dev, u32 value)
8622 struct tg3 *tp = netdev_priv(dev);
8624 if (!(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE)) {
8625 if (value)
8626 return -EINVAL;
8627 return 0;
8629 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) &&
8630 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)) {
8631 if (value) {
8632 dev->features |= NETIF_F_TSO6;
8633 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
8634 dev->features |= NETIF_F_TSO_ECN;
8635 } else
8636 dev->features &= ~(NETIF_F_TSO6 | NETIF_F_TSO_ECN);
8638 return ethtool_op_set_tso(dev, value);
8641 static int tg3_nway_reset(struct net_device *dev)
8643 struct tg3 *tp = netdev_priv(dev);
8644 u32 bmcr;
8645 int r;
8647 if (!netif_running(dev))
8648 return -EAGAIN;
8650 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
8651 return -EINVAL;
8653 spin_lock_bh(&tp->lock);
8654 r = -EINVAL;
8655 tg3_readphy(tp, MII_BMCR, &bmcr);
8656 if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
8657 ((bmcr & BMCR_ANENABLE) ||
8658 (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT))) {
8659 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
8660 BMCR_ANENABLE);
8661 r = 0;
8663 spin_unlock_bh(&tp->lock);
8665 return r;
8668 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
8670 struct tg3 *tp = netdev_priv(dev);
8672 ering->rx_max_pending = TG3_RX_RING_SIZE - 1;
8673 ering->rx_mini_max_pending = 0;
8674 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE)
8675 ering->rx_jumbo_max_pending = TG3_RX_JUMBO_RING_SIZE - 1;
8676 else
8677 ering->rx_jumbo_max_pending = 0;
8679 ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
8681 ering->rx_pending = tp->rx_pending;
8682 ering->rx_mini_pending = 0;
8683 if (tp->tg3_flags & TG3_FLAG_JUMBO_RING_ENABLE)
8684 ering->rx_jumbo_pending = tp->rx_jumbo_pending;
8685 else
8686 ering->rx_jumbo_pending = 0;
8688 ering->tx_pending = tp->tx_pending;
8691 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
8693 struct tg3 *tp = netdev_priv(dev);
8694 int irq_sync = 0, err = 0;
8696 if ((ering->rx_pending > TG3_RX_RING_SIZE - 1) ||
8697 (ering->rx_jumbo_pending > TG3_RX_JUMBO_RING_SIZE - 1) ||
8698 (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
8699 (ering->tx_pending <= MAX_SKB_FRAGS) ||
8700 ((tp->tg3_flags2 & TG3_FLG2_TSO_BUG) &&
8701 (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
8702 return -EINVAL;
8704 if (netif_running(dev)) {
8705 tg3_netif_stop(tp);
8706 irq_sync = 1;
8709 tg3_full_lock(tp, irq_sync);
8711 tp->rx_pending = ering->rx_pending;
8713 if ((tp->tg3_flags2 & TG3_FLG2_MAX_RXPEND_64) &&
8714 tp->rx_pending > 63)
8715 tp->rx_pending = 63;
8716 tp->rx_jumbo_pending = ering->rx_jumbo_pending;
8717 tp->tx_pending = ering->tx_pending;
8719 if (netif_running(dev)) {
8720 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
8721 err = tg3_restart_hw(tp, 1);
8722 if (!err)
8723 tg3_netif_start(tp);
8726 tg3_full_unlock(tp);
8728 return err;
8731 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
8733 struct tg3 *tp = netdev_priv(dev);
8735 epause->autoneg = (tp->tg3_flags & TG3_FLAG_PAUSE_AUTONEG) != 0;
8737 if (tp->link_config.active_flowctrl & TG3_FLOW_CTRL_RX)
8738 epause->rx_pause = 1;
8739 else
8740 epause->rx_pause = 0;
8742 if (tp->link_config.active_flowctrl & TG3_FLOW_CTRL_TX)
8743 epause->tx_pause = 1;
8744 else
8745 epause->tx_pause = 0;
8748 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
8750 struct tg3 *tp = netdev_priv(dev);
8751 int irq_sync = 0, err = 0;
8753 if (netif_running(dev)) {
8754 tg3_netif_stop(tp);
8755 irq_sync = 1;
8758 tg3_full_lock(tp, irq_sync);
8760 if (epause->autoneg)
8761 tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
8762 else
8763 tp->tg3_flags &= ~TG3_FLAG_PAUSE_AUTONEG;
8764 if (epause->rx_pause)
8765 tp->link_config.flowctrl |= TG3_FLOW_CTRL_RX;
8766 else
8767 tp->link_config.flowctrl &= ~TG3_FLOW_CTRL_RX;
8768 if (epause->tx_pause)
8769 tp->link_config.flowctrl |= TG3_FLOW_CTRL_TX;
8770 else
8771 tp->link_config.flowctrl &= ~TG3_FLOW_CTRL_TX;
8773 if (netif_running(dev)) {
8774 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
8775 err = tg3_restart_hw(tp, 1);
8776 if (!err)
8777 tg3_netif_start(tp);
8780 tg3_full_unlock(tp);
8782 return err;
8785 static u32 tg3_get_rx_csum(struct net_device *dev)
8787 struct tg3 *tp = netdev_priv(dev);
8788 return (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0;
8791 static int tg3_set_rx_csum(struct net_device *dev, u32 data)
8793 struct tg3 *tp = netdev_priv(dev);
8795 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
8796 if (data != 0)
8797 return -EINVAL;
8798 return 0;
8801 spin_lock_bh(&tp->lock);
8802 if (data)
8803 tp->tg3_flags |= TG3_FLAG_RX_CHECKSUMS;
8804 else
8805 tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
8806 spin_unlock_bh(&tp->lock);
8808 return 0;
8811 static int tg3_set_tx_csum(struct net_device *dev, u32 data)
8813 struct tg3 *tp = netdev_priv(dev);
8815 if (tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) {
8816 if (data != 0)
8817 return -EINVAL;
8818 return 0;
8821 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8822 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
8823 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
8824 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
8825 ethtool_op_set_tx_ipv6_csum(dev, data);
8826 else
8827 ethtool_op_set_tx_csum(dev, data);
8829 return 0;
8832 static int tg3_get_sset_count (struct net_device *dev, int sset)
8834 switch (sset) {
8835 case ETH_SS_TEST:
8836 return TG3_NUM_TEST;
8837 case ETH_SS_STATS:
8838 return TG3_NUM_STATS;
8839 default:
8840 return -EOPNOTSUPP;
8844 static void tg3_get_strings (struct net_device *dev, u32 stringset, u8 *buf)
8846 switch (stringset) {
8847 case ETH_SS_STATS:
8848 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
8849 break;
8850 case ETH_SS_TEST:
8851 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
8852 break;
8853 default:
8854 WARN_ON(1); /* we need a WARN() */
8855 break;
8859 static int tg3_phys_id(struct net_device *dev, u32 data)
8861 struct tg3 *tp = netdev_priv(dev);
8862 int i;
8864 if (!netif_running(tp->dev))
8865 return -EAGAIN;
8867 if (data == 0)
8868 data = UINT_MAX / 2;
8870 for (i = 0; i < (data * 2); i++) {
8871 if ((i % 2) == 0)
8872 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
8873 LED_CTRL_1000MBPS_ON |
8874 LED_CTRL_100MBPS_ON |
8875 LED_CTRL_10MBPS_ON |
8876 LED_CTRL_TRAFFIC_OVERRIDE |
8877 LED_CTRL_TRAFFIC_BLINK |
8878 LED_CTRL_TRAFFIC_LED);
8880 else
8881 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE |
8882 LED_CTRL_TRAFFIC_OVERRIDE);
8884 if (msleep_interruptible(500))
8885 break;
8887 tw32(MAC_LED_CTRL, tp->led_ctrl);
8888 return 0;
8891 static void tg3_get_ethtool_stats (struct net_device *dev,
8892 struct ethtool_stats *estats, u64 *tmp_stats)
8894 struct tg3 *tp = netdev_priv(dev);
8895 memcpy(tmp_stats, tg3_get_estats(tp), sizeof(tp->estats));
8898 #define NVRAM_TEST_SIZE 0x100
8899 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14
8900 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18
8901 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c
8902 #define NVRAM_SELFBOOT_HW_SIZE 0x20
8903 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
8905 static int tg3_test_nvram(struct tg3 *tp)
8907 u32 csum, magic;
8908 __le32 *buf;
8909 int i, j, k, err = 0, size;
8911 if (tg3_nvram_read_swab(tp, 0, &magic) != 0)
8912 return -EIO;
8914 if (magic == TG3_EEPROM_MAGIC)
8915 size = NVRAM_TEST_SIZE;
8916 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
8917 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
8918 TG3_EEPROM_SB_FORMAT_1) {
8919 switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
8920 case TG3_EEPROM_SB_REVISION_0:
8921 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE;
8922 break;
8923 case TG3_EEPROM_SB_REVISION_2:
8924 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE;
8925 break;
8926 case TG3_EEPROM_SB_REVISION_3:
8927 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE;
8928 break;
8929 default:
8930 return 0;
8932 } else
8933 return 0;
8934 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
8935 size = NVRAM_SELFBOOT_HW_SIZE;
8936 else
8937 return -EIO;
8939 buf = kmalloc(size, GFP_KERNEL);
8940 if (buf == NULL)
8941 return -ENOMEM;
8943 err = -EIO;
8944 for (i = 0, j = 0; i < size; i += 4, j++) {
8945 if ((err = tg3_nvram_read_le(tp, i, &buf[j])) != 0)
8946 break;
8948 if (i < size)
8949 goto out;
8951 /* Selfboot format */
8952 magic = swab32(le32_to_cpu(buf[0]));
8953 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
8954 TG3_EEPROM_MAGIC_FW) {
8955 u8 *buf8 = (u8 *) buf, csum8 = 0;
8957 if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
8958 TG3_EEPROM_SB_REVISION_2) {
8959 /* For rev 2, the csum doesn't include the MBA. */
8960 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
8961 csum8 += buf8[i];
8962 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
8963 csum8 += buf8[i];
8964 } else {
8965 for (i = 0; i < size; i++)
8966 csum8 += buf8[i];
8969 if (csum8 == 0) {
8970 err = 0;
8971 goto out;
8974 err = -EIO;
8975 goto out;
8978 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
8979 TG3_EEPROM_MAGIC_HW) {
8980 u8 data[NVRAM_SELFBOOT_DATA_SIZE];
8981 u8 parity[NVRAM_SELFBOOT_DATA_SIZE];
8982 u8 *buf8 = (u8 *) buf;
8984 /* Separate the parity bits and the data bytes. */
8985 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
8986 if ((i == 0) || (i == 8)) {
8987 int l;
8988 u8 msk;
8990 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
8991 parity[k++] = buf8[i] & msk;
8992 i++;
8994 else if (i == 16) {
8995 int l;
8996 u8 msk;
8998 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
8999 parity[k++] = buf8[i] & msk;
9000 i++;
9002 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
9003 parity[k++] = buf8[i] & msk;
9004 i++;
9006 data[j++] = buf8[i];
9009 err = -EIO;
9010 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
9011 u8 hw8 = hweight8(data[i]);
9013 if ((hw8 & 0x1) && parity[i])
9014 goto out;
9015 else if (!(hw8 & 0x1) && !parity[i])
9016 goto out;
9018 err = 0;
9019 goto out;
9022 /* Bootstrap checksum at offset 0x10 */
9023 csum = calc_crc((unsigned char *) buf, 0x10);
9024 if(csum != le32_to_cpu(buf[0x10/4]))
9025 goto out;
9027 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
9028 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
9029 if (csum != le32_to_cpu(buf[0xfc/4]))
9030 goto out;
9032 err = 0;
9034 out:
9035 kfree(buf);
9036 return err;
9039 #define TG3_SERDES_TIMEOUT_SEC 2
9040 #define TG3_COPPER_TIMEOUT_SEC 6
9042 static int tg3_test_link(struct tg3 *tp)
9044 int i, max;
9046 if (!netif_running(tp->dev))
9047 return -ENODEV;
9049 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
9050 max = TG3_SERDES_TIMEOUT_SEC;
9051 else
9052 max = TG3_COPPER_TIMEOUT_SEC;
9054 for (i = 0; i < max; i++) {
9055 if (netif_carrier_ok(tp->dev))
9056 return 0;
9058 if (msleep_interruptible(1000))
9059 break;
9062 return -EIO;
9065 /* Only test the commonly used registers */
9066 static int tg3_test_registers(struct tg3 *tp)
9068 int i, is_5705, is_5750;
9069 u32 offset, read_mask, write_mask, val, save_val, read_val;
9070 static struct {
9071 u16 offset;
9072 u16 flags;
9073 #define TG3_FL_5705 0x1
9074 #define TG3_FL_NOT_5705 0x2
9075 #define TG3_FL_NOT_5788 0x4
9076 #define TG3_FL_NOT_5750 0x8
9077 u32 read_mask;
9078 u32 write_mask;
9079 } reg_tbl[] = {
9080 /* MAC Control Registers */
9081 { MAC_MODE, TG3_FL_NOT_5705,
9082 0x00000000, 0x00ef6f8c },
9083 { MAC_MODE, TG3_FL_5705,
9084 0x00000000, 0x01ef6b8c },
9085 { MAC_STATUS, TG3_FL_NOT_5705,
9086 0x03800107, 0x00000000 },
9087 { MAC_STATUS, TG3_FL_5705,
9088 0x03800100, 0x00000000 },
9089 { MAC_ADDR_0_HIGH, 0x0000,
9090 0x00000000, 0x0000ffff },
9091 { MAC_ADDR_0_LOW, 0x0000,
9092 0x00000000, 0xffffffff },
9093 { MAC_RX_MTU_SIZE, 0x0000,
9094 0x00000000, 0x0000ffff },
9095 { MAC_TX_MODE, 0x0000,
9096 0x00000000, 0x00000070 },
9097 { MAC_TX_LENGTHS, 0x0000,
9098 0x00000000, 0x00003fff },
9099 { MAC_RX_MODE, TG3_FL_NOT_5705,
9100 0x00000000, 0x000007fc },
9101 { MAC_RX_MODE, TG3_FL_5705,
9102 0x00000000, 0x000007dc },
9103 { MAC_HASH_REG_0, 0x0000,
9104 0x00000000, 0xffffffff },
9105 { MAC_HASH_REG_1, 0x0000,
9106 0x00000000, 0xffffffff },
9107 { MAC_HASH_REG_2, 0x0000,
9108 0x00000000, 0xffffffff },
9109 { MAC_HASH_REG_3, 0x0000,
9110 0x00000000, 0xffffffff },
9112 /* Receive Data and Receive BD Initiator Control Registers. */
9113 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705,
9114 0x00000000, 0xffffffff },
9115 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705,
9116 0x00000000, 0xffffffff },
9117 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705,
9118 0x00000000, 0x00000003 },
9119 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705,
9120 0x00000000, 0xffffffff },
9121 { RCVDBDI_STD_BD+0, 0x0000,
9122 0x00000000, 0xffffffff },
9123 { RCVDBDI_STD_BD+4, 0x0000,
9124 0x00000000, 0xffffffff },
9125 { RCVDBDI_STD_BD+8, 0x0000,
9126 0x00000000, 0xffff0002 },
9127 { RCVDBDI_STD_BD+0xc, 0x0000,
9128 0x00000000, 0xffffffff },
9130 /* Receive BD Initiator Control Registers. */
9131 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705,
9132 0x00000000, 0xffffffff },
9133 { RCVBDI_STD_THRESH, TG3_FL_5705,
9134 0x00000000, 0x000003ff },
9135 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705,
9136 0x00000000, 0xffffffff },
9138 /* Host Coalescing Control Registers. */
9139 { HOSTCC_MODE, TG3_FL_NOT_5705,
9140 0x00000000, 0x00000004 },
9141 { HOSTCC_MODE, TG3_FL_5705,
9142 0x00000000, 0x000000f6 },
9143 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705,
9144 0x00000000, 0xffffffff },
9145 { HOSTCC_RXCOL_TICKS, TG3_FL_5705,
9146 0x00000000, 0x000003ff },
9147 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705,
9148 0x00000000, 0xffffffff },
9149 { HOSTCC_TXCOL_TICKS, TG3_FL_5705,
9150 0x00000000, 0x000003ff },
9151 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705,
9152 0x00000000, 0xffffffff },
9153 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
9154 0x00000000, 0x000000ff },
9155 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705,
9156 0x00000000, 0xffffffff },
9157 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788,
9158 0x00000000, 0x000000ff },
9159 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705,
9160 0x00000000, 0xffffffff },
9161 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705,
9162 0x00000000, 0xffffffff },
9163 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705,
9164 0x00000000, 0xffffffff },
9165 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
9166 0x00000000, 0x000000ff },
9167 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705,
9168 0x00000000, 0xffffffff },
9169 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788,
9170 0x00000000, 0x000000ff },
9171 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705,
9172 0x00000000, 0xffffffff },
9173 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705,
9174 0x00000000, 0xffffffff },
9175 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705,
9176 0x00000000, 0xffffffff },
9177 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
9178 0x00000000, 0xffffffff },
9179 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
9180 0x00000000, 0xffffffff },
9181 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
9182 0xffffffff, 0x00000000 },
9183 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
9184 0xffffffff, 0x00000000 },
9186 /* Buffer Manager Control Registers. */
9187 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750,
9188 0x00000000, 0x007fff80 },
9189 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750,
9190 0x00000000, 0x007fffff },
9191 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
9192 0x00000000, 0x0000003f },
9193 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
9194 0x00000000, 0x000001ff },
9195 { BUFMGR_MB_HIGH_WATER, 0x0000,
9196 0x00000000, 0x000001ff },
9197 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705,
9198 0xffffffff, 0x00000000 },
9199 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705,
9200 0xffffffff, 0x00000000 },
9202 /* Mailbox Registers */
9203 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
9204 0x00000000, 0x000001ff },
9205 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705,
9206 0x00000000, 0x000001ff },
9207 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
9208 0x00000000, 0x000007ff },
9209 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
9210 0x00000000, 0x000001ff },
9212 { 0xffff, 0x0000, 0x00000000, 0x00000000 },
9215 is_5705 = is_5750 = 0;
9216 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
9217 is_5705 = 1;
9218 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
9219 is_5750 = 1;
9222 for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
9223 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
9224 continue;
9226 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
9227 continue;
9229 if ((tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
9230 (reg_tbl[i].flags & TG3_FL_NOT_5788))
9231 continue;
9233 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
9234 continue;
9236 offset = (u32) reg_tbl[i].offset;
9237 read_mask = reg_tbl[i].read_mask;
9238 write_mask = reg_tbl[i].write_mask;
9240 /* Save the original register content */
9241 save_val = tr32(offset);
9243 /* Determine the read-only value. */
9244 read_val = save_val & read_mask;
9246 /* Write zero to the register, then make sure the read-only bits
9247 * are not changed and the read/write bits are all zeros.
9249 tw32(offset, 0);
9251 val = tr32(offset);
9253 /* Test the read-only and read/write bits. */
9254 if (((val & read_mask) != read_val) || (val & write_mask))
9255 goto out;
9257 /* Write ones to all the bits defined by RdMask and WrMask, then
9258 * make sure the read-only bits are not changed and the
9259 * read/write bits are all ones.
9261 tw32(offset, read_mask | write_mask);
9263 val = tr32(offset);
9265 /* Test the read-only bits. */
9266 if ((val & read_mask) != read_val)
9267 goto out;
9269 /* Test the read/write bits. */
9270 if ((val & write_mask) != write_mask)
9271 goto out;
9273 tw32(offset, save_val);
9276 return 0;
9278 out:
9279 if (netif_msg_hw(tp))
9280 printk(KERN_ERR PFX "Register test failed at offset %x\n",
9281 offset);
9282 tw32(offset, save_val);
9283 return -EIO;
9286 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
9288 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
9289 int i;
9290 u32 j;
9292 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
9293 for (j = 0; j < len; j += 4) {
9294 u32 val;
9296 tg3_write_mem(tp, offset + j, test_pattern[i]);
9297 tg3_read_mem(tp, offset + j, &val);
9298 if (val != test_pattern[i])
9299 return -EIO;
9302 return 0;
9305 static int tg3_test_memory(struct tg3 *tp)
9307 static struct mem_entry {
9308 u32 offset;
9309 u32 len;
9310 } mem_tbl_570x[] = {
9311 { 0x00000000, 0x00b50},
9312 { 0x00002000, 0x1c000},
9313 { 0xffffffff, 0x00000}
9314 }, mem_tbl_5705[] = {
9315 { 0x00000100, 0x0000c},
9316 { 0x00000200, 0x00008},
9317 { 0x00004000, 0x00800},
9318 { 0x00006000, 0x01000},
9319 { 0x00008000, 0x02000},
9320 { 0x00010000, 0x0e000},
9321 { 0xffffffff, 0x00000}
9322 }, mem_tbl_5755[] = {
9323 { 0x00000200, 0x00008},
9324 { 0x00004000, 0x00800},
9325 { 0x00006000, 0x00800},
9326 { 0x00008000, 0x02000},
9327 { 0x00010000, 0x0c000},
9328 { 0xffffffff, 0x00000}
9329 }, mem_tbl_5906[] = {
9330 { 0x00000200, 0x00008},
9331 { 0x00004000, 0x00400},
9332 { 0x00006000, 0x00400},
9333 { 0x00008000, 0x01000},
9334 { 0x00010000, 0x01000},
9335 { 0xffffffff, 0x00000}
9337 struct mem_entry *mem_tbl;
9338 int err = 0;
9339 int i;
9341 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
9342 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
9343 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
9344 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9345 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
9346 mem_tbl = mem_tbl_5755;
9347 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
9348 mem_tbl = mem_tbl_5906;
9349 else
9350 mem_tbl = mem_tbl_5705;
9351 } else
9352 mem_tbl = mem_tbl_570x;
9354 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
9355 if ((err = tg3_do_mem_test(tp, mem_tbl[i].offset,
9356 mem_tbl[i].len)) != 0)
9357 break;
9360 return err;
9363 #define TG3_MAC_LOOPBACK 0
9364 #define TG3_PHY_LOOPBACK 1
9366 static int tg3_run_loopback(struct tg3 *tp, int loopback_mode)
9368 u32 mac_mode, rx_start_idx, rx_idx, tx_idx, opaque_key;
9369 u32 desc_idx;
9370 struct sk_buff *skb, *rx_skb;
9371 u8 *tx_data;
9372 dma_addr_t map;
9373 int num_pkts, tx_len, rx_len, i, err;
9374 struct tg3_rx_buffer_desc *desc;
9376 if (loopback_mode == TG3_MAC_LOOPBACK) {
9377 /* HW errata - mac loopback fails in some cases on 5780.
9378 * Normal traffic and PHY loopback are not affected by
9379 * errata.
9381 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780)
9382 return 0;
9384 mac_mode = (tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK) |
9385 MAC_MODE_PORT_INT_LPBACK;
9386 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
9387 mac_mode |= MAC_MODE_LINK_POLARITY;
9388 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
9389 mac_mode |= MAC_MODE_PORT_MODE_MII;
9390 else
9391 mac_mode |= MAC_MODE_PORT_MODE_GMII;
9392 tw32(MAC_MODE, mac_mode);
9393 } else if (loopback_mode == TG3_PHY_LOOPBACK) {
9394 u32 val;
9396 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
9397 u32 phytest;
9399 if (!tg3_readphy(tp, MII_TG3_EPHY_TEST, &phytest)) {
9400 u32 phy;
9402 tg3_writephy(tp, MII_TG3_EPHY_TEST,
9403 phytest | MII_TG3_EPHY_SHADOW_EN);
9404 if (!tg3_readphy(tp, 0x1b, &phy))
9405 tg3_writephy(tp, 0x1b, phy & ~0x20);
9406 tg3_writephy(tp, MII_TG3_EPHY_TEST, phytest);
9408 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED100;
9409 } else
9410 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED1000;
9412 tg3_phy_toggle_automdix(tp, 0);
9414 tg3_writephy(tp, MII_BMCR, val);
9415 udelay(40);
9417 mac_mode = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
9418 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
9419 tg3_writephy(tp, MII_TG3_EPHY_PTEST, 0x1800);
9420 mac_mode |= MAC_MODE_PORT_MODE_MII;
9421 } else
9422 mac_mode |= MAC_MODE_PORT_MODE_GMII;
9424 /* reset to prevent losing 1st rx packet intermittently */
9425 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES) {
9426 tw32_f(MAC_RX_MODE, RX_MODE_RESET);
9427 udelay(10);
9428 tw32_f(MAC_RX_MODE, tp->rx_mode);
9430 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) {
9431 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401)
9432 mac_mode &= ~MAC_MODE_LINK_POLARITY;
9433 else if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5411)
9434 mac_mode |= MAC_MODE_LINK_POLARITY;
9435 tg3_writephy(tp, MII_TG3_EXT_CTRL,
9436 MII_TG3_EXT_CTRL_LNK3_LED_MODE);
9438 tw32(MAC_MODE, mac_mode);
9440 else
9441 return -EINVAL;
9443 err = -EIO;
9445 tx_len = 1514;
9446 skb = netdev_alloc_skb(tp->dev, tx_len);
9447 if (!skb)
9448 return -ENOMEM;
9450 tx_data = skb_put(skb, tx_len);
9451 memcpy(tx_data, tp->dev->dev_addr, 6);
9452 memset(tx_data + 6, 0x0, 8);
9454 tw32(MAC_RX_MTU_SIZE, tx_len + 4);
9456 for (i = 14; i < tx_len; i++)
9457 tx_data[i] = (u8) (i & 0xff);
9459 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
9461 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
9462 HOSTCC_MODE_NOW);
9464 udelay(10);
9466 rx_start_idx = tp->hw_status->idx[0].rx_producer;
9468 num_pkts = 0;
9470 tg3_set_txd(tp, tp->tx_prod, map, tx_len, 0, 1);
9472 tp->tx_prod++;
9473 num_pkts++;
9475 tw32_tx_mbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW,
9476 tp->tx_prod);
9477 tr32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW);
9479 udelay(10);
9481 /* 250 usec to allow enough time on some 10/100 Mbps devices. */
9482 for (i = 0; i < 25; i++) {
9483 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE |
9484 HOSTCC_MODE_NOW);
9486 udelay(10);
9488 tx_idx = tp->hw_status->idx[0].tx_consumer;
9489 rx_idx = tp->hw_status->idx[0].rx_producer;
9490 if ((tx_idx == tp->tx_prod) &&
9491 (rx_idx == (rx_start_idx + num_pkts)))
9492 break;
9495 pci_unmap_single(tp->pdev, map, tx_len, PCI_DMA_TODEVICE);
9496 dev_kfree_skb(skb);
9498 if (tx_idx != tp->tx_prod)
9499 goto out;
9501 if (rx_idx != rx_start_idx + num_pkts)
9502 goto out;
9504 desc = &tp->rx_rcb[rx_start_idx];
9505 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
9506 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
9507 if (opaque_key != RXD_OPAQUE_RING_STD)
9508 goto out;
9510 if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
9511 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII))
9512 goto out;
9514 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4;
9515 if (rx_len != tx_len)
9516 goto out;
9518 rx_skb = tp->rx_std_buffers[desc_idx].skb;
9520 map = pci_unmap_addr(&tp->rx_std_buffers[desc_idx], mapping);
9521 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, PCI_DMA_FROMDEVICE);
9523 for (i = 14; i < tx_len; i++) {
9524 if (*(rx_skb->data + i) != (u8) (i & 0xff))
9525 goto out;
9527 err = 0;
9529 /* tg3_free_rings will unmap and free the rx_skb */
9530 out:
9531 return err;
9534 #define TG3_MAC_LOOPBACK_FAILED 1
9535 #define TG3_PHY_LOOPBACK_FAILED 2
9536 #define TG3_LOOPBACK_FAILED (TG3_MAC_LOOPBACK_FAILED | \
9537 TG3_PHY_LOOPBACK_FAILED)
9539 static int tg3_test_loopback(struct tg3 *tp)
9541 int err = 0;
9542 u32 cpmuctrl = 0;
9544 if (!netif_running(tp->dev))
9545 return TG3_LOOPBACK_FAILED;
9547 err = tg3_reset_hw(tp, 1);
9548 if (err)
9549 return TG3_LOOPBACK_FAILED;
9551 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9552 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
9553 int i;
9554 u32 status;
9556 tw32(TG3_CPMU_MUTEX_REQ, CPMU_MUTEX_REQ_DRIVER);
9558 /* Wait for up to 40 microseconds to acquire lock. */
9559 for (i = 0; i < 4; i++) {
9560 status = tr32(TG3_CPMU_MUTEX_GNT);
9561 if (status == CPMU_MUTEX_GNT_DRIVER)
9562 break;
9563 udelay(10);
9566 if (status != CPMU_MUTEX_GNT_DRIVER)
9567 return TG3_LOOPBACK_FAILED;
9569 /* Turn off link-based power management. */
9570 cpmuctrl = tr32(TG3_CPMU_CTRL);
9571 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9572 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX)
9573 tw32(TG3_CPMU_CTRL,
9574 cpmuctrl & ~(CPMU_CTRL_LINK_SPEED_MODE |
9575 CPMU_CTRL_LINK_AWARE_MODE));
9576 else
9577 tw32(TG3_CPMU_CTRL,
9578 cpmuctrl & ~CPMU_CTRL_LINK_AWARE_MODE);
9581 if (tg3_run_loopback(tp, TG3_MAC_LOOPBACK))
9582 err |= TG3_MAC_LOOPBACK_FAILED;
9584 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
9585 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
9586 tw32(TG3_CPMU_CTRL, cpmuctrl);
9588 /* Release the mutex */
9589 tw32(TG3_CPMU_MUTEX_GNT, CPMU_MUTEX_GNT_DRIVER);
9592 if (!(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
9593 if (tg3_run_loopback(tp, TG3_PHY_LOOPBACK))
9594 err |= TG3_PHY_LOOPBACK_FAILED;
9597 return err;
9600 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
9601 u64 *data)
9603 struct tg3 *tp = netdev_priv(dev);
9605 if (tp->link_config.phy_is_low_power)
9606 tg3_set_power_state(tp, PCI_D0);
9608 memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
9610 if (tg3_test_nvram(tp) != 0) {
9611 etest->flags |= ETH_TEST_FL_FAILED;
9612 data[0] = 1;
9614 if (tg3_test_link(tp) != 0) {
9615 etest->flags |= ETH_TEST_FL_FAILED;
9616 data[1] = 1;
9618 if (etest->flags & ETH_TEST_FL_OFFLINE) {
9619 int err, irq_sync = 0;
9621 if (netif_running(dev)) {
9622 tg3_netif_stop(tp);
9623 irq_sync = 1;
9626 tg3_full_lock(tp, irq_sync);
9628 tg3_halt(tp, RESET_KIND_SUSPEND, 1);
9629 err = tg3_nvram_lock(tp);
9630 tg3_halt_cpu(tp, RX_CPU_BASE);
9631 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
9632 tg3_halt_cpu(tp, TX_CPU_BASE);
9633 if (!err)
9634 tg3_nvram_unlock(tp);
9636 if (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)
9637 tg3_phy_reset(tp);
9639 if (tg3_test_registers(tp) != 0) {
9640 etest->flags |= ETH_TEST_FL_FAILED;
9641 data[2] = 1;
9643 if (tg3_test_memory(tp) != 0) {
9644 etest->flags |= ETH_TEST_FL_FAILED;
9645 data[3] = 1;
9647 if ((data[4] = tg3_test_loopback(tp)) != 0)
9648 etest->flags |= ETH_TEST_FL_FAILED;
9650 tg3_full_unlock(tp);
9652 if (tg3_test_interrupt(tp) != 0) {
9653 etest->flags |= ETH_TEST_FL_FAILED;
9654 data[5] = 1;
9657 tg3_full_lock(tp, 0);
9659 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
9660 if (netif_running(dev)) {
9661 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
9662 if (!tg3_restart_hw(tp, 1))
9663 tg3_netif_start(tp);
9666 tg3_full_unlock(tp);
9668 if (tp->link_config.phy_is_low_power)
9669 tg3_set_power_state(tp, PCI_D3hot);
9673 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
9675 struct mii_ioctl_data *data = if_mii(ifr);
9676 struct tg3 *tp = netdev_priv(dev);
9677 int err;
9679 switch(cmd) {
9680 case SIOCGMIIPHY:
9681 data->phy_id = PHY_ADDR;
9683 /* fallthru */
9684 case SIOCGMIIREG: {
9685 u32 mii_regval;
9687 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
9688 break; /* We have no PHY */
9690 if (tp->link_config.phy_is_low_power)
9691 return -EAGAIN;
9693 spin_lock_bh(&tp->lock);
9694 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
9695 spin_unlock_bh(&tp->lock);
9697 data->val_out = mii_regval;
9699 return err;
9702 case SIOCSMIIREG:
9703 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
9704 break; /* We have no PHY */
9706 if (!capable(CAP_NET_ADMIN))
9707 return -EPERM;
9709 if (tp->link_config.phy_is_low_power)
9710 return -EAGAIN;
9712 spin_lock_bh(&tp->lock);
9713 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
9714 spin_unlock_bh(&tp->lock);
9716 return err;
9718 default:
9719 /* do nothing */
9720 break;
9722 return -EOPNOTSUPP;
9725 #if TG3_VLAN_TAG_USED
9726 static void tg3_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
9728 struct tg3 *tp = netdev_priv(dev);
9730 if (netif_running(dev))
9731 tg3_netif_stop(tp);
9733 tg3_full_lock(tp, 0);
9735 tp->vlgrp = grp;
9737 /* Update RX_MODE_KEEP_VLAN_TAG bit in RX_MODE register. */
9738 __tg3_set_rx_mode(dev);
9740 if (netif_running(dev))
9741 tg3_netif_start(tp);
9743 tg3_full_unlock(tp);
9745 #endif
9747 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
9749 struct tg3 *tp = netdev_priv(dev);
9751 memcpy(ec, &tp->coal, sizeof(*ec));
9752 return 0;
9755 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
9757 struct tg3 *tp = netdev_priv(dev);
9758 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
9759 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
9761 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) {
9762 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
9763 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
9764 max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
9765 min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
9768 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
9769 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||
9770 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||
9771 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||
9772 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
9773 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
9774 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) ||
9775 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||
9776 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
9777 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
9778 return -EINVAL;
9780 /* No rx interrupts will be generated if both are zero */
9781 if ((ec->rx_coalesce_usecs == 0) &&
9782 (ec->rx_max_coalesced_frames == 0))
9783 return -EINVAL;
9785 /* No tx interrupts will be generated if both are zero */
9786 if ((ec->tx_coalesce_usecs == 0) &&
9787 (ec->tx_max_coalesced_frames == 0))
9788 return -EINVAL;
9790 /* Only copy relevant parameters, ignore all others. */
9791 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
9792 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
9793 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
9794 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
9795 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
9796 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
9797 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
9798 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
9799 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
9801 if (netif_running(dev)) {
9802 tg3_full_lock(tp, 0);
9803 __tg3_set_coalesce(tp, &tp->coal);
9804 tg3_full_unlock(tp);
9806 return 0;
9809 static const struct ethtool_ops tg3_ethtool_ops = {
9810 .get_settings = tg3_get_settings,
9811 .set_settings = tg3_set_settings,
9812 .get_drvinfo = tg3_get_drvinfo,
9813 .get_regs_len = tg3_get_regs_len,
9814 .get_regs = tg3_get_regs,
9815 .get_wol = tg3_get_wol,
9816 .set_wol = tg3_set_wol,
9817 .get_msglevel = tg3_get_msglevel,
9818 .set_msglevel = tg3_set_msglevel,
9819 .nway_reset = tg3_nway_reset,
9820 .get_link = ethtool_op_get_link,
9821 .get_eeprom_len = tg3_get_eeprom_len,
9822 .get_eeprom = tg3_get_eeprom,
9823 .set_eeprom = tg3_set_eeprom,
9824 .get_ringparam = tg3_get_ringparam,
9825 .set_ringparam = tg3_set_ringparam,
9826 .get_pauseparam = tg3_get_pauseparam,
9827 .set_pauseparam = tg3_set_pauseparam,
9828 .get_rx_csum = tg3_get_rx_csum,
9829 .set_rx_csum = tg3_set_rx_csum,
9830 .set_tx_csum = tg3_set_tx_csum,
9831 .set_sg = ethtool_op_set_sg,
9832 .set_tso = tg3_set_tso,
9833 .self_test = tg3_self_test,
9834 .get_strings = tg3_get_strings,
9835 .phys_id = tg3_phys_id,
9836 .get_ethtool_stats = tg3_get_ethtool_stats,
9837 .get_coalesce = tg3_get_coalesce,
9838 .set_coalesce = tg3_set_coalesce,
9839 .get_sset_count = tg3_get_sset_count,
9842 static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
9844 u32 cursize, val, magic;
9846 tp->nvram_size = EEPROM_CHIP_SIZE;
9848 if (tg3_nvram_read_swab(tp, 0, &magic) != 0)
9849 return;
9851 if ((magic != TG3_EEPROM_MAGIC) &&
9852 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) &&
9853 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW))
9854 return;
9857 * Size the chip by reading offsets at increasing powers of two.
9858 * When we encounter our validation signature, we know the addressing
9859 * has wrapped around, and thus have our chip size.
9861 cursize = 0x10;
9863 while (cursize < tp->nvram_size) {
9864 if (tg3_nvram_read_swab(tp, cursize, &val) != 0)
9865 return;
9867 if (val == magic)
9868 break;
9870 cursize <<= 1;
9873 tp->nvram_size = cursize;
9876 static void __devinit tg3_get_nvram_size(struct tg3 *tp)
9878 u32 val;
9880 if (tg3_nvram_read_swab(tp, 0, &val) != 0)
9881 return;
9883 /* Selfboot format */
9884 if (val != TG3_EEPROM_MAGIC) {
9885 tg3_get_eeprom_size(tp);
9886 return;
9889 if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
9890 if (val != 0) {
9891 tp->nvram_size = (val >> 16) * 1024;
9892 return;
9895 tp->nvram_size = 0x80000;
9898 static void __devinit tg3_get_nvram_info(struct tg3 *tp)
9900 u32 nvcfg1;
9902 nvcfg1 = tr32(NVRAM_CFG1);
9903 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
9904 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9906 else {
9907 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
9908 tw32(NVRAM_CFG1, nvcfg1);
9911 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) ||
9912 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
9913 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
9914 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED:
9915 tp->nvram_jedecnum = JEDEC_ATMEL;
9916 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
9917 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9918 break;
9919 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED:
9920 tp->nvram_jedecnum = JEDEC_ATMEL;
9921 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE;
9922 break;
9923 case FLASH_VENDOR_ATMEL_EEPROM:
9924 tp->nvram_jedecnum = JEDEC_ATMEL;
9925 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
9926 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9927 break;
9928 case FLASH_VENDOR_ST:
9929 tp->nvram_jedecnum = JEDEC_ST;
9930 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE;
9931 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9932 break;
9933 case FLASH_VENDOR_SAIFUN:
9934 tp->nvram_jedecnum = JEDEC_SAIFUN;
9935 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE;
9936 break;
9937 case FLASH_VENDOR_SST_SMALL:
9938 case FLASH_VENDOR_SST_LARGE:
9939 tp->nvram_jedecnum = JEDEC_SST;
9940 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE;
9941 break;
9944 else {
9945 tp->nvram_jedecnum = JEDEC_ATMEL;
9946 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE;
9947 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9951 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
9953 u32 nvcfg1;
9955 nvcfg1 = tr32(NVRAM_CFG1);
9957 /* NVRAM protection for TPM */
9958 if (nvcfg1 & (1 << 27))
9959 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
9961 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
9962 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ:
9963 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ:
9964 tp->nvram_jedecnum = JEDEC_ATMEL;
9965 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9966 break;
9967 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
9968 tp->nvram_jedecnum = JEDEC_ATMEL;
9969 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9970 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9971 break;
9972 case FLASH_5752VENDOR_ST_M45PE10:
9973 case FLASH_5752VENDOR_ST_M45PE20:
9974 case FLASH_5752VENDOR_ST_M45PE40:
9975 tp->nvram_jedecnum = JEDEC_ST;
9976 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
9977 tp->tg3_flags2 |= TG3_FLG2_FLASH;
9978 break;
9981 if (tp->tg3_flags2 & TG3_FLG2_FLASH) {
9982 switch (nvcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
9983 case FLASH_5752PAGE_SIZE_256:
9984 tp->nvram_pagesize = 256;
9985 break;
9986 case FLASH_5752PAGE_SIZE_512:
9987 tp->nvram_pagesize = 512;
9988 break;
9989 case FLASH_5752PAGE_SIZE_1K:
9990 tp->nvram_pagesize = 1024;
9991 break;
9992 case FLASH_5752PAGE_SIZE_2K:
9993 tp->nvram_pagesize = 2048;
9994 break;
9995 case FLASH_5752PAGE_SIZE_4K:
9996 tp->nvram_pagesize = 4096;
9997 break;
9998 case FLASH_5752PAGE_SIZE_264:
9999 tp->nvram_pagesize = 264;
10000 break;
10003 else {
10004 /* For eeprom, set pagesize to maximum eeprom size */
10005 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
10007 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
10008 tw32(NVRAM_CFG1, nvcfg1);
10012 static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp)
10014 u32 nvcfg1, protect = 0;
10016 nvcfg1 = tr32(NVRAM_CFG1);
10018 /* NVRAM protection for TPM */
10019 if (nvcfg1 & (1 << 27)) {
10020 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
10021 protect = 1;
10024 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
10025 switch (nvcfg1) {
10026 case FLASH_5755VENDOR_ATMEL_FLASH_1:
10027 case FLASH_5755VENDOR_ATMEL_FLASH_2:
10028 case FLASH_5755VENDOR_ATMEL_FLASH_3:
10029 case FLASH_5755VENDOR_ATMEL_FLASH_5:
10030 tp->nvram_jedecnum = JEDEC_ATMEL;
10031 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10032 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10033 tp->nvram_pagesize = 264;
10034 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
10035 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5)
10036 tp->nvram_size = (protect ? 0x3e200 : 0x80000);
10037 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
10038 tp->nvram_size = (protect ? 0x1f200 : 0x40000);
10039 else
10040 tp->nvram_size = (protect ? 0x1f200 : 0x20000);
10041 break;
10042 case FLASH_5752VENDOR_ST_M45PE10:
10043 case FLASH_5752VENDOR_ST_M45PE20:
10044 case FLASH_5752VENDOR_ST_M45PE40:
10045 tp->nvram_jedecnum = JEDEC_ST;
10046 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10047 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10048 tp->nvram_pagesize = 256;
10049 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
10050 tp->nvram_size = (protect ? 0x10000 : 0x20000);
10051 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
10052 tp->nvram_size = (protect ? 0x10000 : 0x40000);
10053 else
10054 tp->nvram_size = (protect ? 0x20000 : 0x80000);
10055 break;
10059 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
10061 u32 nvcfg1;
10063 nvcfg1 = tr32(NVRAM_CFG1);
10065 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
10066 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ:
10067 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ:
10068 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ:
10069 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ:
10070 tp->nvram_jedecnum = JEDEC_ATMEL;
10071 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10072 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
10074 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
10075 tw32(NVRAM_CFG1, nvcfg1);
10076 break;
10077 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED:
10078 case FLASH_5755VENDOR_ATMEL_FLASH_1:
10079 case FLASH_5755VENDOR_ATMEL_FLASH_2:
10080 case FLASH_5755VENDOR_ATMEL_FLASH_3:
10081 tp->nvram_jedecnum = JEDEC_ATMEL;
10082 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10083 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10084 tp->nvram_pagesize = 264;
10085 break;
10086 case FLASH_5752VENDOR_ST_M45PE10:
10087 case FLASH_5752VENDOR_ST_M45PE20:
10088 case FLASH_5752VENDOR_ST_M45PE40:
10089 tp->nvram_jedecnum = JEDEC_ST;
10090 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10091 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10092 tp->nvram_pagesize = 256;
10093 break;
10097 static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp)
10099 u32 nvcfg1, protect = 0;
10101 nvcfg1 = tr32(NVRAM_CFG1);
10103 /* NVRAM protection for TPM */
10104 if (nvcfg1 & (1 << 27)) {
10105 tp->tg3_flags2 |= TG3_FLG2_PROTECTED_NVRAM;
10106 protect = 1;
10109 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
10110 switch (nvcfg1) {
10111 case FLASH_5761VENDOR_ATMEL_ADB021D:
10112 case FLASH_5761VENDOR_ATMEL_ADB041D:
10113 case FLASH_5761VENDOR_ATMEL_ADB081D:
10114 case FLASH_5761VENDOR_ATMEL_ADB161D:
10115 case FLASH_5761VENDOR_ATMEL_MDB021D:
10116 case FLASH_5761VENDOR_ATMEL_MDB041D:
10117 case FLASH_5761VENDOR_ATMEL_MDB081D:
10118 case FLASH_5761VENDOR_ATMEL_MDB161D:
10119 tp->nvram_jedecnum = JEDEC_ATMEL;
10120 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10121 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10122 tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM_ADDR_TRANS;
10123 tp->nvram_pagesize = 256;
10124 break;
10125 case FLASH_5761VENDOR_ST_A_M45PE20:
10126 case FLASH_5761VENDOR_ST_A_M45PE40:
10127 case FLASH_5761VENDOR_ST_A_M45PE80:
10128 case FLASH_5761VENDOR_ST_A_M45PE16:
10129 case FLASH_5761VENDOR_ST_M_M45PE20:
10130 case FLASH_5761VENDOR_ST_M_M45PE40:
10131 case FLASH_5761VENDOR_ST_M_M45PE80:
10132 case FLASH_5761VENDOR_ST_M_M45PE16:
10133 tp->nvram_jedecnum = JEDEC_ST;
10134 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10135 tp->tg3_flags2 |= TG3_FLG2_FLASH;
10136 tp->nvram_pagesize = 256;
10137 break;
10140 if (protect) {
10141 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT);
10142 } else {
10143 switch (nvcfg1) {
10144 case FLASH_5761VENDOR_ATMEL_ADB161D:
10145 case FLASH_5761VENDOR_ATMEL_MDB161D:
10146 case FLASH_5761VENDOR_ST_A_M45PE16:
10147 case FLASH_5761VENDOR_ST_M_M45PE16:
10148 tp->nvram_size = 0x100000;
10149 break;
10150 case FLASH_5761VENDOR_ATMEL_ADB081D:
10151 case FLASH_5761VENDOR_ATMEL_MDB081D:
10152 case FLASH_5761VENDOR_ST_A_M45PE80:
10153 case FLASH_5761VENDOR_ST_M_M45PE80:
10154 tp->nvram_size = 0x80000;
10155 break;
10156 case FLASH_5761VENDOR_ATMEL_ADB041D:
10157 case FLASH_5761VENDOR_ATMEL_MDB041D:
10158 case FLASH_5761VENDOR_ST_A_M45PE40:
10159 case FLASH_5761VENDOR_ST_M_M45PE40:
10160 tp->nvram_size = 0x40000;
10161 break;
10162 case FLASH_5761VENDOR_ATMEL_ADB021D:
10163 case FLASH_5761VENDOR_ATMEL_MDB021D:
10164 case FLASH_5761VENDOR_ST_A_M45PE20:
10165 case FLASH_5761VENDOR_ST_M_M45PE20:
10166 tp->nvram_size = 0x20000;
10167 break;
10172 static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp)
10174 tp->nvram_jedecnum = JEDEC_ATMEL;
10175 tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED;
10176 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE;
10179 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
10180 static void __devinit tg3_nvram_init(struct tg3 *tp)
10182 tw32_f(GRC_EEPROM_ADDR,
10183 (EEPROM_ADDR_FSM_RESET |
10184 (EEPROM_DEFAULT_CLOCK_PERIOD <<
10185 EEPROM_ADDR_CLKPERD_SHIFT)));
10187 msleep(1);
10189 /* Enable seeprom accesses. */
10190 tw32_f(GRC_LOCAL_CTRL,
10191 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM);
10192 udelay(100);
10194 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
10195 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
10196 tp->tg3_flags |= TG3_FLAG_NVRAM;
10198 if (tg3_nvram_lock(tp)) {
10199 printk(KERN_WARNING PFX "%s: Cannot get nvarm lock, "
10200 "tg3_nvram_init failed.\n", tp->dev->name);
10201 return;
10203 tg3_enable_nvram_access(tp);
10205 tp->nvram_size = 0;
10207 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
10208 tg3_get_5752_nvram_info(tp);
10209 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
10210 tg3_get_5755_nvram_info(tp);
10211 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
10212 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784)
10213 tg3_get_5787_nvram_info(tp);
10214 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
10215 tg3_get_5761_nvram_info(tp);
10216 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
10217 tg3_get_5906_nvram_info(tp);
10218 else
10219 tg3_get_nvram_info(tp);
10221 if (tp->nvram_size == 0)
10222 tg3_get_nvram_size(tp);
10224 tg3_disable_nvram_access(tp);
10225 tg3_nvram_unlock(tp);
10227 } else {
10228 tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED);
10230 tg3_get_eeprom_size(tp);
10234 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
10235 u32 offset, u32 *val)
10237 u32 tmp;
10238 int i;
10240 if (offset > EEPROM_ADDR_ADDR_MASK ||
10241 (offset % 4) != 0)
10242 return -EINVAL;
10244 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK |
10245 EEPROM_ADDR_DEVID_MASK |
10246 EEPROM_ADDR_READ);
10247 tw32(GRC_EEPROM_ADDR,
10248 tmp |
10249 (0 << EEPROM_ADDR_DEVID_SHIFT) |
10250 ((offset << EEPROM_ADDR_ADDR_SHIFT) &
10251 EEPROM_ADDR_ADDR_MASK) |
10252 EEPROM_ADDR_READ | EEPROM_ADDR_START);
10254 for (i = 0; i < 1000; i++) {
10255 tmp = tr32(GRC_EEPROM_ADDR);
10257 if (tmp & EEPROM_ADDR_COMPLETE)
10258 break;
10259 msleep(1);
10261 if (!(tmp & EEPROM_ADDR_COMPLETE))
10262 return -EBUSY;
10264 *val = tr32(GRC_EEPROM_DATA);
10265 return 0;
10268 #define NVRAM_CMD_TIMEOUT 10000
10270 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
10272 int i;
10274 tw32(NVRAM_CMD, nvram_cmd);
10275 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
10276 udelay(10);
10277 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
10278 udelay(10);
10279 break;
10282 if (i == NVRAM_CMD_TIMEOUT) {
10283 return -EBUSY;
10285 return 0;
10288 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
10290 if ((tp->tg3_flags & TG3_FLAG_NVRAM) &&
10291 (tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) &&
10292 (tp->tg3_flags2 & TG3_FLG2_FLASH) &&
10293 !(tp->tg3_flags3 & TG3_FLG3_NO_NVRAM_ADDR_TRANS) &&
10294 (tp->nvram_jedecnum == JEDEC_ATMEL))
10296 addr = ((addr / tp->nvram_pagesize) <<
10297 ATMEL_AT45DB0X1B_PAGE_POS) +
10298 (addr % tp->nvram_pagesize);
10300 return addr;
10303 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
10305 if ((tp->tg3_flags & TG3_FLAG_NVRAM) &&
10306 (tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) &&
10307 (tp->tg3_flags2 & TG3_FLG2_FLASH) &&
10308 !(tp->tg3_flags3 & TG3_FLG3_NO_NVRAM_ADDR_TRANS) &&
10309 (tp->nvram_jedecnum == JEDEC_ATMEL))
10311 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
10312 tp->nvram_pagesize) +
10313 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
10315 return addr;
10318 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
10320 int ret;
10322 if (!(tp->tg3_flags & TG3_FLAG_NVRAM))
10323 return tg3_nvram_read_using_eeprom(tp, offset, val);
10325 offset = tg3_nvram_phys_addr(tp, offset);
10327 if (offset > NVRAM_ADDR_MSK)
10328 return -EINVAL;
10330 ret = tg3_nvram_lock(tp);
10331 if (ret)
10332 return ret;
10334 tg3_enable_nvram_access(tp);
10336 tw32(NVRAM_ADDR, offset);
10337 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
10338 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE);
10340 if (ret == 0)
10341 *val = swab32(tr32(NVRAM_RDDATA));
10343 tg3_disable_nvram_access(tp);
10345 tg3_nvram_unlock(tp);
10347 return ret;
10350 static int tg3_nvram_read_le(struct tg3 *tp, u32 offset, __le32 *val)
10352 u32 v;
10353 int res = tg3_nvram_read(tp, offset, &v);
10354 if (!res)
10355 *val = cpu_to_le32(v);
10356 return res;
10359 static int tg3_nvram_read_swab(struct tg3 *tp, u32 offset, u32 *val)
10361 int err;
10362 u32 tmp;
10364 err = tg3_nvram_read(tp, offset, &tmp);
10365 *val = swab32(tmp);
10366 return err;
10369 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
10370 u32 offset, u32 len, u8 *buf)
10372 int i, j, rc = 0;
10373 u32 val;
10375 for (i = 0; i < len; i += 4) {
10376 u32 addr;
10377 __le32 data;
10379 addr = offset + i;
10381 memcpy(&data, buf + i, 4);
10383 tw32(GRC_EEPROM_DATA, le32_to_cpu(data));
10385 val = tr32(GRC_EEPROM_ADDR);
10386 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE);
10388 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK |
10389 EEPROM_ADDR_READ);
10390 tw32(GRC_EEPROM_ADDR, val |
10391 (0 << EEPROM_ADDR_DEVID_SHIFT) |
10392 (addr & EEPROM_ADDR_ADDR_MASK) |
10393 EEPROM_ADDR_START |
10394 EEPROM_ADDR_WRITE);
10396 for (j = 0; j < 1000; j++) {
10397 val = tr32(GRC_EEPROM_ADDR);
10399 if (val & EEPROM_ADDR_COMPLETE)
10400 break;
10401 msleep(1);
10403 if (!(val & EEPROM_ADDR_COMPLETE)) {
10404 rc = -EBUSY;
10405 break;
10409 return rc;
10412 /* offset and length are dword aligned */
10413 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
10414 u8 *buf)
10416 int ret = 0;
10417 u32 pagesize = tp->nvram_pagesize;
10418 u32 pagemask = pagesize - 1;
10419 u32 nvram_cmd;
10420 u8 *tmp;
10422 tmp = kmalloc(pagesize, GFP_KERNEL);
10423 if (tmp == NULL)
10424 return -ENOMEM;
10426 while (len) {
10427 int j;
10428 u32 phy_addr, page_off, size;
10430 phy_addr = offset & ~pagemask;
10432 for (j = 0; j < pagesize; j += 4) {
10433 if ((ret = tg3_nvram_read_le(tp, phy_addr + j,
10434 (__le32 *) (tmp + j))))
10435 break;
10437 if (ret)
10438 break;
10440 page_off = offset & pagemask;
10441 size = pagesize;
10442 if (len < size)
10443 size = len;
10445 len -= size;
10447 memcpy(tmp + page_off, buf, size);
10449 offset = offset + (pagesize - page_off);
10451 tg3_enable_nvram_access(tp);
10454 * Before we can erase the flash page, we need
10455 * to issue a special "write enable" command.
10457 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
10459 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
10460 break;
10462 /* Erase the target page */
10463 tw32(NVRAM_ADDR, phy_addr);
10465 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
10466 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE;
10468 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
10469 break;
10471 /* Issue another write enable to start the write. */
10472 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
10474 if (tg3_nvram_exec_cmd(tp, nvram_cmd))
10475 break;
10477 for (j = 0; j < pagesize; j += 4) {
10478 __be32 data;
10480 data = *((__be32 *) (tmp + j));
10481 /* swab32(le32_to_cpu(data)), actually */
10482 tw32(NVRAM_WRDATA, be32_to_cpu(data));
10484 tw32(NVRAM_ADDR, phy_addr + j);
10486 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
10487 NVRAM_CMD_WR;
10489 if (j == 0)
10490 nvram_cmd |= NVRAM_CMD_FIRST;
10491 else if (j == (pagesize - 4))
10492 nvram_cmd |= NVRAM_CMD_LAST;
10494 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
10495 break;
10497 if (ret)
10498 break;
10501 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
10502 tg3_nvram_exec_cmd(tp, nvram_cmd);
10504 kfree(tmp);
10506 return ret;
10509 /* offset and length are dword aligned */
10510 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
10511 u8 *buf)
10513 int i, ret = 0;
10515 for (i = 0; i < len; i += 4, offset += 4) {
10516 u32 page_off, phy_addr, nvram_cmd;
10517 __be32 data;
10519 memcpy(&data, buf + i, 4);
10520 tw32(NVRAM_WRDATA, be32_to_cpu(data));
10522 page_off = offset % tp->nvram_pagesize;
10524 phy_addr = tg3_nvram_phys_addr(tp, offset);
10526 tw32(NVRAM_ADDR, phy_addr);
10528 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
10530 if ((page_off == 0) || (i == 0))
10531 nvram_cmd |= NVRAM_CMD_FIRST;
10532 if (page_off == (tp->nvram_pagesize - 4))
10533 nvram_cmd |= NVRAM_CMD_LAST;
10535 if (i == (len - 4))
10536 nvram_cmd |= NVRAM_CMD_LAST;
10538 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752) &&
10539 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5755) &&
10540 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787) &&
10541 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784) &&
10542 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) &&
10543 (tp->nvram_jedecnum == JEDEC_ST) &&
10544 (nvram_cmd & NVRAM_CMD_FIRST)) {
10546 if ((ret = tg3_nvram_exec_cmd(tp,
10547 NVRAM_CMD_WREN | NVRAM_CMD_GO |
10548 NVRAM_CMD_DONE)))
10550 break;
10552 if (!(tp->tg3_flags2 & TG3_FLG2_FLASH)) {
10553 /* We always do complete word writes to eeprom. */
10554 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
10557 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd)))
10558 break;
10560 return ret;
10563 /* offset and length are dword aligned */
10564 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
10566 int ret;
10568 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
10569 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
10570 ~GRC_LCLCTRL_GPIO_OUTPUT1);
10571 udelay(40);
10574 if (!(tp->tg3_flags & TG3_FLAG_NVRAM)) {
10575 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
10577 else {
10578 u32 grc_mode;
10580 ret = tg3_nvram_lock(tp);
10581 if (ret)
10582 return ret;
10584 tg3_enable_nvram_access(tp);
10585 if ((tp->tg3_flags2 & TG3_FLG2_5750_PLUS) &&
10586 !(tp->tg3_flags2 & TG3_FLG2_PROTECTED_NVRAM))
10587 tw32(NVRAM_WRITE1, 0x406);
10589 grc_mode = tr32(GRC_MODE);
10590 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
10592 if ((tp->tg3_flags & TG3_FLAG_NVRAM_BUFFERED) ||
10593 !(tp->tg3_flags2 & TG3_FLG2_FLASH)) {
10595 ret = tg3_nvram_write_block_buffered(tp, offset, len,
10596 buf);
10598 else {
10599 ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
10600 buf);
10603 grc_mode = tr32(GRC_MODE);
10604 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
10606 tg3_disable_nvram_access(tp);
10607 tg3_nvram_unlock(tp);
10610 if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
10611 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
10612 udelay(40);
10615 return ret;
10618 struct subsys_tbl_ent {
10619 u16 subsys_vendor, subsys_devid;
10620 u32 phy_id;
10623 static struct subsys_tbl_ent subsys_id_to_phy_id[] = {
10624 /* Broadcom boards. */
10625 { PCI_VENDOR_ID_BROADCOM, 0x1644, PHY_ID_BCM5401 }, /* BCM95700A6 */
10626 { PCI_VENDOR_ID_BROADCOM, 0x0001, PHY_ID_BCM5701 }, /* BCM95701A5 */
10627 { PCI_VENDOR_ID_BROADCOM, 0x0002, PHY_ID_BCM8002 }, /* BCM95700T6 */
10628 { PCI_VENDOR_ID_BROADCOM, 0x0003, 0 }, /* BCM95700A9 */
10629 { PCI_VENDOR_ID_BROADCOM, 0x0005, PHY_ID_BCM5701 }, /* BCM95701T1 */
10630 { PCI_VENDOR_ID_BROADCOM, 0x0006, PHY_ID_BCM5701 }, /* BCM95701T8 */
10631 { PCI_VENDOR_ID_BROADCOM, 0x0007, 0 }, /* BCM95701A7 */
10632 { PCI_VENDOR_ID_BROADCOM, 0x0008, PHY_ID_BCM5701 }, /* BCM95701A10 */
10633 { PCI_VENDOR_ID_BROADCOM, 0x8008, PHY_ID_BCM5701 }, /* BCM95701A12 */
10634 { PCI_VENDOR_ID_BROADCOM, 0x0009, PHY_ID_BCM5703 }, /* BCM95703Ax1 */
10635 { PCI_VENDOR_ID_BROADCOM, 0x8009, PHY_ID_BCM5703 }, /* BCM95703Ax2 */
10637 /* 3com boards. */
10638 { PCI_VENDOR_ID_3COM, 0x1000, PHY_ID_BCM5401 }, /* 3C996T */
10639 { PCI_VENDOR_ID_3COM, 0x1006, PHY_ID_BCM5701 }, /* 3C996BT */
10640 { PCI_VENDOR_ID_3COM, 0x1004, 0 }, /* 3C996SX */
10641 { PCI_VENDOR_ID_3COM, 0x1007, PHY_ID_BCM5701 }, /* 3C1000T */
10642 { PCI_VENDOR_ID_3COM, 0x1008, PHY_ID_BCM5701 }, /* 3C940BR01 */
10644 /* DELL boards. */
10645 { PCI_VENDOR_ID_DELL, 0x00d1, PHY_ID_BCM5401 }, /* VIPER */
10646 { PCI_VENDOR_ID_DELL, 0x0106, PHY_ID_BCM5401 }, /* JAGUAR */
10647 { PCI_VENDOR_ID_DELL, 0x0109, PHY_ID_BCM5411 }, /* MERLOT */
10648 { PCI_VENDOR_ID_DELL, 0x010a, PHY_ID_BCM5411 }, /* SLIM_MERLOT */
10650 /* Compaq boards. */
10651 { PCI_VENDOR_ID_COMPAQ, 0x007c, PHY_ID_BCM5701 }, /* BANSHEE */
10652 { PCI_VENDOR_ID_COMPAQ, 0x009a, PHY_ID_BCM5701 }, /* BANSHEE_2 */
10653 { PCI_VENDOR_ID_COMPAQ, 0x007d, 0 }, /* CHANGELING */
10654 { PCI_VENDOR_ID_COMPAQ, 0x0085, PHY_ID_BCM5701 }, /* NC7780 */
10655 { PCI_VENDOR_ID_COMPAQ, 0x0099, PHY_ID_BCM5701 }, /* NC7780_2 */
10657 /* IBM boards. */
10658 { PCI_VENDOR_ID_IBM, 0x0281, 0 } /* IBM??? */
10661 static inline struct subsys_tbl_ent *lookup_by_subsys(struct tg3 *tp)
10663 int i;
10665 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
10666 if ((subsys_id_to_phy_id[i].subsys_vendor ==
10667 tp->pdev->subsystem_vendor) &&
10668 (subsys_id_to_phy_id[i].subsys_devid ==
10669 tp->pdev->subsystem_device))
10670 return &subsys_id_to_phy_id[i];
10672 return NULL;
10675 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
10677 u32 val;
10678 u16 pmcsr;
10680 /* On some early chips the SRAM cannot be accessed in D3hot state,
10681 * so need make sure we're in D0.
10683 pci_read_config_word(tp->pdev, tp->pm_cap + PCI_PM_CTRL, &pmcsr);
10684 pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
10685 pci_write_config_word(tp->pdev, tp->pm_cap + PCI_PM_CTRL, pmcsr);
10686 msleep(1);
10688 /* Make sure register accesses (indirect or otherwise)
10689 * will function correctly.
10691 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
10692 tp->misc_host_ctrl);
10694 /* The memory arbiter has to be enabled in order for SRAM accesses
10695 * to succeed. Normally on powerup the tg3 chip firmware will make
10696 * sure it is enabled, but other entities such as system netboot
10697 * code might disable it.
10699 val = tr32(MEMARB_MODE);
10700 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE);
10702 tp->phy_id = PHY_ID_INVALID;
10703 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10705 /* Assume an onboard device and WOL capable by default. */
10706 tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT | TG3_FLAG_WOL_CAP;
10708 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
10709 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) {
10710 tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT;
10711 tp->tg3_flags2 |= TG3_FLG2_IS_NIC;
10713 val = tr32(VCPU_CFGSHDW);
10714 if (val & VCPU_CFGSHDW_ASPM_DBNC)
10715 tp->tg3_flags |= TG3_FLAG_ASPM_WORKAROUND;
10716 if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
10717 (val & VCPU_CFGSHDW_WOL_MAGPKT))
10718 tp->tg3_flags |= TG3_FLAG_WOL_ENABLE;
10719 return;
10722 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
10723 if (val == NIC_SRAM_DATA_SIG_MAGIC) {
10724 u32 nic_cfg, led_cfg;
10725 u32 nic_phy_id, ver, cfg2 = 0, eeprom_phy_id;
10726 int eeprom_phy_serdes = 0;
10728 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
10729 tp->nic_sram_data_cfg = nic_cfg;
10731 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
10732 ver >>= NIC_SRAM_DATA_VER_SHIFT;
10733 if ((GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) &&
10734 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) &&
10735 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703) &&
10736 (ver > 0) && (ver < 0x100))
10737 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
10739 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
10740 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER)
10741 eeprom_phy_serdes = 1;
10743 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
10744 if (nic_phy_id != 0) {
10745 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
10746 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
10748 eeprom_phy_id = (id1 >> 16) << 10;
10749 eeprom_phy_id |= (id2 & 0xfc00) << 16;
10750 eeprom_phy_id |= (id2 & 0x03ff) << 0;
10751 } else
10752 eeprom_phy_id = 0;
10754 tp->phy_id = eeprom_phy_id;
10755 if (eeprom_phy_serdes) {
10756 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
10757 tp->tg3_flags2 |= TG3_FLG2_MII_SERDES;
10758 else
10759 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
10762 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
10763 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
10764 SHASTA_EXT_LED_MODE_MASK);
10765 else
10766 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
10768 switch (led_cfg) {
10769 default:
10770 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1:
10771 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10772 break;
10774 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2:
10775 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
10776 break;
10778 case NIC_SRAM_DATA_CFG_LED_MODE_MAC:
10779 tp->led_ctrl = LED_CTRL_MODE_MAC;
10781 /* Default to PHY_1_MODE if 0 (MAC_MODE) is
10782 * read on some older 5700/5701 bootcode.
10784 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
10785 ASIC_REV_5700 ||
10786 GET_ASIC_REV(tp->pci_chip_rev_id) ==
10787 ASIC_REV_5701)
10788 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10790 break;
10792 case SHASTA_EXT_LED_SHARED:
10793 tp->led_ctrl = LED_CTRL_MODE_SHARED;
10794 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 &&
10795 tp->pci_chip_rev_id != CHIPREV_ID_5750_A1)
10796 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
10797 LED_CTRL_MODE_PHY_2);
10798 break;
10800 case SHASTA_EXT_LED_MAC:
10801 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC;
10802 break;
10804 case SHASTA_EXT_LED_COMBO:
10805 tp->led_ctrl = LED_CTRL_MODE_COMBO;
10806 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0)
10807 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
10808 LED_CTRL_MODE_PHY_2);
10809 break;
10813 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
10814 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) &&
10815 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
10816 tp->led_ctrl = LED_CTRL_MODE_PHY_2;
10818 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX)
10819 tp->led_ctrl = LED_CTRL_MODE_PHY_1;
10821 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
10822 tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT;
10823 if ((tp->pdev->subsystem_vendor ==
10824 PCI_VENDOR_ID_ARIMA) &&
10825 (tp->pdev->subsystem_device == 0x205a ||
10826 tp->pdev->subsystem_device == 0x2063))
10827 tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT;
10828 } else {
10829 tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT;
10830 tp->tg3_flags2 |= TG3_FLG2_IS_NIC;
10833 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
10834 tp->tg3_flags |= TG3_FLAG_ENABLE_ASF;
10835 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS)
10836 tp->tg3_flags2 |= TG3_FLG2_ASF_NEW_HANDSHAKE;
10838 if (nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE)
10839 tp->tg3_flags3 |= TG3_FLG3_ENABLE_APE;
10840 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES &&
10841 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
10842 tp->tg3_flags &= ~TG3_FLAG_WOL_CAP;
10844 if (tp->tg3_flags & TG3_FLAG_WOL_CAP &&
10845 nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)
10846 tp->tg3_flags |= TG3_FLAG_WOL_ENABLE;
10848 if (cfg2 & (1 << 17))
10849 tp->tg3_flags2 |= TG3_FLG2_CAPACITIVE_COUPLING;
10851 /* serdes signal pre-emphasis in register 0x590 set by */
10852 /* bootcode if bit 18 is set */
10853 if (cfg2 & (1 << 18))
10854 tp->tg3_flags2 |= TG3_FLG2_SERDES_PREEMPHASIS;
10856 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
10857 u32 cfg3;
10859 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
10860 if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)
10861 tp->tg3_flags |= TG3_FLAG_ASPM_WORKAROUND;
10866 static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
10868 int i;
10869 u32 val;
10871 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START);
10872 tw32(OTP_CTRL, cmd);
10874 /* Wait for up to 1 ms for command to execute. */
10875 for (i = 0; i < 100; i++) {
10876 val = tr32(OTP_STATUS);
10877 if (val & OTP_STATUS_CMD_DONE)
10878 break;
10879 udelay(10);
10882 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
10885 /* Read the gphy configuration from the OTP region of the chip. The gphy
10886 * configuration is a 32-bit value that straddles the alignment boundary.
10887 * We do two 32-bit reads and then shift and merge the results.
10889 static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp)
10891 u32 bhalf_otp, thalf_otp;
10893 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC);
10895 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
10896 return 0;
10898 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1);
10900 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
10901 return 0;
10903 thalf_otp = tr32(OTP_READ_DATA);
10905 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2);
10907 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
10908 return 0;
10910 bhalf_otp = tr32(OTP_READ_DATA);
10912 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
10915 static int __devinit tg3_phy_probe(struct tg3 *tp)
10917 u32 hw_phy_id_1, hw_phy_id_2;
10918 u32 hw_phy_id, hw_phy_id_masked;
10919 int err;
10921 /* Reading the PHY ID register can conflict with ASF
10922 * firwmare access to the PHY hardware.
10924 err = 0;
10925 if ((tp->tg3_flags & TG3_FLAG_ENABLE_ASF) ||
10926 (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE)) {
10927 hw_phy_id = hw_phy_id_masked = PHY_ID_INVALID;
10928 } else {
10929 /* Now read the physical PHY_ID from the chip and verify
10930 * that it is sane. If it doesn't look good, we fall back
10931 * to either the hard-coded table based PHY_ID and failing
10932 * that the value found in the eeprom area.
10934 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
10935 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
10937 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10;
10938 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
10939 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0;
10941 hw_phy_id_masked = hw_phy_id & PHY_ID_MASK;
10944 if (!err && KNOWN_PHY_ID(hw_phy_id_masked)) {
10945 tp->phy_id = hw_phy_id;
10946 if (hw_phy_id_masked == PHY_ID_BCM8002)
10947 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
10948 else
10949 tp->tg3_flags2 &= ~TG3_FLG2_PHY_SERDES;
10950 } else {
10951 if (tp->phy_id != PHY_ID_INVALID) {
10952 /* Do nothing, phy ID already set up in
10953 * tg3_get_eeprom_hw_cfg().
10955 } else {
10956 struct subsys_tbl_ent *p;
10958 /* No eeprom signature? Try the hardcoded
10959 * subsys device table.
10961 p = lookup_by_subsys(tp);
10962 if (!p)
10963 return -ENODEV;
10965 tp->phy_id = p->phy_id;
10966 if (!tp->phy_id ||
10967 tp->phy_id == PHY_ID_BCM8002)
10968 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
10972 if (!(tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) &&
10973 !(tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) &&
10974 !(tp->tg3_flags & TG3_FLAG_ENABLE_ASF)) {
10975 u32 bmsr, adv_reg, tg3_ctrl, mask;
10977 tg3_readphy(tp, MII_BMSR, &bmsr);
10978 if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
10979 (bmsr & BMSR_LSTATUS))
10980 goto skip_phy_reset;
10982 err = tg3_phy_reset(tp);
10983 if (err)
10984 return err;
10986 adv_reg = (ADVERTISE_10HALF | ADVERTISE_10FULL |
10987 ADVERTISE_100HALF | ADVERTISE_100FULL |
10988 ADVERTISE_CSMA | ADVERTISE_PAUSE_CAP);
10989 tg3_ctrl = 0;
10990 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY)) {
10991 tg3_ctrl = (MII_TG3_CTRL_ADV_1000_HALF |
10992 MII_TG3_CTRL_ADV_1000_FULL);
10993 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
10994 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)
10995 tg3_ctrl |= (MII_TG3_CTRL_AS_MASTER |
10996 MII_TG3_CTRL_ENABLE_AS_MASTER);
10999 mask = (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
11000 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
11001 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full);
11002 if (!tg3_copper_is_advertising_all(tp, mask)) {
11003 tg3_writephy(tp, MII_ADVERTISE, adv_reg);
11005 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
11006 tg3_writephy(tp, MII_TG3_CTRL, tg3_ctrl);
11008 tg3_writephy(tp, MII_BMCR,
11009 BMCR_ANENABLE | BMCR_ANRESTART);
11011 tg3_phy_set_wirespeed(tp);
11013 tg3_writephy(tp, MII_ADVERTISE, adv_reg);
11014 if (!(tp->tg3_flags & TG3_FLAG_10_100_ONLY))
11015 tg3_writephy(tp, MII_TG3_CTRL, tg3_ctrl);
11018 skip_phy_reset:
11019 if ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401) {
11020 err = tg3_init_5401phy_dsp(tp);
11021 if (err)
11022 return err;
11025 if (!err && ((tp->phy_id & PHY_ID_MASK) == PHY_ID_BCM5401)) {
11026 err = tg3_init_5401phy_dsp(tp);
11029 if (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES)
11030 tp->link_config.advertising =
11031 (ADVERTISED_1000baseT_Half |
11032 ADVERTISED_1000baseT_Full |
11033 ADVERTISED_Autoneg |
11034 ADVERTISED_FIBRE);
11035 if (tp->tg3_flags & TG3_FLAG_10_100_ONLY)
11036 tp->link_config.advertising &=
11037 ~(ADVERTISED_1000baseT_Half |
11038 ADVERTISED_1000baseT_Full);
11040 return err;
11043 static void __devinit tg3_read_partno(struct tg3 *tp)
11045 unsigned char vpd_data[256];
11046 unsigned int i;
11047 u32 magic;
11049 if (tg3_nvram_read_swab(tp, 0x0, &magic))
11050 goto out_not_found;
11052 if (magic == TG3_EEPROM_MAGIC) {
11053 for (i = 0; i < 256; i += 4) {
11054 u32 tmp;
11056 if (tg3_nvram_read(tp, 0x100 + i, &tmp))
11057 goto out_not_found;
11059 vpd_data[i + 0] = ((tmp >> 0) & 0xff);
11060 vpd_data[i + 1] = ((tmp >> 8) & 0xff);
11061 vpd_data[i + 2] = ((tmp >> 16) & 0xff);
11062 vpd_data[i + 3] = ((tmp >> 24) & 0xff);
11064 } else {
11065 int vpd_cap;
11067 vpd_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_VPD);
11068 for (i = 0; i < 256; i += 4) {
11069 u32 tmp, j = 0;
11070 __le32 v;
11071 u16 tmp16;
11073 pci_write_config_word(tp->pdev, vpd_cap + PCI_VPD_ADDR,
11075 while (j++ < 100) {
11076 pci_read_config_word(tp->pdev, vpd_cap +
11077 PCI_VPD_ADDR, &tmp16);
11078 if (tmp16 & 0x8000)
11079 break;
11080 msleep(1);
11082 if (!(tmp16 & 0x8000))
11083 goto out_not_found;
11085 pci_read_config_dword(tp->pdev, vpd_cap + PCI_VPD_DATA,
11086 &tmp);
11087 v = cpu_to_le32(tmp);
11088 memcpy(&vpd_data[i], &v, 4);
11092 /* Now parse and find the part number. */
11093 for (i = 0; i < 254; ) {
11094 unsigned char val = vpd_data[i];
11095 unsigned int block_end;
11097 if (val == 0x82 || val == 0x91) {
11098 i = (i + 3 +
11099 (vpd_data[i + 1] +
11100 (vpd_data[i + 2] << 8)));
11101 continue;
11104 if (val != 0x90)
11105 goto out_not_found;
11107 block_end = (i + 3 +
11108 (vpd_data[i + 1] +
11109 (vpd_data[i + 2] << 8)));
11110 i += 3;
11112 if (block_end > 256)
11113 goto out_not_found;
11115 while (i < (block_end - 2)) {
11116 if (vpd_data[i + 0] == 'P' &&
11117 vpd_data[i + 1] == 'N') {
11118 int partno_len = vpd_data[i + 2];
11120 i += 3;
11121 if (partno_len > 24 || (partno_len + i) > 256)
11122 goto out_not_found;
11124 memcpy(tp->board_part_number,
11125 &vpd_data[i], partno_len);
11127 /* Success. */
11128 return;
11130 i += 3 + vpd_data[i + 2];
11133 /* Part number not found. */
11134 goto out_not_found;
11137 out_not_found:
11138 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11139 strcpy(tp->board_part_number, "BCM95906");
11140 else
11141 strcpy(tp->board_part_number, "none");
11144 static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
11146 u32 val;
11148 if (tg3_nvram_read_swab(tp, offset, &val) ||
11149 (val & 0xfc000000) != 0x0c000000 ||
11150 tg3_nvram_read_swab(tp, offset + 4, &val) ||
11151 val != 0)
11152 return 0;
11154 return 1;
11157 static void __devinit tg3_read_fw_ver(struct tg3 *tp)
11159 u32 val, offset, start;
11160 u32 ver_offset;
11161 int i, bcnt;
11163 if (tg3_nvram_read_swab(tp, 0, &val))
11164 return;
11166 if (val != TG3_EEPROM_MAGIC)
11167 return;
11169 if (tg3_nvram_read_swab(tp, 0xc, &offset) ||
11170 tg3_nvram_read_swab(tp, 0x4, &start))
11171 return;
11173 offset = tg3_nvram_logical_addr(tp, offset);
11175 if (!tg3_fw_img_is_valid(tp, offset) ||
11176 tg3_nvram_read_swab(tp, offset + 8, &ver_offset))
11177 return;
11179 offset = offset + ver_offset - start;
11180 for (i = 0; i < 16; i += 4) {
11181 __le32 v;
11182 if (tg3_nvram_read_le(tp, offset + i, &v))
11183 return;
11185 memcpy(tp->fw_ver + i, &v, 4);
11188 if (!(tp->tg3_flags & TG3_FLAG_ENABLE_ASF) ||
11189 (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE))
11190 return;
11192 for (offset = TG3_NVM_DIR_START;
11193 offset < TG3_NVM_DIR_END;
11194 offset += TG3_NVM_DIRENT_SIZE) {
11195 if (tg3_nvram_read_swab(tp, offset, &val))
11196 return;
11198 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI)
11199 break;
11202 if (offset == TG3_NVM_DIR_END)
11203 return;
11205 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS))
11206 start = 0x08000000;
11207 else if (tg3_nvram_read_swab(tp, offset - 4, &start))
11208 return;
11210 if (tg3_nvram_read_swab(tp, offset + 4, &offset) ||
11211 !tg3_fw_img_is_valid(tp, offset) ||
11212 tg3_nvram_read_swab(tp, offset + 8, &val))
11213 return;
11215 offset += val - start;
11217 bcnt = strlen(tp->fw_ver);
11219 tp->fw_ver[bcnt++] = ',';
11220 tp->fw_ver[bcnt++] = ' ';
11222 for (i = 0; i < 4; i++) {
11223 __le32 v;
11224 if (tg3_nvram_read_le(tp, offset, &v))
11225 return;
11227 offset += sizeof(v);
11229 if (bcnt > TG3_VER_SIZE - sizeof(v)) {
11230 memcpy(&tp->fw_ver[bcnt], &v, TG3_VER_SIZE - bcnt);
11231 break;
11234 memcpy(&tp->fw_ver[bcnt], &v, sizeof(v));
11235 bcnt += sizeof(v);
11238 tp->fw_ver[TG3_VER_SIZE - 1] = 0;
11241 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *);
11243 static int __devinit tg3_get_invariants(struct tg3 *tp)
11245 static struct pci_device_id write_reorder_chipsets[] = {
11246 { PCI_DEVICE(PCI_VENDOR_ID_AMD,
11247 PCI_DEVICE_ID_AMD_FE_GATE_700C) },
11248 { PCI_DEVICE(PCI_VENDOR_ID_AMD,
11249 PCI_DEVICE_ID_AMD_8131_BRIDGE) },
11250 { PCI_DEVICE(PCI_VENDOR_ID_VIA,
11251 PCI_DEVICE_ID_VIA_8385_0) },
11252 { },
11254 u32 misc_ctrl_reg;
11255 u32 cacheline_sz_reg;
11256 u32 pci_state_reg, grc_misc_cfg;
11257 u32 val;
11258 u16 pci_cmd;
11259 int err, pcie_cap;
11261 /* Force memory write invalidate off. If we leave it on,
11262 * then on 5700_BX chips we have to enable a workaround.
11263 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
11264 * to match the cacheline size. The Broadcom driver have this
11265 * workaround but turns MWI off all the times so never uses
11266 * it. This seems to suggest that the workaround is insufficient.
11268 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11269 pci_cmd &= ~PCI_COMMAND_INVALIDATE;
11270 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11272 /* It is absolutely critical that TG3PCI_MISC_HOST_CTRL
11273 * has the register indirect write enable bit set before
11274 * we try to access any of the MMIO registers. It is also
11275 * critical that the PCI-X hw workaround situation is decided
11276 * before that as well.
11278 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
11279 &misc_ctrl_reg);
11281 tp->pci_chip_rev_id = (misc_ctrl_reg >>
11282 MISC_HOST_CTRL_CHIPREV_SHIFT);
11283 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) {
11284 u32 prod_id_asic_rev;
11286 pci_read_config_dword(tp->pdev, TG3PCI_PRODID_ASICREV,
11287 &prod_id_asic_rev);
11288 tp->pci_chip_rev_id = prod_id_asic_rev & PROD_ID_ASIC_REV_MASK;
11291 /* Wrong chip ID in 5752 A0. This code can be removed later
11292 * as A0 is not in production.
11294 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW)
11295 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0;
11297 /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
11298 * we need to disable memory and use config. cycles
11299 * only to access all registers. The 5702/03 chips
11300 * can mistakenly decode the special cycles from the
11301 * ICH chipsets as memory write cycles, causing corruption
11302 * of register and memory space. Only certain ICH bridges
11303 * will drive special cycles with non-zero data during the
11304 * address phase which can fall within the 5703's address
11305 * range. This is not an ICH bug as the PCI spec allows
11306 * non-zero address during special cycles. However, only
11307 * these ICH bridges are known to drive non-zero addresses
11308 * during special cycles.
11310 * Since special cycles do not cross PCI bridges, we only
11311 * enable this workaround if the 5703 is on the secondary
11312 * bus of these ICH bridges.
11314 if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
11315 (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) {
11316 static struct tg3_dev_id {
11317 u32 vendor;
11318 u32 device;
11319 u32 rev;
11320 } ich_chipsets[] = {
11321 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8,
11322 PCI_ANY_ID },
11323 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8,
11324 PCI_ANY_ID },
11325 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11,
11326 0xa },
11327 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6,
11328 PCI_ANY_ID },
11329 { },
11331 struct tg3_dev_id *pci_id = &ich_chipsets[0];
11332 struct pci_dev *bridge = NULL;
11334 while (pci_id->vendor != 0) {
11335 bridge = pci_get_device(pci_id->vendor, pci_id->device,
11336 bridge);
11337 if (!bridge) {
11338 pci_id++;
11339 continue;
11341 if (pci_id->rev != PCI_ANY_ID) {
11342 if (bridge->revision > pci_id->rev)
11343 continue;
11345 if (bridge->subordinate &&
11346 (bridge->subordinate->number ==
11347 tp->pdev->bus->number)) {
11349 tp->tg3_flags2 |= TG3_FLG2_ICH_WORKAROUND;
11350 pci_dev_put(bridge);
11351 break;
11356 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
11357 static struct tg3_dev_id {
11358 u32 vendor;
11359 u32 device;
11360 } bridge_chipsets[] = {
11361 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 },
11362 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 },
11363 { },
11365 struct tg3_dev_id *pci_id = &bridge_chipsets[0];
11366 struct pci_dev *bridge = NULL;
11368 while (pci_id->vendor != 0) {
11369 bridge = pci_get_device(pci_id->vendor,
11370 pci_id->device,
11371 bridge);
11372 if (!bridge) {
11373 pci_id++;
11374 continue;
11376 if (bridge->subordinate &&
11377 (bridge->subordinate->number <=
11378 tp->pdev->bus->number) &&
11379 (bridge->subordinate->subordinate >=
11380 tp->pdev->bus->number)) {
11381 tp->tg3_flags3 |= TG3_FLG3_5701_DMA_BUG;
11382 pci_dev_put(bridge);
11383 break;
11388 /* The EPB bridge inside 5714, 5715, and 5780 cannot support
11389 * DMA addresses > 40-bit. This bridge may have other additional
11390 * 57xx devices behind it in some 4-port NIC designs for example.
11391 * Any tg3 device found behind the bridge will also need the 40-bit
11392 * DMA workaround.
11394 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 ||
11395 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
11396 tp->tg3_flags2 |= TG3_FLG2_5780_CLASS;
11397 tp->tg3_flags |= TG3_FLAG_40BIT_DMA_BUG;
11398 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI);
11400 else {
11401 struct pci_dev *bridge = NULL;
11403 do {
11404 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS,
11405 PCI_DEVICE_ID_SERVERWORKS_EPB,
11406 bridge);
11407 if (bridge && bridge->subordinate &&
11408 (bridge->subordinate->number <=
11409 tp->pdev->bus->number) &&
11410 (bridge->subordinate->subordinate >=
11411 tp->pdev->bus->number)) {
11412 tp->tg3_flags |= TG3_FLAG_40BIT_DMA_BUG;
11413 pci_dev_put(bridge);
11414 break;
11416 } while (bridge);
11419 /* Initialize misc host control in PCI block. */
11420 tp->misc_host_ctrl |= (misc_ctrl_reg &
11421 MISC_HOST_CTRL_CHIPREV);
11422 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
11423 tp->misc_host_ctrl);
11425 pci_read_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
11426 &cacheline_sz_reg);
11428 tp->pci_cacheline_sz = (cacheline_sz_reg >> 0) & 0xff;
11429 tp->pci_lat_timer = (cacheline_sz_reg >> 8) & 0xff;
11430 tp->pci_hdr_type = (cacheline_sz_reg >> 16) & 0xff;
11431 tp->pci_bist = (cacheline_sz_reg >> 24) & 0xff;
11433 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
11434 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714))
11435 tp->pdev_peer = tg3_find_peer(tp);
11437 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
11438 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
11439 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
11440 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
11441 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11442 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
11443 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
11444 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
11445 tp->tg3_flags2 |= TG3_FLG2_5750_PLUS;
11447 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) ||
11448 (tp->tg3_flags2 & TG3_FLG2_5750_PLUS))
11449 tp->tg3_flags2 |= TG3_FLG2_5705_PLUS;
11451 if (tp->tg3_flags2 & TG3_FLG2_5750_PLUS) {
11452 tp->tg3_flags |= TG3_FLAG_SUPPORT_MSI;
11453 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX ||
11454 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX ||
11455 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 &&
11456 tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 &&
11457 tp->pdev_peer == tp->pdev))
11458 tp->tg3_flags &= ~TG3_FLAG_SUPPORT_MSI;
11460 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
11461 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
11462 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11463 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
11464 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
11465 tp->tg3_flags2 |= TG3_FLG2_HW_TSO_2;
11466 tp->tg3_flags2 |= TG3_FLG2_1SHOT_MSI;
11467 } else {
11468 tp->tg3_flags2 |= TG3_FLG2_HW_TSO_1 | TG3_FLG2_TSO_BUG;
11469 if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
11470 ASIC_REV_5750 &&
11471 tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2)
11472 tp->tg3_flags2 &= ~TG3_FLG2_TSO_BUG;
11476 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705 &&
11477 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5750 &&
11478 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
11479 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5755 &&
11480 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5787 &&
11481 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
11482 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761 &&
11483 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)
11484 tp->tg3_flags2 |= TG3_FLG2_JUMBO_CAPABLE;
11486 pcie_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_EXP);
11487 if (pcie_cap != 0) {
11488 tp->tg3_flags2 |= TG3_FLG2_PCI_EXPRESS;
11490 pcie_set_readrq(tp->pdev, 4096);
11492 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
11493 u16 lnkctl;
11495 pci_read_config_word(tp->pdev,
11496 pcie_cap + PCI_EXP_LNKCTL,
11497 &lnkctl);
11498 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN)
11499 tp->tg3_flags2 &= ~TG3_FLG2_HW_TSO_2;
11503 /* If we have an AMD 762 or VIA K8T800 chipset, write
11504 * reordering to the mailbox registers done by the host
11505 * controller can cause major troubles. We read back from
11506 * every mailbox register write to force the writes to be
11507 * posted to the chip in order.
11509 if (pci_dev_present(write_reorder_chipsets) &&
11510 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
11511 tp->tg3_flags |= TG3_FLAG_MBOX_WRITE_REORDER;
11513 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
11514 tp->pci_lat_timer < 64) {
11515 tp->pci_lat_timer = 64;
11517 cacheline_sz_reg = ((tp->pci_cacheline_sz & 0xff) << 0);
11518 cacheline_sz_reg |= ((tp->pci_lat_timer & 0xff) << 8);
11519 cacheline_sz_reg |= ((tp->pci_hdr_type & 0xff) << 16);
11520 cacheline_sz_reg |= ((tp->pci_bist & 0xff) << 24);
11522 pci_write_config_dword(tp->pdev, TG3PCI_CACHELINESZ,
11523 cacheline_sz_reg);
11526 if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ||
11527 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
11528 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX);
11529 if (!tp->pcix_cap) {
11530 printk(KERN_ERR PFX "Cannot find PCI-X "
11531 "capability, aborting.\n");
11532 return -EIO;
11536 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
11537 &pci_state_reg);
11539 if (tp->pcix_cap && (pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0) {
11540 tp->tg3_flags |= TG3_FLAG_PCIX_MODE;
11542 /* If this is a 5700 BX chipset, and we are in PCI-X
11543 * mode, enable register write workaround.
11545 * The workaround is to use indirect register accesses
11546 * for all chip writes not to mailbox registers.
11548 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) {
11549 u32 pm_reg;
11551 tp->tg3_flags |= TG3_FLAG_PCIX_TARGET_HWBUG;
11553 /* The chip can have it's power management PCI config
11554 * space registers clobbered due to this bug.
11555 * So explicitly force the chip into D0 here.
11557 pci_read_config_dword(tp->pdev,
11558 tp->pm_cap + PCI_PM_CTRL,
11559 &pm_reg);
11560 pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
11561 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
11562 pci_write_config_dword(tp->pdev,
11563 tp->pm_cap + PCI_PM_CTRL,
11564 pm_reg);
11566 /* Also, force SERR#/PERR# in PCI command. */
11567 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11568 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
11569 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11573 /* 5700 BX chips need to have their TX producer index mailboxes
11574 * written twice to workaround a bug.
11576 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX)
11577 tp->tg3_flags |= TG3_FLAG_TXD_MBOX_HWBUG;
11579 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
11580 tp->tg3_flags |= TG3_FLAG_PCI_HIGH_SPEED;
11581 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
11582 tp->tg3_flags |= TG3_FLAG_PCI_32BIT;
11584 /* Chip-specific fixup from Broadcom driver */
11585 if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
11586 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
11587 pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
11588 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
11591 /* Default fast path register access methods */
11592 tp->read32 = tg3_read32;
11593 tp->write32 = tg3_write32;
11594 tp->read32_mbox = tg3_read32;
11595 tp->write32_mbox = tg3_write32;
11596 tp->write32_tx_mbox = tg3_write32;
11597 tp->write32_rx_mbox = tg3_write32;
11599 /* Various workaround register access methods */
11600 if (tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG)
11601 tp->write32 = tg3_write_indirect_reg32;
11602 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
11603 ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) &&
11604 tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) {
11606 * Back to back register writes can cause problems on these
11607 * chips, the workaround is to read back all reg writes
11608 * except those to mailbox regs.
11610 * See tg3_write_indirect_reg32().
11612 tp->write32 = tg3_write_flush_reg32;
11616 if ((tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG) ||
11617 (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)) {
11618 tp->write32_tx_mbox = tg3_write32_tx_mbox;
11619 if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
11620 tp->write32_rx_mbox = tg3_write_flush_reg32;
11623 if (tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND) {
11624 tp->read32 = tg3_read_indirect_reg32;
11625 tp->write32 = tg3_write_indirect_reg32;
11626 tp->read32_mbox = tg3_read_indirect_mbox;
11627 tp->write32_mbox = tg3_write_indirect_mbox;
11628 tp->write32_tx_mbox = tg3_write_indirect_mbox;
11629 tp->write32_rx_mbox = tg3_write_indirect_mbox;
11631 iounmap(tp->regs);
11632 tp->regs = NULL;
11634 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
11635 pci_cmd &= ~PCI_COMMAND_MEMORY;
11636 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
11638 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
11639 tp->read32_mbox = tg3_read32_mbox_5906;
11640 tp->write32_mbox = tg3_write32_mbox_5906;
11641 tp->write32_tx_mbox = tg3_write32_mbox_5906;
11642 tp->write32_rx_mbox = tg3_write32_mbox_5906;
11645 if (tp->write32 == tg3_write_indirect_reg32 ||
11646 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) &&
11647 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
11648 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)))
11649 tp->tg3_flags |= TG3_FLAG_SRAM_USE_CONFIG;
11651 /* Get eeprom hw config before calling tg3_set_power_state().
11652 * In particular, the TG3_FLG2_IS_NIC flag must be
11653 * determined before calling tg3_set_power_state() so that
11654 * we know whether or not to switch out of Vaux power.
11655 * When the flag is set, it means that GPIO1 is used for eeprom
11656 * write protect and also implies that it is a LOM where GPIOs
11657 * are not used to switch power.
11659 tg3_get_eeprom_hw_cfg(tp);
11661 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) {
11662 /* Allow reads and writes to the
11663 * APE register and memory space.
11665 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
11666 PCISTATE_ALLOW_APE_SHMEM_WR;
11667 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
11668 pci_state_reg);
11671 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11672 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
11673 tp->tg3_flags |= TG3_FLAG_CPMU_PRESENT;
11675 if (tp->pci_chip_rev_id == CHIPREV_ID_5784_A0 ||
11676 tp->pci_chip_rev_id == CHIPREV_ID_5784_A1 ||
11677 tp->pci_chip_rev_id == CHIPREV_ID_5761_A0 ||
11678 tp->pci_chip_rev_id == CHIPREV_ID_5761_A1)
11679 tp->tg3_flags3 |= TG3_FLG3_5761_5784_AX_FIXES;
11682 /* Set up tp->grc_local_ctrl before calling tg3_set_power_state().
11683 * GPIO1 driven high will bring 5700's external PHY out of reset.
11684 * It is also used as eeprom write protect on LOMs.
11686 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM;
11687 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) ||
11688 (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT))
11689 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 |
11690 GRC_LCLCTRL_GPIO_OUTPUT1);
11691 /* Unused GPIO3 must be driven as output on 5752 because there
11692 * are no pull-up resistors on unused GPIO pins.
11694 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
11695 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
11697 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
11698 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL;
11700 /* Force the chip into D0. */
11701 err = tg3_set_power_state(tp, PCI_D0);
11702 if (err) {
11703 printk(KERN_ERR PFX "(%s) transition to D0 failed\n",
11704 pci_name(tp->pdev));
11705 return err;
11708 /* 5700 B0 chips do not support checksumming correctly due
11709 * to hardware bugs.
11711 if (tp->pci_chip_rev_id == CHIPREV_ID_5700_B0)
11712 tp->tg3_flags |= TG3_FLAG_BROKEN_CHECKSUMS;
11714 /* Derive initial jumbo mode from MTU assigned in
11715 * ether_setup() via the alloc_etherdev() call
11717 if (tp->dev->mtu > ETH_DATA_LEN &&
11718 !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS))
11719 tp->tg3_flags |= TG3_FLAG_JUMBO_RING_ENABLE;
11721 /* Determine WakeOnLan speed to use. */
11722 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
11723 tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
11724 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 ||
11725 tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) {
11726 tp->tg3_flags &= ~(TG3_FLAG_WOL_SPEED_100MB);
11727 } else {
11728 tp->tg3_flags |= TG3_FLAG_WOL_SPEED_100MB;
11731 /* A few boards don't want Ethernet@WireSpeed phy feature */
11732 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) ||
11733 ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) &&
11734 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) &&
11735 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
11736 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) ||
11737 (tp->tg3_flags2 & TG3_FLG2_ANY_SERDES))
11738 tp->tg3_flags2 |= TG3_FLG2_NO_ETH_WIRE_SPEED;
11740 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX ||
11741 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX)
11742 tp->tg3_flags2 |= TG3_FLG2_PHY_ADC_BUG;
11743 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0)
11744 tp->tg3_flags2 |= TG3_FLG2_PHY_5704_A0_BUG;
11746 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
11747 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
11748 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
11749 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11750 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) {
11751 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
11752 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
11753 tp->tg3_flags2 |= TG3_FLG2_PHY_JITTER_BUG;
11754 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
11755 tp->tg3_flags2 |= TG3_FLG2_PHY_ADJUST_TRIM;
11756 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906)
11757 tp->tg3_flags2 |= TG3_FLG2_PHY_BER_BUG;
11760 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 &&
11761 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) {
11762 tp->phy_otp = tg3_read_otp_phycfg(tp);
11763 if (tp->phy_otp == 0)
11764 tp->phy_otp = TG3_OTP_DEFAULT;
11767 tp->coalesce_mode = 0;
11768 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX &&
11769 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX)
11770 tp->coalesce_mode |= HOSTCC_MODE_32BYTE;
11772 /* Initialize MAC MI mode, polling disabled. */
11773 tw32_f(MAC_MI_MODE, tp->mi_mode);
11774 udelay(80);
11776 /* Initialize data/descriptor byte/word swapping. */
11777 val = tr32(GRC_MODE);
11778 val &= GRC_MODE_HOST_STACKUP;
11779 tw32(GRC_MODE, val | tp->grc_mode);
11781 tg3_switch_clocks(tp);
11783 /* Clear this out for sanity. */
11784 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0);
11786 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
11787 &pci_state_reg);
11788 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
11789 (tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) == 0) {
11790 u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
11792 if (chiprevid == CHIPREV_ID_5701_A0 ||
11793 chiprevid == CHIPREV_ID_5701_B0 ||
11794 chiprevid == CHIPREV_ID_5701_B2 ||
11795 chiprevid == CHIPREV_ID_5701_B5) {
11796 void __iomem *sram_base;
11798 /* Write some dummy words into the SRAM status block
11799 * area, see if it reads back correctly. If the return
11800 * value is bad, force enable the PCIX workaround.
11802 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
11804 writel(0x00000000, sram_base);
11805 writel(0x00000000, sram_base + 4);
11806 writel(0xffffffff, sram_base + 4);
11807 if (readl(sram_base) != 0x00000000)
11808 tp->tg3_flags |= TG3_FLAG_PCIX_TARGET_HWBUG;
11812 udelay(50);
11813 tg3_nvram_init(tp);
11815 grc_misc_cfg = tr32(GRC_MISC_CFG);
11816 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
11818 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
11819 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
11820 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
11821 tp->tg3_flags2 |= TG3_FLG2_IS_5788;
11823 if (!(tp->tg3_flags2 & TG3_FLG2_IS_5788) &&
11824 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700))
11825 tp->tg3_flags |= TG3_FLAG_TAGGED_STATUS;
11826 if (tp->tg3_flags & TG3_FLAG_TAGGED_STATUS) {
11827 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD |
11828 HOSTCC_MODE_CLRTICK_TXBD);
11830 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS;
11831 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
11832 tp->misc_host_ctrl);
11835 /* these are limited to 10/100 only */
11836 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
11837 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
11838 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
11839 tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
11840 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
11841 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
11842 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
11843 (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
11844 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
11845 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F ||
11846 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) ||
11847 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11848 tp->tg3_flags |= TG3_FLAG_10_100_ONLY;
11850 err = tg3_phy_probe(tp);
11851 if (err) {
11852 printk(KERN_ERR PFX "(%s) phy probe failed, err %d\n",
11853 pci_name(tp->pdev), err);
11854 /* ... but do not return immediately ... */
11857 tg3_read_partno(tp);
11858 tg3_read_fw_ver(tp);
11860 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) {
11861 tp->tg3_flags &= ~TG3_FLAG_USE_MI_INTERRUPT;
11862 } else {
11863 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
11864 tp->tg3_flags |= TG3_FLAG_USE_MI_INTERRUPT;
11865 else
11866 tp->tg3_flags &= ~TG3_FLAG_USE_MI_INTERRUPT;
11869 /* 5700 {AX,BX} chips have a broken status block link
11870 * change bit implementation, so we must use the
11871 * status register in those cases.
11873 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700)
11874 tp->tg3_flags |= TG3_FLAG_USE_LINKCHG_REG;
11875 else
11876 tp->tg3_flags &= ~TG3_FLAG_USE_LINKCHG_REG;
11878 /* The led_ctrl is set during tg3_phy_probe, here we might
11879 * have to force the link status polling mechanism based
11880 * upon subsystem IDs.
11882 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
11883 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
11884 !(tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)) {
11885 tp->tg3_flags |= (TG3_FLAG_USE_MI_INTERRUPT |
11886 TG3_FLAG_USE_LINKCHG_REG);
11889 /* For all SERDES we poll the MAC status register. */
11890 if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES)
11891 tp->tg3_flags |= TG3_FLAG_POLL_SERDES;
11892 else
11893 tp->tg3_flags &= ~TG3_FLAG_POLL_SERDES;
11895 /* All chips before 5787 can get confused if TX buffers
11896 * straddle the 4GB address boundary in some cases.
11898 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
11899 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
11900 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
11901 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 ||
11902 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11903 tp->dev->hard_start_xmit = tg3_start_xmit;
11904 else
11905 tp->dev->hard_start_xmit = tg3_start_xmit_dma_bug;
11907 tp->rx_offset = 2;
11908 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 &&
11909 (tp->tg3_flags & TG3_FLAG_PCIX_MODE) != 0)
11910 tp->rx_offset = 0;
11912 tp->rx_std_max_post = TG3_RX_RING_SIZE;
11914 /* Increment the rx prod index on the rx std ring by at most
11915 * 8 for these chips to workaround hw errata.
11917 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 ||
11918 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 ||
11919 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
11920 tp->rx_std_max_post = 8;
11922 if (tp->tg3_flags & TG3_FLAG_ASPM_WORKAROUND)
11923 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) &
11924 PCIE_PWR_MGMT_L1_THRESH_MSK;
11926 return err;
11929 #ifdef CONFIG_SPARC
11930 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
11932 struct net_device *dev = tp->dev;
11933 struct pci_dev *pdev = tp->pdev;
11934 struct device_node *dp = pci_device_to_OF_node(pdev);
11935 const unsigned char *addr;
11936 int len;
11938 addr = of_get_property(dp, "local-mac-address", &len);
11939 if (addr && len == 6) {
11940 memcpy(dev->dev_addr, addr, 6);
11941 memcpy(dev->perm_addr, dev->dev_addr, 6);
11942 return 0;
11944 return -ENODEV;
11947 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
11949 struct net_device *dev = tp->dev;
11951 memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
11952 memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
11953 return 0;
11955 #endif
11957 static int __devinit tg3_get_device_address(struct tg3 *tp)
11959 struct net_device *dev = tp->dev;
11960 u32 hi, lo, mac_offset;
11961 int addr_ok = 0;
11963 #ifdef CONFIG_SPARC
11964 if (!tg3_get_macaddr_sparc(tp))
11965 return 0;
11966 #endif
11968 mac_offset = 0x7c;
11969 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) ||
11970 (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) {
11971 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID)
11972 mac_offset = 0xcc;
11973 if (tg3_nvram_lock(tp))
11974 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET);
11975 else
11976 tg3_nvram_unlock(tp);
11978 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
11979 mac_offset = 0x10;
11981 /* First try to get it from MAC address mailbox. */
11982 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
11983 if ((hi >> 16) == 0x484b) {
11984 dev->dev_addr[0] = (hi >> 8) & 0xff;
11985 dev->dev_addr[1] = (hi >> 0) & 0xff;
11987 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
11988 dev->dev_addr[2] = (lo >> 24) & 0xff;
11989 dev->dev_addr[3] = (lo >> 16) & 0xff;
11990 dev->dev_addr[4] = (lo >> 8) & 0xff;
11991 dev->dev_addr[5] = (lo >> 0) & 0xff;
11993 /* Some old bootcode may report a 0 MAC address in SRAM */
11994 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
11996 if (!addr_ok) {
11997 /* Next, try NVRAM. */
11998 if (!tg3_nvram_read(tp, mac_offset + 0, &hi) &&
11999 !tg3_nvram_read(tp, mac_offset + 4, &lo)) {
12000 dev->dev_addr[0] = ((hi >> 16) & 0xff);
12001 dev->dev_addr[1] = ((hi >> 24) & 0xff);
12002 dev->dev_addr[2] = ((lo >> 0) & 0xff);
12003 dev->dev_addr[3] = ((lo >> 8) & 0xff);
12004 dev->dev_addr[4] = ((lo >> 16) & 0xff);
12005 dev->dev_addr[5] = ((lo >> 24) & 0xff);
12007 /* Finally just fetch it out of the MAC control regs. */
12008 else {
12009 hi = tr32(MAC_ADDR_0_HIGH);
12010 lo = tr32(MAC_ADDR_0_LOW);
12012 dev->dev_addr[5] = lo & 0xff;
12013 dev->dev_addr[4] = (lo >> 8) & 0xff;
12014 dev->dev_addr[3] = (lo >> 16) & 0xff;
12015 dev->dev_addr[2] = (lo >> 24) & 0xff;
12016 dev->dev_addr[1] = hi & 0xff;
12017 dev->dev_addr[0] = (hi >> 8) & 0xff;
12021 if (!is_valid_ether_addr(&dev->dev_addr[0])) {
12022 #ifdef CONFIG_SPARC
12023 if (!tg3_get_default_macaddr_sparc(tp))
12024 return 0;
12025 #endif
12026 return -EINVAL;
12028 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
12029 return 0;
12032 #define BOUNDARY_SINGLE_CACHELINE 1
12033 #define BOUNDARY_MULTI_CACHELINE 2
12035 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
12037 int cacheline_size;
12038 u8 byte;
12039 int goal;
12041 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
12042 if (byte == 0)
12043 cacheline_size = 1024;
12044 else
12045 cacheline_size = (int) byte * 4;
12047 /* On 5703 and later chips, the boundary bits have no
12048 * effect.
12050 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
12051 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 &&
12052 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS))
12053 goto out;
12055 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
12056 goal = BOUNDARY_MULTI_CACHELINE;
12057 #else
12058 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
12059 goal = BOUNDARY_SINGLE_CACHELINE;
12060 #else
12061 goal = 0;
12062 #endif
12063 #endif
12065 if (!goal)
12066 goto out;
12068 /* PCI controllers on most RISC systems tend to disconnect
12069 * when a device tries to burst across a cache-line boundary.
12070 * Therefore, letting tg3 do so just wastes PCI bandwidth.
12072 * Unfortunately, for PCI-E there are only limited
12073 * write-side controls for this, and thus for reads
12074 * we will still get the disconnects. We'll also waste
12075 * these PCI cycles for both read and write for chips
12076 * other than 5700 and 5701 which do not implement the
12077 * boundary bits.
12079 if ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) &&
12080 !(tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS)) {
12081 switch (cacheline_size) {
12082 case 16:
12083 case 32:
12084 case 64:
12085 case 128:
12086 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12087 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX |
12088 DMA_RWCTRL_WRITE_BNDRY_128_PCIX);
12089 } else {
12090 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
12091 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
12093 break;
12095 case 256:
12096 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX |
12097 DMA_RWCTRL_WRITE_BNDRY_256_PCIX);
12098 break;
12100 default:
12101 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX |
12102 DMA_RWCTRL_WRITE_BNDRY_384_PCIX);
12103 break;
12105 } else if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
12106 switch (cacheline_size) {
12107 case 16:
12108 case 32:
12109 case 64:
12110 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12111 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
12112 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE;
12113 break;
12115 /* fallthrough */
12116 case 128:
12117 default:
12118 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE;
12119 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE;
12120 break;
12122 } else {
12123 switch (cacheline_size) {
12124 case 16:
12125 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12126 val |= (DMA_RWCTRL_READ_BNDRY_16 |
12127 DMA_RWCTRL_WRITE_BNDRY_16);
12128 break;
12130 /* fallthrough */
12131 case 32:
12132 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12133 val |= (DMA_RWCTRL_READ_BNDRY_32 |
12134 DMA_RWCTRL_WRITE_BNDRY_32);
12135 break;
12137 /* fallthrough */
12138 case 64:
12139 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12140 val |= (DMA_RWCTRL_READ_BNDRY_64 |
12141 DMA_RWCTRL_WRITE_BNDRY_64);
12142 break;
12144 /* fallthrough */
12145 case 128:
12146 if (goal == BOUNDARY_SINGLE_CACHELINE) {
12147 val |= (DMA_RWCTRL_READ_BNDRY_128 |
12148 DMA_RWCTRL_WRITE_BNDRY_128);
12149 break;
12151 /* fallthrough */
12152 case 256:
12153 val |= (DMA_RWCTRL_READ_BNDRY_256 |
12154 DMA_RWCTRL_WRITE_BNDRY_256);
12155 break;
12156 case 512:
12157 val |= (DMA_RWCTRL_READ_BNDRY_512 |
12158 DMA_RWCTRL_WRITE_BNDRY_512);
12159 break;
12160 case 1024:
12161 default:
12162 val |= (DMA_RWCTRL_READ_BNDRY_1024 |
12163 DMA_RWCTRL_WRITE_BNDRY_1024);
12164 break;
12168 out:
12169 return val;
12172 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
12174 struct tg3_internal_buffer_desc test_desc;
12175 u32 sram_dma_descs;
12176 int i, ret;
12178 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
12180 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0);
12181 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0);
12182 tw32(RDMAC_STATUS, 0);
12183 tw32(WDMAC_STATUS, 0);
12185 tw32(BUFMGR_MODE, 0);
12186 tw32(FTQ_RESET, 0);
12188 test_desc.addr_hi = ((u64) buf_dma) >> 32;
12189 test_desc.addr_lo = buf_dma & 0xffffffff;
12190 test_desc.nic_mbuf = 0x00002100;
12191 test_desc.len = size;
12194 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
12195 * the *second* time the tg3 driver was getting loaded after an
12196 * initial scan.
12198 * Broadcom tells me:
12199 * ...the DMA engine is connected to the GRC block and a DMA
12200 * reset may affect the GRC block in some unpredictable way...
12201 * The behavior of resets to individual blocks has not been tested.
12203 * Broadcom noted the GRC reset will also reset all sub-components.
12205 if (to_device) {
12206 test_desc.cqid_sqid = (13 << 8) | 2;
12208 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE);
12209 udelay(40);
12210 } else {
12211 test_desc.cqid_sqid = (16 << 8) | 7;
12213 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE);
12214 udelay(40);
12216 test_desc.flags = 0x00000005;
12218 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
12219 u32 val;
12221 val = *(((u32 *)&test_desc) + i);
12222 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
12223 sram_dma_descs + (i * sizeof(u32)));
12224 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
12226 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
12228 if (to_device) {
12229 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
12230 } else {
12231 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
12234 ret = -ENODEV;
12235 for (i = 0; i < 40; i++) {
12236 u32 val;
12238 if (to_device)
12239 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ);
12240 else
12241 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ);
12242 if ((val & 0xffff) == sram_dma_descs) {
12243 ret = 0;
12244 break;
12247 udelay(100);
12250 return ret;
12253 #define TEST_BUFFER_SIZE 0x2000
12255 static int __devinit tg3_test_dma(struct tg3 *tp)
12257 dma_addr_t buf_dma;
12258 u32 *buf, saved_dma_rwctrl;
12259 int ret;
12261 buf = pci_alloc_consistent(tp->pdev, TEST_BUFFER_SIZE, &buf_dma);
12262 if (!buf) {
12263 ret = -ENOMEM;
12264 goto out_nofree;
12267 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
12268 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT));
12270 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
12272 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
12273 /* DMA read watermark not used on PCIE */
12274 tp->dma_rwctrl |= 0x00180000;
12275 } else if (!(tp->tg3_flags & TG3_FLAG_PCIX_MODE)) {
12276 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
12277 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
12278 tp->dma_rwctrl |= 0x003f0000;
12279 else
12280 tp->dma_rwctrl |= 0x003f000f;
12281 } else {
12282 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
12283 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
12284 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
12285 u32 read_water = 0x7;
12287 /* If the 5704 is behind the EPB bridge, we can
12288 * do the less restrictive ONE_DMA workaround for
12289 * better performance.
12291 if ((tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) &&
12292 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
12293 tp->dma_rwctrl |= 0x8000;
12294 else if (ccval == 0x6 || ccval == 0x7)
12295 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA;
12297 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703)
12298 read_water = 4;
12299 /* Set bit 23 to enable PCIX hw bug fix */
12300 tp->dma_rwctrl |=
12301 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
12302 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
12303 (1 << 23);
12304 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
12305 /* 5780 always in PCIX mode */
12306 tp->dma_rwctrl |= 0x00144000;
12307 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
12308 /* 5714 always in PCIX mode */
12309 tp->dma_rwctrl |= 0x00148000;
12310 } else {
12311 tp->dma_rwctrl |= 0x001b000f;
12315 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 ||
12316 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704)
12317 tp->dma_rwctrl &= 0xfffffff0;
12319 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
12320 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
12321 /* Remove this if it causes problems for some boards. */
12322 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT;
12324 /* On 5700/5701 chips, we need to set this bit.
12325 * Otherwise the chip will issue cacheline transactions
12326 * to streamable DMA memory with not all the byte
12327 * enables turned on. This is an error on several
12328 * RISC PCI controllers, in particular sparc64.
12330 * On 5703/5704 chips, this bit has been reassigned
12331 * a different meaning. In particular, it is used
12332 * on those chips to enable a PCI-X workaround.
12334 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE;
12337 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
12339 #if 0
12340 /* Unneeded, already done by tg3_get_invariants. */
12341 tg3_switch_clocks(tp);
12342 #endif
12344 ret = 0;
12345 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
12346 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701)
12347 goto out;
12349 /* It is best to perform DMA test with maximum write burst size
12350 * to expose the 5700/5701 write DMA bug.
12352 saved_dma_rwctrl = tp->dma_rwctrl;
12353 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
12354 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
12356 while (1) {
12357 u32 *p = buf, i;
12359 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
12360 p[i] = i;
12362 /* Send the buffer to the chip. */
12363 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
12364 if (ret) {
12365 printk(KERN_ERR "tg3_test_dma() Write the buffer failed %d\n", ret);
12366 break;
12369 #if 0
12370 /* validate data reached card RAM correctly. */
12371 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
12372 u32 val;
12373 tg3_read_mem(tp, 0x2100 + (i*4), &val);
12374 if (le32_to_cpu(val) != p[i]) {
12375 printk(KERN_ERR " tg3_test_dma() Card buffer corrupted on write! (%d != %d)\n", val, i);
12376 /* ret = -ENODEV here? */
12378 p[i] = 0;
12380 #endif
12381 /* Now read it back. */
12382 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
12383 if (ret) {
12384 printk(KERN_ERR "tg3_test_dma() Read the buffer failed %d\n", ret);
12386 break;
12389 /* Verify it. */
12390 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
12391 if (p[i] == i)
12392 continue;
12394 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
12395 DMA_RWCTRL_WRITE_BNDRY_16) {
12396 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
12397 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
12398 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
12399 break;
12400 } else {
12401 printk(KERN_ERR "tg3_test_dma() buffer corrupted on read back! (%d != %d)\n", p[i], i);
12402 ret = -ENODEV;
12403 goto out;
12407 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
12408 /* Success. */
12409 ret = 0;
12410 break;
12413 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) !=
12414 DMA_RWCTRL_WRITE_BNDRY_16) {
12415 static struct pci_device_id dma_wait_state_chipsets[] = {
12416 { PCI_DEVICE(PCI_VENDOR_ID_APPLE,
12417 PCI_DEVICE_ID_APPLE_UNI_N_PCI15) },
12418 { },
12421 /* DMA test passed without adjusting DMA boundary,
12422 * now look for chipsets that are known to expose the
12423 * DMA bug without failing the test.
12425 if (pci_dev_present(dma_wait_state_chipsets)) {
12426 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK;
12427 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16;
12429 else
12430 /* Safe to use the calculated DMA boundary. */
12431 tp->dma_rwctrl = saved_dma_rwctrl;
12433 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl);
12436 out:
12437 pci_free_consistent(tp->pdev, TEST_BUFFER_SIZE, buf, buf_dma);
12438 out_nofree:
12439 return ret;
12442 static void __devinit tg3_init_link_config(struct tg3 *tp)
12444 tp->link_config.advertising =
12445 (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
12446 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
12447 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full |
12448 ADVERTISED_Autoneg | ADVERTISED_MII);
12449 tp->link_config.speed = SPEED_INVALID;
12450 tp->link_config.duplex = DUPLEX_INVALID;
12451 tp->link_config.autoneg = AUTONEG_ENABLE;
12452 tp->link_config.active_speed = SPEED_INVALID;
12453 tp->link_config.active_duplex = DUPLEX_INVALID;
12454 tp->link_config.phy_is_low_power = 0;
12455 tp->link_config.orig_speed = SPEED_INVALID;
12456 tp->link_config.orig_duplex = DUPLEX_INVALID;
12457 tp->link_config.orig_autoneg = AUTONEG_INVALID;
12460 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
12462 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
12463 tp->bufmgr_config.mbuf_read_dma_low_water =
12464 DEFAULT_MB_RDMA_LOW_WATER_5705;
12465 tp->bufmgr_config.mbuf_mac_rx_low_water =
12466 DEFAULT_MB_MACRX_LOW_WATER_5705;
12467 tp->bufmgr_config.mbuf_high_water =
12468 DEFAULT_MB_HIGH_WATER_5705;
12469 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
12470 tp->bufmgr_config.mbuf_mac_rx_low_water =
12471 DEFAULT_MB_MACRX_LOW_WATER_5906;
12472 tp->bufmgr_config.mbuf_high_water =
12473 DEFAULT_MB_HIGH_WATER_5906;
12476 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
12477 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780;
12478 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
12479 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780;
12480 tp->bufmgr_config.mbuf_high_water_jumbo =
12481 DEFAULT_MB_HIGH_WATER_JUMBO_5780;
12482 } else {
12483 tp->bufmgr_config.mbuf_read_dma_low_water =
12484 DEFAULT_MB_RDMA_LOW_WATER;
12485 tp->bufmgr_config.mbuf_mac_rx_low_water =
12486 DEFAULT_MB_MACRX_LOW_WATER;
12487 tp->bufmgr_config.mbuf_high_water =
12488 DEFAULT_MB_HIGH_WATER;
12490 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
12491 DEFAULT_MB_RDMA_LOW_WATER_JUMBO;
12492 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
12493 DEFAULT_MB_MACRX_LOW_WATER_JUMBO;
12494 tp->bufmgr_config.mbuf_high_water_jumbo =
12495 DEFAULT_MB_HIGH_WATER_JUMBO;
12498 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
12499 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
12502 static char * __devinit tg3_phy_string(struct tg3 *tp)
12504 switch (tp->phy_id & PHY_ID_MASK) {
12505 case PHY_ID_BCM5400: return "5400";
12506 case PHY_ID_BCM5401: return "5401";
12507 case PHY_ID_BCM5411: return "5411";
12508 case PHY_ID_BCM5701: return "5701";
12509 case PHY_ID_BCM5703: return "5703";
12510 case PHY_ID_BCM5704: return "5704";
12511 case PHY_ID_BCM5705: return "5705";
12512 case PHY_ID_BCM5750: return "5750";
12513 case PHY_ID_BCM5752: return "5752";
12514 case PHY_ID_BCM5714: return "5714";
12515 case PHY_ID_BCM5780: return "5780";
12516 case PHY_ID_BCM5755: return "5755";
12517 case PHY_ID_BCM5787: return "5787";
12518 case PHY_ID_BCM5784: return "5784";
12519 case PHY_ID_BCM5756: return "5722/5756";
12520 case PHY_ID_BCM5906: return "5906";
12521 case PHY_ID_BCM5761: return "5761";
12522 case PHY_ID_BCM8002: return "8002/serdes";
12523 case 0: return "serdes";
12524 default: return "unknown";
12528 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
12530 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
12531 strcpy(str, "PCI Express");
12532 return str;
12533 } else if (tp->tg3_flags & TG3_FLAG_PCIX_MODE) {
12534 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
12536 strcpy(str, "PCIX:");
12538 if ((clock_ctrl == 7) ||
12539 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
12540 GRC_MISC_CFG_BOARD_ID_5704CIOBE))
12541 strcat(str, "133MHz");
12542 else if (clock_ctrl == 0)
12543 strcat(str, "33MHz");
12544 else if (clock_ctrl == 2)
12545 strcat(str, "50MHz");
12546 else if (clock_ctrl == 4)
12547 strcat(str, "66MHz");
12548 else if (clock_ctrl == 6)
12549 strcat(str, "100MHz");
12550 } else {
12551 strcpy(str, "PCI:");
12552 if (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED)
12553 strcat(str, "66MHz");
12554 else
12555 strcat(str, "33MHz");
12557 if (tp->tg3_flags & TG3_FLAG_PCI_32BIT)
12558 strcat(str, ":32-bit");
12559 else
12560 strcat(str, ":64-bit");
12561 return str;
12564 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
12566 struct pci_dev *peer;
12567 unsigned int func, devnr = tp->pdev->devfn & ~7;
12569 for (func = 0; func < 8; func++) {
12570 peer = pci_get_slot(tp->pdev->bus, devnr | func);
12571 if (peer && peer != tp->pdev)
12572 break;
12573 pci_dev_put(peer);
12575 /* 5704 can be configured in single-port mode, set peer to
12576 * tp->pdev in that case.
12578 if (!peer) {
12579 peer = tp->pdev;
12580 return peer;
12584 * We don't need to keep the refcount elevated; there's no way
12585 * to remove one half of this device without removing the other
12587 pci_dev_put(peer);
12589 return peer;
12592 static void __devinit tg3_init_coal(struct tg3 *tp)
12594 struct ethtool_coalesce *ec = &tp->coal;
12596 memset(ec, 0, sizeof(*ec));
12597 ec->cmd = ETHTOOL_GCOALESCE;
12598 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS;
12599 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS;
12600 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES;
12601 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES;
12602 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT;
12603 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT;
12604 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT;
12605 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT;
12606 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS;
12608 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD |
12609 HOSTCC_MODE_CLRTICK_TXBD)) {
12610 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS;
12611 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS;
12612 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS;
12613 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS;
12616 if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) {
12617 ec->rx_coalesce_usecs_irq = 0;
12618 ec->tx_coalesce_usecs_irq = 0;
12619 ec->stats_block_coalesce_usecs = 0;
12623 static int __devinit tg3_init_one(struct pci_dev *pdev,
12624 const struct pci_device_id *ent)
12626 static int tg3_version_printed = 0;
12627 resource_size_t tg3reg_base;
12628 unsigned long tg3reg_len;
12629 struct net_device *dev;
12630 struct tg3 *tp;
12631 int err, pm_cap;
12632 char str[40];
12633 u64 dma_mask, persist_dma_mask;
12634 DECLARE_MAC_BUF(mac);
12636 if (tg3_version_printed++ == 0)
12637 printk(KERN_INFO "%s", version);
12639 err = pci_enable_device(pdev);
12640 if (err) {
12641 printk(KERN_ERR PFX "Cannot enable PCI device, "
12642 "aborting.\n");
12643 return err;
12646 if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
12647 printk(KERN_ERR PFX "Cannot find proper PCI device "
12648 "base address, aborting.\n");
12649 err = -ENODEV;
12650 goto err_out_disable_pdev;
12653 err = pci_request_regions(pdev, DRV_MODULE_NAME);
12654 if (err) {
12655 printk(KERN_ERR PFX "Cannot obtain PCI resources, "
12656 "aborting.\n");
12657 goto err_out_disable_pdev;
12660 pci_set_master(pdev);
12662 /* Find power-management capability. */
12663 pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
12664 if (pm_cap == 0) {
12665 printk(KERN_ERR PFX "Cannot find PowerManagement capability, "
12666 "aborting.\n");
12667 err = -EIO;
12668 goto err_out_free_res;
12671 tg3reg_base = pci_resource_start(pdev, 0);
12672 tg3reg_len = pci_resource_len(pdev, 0);
12674 dev = alloc_etherdev(sizeof(*tp));
12675 if (!dev) {
12676 printk(KERN_ERR PFX "Etherdev alloc failed, aborting.\n");
12677 err = -ENOMEM;
12678 goto err_out_free_res;
12681 SET_NETDEV_DEV(dev, &pdev->dev);
12683 #if TG3_VLAN_TAG_USED
12684 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
12685 dev->vlan_rx_register = tg3_vlan_rx_register;
12686 #endif
12688 tp = netdev_priv(dev);
12689 tp->pdev = pdev;
12690 tp->dev = dev;
12691 tp->pm_cap = pm_cap;
12692 tp->mac_mode = TG3_DEF_MAC_MODE;
12693 tp->rx_mode = TG3_DEF_RX_MODE;
12694 tp->tx_mode = TG3_DEF_TX_MODE;
12695 tp->mi_mode = MAC_MI_MODE_BASE;
12696 if (tg3_debug > 0)
12697 tp->msg_enable = tg3_debug;
12698 else
12699 tp->msg_enable = TG3_DEF_MSG_ENABLE;
12701 /* The word/byte swap controls here control register access byte
12702 * swapping. DMA data byte swapping is controlled in the GRC_MODE
12703 * setting below.
12705 tp->misc_host_ctrl =
12706 MISC_HOST_CTRL_MASK_PCI_INT |
12707 MISC_HOST_CTRL_WORD_SWAP |
12708 MISC_HOST_CTRL_INDIR_ACCESS |
12709 MISC_HOST_CTRL_PCISTATE_RW;
12711 /* The NONFRM (non-frame) byte/word swap controls take effect
12712 * on descriptor entries, anything which isn't packet data.
12714 * The StrongARM chips on the board (one for tx, one for rx)
12715 * are running in big-endian mode.
12717 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA |
12718 GRC_MODE_WSWAP_NONFRM_DATA);
12719 #ifdef __BIG_ENDIAN
12720 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
12721 #endif
12722 spin_lock_init(&tp->lock);
12723 spin_lock_init(&tp->indirect_lock);
12724 INIT_WORK(&tp->reset_task, tg3_reset_task);
12726 tp->regs = ioremap_nocache(tg3reg_base, tg3reg_len);
12727 if (!tp->regs) {
12728 printk(KERN_ERR PFX "Cannot map device registers, "
12729 "aborting.\n");
12730 err = -ENOMEM;
12731 goto err_out_free_dev;
12734 tg3_init_link_config(tp);
12736 tp->rx_pending = TG3_DEF_RX_RING_PENDING;
12737 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING;
12738 tp->tx_pending = TG3_DEF_TX_RING_PENDING;
12740 dev->open = tg3_open;
12741 dev->stop = tg3_close;
12742 dev->get_stats = tg3_get_stats;
12743 dev->set_multicast_list = tg3_set_rx_mode;
12744 dev->set_mac_address = tg3_set_mac_addr;
12745 dev->do_ioctl = tg3_ioctl;
12746 dev->tx_timeout = tg3_tx_timeout;
12747 netif_napi_add(dev, &tp->napi, tg3_poll, 64);
12748 dev->ethtool_ops = &tg3_ethtool_ops;
12749 dev->watchdog_timeo = TG3_TX_TIMEOUT;
12750 dev->change_mtu = tg3_change_mtu;
12751 dev->irq = pdev->irq;
12752 #ifdef CONFIG_NET_POLL_CONTROLLER
12753 dev->poll_controller = tg3_poll_controller;
12754 #endif
12756 err = tg3_get_invariants(tp);
12757 if (err) {
12758 printk(KERN_ERR PFX "Problem fetching invariants of chip, "
12759 "aborting.\n");
12760 goto err_out_iounmap;
12763 /* The EPB bridge inside 5714, 5715, and 5780 and any
12764 * device behind the EPB cannot support DMA addresses > 40-bit.
12765 * On 64-bit systems with IOMMU, use 40-bit dma_mask.
12766 * On 64-bit systems without IOMMU, use 64-bit dma_mask and
12767 * do DMA address check in tg3_start_xmit().
12769 if (tp->tg3_flags2 & TG3_FLG2_IS_5788)
12770 persist_dma_mask = dma_mask = DMA_32BIT_MASK;
12771 else if (tp->tg3_flags & TG3_FLAG_40BIT_DMA_BUG) {
12772 persist_dma_mask = dma_mask = DMA_40BIT_MASK;
12773 #ifdef CONFIG_HIGHMEM
12774 dma_mask = DMA_64BIT_MASK;
12775 #endif
12776 } else
12777 persist_dma_mask = dma_mask = DMA_64BIT_MASK;
12779 /* Configure DMA attributes. */
12780 if (dma_mask > DMA_32BIT_MASK) {
12781 err = pci_set_dma_mask(pdev, dma_mask);
12782 if (!err) {
12783 dev->features |= NETIF_F_HIGHDMA;
12784 err = pci_set_consistent_dma_mask(pdev,
12785 persist_dma_mask);
12786 if (err < 0) {
12787 printk(KERN_ERR PFX "Unable to obtain 64 bit "
12788 "DMA for consistent allocations\n");
12789 goto err_out_iounmap;
12793 if (err || dma_mask == DMA_32BIT_MASK) {
12794 err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
12795 if (err) {
12796 printk(KERN_ERR PFX "No usable DMA configuration, "
12797 "aborting.\n");
12798 goto err_out_iounmap;
12802 tg3_init_bufmgr_config(tp);
12804 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
12805 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
12807 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
12808 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
12809 tp->pci_chip_rev_id == CHIPREV_ID_5705_A0 ||
12810 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 ||
12811 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
12812 tp->tg3_flags2 &= ~TG3_FLG2_TSO_CAPABLE;
12813 } else {
12814 tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE | TG3_FLG2_TSO_BUG;
12817 /* TSO is on by default on chips that support hardware TSO.
12818 * Firmware TSO on older chips gives lower performance, so it
12819 * is off by default, but can be enabled using ethtool.
12821 if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
12822 dev->features |= NETIF_F_TSO;
12823 if ((tp->tg3_flags2 & TG3_FLG2_HW_TSO_2) &&
12824 (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5906))
12825 dev->features |= NETIF_F_TSO6;
12826 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
12827 dev->features |= NETIF_F_TSO_ECN;
12831 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
12832 !(tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) &&
12833 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
12834 tp->tg3_flags2 |= TG3_FLG2_MAX_RXPEND_64;
12835 tp->rx_pending = 63;
12838 err = tg3_get_device_address(tp);
12839 if (err) {
12840 printk(KERN_ERR PFX "Could not obtain valid ethernet address, "
12841 "aborting.\n");
12842 goto err_out_iounmap;
12845 if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) {
12846 if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) {
12847 printk(KERN_ERR PFX "Cannot find proper PCI device "
12848 "base address for APE, aborting.\n");
12849 err = -ENODEV;
12850 goto err_out_iounmap;
12853 tg3reg_base = pci_resource_start(pdev, 2);
12854 tg3reg_len = pci_resource_len(pdev, 2);
12856 tp->aperegs = ioremap_nocache(tg3reg_base, tg3reg_len);
12857 if (!tp->aperegs) {
12858 printk(KERN_ERR PFX "Cannot map APE registers, "
12859 "aborting.\n");
12860 err = -ENOMEM;
12861 goto err_out_iounmap;
12864 tg3_ape_lock_init(tp);
12868 * Reset chip in case UNDI or EFI driver did not shutdown
12869 * DMA self test will enable WDMAC and we'll see (spurious)
12870 * pending DMA on the PCI bus at that point.
12872 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
12873 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
12874 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE);
12875 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12878 err = tg3_test_dma(tp);
12879 if (err) {
12880 printk(KERN_ERR PFX "DMA engine test failed, aborting.\n");
12881 goto err_out_apeunmap;
12884 /* Tigon3 can do ipv4 only... and some chips have buggy
12885 * checksumming.
12887 if ((tp->tg3_flags & TG3_FLAG_BROKEN_CHECKSUMS) == 0) {
12888 dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
12889 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
12890 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
12891 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 ||
12892 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
12893 dev->features |= NETIF_F_IPV6_CSUM;
12895 tp->tg3_flags |= TG3_FLAG_RX_CHECKSUMS;
12896 } else
12897 tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS;
12899 /* flow control autonegotiation is default behavior */
12900 tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG;
12901 tp->link_config.flowctrl = TG3_FLOW_CTRL_TX | TG3_FLOW_CTRL_RX;
12903 tg3_init_coal(tp);
12905 pci_set_drvdata(pdev, dev);
12907 err = register_netdev(dev);
12908 if (err) {
12909 printk(KERN_ERR PFX "Cannot register net device, "
12910 "aborting.\n");
12911 goto err_out_apeunmap;
12914 printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] "
12915 "(%s) %s Ethernet %s\n",
12916 dev->name,
12917 tp->board_part_number,
12918 tp->pci_chip_rev_id,
12919 tg3_phy_string(tp),
12920 tg3_bus_string(tp, str),
12921 ((tp->tg3_flags & TG3_FLAG_10_100_ONLY) ? "10/100Base-TX" :
12922 ((tp->tg3_flags2 & TG3_FLG2_ANY_SERDES) ? "1000Base-SX" :
12923 "10/100/1000Base-T")),
12924 print_mac(mac, dev->dev_addr));
12926 printk(KERN_INFO "%s: RXcsums[%d] LinkChgREG[%d] "
12927 "MIirq[%d] ASF[%d] WireSpeed[%d] TSOcap[%d]\n",
12928 dev->name,
12929 (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0,
12930 (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) != 0,
12931 (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) != 0,
12932 (tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0,
12933 (tp->tg3_flags2 & TG3_FLG2_NO_ETH_WIRE_SPEED) == 0,
12934 (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) != 0);
12935 printk(KERN_INFO "%s: dma_rwctrl[%08x] dma_mask[%d-bit]\n",
12936 dev->name, tp->dma_rwctrl,
12937 (pdev->dma_mask == DMA_32BIT_MASK) ? 32 :
12938 (((u64) pdev->dma_mask == DMA_40BIT_MASK) ? 40 : 64));
12940 return 0;
12942 err_out_apeunmap:
12943 if (tp->aperegs) {
12944 iounmap(tp->aperegs);
12945 tp->aperegs = NULL;
12948 err_out_iounmap:
12949 if (tp->regs) {
12950 iounmap(tp->regs);
12951 tp->regs = NULL;
12954 err_out_free_dev:
12955 free_netdev(dev);
12957 err_out_free_res:
12958 pci_release_regions(pdev);
12960 err_out_disable_pdev:
12961 pci_disable_device(pdev);
12962 pci_set_drvdata(pdev, NULL);
12963 return err;
12966 static void __devexit tg3_remove_one(struct pci_dev *pdev)
12968 struct net_device *dev = pci_get_drvdata(pdev);
12970 if (dev) {
12971 struct tg3 *tp = netdev_priv(dev);
12973 flush_scheduled_work();
12974 unregister_netdev(dev);
12975 if (tp->aperegs) {
12976 iounmap(tp->aperegs);
12977 tp->aperegs = NULL;
12979 if (tp->regs) {
12980 iounmap(tp->regs);
12981 tp->regs = NULL;
12983 free_netdev(dev);
12984 pci_release_regions(pdev);
12985 pci_disable_device(pdev);
12986 pci_set_drvdata(pdev, NULL);
12990 static int tg3_suspend(struct pci_dev *pdev, pm_message_t state)
12992 struct net_device *dev = pci_get_drvdata(pdev);
12993 struct tg3 *tp = netdev_priv(dev);
12994 int err;
12996 /* PCI register 4 needs to be saved whether netif_running() or not.
12997 * MSI address and data need to be saved if using MSI and
12998 * netif_running().
13000 pci_save_state(pdev);
13002 if (!netif_running(dev))
13003 return 0;
13005 flush_scheduled_work();
13006 tg3_netif_stop(tp);
13008 del_timer_sync(&tp->timer);
13010 tg3_full_lock(tp, 1);
13011 tg3_disable_ints(tp);
13012 tg3_full_unlock(tp);
13014 netif_device_detach(dev);
13016 tg3_full_lock(tp, 0);
13017 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
13018 tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE;
13019 tg3_full_unlock(tp);
13021 err = tg3_set_power_state(tp, pci_choose_state(pdev, state));
13022 if (err) {
13023 tg3_full_lock(tp, 0);
13025 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
13026 if (tg3_restart_hw(tp, 1))
13027 goto out;
13029 tp->timer.expires = jiffies + tp->timer_offset;
13030 add_timer(&tp->timer);
13032 netif_device_attach(dev);
13033 tg3_netif_start(tp);
13035 out:
13036 tg3_full_unlock(tp);
13039 return err;
13042 static int tg3_resume(struct pci_dev *pdev)
13044 struct net_device *dev = pci_get_drvdata(pdev);
13045 struct tg3 *tp = netdev_priv(dev);
13046 int err;
13048 pci_restore_state(tp->pdev);
13050 if (!netif_running(dev))
13051 return 0;
13053 err = tg3_set_power_state(tp, PCI_D0);
13054 if (err)
13055 return err;
13057 netif_device_attach(dev);
13059 tg3_full_lock(tp, 0);
13061 tp->tg3_flags |= TG3_FLAG_INIT_COMPLETE;
13062 err = tg3_restart_hw(tp, 1);
13063 if (err)
13064 goto out;
13066 tp->timer.expires = jiffies + tp->timer_offset;
13067 add_timer(&tp->timer);
13069 tg3_netif_start(tp);
13071 out:
13072 tg3_full_unlock(tp);
13074 return err;
13077 static struct pci_driver tg3_driver = {
13078 .name = DRV_MODULE_NAME,
13079 .id_table = tg3_pci_tbl,
13080 .probe = tg3_init_one,
13081 .remove = __devexit_p(tg3_remove_one),
13082 .suspend = tg3_suspend,
13083 .resume = tg3_resume
13086 static int __init tg3_init(void)
13088 return pci_register_driver(&tg3_driver);
13091 static void __exit tg3_cleanup(void)
13093 pci_unregister_driver(&tg3_driver);
13096 module_init(tg3_init);
13097 module_exit(tg3_cleanup);