Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
tg3.c
Go to the documentation of this file.
1 /*
2  * tg3.c: Broadcom Tigon3 ethernet driver.
3  *
4  * Copyright (C) 2001, 2002, 2003, 2004 David S. Miller ([email protected])
5  * Copyright (C) 2001, 2002, 2003 Jeff Garzik ([email protected])
6  * Copyright (C) 2004 Sun Microsystems Inc.
7  * Copyright (C) 2005-2012 Broadcom Corporation.
8  *
9  * Firmware is:
10  * Derived from proprietary unpublished source code,
11  * Copyright (C) 2000-2003 Broadcom Corporation.
12  *
13  * Permission is hereby granted for the distribution of this firmware
14  * data in hexadecimal or equivalent format, provided this copyright
15  * notice is accompanying it.
16  */
17 
18 
19 #include <linux/module.h>
20 #include <linux/moduleparam.h>
21 #include <linux/stringify.h>
22 #include <linux/kernel.h>
23 #include <linux/types.h>
24 #include <linux/compiler.h>
25 #include <linux/slab.h>
26 #include <linux/delay.h>
27 #include <linux/in.h>
28 #include <linux/init.h>
29 #include <linux/interrupt.h>
30 #include <linux/ioport.h>
31 #include <linux/pci.h>
32 #include <linux/netdevice.h>
33 #include <linux/etherdevice.h>
34 #include <linux/skbuff.h>
35 #include <linux/ethtool.h>
36 #include <linux/mdio.h>
37 #include <linux/mii.h>
38 #include <linux/phy.h>
39 #include <linux/brcmphy.h>
40 #include <linux/if_vlan.h>
41 #include <linux/ip.h>
42 #include <linux/tcp.h>
43 #include <linux/workqueue.h>
44 #include <linux/prefetch.h>
45 #include <linux/dma-mapping.h>
46 #include <linux/firmware.h>
47 #include <linux/hwmon.h>
48 #include <linux/hwmon-sysfs.h>
49 
50 #include <net/checksum.h>
51 #include <net/ip.h>
52 
53 #include <linux/io.h>
54 #include <asm/byteorder.h>
55 #include <linux/uaccess.h>
56 
57 #ifdef CONFIG_SPARC
58 #include <asm/idprom.h>
59 #include <asm/prom.h>
60 #endif
61 
62 #define BAR_0 0
63 #define BAR_2 2
64 
65 #include "tg3.h"
66 
67 /* Functions & macros to verify TG3_FLAGS types */
68 
69 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
70 {
71  return test_bit(flag, bits);
72 }
73 
74 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
75 {
76  set_bit(flag, bits);
77 }
78 
79 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
80 {
81  clear_bit(flag, bits);
82 }
83 
84 #define tg3_flag(tp, flag) \
85  _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags)
86 #define tg3_flag_set(tp, flag) \
87  _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags)
88 #define tg3_flag_clear(tp, flag) \
89  _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags)
90 
91 #define DRV_MODULE_NAME "tg3"
92 #define TG3_MAJ_NUM 3
93 #define TG3_MIN_NUM 125
94 #define DRV_MODULE_VERSION \
95  __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM)
96 #define DRV_MODULE_RELDATE "September 26, 2012"
97 
98 #define RESET_KIND_SHUTDOWN 0
99 #define RESET_KIND_INIT 1
100 #define RESET_KIND_SUSPEND 2
101 
102 #define TG3_DEF_RX_MODE 0
103 #define TG3_DEF_TX_MODE 0
104 #define TG3_DEF_MSG_ENABLE \
105  (NETIF_MSG_DRV | \
106  NETIF_MSG_PROBE | \
107  NETIF_MSG_LINK | \
108  NETIF_MSG_TIMER | \
109  NETIF_MSG_IFDOWN | \
110  NETIF_MSG_IFUP | \
111  NETIF_MSG_RX_ERR | \
112  NETIF_MSG_TX_ERR)
113 
114 #define TG3_GRC_LCLCTL_PWRSW_DELAY 100
115 
116 /* length of time before we decide the hardware is borked,
117  * and dev->tx_timeout() should be called to fix the problem
118  */
119 
120 #define TG3_TX_TIMEOUT (5 * HZ)
121 
122 /* hardware minimum and maximum for a single frame's data payload */
123 #define TG3_MIN_MTU 60
124 #define TG3_MAX_MTU(tp) \
125  (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500)
126 
127 /* These numbers seem to be hard coded in the NIC firmware somehow.
128  * You can't change the ring sizes, but you can change where you place
129  * them in the NIC onboard memory.
130  */
131 #define TG3_RX_STD_RING_SIZE(tp) \
132  (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
133  TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700)
134 #define TG3_DEF_RX_RING_PENDING 200
135 #define TG3_RX_JMB_RING_SIZE(tp) \
136  (tg3_flag(tp, LRG_PROD_RING_CAP) ? \
137  TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700)
138 #define TG3_DEF_RX_JUMBO_RING_PENDING 100
139 
140 /* Do not place this n-ring entries value into the tp struct itself,
141  * we really want to expose these constants to GCC so that modulo et
142  * al. operations are done with shifts and masks instead of with
143  * hw multiply/modulo instructions. Another solution would be to
144  * replace things like '% foo' with '& (foo - 1)'.
145  */
146 
147 #define TG3_TX_RING_SIZE 512
148 #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1)
149 
150 #define TG3_RX_STD_RING_BYTES(tp) \
151  (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp))
152 #define TG3_RX_JMB_RING_BYTES(tp) \
153  (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp))
154 #define TG3_RX_RCB_RING_BYTES(tp) \
155  (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1))
156 #define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \
157  TG3_TX_RING_SIZE)
158 #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1))
159 
160 #define TG3_DMA_BYTE_ENAB 64
161 
162 #define TG3_RX_STD_DMA_SZ 1536
163 #define TG3_RX_JMB_DMA_SZ 9046
164 
165 #define TG3_RX_DMA_TO_MAP_SZ(x) ((x) + TG3_DMA_BYTE_ENAB)
166 
167 #define TG3_RX_STD_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ)
168 #define TG3_RX_JMB_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ)
169 
170 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \
171  (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp))
172 
173 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \
174  (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp))
175 
176 /* Due to a hardware bug, the 5701 can only DMA to memory addresses
177  * that are at least dword aligned when used in PCIX mode. The driver
178  * works around this bug by double copying the packet. This workaround
179  * is built into the normal double copy length check for efficiency.
180  *
181  * However, the double copy is only necessary on those architectures
182  * where unaligned memory accesses are inefficient. For those architectures
183  * where unaligned memory accesses incur little penalty, we can reintegrate
184  * the 5701 in the normal rx path. Doing so saves a device structure
185  * dereference by hardcoding the double copy threshold in place.
186  */
187 #define TG3_RX_COPY_THRESHOLD 256
188 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
189  #define TG3_RX_COPY_THRESH(tp) TG3_RX_COPY_THRESHOLD
190 #else
191  #define TG3_RX_COPY_THRESH(tp) ((tp)->rx_copy_thresh)
192 #endif
193 
194 #if (NET_IP_ALIGN != 0)
195 #define TG3_RX_OFFSET(tp) ((tp)->rx_offset)
196 #else
197 #define TG3_RX_OFFSET(tp) (NET_SKB_PAD)
198 #endif
199 
200 /* minimum number of free TX descriptors required to wake up TX process */
201 #define TG3_TX_WAKEUP_THRESH(tnapi) ((tnapi)->tx_pending / 4)
202 #define TG3_TX_BD_DMA_MAX_2K 2048
203 #define TG3_TX_BD_DMA_MAX_4K 4096
204 
205 #define TG3_RAW_IP_ALIGN 2
206 
207 #define TG3_FW_UPDATE_TIMEOUT_SEC 5
208 #define TG3_FW_UPDATE_FREQ_SEC (TG3_FW_UPDATE_TIMEOUT_SEC / 2)
209 
210 #define FIRMWARE_TG3 "tigon/tg3.bin"
211 #define FIRMWARE_TG3TSO "tigon/tg3_tso.bin"
212 #define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin"
213 
214 static char version[] __devinitdata =
216 
217 MODULE_AUTHOR("David S. Miller ([email protected]) and Jeff Garzik ([email protected])");
218 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver");
219 MODULE_LICENSE("GPL");
224 
225 static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */
226 module_param(tg3_debug, int, 0);
227 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
228 
229 static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
311  {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */
312  {}
313 };
314 
315 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl);
316 
317 static const struct {
318  const char string[ETH_GSTRING_LEN];
319 } ethtool_stats_keys[] = {
320  { "rx_octets" },
321  { "rx_fragments" },
322  { "rx_ucast_packets" },
323  { "rx_mcast_packets" },
324  { "rx_bcast_packets" },
325  { "rx_fcs_errors" },
326  { "rx_align_errors" },
327  { "rx_xon_pause_rcvd" },
328  { "rx_xoff_pause_rcvd" },
329  { "rx_mac_ctrl_rcvd" },
330  { "rx_xoff_entered" },
331  { "rx_frame_too_long_errors" },
332  { "rx_jabbers" },
333  { "rx_undersize_packets" },
334  { "rx_in_length_errors" },
335  { "rx_out_length_errors" },
336  { "rx_64_or_less_octet_packets" },
337  { "rx_65_to_127_octet_packets" },
338  { "rx_128_to_255_octet_packets" },
339  { "rx_256_to_511_octet_packets" },
340  { "rx_512_to_1023_octet_packets" },
341  { "rx_1024_to_1522_octet_packets" },
342  { "rx_1523_to_2047_octet_packets" },
343  { "rx_2048_to_4095_octet_packets" },
344  { "rx_4096_to_8191_octet_packets" },
345  { "rx_8192_to_9022_octet_packets" },
346 
347  { "tx_octets" },
348  { "tx_collisions" },
349 
350  { "tx_xon_sent" },
351  { "tx_xoff_sent" },
352  { "tx_flow_control" },
353  { "tx_mac_errors" },
354  { "tx_single_collisions" },
355  { "tx_mult_collisions" },
356  { "tx_deferred" },
357  { "tx_excessive_collisions" },
358  { "tx_late_collisions" },
359  { "tx_collide_2times" },
360  { "tx_collide_3times" },
361  { "tx_collide_4times" },
362  { "tx_collide_5times" },
363  { "tx_collide_6times" },
364  { "tx_collide_7times" },
365  { "tx_collide_8times" },
366  { "tx_collide_9times" },
367  { "tx_collide_10times" },
368  { "tx_collide_11times" },
369  { "tx_collide_12times" },
370  { "tx_collide_13times" },
371  { "tx_collide_14times" },
372  { "tx_collide_15times" },
373  { "tx_ucast_packets" },
374  { "tx_mcast_packets" },
375  { "tx_bcast_packets" },
376  { "tx_carrier_sense_errors" },
377  { "tx_discards" },
378  { "tx_errors" },
379 
380  { "dma_writeq_full" },
381  { "dma_write_prioq_full" },
382  { "rxbds_empty" },
383  { "rx_discards" },
384  { "rx_errors" },
385  { "rx_threshold_hit" },
386 
387  { "dma_readq_full" },
388  { "dma_read_prioq_full" },
389  { "tx_comp_queue_full" },
390 
391  { "ring_set_send_prod_index" },
392  { "ring_status_update" },
393  { "nic_irqs" },
394  { "nic_avoided_irqs" },
395  { "nic_tx_threshold_hit" },
396 
397  { "mbuf_lwm_thresh_hit" },
398 };
399 
400 #define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys)
401 
402 
403 static const struct {
404  const char string[ETH_GSTRING_LEN];
405 } ethtool_test_keys[] = {
406  { "nvram test (online) " },
407  { "link test (online) " },
408  { "register test (offline)" },
409  { "memory test (offline)" },
410  { "mac loopback test (offline)" },
411  { "phy loopback test (offline)" },
412  { "ext loopback test (offline)" },
413  { "interrupt test (offline)" },
414 };
415 
416 #define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys)
417 
418 
419 static void tg3_write32(struct tg3 *tp, u32 off, u32 val)
420 {
421  writel(val, tp->regs + off);
422 }
423 
424 static u32 tg3_read32(struct tg3 *tp, u32 off)
425 {
426  return readl(tp->regs + off);
427 }
428 
429 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val)
430 {
431  writel(val, tp->aperegs + off);
432 }
433 
434 static u32 tg3_ape_read32(struct tg3 *tp, u32 off)
435 {
436  return readl(tp->aperegs + off);
437 }
438 
439 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val)
440 {
441  unsigned long flags;
442 
443  spin_lock_irqsave(&tp->indirect_lock, flags);
444  pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
445  pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
446  spin_unlock_irqrestore(&tp->indirect_lock, flags);
447 }
448 
449 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val)
450 {
451  writel(val, tp->regs + off);
452  readl(tp->regs + off);
453 }
454 
455 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off)
456 {
457  unsigned long flags;
458  u32 val;
459 
460  spin_lock_irqsave(&tp->indirect_lock, flags);
461  pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off);
462  pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
463  spin_unlock_irqrestore(&tp->indirect_lock, flags);
464  return val;
465 }
466 
467 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val)
468 {
469  unsigned long flags;
470 
472  pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX +
473  TG3_64BIT_REG_LOW, val);
474  return;
475  }
476  if (off == TG3_RX_STD_PROD_IDX_REG) {
477  pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX +
478  TG3_64BIT_REG_LOW, val);
479  return;
480  }
481 
482  spin_lock_irqsave(&tp->indirect_lock, flags);
483  pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
484  pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
485  spin_unlock_irqrestore(&tp->indirect_lock, flags);
486 
487  /* In indirect mode when disabling interrupts, we also need
488  * to clear the interrupt bit in the GRC local ctrl register.
489  */
490  if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) &&
491  (val == 0x1)) {
492  pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL,
494  }
495 }
496 
497 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off)
498 {
499  unsigned long flags;
500  u32 val;
501 
502  spin_lock_irqsave(&tp->indirect_lock, flags);
503  pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600);
504  pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val);
505  spin_unlock_irqrestore(&tp->indirect_lock, flags);
506  return val;
507 }
508 
509 /* usec_wait specifies the wait time in usec when writing to certain registers
510  * where it is unsafe to read back the register without some delay.
511  * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power.
512  * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed.
513  */
514 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait)
515 {
516  if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND))
517  /* Non-posted methods */
518  tp->write32(tp, off, val);
519  else {
520  /* Posted method */
521  tg3_write32(tp, off, val);
522  if (usec_wait)
523  udelay(usec_wait);
524  tp->read32(tp, off);
525  }
526  /* Wait again after the read for the posted method to guarantee that
527  * the wait time is met.
528  */
529  if (usec_wait)
530  udelay(usec_wait);
531 }
532 
533 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
534 {
535  tp->write32_mbox(tp, off, val);
536  if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND))
537  tp->read32_mbox(tp, off);
538 }
539 
540 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
541 {
542  void __iomem *mbox = tp->regs + off;
543  writel(val, mbox);
544  if (tg3_flag(tp, TXD_MBOX_HWBUG))
545  writel(val, mbox);
546  if (tg3_flag(tp, MBOX_WRITE_REORDER))
547  readl(mbox);
548 }
549 
550 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off)
551 {
552  return readl(tp->regs + off + GRCMBOX_BASE);
553 }
554 
555 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val)
556 {
557  writel(val, tp->regs + off + GRCMBOX_BASE);
558 }
559 
560 #define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val)
561 #define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val))
562 #define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val)
563 #define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val)
564 #define tr32_mailbox(reg) tp->read32_mbox(tp, reg)
565 
566 #define tw32(reg, val) tp->write32(tp, reg, val)
567 #define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0)
568 #define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us))
569 #define tr32(reg) tp->read32(tp, reg)
570 
571 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val)
572 {
573  unsigned long flags;
574 
576  (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC))
577  return;
578 
579  spin_lock_irqsave(&tp->indirect_lock, flags);
580  if (tg3_flag(tp, SRAM_USE_CONFIG)) {
581  pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
582  pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
583 
584  /* Always leave this as zero. */
585  pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
586  } else {
589 
590  /* Always leave this as zero. */
592  }
593  spin_unlock_irqrestore(&tp->indirect_lock, flags);
594 }
595 
596 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val)
597 {
598  unsigned long flags;
599 
601  (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) {
602  *val = 0;
603  return;
604  }
605 
606  spin_lock_irqsave(&tp->indirect_lock, flags);
607  if (tg3_flag(tp, SRAM_USE_CONFIG)) {
608  pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off);
609  pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
610 
611  /* Always leave this as zero. */
612  pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
613  } else {
615  *val = tr32(TG3PCI_MEM_WIN_DATA);
616 
617  /* Always leave this as zero. */
619  }
620  spin_unlock_irqrestore(&tp->indirect_lock, flags);
621 }
622 
623 static void tg3_ape_lock_init(struct tg3 *tp)
624 {
625  int i;
626  u32 regbase, bit;
627 
629  regbase = TG3_APE_LOCK_GRANT;
630  else
631  regbase = TG3_APE_PER_LOCK_GRANT;
632 
633  /* Make sure the driver hasn't any stale locks. */
634  for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) {
635  switch (i) {
636  case TG3_APE_LOCK_PHY0:
637  case TG3_APE_LOCK_PHY1:
638  case TG3_APE_LOCK_PHY2:
639  case TG3_APE_LOCK_PHY3:
640  bit = APE_LOCK_GRANT_DRIVER;
641  break;
642  default:
643  if (!tp->pci_fn)
644  bit = APE_LOCK_GRANT_DRIVER;
645  else
646  bit = 1 << tp->pci_fn;
647  }
648  tg3_ape_write32(tp, regbase + 4 * i, bit);
649  }
650 
651 }
652 
653 static int tg3_ape_lock(struct tg3 *tp, int locknum)
654 {
655  int i, off;
656  int ret = 0;
657  u32 status, req, gnt, bit;
658 
659  if (!tg3_flag(tp, ENABLE_APE))
660  return 0;
661 
662  switch (locknum) {
663  case TG3_APE_LOCK_GPIO:
665  return 0;
666  case TG3_APE_LOCK_GRC:
667  case TG3_APE_LOCK_MEM:
668  if (!tp->pci_fn)
669  bit = APE_LOCK_REQ_DRIVER;
670  else
671  bit = 1 << tp->pci_fn;
672  break;
673  case TG3_APE_LOCK_PHY0:
674  case TG3_APE_LOCK_PHY1:
675  case TG3_APE_LOCK_PHY2:
676  case TG3_APE_LOCK_PHY3:
677  bit = APE_LOCK_REQ_DRIVER;
678  break;
679  default:
680  return -EINVAL;
681  }
682 
684  req = TG3_APE_LOCK_REQ;
685  gnt = TG3_APE_LOCK_GRANT;
686  } else {
687  req = TG3_APE_PER_LOCK_REQ;
689  }
690 
691  off = 4 * locknum;
692 
693  tg3_ape_write32(tp, req + off, bit);
694 
695  /* Wait for up to 1 millisecond to acquire lock. */
696  for (i = 0; i < 100; i++) {
697  status = tg3_ape_read32(tp, gnt + off);
698  if (status == bit)
699  break;
700  udelay(10);
701  }
702 
703  if (status != bit) {
704  /* Revoke the lock request. */
705  tg3_ape_write32(tp, gnt + off, bit);
706  ret = -EBUSY;
707  }
708 
709  return ret;
710 }
711 
712 static void tg3_ape_unlock(struct tg3 *tp, int locknum)
713 {
714  u32 gnt, bit;
715 
716  if (!tg3_flag(tp, ENABLE_APE))
717  return;
718 
719  switch (locknum) {
720  case TG3_APE_LOCK_GPIO:
722  return;
723  case TG3_APE_LOCK_GRC:
724  case TG3_APE_LOCK_MEM:
725  if (!tp->pci_fn)
726  bit = APE_LOCK_GRANT_DRIVER;
727  else
728  bit = 1 << tp->pci_fn;
729  break;
730  case TG3_APE_LOCK_PHY0:
731  case TG3_APE_LOCK_PHY1:
732  case TG3_APE_LOCK_PHY2:
733  case TG3_APE_LOCK_PHY3:
734  bit = APE_LOCK_GRANT_DRIVER;
735  break;
736  default:
737  return;
738  }
739 
741  gnt = TG3_APE_LOCK_GRANT;
742  else
744 
745  tg3_ape_write32(tp, gnt + 4 * locknum, bit);
746 }
747 
748 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us)
749 {
750  u32 apedata;
751 
752  while (timeout_us) {
753  if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM))
754  return -EBUSY;
755 
756  apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
757  if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
758  break;
759 
760  tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
761 
762  udelay(10);
763  timeout_us -= (timeout_us > 10) ? 10 : timeout_us;
764  }
765 
766  return timeout_us ? 0 : -EBUSY;
767 }
768 
769 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us)
770 {
771  u32 i, apedata;
772 
773  for (i = 0; i < timeout_us / 10; i++) {
774  apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS);
775 
776  if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING))
777  break;
778 
779  udelay(10);
780  }
781 
782  return i == timeout_us / 10;
783 }
784 
785 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off,
786  u32 len)
787 {
788  int err;
789  u32 i, bufoff, msgoff, maxlen, apedata;
790 
791  if (!tg3_flag(tp, APE_HAS_NCSI))
792  return 0;
793 
794  apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
795  if (apedata != APE_SEG_SIG_MAGIC)
796  return -ENODEV;
797 
798  apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
799  if (!(apedata & APE_FW_STATUS_READY))
800  return -EAGAIN;
801 
802  bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) +
804  msgoff = bufoff + 2 * sizeof(u32);
805  maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN);
806 
807  while (len) {
808  u32 length;
809 
810  /* Cap xfer sizes to scratchpad limits. */
811  length = (len > maxlen) ? maxlen : len;
812  len -= length;
813 
814  apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
815  if (!(apedata & APE_FW_STATUS_READY))
816  return -EAGAIN;
817 
818  /* Wait for up to 1 msec for APE to service previous event. */
819  err = tg3_ape_event_lock(tp, 1000);
820  if (err)
821  return err;
822 
823  apedata = APE_EVENT_STATUS_DRIVER_EVNT |
826  tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata);
827 
828  tg3_ape_write32(tp, bufoff, base_off);
829  tg3_ape_write32(tp, bufoff + sizeof(u32), length);
830 
831  tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
832  tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
833 
834  base_off += length;
835 
836  if (tg3_ape_wait_for_event(tp, 30000))
837  return -EAGAIN;
838 
839  for (i = 0; length; i += 4, length -= 4) {
840  u32 val = tg3_ape_read32(tp, msgoff + i);
841  memcpy(data, &val, sizeof(u32));
842  data++;
843  }
844  }
845 
846  return 0;
847 }
848 
849 static int tg3_ape_send_event(struct tg3 *tp, u32 event)
850 {
851  int err;
852  u32 apedata;
853 
854  apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
855  if (apedata != APE_SEG_SIG_MAGIC)
856  return -EAGAIN;
857 
858  apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
859  if (!(apedata & APE_FW_STATUS_READY))
860  return -EAGAIN;
861 
862  /* Wait for up to 1 millisecond for APE to service previous event. */
863  err = tg3_ape_event_lock(tp, 1000);
864  if (err)
865  return err;
866 
867  tg3_ape_write32(tp, TG3_APE_EVENT_STATUS,
869 
870  tg3_ape_unlock(tp, TG3_APE_LOCK_MEM);
871  tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1);
872 
873  return 0;
874 }
875 
876 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
877 {
878  u32 event;
879  u32 apedata;
880 
881  if (!tg3_flag(tp, ENABLE_APE))
882  return;
883 
884  switch (kind) {
885  case RESET_KIND_INIT:
886  tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG,
888  tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN,
890  apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT);
891  tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata);
892  tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID,
894  tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
896  tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
898 
900  break;
901  case RESET_KIND_SHUTDOWN:
902  /* With the interface we are currently using,
903  * APE does not track driver state. Wiping
904  * out the HOST SEGMENT SIGNATURE forces
905  * the APE to assume OS absent status.
906  */
907  tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
908 
909  if (device_may_wakeup(&tp->pdev->dev) &&
910  tg3_flag(tp, WOL_ENABLE)) {
911  tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
913  apedata = TG3_APE_HOST_DRVR_STATE_WOL;
914  } else
916 
917  tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
918 
920  break;
921  case RESET_KIND_SUSPEND:
923  break;
924  default:
925  return;
926  }
927 
929 
930  tg3_ape_send_event(tp, event);
931 }
932 
933 static void tg3_disable_ints(struct tg3 *tp)
934 {
935  int i;
936 
939  for (i = 0; i < tp->irq_max; i++)
940  tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001);
941 }
942 
943 static void tg3_enable_ints(struct tg3 *tp)
944 {
945  int i;
946 
947  tp->irq_sync = 0;
948  wmb();
949 
952 
954  for (i = 0; i < tp->irq_cnt; i++) {
955  struct tg3_napi *tnapi = &tp->napi[i];
956 
957  tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
958  if (tg3_flag(tp, 1SHOT_MSI))
959  tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
960 
961  tp->coal_now |= tnapi->coal_now;
962  }
963 
964  /* Force an initial interrupt */
965  if (!tg3_flag(tp, TAGGED_STATUS) &&
966  (tp->napi[0].hw_status->status & SD_STATUS_UPDATED))
968  else
969  tw32(HOSTCC_MODE, tp->coal_now);
970 
971  tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now);
972 }
973 
974 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi)
975 {
976  struct tg3 *tp = tnapi->tp;
977  struct tg3_hw_status *sblk = tnapi->hw_status;
978  unsigned int work_exists = 0;
979 
980  /* check for phy events */
981  if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
982  if (sblk->status & SD_STATUS_LINK_CHG)
983  work_exists = 1;
984  }
985 
986  /* check for TX work to do */
987  if (sblk->idx[0].tx_consumer != tnapi->tx_cons)
988  work_exists = 1;
989 
990  /* check for RX work to do */
991  if (tnapi->rx_rcb_prod_idx &&
992  *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
993  work_exists = 1;
994 
995  return work_exists;
996 }
997 
998 /* tg3_int_reenable
999  * similar to tg3_enable_ints, but it accurately determines whether there
1000  * is new work pending and can return without flushing the PIO write
1001  * which reenables interrupts
1002  */
1003 static void tg3_int_reenable(struct tg3_napi *tnapi)
1004 {
1005  struct tg3 *tp = tnapi->tp;
1006 
1007  tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
1008  mmiowb();
1009 
1010  /* When doing tagged status, this work check is unnecessary.
1011  * The last_tag we write above tells the chip which piece of
1012  * work we've completed.
1013  */
1014  if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi))
1016  HOSTCC_MODE_ENABLE | tnapi->coal_now);
1017 }
1018 
1019 static void tg3_switch_clocks(struct tg3 *tp)
1020 {
1021  u32 clock_ctrl;
1022  u32 orig_clock_ctrl;
1023 
1024  if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS))
1025  return;
1026 
1027  clock_ctrl = tr32(TG3PCI_CLOCK_CTRL);
1028 
1029  orig_clock_ctrl = clock_ctrl;
1030  clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN |
1032  0x1f);
1033  tp->pci_clock_ctrl = clock_ctrl;
1034 
1035  if (tg3_flag(tp, 5705_PLUS)) {
1036  if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) {
1038  clock_ctrl | CLOCK_CTRL_625_CORE, 40);
1039  }
1040  } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) {
1042  clock_ctrl |
1043  (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK),
1044  40);
1046  clock_ctrl | (CLOCK_CTRL_ALTCLK),
1047  40);
1048  }
1049  tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40);
1050 }
1051 
1052 #define PHY_BUSY_LOOPS 5000
1053 
1054 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
1055 {
1056  u32 frame_val;
1057  unsigned int loops;
1058  int ret;
1059 
1060  if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1062  (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1063  udelay(80);
1064  }
1065 
1066  tg3_ape_lock(tp, tp->phy_ape_lock);
1067 
1068  *val = 0x0;
1069 
1070  frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1072  frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1074  frame_val |= (MI_COM_CMD_READ | MI_COM_START);
1075 
1076  tw32_f(MAC_MI_COM, frame_val);
1077 
1078  loops = PHY_BUSY_LOOPS;
1079  while (loops != 0) {
1080  udelay(10);
1081  frame_val = tr32(MAC_MI_COM);
1082 
1083  if ((frame_val & MI_COM_BUSY) == 0) {
1084  udelay(5);
1085  frame_val = tr32(MAC_MI_COM);
1086  break;
1087  }
1088  loops -= 1;
1089  }
1090 
1091  ret = -EBUSY;
1092  if (loops != 0) {
1093  *val = frame_val & MI_COM_DATA_MASK;
1094  ret = 0;
1095  }
1096 
1097  if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1098  tw32_f(MAC_MI_MODE, tp->mi_mode);
1099  udelay(80);
1100  }
1101 
1102  tg3_ape_unlock(tp, tp->phy_ape_lock);
1103 
1104  return ret;
1105 }
1106 
1107 static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
1108 {
1109  u32 frame_val;
1110  unsigned int loops;
1111  int ret;
1112 
1113  if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
1114  (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL))
1115  return 0;
1116 
1117  if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1119  (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
1120  udelay(80);
1121  }
1122 
1123  tg3_ape_lock(tp, tp->phy_ape_lock);
1124 
1125  frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
1127  frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
1129  frame_val |= (val & MI_COM_DATA_MASK);
1130  frame_val |= (MI_COM_CMD_WRITE | MI_COM_START);
1131 
1132  tw32_f(MAC_MI_COM, frame_val);
1133 
1134  loops = PHY_BUSY_LOOPS;
1135  while (loops != 0) {
1136  udelay(10);
1137  frame_val = tr32(MAC_MI_COM);
1138  if ((frame_val & MI_COM_BUSY) == 0) {
1139  udelay(5);
1140  frame_val = tr32(MAC_MI_COM);
1141  break;
1142  }
1143  loops -= 1;
1144  }
1145 
1146  ret = -EBUSY;
1147  if (loops != 0)
1148  ret = 0;
1149 
1150  if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
1151  tw32_f(MAC_MI_MODE, tp->mi_mode);
1152  udelay(80);
1153  }
1154 
1155  tg3_ape_unlock(tp, tp->phy_ape_lock);
1156 
1157  return ret;
1158 }
1159 
1160 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val)
1161 {
1162  int err;
1163 
1164  err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1165  if (err)
1166  goto done;
1167 
1168  err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1169  if (err)
1170  goto done;
1171 
1172  err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1173  MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1174  if (err)
1175  goto done;
1176 
1177  err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val);
1178 
1179 done:
1180  return err;
1181 }
1182 
1183 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val)
1184 {
1185  int err;
1186 
1187  err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad);
1188  if (err)
1189  goto done;
1190 
1191  err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr);
1192  if (err)
1193  goto done;
1194 
1195  err = tg3_writephy(tp, MII_TG3_MMD_CTRL,
1196  MII_TG3_MMD_CTRL_DATA_NOINC | devad);
1197  if (err)
1198  goto done;
1199 
1200  err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val);
1201 
1202 done:
1203  return err;
1204 }
1205 
1206 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val)
1207 {
1208  int err;
1209 
1210  err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1211  if (!err)
1212  err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val);
1213 
1214  return err;
1215 }
1216 
1217 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val)
1218 {
1219  int err;
1220 
1221  err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg);
1222  if (!err)
1223  err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val);
1224 
1225  return err;
1226 }
1227 
1228 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val)
1229 {
1230  int err;
1231 
1232  err = tg3_writephy(tp, MII_TG3_AUX_CTRL,
1235  if (!err)
1236  err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val);
1237 
1238  return err;
1239 }
1240 
1241 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set)
1242 {
1243  if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC)
1244  set |= MII_TG3_AUXCTL_MISC_WREN;
1245 
1246  return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg);
1247 }
1248 
1249 #define TG3_PHY_AUXCTL_SMDSP_ENABLE(tp) \
1250  tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1251  MII_TG3_AUXCTL_ACTL_SMDSP_ENA | \
1252  MII_TG3_AUXCTL_ACTL_TX_6DB)
1253 
1254 #define TG3_PHY_AUXCTL_SMDSP_DISABLE(tp) \
1255  tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \
1256  MII_TG3_AUXCTL_ACTL_TX_6DB);
1257 
1258 static int tg3_bmcr_reset(struct tg3 *tp)
1259 {
1260  u32 phy_control;
1261  int limit, err;
1262 
1263  /* OK, reset it, and poll the BMCR_RESET bit until it
1264  * clears or we time out.
1265  */
1266  phy_control = BMCR_RESET;
1267  err = tg3_writephy(tp, MII_BMCR, phy_control);
1268  if (err != 0)
1269  return -EBUSY;
1270 
1271  limit = 5000;
1272  while (limit--) {
1273  err = tg3_readphy(tp, MII_BMCR, &phy_control);
1274  if (err != 0)
1275  return -EBUSY;
1276 
1277  if ((phy_control & BMCR_RESET) == 0) {
1278  udelay(40);
1279  break;
1280  }
1281  udelay(10);
1282  }
1283  if (limit < 0)
1284  return -EBUSY;
1285 
1286  return 0;
1287 }
1288 
1289 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
1290 {
1291  struct tg3 *tp = bp->priv;
1292  u32 val;
1293 
1294  spin_lock_bh(&tp->lock);
1295 
1296  if (tg3_readphy(tp, reg, &val))
1297  val = -EIO;
1298 
1299  spin_unlock_bh(&tp->lock);
1300 
1301  return val;
1302 }
1303 
1304 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
1305 {
1306  struct tg3 *tp = bp->priv;
1307  u32 ret = 0;
1308 
1309  spin_lock_bh(&tp->lock);
1310 
1311  if (tg3_writephy(tp, reg, val))
1312  ret = -EIO;
1313 
1314  spin_unlock_bh(&tp->lock);
1315 
1316  return ret;
1317 }
1318 
1319 static int tg3_mdio_reset(struct mii_bus *bp)
1320 {
1321  return 0;
1322 }
1323 
1324 static void tg3_mdio_config_5785(struct tg3 *tp)
1325 {
1326  u32 val;
1327  struct phy_device *phydev;
1328 
1329  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1330  switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1331  case PHY_ID_BCM50610:
1332  case PHY_ID_BCM50610M:
1334  break;
1335  case PHY_ID_BCMAC131:
1337  break;
1338  case PHY_ID_RTL8211C:
1340  break;
1341  case PHY_ID_RTL8201E:
1343  break;
1344  default:
1345  return;
1346  }
1347 
1348  if (phydev->interface != PHY_INTERFACE_MODE_RGMII) {
1349  tw32(MAC_PHYCFG2, val);
1350 
1351  val = tr32(MAC_PHYCFG1);
1352  val &= ~(MAC_PHYCFG1_RGMII_INT |
1355  tw32(MAC_PHYCFG1, val);
1356 
1357  return;
1358  }
1359 
1360  if (!tg3_flag(tp, RGMII_INBAND_DISABLE))
1367 
1368  tw32(MAC_PHYCFG2, val);
1369 
1370  val = tr32(MAC_PHYCFG1);
1373  if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1374  if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1376  if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1378  }
1381  tw32(MAC_PHYCFG1, val);
1382 
1383  val = tr32(MAC_EXT_RGMII_MODE);
1384  val &= ~(MAC_RGMII_MODE_RX_INT_B |
1391  if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) {
1392  if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1393  val |= MAC_RGMII_MODE_RX_INT_B |
1397  if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1398  val |= MAC_RGMII_MODE_TX_ENABLE |
1401  }
1402  tw32(MAC_EXT_RGMII_MODE, val);
1403 }
1404 
1405 static void tg3_mdio_start(struct tg3 *tp)
1406 {
1408  tw32_f(MAC_MI_MODE, tp->mi_mode);
1409  udelay(80);
1410 
1411  if (tg3_flag(tp, MDIOBUS_INITED) &&
1413  tg3_mdio_config_5785(tp);
1414 }
1415 
1416 static int tg3_mdio_init(struct tg3 *tp)
1417 {
1418  int i;
1419  u32 reg;
1420  struct phy_device *phydev;
1421 
1422  if (tg3_flag(tp, 5717_PLUS)) {
1423  u32 is_serdes;
1424 
1425  tp->phy_addr = tp->pci_fn + 1;
1426 
1428  is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1429  else
1430  is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1432  if (is_serdes)
1433  tp->phy_addr += 7;
1434  } else
1435  tp->phy_addr = TG3_PHY_MII_ADDR;
1436 
1437  tg3_mdio_start(tp);
1438 
1439  if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED))
1440  return 0;
1441 
1442  tp->mdio_bus = mdiobus_alloc();
1443  if (tp->mdio_bus == NULL)
1444  return -ENOMEM;
1445 
1446  tp->mdio_bus->name = "tg3 mdio bus";
1447  snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x",
1448  (tp->pdev->bus->number << 8) | tp->pdev->devfn);
1449  tp->mdio_bus->priv = tp;
1450  tp->mdio_bus->parent = &tp->pdev->dev;
1451  tp->mdio_bus->read = &tg3_mdio_read;
1452  tp->mdio_bus->write = &tg3_mdio_write;
1453  tp->mdio_bus->reset = &tg3_mdio_reset;
1454  tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR);
1455  tp->mdio_bus->irq = &tp->mdio_irq[0];
1456 
1457  for (i = 0; i < PHY_MAX_ADDR; i++)
1458  tp->mdio_bus->irq[i] = PHY_POLL;
1459 
1460  /* The bus registration will look for all the PHYs on the mdio bus.
1461  * Unfortunately, it does not ensure the PHY is powered up before
1462  * accessing the PHY ID registers. A chip reset is the
1463  * quickest way to bring the device back to an operational state..
1464  */
1465  if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN))
1466  tg3_bmcr_reset(tp);
1467 
1468  i = mdiobus_register(tp->mdio_bus);
1469  if (i) {
1470  dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i);
1471  mdiobus_free(tp->mdio_bus);
1472  return i;
1473  }
1474 
1475  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1476 
1477  if (!phydev || !phydev->drv) {
1478  dev_warn(&tp->pdev->dev, "No PHY devices\n");
1480  mdiobus_free(tp->mdio_bus);
1481  return -ENODEV;
1482  }
1483 
1484  switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
1485  case PHY_ID_BCM57780:
1488  break;
1489  case PHY_ID_BCM50610:
1490  case PHY_ID_BCM50610M:
1495  if (tg3_flag(tp, RGMII_INBAND_DISABLE))
1497  if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN))
1499  if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN))
1501  /* fallthru */
1502  case PHY_ID_RTL8211C:
1504  break;
1505  case PHY_ID_RTL8201E:
1506  case PHY_ID_BCMAC131:
1510  break;
1511  }
1512 
1513  tg3_flag_set(tp, MDIOBUS_INITED);
1514 
1516  tg3_mdio_config_5785(tp);
1517 
1518  return 0;
1519 }
1520 
1521 static void tg3_mdio_fini(struct tg3 *tp)
1522 {
1523  if (tg3_flag(tp, MDIOBUS_INITED)) {
1524  tg3_flag_clear(tp, MDIOBUS_INITED);
1526  mdiobus_free(tp->mdio_bus);
1527  }
1528 }
1529 
1530 /* tp->lock is held. */
1531 static inline void tg3_generate_fw_event(struct tg3 *tp)
1532 {
1533  u32 val;
1534 
1535  val = tr32(GRC_RX_CPU_EVENT);
1536  val |= GRC_RX_CPU_DRIVER_EVENT;
1537  tw32_f(GRC_RX_CPU_EVENT, val);
1538 
1540 }
1541 
1542 #define TG3_FW_EVENT_TIMEOUT_USEC 2500
1543 
1544 /* tp->lock is held. */
1545 static void tg3_wait_for_event_ack(struct tg3 *tp)
1546 {
1547  int i;
1548  unsigned int delay_cnt;
1549  long time_remain;
1550 
1551  /* If enough time has passed, no wait is necessary. */
1552  time_remain = (long)(tp->last_event_jiffies + 1 +
1554  (long)jiffies;
1555  if (time_remain < 0)
1556  return;
1557 
1558  /* Check if we can shorten the wait time. */
1559  delay_cnt = jiffies_to_usecs(time_remain);
1560  if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC)
1561  delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC;
1562  delay_cnt = (delay_cnt >> 3) + 1;
1563 
1564  for (i = 0; i < delay_cnt; i++) {
1566  break;
1567  udelay(8);
1568  }
1569 }
1570 
1571 /* tp->lock is held. */
1572 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data)
1573 {
1574  u32 reg, val;
1575 
1576  val = 0;
1577  if (!tg3_readphy(tp, MII_BMCR, &reg))
1578  val = reg << 16;
1579  if (!tg3_readphy(tp, MII_BMSR, &reg))
1580  val |= (reg & 0xffff);
1581  *data++ = val;
1582 
1583  val = 0;
1584  if (!tg3_readphy(tp, MII_ADVERTISE, &reg))
1585  val = reg << 16;
1586  if (!tg3_readphy(tp, MII_LPA, &reg))
1587  val |= (reg & 0xffff);
1588  *data++ = val;
1589 
1590  val = 0;
1591  if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) {
1592  if (!tg3_readphy(tp, MII_CTRL1000, &reg))
1593  val = reg << 16;
1594  if (!tg3_readphy(tp, MII_STAT1000, &reg))
1595  val |= (reg & 0xffff);
1596  }
1597  *data++ = val;
1598 
1599  if (!tg3_readphy(tp, MII_PHYADDR, &reg))
1600  val = reg << 16;
1601  else
1602  val = 0;
1603  *data++ = val;
1604 }
1605 
1606 /* tp->lock is held. */
1607 static void tg3_ump_link_report(struct tg3 *tp)
1608 {
1609  u32 data[4];
1610 
1611  if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF))
1612  return;
1613 
1614  tg3_phy_gather_ump_data(tp, data);
1615 
1616  tg3_wait_for_event_ack(tp);
1617 
1618  tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE);
1619  tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14);
1620  tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]);
1621  tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]);
1622  tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]);
1623  tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]);
1624 
1625  tg3_generate_fw_event(tp);
1626 }
1627 
1628 /* tp->lock is held. */
1629 static void tg3_stop_fw(struct tg3 *tp)
1630 {
1631  if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
1632  /* Wait for RX cpu to ACK the previous event. */
1633  tg3_wait_for_event_ack(tp);
1634 
1635  tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW);
1636 
1637  tg3_generate_fw_event(tp);
1638 
1639  /* Wait for RX cpu to ACK this event. */
1640  tg3_wait_for_event_ack(tp);
1641  }
1642 }
1643 
1644 /* tp->lock is held. */
1645 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
1646 {
1647  tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX,
1649 
1650  if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1651  switch (kind) {
1652  case RESET_KIND_INIT:
1653  tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1654  DRV_STATE_START);
1655  break;
1656 
1657  case RESET_KIND_SHUTDOWN:
1658  tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1660  break;
1661 
1662  case RESET_KIND_SUSPEND:
1663  tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1665  break;
1666 
1667  default:
1668  break;
1669  }
1670  }
1671 
1672  if (kind == RESET_KIND_INIT ||
1673  kind == RESET_KIND_SUSPEND)
1674  tg3_ape_driver_state_change(tp, kind);
1675 }
1676 
1677 /* tp->lock is held. */
1678 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
1679 {
1680  if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) {
1681  switch (kind) {
1682  case RESET_KIND_INIT:
1683  tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1685  break;
1686 
1687  case RESET_KIND_SHUTDOWN:
1688  tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1690  break;
1691 
1692  default:
1693  break;
1694  }
1695  }
1696 
1697  if (kind == RESET_KIND_SHUTDOWN)
1698  tg3_ape_driver_state_change(tp, kind);
1699 }
1700 
1701 /* tp->lock is held. */
1702 static void tg3_write_sig_legacy(struct tg3 *tp, int kind)
1703 {
1704  if (tg3_flag(tp, ENABLE_ASF)) {
1705  switch (kind) {
1706  case RESET_KIND_INIT:
1707  tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1708  DRV_STATE_START);
1709  break;
1710 
1711  case RESET_KIND_SHUTDOWN:
1712  tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1714  break;
1715 
1716  case RESET_KIND_SUSPEND:
1717  tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX,
1719  break;
1720 
1721  default:
1722  break;
1723  }
1724  }
1725 }
1726 
1727 static int tg3_poll_fw(struct tg3 *tp)
1728 {
1729  int i;
1730  u32 val;
1731 
1733  /* Wait up to 20ms for init done. */
1734  for (i = 0; i < 200; i++) {
1736  return 0;
1737  udelay(100);
1738  }
1739  return -ENODEV;
1740  }
1741 
1742  /* Wait for firmware initialization to complete. */
1743  for (i = 0; i < 100000; i++) {
1744  tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val);
1745  if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
1746  break;
1747  udelay(10);
1748  }
1749 
1750  /* Chip might not be fitted with firmware. Some Sun onboard
1751  * parts are configured like that. So don't signal the timeout
1752  * of the above loop as an error, but do report the lack of
1753  * running firmware once.
1754  */
1755  if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) {
1756  tg3_flag_set(tp, NO_FWARE_REPORTED);
1757 
1758  netdev_info(tp->dev, "No firmware running\n");
1759  }
1760 
1761  if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
1762  /* The 57765 A0 needs a little more
1763  * time to do some important work.
1764  */
1765  mdelay(10);
1766  }
1767 
1768  return 0;
1769 }
1770 
1771 static void tg3_link_report(struct tg3 *tp)
1772 {
1773  if (!netif_carrier_ok(tp->dev)) {
1774  netif_info(tp, link, tp->dev, "Link is down\n");
1775  tg3_ump_link_report(tp);
1776  } else if (netif_msg_link(tp)) {
1777  netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n",
1778  (tp->link_config.active_speed == SPEED_1000 ?
1779  1000 :
1780  (tp->link_config.active_speed == SPEED_100 ?
1781  100 : 10)),
1782  (tp->link_config.active_duplex == DUPLEX_FULL ?
1783  "full" : "half"));
1784 
1785  netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n",
1786  (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ?
1787  "on" : "off",
1788  (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ?
1789  "on" : "off");
1790 
1791  if (tp->phy_flags & TG3_PHYFLG_EEE_CAP)
1792  netdev_info(tp->dev, "EEE is %s\n",
1793  tp->setlpicnt ? "enabled" : "disabled");
1794 
1795  tg3_ump_link_report(tp);
1796  }
1797 }
1798 
1799 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl)
1800 {
1801  u16 miireg;
1802 
1803  if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX))
1804  miireg = ADVERTISE_1000XPAUSE;
1805  else if (flow_ctrl & FLOW_CTRL_TX)
1806  miireg = ADVERTISE_1000XPSE_ASYM;
1807  else if (flow_ctrl & FLOW_CTRL_RX)
1809  else
1810  miireg = 0;
1811 
1812  return miireg;
1813 }
1814 
1815 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv)
1816 {
1817  u8 cap = 0;
1818 
1819  if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) {
1820  cap = FLOW_CTRL_TX | FLOW_CTRL_RX;
1821  } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) {
1822  if (lcladv & ADVERTISE_1000XPAUSE)
1823  cap = FLOW_CTRL_RX;
1824  if (rmtadv & ADVERTISE_1000XPAUSE)
1825  cap = FLOW_CTRL_TX;
1826  }
1827 
1828  return cap;
1829 }
1830 
1831 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
1832 {
1833  u8 autoneg;
1834  u8 flowctrl = 0;
1835  u32 old_rx_mode = tp->rx_mode;
1836  u32 old_tx_mode = tp->tx_mode;
1837 
1838  if (tg3_flag(tp, USE_PHYLIB))
1839  autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg;
1840  else
1841  autoneg = tp->link_config.autoneg;
1842 
1843  if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) {
1844  if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
1845  flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv);
1846  else
1847  flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
1848  } else
1849  flowctrl = tp->link_config.flowctrl;
1850 
1851  tp->link_config.active_flowctrl = flowctrl;
1852 
1853  if (flowctrl & FLOW_CTRL_RX)
1855  else
1857 
1858  if (old_rx_mode != tp->rx_mode)
1859  tw32_f(MAC_RX_MODE, tp->rx_mode);
1860 
1861  if (flowctrl & FLOW_CTRL_TX)
1863  else
1865 
1866  if (old_tx_mode != tp->tx_mode)
1867  tw32_f(MAC_TX_MODE, tp->tx_mode);
1868 }
1869 
1870 static void tg3_adjust_link(struct net_device *dev)
1871 {
1872  u8 oldflowctrl, linkmesg = 0;
1873  u32 mac_mode, lcl_adv, rmt_adv;
1874  struct tg3 *tp = netdev_priv(dev);
1875  struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1876 
1877  spin_lock_bh(&tp->lock);
1878 
1879  mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK |
1881 
1882  oldflowctrl = tp->link_config.active_flowctrl;
1883 
1884  if (phydev->link) {
1885  lcl_adv = 0;
1886  rmt_adv = 0;
1887 
1888  if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10)
1889  mac_mode |= MAC_MODE_PORT_MODE_MII;
1890  else if (phydev->speed == SPEED_1000 ||
1892  mac_mode |= MAC_MODE_PORT_MODE_GMII;
1893  else
1894  mac_mode |= MAC_MODE_PORT_MODE_MII;
1895 
1896  if (phydev->duplex == DUPLEX_HALF)
1897  mac_mode |= MAC_MODE_HALF_DUPLEX;
1898  else {
1899  lcl_adv = mii_advertise_flowctrl(
1900  tp->link_config.flowctrl);
1901 
1902  if (phydev->pause)
1903  rmt_adv = LPA_PAUSE_CAP;
1904  if (phydev->asym_pause)
1905  rmt_adv |= LPA_PAUSE_ASYM;
1906  }
1907 
1908  tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
1909  } else
1910  mac_mode |= MAC_MODE_PORT_MODE_GMII;
1911 
1912  if (mac_mode != tp->mac_mode) {
1913  tp->mac_mode = mac_mode;
1914  tw32_f(MAC_MODE, tp->mac_mode);
1915  udelay(40);
1916  }
1917 
1919  if (phydev->speed == SPEED_10)
1920  tw32(MAC_MI_STAT,
1923  else
1925  }
1926 
1927  if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF)
1929  ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1930  (6 << TX_LENGTHS_IPG_SHIFT) |
1931  (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)));
1932  else
1934  ((2 << TX_LENGTHS_IPG_CRS_SHIFT) |
1935  (6 << TX_LENGTHS_IPG_SHIFT) |
1936  (32 << TX_LENGTHS_SLOT_TIME_SHIFT)));
1937 
1938  if (phydev->link != tp->old_link ||
1939  phydev->speed != tp->link_config.active_speed ||
1940  phydev->duplex != tp->link_config.active_duplex ||
1941  oldflowctrl != tp->link_config.active_flowctrl)
1942  linkmesg = 1;
1943 
1944  tp->old_link = phydev->link;
1945  tp->link_config.active_speed = phydev->speed;
1946  tp->link_config.active_duplex = phydev->duplex;
1947 
1948  spin_unlock_bh(&tp->lock);
1949 
1950  if (linkmesg)
1951  tg3_link_report(tp);
1952 }
1953 
1954 static int tg3_phy_init(struct tg3 *tp)
1955 {
1956  struct phy_device *phydev;
1957 
1959  return 0;
1960 
1961  /* Bring the PHY back to a known state. */
1962  tg3_bmcr_reset(tp);
1963 
1964  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
1965 
1966  /* Attach the MAC to the PHY. */
1967  phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link,
1968  phydev->dev_flags, phydev->interface);
1969  if (IS_ERR(phydev)) {
1970  dev_err(&tp->pdev->dev, "Could not attach to PHY\n");
1971  return PTR_ERR(phydev);
1972  }
1973 
1974  /* Mask with MAC supported features. */
1975  switch (phydev->interface) {
1978  if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
1979  phydev->supported &= (PHY_GBIT_FEATURES |
1980  SUPPORTED_Pause |
1982  break;
1983  }
1984  /* fallthru */
1986  phydev->supported &= (PHY_BASIC_FEATURES |
1987  SUPPORTED_Pause |
1989  break;
1990  default:
1991  phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
1992  return -EINVAL;
1993  }
1994 
1996 
1997  phydev->advertising = phydev->supported;
1998 
1999  return 0;
2000 }
2001 
2002 static void tg3_phy_start(struct tg3 *tp)
2003 {
2004  struct phy_device *phydev;
2005 
2006  if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2007  return;
2008 
2009  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
2010 
2011  if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
2013  phydev->speed = tp->link_config.speed;
2014  phydev->duplex = tp->link_config.duplex;
2015  phydev->autoneg = tp->link_config.autoneg;
2016  phydev->advertising = tp->link_config.advertising;
2017  }
2018 
2019  phy_start(phydev);
2020 
2021  phy_start_aneg(phydev);
2022 }
2023 
2024 static void tg3_phy_stop(struct tg3 *tp)
2025 {
2026  if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
2027  return;
2028 
2029  phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
2030 }
2031 
2032 static void tg3_phy_fini(struct tg3 *tp)
2033 {
2034  if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
2035  phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
2037  }
2038 }
2039 
2040 static int tg3_phy_set_extloopbk(struct tg3 *tp)
2041 {
2042  int err;
2043  u32 val;
2044 
2045  if (tp->phy_flags & TG3_PHYFLG_IS_FET)
2046  return 0;
2047 
2048  if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2049  /* Cannot do read-modify-write on 5401 */
2050  err = tg3_phy_auxctl_write(tp,
2053  0x4c20);
2054  goto done;
2055  }
2056 
2057  err = tg3_phy_auxctl_read(tp,
2059  if (err)
2060  return err;
2061 
2063  err = tg3_phy_auxctl_write(tp,
2065 
2066 done:
2067  return err;
2068 }
2069 
2070 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable)
2071 {
2072  u32 phytest;
2073 
2074  if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2075  u32 phy;
2076 
2077  tg3_writephy(tp, MII_TG3_FET_TEST,
2078  phytest | MII_TG3_FET_SHADOW_EN);
2079  if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) {
2080  if (enable)
2082  else
2084  tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy);
2085  }
2086  tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2087  }
2088 }
2089 
2090 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable)
2091 {
2092  u32 reg;
2093 
2094  if (!tg3_flag(tp, 5705_PLUS) ||
2095  (tg3_flag(tp, 5717_PLUS) &&
2097  return;
2098 
2099  if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2100  tg3_phy_fet_toggle_apd(tp, enable);
2101  return;
2102  }
2103 
2104  reg = MII_TG3_MISC_SHDW_WREN |
2110  if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable)
2112 
2113  tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2114 
2115 
2116  reg = MII_TG3_MISC_SHDW_WREN |
2119  if (enable)
2121 
2122  tg3_writephy(tp, MII_TG3_MISC_SHDW, reg);
2123 }
2124 
2125 static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable)
2126 {
2127  u32 phy;
2128 
2129  if (!tg3_flag(tp, 5705_PLUS) ||
2131  return;
2132 
2133  if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2134  u32 ephy;
2135 
2136  if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) {
2138 
2139  tg3_writephy(tp, MII_TG3_FET_TEST,
2140  ephy | MII_TG3_FET_SHADOW_EN);
2141  if (!tg3_readphy(tp, reg, &phy)) {
2142  if (enable)
2144  else
2146  tg3_writephy(tp, reg, phy);
2147  }
2148  tg3_writephy(tp, MII_TG3_FET_TEST, ephy);
2149  }
2150  } else {
2151  int ret;
2152 
2153  ret = tg3_phy_auxctl_read(tp,
2155  if (!ret) {
2156  if (enable)
2158  else
2160  tg3_phy_auxctl_write(tp,
2162  }
2163  }
2164 }
2165 
2166 static void tg3_phy_set_wirespeed(struct tg3 *tp)
2167 {
2168  int ret;
2169  u32 val;
2170 
2172  return;
2173 
2174  ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val);
2175  if (!ret)
2176  tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC,
2178 }
2179 
2180 static void tg3_phy_apply_otp(struct tg3 *tp)
2181 {
2182  u32 otp, phy;
2183 
2184  if (!tp->phy_otp)
2185  return;
2186 
2187  otp = tp->phy_otp;
2188 
2190  return;
2191 
2192  phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT);
2194  tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy);
2195 
2196  phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) |
2198  tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy);
2199 
2200  phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT);
2202  tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy);
2203 
2204  phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT);
2205  tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy);
2206 
2207  phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT);
2208  tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy);
2209 
2210  phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) |
2212  tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy);
2213 
2215 }
2216 
2217 static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up)
2218 {
2219  u32 val;
2220 
2221  if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
2222  return;
2223 
2224  tp->setlpicnt = 0;
2225 
2226  if (tp->link_config.autoneg == AUTONEG_ENABLE &&
2227  current_link_up == 1 &&
2228  tp->link_config.active_duplex == DUPLEX_FULL &&
2229  (tp->link_config.active_speed == SPEED_100 ||
2230  tp->link_config.active_speed == SPEED_1000)) {
2231  u32 eeectl;
2232 
2233  if (tp->link_config.active_speed == SPEED_1000)
2235  else
2237 
2238  tw32(TG3_CPMU_EEE_CTRL, eeectl);
2239 
2240  tg3_phy_cl45_read(tp, MDIO_MMD_AN,
2241  TG3_CL45_D7_EEERES_STAT, &val);
2242 
2243  if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
2245  tp->setlpicnt = 2;
2246  }
2247 
2248  if (!tp->setlpicnt) {
2249  if (current_link_up == 1 &&
2251  tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
2253  }
2254 
2255  val = tr32(TG3_CPMU_EEE_MODE);
2257  }
2258 }
2259 
2260 static void tg3_phy_eee_enable(struct tg3 *tp)
2261 {
2262  u32 val;
2263 
2264  if (tp->link_config.active_speed == SPEED_1000 &&
2267  tg3_flag(tp, 57765_CLASS)) &&
2269  val = MII_TG3_DSP_TAP26_ALNOKO |
2271  tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
2273  }
2274 
2275  val = tr32(TG3_CPMU_EEE_MODE);
2277 }
2278 
2279 static int tg3_wait_macro_done(struct tg3 *tp)
2280 {
2281  int limit = 100;
2282 
2283  while (limit--) {
2284  u32 tmp32;
2285 
2286  if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) {
2287  if ((tmp32 & 0x1000) == 0)
2288  break;
2289  }
2290  }
2291  if (limit < 0)
2292  return -EBUSY;
2293 
2294  return 0;
2295 }
2296 
2297 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp)
2298 {
2299  static const u32 test_pat[4][6] = {
2300  { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 },
2301  { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 },
2302  { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 },
2303  { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 }
2304  };
2305  int chan;
2306 
2307  for (chan = 0; chan < 4; chan++) {
2308  int i;
2309 
2310  tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2311  (chan * 0x2000) | 0x0200);
2312  tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2313 
2314  for (i = 0; i < 6; i++)
2315  tg3_writephy(tp, MII_TG3_DSP_RW_PORT,
2316  test_pat[chan][i]);
2317 
2318  tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2319  if (tg3_wait_macro_done(tp)) {
2320  *resetp = 1;
2321  return -EBUSY;
2322  }
2323 
2324  tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2325  (chan * 0x2000) | 0x0200);
2326  tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082);
2327  if (tg3_wait_macro_done(tp)) {
2328  *resetp = 1;
2329  return -EBUSY;
2330  }
2331 
2332  tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802);
2333  if (tg3_wait_macro_done(tp)) {
2334  *resetp = 1;
2335  return -EBUSY;
2336  }
2337 
2338  for (i = 0; i < 6; i += 2) {
2339  u32 low, high;
2340 
2341  if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) ||
2342  tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) ||
2343  tg3_wait_macro_done(tp)) {
2344  *resetp = 1;
2345  return -EBUSY;
2346  }
2347  low &= 0x7fff;
2348  high &= 0x000f;
2349  if (low != test_pat[chan][i] ||
2350  high != test_pat[chan][i+1]) {
2351  tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b);
2352  tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001);
2353  tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005);
2354 
2355  return -EBUSY;
2356  }
2357  }
2358  }
2359 
2360  return 0;
2361 }
2362 
2363 static int tg3_phy_reset_chanpat(struct tg3 *tp)
2364 {
2365  int chan;
2366 
2367  for (chan = 0; chan < 4; chan++) {
2368  int i;
2369 
2370  tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
2371  (chan * 0x2000) | 0x0200);
2372  tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002);
2373  for (i = 0; i < 6; i++)
2374  tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000);
2375  tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202);
2376  if (tg3_wait_macro_done(tp))
2377  return -EBUSY;
2378  }
2379 
2380  return 0;
2381 }
2382 
2383 static int tg3_phy_reset_5703_4_5(struct tg3 *tp)
2384 {
2385  u32 reg32, phy9_orig;
2386  int retries, do_phy_reset, err;
2387 
2388  retries = 10;
2389  do_phy_reset = 1;
2390  do {
2391  if (do_phy_reset) {
2392  err = tg3_bmcr_reset(tp);
2393  if (err)
2394  return err;
2395  do_phy_reset = 0;
2396  }
2397 
2398  /* Disable transmitter and interrupt. */
2399  if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32))
2400  continue;
2401 
2402  reg32 |= 0x3000;
2403  tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2404 
2405  /* Set full-duplex, 1000 mbps. */
2406  tg3_writephy(tp, MII_BMCR,
2408 
2409  /* Set to master mode. */
2410  if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig))
2411  continue;
2412 
2413  tg3_writephy(tp, MII_CTRL1000,
2415 
2416  err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
2417  if (err)
2418  return err;
2419 
2420  /* Block the PHY control access. */
2421  tg3_phydsp_write(tp, 0x8005, 0x0800);
2422 
2423  err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset);
2424  if (!err)
2425  break;
2426  } while (--retries);
2427 
2428  err = tg3_phy_reset_chanpat(tp);
2429  if (err)
2430  return err;
2431 
2432  tg3_phydsp_write(tp, 0x8005, 0x0000);
2433 
2434  tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200);
2435  tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000);
2436 
2438 
2439  tg3_writephy(tp, MII_CTRL1000, phy9_orig);
2440 
2441  if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) {
2442  reg32 &= ~0x3000;
2443  tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32);
2444  } else if (!err)
2445  err = -EBUSY;
2446 
2447  return err;
2448 }
2449 
2450 /* This will reset the tigon3 PHY if there is no valid
2451  * link unless the FORCE argument is non-zero.
2452  */
2453 static int tg3_phy_reset(struct tg3 *tp)
2454 {
2455  u32 val, cpmuctrl;
2456  int err;
2457 
2459  val = tr32(GRC_MISC_CFG);
2461  udelay(40);
2462  }
2463  err = tg3_readphy(tp, MII_BMSR, &val);
2464  err |= tg3_readphy(tp, MII_BMSR, &val);
2465  if (err != 0)
2466  return -EBUSY;
2467 
2468  if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) {
2469  netif_carrier_off(tp->dev);
2470  tg3_link_report(tp);
2471  }
2472 
2476  err = tg3_phy_reset_5703_4_5(tp);
2477  if (err)
2478  return err;
2479  goto out;
2480  }
2481 
2482  cpmuctrl = 0;
2485  cpmuctrl = tr32(TG3_CPMU_CTRL);
2486  if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY)
2488  cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY);
2489  }
2490 
2491  err = tg3_bmcr_reset(tp);
2492  if (err)
2493  return err;
2494 
2495  if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) {
2497  tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val);
2498 
2499  tw32(TG3_CPMU_CTRL, cpmuctrl);
2500  }
2501 
2505  if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) ==
2507  val &= ~CPMU_LSPD_1000MB_MACCLK_MASK;
2508  udelay(40);
2510  }
2511  }
2512 
2513  if (tg3_flag(tp, 5717_PLUS) &&
2515  return 0;
2516 
2517  tg3_phy_apply_otp(tp);
2518 
2519  if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
2520  tg3_phy_toggle_apd(tp, true);
2521  else
2522  tg3_phy_toggle_apd(tp, false);
2523 
2524 out:
2525  if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) &&
2527  tg3_phydsp_write(tp, 0x201f, 0x2aaa);
2528  tg3_phydsp_write(tp, 0x000a, 0x0323);
2530  }
2531 
2532  if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) {
2533  tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2534  tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
2535  }
2536 
2537  if (tp->phy_flags & TG3_PHYFLG_BER_BUG) {
2538  if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2539  tg3_phydsp_write(tp, 0x000a, 0x310b);
2540  tg3_phydsp_write(tp, 0x201f, 0x9506);
2541  tg3_phydsp_write(tp, 0x401f, 0x14e2);
2543  }
2544  } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) {
2545  if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) {
2546  tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a);
2547  if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) {
2548  tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b);
2549  tg3_writephy(tp, MII_TG3_TEST1,
2550  MII_TG3_TEST1_TRIM_EN | 0x4);
2551  } else
2552  tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b);
2553 
2555  }
2556  }
2557 
2558  /* Set Extended packet length bit (bit 14) on all chips that */
2559  /* support jumbo frames */
2560  if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
2561  /* Cannot do read-modify-write on 5401 */
2562  tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
2563  } else if (tg3_flag(tp, JUMBO_CAPABLE)) {
2564  /* Set bit 14 with read-modify-write to preserve other bits */
2565  err = tg3_phy_auxctl_read(tp,
2567  if (!err)
2568  tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL,
2570  }
2571 
2572  /* Set phy register 0x10 bit 0 to high fifo elasticity to support
2573  * jumbo frames transmission.
2574  */
2575  if (tg3_flag(tp, JUMBO_CAPABLE)) {
2576  if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val))
2577  tg3_writephy(tp, MII_TG3_EXT_CTRL,
2579  }
2580 
2582  /* adjust output voltage */
2583  tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12);
2584  }
2585 
2586  tg3_phy_toggle_automdix(tp, 1);
2587  tg3_phy_set_wirespeed(tp);
2588  return 0;
2589 }
2590 
2591 #define TG3_GPIO_MSG_DRVR_PRES 0x00000001
2592 #define TG3_GPIO_MSG_NEED_VAUX 0x00000002
2593 #define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \
2594  TG3_GPIO_MSG_NEED_VAUX)
2595 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \
2596  ((TG3_GPIO_MSG_DRVR_PRES << 0) | \
2597  (TG3_GPIO_MSG_DRVR_PRES << 4) | \
2598  (TG3_GPIO_MSG_DRVR_PRES << 8) | \
2599  (TG3_GPIO_MSG_DRVR_PRES << 12))
2600 
2601 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \
2602  ((TG3_GPIO_MSG_NEED_VAUX << 0) | \
2603  (TG3_GPIO_MSG_NEED_VAUX << 4) | \
2604  (TG3_GPIO_MSG_NEED_VAUX << 8) | \
2605  (TG3_GPIO_MSG_NEED_VAUX << 12))
2606 
2607 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat)
2608 {
2609  u32 status, shift;
2610 
2613  status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG);
2614  else
2615  status = tr32(TG3_CPMU_DRV_STATUS);
2616 
2617  shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn;
2618  status &= ~(TG3_GPIO_MSG_MASK << shift);
2619  status |= (newstat << shift);
2620 
2623  tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status);
2624  else
2625  tw32(TG3_CPMU_DRV_STATUS, status);
2626 
2627  return status >> TG3_APE_GPIO_MSG_SHIFT;
2628 }
2629 
2630 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp)
2631 {
2632  if (!tg3_flag(tp, IS_NIC))
2633  return 0;
2634 
2638  if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2639  return -EIO;
2640 
2641  tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES);
2642 
2645 
2646  tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2647  } else {
2650  }
2651 
2652  return 0;
2653 }
2654 
2655 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp)
2656 {
2657  u32 grc_local_ctrl;
2658 
2659  if (!tg3_flag(tp, IS_NIC) ||
2662  return;
2663 
2664  grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1;
2665 
2667  grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2669 
2671  grc_local_ctrl,
2673 
2675  grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1,
2677 }
2678 
2679 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp)
2680 {
2681  if (!tg3_flag(tp, IS_NIC))
2682  return;
2683 
2693  } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
2694  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
2695  /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */
2696  u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 |
2701  tp->grc_local_ctrl;
2702  tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2704 
2705  grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2;
2706  tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2708 
2709  grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0;
2710  tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl,
2712  } else {
2713  u32 no_gpio2;
2714  u32 grc_local_ctrl = 0;
2715 
2716  /* Workaround to prevent overdrawing Amps. */
2718  grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3;
2720  grc_local_ctrl,
2722  }
2723 
2724  /* On 5753 and variants, GPIO2 cannot be used. */
2725  no_gpio2 = tp->nic_sram_data_cfg &
2727 
2728  grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 |
2733  if (no_gpio2) {
2734  grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 |
2736  }
2738  tp->grc_local_ctrl | grc_local_ctrl,
2740 
2741  grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0;
2742 
2744  tp->grc_local_ctrl | grc_local_ctrl,
2746 
2747  if (!no_gpio2) {
2748  grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2;
2750  tp->grc_local_ctrl | grc_local_ctrl,
2752  }
2753  }
2754 }
2755 
2756 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable)
2757 {
2758  u32 msg = 0;
2759 
2760  /* Serialize power state transitions */
2761  if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO))
2762  return;
2763 
2764  if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable)
2765  msg = TG3_GPIO_MSG_NEED_VAUX;
2766 
2767  msg = tg3_set_function_status(tp, msg);
2768 
2770  goto done;
2771 
2773  tg3_pwrsrc_switch_to_vaux(tp);
2774  else
2775  tg3_pwrsrc_die_with_vmain(tp);
2776 
2777 done:
2778  tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO);
2779 }
2780 
2781 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol)
2782 {
2783  bool need_vaux = false;
2784 
2785  /* The GPIOs do something completely different on 57765. */
2786  if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS))
2787  return;
2788 
2792  tg3_frob_aux_power_5717(tp, include_wol ?
2793  tg3_flag(tp, WOL_ENABLE) != 0 : 0);
2794  return;
2795  }
2796 
2797  if (tp->pdev_peer && tp->pdev_peer != tp->pdev) {
2798  struct net_device *dev_peer;
2799 
2800  dev_peer = pci_get_drvdata(tp->pdev_peer);
2801 
2802  /* remove_one() may have been run on the peer. */
2803  if (dev_peer) {
2804  struct tg3 *tp_peer = netdev_priv(dev_peer);
2805 
2806  if (tg3_flag(tp_peer, INIT_COMPLETE))
2807  return;
2808 
2809  if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) ||
2810  tg3_flag(tp_peer, ENABLE_ASF))
2811  need_vaux = true;
2812  }
2813  }
2814 
2815  if ((include_wol && tg3_flag(tp, WOL_ENABLE)) ||
2816  tg3_flag(tp, ENABLE_ASF))
2817  need_vaux = true;
2818 
2819  if (need_vaux)
2820  tg3_pwrsrc_switch_to_vaux(tp);
2821  else
2822  tg3_pwrsrc_die_with_vmain(tp);
2823 }
2824 
2825 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed)
2826 {
2827  if (tp->led_ctrl == LED_CTRL_MODE_PHY_2)
2828  return 1;
2829  else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) {
2830  if (speed != SPEED_10)
2831  return 1;
2832  } else if (speed == SPEED_10)
2833  return 1;
2834 
2835  return 0;
2836 }
2837 
2838 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power)
2839 {
2840  u32 val;
2841 
2842  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
2844  u32 sg_dig_ctrl = tr32(SG_DIG_CTRL);
2845  u32 serdes_cfg = tr32(MAC_SERDES_CFG);
2846 
2847  sg_dig_ctrl |=
2849  tw32(SG_DIG_CTRL, sg_dig_ctrl);
2850  tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15));
2851  }
2852  return;
2853  }
2854 
2856  tg3_bmcr_reset(tp);
2857  val = tr32(GRC_MISC_CFG);
2859  udelay(40);
2860  return;
2861  } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
2862  u32 phytest;
2863  if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) {
2864  u32 phy;
2865 
2866  tg3_writephy(tp, MII_ADVERTISE, 0);
2867  tg3_writephy(tp, MII_BMCR,
2869 
2870  tg3_writephy(tp, MII_TG3_FET_TEST,
2871  phytest | MII_TG3_FET_SHADOW_EN);
2872  if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) {
2874  tg3_writephy(tp,
2876  phy);
2877  }
2878  tg3_writephy(tp, MII_TG3_FET_TEST, phytest);
2879  }
2880  return;
2881  } else if (do_low_power) {
2882  tg3_writephy(tp, MII_TG3_EXT_CTRL,
2884 
2888  tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val);
2889  }
2890 
2891  /* The PHY should not be powered down on some chips because
2892  * of bugs.
2893  */
2897  (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) ||
2899  !tp->pci_fn))
2900  return;
2901 
2908  }
2909 
2910  tg3_writephy(tp, MII_BMCR, BMCR_PDOWN);
2911 }
2912 
2913 /* tp->lock is held. */
2914 static int tg3_nvram_lock(struct tg3 *tp)
2915 {
2916  if (tg3_flag(tp, NVRAM)) {
2917  int i;
2918 
2919  if (tp->nvram_lock_cnt == 0) {
2921  for (i = 0; i < 8000; i++) {
2922  if (tr32(NVRAM_SWARB) & SWARB_GNT1)
2923  break;
2924  udelay(20);
2925  }
2926  if (i == 8000) {
2928  return -ENODEV;
2929  }
2930  }
2931  tp->nvram_lock_cnt++;
2932  }
2933  return 0;
2934 }
2935 
2936 /* tp->lock is held. */
2937 static void tg3_nvram_unlock(struct tg3 *tp)
2938 {
2939  if (tg3_flag(tp, NVRAM)) {
2940  if (tp->nvram_lock_cnt > 0)
2941  tp->nvram_lock_cnt--;
2942  if (tp->nvram_lock_cnt == 0)
2944  }
2945 }
2946 
2947 /* tp->lock is held. */
2948 static void tg3_enable_nvram_access(struct tg3 *tp)
2949 {
2950  if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
2951  u32 nvaccess = tr32(NVRAM_ACCESS);
2952 
2953  tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE);
2954  }
2955 }
2956 
2957 /* tp->lock is held. */
2958 static void tg3_disable_nvram_access(struct tg3 *tp)
2959 {
2960  if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) {
2961  u32 nvaccess = tr32(NVRAM_ACCESS);
2962 
2963  tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE);
2964  }
2965 }
2966 
2967 static int tg3_nvram_read_using_eeprom(struct tg3 *tp,
2968  u32 offset, u32 *val)
2969 {
2970  u32 tmp;
2971  int i;
2972 
2973  if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0)
2974  return -EINVAL;
2975 
2980  tmp |
2981  (0 << EEPROM_ADDR_DEVID_SHIFT) |
2982  ((offset << EEPROM_ADDR_ADDR_SHIFT) &
2985 
2986  for (i = 0; i < 1000; i++) {
2987  tmp = tr32(GRC_EEPROM_ADDR);
2988 
2989  if (tmp & EEPROM_ADDR_COMPLETE)
2990  break;
2991  msleep(1);
2992  }
2993  if (!(tmp & EEPROM_ADDR_COMPLETE))
2994  return -EBUSY;
2995 
2996  tmp = tr32(GRC_EEPROM_DATA);
2997 
2998  /*
2999  * The data will always be opposite the native endian
3000  * format. Perform a blind byteswap to compensate.
3001  */
3002  *val = swab32(tmp);
3003 
3004  return 0;
3005 }
3006 
3007 #define NVRAM_CMD_TIMEOUT 10000
3008 
3009 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd)
3010 {
3011  int i;
3012 
3013  tw32(NVRAM_CMD, nvram_cmd);
3014  for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) {
3015  udelay(10);
3016  if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) {
3017  udelay(10);
3018  break;
3019  }
3020  }
3021 
3022  if (i == NVRAM_CMD_TIMEOUT)
3023  return -EBUSY;
3024 
3025  return 0;
3026 }
3027 
3028 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr)
3029 {
3030  if (tg3_flag(tp, NVRAM) &&
3031  tg3_flag(tp, NVRAM_BUFFERED) &&
3032  tg3_flag(tp, FLASH) &&
3033  !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3034  (tp->nvram_jedecnum == JEDEC_ATMEL))
3035 
3036  addr = ((addr / tp->nvram_pagesize) <<
3038  (addr % tp->nvram_pagesize);
3039 
3040  return addr;
3041 }
3042 
3043 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr)
3044 {
3045  if (tg3_flag(tp, NVRAM) &&
3046  tg3_flag(tp, NVRAM_BUFFERED) &&
3047  tg3_flag(tp, FLASH) &&
3048  !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) &&
3049  (tp->nvram_jedecnum == JEDEC_ATMEL))
3050 
3051  addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) *
3052  tp->nvram_pagesize) +
3053  (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1));
3054 
3055  return addr;
3056 }
3057 
3058 /* NOTE: Data read in from NVRAM is byteswapped according to
3059  * the byteswapping settings for all other register accesses.
3060  * tg3 devices are BE devices, so on a BE machine, the data
3061  * returned will be exactly as it is seen in NVRAM. On a LE
3062  * machine, the 32-bit value will be byteswapped.
3063  */
3064 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
3065 {
3066  int ret;
3067 
3068  if (!tg3_flag(tp, NVRAM))
3069  return tg3_nvram_read_using_eeprom(tp, offset, val);
3070 
3071  offset = tg3_nvram_phys_addr(tp, offset);
3072 
3073  if (offset > NVRAM_ADDR_MSK)
3074  return -EINVAL;
3075 
3076  ret = tg3_nvram_lock(tp);
3077  if (ret)
3078  return ret;
3079 
3080  tg3_enable_nvram_access(tp);
3081 
3082  tw32(NVRAM_ADDR, offset);
3083  ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO |
3085 
3086  if (ret == 0)
3087  *val = tr32(NVRAM_RDDATA);
3088 
3089  tg3_disable_nvram_access(tp);
3090 
3091  tg3_nvram_unlock(tp);
3092 
3093  return ret;
3094 }
3095 
3096 /* Ensures NVRAM data is in bytestream format. */
3097 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val)
3098 {
3099  u32 v;
3100  int res = tg3_nvram_read(tp, offset, &v);
3101  if (!res)
3102  *val = cpu_to_be32(v);
3103  return res;
3104 }
3105 
3106 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp,
3107  u32 offset, u32 len, u8 *buf)
3108 {
3109  int i, j, rc = 0;
3110  u32 val;
3111 
3112  for (i = 0; i < len; i += 4) {
3113  u32 addr;
3114  __be32 data;
3115 
3116  addr = offset + i;
3117 
3118  memcpy(&data, buf + i, 4);
3119 
3120  /*
3121  * The SEEPROM interface expects the data to always be opposite
3122  * the native endian format. We accomplish this by reversing
3123  * all the operations that would have been performed on the
3124  * data from a call to tg3_nvram_read_be32().
3125  */
3127 
3128  val = tr32(GRC_EEPROM_ADDR);
3130 
3133  tw32(GRC_EEPROM_ADDR, val |
3134  (0 << EEPROM_ADDR_DEVID_SHIFT) |
3135  (addr & EEPROM_ADDR_ADDR_MASK) |
3138 
3139  for (j = 0; j < 1000; j++) {
3140  val = tr32(GRC_EEPROM_ADDR);
3141 
3142  if (val & EEPROM_ADDR_COMPLETE)
3143  break;
3144  msleep(1);
3145  }
3146  if (!(val & EEPROM_ADDR_COMPLETE)) {
3147  rc = -EBUSY;
3148  break;
3149  }
3150  }
3151 
3152  return rc;
3153 }
3154 
3155 /* offset and length are dword aligned */
3156 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,
3157  u8 *buf)
3158 {
3159  int ret = 0;
3160  u32 pagesize = tp->nvram_pagesize;
3161  u32 pagemask = pagesize - 1;
3162  u32 nvram_cmd;
3163  u8 *tmp;
3164 
3165  tmp = kmalloc(pagesize, GFP_KERNEL);
3166  if (tmp == NULL)
3167  return -ENOMEM;
3168 
3169  while (len) {
3170  int j;
3171  u32 phy_addr, page_off, size;
3172 
3173  phy_addr = offset & ~pagemask;
3174 
3175  for (j = 0; j < pagesize; j += 4) {
3176  ret = tg3_nvram_read_be32(tp, phy_addr + j,
3177  (__be32 *) (tmp + j));
3178  if (ret)
3179  break;
3180  }
3181  if (ret)
3182  break;
3183 
3184  page_off = offset & pagemask;
3185  size = pagesize;
3186  if (len < size)
3187  size = len;
3188 
3189  len -= size;
3190 
3191  memcpy(tmp + page_off, buf, size);
3192 
3193  offset = offset + (pagesize - page_off);
3194 
3195  tg3_enable_nvram_access(tp);
3196 
3197  /*
3198  * Before we can erase the flash page, we need
3199  * to issue a special "write enable" command.
3200  */
3201  nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3202 
3203  if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3204  break;
3205 
3206  /* Erase the target page */
3207  tw32(NVRAM_ADDR, phy_addr);
3208 
3209  nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR |
3211 
3212  if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3213  break;
3214 
3215  /* Issue another write enable to start the write. */
3216  nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3217 
3218  if (tg3_nvram_exec_cmd(tp, nvram_cmd))
3219  break;
3220 
3221  for (j = 0; j < pagesize; j += 4) {
3222  __be32 data;
3223 
3224  data = *((__be32 *) (tmp + j));
3225 
3226  tw32(NVRAM_WRDATA, be32_to_cpu(data));
3227 
3228  tw32(NVRAM_ADDR, phy_addr + j);
3229 
3230  nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE |
3231  NVRAM_CMD_WR;
3232 
3233  if (j == 0)
3234  nvram_cmd |= NVRAM_CMD_FIRST;
3235  else if (j == (pagesize - 4))
3236  nvram_cmd |= NVRAM_CMD_LAST;
3237 
3238  ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3239  if (ret)
3240  break;
3241  }
3242  if (ret)
3243  break;
3244  }
3245 
3246  nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE;
3247  tg3_nvram_exec_cmd(tp, nvram_cmd);
3248 
3249  kfree(tmp);
3250 
3251  return ret;
3252 }
3253 
3254 /* offset and length are dword aligned */
3255 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
3256  u8 *buf)
3257 {
3258  int i, ret = 0;
3259 
3260  for (i = 0; i < len; i += 4, offset += 4) {
3261  u32 page_off, phy_addr, nvram_cmd;
3262  __be32 data;
3263 
3264  memcpy(&data, buf + i, 4);
3265  tw32(NVRAM_WRDATA, be32_to_cpu(data));
3266 
3267  page_off = offset % tp->nvram_pagesize;
3268 
3269  phy_addr = tg3_nvram_phys_addr(tp, offset);
3270 
3271  nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
3272 
3273  if (page_off == 0 || i == 0)
3274  nvram_cmd |= NVRAM_CMD_FIRST;
3275  if (page_off == (tp->nvram_pagesize - 4))
3276  nvram_cmd |= NVRAM_CMD_LAST;
3277 
3278  if (i == (len - 4))
3279  nvram_cmd |= NVRAM_CMD_LAST;
3280 
3281  if ((nvram_cmd & NVRAM_CMD_FIRST) ||
3282  !tg3_flag(tp, FLASH) ||
3283  !tg3_flag(tp, 57765_PLUS))
3284  tw32(NVRAM_ADDR, phy_addr);
3285 
3287  !tg3_flag(tp, 5755_PLUS) &&
3288  (tp->nvram_jedecnum == JEDEC_ST) &&
3289  (nvram_cmd & NVRAM_CMD_FIRST)) {
3290  u32 cmd;
3291 
3293  ret = tg3_nvram_exec_cmd(tp, cmd);
3294  if (ret)
3295  break;
3296  }
3297  if (!tg3_flag(tp, FLASH)) {
3298  /* We always do complete word writes to eeprom. */
3299  nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST);
3300  }
3301 
3302  ret = tg3_nvram_exec_cmd(tp, nvram_cmd);
3303  if (ret)
3304  break;
3305  }
3306  return ret;
3307 }
3308 
3309 /* offset and length are dword aligned */
3310 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf)
3311 {
3312  int ret;
3313 
3314  if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3317  udelay(40);
3318  }
3319 
3320  if (!tg3_flag(tp, NVRAM)) {
3321  ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf);
3322  } else {
3323  u32 grc_mode;
3324 
3325  ret = tg3_nvram_lock(tp);
3326  if (ret)
3327  return ret;
3328 
3329  tg3_enable_nvram_access(tp);
3330  if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM))
3331  tw32(NVRAM_WRITE1, 0x406);
3332 
3333  grc_mode = tr32(GRC_MODE);
3334  tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE);
3335 
3336  if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) {
3337  ret = tg3_nvram_write_block_buffered(tp, offset, len,
3338  buf);
3339  } else {
3340  ret = tg3_nvram_write_block_unbuffered(tp, offset, len,
3341  buf);
3342  }
3343 
3344  grc_mode = tr32(GRC_MODE);
3345  tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE);
3346 
3347  tg3_disable_nvram_access(tp);
3348  tg3_nvram_unlock(tp);
3349  }
3350 
3351  if (tg3_flag(tp, EEPROM_WRITE_PROT)) {
3353  udelay(40);
3354  }
3355 
3356  return ret;
3357 }
3358 
3359 #define RX_CPU_SCRATCH_BASE 0x30000
3360 #define RX_CPU_SCRATCH_SIZE 0x04000
3361 #define TX_CPU_SCRATCH_BASE 0x34000
3362 #define TX_CPU_SCRATCH_SIZE 0x04000
3363 
3364 /* tp->lock is held. */
3365 static int tg3_halt_cpu(struct tg3 *tp, u32 offset)
3366 {
3367  int i;
3368 
3369  BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS));
3370 
3372  u32 val = tr32(GRC_VCPU_EXT_CTRL);
3373 
3375  return 0;
3376  }
3377  if (offset == RX_CPU_BASE) {
3378  for (i = 0; i < 10000; i++) {
3379  tw32(offset + CPU_STATE, 0xffffffff);
3380  tw32(offset + CPU_MODE, CPU_MODE_HALT);
3381  if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3382  break;
3383  }
3384 
3385  tw32(offset + CPU_STATE, 0xffffffff);
3386  tw32_f(offset + CPU_MODE, CPU_MODE_HALT);
3387  udelay(10);
3388  } else {
3389  for (i = 0; i < 10000; i++) {
3390  tw32(offset + CPU_STATE, 0xffffffff);
3391  tw32(offset + CPU_MODE, CPU_MODE_HALT);
3392  if (tr32(offset + CPU_MODE) & CPU_MODE_HALT)
3393  break;
3394  }
3395  }
3396 
3397  if (i >= 10000) {
3398  netdev_err(tp->dev, "%s timed out, %s CPU\n",
3399  __func__, offset == RX_CPU_BASE ? "RX" : "TX");
3400  return -ENODEV;
3401  }
3402 
3403  /* Clear firmware's nvram arbitration. */
3404  if (tg3_flag(tp, NVRAM))
3406  return 0;
3407 }
3408 
3409 struct fw_info {
3410  unsigned int fw_base;
3411  unsigned int fw_len;
3412  const __be32 *fw_data;
3413 };
3414 
3415 /* tp->lock is held. */
3416 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base,
3417  u32 cpu_scratch_base, int cpu_scratch_size,
3418  struct fw_info *info)
3419 {
3420  int err, lock_err, i;
3421  void (*write_op)(struct tg3 *, u32, u32);
3422 
3423  if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) {
3424  netdev_err(tp->dev,
3425  "%s: Trying to load TX cpu firmware which is 5705\n",
3426  __func__);
3427  return -EINVAL;
3428  }
3429 
3430  if (tg3_flag(tp, 5705_PLUS))
3431  write_op = tg3_write_mem;
3432  else
3433  write_op = tg3_write_indirect_reg32;
3434 
3435  /* It is possible that bootcode is still loading at this point.
3436  * Get the nvram lock first before halting the cpu.
3437  */
3438  lock_err = tg3_nvram_lock(tp);
3439  err = tg3_halt_cpu(tp, cpu_base);
3440  if (!lock_err)
3441  tg3_nvram_unlock(tp);
3442  if (err)
3443  goto out;
3444 
3445  for (i = 0; i < cpu_scratch_size; i += sizeof(u32))
3446  write_op(tp, cpu_scratch_base + i, 0);
3447  tw32(cpu_base + CPU_STATE, 0xffffffff);
3448  tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT);
3449  for (i = 0; i < (info->fw_len / sizeof(u32)); i++)
3450  write_op(tp, (cpu_scratch_base +
3451  (info->fw_base & 0xffff) +
3452  (i * sizeof(u32))),
3453  be32_to_cpu(info->fw_data[i]));
3454 
3455  err = 0;
3456 
3457 out:
3458  return err;
3459 }
3460 
3461 /* tp->lock is held. */
3462 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp)
3463 {
3464  struct fw_info info;
3465  const __be32 *fw_data;
3466  int err, i;
3467 
3468  fw_data = (void *)tp->fw->data;
3469 
3470  /* Firmware blob starts with version numbers, followed by
3471  start address and length. We are setting complete length.
3472  length = end_address_of_bss - start_address_of_text.
3473  Remainder is the blob to be loaded contiguously
3474  from start address. */
3475 
3476  info.fw_base = be32_to_cpu(fw_data[1]);
3477  info.fw_len = tp->fw->size - 12;
3478  info.fw_data = &fw_data[3];
3479 
3480  err = tg3_load_firmware_cpu(tp, RX_CPU_BASE,
3482  &info);
3483  if (err)
3484  return err;
3485 
3486  err = tg3_load_firmware_cpu(tp, TX_CPU_BASE,
3488  &info);
3489  if (err)
3490  return err;
3491 
3492  /* Now startup only the RX cpu. */
3493  tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3494  tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3495 
3496  for (i = 0; i < 5; i++) {
3497  if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base)
3498  break;
3499  tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3501  tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base);
3502  udelay(1000);
3503  }
3504  if (i >= 5) {
3505  netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x "
3506  "should be %08x\n", __func__,
3507  tr32(RX_CPU_BASE + CPU_PC), info.fw_base);
3508  return -ENODEV;
3509  }
3510  tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff);
3511  tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000);
3512 
3513  return 0;
3514 }
3515 
3516 /* tp->lock is held. */
3517 static int tg3_load_tso_firmware(struct tg3 *tp)
3518 {
3519  struct fw_info info;
3520  const __be32 *fw_data;
3521  unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
3522  int err, i;
3523 
3524  if (tg3_flag(tp, HW_TSO_1) ||
3525  tg3_flag(tp, HW_TSO_2) ||
3526  tg3_flag(tp, HW_TSO_3))
3527  return 0;
3528 
3529  fw_data = (void *)tp->fw->data;
3530 
3531  /* Firmware blob starts with version numbers, followed by
3532  start address and length. We are setting complete length.
3533  length = end_address_of_bss - start_address_of_text.
3534  Remainder is the blob to be loaded contiguously
3535  from start address. */
3536 
3537  info.fw_base = be32_to_cpu(fw_data[1]);
3538  cpu_scratch_size = tp->fw_len;
3539  info.fw_len = tp->fw->size - 12;
3540  info.fw_data = &fw_data[3];
3541 
3543  cpu_base = RX_CPU_BASE;
3544  cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705;
3545  } else {
3546  cpu_base = TX_CPU_BASE;
3547  cpu_scratch_base = TX_CPU_SCRATCH_BASE;
3548  cpu_scratch_size = TX_CPU_SCRATCH_SIZE;
3549  }
3550 
3551  err = tg3_load_firmware_cpu(tp, cpu_base,
3552  cpu_scratch_base, cpu_scratch_size,
3553  &info);
3554  if (err)
3555  return err;
3556 
3557  /* Now startup the cpu. */
3558  tw32(cpu_base + CPU_STATE, 0xffffffff);
3559  tw32_f(cpu_base + CPU_PC, info.fw_base);
3560 
3561  for (i = 0; i < 5; i++) {
3562  if (tr32(cpu_base + CPU_PC) == info.fw_base)
3563  break;
3564  tw32(cpu_base + CPU_STATE, 0xffffffff);
3565  tw32(cpu_base + CPU_MODE, CPU_MODE_HALT);
3566  tw32_f(cpu_base + CPU_PC, info.fw_base);
3567  udelay(1000);
3568  }
3569  if (i >= 5) {
3570  netdev_err(tp->dev,
3571  "%s fails to set CPU PC, is %08x should be %08x\n",
3572  __func__, tr32(cpu_base + CPU_PC), info.fw_base);
3573  return -ENODEV;
3574  }
3575  tw32(cpu_base + CPU_STATE, 0xffffffff);
3576  tw32_f(cpu_base + CPU_MODE, 0x00000000);
3577  return 0;
3578 }
3579 
3580 
3581 /* tp->lock is held. */
3582 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1)
3583 {
3584  u32 addr_high, addr_low;
3585  int i;
3586 
3587  addr_high = ((tp->dev->dev_addr[0] << 8) |
3588  tp->dev->dev_addr[1]);
3589  addr_low = ((tp->dev->dev_addr[2] << 24) |
3590  (tp->dev->dev_addr[3] << 16) |
3591  (tp->dev->dev_addr[4] << 8) |
3592  (tp->dev->dev_addr[5] << 0));
3593  for (i = 0; i < 4; i++) {
3594  if (i == 1 && skip_mac_1)
3595  continue;
3596  tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high);
3597  tw32(MAC_ADDR_0_LOW + (i * 8), addr_low);
3598  }
3599 
3602  for (i = 0; i < 12; i++) {
3603  tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high);
3604  tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low);
3605  }
3606  }
3607 
3608  addr_high = (tp->dev->dev_addr[0] +
3609  tp->dev->dev_addr[1] +
3610  tp->dev->dev_addr[2] +
3611  tp->dev->dev_addr[3] +
3612  tp->dev->dev_addr[4] +
3613  tp->dev->dev_addr[5]) &
3615  tw32(MAC_TX_BACKOFF_SEED, addr_high);
3616 }
3617 
3618 static void tg3_enable_register_access(struct tg3 *tp)
3619 {
3620  /*
3621  * Make sure register accesses (indirect or otherwise) will function
3622  * correctly.
3623  */
3624  pci_write_config_dword(tp->pdev,
3626 }
3627 
3628 static int tg3_power_up(struct tg3 *tp)
3629 {
3630  int err;
3631 
3632  tg3_enable_register_access(tp);
3633 
3634  err = pci_set_power_state(tp->pdev, PCI_D0);
3635  if (!err) {
3636  /* Switch out of Vaux if it is a NIC */
3637  tg3_pwrsrc_switch_to_vmain(tp);
3638  } else {
3639  netdev_err(tp->dev, "Transition to D0 failed\n");
3640  }
3641 
3642  return err;
3643 }
3644 
3645 static int tg3_setup_phy(struct tg3 *, int);
3646 
3647 static int tg3_power_down_prepare(struct tg3 *tp)
3648 {
3649  u32 misc_host_ctrl;
3650  bool device_should_wake, do_low_power;
3651 
3652  tg3_enable_register_access(tp);
3653 
3654  /* Restore the CLKREQ setting. */
3655  if (tg3_flag(tp, CLKREQ_BUG))
3656  pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
3658 
3659  misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
3661  misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT);
3662 
3663  device_should_wake = device_may_wakeup(&tp->pdev->dev) &&
3664  tg3_flag(tp, WOL_ENABLE);
3665 
3666  if (tg3_flag(tp, USE_PHYLIB)) {
3667  do_low_power = false;
3668  if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) &&
3670  struct phy_device *phydev;
3671  u32 phyid, advertising;
3672 
3673  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
3674 
3676 
3677  tp->link_config.speed = phydev->speed;
3678  tp->link_config.duplex = phydev->duplex;
3679  tp->link_config.autoneg = phydev->autoneg;
3680  tp->link_config.advertising = phydev->advertising;
3681 
3682  advertising = ADVERTISED_TP |
3686 
3687  if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) {
3688  if (tg3_flag(tp, WOL_SPEED_100MB))
3689  advertising |=
3693  else
3694  advertising |= ADVERTISED_10baseT_Full;
3695  }
3696 
3697  phydev->advertising = advertising;
3698 
3699  phy_start_aneg(phydev);
3700 
3701  phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask;
3702  if (phyid != PHY_ID_BCMAC131) {
3703  phyid &= PHY_BCM_OUI_MASK;
3704  if (phyid == PHY_BCM_OUI_1 ||
3705  phyid == PHY_BCM_OUI_2 ||
3706  phyid == PHY_BCM_OUI_3)
3707  do_low_power = true;
3708  }
3709  }
3710  } else {
3711  do_low_power = true;
3712 
3713  if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER))
3715 
3716  if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
3717  tg3_setup_phy(tp, 0);
3718  }
3719 
3721  u32 val;
3722 
3723  val = tr32(GRC_VCPU_EXT_CTRL);
3725  } else if (!tg3_flag(tp, ENABLE_ASF)) {
3726  int i;
3727  u32 val;
3728 
3729  for (i = 0; i < 200; i++) {
3730  tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val);
3731  if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1)
3732  break;
3733  msleep(1);
3734  }
3735  }
3736  if (tg3_flag(tp, WOL_CAP))
3737  tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE |
3739  WOL_DRV_WOL |
3741 
3742  if (device_should_wake) {
3743  u32 mac_mode;
3744 
3745  if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
3746  if (do_low_power &&
3747  !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
3748  tg3_phy_auxctl_write(tp,
3753  udelay(40);
3754  }
3755 
3756  if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
3757  mac_mode = MAC_MODE_PORT_MODE_GMII;
3758  else
3759  mac_mode = MAC_MODE_PORT_MODE_MII;
3760 
3761  mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY;
3762  if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
3763  ASIC_REV_5700) {
3764  u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ?
3765  SPEED_100 : SPEED_10;
3766  if (tg3_5700_link_polarity(tp, speed))
3767  mac_mode |= MAC_MODE_LINK_POLARITY;
3768  else
3769  mac_mode &= ~MAC_MODE_LINK_POLARITY;
3770  }
3771  } else {
3772  mac_mode = MAC_MODE_PORT_MODE_TBI;
3773  }
3774 
3775  if (!tg3_flag(tp, 5750_PLUS))
3776  tw32(MAC_LED_CTRL, tp->led_ctrl);
3777 
3778  mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE;
3779  if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) &&
3780  (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)))
3781  mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL;
3782 
3783  if (tg3_flag(tp, ENABLE_APE))
3784  mac_mode |= MAC_MODE_APE_TX_EN |
3787 
3788  tw32_f(MAC_MODE, mac_mode);
3789  udelay(100);
3790 
3792  udelay(10);
3793  }
3794 
3795  if (!tg3_flag(tp, WOL_SPEED_100MB) &&
3798  u32 base_val;
3799 
3800  base_val = tp->pci_clock_ctrl;
3801  base_val |= (CLOCK_CTRL_RXCLK_DISABLE |
3803 
3806  } else if (tg3_flag(tp, 5780_CLASS) ||
3807  tg3_flag(tp, CPMU_PRESENT) ||
3809  /* do nothing */
3810  } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) {
3811  u32 newbits1, newbits2;
3812 
3815  newbits1 = (CLOCK_CTRL_RXCLK_DISABLE |
3818  newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3819  } else if (tg3_flag(tp, 5705_PLUS)) {
3820  newbits1 = CLOCK_CTRL_625_CORE;
3821  newbits2 = newbits1 | CLOCK_CTRL_ALTCLK;
3822  } else {
3823  newbits1 = CLOCK_CTRL_ALTCLK;
3824  newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE;
3825  }
3826 
3828  40);
3829 
3831  40);
3832 
3833  if (!tg3_flag(tp, 5705_PLUS)) {
3834  u32 newbits3;
3835 
3838  newbits3 = (CLOCK_CTRL_RXCLK_DISABLE |
3841  } else {
3842  newbits3 = CLOCK_CTRL_44MHZ_CORE;
3843  }
3844 
3846  tp->pci_clock_ctrl | newbits3, 40);
3847  }
3848  }
3849 
3850  if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF))
3851  tg3_power_down_phy(tp, do_low_power);
3852 
3853  tg3_frob_aux_power(tp, true);
3854 
3855  /* Workaround for unstable PLL clock */
3858  u32 val = tr32(0x7d00);
3859 
3860  val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
3861  tw32(0x7d00, val);
3862  if (!tg3_flag(tp, ENABLE_ASF)) {
3863  int err;
3864 
3865  err = tg3_nvram_lock(tp);
3866  tg3_halt_cpu(tp, RX_CPU_BASE);
3867  if (!err)
3868  tg3_nvram_unlock(tp);
3869  }
3870  }
3871 
3872  tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
3873 
3874  return 0;
3875 }
3876 
3877 static void tg3_power_down(struct tg3 *tp)
3878 {
3879  tg3_power_down_prepare(tp);
3880 
3881  pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE));
3883 }
3884 
3885 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex)
3886 {
3887  switch (val & MII_TG3_AUX_STAT_SPDMASK) {
3889  *speed = SPEED_10;
3890  *duplex = DUPLEX_HALF;
3891  break;
3892 
3894  *speed = SPEED_10;
3895  *duplex = DUPLEX_FULL;
3896  break;
3897 
3899  *speed = SPEED_100;
3900  *duplex = DUPLEX_HALF;
3901  break;
3902 
3904  *speed = SPEED_100;
3905  *duplex = DUPLEX_FULL;
3906  break;
3907 
3909  *speed = SPEED_1000;
3910  *duplex = DUPLEX_HALF;
3911  break;
3912 
3914  *speed = SPEED_1000;
3915  *duplex = DUPLEX_FULL;
3916  break;
3917 
3918  default:
3919  if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
3920  *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 :
3921  SPEED_10;
3922  *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL :
3923  DUPLEX_HALF;
3924  break;
3925  }
3926  *speed = SPEED_UNKNOWN;
3927  *duplex = DUPLEX_UNKNOWN;
3928  break;
3929  }
3930 }
3931 
3932 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl)
3933 {
3934  int err = 0;
3935  u32 val, new_adv;
3936 
3937  new_adv = ADVERTISE_CSMA;
3938  new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL;
3939  new_adv |= mii_advertise_flowctrl(flowctrl);
3940 
3941  err = tg3_writephy(tp, MII_ADVERTISE, new_adv);
3942  if (err)
3943  goto done;
3944 
3945  if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
3946  new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise);
3947 
3948  if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
3951 
3952  err = tg3_writephy(tp, MII_CTRL1000, new_adv);
3953  if (err)
3954  goto done;
3955  }
3956 
3957  if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
3958  goto done;
3959 
3962 
3963  err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp);
3964  if (!err) {
3965  u32 err2;
3966 
3967  val = 0;
3968  /* Advertise 100-BaseTX EEE ability */
3969  if (advertise & ADVERTISED_100baseT_Full)
3970  val |= MDIO_AN_EEE_ADV_100TX;
3971  /* Advertise 1000-BaseT EEE ability */
3972  if (advertise & ADVERTISED_1000baseT_Full)
3973  val |= MDIO_AN_EEE_ADV_1000T;
3974  err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val);
3975  if (err)
3976  val = 0;
3977 
3978  switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
3979  case ASIC_REV_5717:
3980  case ASIC_REV_57765:
3981  case ASIC_REV_57766:
3982  case ASIC_REV_5719:
3983  /* If we advertised any eee advertisements above... */
3984  if (val)
3985  val = MII_TG3_DSP_TAP26_ALNOKO |
3988  tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
3989  /* Fall through */
3990  case ASIC_REV_5720:
3991  if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
3992  tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
3994  }
3995 
3996  err2 = TG3_PHY_AUXCTL_SMDSP_DISABLE(tp);
3997  if (!err)
3998  err = err2;
3999  }
4000 
4001 done:
4002  return err;
4003 }
4004 
4005 static void tg3_phy_copper_begin(struct tg3 *tp)
4006 {
4007  if (tp->link_config.autoneg == AUTONEG_ENABLE ||
4009  u32 adv, fc;
4010 
4011  if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
4012  adv = ADVERTISED_10baseT_Half |
4014  if (tg3_flag(tp, WOL_SPEED_100MB))
4015  adv |= ADVERTISED_100baseT_Half |
4017 
4018  fc = FLOW_CTRL_TX | FLOW_CTRL_RX;
4019  } else {
4020  adv = tp->link_config.advertising;
4022  adv &= ~(ADVERTISED_1000baseT_Half |
4024 
4025  fc = tp->link_config.flowctrl;
4026  }
4027 
4028  tg3_phy_autoneg_cfg(tp, adv, fc);
4029 
4030  tg3_writephy(tp, MII_BMCR,
4032  } else {
4033  int i;
4034  u32 bmcr, orig_bmcr;
4035 
4036  tp->link_config.active_speed = tp->link_config.speed;
4037  tp->link_config.active_duplex = tp->link_config.duplex;
4038 
4039  bmcr = 0;
4040  switch (tp->link_config.speed) {
4041  default:
4042  case SPEED_10:
4043  break;
4044 
4045  case SPEED_100:
4046  bmcr |= BMCR_SPEED100;
4047  break;
4048 
4049  case SPEED_1000:
4050  bmcr |= BMCR_SPEED1000;
4051  break;
4052  }
4053 
4054  if (tp->link_config.duplex == DUPLEX_FULL)
4055  bmcr |= BMCR_FULLDPLX;
4056 
4057  if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) &&
4058  (bmcr != orig_bmcr)) {
4059  tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK);
4060  for (i = 0; i < 1500; i++) {
4061  u32 tmp;
4062 
4063  udelay(10);
4064  if (tg3_readphy(tp, MII_BMSR, &tmp) ||
4065  tg3_readphy(tp, MII_BMSR, &tmp))
4066  continue;
4067  if (!(tmp & BMSR_LSTATUS)) {
4068  udelay(40);
4069  break;
4070  }
4071  }
4072  tg3_writephy(tp, MII_BMCR, bmcr);
4073  udelay(40);
4074  }
4075  }
4076 }
4077 
4078 static int tg3_init_5401phy_dsp(struct tg3 *tp)
4079 {
4080  int err;
4081 
4082  /* Turn off tap power management. */
4083  /* Set Extended packet length bit */
4084  err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20);
4085 
4086  err |= tg3_phydsp_write(tp, 0x0012, 0x1804);
4087  err |= tg3_phydsp_write(tp, 0x0013, 0x1204);
4088  err |= tg3_phydsp_write(tp, 0x8006, 0x0132);
4089  err |= tg3_phydsp_write(tp, 0x8006, 0x0232);
4090  err |= tg3_phydsp_write(tp, 0x201f, 0x0a20);
4091 
4092  udelay(40);
4093 
4094  return err;
4095 }
4096 
4097 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv)
4098 {
4099  u32 advmsk, tgtadv, advertising;
4100 
4101  advertising = tp->link_config.advertising;
4102  tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL;
4103 
4104  advmsk = ADVERTISE_ALL;
4105  if (tp->link_config.active_duplex == DUPLEX_FULL) {
4106  tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl);
4108  }
4109 
4110  if (tg3_readphy(tp, MII_ADVERTISE, lcladv))
4111  return false;
4112 
4113  if ((*lcladv & advmsk) != tgtadv)
4114  return false;
4115 
4116  if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4117  u32 tg3_ctrl;
4118 
4119  tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising);
4120 
4121  if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl))
4122  return false;
4123 
4124  if (tgtadv &&
4128  tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL |
4130  } else {
4131  tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL);
4132  }
4133 
4134  if (tg3_ctrl != tgtadv)
4135  return false;
4136  }
4137 
4138  return true;
4139 }
4140 
4141 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv)
4142 {
4143  u32 lpeth = 0;
4144 
4145  if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) {
4146  u32 val;
4147 
4148  if (tg3_readphy(tp, MII_STAT1000, &val))
4149  return false;
4150 
4151  lpeth = mii_stat1000_to_ethtool_lpa_t(val);
4152  }
4153 
4154  if (tg3_readphy(tp, MII_LPA, rmtadv))
4155  return false;
4156 
4157  lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv);
4158  tp->link_config.rmt_adv = lpeth;
4159 
4160  return true;
4161 }
4162 
4163 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset)
4164 {
4165  int current_link_up;
4166  u32 bmsr, val;
4167  u32 lcl_adv, rmt_adv;
4168  u16 current_speed;
4169  u8 current_duplex;
4170  int i, err;
4171 
4172  tw32(MAC_EVENT, 0);
4173 
4179  udelay(40);
4180 
4181  if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) {
4183  (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL));
4184  udelay(80);
4185  }
4186 
4187  tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0);
4188 
4189  /* Some third-party PHYs need to be reset on link going
4190  * down.
4191  */
4195  netif_carrier_ok(tp->dev)) {
4196  tg3_readphy(tp, MII_BMSR, &bmsr);
4197  if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4198  !(bmsr & BMSR_LSTATUS))
4199  force_reset = 1;
4200  }
4201  if (force_reset)
4202  tg3_phy_reset(tp);
4203 
4204  if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
4205  tg3_readphy(tp, MII_BMSR, &bmsr);
4206  if (tg3_readphy(tp, MII_BMSR, &bmsr) ||
4207  !tg3_flag(tp, INIT_COMPLETE))
4208  bmsr = 0;
4209 
4210  if (!(bmsr & BMSR_LSTATUS)) {
4211  err = tg3_init_5401phy_dsp(tp);
4212  if (err)
4213  return err;
4214 
4215  tg3_readphy(tp, MII_BMSR, &bmsr);
4216  for (i = 0; i < 1000; i++) {
4217  udelay(10);
4218  if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4219  (bmsr & BMSR_LSTATUS)) {
4220  udelay(40);
4221  break;
4222  }
4223  }
4224 
4225  if ((tp->phy_id & TG3_PHY_ID_REV_MASK) ==
4227  !(bmsr & BMSR_LSTATUS) &&
4228  tp->link_config.active_speed == SPEED_1000) {
4229  err = tg3_phy_reset(tp);
4230  if (!err)
4231  err = tg3_init_5401phy_dsp(tp);
4232  if (err)
4233  return err;
4234  }
4235  }
4236  } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 ||
4238  /* 5701 {A0,B0} CRC bug workaround */
4239  tg3_writephy(tp, 0x15, 0x0a75);
4240  tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4241  tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68);
4242  tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68);
4243  }
4244 
4245  /* Clear pending interrupts... */
4246  tg3_readphy(tp, MII_TG3_ISTAT, &val);
4247  tg3_readphy(tp, MII_TG3_ISTAT, &val);
4248 
4250  tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG);
4251  else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET))
4252  tg3_writephy(tp, MII_TG3_IMASK, ~0);
4253 
4256  if (tp->led_ctrl == LED_CTRL_MODE_PHY_1)
4257  tg3_writephy(tp, MII_TG3_EXT_CTRL,
4259  else
4260  tg3_writephy(tp, MII_TG3_EXT_CTRL, 0);
4261  }
4262 
4263  current_link_up = 0;
4264  current_speed = SPEED_UNKNOWN;
4265  current_duplex = DUPLEX_UNKNOWN;
4267  tp->link_config.rmt_adv = 0;
4268 
4270  err = tg3_phy_auxctl_read(tp,
4272  &val);
4273  if (!err && !(val & (1 << 10))) {
4274  tg3_phy_auxctl_write(tp,
4276  val | (1 << 10));
4277  goto relink;
4278  }
4279  }
4280 
4281  bmsr = 0;
4282  for (i = 0; i < 100; i++) {
4283  tg3_readphy(tp, MII_BMSR, &bmsr);
4284  if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
4285  (bmsr & BMSR_LSTATUS))
4286  break;
4287  udelay(40);
4288  }
4289 
4290  if (bmsr & BMSR_LSTATUS) {
4291  u32 aux_stat, bmcr;
4292 
4293  tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat);
4294  for (i = 0; i < 2000; i++) {
4295  udelay(10);
4296  if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) &&
4297  aux_stat)
4298  break;
4299  }
4300 
4301  tg3_aux_stat_to_speed_duplex(tp, aux_stat,
4302  &current_speed,
4303  &current_duplex);
4304 
4305  bmcr = 0;
4306  for (i = 0; i < 200; i++) {
4307  tg3_readphy(tp, MII_BMCR, &bmcr);
4308  if (tg3_readphy(tp, MII_BMCR, &bmcr))
4309  continue;
4310  if (bmcr && bmcr != 0x7fff)
4311  break;
4312  udelay(10);
4313  }
4314 
4315  lcl_adv = 0;
4316  rmt_adv = 0;
4317 
4318  tp->link_config.active_speed = current_speed;
4319  tp->link_config.active_duplex = current_duplex;
4320 
4321  if (tp->link_config.autoneg == AUTONEG_ENABLE) {
4322  if ((bmcr & BMCR_ANENABLE) &&
4323  tg3_phy_copper_an_config_ok(tp, &lcl_adv) &&
4324  tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv))
4325  current_link_up = 1;
4326  } else {
4327  if (!(bmcr & BMCR_ANENABLE) &&
4328  tp->link_config.speed == current_speed &&
4329  tp->link_config.duplex == current_duplex &&
4330  tp->link_config.flowctrl ==
4331  tp->link_config.active_flowctrl) {
4332  current_link_up = 1;
4333  }
4334  }
4335 
4336  if (current_link_up == 1 &&
4337  tp->link_config.active_duplex == DUPLEX_FULL) {
4338  u32 reg, bit;
4339 
4340  if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
4341  reg = MII_TG3_FET_GEN_STAT;
4343  } else {
4344  reg = MII_TG3_EXT_STAT;
4345  bit = MII_TG3_EXT_STAT_MDIX;
4346  }
4347 
4348  if (!tg3_readphy(tp, reg, &val) && (val & bit))
4350 
4351  tg3_setup_flow_control(tp, lcl_adv, rmt_adv);
4352  }
4353  }
4354 
4355 relink:
4356  if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) {
4357  tg3_phy_copper_begin(tp);
4358 
4359  tg3_readphy(tp, MII_BMSR, &bmsr);
4360  if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) ||
4362  current_link_up = 1;
4363  }
4364 
4366  if (current_link_up == 1) {
4367  if (tp->link_config.active_speed == SPEED_100 ||
4368  tp->link_config.active_speed == SPEED_10)
4370  else
4372  } else if (tp->phy_flags & TG3_PHYFLG_IS_FET)
4374  else
4376 
4378  if (tp->link_config.active_duplex == DUPLEX_HALF)
4380 
4382  if (current_link_up == 1 &&
4383  tg3_5700_link_polarity(tp, tp->link_config.active_speed))
4385  else
4387  }
4388 
4389  /* ??? Without this setting Netgear GA302T PHY does not
4390  * ??? send/receive packets...
4391  */
4392  if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 &&
4395  tw32_f(MAC_MI_MODE, tp->mi_mode);
4396  udelay(80);
4397  }
4398 
4399  tw32_f(MAC_MODE, tp->mac_mode);
4400  udelay(40);
4401 
4402  tg3_phy_eee_adjust(tp, current_link_up);
4403 
4404  if (tg3_flag(tp, USE_LINKCHG_REG)) {
4405  /* Polled via timer. */
4406  tw32_f(MAC_EVENT, 0);
4407  } else {
4409  }
4410  udelay(40);
4411 
4413  current_link_up == 1 &&
4414  tp->link_config.active_speed == SPEED_1000 &&
4415  (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) {
4416  udelay(120);
4420  udelay(40);
4421  tg3_write_mem(tp,
4424  }
4425 
4426  /* Prevent send BD corruption. */
4427  if (tg3_flag(tp, CLKREQ_BUG)) {
4428  if (tp->link_config.active_speed == SPEED_100 ||
4429  tp->link_config.active_speed == SPEED_10)
4430  pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL,
4432  else
4433  pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL,
4435  }
4436 
4437  if (current_link_up != netif_carrier_ok(tp->dev)) {
4438  if (current_link_up)
4439  netif_carrier_on(tp->dev);
4440  else
4441  netif_carrier_off(tp->dev);
4442  tg3_link_report(tp);
4443  }
4444 
4445  return 0;
4446 }
4447 
4449  int state;
4450 #define ANEG_STATE_UNKNOWN 0
4451 #define ANEG_STATE_AN_ENABLE 1
4452 #define ANEG_STATE_RESTART_INIT 2
4453 #define ANEG_STATE_RESTART 3
4454 #define ANEG_STATE_DISABLE_LINK_OK 4
4455 #define ANEG_STATE_ABILITY_DETECT_INIT 5
4456 #define ANEG_STATE_ABILITY_DETECT 6
4457 #define ANEG_STATE_ACK_DETECT_INIT 7
4458 #define ANEG_STATE_ACK_DETECT 8
4459 #define ANEG_STATE_COMPLETE_ACK_INIT 9
4460 #define ANEG_STATE_COMPLETE_ACK 10
4461 #define ANEG_STATE_IDLE_DETECT_INIT 11
4462 #define ANEG_STATE_IDLE_DETECT 12
4463 #define ANEG_STATE_LINK_OK 13
4464 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14
4465 #define ANEG_STATE_NEXT_PAGE_WAIT 15
4466 
4467  u32 flags;
4468 #define MR_AN_ENABLE 0x00000001
4469 #define MR_RESTART_AN 0x00000002
4470 #define MR_AN_COMPLETE 0x00000004
4471 #define MR_PAGE_RX 0x00000008
4472 #define MR_NP_LOADED 0x00000010
4473 #define MR_TOGGLE_TX 0x00000020
4474 #define MR_LP_ADV_FULL_DUPLEX 0x00000040
4475 #define MR_LP_ADV_HALF_DUPLEX 0x00000080
4476 #define MR_LP_ADV_SYM_PAUSE 0x00000100
4477 #define MR_LP_ADV_ASYM_PAUSE 0x00000200
4478 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400
4479 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800
4480 #define MR_LP_ADV_NEXT_PAGE 0x00001000
4481 #define MR_TOGGLE_RX 0x00002000
4482 #define MR_NP_RX 0x00004000
4483 
4484 #define MR_LINK_OK 0x80000000
4485 
4486  unsigned long link_time, cur_time;
4487 
4490 
4492 
4494 #define ANEG_CFG_NP 0x00000080
4495 #define ANEG_CFG_ACK 0x00000040
4496 #define ANEG_CFG_RF2 0x00000020
4497 #define ANEG_CFG_RF1 0x00000010
4498 #define ANEG_CFG_PS2 0x00000001
4499 #define ANEG_CFG_PS1 0x00008000
4500 #define ANEG_CFG_HD 0x00004000
4501 #define ANEG_CFG_FD 0x00002000
4502 #define ANEG_CFG_INVAL 0x00001f06
4503 
4504 };
4505 #define ANEG_OK 0
4506 #define ANEG_DONE 1
4507 #define ANEG_TIMER_ENAB 2
4508 #define ANEG_FAILED -1
4509 
4510 #define ANEG_STATE_SETTLE_TIME 10000
4511 
4512 static int tg3_fiber_aneg_smachine(struct tg3 *tp,
4513  struct tg3_fiber_aneginfo *ap)
4514 {
4515  u16 flowctrl;
4516  unsigned long delta;
4517  u32 rx_cfg_reg;
4518  int ret;
4519 
4520  if (ap->state == ANEG_STATE_UNKNOWN) {
4521  ap->rxconfig = 0;
4522  ap->link_time = 0;
4523  ap->cur_time = 0;
4524  ap->ability_match_cfg = 0;
4525  ap->ability_match_count = 0;
4526  ap->ability_match = 0;
4527  ap->idle_match = 0;
4528  ap->ack_match = 0;
4529  }
4530  ap->cur_time++;
4531 
4533  rx_cfg_reg = tr32(MAC_RX_AUTO_NEG);
4534 
4535  if (rx_cfg_reg != ap->ability_match_cfg) {
4536  ap->ability_match_cfg = rx_cfg_reg;
4537  ap->ability_match = 0;
4538  ap->ability_match_count = 0;
4539  } else {
4540  if (++ap->ability_match_count > 1) {
4541  ap->ability_match = 1;
4542  ap->ability_match_cfg = rx_cfg_reg;
4543  }
4544  }
4545  if (rx_cfg_reg & ANEG_CFG_ACK)
4546  ap->ack_match = 1;
4547  else
4548  ap->ack_match = 0;
4549 
4550  ap->idle_match = 0;
4551  } else {
4552  ap->idle_match = 1;
4553  ap->ability_match_cfg = 0;
4554  ap->ability_match_count = 0;
4555  ap->ability_match = 0;
4556  ap->ack_match = 0;
4557 
4558  rx_cfg_reg = 0;
4559  }
4560 
4561  ap->rxconfig = rx_cfg_reg;
4562  ret = ANEG_OK;
4563 
4564  switch (ap->state) {
4565  case ANEG_STATE_UNKNOWN:
4566  if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN))
4568 
4569  /* fallthru */
4570  case ANEG_STATE_AN_ENABLE:
4571  ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX);
4572  if (ap->flags & MR_AN_ENABLE) {
4573  ap->link_time = 0;
4574  ap->cur_time = 0;
4575  ap->ability_match_cfg = 0;
4576  ap->ability_match_count = 0;
4577  ap->ability_match = 0;
4578  ap->idle_match = 0;
4579  ap->ack_match = 0;
4580 
4582  } else {
4584  }
4585  break;
4586 
4588  ap->link_time = ap->cur_time;
4589  ap->flags &= ~(MR_NP_LOADED);
4590  ap->txconfig = 0;
4591  tw32(MAC_TX_AUTO_NEG, 0);
4593  tw32_f(MAC_MODE, tp->mac_mode);
4594  udelay(40);
4595 
4596  ret = ANEG_TIMER_ENAB;
4597  ap->state = ANEG_STATE_RESTART;
4598 
4599  /* fallthru */
4600  case ANEG_STATE_RESTART:
4601  delta = ap->cur_time - ap->link_time;
4602  if (delta > ANEG_STATE_SETTLE_TIME)
4604  else
4605  ret = ANEG_TIMER_ENAB;
4606  break;
4607 
4609  ret = ANEG_DONE;
4610  break;
4611 
4613  ap->flags &= ~(MR_TOGGLE_TX);
4614  ap->txconfig = ANEG_CFG_FD;
4615  flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4616  if (flowctrl & ADVERTISE_1000XPAUSE)
4617  ap->txconfig |= ANEG_CFG_PS1;
4618  if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4619  ap->txconfig |= ANEG_CFG_PS2;
4622  tw32_f(MAC_MODE, tp->mac_mode);
4623  udelay(40);
4624 
4626  break;
4627 
4629  if (ap->ability_match != 0 && ap->rxconfig != 0)
4631  break;
4632 
4634  ap->txconfig |= ANEG_CFG_ACK;
4637  tw32_f(MAC_MODE, tp->mac_mode);
4638  udelay(40);
4639 
4641 
4642  /* fallthru */
4643  case ANEG_STATE_ACK_DETECT:
4644  if (ap->ack_match != 0) {
4645  if ((ap->rxconfig & ~ANEG_CFG_ACK) ==
4646  (ap->ability_match_cfg & ~ANEG_CFG_ACK)) {
4648  } else {
4650  }
4651  } else if (ap->ability_match != 0 &&
4652  ap->rxconfig == 0) {
4654  }
4655  break;
4656 
4658  if (ap->rxconfig & ANEG_CFG_INVAL) {
4659  ret = ANEG_FAILED;
4660  break;
4661  }
4662  ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX |
4669  MR_TOGGLE_RX |
4670  MR_NP_RX);
4671  if (ap->rxconfig & ANEG_CFG_FD)
4673  if (ap->rxconfig & ANEG_CFG_HD)
4675  if (ap->rxconfig & ANEG_CFG_PS1)
4676  ap->flags |= MR_LP_ADV_SYM_PAUSE;
4677  if (ap->rxconfig & ANEG_CFG_PS2)
4678  ap->flags |= MR_LP_ADV_ASYM_PAUSE;
4679  if (ap->rxconfig & ANEG_CFG_RF1)
4681  if (ap->rxconfig & ANEG_CFG_RF2)
4683  if (ap->rxconfig & ANEG_CFG_NP)
4684  ap->flags |= MR_LP_ADV_NEXT_PAGE;
4685 
4686  ap->link_time = ap->cur_time;
4687 
4688  ap->flags ^= (MR_TOGGLE_TX);
4689  if (ap->rxconfig & 0x0008)
4690  ap->flags |= MR_TOGGLE_RX;
4691  if (ap->rxconfig & ANEG_CFG_NP)
4692  ap->flags |= MR_NP_RX;
4693  ap->flags |= MR_PAGE_RX;
4694 
4696  ret = ANEG_TIMER_ENAB;
4697  break;
4698 
4700  if (ap->ability_match != 0 &&
4701  ap->rxconfig == 0) {
4703  break;
4704  }
4705  delta = ap->cur_time - ap->link_time;
4706  if (delta > ANEG_STATE_SETTLE_TIME) {
4707  if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) {
4709  } else {
4710  if ((ap->txconfig & ANEG_CFG_NP) == 0 &&
4711  !(ap->flags & MR_NP_RX)) {
4713  } else {
4714  ret = ANEG_FAILED;
4715  }
4716  }
4717  }
4718  break;
4719 
4721  ap->link_time = ap->cur_time;
4723  tw32_f(MAC_MODE, tp->mac_mode);
4724  udelay(40);
4725 
4727  ret = ANEG_TIMER_ENAB;
4728  break;
4729 
4731  if (ap->ability_match != 0 &&
4732  ap->rxconfig == 0) {
4734  break;
4735  }
4736  delta = ap->cur_time - ap->link_time;
4737  if (delta > ANEG_STATE_SETTLE_TIME) {
4738  /* XXX another gem from the Broadcom driver :( */
4739  ap->state = ANEG_STATE_LINK_OK;
4740  }
4741  break;
4742 
4743  case ANEG_STATE_LINK_OK:
4744  ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK);
4745  ret = ANEG_DONE;
4746  break;
4747 
4749  /* ??? unimplemented */
4750  break;
4751 
4753  /* ??? unimplemented */
4754  break;
4755 
4756  default:
4757  ret = ANEG_FAILED;
4758  break;
4759  }
4760 
4761  return ret;
4762 }
4763 
4764 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags)
4765 {
4766  int res = 0;
4767  struct tg3_fiber_aneginfo aninfo;
4768  int status = ANEG_FAILED;
4769  unsigned int tick;
4770  u32 tmp;
4771 
4772  tw32_f(MAC_TX_AUTO_NEG, 0);
4773 
4774  tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK;
4776  udelay(40);
4777 
4779  udelay(40);
4780 
4781  memset(&aninfo, 0, sizeof(aninfo));
4782  aninfo.flags |= MR_AN_ENABLE;
4783  aninfo.state = ANEG_STATE_UNKNOWN;
4784  aninfo.cur_time = 0;
4785  tick = 0;
4786  while (++tick < 195000) {
4787  status = tg3_fiber_aneg_smachine(tp, &aninfo);
4788  if (status == ANEG_DONE || status == ANEG_FAILED)
4789  break;
4790 
4791  udelay(1);
4792  }
4793 
4795  tw32_f(MAC_MODE, tp->mac_mode);
4796  udelay(40);
4797 
4798  *txflags = aninfo.txconfig;
4799  *rxflags = aninfo.flags;
4800 
4801  if (status == ANEG_DONE &&
4802  (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK |
4804  res = 1;
4805 
4806  return res;
4807 }
4808 
4809 static void tg3_init_bcm8002(struct tg3 *tp)
4810 {
4811  u32 mac_status = tr32(MAC_STATUS);
4812  int i;
4813 
4814  /* Reset when initting first time or we have a link. */
4815  if (tg3_flag(tp, INIT_COMPLETE) &&
4816  !(mac_status & MAC_STATUS_PCS_SYNCED))
4817  return;
4818 
4819  /* Set PLL lock range. */
4820  tg3_writephy(tp, 0x16, 0x8007);
4821 
4822  /* SW reset */
4823  tg3_writephy(tp, MII_BMCR, BMCR_RESET);
4824 
4825  /* Wait for reset to complete. */
4826  /* XXX schedule_timeout() ... */
4827  for (i = 0; i < 500; i++)
4828  udelay(10);
4829 
4830  /* Config mode; select PMA/Ch 1 regs. */
4831  tg3_writephy(tp, 0x10, 0x8411);
4832 
4833  /* Enable auto-lock and comdet, select txclk for tx. */
4834  tg3_writephy(tp, 0x11, 0x0a10);
4835 
4836  tg3_writephy(tp, 0x18, 0x00a0);
4837  tg3_writephy(tp, 0x16, 0x41ff);
4838 
4839  /* Assert and deassert POR. */
4840  tg3_writephy(tp, 0x13, 0x0400);
4841  udelay(40);
4842  tg3_writephy(tp, 0x13, 0x0000);
4843 
4844  tg3_writephy(tp, 0x11, 0x0a50);
4845  udelay(40);
4846  tg3_writephy(tp, 0x11, 0x0a10);
4847 
4848  /* Wait for signal to stabilize */
4849  /* XXX schedule_timeout() ... */
4850  for (i = 0; i < 15000; i++)
4851  udelay(10);
4852 
4853  /* Deselect the channel register so we can read the PHYID
4854  * later.
4855  */
4856  tg3_writephy(tp, 0x10, 0x8011);
4857 }
4858 
4859 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status)
4860 {
4861  u16 flowctrl;
4862  u32 sg_dig_ctrl, sg_dig_status;
4863  u32 serdes_cfg, expected_sg_dig_ctrl;
4864  int workaround, port_a;
4865  int current_link_up;
4866 
4867  serdes_cfg = 0;
4868  expected_sg_dig_ctrl = 0;
4869  workaround = 0;
4870  port_a = 1;
4871  current_link_up = 0;
4872 
4873  if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 &&
4875  workaround = 1;
4877  port_a = 0;
4878 
4879  /* preserve bits 0-11,13,14 for signal pre-emphasis */
4880  /* preserve bits 20-23 for voltage regulator */
4881  serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff;
4882  }
4883 
4884  sg_dig_ctrl = tr32(SG_DIG_CTRL);
4885 
4886  if (tp->link_config.autoneg != AUTONEG_ENABLE) {
4887  if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) {
4888  if (workaround) {
4889  u32 val = serdes_cfg;
4890 
4891  if (port_a)
4892  val |= 0xc010000;
4893  else
4894  val |= 0x4010000;
4895  tw32_f(MAC_SERDES_CFG, val);
4896  }
4897 
4899  }
4900  if (mac_status & MAC_STATUS_PCS_SYNCED) {
4901  tg3_setup_flow_control(tp, 0, 0);
4902  current_link_up = 1;
4903  }
4904  goto out;
4905  }
4906 
4907  /* Want auto-negotiation. */
4908  expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP;
4909 
4910  flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
4911  if (flowctrl & ADVERTISE_1000XPAUSE)
4912  expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP;
4913  if (flowctrl & ADVERTISE_1000XPSE_ASYM)
4914  expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE;
4915 
4916  if (sg_dig_ctrl != expected_sg_dig_ctrl) {
4917  if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) &&
4918  tp->serdes_counter &&
4919  ((mac_status & (MAC_STATUS_PCS_SYNCED |
4920  MAC_STATUS_RCVD_CFG)) ==
4921  MAC_STATUS_PCS_SYNCED)) {
4922  tp->serdes_counter--;
4923  current_link_up = 1;
4924  goto out;
4925  }
4926 restart_autoneg:
4927  if (workaround)
4928  tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000);
4929  tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET);
4930  udelay(5);
4931  tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl);
4932 
4935  } else if (mac_status & (MAC_STATUS_PCS_SYNCED |
4937  sg_dig_status = tr32(SG_DIG_STATUS);
4938  mac_status = tr32(MAC_STATUS);
4939 
4940  if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) &&
4941  (mac_status & MAC_STATUS_PCS_SYNCED)) {
4942  u32 local_adv = 0, remote_adv = 0;
4943 
4944  if (sg_dig_ctrl & SG_DIG_PAUSE_CAP)
4945  local_adv |= ADVERTISE_1000XPAUSE;
4946  if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE)
4947  local_adv |= ADVERTISE_1000XPSE_ASYM;
4948 
4949  if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE)
4950  remote_adv |= LPA_1000XPAUSE;
4951  if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE)
4952  remote_adv |= LPA_1000XPAUSE_ASYM;
4953 
4954  tp->link_config.rmt_adv =
4955  mii_adv_to_ethtool_adv_x(remote_adv);
4956 
4957  tg3_setup_flow_control(tp, local_adv, remote_adv);
4958  current_link_up = 1;
4959  tp->serdes_counter = 0;
4961  } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) {
4962  if (tp->serdes_counter)
4963  tp->serdes_counter--;
4964  else {
4965  if (workaround) {
4966  u32 val = serdes_cfg;
4967 
4968  if (port_a)
4969  val |= 0xc010000;
4970  else
4971  val |= 0x4010000;
4972 
4973  tw32_f(MAC_SERDES_CFG, val);
4974  }
4975 
4977  udelay(40);
4978 
4979  /* Link parallel detection - link is up */
4980  /* only if we have PCS_SYNC and not */
4981  /* receiving config code words */
4982  mac_status = tr32(MAC_STATUS);
4983  if ((mac_status & MAC_STATUS_PCS_SYNCED) &&
4984  !(mac_status & MAC_STATUS_RCVD_CFG)) {
4985  tg3_setup_flow_control(tp, 0, 0);
4986  current_link_up = 1;
4987  tp->phy_flags |=
4989  tp->serdes_counter =
4991  } else
4992  goto restart_autoneg;
4993  }
4994  }
4995  } else {
4998  }
4999 
5000 out:
5001  return current_link_up;
5002 }
5003 
5004 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status)
5005 {
5006  int current_link_up = 0;
5007 
5008  if (!(mac_status & MAC_STATUS_PCS_SYNCED))
5009  goto out;
5010 
5011  if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5012  u32 txflags, rxflags;
5013  int i;
5014 
5015  if (fiber_autoneg(tp, &txflags, &rxflags)) {
5016  u32 local_adv = 0, remote_adv = 0;
5017 
5018  if (txflags & ANEG_CFG_PS1)
5019  local_adv |= ADVERTISE_1000XPAUSE;
5020  if (txflags & ANEG_CFG_PS2)
5021  local_adv |= ADVERTISE_1000XPSE_ASYM;
5022 
5023  if (rxflags & MR_LP_ADV_SYM_PAUSE)
5024  remote_adv |= LPA_1000XPAUSE;
5025  if (rxflags & MR_LP_ADV_ASYM_PAUSE)
5026  remote_adv |= LPA_1000XPAUSE_ASYM;
5027 
5028  tp->link_config.rmt_adv =
5029  mii_adv_to_ethtool_adv_x(remote_adv);
5030 
5031  tg3_setup_flow_control(tp, local_adv, remote_adv);
5032 
5033  current_link_up = 1;
5034  }
5035  for (i = 0; i < 30; i++) {
5036  udelay(20);
5040  udelay(40);
5041  if ((tr32(MAC_STATUS) &
5043  MAC_STATUS_CFG_CHANGED)) == 0)
5044  break;
5045  }
5046 
5047  mac_status = tr32(MAC_STATUS);
5048  if (current_link_up == 0 &&
5049  (mac_status & MAC_STATUS_PCS_SYNCED) &&
5050  !(mac_status & MAC_STATUS_RCVD_CFG))
5051  current_link_up = 1;
5052  } else {
5053  tg3_setup_flow_control(tp, 0, 0);
5054 
5055  /* Forcing 1000FD link up. */
5056  current_link_up = 1;
5057 
5059  udelay(40);
5060 
5061  tw32_f(MAC_MODE, tp->mac_mode);
5062  udelay(40);
5063  }
5064 
5065 out:
5066  return current_link_up;
5067 }
5068 
5069 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset)
5070 {
5071  u32 orig_pause_cfg;
5072  u16 orig_active_speed;
5073  u8 orig_active_duplex;
5074  u32 mac_status;
5075  int current_link_up;
5076  int i;
5077 
5078  orig_pause_cfg = tp->link_config.active_flowctrl;
5079  orig_active_speed = tp->link_config.active_speed;
5080  orig_active_duplex = tp->link_config.active_duplex;
5081 
5082  if (!tg3_flag(tp, HW_AUTONEG) &&
5083  netif_carrier_ok(tp->dev) &&
5084  tg3_flag(tp, INIT_COMPLETE)) {
5085  mac_status = tr32(MAC_STATUS);
5086  mac_status &= (MAC_STATUS_PCS_SYNCED |
5090  if (mac_status == (MAC_STATUS_PCS_SYNCED |
5094  return 0;
5095  }
5096  }
5097 
5098  tw32_f(MAC_TX_AUTO_NEG, 0);
5099 
5102  tw32_f(MAC_MODE, tp->mac_mode);
5103  udelay(40);
5104 
5105  if (tp->phy_id == TG3_PHY_ID_BCM8002)
5106  tg3_init_bcm8002(tp);
5107 
5108  /* Enable link change event even when serdes polling. */
5110  udelay(40);
5111 
5112  current_link_up = 0;
5113  tp->link_config.rmt_adv = 0;
5114  mac_status = tr32(MAC_STATUS);
5115 
5116  if (tg3_flag(tp, HW_AUTONEG))
5117  current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status);
5118  else
5119  current_link_up = tg3_setup_fiber_by_hand(tp, mac_status);
5120 
5121  tp->napi[0].hw_status->status =
5123  (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG));
5124 
5125  for (i = 0; i < 100; i++) {
5128  udelay(5);
5132  break;
5133  }
5134 
5135  mac_status = tr32(MAC_STATUS);
5136  if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) {
5137  current_link_up = 0;
5138  if (tp->link_config.autoneg == AUTONEG_ENABLE &&
5139  tp->serdes_counter == 0) {
5140  tw32_f(MAC_MODE, (tp->mac_mode |
5142  udelay(1);
5143  tw32_f(MAC_MODE, tp->mac_mode);
5144  }
5145  }
5146 
5147  if (current_link_up == 1) {
5148  tp->link_config.active_speed = SPEED_1000;
5149  tp->link_config.active_duplex = DUPLEX_FULL;
5150  tw32(MAC_LED_CTRL, (tp->led_ctrl |
5153  } else {
5154  tp->link_config.active_speed = SPEED_UNKNOWN;
5155  tp->link_config.active_duplex = DUPLEX_UNKNOWN;
5156  tw32(MAC_LED_CTRL, (tp->led_ctrl |
5159  }
5160 
5161  if (current_link_up != netif_carrier_ok(tp->dev)) {
5162  if (current_link_up)
5163  netif_carrier_on(tp->dev);
5164  else
5165  netif_carrier_off(tp->dev);
5166  tg3_link_report(tp);
5167  } else {
5168  u32 now_pause_cfg = tp->link_config.active_flowctrl;
5169  if (orig_pause_cfg != now_pause_cfg ||
5170  orig_active_speed != tp->link_config.active_speed ||
5171  orig_active_duplex != tp->link_config.active_duplex)
5172  tg3_link_report(tp);
5173  }
5174 
5175  return 0;
5176 }
5177 
5178 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
5179 {
5180  int current_link_up, err = 0;
5181  u32 bmsr, bmcr;
5182  u16 current_speed;
5183  u8 current_duplex;
5184  u32 local_adv, remote_adv;
5185 
5187  tw32_f(MAC_MODE, tp->mac_mode);
5188  udelay(40);
5189 
5190  tw32(MAC_EVENT, 0);
5191 
5197  udelay(40);
5198 
5199  if (force_reset)
5200  tg3_phy_reset(tp);
5201 
5202  current_link_up = 0;
5203  current_speed = SPEED_UNKNOWN;
5204  current_duplex = DUPLEX_UNKNOWN;
5205  tp->link_config.rmt_adv = 0;
5206 
5207  err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5208  err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5211  bmsr |= BMSR_LSTATUS;
5212  else
5213  bmsr &= ~BMSR_LSTATUS;
5214  }
5215 
5216  err |= tg3_readphy(tp, MII_BMCR, &bmcr);
5217 
5218  if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
5220  /* do nothing, just check for link up at the end */
5221  } else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
5222  u32 adv, newadv;
5223 
5224  err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5225  newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF |
5226  ADVERTISE_1000XPAUSE |
5227  ADVERTISE_1000XPSE_ASYM |
5228  ADVERTISE_SLCT);
5229 
5230  newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl);
5231  newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising);
5232 
5233  if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) {
5234  tg3_writephy(tp, MII_ADVERTISE, newadv);
5235  bmcr |= BMCR_ANENABLE | BMCR_ANRESTART;
5236  tg3_writephy(tp, MII_BMCR, bmcr);
5237 
5241 
5242  return err;
5243  }
5244  } else {
5245  u32 new_bmcr;
5246 
5247  bmcr &= ~BMCR_SPEED1000;
5248  new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX);
5249 
5250  if (tp->link_config.duplex == DUPLEX_FULL)
5251  new_bmcr |= BMCR_FULLDPLX;
5252 
5253  if (new_bmcr != bmcr) {
5254  /* BMCR_SPEED1000 is a reserved bit that needs
5255  * to be set on write.
5256  */
5257  new_bmcr |= BMCR_SPEED1000;
5258 
5259  /* Force a linkdown */
5260  if (netif_carrier_ok(tp->dev)) {
5261  u32 adv;
5262 
5263  err |= tg3_readphy(tp, MII_ADVERTISE, &adv);
5264  adv &= ~(ADVERTISE_1000XFULL |
5266  ADVERTISE_SLCT);
5267  tg3_writephy(tp, MII_ADVERTISE, adv);
5268  tg3_writephy(tp, MII_BMCR, bmcr |
5269  BMCR_ANRESTART |
5270  BMCR_ANENABLE);
5271  udelay(10);
5272  netif_carrier_off(tp->dev);
5273  }
5274  tg3_writephy(tp, MII_BMCR, new_bmcr);
5275  bmcr = new_bmcr;
5276  err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5277  err |= tg3_readphy(tp, MII_BMSR, &bmsr);
5278  if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
5279  ASIC_REV_5714) {
5281  bmsr |= BMSR_LSTATUS;
5282  else
5283  bmsr &= ~BMSR_LSTATUS;
5284  }
5286  }
5287  }
5288 
5289  if (bmsr & BMSR_LSTATUS) {
5290  current_speed = SPEED_1000;
5291  current_link_up = 1;
5292  if (bmcr & BMCR_FULLDPLX)
5293  current_duplex = DUPLEX_FULL;
5294  else
5295  current_duplex = DUPLEX_HALF;
5296 
5297  local_adv = 0;
5298  remote_adv = 0;
5299 
5300  if (bmcr & BMCR_ANENABLE) {
5301  u32 common;
5302 
5303  err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv);
5304  err |= tg3_readphy(tp, MII_LPA, &remote_adv);
5305  common = local_adv & remote_adv;
5306  if (common & (ADVERTISE_1000XHALF |
5308  if (common & ADVERTISE_1000XFULL)
5309  current_duplex = DUPLEX_FULL;
5310  else
5311  current_duplex = DUPLEX_HALF;
5312 
5313  tp->link_config.rmt_adv =
5314  mii_adv_to_ethtool_adv_x(remote_adv);
5315  } else if (!tg3_flag(tp, 5780_CLASS)) {
5316  /* Link is up via parallel detect */
5317  } else {
5318  current_link_up = 0;
5319  }
5320  }
5321  }
5322 
5323  if (current_link_up == 1 && current_duplex == DUPLEX_FULL)
5324  tg3_setup_flow_control(tp, local_adv, remote_adv);
5325 
5327  if (tp->link_config.active_duplex == DUPLEX_HALF)
5329 
5330  tw32_f(MAC_MODE, tp->mac_mode);
5331  udelay(40);
5332 
5334 
5335  tp->link_config.active_speed = current_speed;
5336  tp->link_config.active_duplex = current_duplex;
5337 
5338  if (current_link_up != netif_carrier_ok(tp->dev)) {
5339  if (current_link_up)
5340  netif_carrier_on(tp->dev);
5341  else {
5342  netif_carrier_off(tp->dev);
5344  }
5345  tg3_link_report(tp);
5346  }
5347  return err;
5348 }
5349 
5350 static void tg3_serdes_parallel_detect(struct tg3 *tp)
5351 {
5352  if (tp->serdes_counter) {
5353  /* Give autoneg time to complete. */
5354  tp->serdes_counter--;
5355  return;
5356  }
5357 
5358  if (!netif_carrier_ok(tp->dev) &&
5359  (tp->link_config.autoneg == AUTONEG_ENABLE)) {
5360  u32 bmcr;
5361 
5362  tg3_readphy(tp, MII_BMCR, &bmcr);
5363  if (bmcr & BMCR_ANENABLE) {
5364  u32 phy1, phy2;
5365 
5366  /* Select shadow register 0x1f */
5367  tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00);
5368  tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1);
5369 
5370  /* Select expansion interrupt status register */
5371  tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5373  tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5374  tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5375 
5376  if ((phy1 & 0x10) && !(phy2 & 0x20)) {
5377  /* We have signal detect and not receiving
5378  * config code words, link is up by parallel
5379  * detection.
5380  */
5381 
5382  bmcr &= ~BMCR_ANENABLE;
5383  bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX;
5384  tg3_writephy(tp, MII_BMCR, bmcr);
5386  }
5387  }
5388  } else if (netif_carrier_ok(tp->dev) &&
5389  (tp->link_config.autoneg == AUTONEG_ENABLE) &&
5391  u32 phy2;
5392 
5393  /* Select expansion interrupt status register */
5394  tg3_writephy(tp, MII_TG3_DSP_ADDRESS,
5396  tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2);
5397  if (phy2 & 0x20) {
5398  u32 bmcr;
5399 
5400  /* Config code words received, turn on autoneg. */
5401  tg3_readphy(tp, MII_BMCR, &bmcr);
5402  tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE);
5403 
5405 
5406  }
5407  }
5408 }
5409 
5410 static int tg3_setup_phy(struct tg3 *tp, int force_reset)
5411 {
5412  u32 val;
5413  int err;
5414 
5415  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
5416  err = tg3_setup_fiber_phy(tp, force_reset);
5417  else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
5418  err = tg3_setup_fiber_mii_phy(tp, force_reset);
5419  else
5420  err = tg3_setup_copper_phy(tp, force_reset);
5421 
5423  u32 scale;
5424 
5426  if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5)
5427  scale = 65;
5428  else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25)
5429  scale = 6;
5430  else
5431  scale = 12;
5432 
5434  val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT);
5435  tw32(GRC_MISC_CFG, val);
5436  }
5437 
5438  val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
5439  (6 << TX_LENGTHS_IPG_SHIFT);
5441  val |= tr32(MAC_TX_LENGTHS) &
5444 
5445  if (tp->link_config.active_speed == SPEED_1000 &&
5446  tp->link_config.active_duplex == DUPLEX_HALF)
5447  tw32(MAC_TX_LENGTHS, val |
5448  (0xff << TX_LENGTHS_SLOT_TIME_SHIFT));
5449  else
5450  tw32(MAC_TX_LENGTHS, val |
5451  (32 << TX_LENGTHS_SLOT_TIME_SHIFT));
5452 
5453  if (!tg3_flag(tp, 5705_PLUS)) {
5454  if (netif_carrier_ok(tp->dev)) {
5456  tp->coal.stats_block_coalesce_usecs);
5457  } else {
5459  }
5460  }
5461 
5462  if (tg3_flag(tp, ASPM_WORKAROUND)) {
5463  val = tr32(PCIE_PWR_MGMT_THRESH);
5464  if (!netif_carrier_ok(tp->dev))
5465  val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) |
5466  tp->pwrmgmt_thresh;
5467  else
5469  tw32(PCIE_PWR_MGMT_THRESH, val);
5470  }
5471 
5472  return err;
5473 }
5474 
5475 static inline int tg3_irq_sync(struct tg3 *tp)
5476 {
5477  return tp->irq_sync;
5478 }
5479 
5480 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len)
5481 {
5482  int i;
5483 
5484  dst = (u32 *)((u8 *)dst + off);
5485  for (i = 0; i < len; i += sizeof(u32))
5486  *dst++ = tr32(off + i);
5487 }
5488 
5489 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs)
5490 {
5491  tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0);
5492  tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200);
5493  tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0);
5494  tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0);
5495  tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04);
5496  tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80);
5497  tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48);
5498  tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04);
5499  tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20);
5500  tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c);
5501  tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c);
5502  tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c);
5503  tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44);
5504  tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04);
5505  tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20);
5506  tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14);
5507  tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08);
5508  tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08);
5509  tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100);
5510 
5511  if (tg3_flag(tp, SUPPORT_MSIX))
5512  tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180);
5513 
5514  tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10);
5515  tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58);
5516  tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08);
5517  tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08);
5518  tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04);
5519  tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04);
5520  tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04);
5521  tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04);
5522 
5523  if (!tg3_flag(tp, 5705_PLUS)) {
5524  tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04);
5525  tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04);
5526  tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04);
5527  }
5528 
5529  tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110);
5530  tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120);
5531  tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c);
5532  tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04);
5533  tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c);
5534 
5535  if (tg3_flag(tp, NVRAM))
5536  tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24);
5537 }
5538 
5539 static void tg3_dump_state(struct tg3 *tp)
5540 {
5541  int i;
5542  u32 *regs;
5543 
5544  regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC);
5545  if (!regs) {
5546  netdev_err(tp->dev, "Failed allocating register dump buffer\n");
5547  return;
5548  }
5549 
5550  if (tg3_flag(tp, PCI_EXPRESS)) {
5551  /* Read up to but not including private PCI registers */
5552  for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32))
5553  regs[i / sizeof(u32)] = tr32(i);
5554  } else
5555  tg3_dump_legacy_regs(tp, regs);
5556 
5557  for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) {
5558  if (!regs[i + 0] && !regs[i + 1] &&
5559  !regs[i + 2] && !regs[i + 3])
5560  continue;
5561 
5562  netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n",
5563  i * 4,
5564  regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]);
5565  }
5566 
5567  kfree(regs);
5568 
5569  for (i = 0; i < tp->irq_cnt; i++) {
5570  struct tg3_napi *tnapi = &tp->napi[i];
5571 
5572  /* SW status block */
5573  netdev_err(tp->dev,
5574  "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n",
5575  i,
5576  tnapi->hw_status->status,
5577  tnapi->hw_status->status_tag,
5578  tnapi->hw_status->rx_jumbo_consumer,
5579  tnapi->hw_status->rx_consumer,
5580  tnapi->hw_status->rx_mini_consumer,
5581  tnapi->hw_status->idx[0].rx_producer,
5582  tnapi->hw_status->idx[0].tx_consumer);
5583 
5584  netdev_err(tp->dev,
5585  "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n",
5586  i,
5587  tnapi->last_tag, tnapi->last_irq_tag,
5588  tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending,
5589  tnapi->rx_rcb_ptr,
5590  tnapi->prodring.rx_std_prod_idx,
5591  tnapi->prodring.rx_std_cons_idx,
5592  tnapi->prodring.rx_jmb_prod_idx,
5593  tnapi->prodring.rx_jmb_cons_idx);
5594  }
5595 }
5596 
5597 /* This is called whenever we suspect that the system chipset is re-
5598  * ordering the sequence of MMIO to the tx send mailbox. The symptom
5599  * is bogus tx completions. We try to recover by setting the
5600  * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later
5601  * in the workqueue.
5602  */
5603 static void tg3_tx_recover(struct tg3 *tp)
5604 {
5605  BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) ||
5606  tp->write32_tx_mbox == tg3_write_indirect_mbox);
5607 
5608  netdev_warn(tp->dev,
5609  "The system may be re-ordering memory-mapped I/O "
5610  "cycles to the network device, attempting to recover. "
5611  "Please report the problem to the driver maintainer "
5612  "and include system chipset information.\n");
5613 
5614  spin_lock(&tp->lock);
5615  tg3_flag_set(tp, TX_RECOVERY_PENDING);
5616  spin_unlock(&tp->lock);
5617 }
5618 
5619 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi)
5620 {
5621  /* Tell compiler to fetch tx indices from memory. */
5622  barrier();
5623  return tnapi->tx_pending -
5624  ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1));
5625 }
5626 
5627 /* Tigon3 never reports partial packet sends. So we do not
5628  * need special logic to handle SKBs that have not had all
5629  * of their frags sent yet, like SunGEM does.
5630  */
5631 static void tg3_tx(struct tg3_napi *tnapi)
5632 {
5633  struct tg3 *tp = tnapi->tp;
5634  u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer;
5635  u32 sw_idx = tnapi->tx_cons;
5636  struct netdev_queue *txq;
5637  int index = tnapi - tp->napi;
5638  unsigned int pkts_compl = 0, bytes_compl = 0;
5639 
5640  if (tg3_flag(tp, ENABLE_TSS))
5641  index--;
5642 
5643  txq = netdev_get_tx_queue(tp->dev, index);
5644 
5645  while (sw_idx != hw_idx) {
5646  struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx];
5647  struct sk_buff *skb = ri->skb;
5648  int i, tx_bug = 0;
5649 
5650  if (unlikely(skb == NULL)) {
5651  tg3_tx_recover(tp);
5652  return;
5653  }
5654 
5655  pci_unmap_single(tp->pdev,
5656  dma_unmap_addr(ri, mapping),
5657  skb_headlen(skb),
5659 
5660  ri->skb = NULL;
5661 
5662  while (ri->fragmented) {
5663  ri->fragmented = false;
5664  sw_idx = NEXT_TX(sw_idx);
5665  ri = &tnapi->tx_buffers[sw_idx];
5666  }
5667 
5668  sw_idx = NEXT_TX(sw_idx);
5669 
5670  for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
5671  ri = &tnapi->tx_buffers[sw_idx];
5672  if (unlikely(ri->skb != NULL || sw_idx == hw_idx))
5673  tx_bug = 1;
5674 
5675  pci_unmap_page(tp->pdev,
5676  dma_unmap_addr(ri, mapping),
5677  skb_frag_size(&skb_shinfo(skb)->frags[i]),
5679 
5680  while (ri->fragmented) {
5681  ri->fragmented = false;
5682  sw_idx = NEXT_TX(sw_idx);
5683  ri = &tnapi->tx_buffers[sw_idx];
5684  }
5685 
5686  sw_idx = NEXT_TX(sw_idx);
5687  }
5688 
5689  pkts_compl++;
5690  bytes_compl += skb->len;
5691 
5692  dev_kfree_skb(skb);
5693 
5694  if (unlikely(tx_bug)) {
5695  tg3_tx_recover(tp);
5696  return;
5697  }
5698  }
5699 
5700  netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
5701 
5702  tnapi->tx_cons = sw_idx;
5703 
5704  /* Need to make the tx_cons update visible to tg3_start_xmit()
5705  * before checking for netif_queue_stopped(). Without the
5706  * memory barrier, there is a small possibility that tg3_start_xmit()
5707  * will miss it and cause the queue to be stopped forever.
5708  */
5709  smp_mb();
5710 
5711  if (unlikely(netif_tx_queue_stopped(txq) &&
5712  (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) {
5713  __netif_tx_lock(txq, smp_processor_id());
5714  if (netif_tx_queue_stopped(txq) &&
5715  (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))
5716  netif_tx_wake_queue(txq);
5717  __netif_tx_unlock(txq);
5718  }
5719 }
5720 
5721 static void tg3_frag_free(bool is_frag, void *data)
5722 {
5723  if (is_frag)
5724  put_page(virt_to_head_page(data));
5725  else
5726  kfree(data);
5727 }
5728 
5729 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz)
5730 {
5731  unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) +
5732  SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
5733 
5734  if (!ri->data)
5735  return;
5736 
5737  pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping),
5738  map_sz, PCI_DMA_FROMDEVICE);
5739  tg3_frag_free(skb_size <= PAGE_SIZE, ri->data);
5740  ri->data = NULL;
5741 }
5742 
5743 
5744 /* Returns size of skb allocated or < 0 on error.
5745  *
5746  * We only need to fill in the address because the other members
5747  * of the RX descriptor are invariant, see tg3_init_rings.
5748  *
5749  * Note the purposeful assymetry of cpu vs. chip accesses. For
5750  * posting buffers we only dirty the first cache line of the RX
5751  * descriptor (containing the address). Whereas for the RX status
5752  * buffers the cpu only reads the last cacheline of the RX descriptor
5753  * (to fetch the error flags, vlan tag, checksum, and opaque cookie).
5754  */
5755 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr,
5756  u32 opaque_key, u32 dest_idx_unmasked,
5757  unsigned int *frag_size)
5758 {
5759  struct tg3_rx_buffer_desc *desc;
5760  struct ring_info *map;
5761  u8 *data;
5763  int skb_size, data_size, dest_idx;
5764 
5765  switch (opaque_key) {
5766  case RXD_OPAQUE_RING_STD:
5767  dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
5768  desc = &tpr->rx_std[dest_idx];
5769  map = &tpr->rx_std_buffers[dest_idx];
5770  data_size = tp->rx_pkt_map_sz;
5771  break;
5772 
5773  case RXD_OPAQUE_RING_JUMBO:
5774  dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
5775  desc = &tpr->rx_jmb[dest_idx].std;
5776  map = &tpr->rx_jmb_buffers[dest_idx];
5777  data_size = TG3_RX_JMB_MAP_SZ;
5778  break;
5779 
5780  default:
5781  return -EINVAL;
5782  }
5783 
5784  /* Do not overwrite any of the map or rp information
5785  * until we are sure we can commit to a new buffer.
5786  *
5787  * Callers depend upon this behavior and assume that
5788  * we leave everything unchanged if we fail.
5789  */
5790  skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) +
5791  SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
5792  if (skb_size <= PAGE_SIZE) {
5793  data = netdev_alloc_frag(skb_size);
5794  *frag_size = skb_size;
5795  } else {
5796  data = kmalloc(skb_size, GFP_ATOMIC);
5797  *frag_size = 0;
5798  }
5799  if (!data)
5800  return -ENOMEM;
5801 
5802  mapping = pci_map_single(tp->pdev,
5803  data + TG3_RX_OFFSET(tp),
5804  data_size,
5806  if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) {
5807  tg3_frag_free(skb_size <= PAGE_SIZE, data);
5808  return -EIO;
5809  }
5810 
5811  map->data = data;
5812  dma_unmap_addr_set(map, mapping, mapping);
5813 
5814  desc->addr_hi = ((u64)mapping >> 32);
5815  desc->addr_lo = ((u64)mapping & 0xffffffff);
5816 
5817  return data_size;
5818 }
5819 
5820 /* We only need to move over in the address because the other
5821  * members of the RX descriptor are invariant. See notes above
5822  * tg3_alloc_rx_data for full details.
5823  */
5824 static void tg3_recycle_rx(struct tg3_napi *tnapi,
5825  struct tg3_rx_prodring_set *dpr,
5826  u32 opaque_key, int src_idx,
5827  u32 dest_idx_unmasked)
5828 {
5829  struct tg3 *tp = tnapi->tp;
5830  struct tg3_rx_buffer_desc *src_desc, *dest_desc;
5831  struct ring_info *src_map, *dest_map;
5832  struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring;
5833  int dest_idx;
5834 
5835  switch (opaque_key) {
5836  case RXD_OPAQUE_RING_STD:
5837  dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask;
5838  dest_desc = &dpr->rx_std[dest_idx];
5839  dest_map = &dpr->rx_std_buffers[dest_idx];
5840  src_desc = &spr->rx_std[src_idx];
5841  src_map = &spr->rx_std_buffers[src_idx];
5842  break;
5843 
5844  case RXD_OPAQUE_RING_JUMBO:
5845  dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask;
5846  dest_desc = &dpr->rx_jmb[dest_idx].std;
5847  dest_map = &dpr->rx_jmb_buffers[dest_idx];
5848  src_desc = &spr->rx_jmb[src_idx].std;
5849  src_map = &spr->rx_jmb_buffers[src_idx];
5850  break;
5851 
5852  default:
5853  return;
5854  }
5855 
5856  dest_map->data = src_map->data;
5857  dma_unmap_addr_set(dest_map, mapping,
5858  dma_unmap_addr(src_map, mapping));
5859  dest_desc->addr_hi = src_desc->addr_hi;
5860  dest_desc->addr_lo = src_desc->addr_lo;
5861 
5862  /* Ensure that the update to the skb happens after the physical
5863  * addresses have been transferred to the new BD location.
5864  */
5865  smp_wmb();
5866 
5867  src_map->data = NULL;
5868 }
5869 
5870 /* The RX ring scheme is composed of multiple rings which post fresh
5871  * buffers to the chip, and one special ring the chip uses to report
5872  * status back to the host.
5873  *
5874  * The special ring reports the status of received packets to the
5875  * host. The chip does not write into the original descriptor the
5876  * RX buffer was obtained from. The chip simply takes the original
5877  * descriptor as provided by the host, updates the status and length
5878  * field, then writes this into the next status ring entry.
5879  *
5880  * Each ring the host uses to post buffers to the chip is described
5881  * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives,
5882  * it is first placed into the on-chip ram. When the packet's length
5883  * is known, it walks down the TG3_BDINFO entries to select the ring.
5884  * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO
5885  * which is within the range of the new packet's length is chosen.
5886  *
5887  * The "separate ring for rx status" scheme may sound queer, but it makes
5888  * sense from a cache coherency perspective. If only the host writes
5889  * to the buffer post rings, and only the chip writes to the rx status
5890  * rings, then cache lines never move beyond shared-modified state.
5891  * If both the host and chip were to write into the same ring, cache line
5892  * eviction could occur since both entities want it in an exclusive state.
5893  */
5894 static int tg3_rx(struct tg3_napi *tnapi, int budget)
5895 {
5896  struct tg3 *tp = tnapi->tp;
5897  u32 work_mask, rx_std_posted = 0;
5898  u32 std_prod_idx, jmb_prod_idx;
5899  u32 sw_idx = tnapi->rx_rcb_ptr;
5900  u16 hw_idx;
5901  int received;
5902  struct tg3_rx_prodring_set *tpr = &tnapi->prodring;
5903 
5904  hw_idx = *(tnapi->rx_rcb_prod_idx);
5905  /*
5906  * We need to order the read of hw_idx and the read of
5907  * the opaque cookie.
5908  */
5909  rmb();
5910  work_mask = 0;
5911  received = 0;
5912  std_prod_idx = tpr->rx_std_prod_idx;
5913  jmb_prod_idx = tpr->rx_jmb_prod_idx;
5914  while (sw_idx != hw_idx && budget > 0) {
5915  struct ring_info *ri;
5916  struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx];
5917  unsigned int len;
5918  struct sk_buff *skb;
5920  u32 opaque_key, desc_idx, *post_ptr;
5921  u8 *data;
5922 
5923  desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
5924  opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
5925  if (opaque_key == RXD_OPAQUE_RING_STD) {
5926  ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx];
5927  dma_addr = dma_unmap_addr(ri, mapping);
5928  data = ri->data;
5929  post_ptr = &std_prod_idx;
5930  rx_std_posted++;
5931  } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
5932  ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx];
5933  dma_addr = dma_unmap_addr(ri, mapping);
5934  data = ri->data;
5935  post_ptr = &jmb_prod_idx;
5936  } else
5937  goto next_pkt_nopost;
5938 
5939  work_mask |= opaque_key;
5940 
5941  if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
5943  drop_it:
5944  tg3_recycle_rx(tnapi, tpr, opaque_key,
5945  desc_idx, *post_ptr);
5946  drop_it_no_recycle:
5947  /* Other statistics kept track of by card. */
5948  tp->rx_dropped++;
5949  goto next_pkt;
5950  }
5951 
5952  prefetch(data + TG3_RX_OFFSET(tp));
5953  len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) -
5954  ETH_FCS_LEN;
5955 
5956  if (len > TG3_RX_COPY_THRESH(tp)) {
5957  int skb_size;
5958  unsigned int frag_size;
5959 
5960  skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key,
5961  *post_ptr, &frag_size);
5962  if (skb_size < 0)
5963  goto drop_it;
5964 
5965  pci_unmap_single(tp->pdev, dma_addr, skb_size,
5967 
5968  skb = build_skb(data, frag_size);
5969  if (!skb) {
5970  tg3_frag_free(frag_size != 0, data);
5971  goto drop_it_no_recycle;
5972  }
5973  skb_reserve(skb, TG3_RX_OFFSET(tp));
5974  /* Ensure that the update to the data happens
5975  * after the usage of the old DMA mapping.
5976  */
5977  smp_wmb();
5978 
5979  ri->data = NULL;
5980 
5981  } else {
5982  tg3_recycle_rx(tnapi, tpr, opaque_key,
5983  desc_idx, *post_ptr);
5984 
5985  skb = netdev_alloc_skb(tp->dev,
5986  len + TG3_RAW_IP_ALIGN);
5987  if (skb == NULL)
5988  goto drop_it_no_recycle;
5989 
5990  skb_reserve(skb, TG3_RAW_IP_ALIGN);
5991  pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
5992  memcpy(skb->data,
5993  data + TG3_RX_OFFSET(tp),
5994  len);
5995  pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
5996  }
5997 
5998  skb_put(skb, len);
5999  if ((tp->dev->features & NETIF_F_RXCSUM) &&
6000  (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
6001  (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
6002  >> RXD_TCPCSUM_SHIFT) == 0xffff))
6004  else
6005  skb_checksum_none_assert(skb);
6006 
6007  skb->protocol = eth_type_trans(skb, tp->dev);
6008 
6009  if (len > (tp->dev->mtu + ETH_HLEN) &&
6010  skb->protocol != htons(ETH_P_8021Q)) {
6011  dev_kfree_skb(skb);
6012  goto drop_it_no_recycle;
6013  }
6014 
6015  if (desc->type_flags & RXD_FLAG_VLAN &&
6016  !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
6017  __vlan_hwaccel_put_tag(skb,
6018  desc->err_vlan & RXD_VLAN_MASK);
6019 
6020  napi_gro_receive(&tnapi->napi, skb);
6021 
6022  received++;
6023  budget--;
6024 
6025 next_pkt:
6026  (*post_ptr)++;
6027 
6028  if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
6029  tpr->rx_std_prod_idx = std_prod_idx &
6030  tp->rx_std_ring_mask;
6032  tpr->rx_std_prod_idx);
6033  work_mask &= ~RXD_OPAQUE_RING_STD;
6034  rx_std_posted = 0;
6035  }
6036 next_pkt_nopost:
6037  sw_idx++;
6038  sw_idx &= tp->rx_ret_ring_mask;
6039 
6040  /* Refresh hw_idx to see if there is new work */
6041  if (sw_idx == hw_idx) {
6042  hw_idx = *(tnapi->rx_rcb_prod_idx);
6043  rmb();
6044  }
6045  }
6046 
6047  /* ACK the status ring. */
6048  tnapi->rx_rcb_ptr = sw_idx;
6049  tw32_rx_mbox(tnapi->consmbox, sw_idx);
6050 
6051  /* Refill RX ring(s). */
6052  if (!tg3_flag(tp, ENABLE_RSS)) {
6053  /* Sync BD data before updating mailbox */
6054  wmb();
6055 
6056  if (work_mask & RXD_OPAQUE_RING_STD) {
6057  tpr->rx_std_prod_idx = std_prod_idx &
6058  tp->rx_std_ring_mask;
6060  tpr->rx_std_prod_idx);
6061  }
6062  if (work_mask & RXD_OPAQUE_RING_JUMBO) {
6063  tpr->rx_jmb_prod_idx = jmb_prod_idx &
6064  tp->rx_jmb_ring_mask;
6066  tpr->rx_jmb_prod_idx);
6067  }
6068  mmiowb();
6069  } else if (work_mask) {
6070  /* rx_std_buffers[] and rx_jmb_buffers[] entries must be
6071  * updated before the producer indices can be updated.
6072  */
6073  smp_wmb();
6074 
6075  tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask;
6076  tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask;
6077 
6078  if (tnapi != &tp->napi[1]) {
6079  tp->rx_refill = true;
6080  napi_schedule(&tp->napi[1].napi);
6081  }
6082  }
6083 
6084  return received;
6085 }
6086 
6087 static void tg3_poll_link(struct tg3 *tp)
6088 {
6089  /* handle link change and other phy events */
6090  if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) {
6091  struct tg3_hw_status *sblk = tp->napi[0].hw_status;
6092 
6093  if (sblk->status & SD_STATUS_LINK_CHG) {
6094  sblk->status = SD_STATUS_UPDATED |
6095  (sblk->status & ~SD_STATUS_LINK_CHG);
6096  spin_lock(&tp->lock);
6097  if (tg3_flag(tp, USE_PHYLIB)) {
6103  udelay(40);
6104  } else
6105  tg3_setup_phy(tp, 0);
6106  spin_unlock(&tp->lock);
6107  }
6108  }
6109 }
6110 
6111 static int tg3_rx_prodring_xfer(struct tg3 *tp,
6112  struct tg3_rx_prodring_set *dpr,
6113  struct tg3_rx_prodring_set *spr)
6114 {
6115  u32 si, di, cpycnt, src_prod_idx;
6116  int i, err = 0;
6117 
6118  while (1) {
6119  src_prod_idx = spr->rx_std_prod_idx;
6120 
6121  /* Make sure updates to the rx_std_buffers[] entries and the
6122  * standard producer index are seen in the correct order.
6123  */
6124  smp_rmb();
6125 
6126  if (spr->rx_std_cons_idx == src_prod_idx)
6127  break;
6128 
6129  if (spr->rx_std_cons_idx < src_prod_idx)
6130  cpycnt = src_prod_idx - spr->rx_std_cons_idx;
6131  else
6132  cpycnt = tp->rx_std_ring_mask + 1 -
6133  spr->rx_std_cons_idx;
6134 
6135  cpycnt = min(cpycnt,
6136  tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx);
6137 
6138  si = spr->rx_std_cons_idx;
6139  di = dpr->rx_std_prod_idx;
6140 
6141  for (i = di; i < di + cpycnt; i++) {
6142  if (dpr->rx_std_buffers[i].data) {
6143  cpycnt = i - di;
6144  err = -ENOSPC;
6145  break;
6146  }
6147  }
6148 
6149  if (!cpycnt)
6150  break;
6151 
6152  /* Ensure that updates to the rx_std_buffers ring and the
6153  * shadowed hardware producer ring from tg3_recycle_skb() are
6154  * ordered correctly WRT the skb check above.
6155  */
6156  smp_rmb();
6157 
6158  memcpy(&dpr->rx_std_buffers[di],
6159  &spr->rx_std_buffers[si],
6160  cpycnt * sizeof(struct ring_info));
6161 
6162  for (i = 0; i < cpycnt; i++, di++, si++) {
6163  struct tg3_rx_buffer_desc *sbd, *dbd;
6164  sbd = &spr->rx_std[si];
6165  dbd = &dpr->rx_std[di];
6166  dbd->addr_hi = sbd->addr_hi;
6167  dbd->addr_lo = sbd->addr_lo;
6168  }
6169 
6170  spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) &
6171  tp->rx_std_ring_mask;
6172  dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) &
6173  tp->rx_std_ring_mask;
6174  }
6175 
6176  while (1) {
6177  src_prod_idx = spr->rx_jmb_prod_idx;
6178 
6179  /* Make sure updates to the rx_jmb_buffers[] entries and
6180  * the jumbo producer index are seen in the correct order.
6181  */
6182  smp_rmb();
6183 
6184  if (spr->rx_jmb_cons_idx == src_prod_idx)
6185  break;
6186 
6187  if (spr->rx_jmb_cons_idx < src_prod_idx)
6188  cpycnt = src_prod_idx - spr->rx_jmb_cons_idx;
6189  else
6190  cpycnt = tp->rx_jmb_ring_mask + 1 -
6191  spr->rx_jmb_cons_idx;
6192 
6193  cpycnt = min(cpycnt,
6194  tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx);
6195 
6196  si = spr->rx_jmb_cons_idx;
6197  di = dpr->rx_jmb_prod_idx;
6198 
6199  for (i = di; i < di + cpycnt; i++) {
6200  if (dpr->rx_jmb_buffers[i].data) {
6201  cpycnt = i - di;
6202  err = -ENOSPC;
6203  break;
6204  }
6205  }
6206 
6207  if (!cpycnt)
6208  break;
6209 
6210  /* Ensure that updates to the rx_jmb_buffers ring and the
6211  * shadowed hardware producer ring from tg3_recycle_skb() are
6212  * ordered correctly WRT the skb check above.
6213  */
6214  smp_rmb();
6215 
6216  memcpy(&dpr->rx_jmb_buffers[di],
6217  &spr->rx_jmb_buffers[si],
6218  cpycnt * sizeof(struct ring_info));
6219 
6220  for (i = 0; i < cpycnt; i++, di++, si++) {
6221  struct tg3_rx_buffer_desc *sbd, *dbd;
6222  sbd = &spr->rx_jmb[si].std;
6223  dbd = &dpr->rx_jmb[di].std;
6224  dbd->addr_hi = sbd->addr_hi;
6225  dbd->addr_lo = sbd->addr_lo;
6226  }
6227 
6228  spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) &
6229  tp->rx_jmb_ring_mask;
6230  dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) &
6231  tp->rx_jmb_ring_mask;
6232  }
6233 
6234  return err;
6235 }
6236 
6237 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget)
6238 {
6239  struct tg3 *tp = tnapi->tp;
6240 
6241  /* run TX completion thread */
6242  if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) {
6243  tg3_tx(tnapi);
6244  if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6245  return work_done;
6246  }
6247 
6248  if (!tnapi->rx_rcb_prod_idx)
6249  return work_done;
6250 
6251  /* run RX thread, within the bounds set by NAPI.
6252  * All RX "locking" is done by ensuring outside
6253  * code synchronizes with tg3->napi.poll()
6254  */
6255  if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr)
6256  work_done += tg3_rx(tnapi, budget - work_done);
6257 
6258  if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) {
6259  struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring;
6260  int i, err = 0;
6261  u32 std_prod_idx = dpr->rx_std_prod_idx;
6262  u32 jmb_prod_idx = dpr->rx_jmb_prod_idx;
6263 
6264  tp->rx_refill = false;
6265  for (i = 1; i <= tp->rxq_cnt; i++)
6266  err |= tg3_rx_prodring_xfer(tp, dpr,
6267  &tp->napi[i].prodring);
6268 
6269  wmb();
6270 
6271  if (std_prod_idx != dpr->rx_std_prod_idx)
6273  dpr->rx_std_prod_idx);
6274 
6275  if (jmb_prod_idx != dpr->rx_jmb_prod_idx)
6277  dpr->rx_jmb_prod_idx);
6278 
6279  mmiowb();
6280 
6281  if (err)
6282  tw32_f(HOSTCC_MODE, tp->coal_now);
6283  }
6284 
6285  return work_done;
6286 }
6287 
6288 static inline void tg3_reset_task_schedule(struct tg3 *tp)
6289 {
6290  if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
6291  schedule_work(&tp->reset_task);
6292 }
6293 
6294 static inline void tg3_reset_task_cancel(struct tg3 *tp)
6295 {
6297  tg3_flag_clear(tp, RESET_TASK_PENDING);
6298  tg3_flag_clear(tp, TX_RECOVERY_PENDING);
6299 }
6300 
6301 static int tg3_poll_msix(struct napi_struct *napi, int budget)
6302 {
6303  struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6304  struct tg3 *tp = tnapi->tp;
6305  int work_done = 0;
6306  struct tg3_hw_status *sblk = tnapi->hw_status;
6307 
6308  while (1) {
6309  work_done = tg3_poll_work(tnapi, work_done, budget);
6310 
6311  if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6312  goto tx_recovery;
6313 
6314  if (unlikely(work_done >= budget))
6315  break;
6316 
6317  /* tp->last_tag is used in tg3_int_reenable() below
6318  * to tell the hw how much work has been processed,
6319  * so we must read it before checking for more work.
6320  */
6321  tnapi->last_tag = sblk->status_tag;
6322  tnapi->last_irq_tag = tnapi->last_tag;
6323  rmb();
6324 
6325  /* check for RX/TX work to do */
6326  if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons &&
6327  *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) {
6328 
6329  /* This test here is not race free, but will reduce
6330  * the number of interrupts by looping again.
6331  */
6332  if (tnapi == &tp->napi[1] && tp->rx_refill)
6333  continue;
6334 
6335  napi_complete(napi);
6336  /* Reenable interrupts. */
6337  tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24);
6338 
6339  /* This test here is synchronized by napi_schedule()
6340  * and napi_complete() to close the race condition.
6341  */
6342  if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) {
6345  tnapi->coal_now);
6346  }
6347  mmiowb();
6348  break;
6349  }
6350  }
6351 
6352  return work_done;
6353 
6354 tx_recovery:
6355  /* work_done is guaranteed to be less than budget. */
6356  napi_complete(napi);
6357  tg3_reset_task_schedule(tp);
6358  return work_done;
6359 }
6360 
6361 static void tg3_process_error(struct tg3 *tp)
6362 {
6363  u32 val;
6364  bool real_error = false;
6365 
6366  if (tg3_flag(tp, ERROR_PROCESSED))
6367  return;
6368 
6369  /* Check Flow Attention register */
6370  val = tr32(HOSTCC_FLOW_ATTN);
6371  if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) {
6372  netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n");
6373  real_error = true;
6374  }
6375 
6377  netdev_err(tp->dev, "MSI Status error. Resetting chip.\n");
6378  real_error = true;
6379  }
6380 
6381  if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) {
6382  netdev_err(tp->dev, "DMA Status error. Resetting chip.\n");
6383  real_error = true;
6384  }
6385 
6386  if (!real_error)
6387  return;
6388 
6389  tg3_dump_state(tp);
6390 
6391  tg3_flag_set(tp, ERROR_PROCESSED);
6392  tg3_reset_task_schedule(tp);
6393 }
6394 
6395 static int tg3_poll(struct napi_struct *napi, int budget)
6396 {
6397  struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi);
6398  struct tg3 *tp = tnapi->tp;
6399  int work_done = 0;
6400  struct tg3_hw_status *sblk = tnapi->hw_status;
6401 
6402  while (1) {
6403  if (sblk->status & SD_STATUS_ERROR)
6404  tg3_process_error(tp);
6405 
6406  tg3_poll_link(tp);
6407 
6408  work_done = tg3_poll_work(tnapi, work_done, budget);
6409 
6410  if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING)))
6411  goto tx_recovery;
6412 
6413  if (unlikely(work_done >= budget))
6414  break;
6415 
6416  if (tg3_flag(tp, TAGGED_STATUS)) {
6417  /* tp->last_tag is used in tg3_int_reenable() below
6418  * to tell the hw how much work has been processed,
6419  * so we must read it before checking for more work.
6420  */
6421  tnapi->last_tag = sblk->status_tag;
6422  tnapi->last_irq_tag = tnapi->last_tag;
6423  rmb();
6424  } else
6425  sblk->status &= ~SD_STATUS_UPDATED;
6426 
6427  if (likely(!tg3_has_work(tnapi))) {
6428  napi_complete(napi);
6429  tg3_int_reenable(tnapi);
6430  break;
6431  }
6432  }
6433 
6434  return work_done;
6435 
6436 tx_recovery:
6437  /* work_done is guaranteed to be less than budget. */
6438  napi_complete(napi);
6439  tg3_reset_task_schedule(tp);
6440  return work_done;
6441 }
6442 
6443 static void tg3_napi_disable(struct tg3 *tp)
6444 {
6445  int i;
6446 
6447  for (i = tp->irq_cnt - 1; i >= 0; i--)
6448  napi_disable(&tp->napi[i].napi);
6449 }
6450 
6451 static void tg3_napi_enable(struct tg3 *tp)
6452 {
6453  int i;
6454 
6455  for (i = 0; i < tp->irq_cnt; i++)
6456  napi_enable(&tp->napi[i].napi);
6457 }
6458 
6459 static void tg3_napi_init(struct tg3 *tp)
6460 {
6461  int i;
6462 
6463  netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64);
6464  for (i = 1; i < tp->irq_cnt; i++)
6465  netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64);
6466 }
6467 
6468 static void tg3_napi_fini(struct tg3 *tp)
6469 {
6470  int i;
6471 
6472  for (i = 0; i < tp->irq_cnt; i++)
6473  netif_napi_del(&tp->napi[i].napi);
6474 }
6475 
6476 static inline void tg3_netif_stop(struct tg3 *tp)
6477 {
6478  tp->dev->trans_start = jiffies; /* prevent tx timeout */
6479  tg3_napi_disable(tp);
6480  netif_tx_disable(tp->dev);
6481 }
6482 
6483 static inline void tg3_netif_start(struct tg3 *tp)
6484 {
6485  /* NOTE: unconditional netif_tx_wake_all_queues is only
6486  * appropriate so long as all callers are assured to
6487  * have free tx slots (such as after tg3_init_hw)
6488  */
6489  netif_tx_wake_all_queues(tp->dev);
6490 
6491  tg3_napi_enable(tp);
6492  tp->napi[0].hw_status->status |= SD_STATUS_UPDATED;
6493  tg3_enable_ints(tp);
6494 }
6495 
6496 static void tg3_irq_quiesce(struct tg3 *tp)
6497 {
6498  int i;
6499 
6500  BUG_ON(tp->irq_sync);
6501 
6502  tp->irq_sync = 1;
6503  smp_mb();
6504 
6505  for (i = 0; i < tp->irq_cnt; i++)
6506  synchronize_irq(tp->napi[i].irq_vec);
6507 }
6508 
6509 /* Fully shutdown all tg3 driver activity elsewhere in the system.
6510  * If irq_sync is non-zero, then the IRQ handler must be synchronized
6511  * with as well. Most of the time, this is not necessary except when
6512  * shutting down the device.
6513  */
6514 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync)
6515 {
6516  spin_lock_bh(&tp->lock);
6517  if (irq_sync)
6518  tg3_irq_quiesce(tp);
6519 }
6520 
6521 static inline void tg3_full_unlock(struct tg3 *tp)
6522 {
6523  spin_unlock_bh(&tp->lock);
6524 }
6525 
6526 /* One-shot MSI handler - Chip automatically disables interrupt
6527  * after sending MSI so driver doesn't have to do it.
6528  */
6529 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id)
6530 {
6531  struct tg3_napi *tnapi = dev_id;
6532  struct tg3 *tp = tnapi->tp;
6533 
6534  prefetch(tnapi->hw_status);
6535  if (tnapi->rx_rcb)
6536  prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6537 
6538  if (likely(!tg3_irq_sync(tp)))
6539  napi_schedule(&tnapi->napi);
6540 
6541  return IRQ_HANDLED;
6542 }
6543 
6544 /* MSI ISR - No need to check for interrupt sharing and no need to
6545  * flush status block and interrupt mailbox. PCI ordering rules
6546  * guarantee that MSI will arrive after the status block.
6547  */
6548 static irqreturn_t tg3_msi(int irq, void *dev_id)
6549 {
6550  struct tg3_napi *tnapi = dev_id;
6551  struct tg3 *tp = tnapi->tp;
6552 
6553  prefetch(tnapi->hw_status);
6554  if (tnapi->rx_rcb)
6555  prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6556  /*
6557  * Writing any value to intr-mbox-0 clears PCI INTA# and
6558  * chip-internal interrupt pending events.
6559  * Writing non-zero to intr-mbox-0 additional tells the
6560  * NIC to stop sending us irqs, engaging "in-intr-handler"
6561  * event coalescing.
6562  */
6563  tw32_mailbox(tnapi->int_mbox, 0x00000001);
6564  if (likely(!tg3_irq_sync(tp)))
6565  napi_schedule(&tnapi->napi);
6566 
6567  return IRQ_RETVAL(1);
6568 }
6569 
6570 static irqreturn_t tg3_interrupt(int irq, void *dev_id)
6571 {
6572  struct tg3_napi *tnapi = dev_id;
6573  struct tg3 *tp = tnapi->tp;
6574  struct tg3_hw_status *sblk = tnapi->hw_status;
6575  unsigned int handled = 1;
6576 
6577  /* In INTx mode, it is possible for the interrupt to arrive at
6578  * the CPU before the status block posted prior to the interrupt.
6579  * Reading the PCI State register will confirm whether the
6580  * interrupt is ours and will flush the status block.
6581  */
6582  if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) {
6583  if (tg3_flag(tp, CHIP_RESETTING) ||
6585  handled = 0;
6586  goto out;
6587  }
6588  }
6589 
6590  /*
6591  * Writing any value to intr-mbox-0 clears PCI INTA# and
6592  * chip-internal interrupt pending events.
6593  * Writing non-zero to intr-mbox-0 additional tells the
6594  * NIC to stop sending us irqs, engaging "in-intr-handler"
6595  * event coalescing.
6596  *
6597  * Flush the mailbox to de-assert the IRQ immediately to prevent
6598  * spurious interrupts. The flush impacts performance but
6599  * excessive spurious interrupts can be worse in some cases.
6600  */
6602  if (tg3_irq_sync(tp))
6603  goto out;
6604  sblk->status &= ~SD_STATUS_UPDATED;
6605  if (likely(tg3_has_work(tnapi))) {
6606  prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6607  napi_schedule(&tnapi->napi);
6608  } else {
6609  /* No work, shared interrupt perhaps? re-enable
6610  * interrupts, and flush that PCI write
6611  */
6613  0x00000000);
6614  }
6615 out:
6616  return IRQ_RETVAL(handled);
6617 }
6618 
6619 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id)
6620 {
6621  struct tg3_napi *tnapi = dev_id;
6622  struct tg3 *tp = tnapi->tp;
6623  struct tg3_hw_status *sblk = tnapi->hw_status;
6624  unsigned int handled = 1;
6625 
6626  /* In INTx mode, it is possible for the interrupt to arrive at
6627  * the CPU before the status block posted prior to the interrupt.
6628  * Reading the PCI State register will confirm whether the
6629  * interrupt is ours and will flush the status block.
6630  */
6631  if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) {
6632  if (tg3_flag(tp, CHIP_RESETTING) ||
6634  handled = 0;
6635  goto out;
6636  }
6637  }
6638 
6639  /*
6640  * writing any value to intr-mbox-0 clears PCI INTA# and
6641  * chip-internal interrupt pending events.
6642  * writing non-zero to intr-mbox-0 additional tells the
6643  * NIC to stop sending us irqs, engaging "in-intr-handler"
6644  * event coalescing.
6645  *
6646  * Flush the mailbox to de-assert the IRQ immediately to prevent
6647  * spurious interrupts. The flush impacts performance but
6648  * excessive spurious interrupts can be worse in some cases.
6649  */
6651 
6652  /*
6653  * In a shared interrupt configuration, sometimes other devices'
6654  * interrupts will scream. We record the current status tag here
6655  * so that the above check can report that the screaming interrupts
6656  * are unhandled. Eventually they will be silenced.
6657  */
6658  tnapi->last_irq_tag = sblk->status_tag;
6659 
6660  if (tg3_irq_sync(tp))
6661  goto out;
6662 
6663  prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]);
6664 
6665  napi_schedule(&tnapi->napi);
6666 
6667 out:
6668  return IRQ_RETVAL(handled);
6669 }
6670 
6671 /* ISR for interrupt test */
6672 static irqreturn_t tg3_test_isr(int irq, void *dev_id)
6673 {
6674  struct tg3_napi *tnapi = dev_id;
6675  struct tg3 *tp = tnapi->tp;
6676  struct tg3_hw_status *sblk = tnapi->hw_status;
6677 
6678  if ((sblk->status & SD_STATUS_UPDATED) ||
6680  tg3_disable_ints(tp);
6681  return IRQ_RETVAL(1);
6682  }
6683  return IRQ_RETVAL(0);
6684 }
6685 
6686 #ifdef CONFIG_NET_POLL_CONTROLLER
6687 static void tg3_poll_controller(struct net_device *dev)
6688 {
6689  int i;
6690  struct tg3 *tp = netdev_priv(dev);
6691 
6692  for (i = 0; i < tp->irq_cnt; i++)
6693  tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]);
6694 }
6695 #endif
6696 
6697 static void tg3_tx_timeout(struct net_device *dev)
6698 {
6699  struct tg3 *tp = netdev_priv(dev);
6700 
6701  if (netif_msg_tx_err(tp)) {
6702  netdev_err(dev, "transmit timed out, resetting\n");
6703  tg3_dump_state(tp);
6704  }
6705 
6706  tg3_reset_task_schedule(tp);
6707 }
6708 
6709 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */
6710 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
6711 {
6712  u32 base = (u32) mapping & 0xffffffff;
6713 
6714  return (base > 0xffffdcc0) && (base + len + 8 < base);
6715 }
6716 
6717 /* Test for DMA addresses > 40-bit */
6718 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping,
6719  int len)
6720 {
6721 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64)
6722  if (tg3_flag(tp, 40BIT_DMA_BUG))
6723  return ((u64) mapping + len) > DMA_BIT_MASK(40);
6724  return 0;
6725 #else
6726  return 0;
6727 #endif
6728 }
6729 
6730 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd,
6731  dma_addr_t mapping, u32 len, u32 flags,
6732  u32 mss, u32 vlan)
6733 {
6734  txbd->addr_hi = ((u64) mapping >> 32);
6735  txbd->addr_lo = ((u64) mapping & 0xffffffff);
6736  txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff);
6737  txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT);
6738 }
6739 
6740 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget,
6741  dma_addr_t map, u32 len, u32 flags,
6742  u32 mss, u32 vlan)
6743 {
6744  struct tg3 *tp = tnapi->tp;
6745  bool hwbug = false;
6746 
6747  if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8)
6748  hwbug = true;
6749 
6750  if (tg3_4g_overflow_test(map, len))
6751  hwbug = true;
6752 
6753  if (tg3_40bit_overflow_test(tp, map, len))
6754  hwbug = true;
6755 
6756  if (tp->dma_limit) {
6757  u32 prvidx = *entry;
6758  u32 tmp_flag = flags & ~TXD_FLAG_END;
6759  while (len > tp->dma_limit && *budget) {
6760  u32 frag_len = tp->dma_limit;
6761  len -= tp->dma_limit;
6762 
6763  /* Avoid the 8byte DMA problem */
6764  if (len <= 8) {
6765  len += tp->dma_limit / 2;
6766  frag_len = tp->dma_limit / 2;
6767  }
6768 
6769  tnapi->tx_buffers[*entry].fragmented = true;
6770 
6771  tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6772  frag_len, tmp_flag, mss, vlan);
6773  *budget -= 1;
6774  prvidx = *entry;
6775  *entry = NEXT_TX(*entry);
6776 
6777  map += frag_len;
6778  }
6779 
6780  if (len) {
6781  if (*budget) {
6782  tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6783  len, flags, mss, vlan);
6784  *budget -= 1;
6785  *entry = NEXT_TX(*entry);
6786  } else {
6787  hwbug = true;
6788  tnapi->tx_buffers[prvidx].fragmented = false;
6789  }
6790  }
6791  } else {
6792  tg3_tx_set_bd(&tnapi->tx_ring[*entry], map,
6793  len, flags, mss, vlan);
6794  *entry = NEXT_TX(*entry);
6795  }
6796 
6797  return hwbug;
6798 }
6799 
6800 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last)
6801 {
6802  int i;
6803  struct sk_buff *skb;
6804  struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry];
6805 
6806  skb = txb->skb;
6807  txb->skb = NULL;
6808 
6809  pci_unmap_single(tnapi->tp->pdev,
6810  dma_unmap_addr(txb, mapping),
6811  skb_headlen(skb),
6813 
6814  while (txb->fragmented) {
6815  txb->fragmented = false;
6816  entry = NEXT_TX(entry);
6817  txb = &tnapi->tx_buffers[entry];
6818  }
6819 
6820  for (i = 0; i <= last; i++) {
6821  const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
6822 
6823  entry = NEXT_TX(entry);
6824  txb = &tnapi->tx_buffers[entry];
6825 
6826  pci_unmap_page(tnapi->tp->pdev,
6827  dma_unmap_addr(txb, mapping),
6828  skb_frag_size(frag), PCI_DMA_TODEVICE);
6829 
6830  while (txb->fragmented) {
6831  txb->fragmented = false;
6832  entry = NEXT_TX(entry);
6833  txb = &tnapi->tx_buffers[entry];
6834  }
6835  }
6836 }
6837 
6838 /* Workaround 4GB and 40-bit hardware DMA bugs. */
6839 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi,
6840  struct sk_buff **pskb,
6841  u32 *entry, u32 *budget,
6842  u32 base_flags, u32 mss, u32 vlan)
6843 {
6844  struct tg3 *tp = tnapi->tp;
6845  struct sk_buff *new_skb, *skb = *pskb;
6846  dma_addr_t new_addr = 0;
6847  int ret = 0;
6848 
6850  new_skb = skb_copy(skb, GFP_ATOMIC);
6851  else {
6852  int more_headroom = 4 - ((unsigned long)skb->data & 3);
6853 
6854  new_skb = skb_copy_expand(skb,
6855  skb_headroom(skb) + more_headroom,
6856  skb_tailroom(skb), GFP_ATOMIC);
6857  }
6858 
6859  if (!new_skb) {
6860  ret = -1;
6861  } else {
6862  /* New SKB is guaranteed to be linear. */
6863  new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len,
6865  /* Make sure the mapping succeeded */
6866  if (pci_dma_mapping_error(tp->pdev, new_addr)) {
6867  dev_kfree_skb(new_skb);
6868  ret = -1;
6869  } else {
6870  u32 save_entry = *entry;
6871 
6872  base_flags |= TXD_FLAG_END;
6873 
6874  tnapi->tx_buffers[*entry].skb = new_skb;
6875  dma_unmap_addr_set(&tnapi->tx_buffers[*entry],
6876  mapping, new_addr);
6877 
6878  if (tg3_tx_frag_set(tnapi, entry, budget, new_addr,
6879  new_skb->len, base_flags,
6880  mss, vlan)) {
6881  tg3_tx_skb_unmap(tnapi, save_entry, -1);
6882  dev_kfree_skb(new_skb);
6883  ret = -1;
6884  }
6885  }
6886  }
6887 
6888  dev_kfree_skb(skb);
6889  *pskb = new_skb;
6890  return ret;
6891 }
6892 
6893 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *);
6894 
6895 /* Use GSO to workaround a rare TSO bug that may be triggered when the
6896  * TSO header is greater than 80 bytes.
6897  */
6898 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
6899 {
6900  struct sk_buff *segs, *nskb;
6901  u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
6902 
6903  /* Estimate the number of fragments in the worst case */
6904  if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) {
6905  netif_stop_queue(tp->dev);
6906 
6907  /* netif_tx_stop_queue() must be done before checking
6908  * checking tx index in tg3_tx_avail() below, because in
6909  * tg3_tx(), we update tx index before checking for
6910  * netif_tx_queue_stopped().
6911  */
6912  smp_mb();
6913  if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)
6914  return NETDEV_TX_BUSY;
6915 
6916  netif_wake_queue(tp->dev);
6917  }
6918 
6919  segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO);
6920  if (IS_ERR(segs))
6921  goto tg3_tso_bug_end;
6922 
6923  do {
6924  nskb = segs;
6925  segs = segs->next;
6926  nskb->next = NULL;
6927  tg3_start_xmit(nskb, tp->dev);
6928  } while (segs);
6929 
6930 tg3_tso_bug_end:
6931  dev_kfree_skb(skb);
6932 
6933  return NETDEV_TX_OK;
6934 }
6935 
6936 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and
6937  * support TG3_FLAG_HW_TSO_1 or firmware TSO only.
6938  */
6939 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
6940 {
6941  struct tg3 *tp = netdev_priv(dev);
6942  u32 len, entry, base_flags, mss, vlan = 0;
6943  u32 budget;
6944  int i = -1, would_hit_hwbug;
6946  struct tg3_napi *tnapi;
6947  struct netdev_queue *txq;
6948  unsigned int last;
6949 
6950  txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb));
6951  tnapi = &tp->napi[skb_get_queue_mapping(skb)];
6952  if (tg3_flag(tp, ENABLE_TSS))
6953  tnapi++;
6954 
6955  budget = tg3_tx_avail(tnapi);
6956 
6957  /* We are running in BH disabled context with netif_tx_lock
6958  * and TX reclaim runs via tp->napi.poll inside of a software
6959  * interrupt. Furthermore, IRQ processing runs lockless so we have
6960  * no IRQ context deadlocks to worry about either. Rejoice!
6961  */
6962  if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) {
6963  if (!netif_tx_queue_stopped(txq)) {
6964  netif_tx_stop_queue(txq);
6965 
6966  /* This is a hard error, log it. */
6967  netdev_err(dev,
6968  "BUG! Tx Ring full when queue awake!\n");
6969  }
6970  return NETDEV_TX_BUSY;
6971  }
6972 
6973  entry = tnapi->tx_prod;
6974  base_flags = 0;
6975  if (skb->ip_summed == CHECKSUM_PARTIAL)
6976  base_flags |= TXD_FLAG_TCPUDP_CSUM;
6977 
6978  mss = skb_shinfo(skb)->gso_size;
6979  if (mss) {
6980  struct iphdr *iph;
6981  u32 tcp_opt_len, hdr_len;
6982 
6983  if (skb_header_cloned(skb) &&
6984  pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
6985  goto drop;
6986 
6987  iph = ip_hdr(skb);
6988  tcp_opt_len = tcp_optlen(skb);
6989 
6990  hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN;
6991 
6992  if (!skb_is_gso_v6(skb)) {
6993  iph->check = 0;
6994  iph->tot_len = htons(mss + hdr_len);
6995  }
6996 
6997  if (unlikely((ETH_HLEN + hdr_len) > 80) &&
6998  tg3_flag(tp, TSO_BUG))
6999  return tg3_tso_bug(tp, skb);
7000 
7001  base_flags |= (TXD_FLAG_CPU_PRE_DMA |
7003 
7004  if (tg3_flag(tp, HW_TSO_1) ||
7005  tg3_flag(tp, HW_TSO_2) ||
7006  tg3_flag(tp, HW_TSO_3)) {
7007  tcp_hdr(skb)->check = 0;
7008  base_flags &= ~TXD_FLAG_TCPUDP_CSUM;
7009  } else
7010  tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
7011  iph->daddr, 0,
7012  IPPROTO_TCP,
7013  0);
7014 
7015  if (tg3_flag(tp, HW_TSO_3)) {
7016  mss |= (hdr_len & 0xc) << 12;
7017  if (hdr_len & 0x10)
7018  base_flags |= 0x00000010;
7019  base_flags |= (hdr_len & 0x3e0) << 5;
7020  } else if (tg3_flag(tp, HW_TSO_2))
7021  mss |= hdr_len << 9;
7022  else if (tg3_flag(tp, HW_TSO_1) ||
7024  if (tcp_opt_len || iph->ihl > 5) {
7025  int tsflags;
7026 
7027  tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7028  mss |= (tsflags << 11);
7029  }
7030  } else {
7031  if (tcp_opt_len || iph->ihl > 5) {
7032  int tsflags;
7033 
7034  tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2);
7035  base_flags |= tsflags << 12;
7036  }
7037  }
7038  }
7039 
7040  if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
7041  !mss && skb->len > VLAN_ETH_FRAME_LEN)
7042  base_flags |= TXD_FLAG_JMB_PKT;
7043 
7044  if (vlan_tx_tag_present(skb)) {
7045  base_flags |= TXD_FLAG_VLAN;
7046  vlan = vlan_tx_tag_get(skb);
7047  }
7048 
7049  len = skb_headlen(skb);
7050 
7051  mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE);
7052  if (pci_dma_mapping_error(tp->pdev, mapping))
7053  goto drop;
7054 
7055 
7056  tnapi->tx_buffers[entry].skb = skb;
7057  dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping);
7058 
7059  would_hit_hwbug = 0;
7060 
7061  if (tg3_flag(tp, 5701_DMA_BUG))
7062  would_hit_hwbug = 1;
7063 
7064  if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags |
7065  ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0),
7066  mss, vlan)) {
7067  would_hit_hwbug = 1;
7068  } else if (skb_shinfo(skb)->nr_frags > 0) {
7069  u32 tmp_mss = mss;
7070 
7071  if (!tg3_flag(tp, HW_TSO_1) &&
7072  !tg3_flag(tp, HW_TSO_2) &&
7073  !tg3_flag(tp, HW_TSO_3))
7074  tmp_mss = 0;
7075 
7076  /* Now loop through additional data
7077  * fragments, and queue them.
7078  */
7079  last = skb_shinfo(skb)->nr_frags - 1;
7080  for (i = 0; i <= last; i++) {
7081  skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
7082 
7083  len = skb_frag_size(frag);
7084  mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0,
7085  len, DMA_TO_DEVICE);
7086 
7087  tnapi->tx_buffers[entry].skb = NULL;
7088  dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping,
7089  mapping);
7090  if (dma_mapping_error(&tp->pdev->dev, mapping))
7091  goto dma_error;
7092 
7093  if (!budget ||
7094  tg3_tx_frag_set(tnapi, &entry, &budget, mapping,
7095  len, base_flags |
7096  ((i == last) ? TXD_FLAG_END : 0),
7097  tmp_mss, vlan)) {
7098  would_hit_hwbug = 1;
7099  break;
7100  }
7101  }
7102  }
7103 
7104  if (would_hit_hwbug) {
7105  tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i);
7106 
7107  /* If the workaround fails due to memory/mapping
7108  * failure, silently drop this packet.
7109  */
7110  entry = tnapi->tx_prod;
7111  budget = tg3_tx_avail(tnapi);
7112  if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget,
7113  base_flags, mss, vlan))
7114  goto drop_nofree;
7115  }
7116 
7117  skb_tx_timestamp(skb);
7118  netdev_tx_sent_queue(txq, skb->len);
7119 
7120  /* Sync BD data before updating mailbox */
7121  wmb();
7122 
7123  /* Packets are ready, update Tx producer idx local and on card. */
7124  tw32_tx_mbox(tnapi->prodmbox, entry);
7125 
7126  tnapi->tx_prod = entry;
7127  if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) {
7128  netif_tx_stop_queue(txq);
7129 
7130  /* netif_tx_stop_queue() must be done before checking
7131  * checking tx index in tg3_tx_avail() below, because in
7132  * tg3_tx(), we update tx index before checking for
7133  * netif_tx_queue_stopped().
7134  */
7135  smp_mb();
7136  if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))
7137  netif_tx_wake_queue(txq);
7138  }
7139 
7140  mmiowb();
7141  return NETDEV_TX_OK;
7142 
7143 dma_error:
7144  tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i);
7145  tnapi->tx_buffers[tnapi->tx_prod].skb = NULL;
7146 drop:
7147  dev_kfree_skb(skb);
7148 drop_nofree:
7149  tp->tx_dropped++;
7150  return NETDEV_TX_OK;
7151 }
7152 
7153 static void tg3_mac_loopback(struct tg3 *tp, bool enable)
7154 {
7155  if (enable) {
7156  tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX |
7158 
7160 
7161  if (!tg3_flag(tp, 5705_PLUS))
7163 
7166  else
7168  } else {
7170 
7171  if (tg3_flag(tp, 5705_PLUS) ||
7172  (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) ||
7175  }
7176 
7177  tw32(MAC_MODE, tp->mac_mode);
7178  udelay(40);
7179 }
7180 
7181 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk)
7182 {
7183  u32 val, bmcr, mac_mode, ptest = 0;
7184 
7185  tg3_phy_toggle_apd(tp, false);
7186  tg3_phy_toggle_automdix(tp, 0);
7187 
7188  if (extlpbk && tg3_phy_set_extloopbk(tp))
7189  return -EIO;
7190 
7191  bmcr = BMCR_FULLDPLX;
7192  switch (speed) {
7193  case SPEED_10:
7194  break;
7195  case SPEED_100:
7196  bmcr |= BMCR_SPEED100;
7197  break;
7198  case SPEED_1000:
7199  default:
7200  if (tp->phy_flags & TG3_PHYFLG_IS_FET) {
7201  speed = SPEED_100;
7202  bmcr |= BMCR_SPEED100;
7203  } else {
7204  speed = SPEED_1000;
7205  bmcr |= BMCR_SPEED1000;
7206  }
7207  }
7208 
7209  if (extlpbk) {
7210  if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
7211  tg3_readphy(tp, MII_CTRL1000, &val);
7212  val |= CTL1000_AS_MASTER |
7214  tg3_writephy(tp, MII_CTRL1000, val);
7215  } else {
7216  ptest = MII_TG3_FET_PTEST_TRIM_SEL |
7218  tg3_writephy(tp, MII_TG3_FET_PTEST, ptest);
7219  }
7220  } else
7221  bmcr |= BMCR_LOOPBACK;
7222 
7223  tg3_writephy(tp, MII_BMCR, bmcr);
7224 
7225  /* The write needs to be flushed for the FETs */
7226  if (tp->phy_flags & TG3_PHYFLG_IS_FET)
7227  tg3_readphy(tp, MII_BMCR, &bmcr);
7228 
7229  udelay(40);
7230 
7231  if ((tp->phy_flags & TG3_PHYFLG_IS_FET) &&
7233  tg3_writephy(tp, MII_TG3_FET_PTEST, ptest |
7236 
7237  /* The write needs to be flushed for the AC131 */
7238  tg3_readphy(tp, MII_TG3_FET_PTEST, &val);
7239  }
7240 
7241  /* Reset to prevent losing 1st rx packet intermittently */
7242  if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
7243  tg3_flag(tp, 5780_CLASS)) {
7245  udelay(10);
7246  tw32_f(MAC_RX_MODE, tp->rx_mode);
7247  }
7248 
7249  mac_mode = tp->mac_mode &
7251  if (speed == SPEED_1000)
7252  mac_mode |= MAC_MODE_PORT_MODE_GMII;
7253  else
7254  mac_mode |= MAC_MODE_PORT_MODE_MII;
7255 
7257  u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK;
7258 
7259  if (masked_phy_id == TG3_PHY_ID_BCM5401)
7260  mac_mode &= ~MAC_MODE_LINK_POLARITY;
7261  else if (masked_phy_id == TG3_PHY_ID_BCM5411)
7262  mac_mode |= MAC_MODE_LINK_POLARITY;
7263 
7264  tg3_writephy(tp, MII_TG3_EXT_CTRL,
7266  }
7267 
7268  tw32(MAC_MODE, mac_mode);
7269  udelay(40);
7270 
7271  return 0;
7272 }
7273 
7274 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features)
7275 {
7276  struct tg3 *tp = netdev_priv(dev);
7277 
7278  if (features & NETIF_F_LOOPBACK) {
7280  return;
7281 
7282  spin_lock_bh(&tp->lock);
7283  tg3_mac_loopback(tp, true);
7284  netif_carrier_on(tp->dev);
7285  spin_unlock_bh(&tp->lock);
7286  netdev_info(dev, "Internal MAC loopback mode enabled.\n");
7287  } else {
7288  if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK))
7289  return;
7290 
7291  spin_lock_bh(&tp->lock);
7292  tg3_mac_loopback(tp, false);
7293  /* Force link status check */
7294  tg3_setup_phy(tp, 1);
7295  spin_unlock_bh(&tp->lock);
7296  netdev_info(dev, "Internal MAC loopback mode disabled.\n");
7297  }
7298 }
7299 
7300 static netdev_features_t tg3_fix_features(struct net_device *dev,
7301  netdev_features_t features)
7302 {
7303  struct tg3 *tp = netdev_priv(dev);
7304 
7305  if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS))
7306  features &= ~NETIF_F_ALL_TSO;
7307 
7308  return features;
7309 }
7310 
7311 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
7312 {
7314 
7315  if ((changed & NETIF_F_LOOPBACK) && netif_running(dev))
7316  tg3_set_loopback(dev, features);
7317 
7318  return 0;
7319 }
7320 
7321 static void tg3_rx_prodring_free(struct tg3 *tp,
7322  struct tg3_rx_prodring_set *tpr)
7323 {
7324  int i;
7325 
7326  if (tpr != &tp->napi[0].prodring) {
7327  for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx;
7328  i = (i + 1) & tp->rx_std_ring_mask)
7329  tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
7330  tp->rx_pkt_map_sz);
7331 
7332  if (tg3_flag(tp, JUMBO_CAPABLE)) {
7333  for (i = tpr->rx_jmb_cons_idx;
7334  i != tpr->rx_jmb_prod_idx;
7335  i = (i + 1) & tp->rx_jmb_ring_mask) {
7336  tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7338  }
7339  }
7340 
7341  return;
7342  }
7343 
7344  for (i = 0; i <= tp->rx_std_ring_mask; i++)
7345  tg3_rx_data_free(tp, &tpr->rx_std_buffers[i],
7346  tp->rx_pkt_map_sz);
7347 
7348  if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7349  for (i = 0; i <= tp->rx_jmb_ring_mask; i++)
7350  tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i],
7352  }
7353 }
7354 
7355 /* Initialize rx rings for packet processing.
7356  *
7357  * The chip has been shut down and the driver detached from
7358  * the networking, so no interrupts or new tx packets will
7359  * end up in the driver. tp->{tx,}lock are held and thus
7360  * we may not sleep.
7361  */
7362 static int tg3_rx_prodring_alloc(struct tg3 *tp,
7363  struct tg3_rx_prodring_set *tpr)
7364 {
7365  u32 i, rx_pkt_dma_sz;
7366 
7367  tpr->rx_std_cons_idx = 0;
7368  tpr->rx_std_prod_idx = 0;
7369  tpr->rx_jmb_cons_idx = 0;
7370  tpr->rx_jmb_prod_idx = 0;
7371 
7372  if (tpr != &tp->napi[0].prodring) {
7373  memset(&tpr->rx_std_buffers[0], 0,
7375  if (tpr->rx_jmb_buffers)
7376  memset(&tpr->rx_jmb_buffers[0], 0,
7378  goto done;
7379  }
7380 
7381  /* Zero out all descriptors. */
7382  memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp));
7383 
7384  rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ;
7385  if (tg3_flag(tp, 5780_CLASS) &&
7386  tp->dev->mtu > ETH_DATA_LEN)
7387  rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ;
7388  tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz);
7389 
7390  /* Initialize invariants of the rings, we only set this
7391  * stuff once. This works because the card does not
7392  * write into the rx buffer posting rings.
7393  */
7394  for (i = 0; i <= tp->rx_std_ring_mask; i++) {
7395  struct tg3_rx_buffer_desc *rxd;
7396 
7397  rxd = &tpr->rx_std[i];
7398  rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT;
7400  rxd->opaque = (RXD_OPAQUE_RING_STD |
7401  (i << RXD_OPAQUE_INDEX_SHIFT));
7402  }
7403 
7404  /* Now allocate fresh SKBs for each rx ring. */
7405  for (i = 0; i < tp->rx_pending; i++) {
7406  unsigned int frag_size;
7407 
7408  if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i,
7409  &frag_size) < 0) {
7410  netdev_warn(tp->dev,
7411  "Using a smaller RX standard ring. Only "
7412  "%d out of %d buffers were allocated "
7413  "successfully\n", i, tp->rx_pending);
7414  if (i == 0)
7415  goto initfail;
7416  tp->rx_pending = i;
7417  break;
7418  }
7419  }
7420 
7421  if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
7422  goto done;
7423 
7424  memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp));
7425 
7426  if (!tg3_flag(tp, JUMBO_RING_ENABLE))
7427  goto done;
7428 
7429  for (i = 0; i <= tp->rx_jmb_ring_mask; i++) {
7430  struct tg3_rx_buffer_desc *rxd;
7431 
7432  rxd = &tpr->rx_jmb[i].std;
7436  rxd->opaque = (RXD_OPAQUE_RING_JUMBO |
7437  (i << RXD_OPAQUE_INDEX_SHIFT));
7438  }
7439 
7440  for (i = 0; i < tp->rx_jumbo_pending; i++) {
7441  unsigned int frag_size;
7442 
7443  if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i,
7444  &frag_size) < 0) {
7445  netdev_warn(tp->dev,
7446  "Using a smaller RX jumbo ring. Only %d "
7447  "out of %d buffers were allocated "
7448  "successfully\n", i, tp->rx_jumbo_pending);
7449  if (i == 0)
7450  goto initfail;
7451  tp->rx_jumbo_pending = i;
7452  break;
7453  }
7454  }
7455 
7456 done:
7457  return 0;
7458 
7459 initfail:
7460  tg3_rx_prodring_free(tp, tpr);
7461  return -ENOMEM;
7462 }
7463 
7464 static void tg3_rx_prodring_fini(struct tg3 *tp,
7465  struct tg3_rx_prodring_set *tpr)
7466 {
7467  kfree(tpr->rx_std_buffers);
7468  tpr->rx_std_buffers = NULL;
7469  kfree(tpr->rx_jmb_buffers);
7470  tpr->rx_jmb_buffers = NULL;
7471  if (tpr->rx_std) {
7473  tpr->rx_std, tpr->rx_std_mapping);
7474  tpr->rx_std = NULL;
7475  }
7476  if (tpr->rx_jmb) {
7478  tpr->rx_jmb, tpr->rx_jmb_mapping);
7479  tpr->rx_jmb = NULL;
7480  }
7481 }
7482 
7483 static int tg3_rx_prodring_init(struct tg3 *tp,
7484  struct tg3_rx_prodring_set *tpr)
7485 {
7486  tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp),
7487  GFP_KERNEL);
7488  if (!tpr->rx_std_buffers)
7489  return -ENOMEM;
7490 
7491  tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev,
7493  &tpr->rx_std_mapping,
7494  GFP_KERNEL);
7495  if (!tpr->rx_std)
7496  goto err_out;
7497 
7498  if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) {
7499  tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp),
7500  GFP_KERNEL);
7501  if (!tpr->rx_jmb_buffers)
7502  goto err_out;
7503 
7504  tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev,
7506  &tpr->rx_jmb_mapping,
7507  GFP_KERNEL);
7508  if (!tpr->rx_jmb)
7509  goto err_out;
7510  }
7511 
7512  return 0;
7513 
7514 err_out:
7515  tg3_rx_prodring_fini(tp, tpr);
7516  return -ENOMEM;
7517 }
7518 
7519 /* Free up pending packets in all rx/tx rings.
7520  *
7521  * The chip has been shut down and the driver detached from
7522  * the networking, so no interrupts or new tx packets will
7523  * end up in the driver. tp->{tx,}lock is not held and we are not
7524  * in an interrupt context and thus may sleep.
7525  */
7526 static void tg3_free_rings(struct tg3 *tp)
7527 {
7528  int i, j;
7529 
7530  for (j = 0; j < tp->irq_cnt; j++) {
7531  struct tg3_napi *tnapi = &tp->napi[j];
7532 
7533  tg3_rx_prodring_free(tp, &tnapi->prodring);
7534 
7535  if (!tnapi->tx_buffers)
7536  continue;
7537 
7538  for (i = 0; i < TG3_TX_RING_SIZE; i++) {
7539  struct sk_buff *skb = tnapi->tx_buffers[i].skb;
7540 
7541  if (!skb)
7542  continue;
7543 
7544  tg3_tx_skb_unmap(tnapi, i,
7545  skb_shinfo(skb)->nr_frags - 1);
7546 
7547  dev_kfree_skb_any(skb);
7548  }
7549  netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
7550  }
7551 }
7552 
7553 /* Initialize tx/rx rings for packet processing.
7554  *
7555  * The chip has been shut down and the driver detached from
7556  * the networking, so no interrupts or new tx packets will
7557  * end up in the driver. tp->{tx,}lock are held and thus
7558  * we may not sleep.
7559  */
7560 static int tg3_init_rings(struct tg3 *tp)
7561 {
7562  int i;
7563 
7564  /* Free up all the SKBs. */
7565  tg3_free_rings(tp);
7566 
7567  for (i = 0; i < tp->irq_cnt; i++) {
7568  struct tg3_napi *tnapi = &tp->napi[i];
7569 
7570  tnapi->last_tag = 0;
7571  tnapi->last_irq_tag = 0;
7572  tnapi->hw_status->status = 0;
7573  tnapi->hw_status->status_tag = 0;
7574  memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7575 
7576  tnapi->tx_prod = 0;
7577  tnapi->tx_cons = 0;
7578  if (tnapi->tx_ring)
7579  memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES);
7580 
7581  tnapi->rx_rcb_ptr = 0;
7582  if (tnapi->rx_rcb)
7583  memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7584 
7585  if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) {
7586  tg3_free_rings(tp);
7587  return -ENOMEM;
7588  }
7589  }
7590 
7591  return 0;
7592 }
7593 
7594 static void tg3_mem_tx_release(struct tg3 *tp)
7595 {
7596  int i;
7597 
7598  for (i = 0; i < tp->irq_max; i++) {
7599  struct tg3_napi *tnapi = &tp->napi[i];
7600 
7601  if (tnapi->tx_ring) {
7603  tnapi->tx_ring, tnapi->tx_desc_mapping);
7604  tnapi->tx_ring = NULL;
7605  }
7606 
7607  kfree(tnapi->tx_buffers);
7608  tnapi->tx_buffers = NULL;
7609  }
7610 }
7611 
7612 static int tg3_mem_tx_acquire(struct tg3 *tp)
7613 {
7614  int i;
7615  struct tg3_napi *tnapi = &tp->napi[0];
7616 
7617  /* If multivector TSS is enabled, vector 0 does not handle
7618  * tx interrupts. Don't allocate any resources for it.
7619  */
7620  if (tg3_flag(tp, ENABLE_TSS))
7621  tnapi++;
7622 
7623  for (i = 0; i < tp->txq_cnt; i++, tnapi++) {
7624  tnapi->tx_buffers = kzalloc(sizeof(struct tg3_tx_ring_info) *
7625  TG3_TX_RING_SIZE, GFP_KERNEL);
7626  if (!tnapi->tx_buffers)
7627  goto err_out;
7628 
7629  tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev,
7631  &tnapi->tx_desc_mapping,
7632  GFP_KERNEL);
7633  if (!tnapi->tx_ring)
7634  goto err_out;
7635  }
7636 
7637  return 0;
7638 
7639 err_out:
7640  tg3_mem_tx_release(tp);
7641  return -ENOMEM;
7642 }
7643 
7644 static void tg3_mem_rx_release(struct tg3 *tp)
7645 {
7646  int i;
7647 
7648  for (i = 0; i < tp->irq_max; i++) {
7649  struct tg3_napi *tnapi = &tp->napi[i];
7650 
7651  tg3_rx_prodring_fini(tp, &tnapi->prodring);
7652 
7653  if (!tnapi->rx_rcb)
7654  continue;
7655 
7656  dma_free_coherent(&tp->pdev->dev,
7658  tnapi->rx_rcb,
7659  tnapi->rx_rcb_mapping);
7660  tnapi->rx_rcb = NULL;
7661  }
7662 }
7663 
7664 static int tg3_mem_rx_acquire(struct tg3 *tp)
7665 {
7666  unsigned int i, limit;
7667 
7668  limit = tp->rxq_cnt;
7669 
7670  /* If RSS is enabled, we need a (dummy) producer ring
7671  * set on vector zero. This is the true hw prodring.
7672  */
7673  if (tg3_flag(tp, ENABLE_RSS))
7674  limit++;
7675 
7676  for (i = 0; i < limit; i++) {
7677  struct tg3_napi *tnapi = &tp->napi[i];
7678 
7679  if (tg3_rx_prodring_init(tp, &tnapi->prodring))
7680  goto err_out;
7681 
7682  /* If multivector RSS is enabled, vector 0
7683  * does not handle rx or tx interrupts.
7684  * Don't allocate any resources for it.
7685  */
7686  if (!i && tg3_flag(tp, ENABLE_RSS))
7687  continue;
7688 
7689  tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev,
7691  &tnapi->rx_rcb_mapping,
7692  GFP_KERNEL);
7693  if (!tnapi->rx_rcb)
7694  goto err_out;
7695 
7696  memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
7697  }
7698 
7699  return 0;
7700 
7701 err_out:
7702  tg3_mem_rx_release(tp);
7703  return -ENOMEM;
7704 }
7705 
7706 /*
7707  * Must not be invoked with interrupt sources disabled and
7708  * the hardware shutdown down.
7709  */
7710 static void tg3_free_consistent(struct tg3 *tp)
7711 {
7712  int i;
7713 
7714  for (i = 0; i < tp->irq_cnt; i++) {
7715  struct tg3_napi *tnapi = &tp->napi[i];
7716 
7717  if (tnapi->hw_status) {
7719  tnapi->hw_status,
7720  tnapi->status_mapping);
7721  tnapi->hw_status = NULL;
7722  }
7723  }
7724 
7725  tg3_mem_rx_release(tp);
7726  tg3_mem_tx_release(tp);
7727 
7728  if (tp->hw_stats) {
7729  dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats),
7730  tp->hw_stats, tp->stats_mapping);
7731  tp->hw_stats = NULL;
7732  }
7733 }
7734 
7735 /*
7736  * Must not be invoked with interrupt sources disabled and
7737  * the hardware shutdown down. Can sleep.
7738  */
7739 static int tg3_alloc_consistent(struct tg3 *tp)
7740 {
7741  int i;
7742 
7743  tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev,
7744  sizeof(struct tg3_hw_stats),
7745  &tp->stats_mapping,
7746  GFP_KERNEL);
7747  if (!tp->hw_stats)
7748  goto err_out;
7749 
7750  memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
7751 
7752  for (i = 0; i < tp->irq_cnt; i++) {
7753  struct tg3_napi *tnapi = &tp->napi[i];
7754  struct tg3_hw_status *sblk;
7755 
7756  tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev,
7758  &tnapi->status_mapping,
7759  GFP_KERNEL);
7760  if (!tnapi->hw_status)
7761  goto err_out;
7762 
7763  memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7764  sblk = tnapi->hw_status;
7765 
7766  if (tg3_flag(tp, ENABLE_RSS)) {
7767  u16 *prodptr = NULL;
7768 
7769  /*
7770  * When RSS is enabled, the status block format changes
7771  * slightly. The "rx_jumbo_consumer", "reserved",
7772  * and "rx_mini_consumer" members get mapped to the
7773  * other three rx return ring producer indexes.
7774  */
7775  switch (i) {
7776  case 1:
7777  prodptr = &sblk->idx[0].rx_producer;
7778  break;
7779  case 2:
7780  prodptr = &sblk->rx_jumbo_consumer;
7781  break;
7782  case 3:
7783  prodptr = &sblk->reserved;
7784  break;
7785  case 4:
7786  prodptr = &sblk->rx_mini_consumer;
7787  break;
7788  }
7789  tnapi->rx_rcb_prod_idx = prodptr;
7790  } else {
7791  tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer;
7792  }
7793  }
7794 
7795  if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp))
7796  goto err_out;
7797 
7798  return 0;
7799 
7800 err_out:
7801  tg3_free_consistent(tp);
7802  return -ENOMEM;
7803 }
7804 
7805 #define MAX_WAIT_CNT 1000
7806 
7807 /* To stop a block, clear the enable bit and poll till it
7808  * clears. tp->lock is held.
7809  */
7810 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent)
7811 {
7812  unsigned int i;
7813  u32 val;
7814 
7815  if (tg3_flag(tp, 5705_PLUS)) {
7816  switch (ofs) {
7817  case RCVLSC_MODE:
7818  case DMAC_MODE:
7819  case MBFREE_MODE:
7820  case BUFMGR_MODE:
7821  case MEMARB_MODE:
7822  /* We can't enable/disable these bits of the
7823  * 5705/5750, just say success.
7824  */
7825  return 0;
7826 
7827  default:
7828  break;
7829  }
7830  }
7831 
7832  val = tr32(ofs);
7833  val &= ~enable_bit;
7834  tw32_f(ofs, val);
7835 
7836  for (i = 0; i < MAX_WAIT_CNT; i++) {
7837  udelay(100);
7838  val = tr32(ofs);
7839  if ((val & enable_bit) == 0)
7840  break;
7841  }
7842 
7843  if (i == MAX_WAIT_CNT && !silent) {
7844  dev_err(&tp->pdev->dev,
7845  "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n",
7846  ofs, enable_bit);
7847  return -ENODEV;
7848  }
7849 
7850  return 0;
7851 }
7852 
7853 /* tp->lock is held. */
7854 static int tg3_abort_hw(struct tg3 *tp, int silent)
7855 {
7856  int i, err;
7857 
7858  tg3_disable_ints(tp);
7859 
7860  tp->rx_mode &= ~RX_MODE_ENABLE;
7861  tw32_f(MAC_RX_MODE, tp->rx_mode);
7862  udelay(10);
7863 
7864  err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent);
7865  err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent);
7866  err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent);
7867  err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent);
7868  err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent);
7869  err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent);
7870 
7871  err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent);
7872  err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent);
7873  err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent);
7874  err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent);
7875  err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent);
7876  err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent);
7877  err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent);
7878 
7879  tp->mac_mode &= ~MAC_MODE_TDE_ENABLE;
7880  tw32_f(MAC_MODE, tp->mac_mode);
7881  udelay(40);
7882 
7883  tp->tx_mode &= ~TX_MODE_ENABLE;
7884  tw32_f(MAC_TX_MODE, tp->tx_mode);
7885 
7886  for (i = 0; i < MAX_WAIT_CNT; i++) {
7887  udelay(100);
7888  if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE))
7889  break;
7890  }
7891  if (i >= MAX_WAIT_CNT) {
7892  dev_err(&tp->pdev->dev,
7893  "%s timed out, TX_MODE_ENABLE will not clear "
7894  "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE));
7895  err |= -ENODEV;
7896  }
7897 
7898  err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent);
7899  err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent);
7900  err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent);
7901 
7902  tw32(FTQ_RESET, 0xffffffff);
7903  tw32(FTQ_RESET, 0x00000000);
7904 
7905  err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent);
7906  err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent);
7907 
7908  for (i = 0; i < tp->irq_cnt; i++) {
7909  struct tg3_napi *tnapi = &tp->napi[i];
7910  if (tnapi->hw_status)
7911  memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
7912  }
7913 
7914  return err;
7915 }
7916 
7917 /* Save PCI command register before chip reset */
7918 static void tg3_save_pci_state(struct tg3 *tp)
7919 {
7920  pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd);
7921 }
7922 
7923 /* Restore PCI state after chip reset */
7924 static void tg3_restore_pci_state(struct tg3 *tp)
7925 {
7926  u32 val;
7927 
7928  /* Re-enable indirect register accesses. */
7929  pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
7930  tp->misc_host_ctrl);
7931 
7932  /* Set MAX PCI retry to zero. */
7934  if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
7935  tg3_flag(tp, PCIX_MODE))
7936  val |= PCISTATE_RETRY_SAME_DMA;
7937  /* Allow reads and writes to the APE register and memory space. */
7938  if (tg3_flag(tp, ENABLE_APE))
7942  pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val);
7943 
7944  pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd);
7945 
7946  if (!tg3_flag(tp, PCI_EXPRESS)) {
7947  pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
7948  tp->pci_cacheline_sz);
7949  pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
7950  tp->pci_lat_timer);
7951  }
7952 
7953  /* Make sure PCI-X relaxed ordering bit is clear. */
7954  if (tg3_flag(tp, PCIX_MODE)) {
7955  u16 pcix_cmd;
7956 
7957  pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7958  &pcix_cmd);
7959  pcix_cmd &= ~PCI_X_CMD_ERO;
7960  pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
7961  pcix_cmd);
7962  }
7963 
7964  if (tg3_flag(tp, 5780_CLASS)) {
7965 
7966  /* Chip reset on 5780 will reset MSI enable bit,
7967  * so need to restore it.
7968  */
7969  if (tg3_flag(tp, USING_MSI)) {
7970  u16 ctrl;
7971 
7972  pci_read_config_word(tp->pdev,
7973  tp->msi_cap + PCI_MSI_FLAGS,
7974  &ctrl);
7975  pci_write_config_word(tp->pdev,
7976  tp->msi_cap + PCI_MSI_FLAGS,
7977  ctrl | PCI_MSI_FLAGS_ENABLE);
7978  val = tr32(MSGINT_MODE);
7980  }
7981  }
7982 }
7983 
7984 /* tp->lock is held. */
7985 static int tg3_chip_reset(struct tg3 *tp)
7986 {
7987  u32 val;
7988  void (*write_op)(struct tg3 *, u32, u32);
7989  int i, err;
7990 
7991  tg3_nvram_lock(tp);
7992 
7993  tg3_ape_lock(tp, TG3_APE_LOCK_GRC);
7994 
7995  /* No matching tg3_nvram_unlock() after this because
7996  * chip reset below will undo the nvram lock.
7997  */
7998  tp->nvram_lock_cnt = 0;
7999 
8000  /* GRC_MISC_CFG core clock reset will clear the memory
8001  * enable bit in PCI register 4 and the MSI enable bit
8002  * on some chips, so we save relevant registers here.
8003  */
8004  tg3_save_pci_state(tp);
8005 
8007  tg3_flag(tp, 5755_PLUS))
8008  tw32(GRC_FASTBOOT_PC, 0);
8009 
8010  /*
8011  * We must avoid the readl() that normally takes place.
8012  * It locks machines, causes machine checks, and other
8013  * fun things. So, temporarily disable the 5701
8014  * hardware workaround, while we do the reset.
8015  */
8016  write_op = tp->write32;
8017  if (write_op == tg3_write_flush_reg32)
8018  tp->write32 = tg3_write32;
8019 
8020  /* Prevent the irq handler from reading or writing PCI registers
8021  * during chip reset when the memory enable bit in the PCI command
8022  * register may be cleared. The chip does not generate interrupt
8023  * at this time, but the irq handler may still be called due to irq
8024  * sharing or irqpoll.
8025  */
8026  tg3_flag_set(tp, CHIP_RESETTING);
8027  for (i = 0; i < tp->irq_cnt; i++) {
8028  struct tg3_napi *tnapi = &tp->napi[i];
8029  if (tnapi->hw_status) {
8030  tnapi->hw_status->status = 0;
8031  tnapi->hw_status->status_tag = 0;
8032  }
8033  tnapi->last_tag = 0;
8034  tnapi->last_irq_tag = 0;
8035  }
8036  smp_mb();
8037 
8038  for (i = 0; i < tp->irq_cnt; i++)
8039  synchronize_irq(tp->napi[i].irq_vec);
8040 
8044  }
8045 
8046  /* do the reset */
8048 
8049  if (tg3_flag(tp, PCI_EXPRESS)) {
8050  /* Force PCIe 1.0a mode */
8052  !tg3_flag(tp, 57765_PLUS) &&
8056 
8057  if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) {
8058  tw32(GRC_MISC_CFG, (1 << 29));
8059  val |= (1 << 29);
8060  }
8061  }
8062 
8067  }
8068 
8069  /* Manage gphy power for all CPMU absent PCIe devices. */
8070  if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT))
8072 
8073  tw32(GRC_MISC_CFG, val);
8074 
8075  /* restore 5701 hardware bug workaround write method */
8076  tp->write32 = write_op;
8077 
8078  /* Unfortunately, we have to delay before the PCI read back.
8079  * Some 575X chips even will not respond to a PCI cfg access
8080  * when the reset command is given to the chip.
8081  *
8082  * How do these hardware designers expect things to work
8083  * properly if the PCI write is posted for a long period
8084  * of time? It is always necessary to have some method by
8085  * which a register read back can occur to push the write
8086  * out which does the reset.
8087  *
8088  * For most tg3 variants the trick below was working.
8089  * Ho hum...
8090  */
8091  udelay(120);
8092 
8093  /* Flush PCI posted writes. The normal MMIO registers
8094  * are inaccessible at this time so this is the only
8095  * way to make this reliably (actually, this is no longer
8096  * the case, see above). I tried to use indirect
8097  * register read/write but this upset some 5701 variants.
8098  */
8099  pci_read_config_dword(tp->pdev, PCI_COMMAND, &val);
8100 
8101  udelay(120);
8102 
8103  if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) {
8104  u16 val16;
8105 
8106  if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) {
8107  int j;
8108  u32 cfg_val;
8109 
8110  /* Wait for link training to complete. */
8111  for (j = 0; j < 5000; j++)
8112  udelay(100);
8113 
8114  pci_read_config_dword(tp->pdev, 0xc4, &cfg_val);
8115  pci_write_config_dword(tp->pdev, 0xc4,
8116  cfg_val | (1 << 15));
8117  }
8118 
8119  /* Clear the "no snoop" and "relaxed ordering" bits. */
8121  /*
8122  * Older PCIe devices only support the 128 byte
8123  * MPS setting. Enforce the restriction.
8124  */
8125  if (!tg3_flag(tp, CPMU_PRESENT))
8126  val16 |= PCI_EXP_DEVCTL_PAYLOAD;
8127  pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16);
8128 
8129  /* Clear error status */
8135  }
8136 
8137  tg3_restore_pci_state(tp);
8138 
8139  tg3_flag_clear(tp, CHIP_RESETTING);
8140  tg3_flag_clear(tp, ERROR_PROCESSED);
8141 
8142  val = 0;
8143  if (tg3_flag(tp, 5780_CLASS))
8144  val = tr32(MEMARB_MODE);
8146 
8147  if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) {
8148  tg3_stop_fw(tp);
8149  tw32(0x5000, 0x400);
8150  }
8151 
8152  tw32(GRC_MODE, tp->grc_mode);
8153 
8154  if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
8155  val = tr32(0xc4);
8156 
8157  tw32(0xc4, val | (1 << 15));
8158  }
8159 
8160  if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 &&
8166  }
8167 
8168  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
8170  val = tp->mac_mode;
8171  } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
8173  val = tp->mac_mode;
8174  } else
8175  val = 0;
8176 
8177  tw32_f(MAC_MODE, val);
8178  udelay(40);
8179 
8180  tg3_ape_unlock(tp, TG3_APE_LOCK_GRC);
8181 
8182  err = tg3_poll_fw(tp);
8183  if (err)
8184  return err;
8185 
8186  tg3_mdio_start(tp);
8187 
8188  if (tg3_flag(tp, PCI_EXPRESS) &&
8191  !tg3_flag(tp, 57765_PLUS)) {
8192  val = tr32(0x7c00);
8193 
8194  tw32(0x7c00, val | (1 << 25));
8195  }
8196 
8198  val = tr32(TG3_CPMU_CLCK_ORIDE);
8200  }
8201 
8202  /* Reprobe ASF enable state. */
8203  tg3_flag_clear(tp, ENABLE_ASF);
8204  tg3_flag_clear(tp, ASF_NEW_HANDSHAKE);
8205  tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
8206  if (val == NIC_SRAM_DATA_SIG_MAGIC) {
8207  u32 nic_cfg;
8208 
8209  tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
8210  if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
8211  tg3_flag_set(tp, ENABLE_ASF);
8213  if (tg3_flag(tp, 5750_PLUS))
8214  tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
8215  }
8216  }
8217 
8218  return 0;
8219 }
8220 
8221 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
8222 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
8223 
8224 /* tp->lock is held. */
8225 static int tg3_halt(struct tg3 *tp, int kind, int silent)
8226 {
8227  int err;
8228 
8229  tg3_stop_fw(tp);
8230 
8231  tg3_write_sig_pre_reset(tp, kind);
8232 
8233  tg3_abort_hw(tp, silent);
8234  err = tg3_chip_reset(tp);
8235 
8236  __tg3_set_mac_addr(tp, 0);
8237 
8238  tg3_write_sig_legacy(tp, kind);
8239  tg3_write_sig_post_reset(tp, kind);
8240 
8241  if (tp->hw_stats) {
8242  /* Save the stats across chip resets... */
8243  tg3_get_nstats(tp, &tp->net_stats_prev);
8244  tg3_get_estats(tp, &tp->estats_prev);
8245 
8246  /* And make sure the next sample is new data */
8247  memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats));
8248  }
8249 
8250  if (err)
8251  return err;
8252 
8253  return 0;
8254 }
8255 
8256 static int tg3_set_mac_addr(struct net_device *dev, void *p)
8257 {
8258  struct tg3 *tp = netdev_priv(dev);
8259  struct sockaddr *addr = p;
8260  int err = 0, skip_mac_1 = 0;
8261 
8262  if (!is_valid_ether_addr(addr->sa_data))
8263  return -EADDRNOTAVAIL;
8264 
8265  memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
8266 
8267  if (!netif_running(dev))
8268  return 0;
8269 
8270  if (tg3_flag(tp, ENABLE_ASF)) {
8271  u32 addr0_high, addr0_low, addr1_high, addr1_low;
8272 
8273  addr0_high = tr32(MAC_ADDR_0_HIGH);
8274  addr0_low = tr32(MAC_ADDR_0_LOW);
8275  addr1_high = tr32(MAC_ADDR_1_HIGH);
8276  addr1_low = tr32(MAC_ADDR_1_LOW);
8277 
8278  /* Skip MAC addr 1 if ASF is using it. */
8279  if ((addr0_high != addr1_high || addr0_low != addr1_low) &&
8280  !(addr1_high == 0 && addr1_low == 0))
8281  skip_mac_1 = 1;
8282  }
8283  spin_lock_bh(&tp->lock);
8284  __tg3_set_mac_addr(tp, skip_mac_1);
8285  spin_unlock_bh(&tp->lock);
8286 
8287  return err;
8288 }
8289 
8290 /* tp->lock is held. */
8291 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr,
8292  dma_addr_t mapping, u32 maxlen_flags,
8293  u32 nic_addr)
8294 {
8295  tg3_write_mem(tp,
8296  (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH),
8297  ((u64) mapping >> 32));
8298  tg3_write_mem(tp,
8299  (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW),
8300  ((u64) mapping & 0xffffffff));
8301  tg3_write_mem(tp,
8302  (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS),
8303  maxlen_flags);
8304 
8305  if (!tg3_flag(tp, 5705_PLUS))
8306  tg3_write_mem(tp,
8307  (bdinfo_addr + TG3_BDINFO_NIC_ADDR),
8308  nic_addr);
8309 }
8310 
8311 
8312 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
8313 {
8314  int i = 0;
8315 
8316  if (!tg3_flag(tp, ENABLE_TSS)) {
8320  } else {
8324 
8325  for (; i < tp->txq_cnt; i++) {
8326  u32 reg;
8327 
8328  reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18;
8329  tw32(reg, ec->tx_coalesce_usecs);
8330  reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18;
8331  tw32(reg, ec->tx_max_coalesced_frames);
8332  reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18;
8334  }
8335  }
8336 
8337  for (; i < tp->irq_max - 1; i++) {
8338  tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0);
8339  tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0);
8340  tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8341  }
8342 }
8343 
8344 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec)
8345 {
8346  int i = 0;
8347  u32 limit = tp->rxq_cnt;
8348 
8349  if (!tg3_flag(tp, ENABLE_RSS)) {
8353  limit--;
8354  } else {
8358  }
8359 
8360  for (; i < limit; i++) {
8361  u32 reg;
8362 
8363  reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18;
8364  tw32(reg, ec->rx_coalesce_usecs);
8365  reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18;
8366  tw32(reg, ec->rx_max_coalesced_frames);
8367  reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18;
8369  }
8370 
8371  for (; i < tp->irq_max - 1; i++) {
8372  tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0);
8373  tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0);
8374  tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0);
8375  }
8376 }
8377 
8378 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec)
8379 {
8380  tg3_coal_tx_init(tp, ec);
8381  tg3_coal_rx_init(tp, ec);
8382 
8383  if (!tg3_flag(tp, 5705_PLUS)) {
8384  u32 val = ec->stats_block_coalesce_usecs;
8385 
8388 
8389  if (!netif_carrier_ok(tp->dev))
8390  val = 0;
8391 
8393  }
8394 }
8395 
8396 /* tp->lock is held. */
8397 static void tg3_rings_reset(struct tg3 *tp)
8398 {
8399  int i;
8400  u32 stblk, txrcb, rxrcb, limit;
8401  struct tg3_napi *tnapi = &tp->napi[0];
8402 
8403  /* Disable all transmit rings but the first. */
8404  if (!tg3_flag(tp, 5705_PLUS))
8405  limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16;
8406  else if (tg3_flag(tp, 5717_PLUS))
8407  limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4;
8408  else if (tg3_flag(tp, 57765_CLASS))
8409  limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2;
8410  else
8412 
8413  for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE;
8414  txrcb < limit; txrcb += TG3_BDINFO_SIZE)
8415  tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS,
8417 
8418 
8419  /* Disable all receive return rings but the first. */
8420  if (tg3_flag(tp, 5717_PLUS))
8421  limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17;
8422  else if (!tg3_flag(tp, 5705_PLUS))
8423  limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16;
8424  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8425  tg3_flag(tp, 57765_CLASS))
8426  limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4;
8427  else
8429 
8430  for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE;
8431  rxrcb < limit; rxrcb += TG3_BDINFO_SIZE)
8432  tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS,
8434 
8435  /* Disable interrupts */
8436  tw32_mailbox_f(tp->napi[0].int_mbox, 1);
8437  tp->napi[0].chk_msi_cnt = 0;
8438  tp->napi[0].last_rx_cons = 0;
8439  tp->napi[0].last_tx_cons = 0;
8440 
8441  /* Zero mailbox registers. */
8442  if (tg3_flag(tp, SUPPORT_MSIX)) {
8443  for (i = 1; i < tp->irq_max; i++) {
8444  tp->napi[i].tx_prod = 0;
8445  tp->napi[i].tx_cons = 0;
8446  if (tg3_flag(tp, ENABLE_TSS))
8447  tw32_mailbox(tp->napi[i].prodmbox, 0);
8448  tw32_rx_mbox(tp->napi[i].consmbox, 0);
8449  tw32_mailbox_f(tp->napi[i].int_mbox, 1);
8450  tp->napi[i].chk_msi_cnt = 0;
8451  tp->napi[i].last_rx_cons = 0;
8452  tp->napi[i].last_tx_cons = 0;
8453  }
8454  if (!tg3_flag(tp, ENABLE_TSS))
8455  tw32_mailbox(tp->napi[0].prodmbox, 0);
8456  } else {
8457  tp->napi[0].tx_prod = 0;
8458  tp->napi[0].tx_cons = 0;
8459  tw32_mailbox(tp->napi[0].prodmbox, 0);
8460  tw32_rx_mbox(tp->napi[0].consmbox, 0);
8461  }
8462 
8463  /* Make sure the NIC-based send BD rings are disabled. */
8464  if (!tg3_flag(tp, 5705_PLUS)) {
8466  for (i = 0; i < 16; i++)
8467  tw32_tx_mbox(mbox + i * 8, 0);
8468  }
8469 
8470  txrcb = NIC_SRAM_SEND_RCB;
8471  rxrcb = NIC_SRAM_RCV_RET_RCB;
8472 
8473  /* Clear status block in ram. */
8474  memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8475 
8476  /* Set status block DMA address */
8478  ((u64) tnapi->status_mapping >> 32));
8479  tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
8480  ((u64) tnapi->status_mapping & 0xffffffff));
8481 
8482  if (tnapi->tx_ring) {
8483  tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8484  (TG3_TX_RING_SIZE <<
8487  txrcb += TG3_BDINFO_SIZE;
8488  }
8489 
8490  if (tnapi->rx_rcb) {
8491  tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8492  (tp->rx_ret_ring_mask + 1) <<
8494  rxrcb += TG3_BDINFO_SIZE;
8495  }
8496 
8497  stblk = HOSTCC_STATBLCK_RING1;
8498 
8499  for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) {
8500  u64 mapping = (u64)tnapi->status_mapping;
8501  tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32);
8502  tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff);
8503 
8504  /* Clear status block in ram. */
8505  memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE);
8506 
8507  if (tnapi->tx_ring) {
8508  tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping,
8509  (TG3_TX_RING_SIZE <<
8512  txrcb += TG3_BDINFO_SIZE;
8513  }
8514 
8515  tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping,
8516  ((tp->rx_ret_ring_mask + 1) <<
8518 
8519  stblk += 8;
8520  rxrcb += TG3_BDINFO_SIZE;
8521  }
8522 }
8523 
8524 static void tg3_setup_rxbd_thresholds(struct tg3 *tp)
8525 {
8526  u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh;
8527 
8528  if (!tg3_flag(tp, 5750_PLUS) ||
8529  tg3_flag(tp, 5780_CLASS) ||
8532  tg3_flag(tp, 57765_PLUS))
8533  bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700;
8534  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 ||
8536  bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755;
8537  else
8538  bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906;
8539 
8540  nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post);
8541  host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1);
8542 
8543  val = min(nic_rep_thresh, host_rep_thresh);
8544  tw32(RCVBDI_STD_THRESH, val);
8545 
8546  if (tg3_flag(tp, 57765_PLUS))
8547  tw32(STD_REPLENISH_LWM, bdcache_maxcnt);
8548 
8549  if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS))
8550  return;
8551 
8552  bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700;
8553 
8554  host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1);
8555 
8556  val = min(bdcache_maxcnt / 2, host_rep_thresh);
8557  tw32(RCVBDI_JUMBO_THRESH, val);
8558 
8559  if (tg3_flag(tp, 57765_PLUS))
8560  tw32(JMB_REPLENISH_LWM, bdcache_maxcnt);
8561 }
8562 
8563 static inline u32 calc_crc(unsigned char *buf, int len)
8564 {
8565  u32 reg;
8566  u32 tmp;
8567  int j, k;
8568 
8569  reg = 0xffffffff;
8570 
8571  for (j = 0; j < len; j++) {
8572  reg ^= buf[j];
8573 
8574  for (k = 0; k < 8; k++) {
8575  tmp = reg & 0x01;
8576 
8577  reg >>= 1;
8578 
8579  if (tmp)
8580  reg ^= 0xedb88320;
8581  }
8582  }
8583 
8584  return ~reg;
8585 }
8586 
8587 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all)
8588 {
8589  /* accept or reject all multicast frames */
8590  tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0);
8591  tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0);
8592  tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0);
8593  tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0);
8594 }
8595 
8596 static void __tg3_set_rx_mode(struct net_device *dev)
8597 {
8598  struct tg3 *tp = netdev_priv(dev);
8599  u32 rx_mode;
8600 
8601  rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC |
8603 
8604 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE)
8605  /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG
8606  * flag clear.
8607  */
8608  if (!tg3_flag(tp, ENABLE_ASF))
8609  rx_mode |= RX_MODE_KEEP_VLAN_TAG;
8610 #endif
8611 
8612  if (dev->flags & IFF_PROMISC) {
8613  /* Promiscuous mode. */
8614  rx_mode |= RX_MODE_PROMISC;
8615  } else if (dev->flags & IFF_ALLMULTI) {
8616  /* Accept all multicast. */
8617  tg3_set_multi(tp, 1);
8618  } else if (netdev_mc_empty(dev)) {
8619  /* Reject all multicast. */
8620  tg3_set_multi(tp, 0);
8621  } else {
8622  /* Accept one or more multicast(s). */
8623  struct netdev_hw_addr *ha;
8624  u32 mc_filter[4] = { 0, };
8625  u32 regidx;
8626  u32 bit;
8627  u32 crc;
8628 
8629  netdev_for_each_mc_addr(ha, dev) {
8630  crc = calc_crc(ha->addr, ETH_ALEN);
8631  bit = ~crc & 0x7f;
8632  regidx = (bit & 0x60) >> 5;
8633  bit &= 0x1f;
8634  mc_filter[regidx] |= (1 << bit);
8635  }
8636 
8637  tw32(MAC_HASH_REG_0, mc_filter[0]);
8638  tw32(MAC_HASH_REG_1, mc_filter[1]);
8639  tw32(MAC_HASH_REG_2, mc_filter[2]);
8640  tw32(MAC_HASH_REG_3, mc_filter[3]);
8641  }
8642 
8643  if (rx_mode != tp->rx_mode) {
8644  tp->rx_mode = rx_mode;
8645  tw32_f(MAC_RX_MODE, rx_mode);
8646  udelay(10);
8647  }
8648 }
8649 
8650 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt)
8651 {
8652  int i;
8653 
8654  for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
8655  tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt);
8656 }
8657 
8658 static void tg3_rss_check_indir_tbl(struct tg3 *tp)
8659 {
8660  int i;
8661 
8662  if (!tg3_flag(tp, SUPPORT_MSIX))
8663  return;
8664 
8665  if (tp->irq_cnt <= 2) {
8666  memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl));
8667  return;
8668  }
8669 
8670  /* Validate table against current IRQ count */
8671  for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
8672  if (tp->rss_ind_tbl[i] >= tp->irq_cnt - 1)
8673  break;
8674  }
8675 
8676  if (i != TG3_RSS_INDIR_TBL_SIZE)
8677  tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt);
8678 }
8679 
8680 static void tg3_rss_write_indir_tbl(struct tg3 *tp)
8681 {
8682  int i = 0;
8683  u32 reg = MAC_RSS_INDIR_TBL_0;
8684 
8685  while (i < TG3_RSS_INDIR_TBL_SIZE) {
8686  u32 val = tp->rss_ind_tbl[i];
8687  i++;
8688  for (; i % 8; i++) {
8689  val <<= 4;
8690  val |= tp->rss_ind_tbl[i];
8691  }
8692  tw32(reg, val);
8693  reg += 4;
8694  }
8695 }
8696 
8697 /* tp->lock is held. */
8698 static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
8699 {
8700  u32 val, rdmac_mode;
8701  int i, err, limit;
8702  struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
8703 
8704  tg3_disable_ints(tp);
8705 
8706  tg3_stop_fw(tp);
8707 
8708  tg3_write_sig_pre_reset(tp, RESET_KIND_INIT);
8709 
8710  if (tg3_flag(tp, INIT_COMPLETE))
8711  tg3_abort_hw(tp, 1);
8712 
8713  /* Enable MAC control of LPI */
8714  if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) {
8718 
8721 
8726 
8729 
8730  if (tg3_flag(tp, ENABLE_APE))
8732 
8733  tw32_f(TG3_CPMU_EEE_MODE, val);
8734 
8738 
8742  }
8743 
8744  if (reset_phy)
8745  tg3_phy_reset(tp);
8746 
8747  err = tg3_chip_reset(tp);
8748  if (err)
8749  return err;
8750 
8751  tg3_write_sig_legacy(tp, RESET_KIND_INIT);
8752 
8754  val = tr32(TG3_CPMU_CTRL);
8756  tw32(TG3_CPMU_CTRL, val);
8757 
8762 
8767 
8768  val = tr32(TG3_CPMU_HST_ACC);
8769  val &= ~CPMU_HST_ACC_MACCLK_MASK;
8770  val |= CPMU_HST_ACC_MACCLK_6_25;
8771  tw32(TG3_CPMU_HST_ACC, val);
8772  }
8773 
8778  tw32(PCIE_PWR_MGMT_THRESH, val);
8779 
8782 
8784 
8787  }
8788 
8789  if (tg3_flag(tp, L1PLLPD_EN)) {
8790  u32 grc_mode = tr32(GRC_MODE);
8791 
8792  /* Access the lower 1K of PL PCIE block registers. */
8793  val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8795 
8799 
8800  tw32(GRC_MODE, grc_mode);
8801  }
8802 
8803  if (tg3_flag(tp, 57765_CLASS)) {
8804  if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) {
8805  u32 grc_mode = tr32(GRC_MODE);
8806 
8807  /* Access the lower 1K of PL PCIE block registers. */
8808  val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8810 
8811  val = tr32(TG3_PCIE_TLDLPL_PORT +
8815 
8816  tw32(GRC_MODE, grc_mode);
8817  }
8818 
8820  u32 grc_mode = tr32(GRC_MODE);
8821 
8822  /* Access the lower 1K of DL PCIE block registers. */
8823  val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK;
8825 
8826  val = tr32(TG3_PCIE_TLDLPL_PORT +
8828  val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK;
8831 
8832  tw32(GRC_MODE, grc_mode);
8833  }
8834 
8839  }
8840 
8841  /* This works around an issue with Athlon chipsets on
8842  * B3 tigon3 silicon. This bit has no effect on any
8843  * other revision. But do not set this on PCI Express
8844  * chips and don't even touch the clocks if the CPMU is present.
8845  */
8846  if (!tg3_flag(tp, CPMU_PRESENT)) {
8847  if (!tg3_flag(tp, PCI_EXPRESS))
8850  }
8851 
8852  if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 &&
8853  tg3_flag(tp, PCIX_MODE)) {
8854  val = tr32(TG3PCI_PCISTATE);
8855  val |= PCISTATE_RETRY_SAME_DMA;
8856  tw32(TG3PCI_PCISTATE, val);
8857  }
8858 
8859  if (tg3_flag(tp, ENABLE_APE)) {
8860  /* Allow reads and writes to the
8861  * APE register and memory space.
8862  */
8863  val = tr32(TG3PCI_PCISTATE);
8867  tw32(TG3PCI_PCISTATE, val);
8868  }
8869 
8871  /* Enable some hw fixes. */
8872  val = tr32(TG3PCI_MSI_DATA);
8873  val |= (1 << 26) | (1 << 28) | (1 << 29);
8874  tw32(TG3PCI_MSI_DATA, val);
8875  }
8876 
8877  /* Descriptor ring init may make accesses to the
8878  * NIC SRAM area to setup the TX descriptors, so we
8879  * can only do this after the hardware has been
8880  * successfully reset.
8881  */
8882  err = tg3_init_rings(tp);
8883  if (err)
8884  return err;
8885 
8886  if (tg3_flag(tp, 57765_PLUS)) {
8887  val = tr32(TG3PCI_DMA_RW_CTRL) &
8891  if (!tg3_flag(tp, 57765_CLASS) &&
8894  tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl);
8895  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 &&
8897  /* This value is determined during the probe time DMA
8898  * engine test, tg3_test_dma.
8899  */
8901  }
8902 
8903  tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS |
8908 
8909  /* Pseudo-header checksum is done by hardware logic and not
8910  * the offload processers, so make the chip do the pseudo-
8911  * header checksums on receive. For transmit it is more
8912  * convenient to do the pseudo-header checksum in software
8913  * as Linux does that on transmit for us in all cases.
8914  */
8916 
8917  tw32(GRC_MODE,
8918  tp->grc_mode |
8920 
8921  /* Setup the timer prescalar register. Clock is always 66Mhz. */
8922  val = tr32(GRC_MISC_CFG);
8923  val &= ~0xff;
8924  val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT);
8925  tw32(GRC_MISC_CFG, val);
8926 
8927  /* Initialize MBUF/DESC pool. */
8928  if (tg3_flag(tp, 5750_PLUS)) {
8929  /* Do nothing. */
8930  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) {
8934  else
8938  } else if (tg3_flag(tp, TSO_CAPABLE)) {
8939  int fw_len;
8940 
8941  fw_len = tp->fw_len;
8942  fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1);
8944  NIC_SRAM_MBUF_POOL_BASE5705 + fw_len);
8946  NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00);
8947  }
8948 
8949  if (tp->dev->mtu <= ETH_DATA_LEN) {
8951  tp->bufmgr_config.mbuf_read_dma_low_water);
8953  tp->bufmgr_config.mbuf_mac_rx_low_water);
8955  tp->bufmgr_config.mbuf_high_water);
8956  } else {
8958  tp->bufmgr_config.mbuf_read_dma_low_water_jumbo);
8960  tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo);
8962  tp->bufmgr_config.mbuf_high_water_jumbo);
8963  }
8965  tp->bufmgr_config.dma_low_water);
8967  tp->bufmgr_config.dma_high_water);
8968 
8976  tw32(BUFMGR_MODE, val);
8977  for (i = 0; i < 2000; i++) {
8979  break;
8980  udelay(10);
8981  }
8982  if (i >= 2000) {
8983  netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__);
8984  return -ENODEV;
8985  }
8986 
8988  tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2);
8989 
8990  tg3_setup_rxbd_thresholds(tp);
8991 
8992  /* Initialize TG3_BDINFO's at:
8993  * RCVDBDI_STD_BD: standard eth size rx ring
8994  * RCVDBDI_JUMBO_BD: jumbo frame rx ring
8995  * RCVDBDI_MINI_BD: small frame rx ring (??? does not work)
8996  *
8997  * like so:
8998  * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring
8999  * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) |
9000  * ring attribute flags
9001  * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM
9002  *
9003  * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries.
9004  * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries.
9005  *
9006  * The size of each ring is fixed in the firmware, but the location is
9007  * configurable.
9008  */
9010  ((u64) tpr->rx_std_mapping >> 32));
9011  tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
9012  ((u64) tpr->rx_std_mapping & 0xffffffff));
9013  if (!tg3_flag(tp, 5717_PLUS))
9016 
9017  /* Disable the mini ring */
9018  if (!tg3_flag(tp, 5705_PLUS))
9021 
9022  /* Program the jumbo buffer descriptor ring control
9023  * blocks on those devices that have them.
9024  */
9025  if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 ||
9026  (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) {
9027 
9028  if (tg3_flag(tp, JUMBO_RING_ENABLE)) {
9030  ((u64) tpr->rx_jmb_mapping >> 32));
9031  tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
9032  ((u64) tpr->rx_jmb_mapping & 0xffffffff));
9033  val = TG3_RX_JMB_RING_SIZE(tp) <<
9037  if (!tg3_flag(tp, USE_JUMBO_BDFLAG) ||
9038  tg3_flag(tp, 57765_CLASS))
9041  } else {
9044  }
9045 
9046  if (tg3_flag(tp, 57765_PLUS)) {
9047  val = TG3_RX_STD_RING_SIZE(tp);
9048  val <<= BDINFO_FLAGS_MAXLEN_SHIFT;
9049  val |= (TG3_RX_STD_DMA_SZ << 2);
9050  } else
9052  } else
9054 
9056 
9057  tpr->rx_std_prod_idx = tp->rx_pending;
9059 
9060  tpr->rx_jmb_prod_idx =
9061  tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0;
9063 
9064  tg3_rings_reset(tp);
9065 
9066  /* Initialize MAC address and backoff seed. */
9067  __tg3_set_mac_addr(tp, 0);
9068 
9069  /* MTU + ethernet header + FCS + optional VLAN tag */
9071  tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN);
9072 
9073  /* The slot time is changed by tg3_setup_phy if we
9074  * run at gigabit with half duplex.
9075  */
9076  val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) |
9077  (6 << TX_LENGTHS_IPG_SHIFT) |
9079 
9081  val |= tr32(MAC_TX_LENGTHS) &
9084 
9085  tw32(MAC_TX_LENGTHS, val);
9086 
9087  /* Receive rules. */
9089  tw32(RCVLPC_CONFIG, 0x0181);
9090 
9091  /* Calculate RDMAC_MODE setting early, we need it to determine
9092  * the RCVLPC_STATE_ENABLE mask.
9093  */
9099 
9101  rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS;
9102 
9106  rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB |
9109 
9112  if (tg3_flag(tp, TSO_CAPABLE) &&
9114  rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128;
9115  } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
9116  !tg3_flag(tp, IS_5788)) {
9117  rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
9118  }
9119  }
9120 
9121  if (tg3_flag(tp, PCI_EXPRESS))
9122  rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST;
9123 
9124  if (tg3_flag(tp, HW_TSO_1) ||
9125  tg3_flag(tp, HW_TSO_2) ||
9126  tg3_flag(tp, HW_TSO_3))
9127  rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN;
9128 
9129  if (tg3_flag(tp, 57765_PLUS) ||
9132  rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN;
9133 
9135  rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET;
9136 
9141  tg3_flag(tp, 57765_PLUS)) {
9142  val = tr32(TG3_RDMA_RSRVCTRL_REG);
9143  if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) {
9150  }
9153  }
9154 
9161  }
9162 
9163  /* Receive/send statistics. */
9164  if (tg3_flag(tp, 5750_PLUS)) {
9165  val = tr32(RCVLPC_STATS_ENABLE);
9166  val &= ~RCVLPC_STATSENAB_DACK_FIX;
9167  tw32(RCVLPC_STATS_ENABLE, val);
9168  } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) &&
9169  tg3_flag(tp, TSO_CAPABLE)) {
9170  val = tr32(RCVLPC_STATS_ENABLE);
9172  tw32(RCVLPC_STATS_ENABLE, val);
9173  } else {
9174  tw32(RCVLPC_STATS_ENABLE, 0xffffff);
9175  }
9177  tw32(SNDDATAI_STATSENAB, 0xffffff);
9181 
9182  /* Setup host coalescing engine. */
9183  tw32(HOSTCC_MODE, 0);
9184  for (i = 0; i < 2000; i++) {
9186  break;
9187  udelay(10);
9188  }
9189 
9190  __tg3_set_coalesce(tp, &tp->coal);
9191 
9192  if (!tg3_flag(tp, 5705_PLUS)) {
9193  /* Status/statistics block address. See tg3_timer,
9194  * the tg3_periodic_fetch_stats call there, and
9195  * tg3_get_stats to see how this works for 5705/5750 chips.
9196  */
9198  ((u64) tp->stats_mapping >> 32));
9199  tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW,
9200  ((u64) tp->stats_mapping & 0xffffffff));
9202 
9204 
9205  /* Clear statistics and status block memory areas */
9206  for (i = NIC_SRAM_STATS_BLK;
9208  i += sizeof(u32)) {
9209  tg3_write_mem(tp, i, 0);
9210  udelay(40);
9211  }
9212  }
9213 
9215 
9218  if (!tg3_flag(tp, 5705_PLUS))
9220 
9221  if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) {
9223  /* reset to prevent losing 1st rx packet intermittently */
9225  udelay(10);
9226  }
9227 
9231  if (tg3_flag(tp, ENABLE_APE))
9233  if (!tg3_flag(tp, 5705_PLUS) &&
9234  !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9238  udelay(40);
9239 
9240  /* tp->grc_local_ctrl is partially set up during tg3_get_invariants().
9241  * If TG3_FLAG_IS_NIC is zero, we should read the
9242  * register to preserve the GPIO settings for LOMs. The GPIOs,
9243  * whether used as inputs or outputs, are set by boot code after
9244  * reset.
9245  */
9246  if (!tg3_flag(tp, IS_NIC)) {
9247  u32 gpio_mask;
9248 
9252 
9254  gpio_mask |= GRC_LCLCTRL_GPIO_OE3 |
9256 
9258  gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL;
9259 
9260  tp->grc_local_ctrl &= ~gpio_mask;
9261  tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask;
9262 
9263  /* GPIO1 must be driven high for eeprom write protect */
9264  if (tg3_flag(tp, EEPROM_WRITE_PROT))
9267  }
9269  udelay(100);
9270 
9271  if (tg3_flag(tp, USING_MSIX)) {
9272  val = tr32(MSGINT_MODE);
9273  val |= MSGINT_MODE_ENABLE;
9274  if (tp->irq_cnt > 1)
9275  val |= MSGINT_MODE_MULTIVEC_EN;
9276  if (!tg3_flag(tp, 1SHOT_MSI))
9278  tw32(MSGINT_MODE, val);
9279  }
9280 
9281  if (!tg3_flag(tp, 5705_PLUS)) {
9283  udelay(40);
9284  }
9285 
9291 
9294  if (tg3_flag(tp, TSO_CAPABLE) &&
9297  /* nothing */
9298  } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) &&
9299  !tg3_flag(tp, IS_5788)) {
9300  val |= WDMAC_MODE_RX_ACCEL;
9301  }
9302  }
9303 
9304  /* Enable host coalescing bug fix */
9305  if (tg3_flag(tp, 5755_PLUS))
9307 
9310 
9311  tw32_f(WDMAC_MODE, val);
9312  udelay(40);
9313 
9314  if (tg3_flag(tp, PCIX_MODE)) {
9315  u16 pcix_cmd;
9316 
9317  pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9318  &pcix_cmd);
9320  pcix_cmd &= ~PCI_X_CMD_MAX_READ;
9321  pcix_cmd |= PCI_X_CMD_READ_2K;
9322  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) {
9323  pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ);
9324  pcix_cmd |= PCI_X_CMD_READ_2K;
9325  }
9326  pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD,
9327  pcix_cmd);
9328  }
9329 
9330  tw32_f(RDMAC_MODE, rdmac_mode);
9331  udelay(40);
9332 
9334  for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) {
9335  if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp))
9336  break;
9337  }
9338  if (i < TG3_NUM_RDMA_CHANNELS) {
9342  tg3_flag_set(tp, 5719_RDMA_BUG);
9343  }
9344  }
9345 
9347  if (!tg3_flag(tp, 5705_PLUS))
9349 
9353  else
9355 
9359  if (tg3_flag(tp, LRG_PROD_RING_CAP))
9360  val |= RCVDBDI_MODE_LRG_RING_SZ;
9361  tw32(RCVDBDI_MODE, val);
9363  if (tg3_flag(tp, HW_TSO_1) ||
9364  tg3_flag(tp, HW_TSO_2) ||
9365  tg3_flag(tp, HW_TSO_3))
9368  if (tg3_flag(tp, ENABLE_TSS))
9369  val |= SNDBDI_MODE_MULTI_TXQ_EN;
9370  tw32(SNDBDI_MODE, val);
9372 
9373  if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
9374  err = tg3_load_5701_a0_firmware_fix(tp);
9375  if (err)
9376  return err;
9377  }
9378 
9379  if (tg3_flag(tp, TSO_CAPABLE)) {
9380  err = tg3_load_tso_firmware(tp);
9381  if (err)
9382  return err;
9383  }
9384 
9385  tp->tx_mode = TX_MODE_ENABLE;
9386 
9387  if (tg3_flag(tp, 5755_PLUS) ||
9390 
9393  tp->tx_mode &= ~val;
9394  tp->tx_mode |= tr32(MAC_TX_MODE) & val;
9395  }
9396 
9397  tw32_f(MAC_TX_MODE, tp->tx_mode);
9398  udelay(100);
9399 
9400  if (tg3_flag(tp, ENABLE_RSS)) {
9401  tg3_rss_write_indir_tbl(tp);
9402 
9403  /* Setup the "secret" hash key. */
9404  tw32(MAC_RSS_HASH_KEY_0, 0x5f865437);
9405  tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc);
9406  tw32(MAC_RSS_HASH_KEY_2, 0x50103a45);
9407  tw32(MAC_RSS_HASH_KEY_3, 0x36621985);
9408  tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8);
9409  tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e);
9410  tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556);
9411  tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe);
9412  tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7);
9413  tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481);
9414  }
9415 
9416  tp->rx_mode = RX_MODE_ENABLE;
9417  if (tg3_flag(tp, 5755_PLUS))
9419 
9420  if (tg3_flag(tp, ENABLE_RSS))
9421  tp->rx_mode |= RX_MODE_RSS_ENABLE |
9427 
9428  tw32_f(MAC_RX_MODE, tp->rx_mode);
9429  udelay(10);
9430 
9431  tw32(MAC_LED_CTRL, tp->led_ctrl);
9432 
9434  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9436  udelay(10);
9437  }
9438  tw32_f(MAC_RX_MODE, tp->rx_mode);
9439  udelay(10);
9440 
9441  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
9442  if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) &&
9444  /* Set drive transmission level to 1.2V */
9445  /* only if the signal pre-emphasis bit is not set */
9446  val = tr32(MAC_SERDES_CFG);
9447  val &= 0xfffff000;
9448  val |= 0x880;
9449  tw32(MAC_SERDES_CFG, val);
9450  }
9452  tw32(MAC_SERDES_CFG, 0x616000);
9453  }
9454 
9455  /* Prevent chip from dropping frames when flow control
9456  * is enabled.
9457  */
9458  if (tg3_flag(tp, 57765_CLASS))
9459  val = 1;
9460  else
9461  val = 2;
9463 
9465  (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
9466  /* Use hardware link auto-negotiation */
9467  tg3_flag_set(tp, HW_AUTONEG);
9468  }
9469 
9470  if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
9472  u32 tmp;
9473 
9474  tmp = tr32(SERDES_RX_CTRL);
9479  }
9480 
9481  if (!tg3_flag(tp, USE_PHYLIB)) {
9484 
9485  err = tg3_setup_phy(tp, 0);
9486  if (err)
9487  return err;
9488 
9489  if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
9490  !(tp->phy_flags & TG3_PHYFLG_IS_FET)) {
9491  u32 tmp;
9492 
9493  /* Clear CRC stats. */
9494  if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) {
9495  tg3_writephy(tp, MII_TG3_TEST1,
9496  tmp | MII_TG3_TEST1_CRC_EN);
9497  tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp);
9498  }
9499  }
9500  }
9501 
9502  __tg3_set_rx_mode(tp->dev);
9503 
9504  /* Initialize receive rules. */
9505  tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK);
9507  tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK);
9509 
9510  if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS))
9511  limit = 8;
9512  else
9513  limit = 16;
9514  if (tg3_flag(tp, ENABLE_ASF))
9515  limit -= 4;
9516  switch (limit) {
9517  case 16:
9519  case 15:
9521  case 14:
9523  case 13:
9525  case 12:
9527  case 11:
9529  case 10:
9531  case 9:
9533  case 8:
9535  case 7:
9537  case 6:
9539  case 5:
9541  case 4:
9542  /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */
9543  case 3:
9544  /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */
9545  case 2:
9546  case 1:
9547 
9548  default:
9549  break;
9550  }
9551 
9552  if (tg3_flag(tp, ENABLE_APE))
9553  /* Write our heartbeat update interval to APE. */
9554  tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS,
9556 
9557  tg3_write_sig_post_reset(tp, RESET_KIND_INIT);
9558 
9559  return 0;
9560 }
9561 
9562 /* Called at device open time to get the chip ready for
9563  * packet processing. Invoked with tp->lock held.
9564  */
9565 static int tg3_init_hw(struct tg3 *tp, int reset_phy)
9566 {
9567  tg3_switch_clocks(tp);
9568 
9570 
9571  return tg3_reset_hw(tp, reset_phy);
9572 }
9573 
9574 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir)
9575 {
9576  int i;
9577 
9578  for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) {
9579  u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN;
9580 
9581  tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len);
9582  off += len;
9583 
9584  if (ocir->signature != TG3_OCIR_SIG_MAGIC ||
9586  memset(ocir, 0, TG3_OCIR_LEN);
9587  }
9588 }
9589 
9590 /* sysfs attributes for hwmon */
9591 static ssize_t tg3_show_temp(struct device *dev,
9592  struct device_attribute *devattr, char *buf)
9593 {
9594  struct pci_dev *pdev = to_pci_dev(dev);
9595  struct net_device *netdev = pci_get_drvdata(pdev);
9596  struct tg3 *tp = netdev_priv(netdev);
9597  struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
9598  u32 temperature;
9599 
9600  spin_lock_bh(&tp->lock);
9601  tg3_ape_scratchpad_read(tp, &temperature, attr->index,
9602  sizeof(temperature));
9603  spin_unlock_bh(&tp->lock);
9604  return sprintf(buf, "%u\n", temperature);
9605 }
9606 
9607 
9608 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tg3_show_temp, NULL,
9610 static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL,
9612 static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL,
9614 
9615 static struct attribute *tg3_attributes[] = {
9616  &sensor_dev_attr_temp1_input.dev_attr.attr,
9617  &sensor_dev_attr_temp1_crit.dev_attr.attr,
9618  &sensor_dev_attr_temp1_max.dev_attr.attr,
9619  NULL
9620 };
9621 
9622 static const struct attribute_group tg3_group = {
9623  .attrs = tg3_attributes,
9624 };
9625 
9626 static void tg3_hwmon_close(struct tg3 *tp)
9627 {
9628  if (tp->hwmon_dev) {
9629  hwmon_device_unregister(tp->hwmon_dev);
9630  tp->hwmon_dev = NULL;
9631  sysfs_remove_group(&tp->pdev->dev.kobj, &tg3_group);
9632  }
9633 }
9634 
9635 static void tg3_hwmon_open(struct tg3 *tp)
9636 {
9637  int i, err;
9638  u32 size = 0;
9639  struct pci_dev *pdev = tp->pdev;
9640  struct tg3_ocir ocirs[TG3_SD_NUM_RECS];
9641 
9642  tg3_sd_scan_scratchpad(tp, ocirs);
9643 
9644  for (i = 0; i < TG3_SD_NUM_RECS; i++) {
9645  if (!ocirs[i].src_data_length)
9646  continue;
9647 
9648  size += ocirs[i].src_hdr_length;
9649  size += ocirs[i].src_data_length;
9650  }
9651 
9652  if (!size)
9653  return;
9654 
9655  /* Register hwmon sysfs hooks */
9656  err = sysfs_create_group(&pdev->dev.kobj, &tg3_group);
9657  if (err) {
9658  dev_err(&pdev->dev, "Cannot create sysfs group, aborting\n");
9659  return;
9660  }
9661 
9662  tp->hwmon_dev = hwmon_device_register(&pdev->dev);
9663  if (IS_ERR(tp->hwmon_dev)) {
9664  tp->hwmon_dev = NULL;
9665  dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n");
9666  sysfs_remove_group(&pdev->dev.kobj, &tg3_group);
9667  }
9668 }
9669 
9670 
9671 #define TG3_STAT_ADD32(PSTAT, REG) \
9672 do { u32 __val = tr32(REG); \
9673  (PSTAT)->low += __val; \
9674  if ((PSTAT)->low < __val) \
9675  (PSTAT)->high += 1; \
9676 } while (0)
9677 
9678 static void tg3_periodic_fetch_stats(struct tg3 *tp)
9679 {
9680  struct tg3_hw_stats *sp = tp->hw_stats;
9681 
9682  if (!netif_carrier_ok(tp->dev))
9683  return;
9684 
9698  if (unlikely(tg3_flag(tp, 5719_RDMA_BUG) &&
9700  sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) {
9701  u32 val;
9702 
9706  tg3_flag_clear(tp, 5719_RDMA_BUG);
9707  }
9708 
9723 
9729  } else {
9730  u32 val = tr32(HOSTCC_FLOW_ATTN);
9731  val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0;
9732  if (val) {
9734  sp->rx_discards.low += val;
9735  if (sp->rx_discards.low < val)
9736  sp->rx_discards.high += 1;
9737  }
9738  sp->mbuf_lwm_thresh_hit = sp->rx_discards;
9739  }
9741 }
9742 
9743 static void tg3_chk_missed_msi(struct tg3 *tp)
9744 {
9745  u32 i;
9746 
9747  for (i = 0; i < tp->irq_cnt; i++) {
9748  struct tg3_napi *tnapi = &tp->napi[i];
9749 
9750  if (tg3_has_work(tnapi)) {
9751  if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr &&
9752  tnapi->last_tx_cons == tnapi->tx_cons) {
9753  if (tnapi->chk_msi_cnt < 1) {
9754  tnapi->chk_msi_cnt++;
9755  return;
9756  }
9757  tg3_msi(0, tnapi);
9758  }
9759  }
9760  tnapi->chk_msi_cnt = 0;
9761  tnapi->last_rx_cons = tnapi->rx_rcb_ptr;
9762  tnapi->last_tx_cons = tnapi->tx_cons;
9763  }
9764 }
9765 
9766 static void tg3_timer(unsigned long __opaque)
9767 {
9768  struct tg3 *tp = (struct tg3 *) __opaque;
9769 
9770  if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING))
9771  goto restart_timer;
9772 
9773  spin_lock(&tp->lock);
9774 
9776  tg3_flag(tp, 57765_CLASS))
9777  tg3_chk_missed_msi(tp);
9778 
9779  if (!tg3_flag(tp, TAGGED_STATUS)) {
9780  /* All of this garbage is because when using non-tagged
9781  * IRQ status the mailbox/status_block protocol the chip
9782  * uses with the cpu is race prone.
9783  */
9784  if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) {
9787  } else {
9790  }
9791 
9792  if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
9793  spin_unlock(&tp->lock);
9794  tg3_reset_task_schedule(tp);
9795  goto restart_timer;
9796  }
9797  }
9798 
9799  /* This part only runs once per second. */
9800  if (!--tp->timer_counter) {
9801  if (tg3_flag(tp, 5705_PLUS))
9802  tg3_periodic_fetch_stats(tp);
9803 
9804  if (tp->setlpicnt && !--tp->setlpicnt)
9805  tg3_phy_eee_enable(tp);
9806 
9807  if (tg3_flag(tp, USE_LINKCHG_REG)) {
9808  u32 mac_stat;
9809  int phy_event;
9810 
9811  mac_stat = tr32(MAC_STATUS);
9812 
9813  phy_event = 0;
9815  if (mac_stat & MAC_STATUS_MI_INTERRUPT)
9816  phy_event = 1;
9817  } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)
9818  phy_event = 1;
9819 
9820  if (phy_event)
9821  tg3_setup_phy(tp, 0);
9822  } else if (tg3_flag(tp, POLL_SERDES)) {
9823  u32 mac_stat = tr32(MAC_STATUS);
9824  int need_setup = 0;
9825 
9826  if (netif_carrier_ok(tp->dev) &&
9827  (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) {
9828  need_setup = 1;
9829  }
9830  if (!netif_carrier_ok(tp->dev) &&
9831  (mac_stat & (MAC_STATUS_PCS_SYNCED |
9833  need_setup = 1;
9834  }
9835  if (need_setup) {
9836  if (!tp->serdes_counter) {
9837  tw32_f(MAC_MODE,
9838  (tp->mac_mode &
9840  udelay(40);
9841  tw32_f(MAC_MODE, tp->mac_mode);
9842  udelay(40);
9843  }
9844  tg3_setup_phy(tp, 0);
9845  }
9846  } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) &&
9847  tg3_flag(tp, 5780_CLASS)) {
9848  tg3_serdes_parallel_detect(tp);
9849  }
9850 
9851  tp->timer_counter = tp->timer_multiplier;
9852  }
9853 
9854  /* Heartbeat is only sent once every 2 seconds.
9855  *
9856  * The heartbeat is to tell the ASF firmware that the host
9857  * driver is still alive. In the event that the OS crashes,
9858  * ASF needs to reset the hardware to free up the FIFO space
9859  * that may be filled with rx packets destined for the host.
9860  * If the FIFO is full, ASF will no longer function properly.
9861  *
9862  * Unintended resets have been reported on real time kernels
9863  * where the timer doesn't run on time. Netpoll will also have
9864  * same problem.
9865  *
9866  * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware
9867  * to check the ring condition when the heartbeat is expiring
9868  * before doing the reset. This will prevent most unintended
9869  * resets.
9870  */
9871  if (!--tp->asf_counter) {
9872  if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) {
9873  tg3_wait_for_event_ack(tp);
9874 
9875  tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX,
9877  tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4);
9878  tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX,
9880 
9881  tg3_generate_fw_event(tp);
9882  }
9883  tp->asf_counter = tp->asf_multiplier;
9884  }
9885 
9886  spin_unlock(&tp->lock);
9887 
9888 restart_timer:
9889  tp->timer.expires = jiffies + tp->timer_offset;
9890  add_timer(&tp->timer);
9891 }
9892 
9893 static void __devinit tg3_timer_init(struct tg3 *tp)
9894 {
9895  if (tg3_flag(tp, TAGGED_STATUS) &&
9897  !tg3_flag(tp, 57765_CLASS))
9898  tp->timer_offset = HZ;
9899  else
9900  tp->timer_offset = HZ / 10;
9901 
9902  BUG_ON(tp->timer_offset > HZ);
9903 
9904  tp->timer_multiplier = (HZ / tp->timer_offset);
9905  tp->asf_multiplier = (HZ / tp->timer_offset) *
9907 
9908  init_timer(&tp->timer);
9909  tp->timer.data = (unsigned long) tp;
9910  tp->timer.function = tg3_timer;
9911 }
9912 
9913 static void tg3_timer_start(struct tg3 *tp)
9914 {
9915  tp->asf_counter = tp->asf_multiplier;
9916  tp->timer_counter = tp->timer_multiplier;
9917 
9918  tp->timer.expires = jiffies + tp->timer_offset;
9919  add_timer(&tp->timer);
9920 }
9921 
9922 static void tg3_timer_stop(struct tg3 *tp)
9923 {
9924  del_timer_sync(&tp->timer);
9925 }
9926 
9927 /* Restart hardware after configuration changes, self-test, etc.
9928  * Invoked with tp->lock held.
9929  */
9930 static int tg3_restart_hw(struct tg3 *tp, int reset_phy)
9931  __releases(tp->lock)
9932  __acquires(tp->lock)
9933 {
9934  int err;
9935 
9936  err = tg3_init_hw(tp, reset_phy);
9937  if (err) {
9938  netdev_err(tp->dev,
9939  "Failed to re-initialize device, aborting\n");
9940  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
9941  tg3_full_unlock(tp);
9942  tg3_timer_stop(tp);
9943  tp->irq_sync = 0;
9944  tg3_napi_enable(tp);
9945  dev_close(tp->dev);
9946  tg3_full_lock(tp, 0);
9947  }
9948  return err;
9949 }
9950 
9951 static void tg3_reset_task(struct work_struct *work)
9952 {
9953  struct tg3 *tp = container_of(work, struct tg3, reset_task);
9954  int err;
9955 
9956  tg3_full_lock(tp, 0);
9957 
9958  if (!netif_running(tp->dev)) {
9959  tg3_flag_clear(tp, RESET_TASK_PENDING);
9960  tg3_full_unlock(tp);
9961  return;
9962  }
9963 
9964  tg3_full_unlock(tp);
9965 
9966  tg3_phy_stop(tp);
9967 
9968  tg3_netif_stop(tp);
9969 
9970  tg3_full_lock(tp, 1);
9971 
9972  if (tg3_flag(tp, TX_RECOVERY_PENDING)) {
9973  tp->write32_tx_mbox = tg3_write32_tx_mbox;
9974  tp->write32_rx_mbox = tg3_write_flush_reg32;
9975  tg3_flag_set(tp, MBOX_WRITE_REORDER);
9976  tg3_flag_clear(tp, TX_RECOVERY_PENDING);
9977  }
9978 
9979  tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
9980  err = tg3_init_hw(tp, 1);
9981  if (err)
9982  goto out;
9983 
9984  tg3_netif_start(tp);
9985 
9986 out:
9987  tg3_full_unlock(tp);
9988 
9989  if (!err)
9990  tg3_phy_start(tp);
9991 
9992  tg3_flag_clear(tp, RESET_TASK_PENDING);
9993 }
9994 
9995 static int tg3_request_irq(struct tg3 *tp, int irq_num)
9996 {
9997  irq_handler_t fn;
9998  unsigned long flags;
9999  char *name;
10000  struct tg3_napi *tnapi = &tp->napi[irq_num];
10001 
10002  if (tp->irq_cnt == 1)
10003  name = tp->dev->name;
10004  else {
10005  name = &tnapi->irq_lbl[0];
10006  snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num);
10007  name[IFNAMSIZ-1] = 0;
10008  }
10009 
10010  if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
10011  fn = tg3_msi;
10012  if (tg3_flag(tp, 1SHOT_MSI))
10013  fn = tg3_msi_1shot;
10014  flags = 0;
10015  } else {
10016  fn = tg3_interrupt;
10017  if (tg3_flag(tp, TAGGED_STATUS))
10018  fn = tg3_interrupt_tagged;
10019  flags = IRQF_SHARED;
10020  }
10021 
10022  return request_irq(tnapi->irq_vec, fn, flags, name, tnapi);
10023 }
10024 
10025 static int tg3_test_interrupt(struct tg3 *tp)
10026 {
10027  struct tg3_napi *tnapi = &tp->napi[0];
10028  struct net_device *dev = tp->dev;
10029  int err, i, intr_ok = 0;
10030  u32 val;
10031 
10032  if (!netif_running(dev))
10033  return -ENODEV;
10034 
10035  tg3_disable_ints(tp);
10036 
10037  free_irq(tnapi->irq_vec, tnapi);
10038 
10039  /*
10040  * Turn off MSI one shot mode. Otherwise this test has no
10041  * observable way to know whether the interrupt was delivered.
10042  */
10043  if (tg3_flag(tp, 57765_PLUS)) {
10045  tw32(MSGINT_MODE, val);
10046  }
10047 
10048  err = request_irq(tnapi->irq_vec, tg3_test_isr,
10049  IRQF_SHARED, dev->name, tnapi);
10050  if (err)
10051  return err;
10052 
10053  tnapi->hw_status->status &= ~SD_STATUS_UPDATED;
10054  tg3_enable_ints(tp);
10055 
10057  tnapi->coal_now);
10058 
10059  for (i = 0; i < 5; i++) {
10060  u32 int_mbox, misc_host_ctrl;
10061 
10062  int_mbox = tr32_mailbox(tnapi->int_mbox);
10063  misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL);
10064 
10065  if ((int_mbox != 0) ||
10066  (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) {
10067  intr_ok = 1;
10068  break;
10069  }
10070 
10071  if (tg3_flag(tp, 57765_PLUS) &&
10072  tnapi->hw_status->status_tag != tnapi->last_tag)
10073  tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24);
10074 
10075  msleep(10);
10076  }
10077 
10078  tg3_disable_ints(tp);
10079 
10080  free_irq(tnapi->irq_vec, tnapi);
10081 
10082  err = tg3_request_irq(tp, 0);
10083 
10084  if (err)
10085  return err;
10086 
10087  if (intr_ok) {
10088  /* Reenable MSI one shot mode. */
10089  if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) {
10091  tw32(MSGINT_MODE, val);
10092  }
10093  return 0;
10094  }
10095 
10096  return -EIO;
10097 }
10098 
10099 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is
10100  * successfully restored
10101  */
10102 static int tg3_test_msi(struct tg3 *tp)
10103 {
10104  int err;
10105  u16 pci_cmd;
10106 
10107  if (!tg3_flag(tp, USING_MSI))
10108  return 0;
10109 
10110  /* Turn off SERR reporting in case MSI terminates with Master
10111  * Abort.
10112  */
10113  pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
10114  pci_write_config_word(tp->pdev, PCI_COMMAND,
10115  pci_cmd & ~PCI_COMMAND_SERR);
10116 
10117  err = tg3_test_interrupt(tp);
10118 
10119  pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
10120 
10121  if (!err)
10122  return 0;
10123 
10124  /* other failures */
10125  if (err != -EIO)
10126  return err;
10127 
10128  /* MSI test failed, go back to INTx mode */
10129  netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching "
10130  "to INTx mode. Please report this failure to the PCI "
10131  "maintainer and include system chipset information\n");
10132 
10133  free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
10134 
10135  pci_disable_msi(tp->pdev);
10136 
10138  tp->napi[0].irq_vec = tp->pdev->irq;
10139 
10140  err = tg3_request_irq(tp, 0);
10141  if (err)
10142  return err;
10143 
10144  /* Need to reset the chip because the MSI cycle may have terminated
10145  * with Master Abort.
10146  */
10147  tg3_full_lock(tp, 1);
10148 
10149  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10150  err = tg3_init_hw(tp, 1);
10151 
10152  tg3_full_unlock(tp);
10153 
10154  if (err)
10155  free_irq(tp->napi[0].irq_vec, &tp->napi[0]);
10156 
10157  return err;
10158 }
10159 
10160 static int tg3_request_firmware(struct tg3 *tp)
10161 {
10162  const __be32 *fw_data;
10163 
10164  if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
10165  netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
10166  tp->fw_needed);
10167  return -ENOENT;
10168  }
10169 
10170  fw_data = (void *)tp->fw->data;
10171 
10172  /* Firmware blob starts with version numbers, followed by
10173  * start address and _full_ length including BSS sections
10174  * (which must be longer than the actual data, of course
10175  */
10176 
10177  tp->fw_len = be32_to_cpu(fw_data[2]); /* includes bss */
10178  if (tp->fw_len < (tp->fw->size - 12)) {
10179  netdev_err(tp->dev, "bogus length %d in \"%s\"\n",
10180  tp->fw_len, tp->fw_needed);
10181  release_firmware(tp->fw);
10182  tp->fw = NULL;
10183  return -EINVAL;
10184  }
10185 
10186  /* We no longer need firmware; we have it. */
10187  tp->fw_needed = NULL;
10188  return 0;
10189 }
10190 
10191 static u32 tg3_irq_count(struct tg3 *tp)
10192 {
10193  u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt);
10194 
10195  if (irq_cnt > 1) {
10196  /* We want as many rx rings enabled as there are cpus.
10197  * In multiqueue MSI-X mode, the first MSI-X vector
10198  * only deals with link interrupts, etc, so we add
10199  * one to the number of vectors we are requesting.
10200  */
10201  irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max);
10202  }
10203 
10204  return irq_cnt;
10205 }
10206 
10207 static bool tg3_enable_msix(struct tg3 *tp)
10208 {
10209  int i, rc;
10210  struct msix_entry msix_ent[TG3_IRQ_MAX_VECS];
10211 
10212  tp->txq_cnt = tp->txq_req;
10213  tp->rxq_cnt = tp->rxq_req;
10214  if (!tp->rxq_cnt)
10216  if (tp->rxq_cnt > tp->rxq_max)
10217  tp->rxq_cnt = tp->rxq_max;
10218 
10219  /* Disable multiple TX rings by default. Simple round-robin hardware
10220  * scheduling of the TX rings can cause starvation of rings with
10221  * small packets when other rings have TSO or jumbo packets.
10222  */
10223  if (!tp->txq_req)
10224  tp->txq_cnt = 1;
10225 
10226  tp->irq_cnt = tg3_irq_count(tp);
10227 
10228  for (i = 0; i < tp->irq_max; i++) {
10229  msix_ent[i].entry = i;
10230  msix_ent[i].vector = 0;
10231  }
10232 
10233  rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt);
10234  if (rc < 0) {
10235  return false;
10236  } else if (rc != 0) {
10237  if (pci_enable_msix(tp->pdev, msix_ent, rc))
10238  return false;
10239  netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n",
10240  tp->irq_cnt, rc);
10241  tp->irq_cnt = rc;
10242  tp->rxq_cnt = max(rc - 1, 1);
10243  if (tp->txq_cnt)
10244  tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max);
10245  }
10246 
10247  for (i = 0; i < tp->irq_max; i++)
10248  tp->napi[i].irq_vec = msix_ent[i].vector;
10249 
10250  if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) {
10251  pci_disable_msix(tp->pdev);
10252  return false;
10253  }
10254 
10255  if (tp->irq_cnt == 1)
10256  return true;
10257 
10258  tg3_flag_set(tp, ENABLE_RSS);
10259 
10260  if (tp->txq_cnt > 1)
10261  tg3_flag_set(tp, ENABLE_TSS);
10262 
10264 
10265  return true;
10266 }
10267 
10268 static void tg3_ints_init(struct tg3 *tp)
10269 {
10270  if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) &&
10271  !tg3_flag(tp, TAGGED_STATUS)) {
10272  /* All MSI supporting chips should support tagged
10273  * status. Assert that this is the case.
10274  */
10275  netdev_warn(tp->dev,
10276  "MSI without TAGGED_STATUS? Not using MSI\n");
10277  goto defcfg;
10278  }
10279 
10280  if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp))
10281  tg3_flag_set(tp, USING_MSIX);
10282  else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0)
10283  tg3_flag_set(tp, USING_MSI);
10284 
10285  if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) {
10286  u32 msi_mode = tr32(MSGINT_MODE);
10287  if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1)
10288  msi_mode |= MSGINT_MODE_MULTIVEC_EN;
10289  if (!tg3_flag(tp, 1SHOT_MSI))
10290  msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE;
10291  tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
10292  }
10293 defcfg:
10294  if (!tg3_flag(tp, USING_MSIX)) {
10295  tp->irq_cnt = 1;
10296  tp->napi[0].irq_vec = tp->pdev->irq;
10297  }
10298 
10299  if (tp->irq_cnt == 1) {
10300  tp->txq_cnt = 1;
10301  tp->rxq_cnt = 1;
10303  netif_set_real_num_rx_queues(tp->dev, 1);
10304  }
10305 }
10306 
10307 static void tg3_ints_fini(struct tg3 *tp)
10308 {
10309  if (tg3_flag(tp, USING_MSIX))
10310  pci_disable_msix(tp->pdev);
10311  else if (tg3_flag(tp, USING_MSI))
10312  pci_disable_msi(tp->pdev);
10315  tg3_flag_clear(tp, ENABLE_RSS);
10316  tg3_flag_clear(tp, ENABLE_TSS);
10317 }
10318 
10319 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq)
10320 {
10321  struct net_device *dev = tp->dev;
10322  int i, err;
10323 
10324  /*
10325  * Setup interrupts first so we know how
10326  * many NAPI resources to allocate
10327  */
10328  tg3_ints_init(tp);
10329 
10330  tg3_rss_check_indir_tbl(tp);
10331 
10332  /* The placement of this call is tied
10333  * to the setup and use of Host TX descriptors.
10334  */
10335  err = tg3_alloc_consistent(tp);
10336  if (err)
10337  goto err_out1;
10338 
10339  tg3_napi_init(tp);
10340 
10341  tg3_napi_enable(tp);
10342 
10343  for (i = 0; i < tp->irq_cnt; i++) {
10344  struct tg3_napi *tnapi = &tp->napi[i];
10345  err = tg3_request_irq(tp, i);
10346  if (err) {
10347  for (i--; i >= 0; i--) {
10348  tnapi = &tp->napi[i];
10349  free_irq(tnapi->irq_vec, tnapi);
10350  }
10351  goto err_out2;
10352  }
10353  }
10354 
10355  tg3_full_lock(tp, 0);
10356 
10357  err = tg3_init_hw(tp, reset_phy);
10358  if (err) {
10359  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10360  tg3_free_rings(tp);
10361  }
10362 
10363  tg3_full_unlock(tp);
10364 
10365  if (err)
10366  goto err_out3;
10367 
10368  if (test_irq && tg3_flag(tp, USING_MSI)) {
10369  err = tg3_test_msi(tp);
10370 
10371  if (err) {
10372  tg3_full_lock(tp, 0);
10373  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10374  tg3_free_rings(tp);
10375  tg3_full_unlock(tp);
10376 
10377  goto err_out2;
10378  }
10379 
10380  if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) {
10381  u32 val = tr32(PCIE_TRANSACTION_CFG);
10382 
10384  val | PCIE_TRANS_CFG_1SHOT_MSI);
10385  }
10386  }
10387 
10388  tg3_phy_start(tp);
10389 
10390  tg3_hwmon_open(tp);
10391 
10392  tg3_full_lock(tp, 0);
10393 
10394  tg3_timer_start(tp);
10395  tg3_flag_set(tp, INIT_COMPLETE);
10396  tg3_enable_ints(tp);
10397 
10398  tg3_full_unlock(tp);
10399 
10400  netif_tx_start_all_queues(dev);
10401 
10402  /*
10403  * Reset loopback feature if it was turned on while the device was down
10404  * make sure that it's installed properly now.
10405  */
10406  if (dev->features & NETIF_F_LOOPBACK)
10407  tg3_set_loopback(dev, dev->features);
10408 
10409  return 0;
10410 
10411 err_out3:
10412  for (i = tp->irq_cnt - 1; i >= 0; i--) {
10413  struct tg3_napi *tnapi = &tp->napi[i];
10414  free_irq(tnapi->irq_vec, tnapi);
10415  }
10416 
10417 err_out2:
10418  tg3_napi_disable(tp);
10419  tg3_napi_fini(tp);
10420  tg3_free_consistent(tp);
10421 
10422 err_out1:
10423  tg3_ints_fini(tp);
10424 
10425  return err;
10426 }
10427 
10428 static void tg3_stop(struct tg3 *tp)
10429 {
10430  int i;
10431 
10432  tg3_napi_disable(tp);
10433  tg3_reset_task_cancel(tp);
10434 
10435  netif_tx_disable(tp->dev);
10436 
10437  tg3_timer_stop(tp);
10438 
10439  tg3_hwmon_close(tp);
10440 
10441  tg3_phy_stop(tp);
10442 
10443  tg3_full_lock(tp, 1);
10444 
10445  tg3_disable_ints(tp);
10446 
10447  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
10448  tg3_free_rings(tp);
10449  tg3_flag_clear(tp, INIT_COMPLETE);
10450 
10451  tg3_full_unlock(tp);
10452 
10453  for (i = tp->irq_cnt - 1; i >= 0; i--) {
10454  struct tg3_napi *tnapi = &tp->napi[i];
10455  free_irq(tnapi->irq_vec, tnapi);
10456  }
10457 
10458  tg3_ints_fini(tp);
10459 
10460  tg3_napi_fini(tp);
10461 
10462  tg3_free_consistent(tp);
10463 }
10464 
10465 static int tg3_open(struct net_device *dev)
10466 {
10467  struct tg3 *tp = netdev_priv(dev);
10468  int err;
10469 
10470  if (tp->fw_needed) {
10471  err = tg3_request_firmware(tp);
10472  if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) {
10473  if (err)
10474  return err;
10475  } else if (err) {
10476  netdev_warn(tp->dev, "TSO capability disabled\n");
10477  tg3_flag_clear(tp, TSO_CAPABLE);
10478  } else if (!tg3_flag(tp, TSO_CAPABLE)) {
10479  netdev_notice(tp->dev, "TSO capability restored\n");
10480  tg3_flag_set(tp, TSO_CAPABLE);
10481  }
10482  }
10483 
10484  netif_carrier_off(tp->dev);
10485 
10486  err = tg3_power_up(tp);
10487  if (err)
10488  return err;
10489 
10490  tg3_full_lock(tp, 0);
10491 
10492  tg3_disable_ints(tp);
10493  tg3_flag_clear(tp, INIT_COMPLETE);
10494 
10495  tg3_full_unlock(tp);
10496 
10497  err = tg3_start(tp, true, true);
10498  if (err) {
10499  tg3_frob_aux_power(tp, false);
10501  }
10502  return err;
10503 }
10504 
10505 static int tg3_close(struct net_device *dev)
10506 {
10507  struct tg3 *tp = netdev_priv(dev);
10508 
10509  tg3_stop(tp);
10510 
10511  /* Clear stats across close / open calls */
10512  memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev));
10513  memset(&tp->estats_prev, 0, sizeof(tp->estats_prev));
10514 
10515  tg3_power_down(tp);
10516 
10517  netif_carrier_off(tp->dev);
10518 
10519  return 0;
10520 }
10521 
10522 static inline u64 get_stat64(tg3_stat64_t *val)
10523 {
10524  return ((u64)val->high << 32) | ((u64)val->low);
10525 }
10526 
10527 static u64 tg3_calc_crc_errors(struct tg3 *tp)
10528 {
10529  struct tg3_hw_stats *hw_stats = tp->hw_stats;
10530 
10531  if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
10534  u32 val;
10535 
10536  if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
10537  tg3_writephy(tp, MII_TG3_TEST1,
10538  val | MII_TG3_TEST1_CRC_EN);
10539  tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
10540  } else
10541  val = 0;
10542 
10543  tp->phy_crc_errors += val;
10544 
10545  return tp->phy_crc_errors;
10546  }
10547 
10548  return get_stat64(&hw_stats->rx_fcs_errors);
10549 }
10550 
10551 #define ESTAT_ADD(member) \
10552  estats->member = old_estats->member + \
10553  get_stat64(&hw_stats->member)
10554 
10555 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
10556 {
10557  struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
10558  struct tg3_hw_stats *hw_stats = tp->hw_stats;
10559 
10586 
10618 
10625 
10629 
10635 
10637 }
10638 
10639 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
10640 {
10641  struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
10642  struct tg3_hw_stats *hw_stats = tp->hw_stats;
10643 
10644  stats->rx_packets = old_stats->rx_packets +
10645  get_stat64(&hw_stats->rx_ucast_packets) +
10646  get_stat64(&hw_stats->rx_mcast_packets) +
10647  get_stat64(&hw_stats->rx_bcast_packets);
10648 
10649  stats->tx_packets = old_stats->tx_packets +
10650  get_stat64(&hw_stats->tx_ucast_packets) +
10651  get_stat64(&hw_stats->tx_mcast_packets) +
10652  get_stat64(&hw_stats->tx_bcast_packets);
10653 
10654  stats->rx_bytes = old_stats->rx_bytes +
10655  get_stat64(&hw_stats->rx_octets);
10656  stats->tx_bytes = old_stats->tx_bytes +
10657  get_stat64(&hw_stats->tx_octets);
10658 
10659  stats->rx_errors = old_stats->rx_errors +
10660  get_stat64(&hw_stats->rx_errors);
10661  stats->tx_errors = old_stats->tx_errors +
10662  get_stat64(&hw_stats->tx_errors) +
10663  get_stat64(&hw_stats->tx_mac_errors) +
10664  get_stat64(&hw_stats->tx_carrier_sense_errors) +
10665  get_stat64(&hw_stats->tx_discards);
10666 
10667  stats->multicast = old_stats->multicast +
10668  get_stat64(&hw_stats->rx_mcast_packets);
10669  stats->collisions = old_stats->collisions +
10670  get_stat64(&hw_stats->tx_collisions);
10671 
10672  stats->rx_length_errors = old_stats->rx_length_errors +
10673  get_stat64(&hw_stats->rx_frame_too_long_errors) +
10674  get_stat64(&hw_stats->rx_undersize_packets);
10675 
10676  stats->rx_over_errors = old_stats->rx_over_errors +
10677  get_stat64(&hw_stats->rxbds_empty);
10678  stats->rx_frame_errors = old_stats->rx_frame_errors +
10679  get_stat64(&hw_stats->rx_align_errors);
10680  stats->tx_aborted_errors = old_stats->tx_aborted_errors +
10681  get_stat64(&hw_stats->tx_discards);
10682  stats->tx_carrier_errors = old_stats->tx_carrier_errors +
10683  get_stat64(&hw_stats->tx_carrier_sense_errors);
10684 
10685  stats->rx_crc_errors = old_stats->rx_crc_errors +
10686  tg3_calc_crc_errors(tp);
10687 
10688  stats->rx_missed_errors = old_stats->rx_missed_errors +
10689  get_stat64(&hw_stats->rx_discards);
10690 
10691  stats->rx_dropped = tp->rx_dropped;
10692  stats->tx_dropped = tp->tx_dropped;
10693 }
10694 
10695 static int tg3_get_regs_len(struct net_device *dev)
10696 {
10697  return TG3_REG_BLK_SIZE;
10698 }
10699 
10700 static void tg3_get_regs(struct net_device *dev,
10701  struct ethtool_regs *regs, void *_p)
10702 {
10703  struct tg3 *tp = netdev_priv(dev);
10704 
10705  regs->version = 0;
10706 
10707  memset(_p, 0, TG3_REG_BLK_SIZE);
10708 
10710  return;
10711 
10712  tg3_full_lock(tp, 0);
10713 
10714  tg3_dump_legacy_regs(tp, (u32 *)_p);
10715 
10716  tg3_full_unlock(tp);
10717 }
10718 
10719 static int tg3_get_eeprom_len(struct net_device *dev)
10720 {
10721  struct tg3 *tp = netdev_priv(dev);
10722 
10723  return tp->nvram_size;
10724 }
10725 
10726 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10727 {
10728  struct tg3 *tp = netdev_priv(dev);
10729  int ret;
10730  u8 *pd;
10731  u32 i, offset, len, b_offset, b_count;
10732  __be32 val;
10733 
10734  if (tg3_flag(tp, NO_NVRAM))
10735  return -EINVAL;
10736 
10738  return -EAGAIN;
10739 
10740  offset = eeprom->offset;
10741  len = eeprom->len;
10742  eeprom->len = 0;
10743 
10744  eeprom->magic = TG3_EEPROM_MAGIC;
10745 
10746  if (offset & 3) {
10747  /* adjustments to start on required 4 byte boundary */
10748  b_offset = offset & 3;
10749  b_count = 4 - b_offset;
10750  if (b_count > len) {
10751  /* i.e. offset=1 len=2 */
10752  b_count = len;
10753  }
10754  ret = tg3_nvram_read_be32(tp, offset-b_offset, &val);
10755  if (ret)
10756  return ret;
10757  memcpy(data, ((char *)&val) + b_offset, b_count);
10758  len -= b_count;
10759  offset += b_count;
10760  eeprom->len += b_count;
10761  }
10762 
10763  /* read bytes up to the last 4 byte boundary */
10764  pd = &data[eeprom->len];
10765  for (i = 0; i < (len - (len & 3)); i += 4) {
10766  ret = tg3_nvram_read_be32(tp, offset + i, &val);
10767  if (ret) {
10768  eeprom->len += i;
10769  return ret;
10770  }
10771  memcpy(pd + i, &val, 4);
10772  }
10773  eeprom->len += i;
10774 
10775  if (len & 3) {
10776  /* read last bytes not ending on 4 byte boundary */
10777  pd = &data[eeprom->len];
10778  b_count = len & 3;
10779  b_offset = offset + len - b_count;
10780  ret = tg3_nvram_read_be32(tp, b_offset, &val);
10781  if (ret)
10782  return ret;
10783  memcpy(pd, &val, b_count);
10784  eeprom->len += b_count;
10785  }
10786  return 0;
10787 }
10788 
10789 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data)
10790 {
10791  struct tg3 *tp = netdev_priv(dev);
10792  int ret;
10793  u32 offset, len, b_offset, odd_len;
10794  u8 *buf;
10795  __be32 start, end;
10796 
10798  return -EAGAIN;
10799 
10800  if (tg3_flag(tp, NO_NVRAM) ||
10801  eeprom->magic != TG3_EEPROM_MAGIC)
10802  return -EINVAL;
10803 
10804  offset = eeprom->offset;
10805  len = eeprom->len;
10806 
10807  if ((b_offset = (offset & 3))) {
10808  /* adjustments to start on required 4 byte boundary */
10809  ret = tg3_nvram_read_be32(tp, offset-b_offset, &start);
10810  if (ret)
10811  return ret;
10812  len += b_offset;
10813  offset &= ~3;
10814  if (len < 4)
10815  len = 4;
10816  }
10817 
10818  odd_len = 0;
10819  if (len & 3) {
10820  /* adjustments to end on required 4 byte boundary */
10821  odd_len = 1;
10822  len = (len + 3) & ~3;
10823  ret = tg3_nvram_read_be32(tp, offset+len-4, &end);
10824  if (ret)
10825  return ret;
10826  }
10827 
10828  buf = data;
10829  if (b_offset || odd_len) {
10830  buf = kmalloc(len, GFP_KERNEL);
10831  if (!buf)
10832  return -ENOMEM;
10833  if (b_offset)
10834  memcpy(buf, &start, 4);
10835  if (odd_len)
10836  memcpy(buf+len-4, &end, 4);
10837  memcpy(buf + b_offset, data, eeprom->len);
10838  }
10839 
10840  ret = tg3_nvram_write_block(tp, offset, len, buf);
10841 
10842  if (buf != data)
10843  kfree(buf);
10844 
10845  return ret;
10846 }
10847 
10848 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10849 {
10850  struct tg3 *tp = netdev_priv(dev);
10851 
10852  if (tg3_flag(tp, USE_PHYLIB)) {
10853  struct phy_device *phydev;
10854  if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10855  return -EAGAIN;
10856  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10857  return phy_ethtool_gset(phydev, cmd);
10858  }
10859 
10860  cmd->supported = (SUPPORTED_Autoneg);
10861 
10862  if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
10865 
10866  if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
10871  SUPPORTED_TP);
10872  cmd->port = PORT_TP;
10873  } else {
10874  cmd->supported |= SUPPORTED_FIBRE;
10875  cmd->port = PORT_FIBRE;
10876  }
10877 
10878  cmd->advertising = tp->link_config.advertising;
10879  if (tg3_flag(tp, PAUSE_AUTONEG)) {
10880  if (tp->link_config.flowctrl & FLOW_CTRL_RX) {
10881  if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10882  cmd->advertising |= ADVERTISED_Pause;
10883  } else {
10884  cmd->advertising |= ADVERTISED_Pause |
10886  }
10887  } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) {
10889  }
10890  }
10891  if (netif_running(dev) && netif_carrier_ok(dev)) {
10892  ethtool_cmd_speed_set(cmd, tp->link_config.active_speed);
10893  cmd->duplex = tp->link_config.active_duplex;
10894  cmd->lp_advertising = tp->link_config.rmt_adv;
10895  if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) {
10896  if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE)
10897  cmd->eth_tp_mdix = ETH_TP_MDI_X;
10898  else
10899  cmd->eth_tp_mdix = ETH_TP_MDI;
10900  }
10901  } else {
10902  ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN);
10903  cmd->duplex = DUPLEX_UNKNOWN;
10905  }
10906  cmd->phy_address = tp->phy_addr;
10907  cmd->transceiver = XCVR_INTERNAL;
10908  cmd->autoneg = tp->link_config.autoneg;
10909  cmd->maxtxpkt = 0;
10910  cmd->maxrxpkt = 0;
10911  return 0;
10912 }
10913 
10914 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
10915 {
10916  struct tg3 *tp = netdev_priv(dev);
10917  u32 speed = ethtool_cmd_speed(cmd);
10918 
10919  if (tg3_flag(tp, USE_PHYLIB)) {
10920  struct phy_device *phydev;
10921  if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
10922  return -EAGAIN;
10923  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
10924  return phy_ethtool_sset(phydev, cmd);
10925  }
10926 
10927  if (cmd->autoneg != AUTONEG_ENABLE &&
10928  cmd->autoneg != AUTONEG_DISABLE)
10929  return -EINVAL;
10930 
10931  if (cmd->autoneg == AUTONEG_DISABLE &&
10932  cmd->duplex != DUPLEX_FULL &&
10933  cmd->duplex != DUPLEX_HALF)
10934  return -EINVAL;
10935 
10936  if (cmd->autoneg == AUTONEG_ENABLE) {
10937  u32 mask = ADVERTISED_Autoneg |
10940 
10941  if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
10942  mask |= ADVERTISED_1000baseT_Half |
10944 
10945  if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
10946  mask |= ADVERTISED_100baseT_Half |
10947  ADVERTISED_100baseT_Full |
10950  ADVERTISED_TP;
10951  else
10952  mask |= ADVERTISED_FIBRE;
10953 
10954  if (cmd->advertising & ~mask)
10955  return -EINVAL;
10956 
10957  mask &= (ADVERTISED_1000baseT_Half |
10958  ADVERTISED_1000baseT_Full |
10960  ADVERTISED_100baseT_Full |
10963 
10964  cmd->advertising &= mask;
10965  } else {
10966  if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) {
10967  if (speed != SPEED_1000)
10968  return -EINVAL;
10969 
10970  if (cmd->duplex != DUPLEX_FULL)
10971  return -EINVAL;
10972  } else {
10973  if (speed != SPEED_100 &&
10974  speed != SPEED_10)
10975  return -EINVAL;
10976  }
10977  }
10978 
10979  tg3_full_lock(tp, 0);
10980 
10981  tp->link_config.autoneg = cmd->autoneg;
10982  if (cmd->autoneg == AUTONEG_ENABLE) {
10983  tp->link_config.advertising = (cmd->advertising |
10985  tp->link_config.speed = SPEED_UNKNOWN;
10986  tp->link_config.duplex = DUPLEX_UNKNOWN;
10987  } else {
10988  tp->link_config.advertising = 0;
10989  tp->link_config.speed = speed;
10990  tp->link_config.duplex = cmd->duplex;
10991  }
10992 
10993  if (netif_running(dev))
10994  tg3_setup_phy(tp, 1);
10995 
10996  tg3_full_unlock(tp);
10997 
10998  return 0;
10999 }
11000 
11001 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
11002 {
11003  struct tg3 *tp = netdev_priv(dev);
11004 
11005  strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver));
11006  strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
11007  strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version));
11008  strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info));
11009 }
11010 
11011 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
11012 {
11013  struct tg3 *tp = netdev_priv(dev);
11014 
11015  if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev))
11016  wol->supported = WAKE_MAGIC;
11017  else
11018  wol->supported = 0;
11019  wol->wolopts = 0;
11020  if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev))
11021  wol->wolopts = WAKE_MAGIC;
11022  memset(&wol->sopass, 0, sizeof(wol->sopass));
11023 }
11024 
11025 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
11026 {
11027  struct tg3 *tp = netdev_priv(dev);
11028  struct device *dp = &tp->pdev->dev;
11029 
11030  if (wol->wolopts & ~WAKE_MAGIC)
11031  return -EINVAL;
11032  if ((wol->wolopts & WAKE_MAGIC) &&
11033  !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp)))
11034  return -EINVAL;
11035 
11037 
11038  spin_lock_bh(&tp->lock);
11039  if (device_may_wakeup(dp))
11040  tg3_flag_set(tp, WOL_ENABLE);
11041  else
11042  tg3_flag_clear(tp, WOL_ENABLE);
11043  spin_unlock_bh(&tp->lock);
11044 
11045  return 0;
11046 }
11047 
11048 static u32 tg3_get_msglevel(struct net_device *dev)
11049 {
11050  struct tg3 *tp = netdev_priv(dev);
11051  return tp->msg_enable;
11052 }
11053 
11054 static void tg3_set_msglevel(struct net_device *dev, u32 value)
11055 {
11056  struct tg3 *tp = netdev_priv(dev);
11057  tp->msg_enable = value;
11058 }
11059 
11060 static int tg3_nway_reset(struct net_device *dev)
11061 {
11062  struct tg3 *tp = netdev_priv(dev);
11063  int r;
11064 
11065  if (!netif_running(dev))
11066  return -EAGAIN;
11067 
11068  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
11069  return -EINVAL;
11070 
11071  if (tg3_flag(tp, USE_PHYLIB)) {
11072  if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
11073  return -EAGAIN;
11074  r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
11075  } else {
11076  u32 bmcr;
11077 
11078  spin_lock_bh(&tp->lock);
11079  r = -EINVAL;
11080  tg3_readphy(tp, MII_BMCR, &bmcr);
11081  if (!tg3_readphy(tp, MII_BMCR, &bmcr) &&
11082  ((bmcr & BMCR_ANENABLE) ||
11084  tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART |
11085  BMCR_ANENABLE);
11086  r = 0;
11087  }
11088  spin_unlock_bh(&tp->lock);
11089  }
11090 
11091  return r;
11092 }
11093 
11094 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
11095 {
11096  struct tg3 *tp = netdev_priv(dev);
11097 
11098  ering->rx_max_pending = tp->rx_std_ring_mask;
11099  if (tg3_flag(tp, JUMBO_RING_ENABLE))
11101  else
11102  ering->rx_jumbo_max_pending = 0;
11103 
11104  ering->tx_max_pending = TG3_TX_RING_SIZE - 1;
11105 
11106  ering->rx_pending = tp->rx_pending;
11107  if (tg3_flag(tp, JUMBO_RING_ENABLE))
11108  ering->rx_jumbo_pending = tp->rx_jumbo_pending;
11109  else
11110  ering->rx_jumbo_pending = 0;
11111 
11112  ering->tx_pending = tp->napi[0].tx_pending;
11113 }
11114 
11115 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
11116 {
11117  struct tg3 *tp = netdev_priv(dev);
11118  int i, irq_sync = 0, err = 0;
11119 
11120  if ((ering->rx_pending > tp->rx_std_ring_mask) ||
11121  (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) ||
11122  (ering->tx_pending > TG3_TX_RING_SIZE - 1) ||
11123  (ering->tx_pending <= MAX_SKB_FRAGS) ||
11124  (tg3_flag(tp, TSO_BUG) &&
11125  (ering->tx_pending <= (MAX_SKB_FRAGS * 3))))
11126  return -EINVAL;
11127 
11128  if (netif_running(dev)) {
11129  tg3_phy_stop(tp);
11130  tg3_netif_stop(tp);
11131  irq_sync = 1;
11132  }
11133 
11134  tg3_full_lock(tp, irq_sync);
11135 
11136  tp->rx_pending = ering->rx_pending;
11137 
11138  if (tg3_flag(tp, MAX_RXPEND_64) &&
11139  tp->rx_pending > 63)
11140  tp->rx_pending = 63;
11141  tp->rx_jumbo_pending = ering->rx_jumbo_pending;
11142 
11143  for (i = 0; i < tp->irq_max; i++)
11144  tp->napi[i].tx_pending = ering->tx_pending;
11145 
11146  if (netif_running(dev)) {
11147  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11148  err = tg3_restart_hw(tp, 1);
11149  if (!err)
11150  tg3_netif_start(tp);
11151  }
11152 
11153  tg3_full_unlock(tp);
11154 
11155  if (irq_sync && !err)
11156  tg3_phy_start(tp);
11157 
11158  return err;
11159 }
11160 
11161 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
11162 {
11163  struct tg3 *tp = netdev_priv(dev);
11164 
11165  epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG);
11166 
11167  if (tp->link_config.flowctrl & FLOW_CTRL_RX)
11168  epause->rx_pause = 1;
11169  else
11170  epause->rx_pause = 0;
11171 
11172  if (tp->link_config.flowctrl & FLOW_CTRL_TX)
11173  epause->tx_pause = 1;
11174  else
11175  epause->tx_pause = 0;
11176 }
11177 
11178 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause)
11179 {
11180  struct tg3 *tp = netdev_priv(dev);
11181  int err = 0;
11182 
11183  if (tg3_flag(tp, USE_PHYLIB)) {
11184  u32 newadv;
11185  struct phy_device *phydev;
11186 
11187  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
11188 
11189  if (!(phydev->supported & SUPPORTED_Pause) ||
11190  (!(phydev->supported & SUPPORTED_Asym_Pause) &&
11191  (epause->rx_pause != epause->tx_pause)))
11192  return -EINVAL;
11193 
11194  tp->link_config.flowctrl = 0;
11195  if (epause->rx_pause) {
11196  tp->link_config.flowctrl |= FLOW_CTRL_RX;
11197 
11198  if (epause->tx_pause) {
11199  tp->link_config.flowctrl |= FLOW_CTRL_TX;
11200  newadv = ADVERTISED_Pause;
11201  } else
11202  newadv = ADVERTISED_Pause |
11204  } else if (epause->tx_pause) {
11205  tp->link_config.flowctrl |= FLOW_CTRL_TX;
11206  newadv = ADVERTISED_Asym_Pause;
11207  } else
11208  newadv = 0;
11209 
11210  if (epause->autoneg)
11212  else
11214 
11215  if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
11216  u32 oldadv = phydev->advertising &
11218  if (oldadv != newadv) {
11219  phydev->advertising &=
11220  ~(ADVERTISED_Pause |
11222  phydev->advertising |= newadv;
11223  if (phydev->autoneg) {
11224  /*
11225  * Always renegotiate the link to
11226  * inform our link partner of our
11227  * flow control settings, even if the
11228  * flow control is forced. Let
11229  * tg3_adjust_link() do the final
11230  * flow control setup.
11231  */
11232  return phy_start_aneg(phydev);
11233  }
11234  }
11235 
11236  if (!epause->autoneg)
11237  tg3_setup_flow_control(tp, 0, 0);
11238  } else {
11239  tp->link_config.advertising &=
11240  ~(ADVERTISED_Pause |
11242  tp->link_config.advertising |= newadv;
11243  }
11244  } else {
11245  int irq_sync = 0;
11246 
11247  if (netif_running(dev)) {
11248  tg3_netif_stop(tp);
11249  irq_sync = 1;
11250  }
11251 
11252  tg3_full_lock(tp, irq_sync);
11253 
11254  if (epause->autoneg)
11256  else
11258  if (epause->rx_pause)
11259  tp->link_config.flowctrl |= FLOW_CTRL_RX;
11260  else
11261  tp->link_config.flowctrl &= ~FLOW_CTRL_RX;
11262  if (epause->tx_pause)
11263  tp->link_config.flowctrl |= FLOW_CTRL_TX;
11264  else
11265  tp->link_config.flowctrl &= ~FLOW_CTRL_TX;
11266 
11267  if (netif_running(dev)) {
11268  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
11269  err = tg3_restart_hw(tp, 1);
11270  if (!err)
11271  tg3_netif_start(tp);
11272  }
11273 
11274  tg3_full_unlock(tp);
11275  }
11276 
11277  return err;
11278 }
11279 
11280 static int tg3_get_sset_count(struct net_device *dev, int sset)
11281 {
11282  switch (sset) {
11283  case ETH_SS_TEST:
11284  return TG3_NUM_TEST;
11285  case ETH_SS_STATS:
11286  return TG3_NUM_STATS;
11287  default:
11288  return -EOPNOTSUPP;
11289  }
11290 }
11291 
11292 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
11293  u32 *rules __always_unused)
11294 {
11295  struct tg3 *tp = netdev_priv(dev);
11296 
11297  if (!tg3_flag(tp, SUPPORT_MSIX))
11298  return -EOPNOTSUPP;
11299 
11300  switch (info->cmd) {
11301  case ETHTOOL_GRXRINGS:
11302  if (netif_running(tp->dev))
11303  info->data = tp->rxq_cnt;
11304  else {
11305  info->data = num_online_cpus();
11306  if (info->data > TG3_RSS_MAX_NUM_QS)
11307  info->data = TG3_RSS_MAX_NUM_QS;
11308  }
11309 
11310  /* The first interrupt vector only
11311  * handles link interrupts.
11312  */
11313  info->data -= 1;
11314  return 0;
11315 
11316  default:
11317  return -EOPNOTSUPP;
11318  }
11319 }
11320 
11321 static u32 tg3_get_rxfh_indir_size(struct net_device *dev)
11322 {
11323  u32 size = 0;
11324  struct tg3 *tp = netdev_priv(dev);
11325 
11326  if (tg3_flag(tp, SUPPORT_MSIX))
11327  size = TG3_RSS_INDIR_TBL_SIZE;
11328 
11329  return size;
11330 }
11331 
11332 static int tg3_get_rxfh_indir(struct net_device *dev, u32 *indir)
11333 {
11334  struct tg3 *tp = netdev_priv(dev);
11335  int i;
11336 
11337  for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
11338  indir[i] = tp->rss_ind_tbl[i];
11339 
11340  return 0;
11341 }
11342 
11343 static int tg3_set_rxfh_indir(struct net_device *dev, const u32 *indir)
11344 {
11345  struct tg3 *tp = netdev_priv(dev);
11346  size_t i;
11347 
11348  for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++)
11349  tp->rss_ind_tbl[i] = indir[i];
11350 
11351  if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS))
11352  return 0;
11353 
11354  /* It is legal to write the indirection
11355  * table while the device is running.
11356  */
11357  tg3_full_lock(tp, 0);
11358  tg3_rss_write_indir_tbl(tp);
11359  tg3_full_unlock(tp);
11360 
11361  return 0;
11362 }
11363 
11364 static void tg3_get_channels(struct net_device *dev,
11365  struct ethtool_channels *channel)
11366 {
11367  struct tg3 *tp = netdev_priv(dev);
11368  u32 deflt_qs = netif_get_num_default_rss_queues();
11369 
11370  channel->max_rx = tp->rxq_max;
11371  channel->max_tx = tp->txq_max;
11372 
11373  if (netif_running(dev)) {
11374  channel->rx_count = tp->rxq_cnt;
11375  channel->tx_count = tp->txq_cnt;
11376  } else {
11377  if (tp->rxq_req)
11378  channel->rx_count = tp->rxq_req;
11379  else
11380  channel->rx_count = min(deflt_qs, tp->rxq_max);
11381 
11382  if (tp->txq_req)
11383  channel->tx_count = tp->txq_req;
11384  else
11385  channel->tx_count = min(deflt_qs, tp->txq_max);
11386  }
11387 }
11388 
11389 static int tg3_set_channels(struct net_device *dev,
11390  struct ethtool_channels *channel)
11391 {
11392  struct tg3 *tp = netdev_priv(dev);
11393 
11394  if (!tg3_flag(tp, SUPPORT_MSIX))
11395  return -EOPNOTSUPP;
11396 
11397  if (channel->rx_count > tp->rxq_max ||
11398  channel->tx_count > tp->txq_max)
11399  return -EINVAL;
11400 
11401  tp->rxq_req = channel->rx_count;
11402  tp->txq_req = channel->tx_count;
11403 
11404  if (!netif_running(dev))
11405  return 0;
11406 
11407  tg3_stop(tp);
11408 
11409  netif_carrier_off(dev);
11410 
11411  tg3_start(tp, true, false);
11412 
11413  return 0;
11414 }
11415 
11416 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
11417 {
11418  switch (stringset) {
11419  case ETH_SS_STATS:
11420  memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys));
11421  break;
11422  case ETH_SS_TEST:
11423  memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys));
11424  break;
11425  default:
11426  WARN_ON(1); /* we need a WARN() */
11427  break;
11428  }
11429 }
11430 
11431 static int tg3_set_phys_id(struct net_device *dev,
11433 {
11434  struct tg3 *tp = netdev_priv(dev);
11435 
11436  if (!netif_running(tp->dev))
11437  return -EAGAIN;
11438 
11439  switch (state) {
11440  case ETHTOOL_ID_ACTIVE:
11441  return 1; /* cycle on/off once per second */
11442 
11443  case ETHTOOL_ID_ON:
11451  break;
11452 
11453  case ETHTOOL_ID_OFF:
11456  break;
11457 
11458  case ETHTOOL_ID_INACTIVE:
11459  tw32(MAC_LED_CTRL, tp->led_ctrl);
11460  break;
11461  }
11462 
11463  return 0;
11464 }
11465 
11466 static void tg3_get_ethtool_stats(struct net_device *dev,
11467  struct ethtool_stats *estats, u64 *tmp_stats)
11468 {
11469  struct tg3 *tp = netdev_priv(dev);
11470 
11471  if (tp->hw_stats)
11472  tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats);
11473  else
11474  memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats));
11475 }
11476 
11477 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
11478 {
11479  int i;
11480  __be32 *buf;
11481  u32 offset = 0, len = 0;
11482  u32 magic, val;
11483 
11484  if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic))
11485  return NULL;
11486 
11487  if (magic == TG3_EEPROM_MAGIC) {
11488  for (offset = TG3_NVM_DIR_START;
11489  offset < TG3_NVM_DIR_END;
11490  offset += TG3_NVM_DIRENT_SIZE) {
11491  if (tg3_nvram_read(tp, offset, &val))
11492  return NULL;
11493 
11494  if ((val >> TG3_NVM_DIRTYPE_SHIFT) ==
11496  break;
11497  }
11498 
11499  if (offset != TG3_NVM_DIR_END) {
11500  len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4;
11501  if (tg3_nvram_read(tp, offset + 4, &offset))
11502  return NULL;
11503 
11504  offset = tg3_nvram_logical_addr(tp, offset);
11505  }
11506  }
11507 
11508  if (!offset || !len) {
11509  offset = TG3_NVM_VPD_OFF;
11510  len = TG3_NVM_VPD_LEN;
11511  }
11512 
11513  buf = kmalloc(len, GFP_KERNEL);
11514  if (buf == NULL)
11515  return NULL;
11516 
11517  if (magic == TG3_EEPROM_MAGIC) {
11518  for (i = 0; i < len; i += 4) {
11519  /* The data is in little-endian format in NVRAM.
11520  * Use the big-endian read routines to preserve
11521  * the byte order as it exists in NVRAM.
11522  */
11523  if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
11524  goto error;
11525  }
11526  } else {
11527  u8 *ptr;
11528  ssize_t cnt;
11529  unsigned int pos = 0;
11530 
11531  ptr = (u8 *)&buf[0];
11532  for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
11533  cnt = pci_read_vpd(tp->pdev, pos,
11534  len - pos, ptr);
11535  if (cnt == -ETIMEDOUT || cnt == -EINTR)
11536  cnt = 0;
11537  else if (cnt < 0)
11538  goto error;
11539  }
11540  if (pos != len)
11541  goto error;
11542  }
11543 
11544  *vpdlen = len;
11545 
11546  return buf;
11547 
11548 error:
11549  kfree(buf);
11550  return NULL;
11551 }
11552 
11553 #define NVRAM_TEST_SIZE 0x100
11554 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14
11555 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18
11556 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c
11557 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20
11558 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24
11559 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50
11560 #define NVRAM_SELFBOOT_HW_SIZE 0x20
11561 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c
11562 
11563 static int tg3_test_nvram(struct tg3 *tp)
11564 {
11565  u32 csum, magic, len;
11566  __be32 *buf;
11567  int i, j, k, err = 0, size;
11568 
11569  if (tg3_flag(tp, NO_NVRAM))
11570  return 0;
11571 
11572  if (tg3_nvram_read(tp, 0, &magic) != 0)
11573  return -EIO;
11574 
11575  if (magic == TG3_EEPROM_MAGIC)
11576  size = NVRAM_TEST_SIZE;
11577  else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) {
11578  if ((magic & TG3_EEPROM_SB_FORMAT_MASK) ==
11580  switch (magic & TG3_EEPROM_SB_REVISION_MASK) {
11583  break;
11586  break;
11589  break;
11592  break;
11595  break;
11598  break;
11599  default:
11600  return -EIO;
11601  }
11602  } else
11603  return 0;
11604  } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
11605  size = NVRAM_SELFBOOT_HW_SIZE;
11606  else
11607  return -EIO;
11608 
11609  buf = kmalloc(size, GFP_KERNEL);
11610  if (buf == NULL)
11611  return -ENOMEM;
11612 
11613  err = -EIO;
11614  for (i = 0, j = 0; i < size; i += 4, j++) {
11615  err = tg3_nvram_read_be32(tp, i, &buf[j]);
11616  if (err)
11617  break;
11618  }
11619  if (i < size)
11620  goto out;
11621 
11622  /* Selfboot format */
11623  magic = be32_to_cpu(buf[0]);
11624  if ((magic & TG3_EEPROM_MAGIC_FW_MSK) ==
11626  u8 *buf8 = (u8 *) buf, csum8 = 0;
11627 
11628  if ((magic & TG3_EEPROM_SB_REVISION_MASK) ==
11630  /* For rev 2, the csum doesn't include the MBA. */
11631  for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++)
11632  csum8 += buf8[i];
11633  for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++)
11634  csum8 += buf8[i];
11635  } else {
11636  for (i = 0; i < size; i++)
11637  csum8 += buf8[i];
11638  }
11639 
11640  if (csum8 == 0) {
11641  err = 0;
11642  goto out;
11643  }
11644 
11645  err = -EIO;
11646  goto out;
11647  }
11648 
11649  if ((magic & TG3_EEPROM_MAGIC_HW_MSK) ==
11653  u8 *buf8 = (u8 *) buf;
11654 
11655  /* Separate the parity bits and the data bytes. */
11656  for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) {
11657  if ((i == 0) || (i == 8)) {
11658  int l;
11659  u8 msk;
11660 
11661  for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1)
11662  parity[k++] = buf8[i] & msk;
11663  i++;
11664  } else if (i == 16) {
11665  int l;
11666  u8 msk;
11667 
11668  for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1)
11669  parity[k++] = buf8[i] & msk;
11670  i++;
11671 
11672  for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1)
11673  parity[k++] = buf8[i] & msk;
11674  i++;
11675  }
11676  data[j++] = buf8[i];
11677  }
11678 
11679  err = -EIO;
11680  for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) {
11681  u8 hw8 = hweight8(data[i]);
11682 
11683  if ((hw8 & 0x1) && parity[i])
11684  goto out;
11685  else if (!(hw8 & 0x1) && !parity[i])
11686  goto out;
11687  }
11688  err = 0;
11689  goto out;
11690  }
11691 
11692  err = -EIO;
11693 
11694  /* Bootstrap checksum at offset 0x10 */
11695  csum = calc_crc((unsigned char *) buf, 0x10);
11696  if (csum != le32_to_cpu(buf[0x10/4]))
11697  goto out;
11698 
11699  /* Manufacturing block starts at offset 0x74, checksum at 0xfc */
11700  csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88);
11701  if (csum != le32_to_cpu(buf[0xfc/4]))
11702  goto out;
11703 
11704  kfree(buf);
11705 
11706  buf = tg3_vpd_readblock(tp, &len);
11707  if (!buf)
11708  return -ENOMEM;
11709 
11710  i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA);
11711  if (i > 0) {
11712  j = pci_vpd_lrdt_size(&((u8 *)buf)[i]);
11713  if (j < 0)
11714  goto out;
11715 
11716  if (i + PCI_VPD_LRDT_TAG_SIZE + j > len)
11717  goto out;
11718 
11719  i += PCI_VPD_LRDT_TAG_SIZE;
11720  j = pci_vpd_find_info_keyword((u8 *)buf, i, j,
11722  if (j > 0) {
11723  u8 csum8 = 0;
11724 
11726 
11727  for (i = 0; i <= j; i++)
11728  csum8 += ((u8 *)buf)[i];
11729 
11730  if (csum8)
11731  goto out;
11732  }
11733  }
11734 
11735  err = 0;
11736 
11737 out:
11738  kfree(buf);
11739  return err;
11740 }
11741 
11742 #define TG3_SERDES_TIMEOUT_SEC 2
11743 #define TG3_COPPER_TIMEOUT_SEC 6
11744 
11745 static int tg3_test_link(struct tg3 *tp)
11746 {
11747  int i, max;
11748 
11749  if (!netif_running(tp->dev))
11750  return -ENODEV;
11751 
11752  if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
11753  max = TG3_SERDES_TIMEOUT_SEC;
11754  else
11755  max = TG3_COPPER_TIMEOUT_SEC;
11756 
11757  for (i = 0; i < max; i++) {
11758  if (netif_carrier_ok(tp->dev))
11759  return 0;
11760 
11761  if (msleep_interruptible(1000))
11762  break;
11763  }
11764 
11765  return -EIO;
11766 }
11767 
11768 /* Only test the commonly used registers */
11769 static int tg3_test_registers(struct tg3 *tp)
11770 {
11771  int i, is_5705, is_5750;
11772  u32 offset, read_mask, write_mask, val, save_val, read_val;
11773  static struct {
11774  u16 offset;
11775  u16 flags;
11776 #define TG3_FL_5705 0x1
11777 #define TG3_FL_NOT_5705 0x2
11778 #define TG3_FL_NOT_5788 0x4
11779 #define TG3_FL_NOT_5750 0x8
11780  u32 read_mask;
11781  u32 write_mask;
11782  } reg_tbl[] = {
11783  /* MAC Control Registers */
11785  0x00000000, 0x00ef6f8c },
11786  { MAC_MODE, TG3_FL_5705,
11787  0x00000000, 0x01ef6b8c },
11789  0x03800107, 0x00000000 },
11791  0x03800100, 0x00000000 },
11792  { MAC_ADDR_0_HIGH, 0x0000,
11793  0x00000000, 0x0000ffff },
11794  { MAC_ADDR_0_LOW, 0x0000,
11795  0x00000000, 0xffffffff },
11796  { MAC_RX_MTU_SIZE, 0x0000,
11797  0x00000000, 0x0000ffff },
11798  { MAC_TX_MODE, 0x0000,
11799  0x00000000, 0x00000070 },
11800  { MAC_TX_LENGTHS, 0x0000,
11801  0x00000000, 0x00003fff },
11803  0x00000000, 0x000007fc },
11805  0x00000000, 0x000007dc },
11806  { MAC_HASH_REG_0, 0x0000,
11807  0x00000000, 0xffffffff },
11808  { MAC_HASH_REG_1, 0x0000,
11809  0x00000000, 0xffffffff },
11810  { MAC_HASH_REG_2, 0x0000,
11811  0x00000000, 0xffffffff },
11812  { MAC_HASH_REG_3, 0x0000,
11813  0x00000000, 0xffffffff },
11814 
11815  /* Receive Data and Receive BD Initiator Control Registers. */
11817  0x00000000, 0xffffffff },
11819  0x00000000, 0xffffffff },
11821  0x00000000, 0x00000003 },
11823  0x00000000, 0xffffffff },
11824  { RCVDBDI_STD_BD+0, 0x0000,
11825  0x00000000, 0xffffffff },
11826  { RCVDBDI_STD_BD+4, 0x0000,
11827  0x00000000, 0xffffffff },
11828  { RCVDBDI_STD_BD+8, 0x0000,
11829  0x00000000, 0xffff0002 },
11830  { RCVDBDI_STD_BD+0xc, 0x0000,
11831  0x00000000, 0xffffffff },
11832 
11833  /* Receive BD Initiator Control Registers. */
11835  0x00000000, 0xffffffff },
11837  0x00000000, 0x000003ff },
11839  0x00000000, 0xffffffff },
11840 
11841  /* Host Coalescing Control Registers. */
11843  0x00000000, 0x00000004 },
11845  0x00000000, 0x000000f6 },
11847  0x00000000, 0xffffffff },
11849  0x00000000, 0x000003ff },
11851  0x00000000, 0xffffffff },
11853  0x00000000, 0x000003ff },
11855  0x00000000, 0xffffffff },
11857  0x00000000, 0x000000ff },
11859  0x00000000, 0xffffffff },
11861  0x00000000, 0x000000ff },
11863  0x00000000, 0xffffffff },
11865  0x00000000, 0xffffffff },
11867  0x00000000, 0xffffffff },
11869  0x00000000, 0x000000ff },
11871  0x00000000, 0xffffffff },
11873  0x00000000, 0x000000ff },
11875  0x00000000, 0xffffffff },
11877  0x00000000, 0xffffffff },
11879  0x00000000, 0xffffffff },
11880  { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000,
11881  0x00000000, 0xffffffff },
11882  { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000,
11883  0x00000000, 0xffffffff },
11884  { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000,
11885  0xffffffff, 0x00000000 },
11886  { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000,
11887  0xffffffff, 0x00000000 },
11888 
11889  /* Buffer Manager Control Registers. */
11891  0x00000000, 0x007fff80 },
11893  0x00000000, 0x007fffff },
11894  { BUFMGR_MB_RDMA_LOW_WATER, 0x0000,
11895  0x00000000, 0x0000003f },
11896  { BUFMGR_MB_MACRX_LOW_WATER, 0x0000,
11897  0x00000000, 0x000001ff },
11898  { BUFMGR_MB_HIGH_WATER, 0x0000,
11899  0x00000000, 0x000001ff },
11901  0xffffffff, 0x00000000 },
11903  0xffffffff, 0x00000000 },
11904 
11905  /* Mailbox Registers */
11906  { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000,
11907  0x00000000, 0x000001ff },
11909  0x00000000, 0x000001ff },
11910  { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000,
11911  0x00000000, 0x000007ff },
11912  { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000,
11913  0x00000000, 0x000001ff },
11914 
11915  { 0xffff, 0x0000, 0x00000000, 0x00000000 },
11916  };
11917 
11918  is_5705 = is_5750 = 0;
11919  if (tg3_flag(tp, 5705_PLUS)) {
11920  is_5705 = 1;
11921  if (tg3_flag(tp, 5750_PLUS))
11922  is_5750 = 1;
11923  }
11924 
11925  for (i = 0; reg_tbl[i].offset != 0xffff; i++) {
11926  if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705))
11927  continue;
11928 
11929  if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705))
11930  continue;
11931 
11932  if (tg3_flag(tp, IS_5788) &&
11933  (reg_tbl[i].flags & TG3_FL_NOT_5788))
11934  continue;
11935 
11936  if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750))
11937  continue;
11938 
11939  offset = (u32) reg_tbl[i].offset;
11940  read_mask = reg_tbl[i].read_mask;
11941  write_mask = reg_tbl[i].write_mask;
11942 
11943  /* Save the original register content */
11944  save_val = tr32(offset);
11945 
11946  /* Determine the read-only value. */
11947  read_val = save_val & read_mask;
11948 
11949  /* Write zero to the register, then make sure the read-only bits
11950  * are not changed and the read/write bits are all zeros.
11951  */
11952  tw32(offset, 0);
11953 
11954  val = tr32(offset);
11955 
11956  /* Test the read-only and read/write bits. */
11957  if (((val & read_mask) != read_val) || (val & write_mask))
11958  goto out;
11959 
11960  /* Write ones to all the bits defined by RdMask and WrMask, then
11961  * make sure the read-only bits are not changed and the
11962  * read/write bits are all ones.
11963  */
11964  tw32(offset, read_mask | write_mask);
11965 
11966  val = tr32(offset);
11967 
11968  /* Test the read-only bits. */
11969  if ((val & read_mask) != read_val)
11970  goto out;
11971 
11972  /* Test the read/write bits. */
11973  if ((val & write_mask) != write_mask)
11974  goto out;
11975 
11976  tw32(offset, save_val);
11977  }
11978 
11979  return 0;
11980 
11981 out:
11982  if (netif_msg_hw(tp))
11983  netdev_err(tp->dev,
11984  "Register test failed at offset %x\n", offset);
11985  tw32(offset, save_val);
11986  return -EIO;
11987 }
11988 
11989 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len)
11990 {
11991  static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a };
11992  int i;
11993  u32 j;
11994 
11995  for (i = 0; i < ARRAY_SIZE(test_pattern); i++) {
11996  for (j = 0; j < len; j += 4) {
11997  u32 val;
11998 
11999  tg3_write_mem(tp, offset + j, test_pattern[i]);
12000  tg3_read_mem(tp, offset + j, &val);
12001  if (val != test_pattern[i])
12002  return -EIO;
12003  }
12004  }
12005  return 0;
12006 }
12007 
12008 static int tg3_test_memory(struct tg3 *tp)
12009 {
12010  static struct mem_entry {
12011  u32 offset;
12012  u32 len;
12013  } mem_tbl_570x[] = {
12014  { 0x00000000, 0x00b50},
12015  { 0x00002000, 0x1c000},
12016  { 0xffffffff, 0x00000}
12017  }, mem_tbl_5705[] = {
12018  { 0x00000100, 0x0000c},
12019  { 0x00000200, 0x00008},
12020  { 0x00004000, 0x00800},
12021  { 0x00006000, 0x01000},
12022  { 0x00008000, 0x02000},
12023  { 0x00010000, 0x0e000},
12024  { 0xffffffff, 0x00000}
12025  }, mem_tbl_5755[] = {
12026  { 0x00000200, 0x00008},
12027  { 0x00004000, 0x00800},
12028  { 0x00006000, 0x00800},
12029  { 0x00008000, 0x02000},
12030  { 0x00010000, 0x0c000},
12031  { 0xffffffff, 0x00000}
12032  }, mem_tbl_5906[] = {
12033  { 0x00000200, 0x00008},
12034  { 0x00004000, 0x00400},
12035  { 0x00006000, 0x00400},
12036  { 0x00008000, 0x01000},
12037  { 0x00010000, 0x01000},
12038  { 0xffffffff, 0x00000}
12039  }, mem_tbl_5717[] = {
12040  { 0x00000200, 0x00008},
12041  { 0x00010000, 0x0a000},
12042  { 0x00020000, 0x13c00},
12043  { 0xffffffff, 0x00000}
12044  }, mem_tbl_57765[] = {
12045  { 0x00000200, 0x00008},
12046  { 0x00004000, 0x00800},
12047  { 0x00006000, 0x09800},
12048  { 0x00010000, 0x0a000},
12049  { 0xffffffff, 0x00000}
12050  };
12051  struct mem_entry *mem_tbl;
12052  int err = 0;
12053  int i;
12054 
12055  if (tg3_flag(tp, 5717_PLUS))
12056  mem_tbl = mem_tbl_5717;
12057  else if (tg3_flag(tp, 57765_CLASS))
12058  mem_tbl = mem_tbl_57765;
12059  else if (tg3_flag(tp, 5755_PLUS))
12060  mem_tbl = mem_tbl_5755;
12061  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
12062  mem_tbl = mem_tbl_5906;
12063  else if (tg3_flag(tp, 5705_PLUS))
12064  mem_tbl = mem_tbl_5705;
12065  else
12066  mem_tbl = mem_tbl_570x;
12067 
12068  for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) {
12069  err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len);
12070  if (err)
12071  break;
12072  }
12073 
12074  return err;
12075 }
12076 
12077 #define TG3_TSO_MSS 500
12078 
12079 #define TG3_TSO_IP_HDR_LEN 20
12080 #define TG3_TSO_TCP_HDR_LEN 20
12081 #define TG3_TSO_TCP_OPT_LEN 12
12082 
12083 static const u8 tg3_tso_header[] = {
12084 0x08, 0x00,
12085 0x45, 0x00, 0x00, 0x00,
12086 0x00, 0x00, 0x40, 0x00,
12087 0x40, 0x06, 0x00, 0x00,
12088 0x0a, 0x00, 0x00, 0x01,
12089 0x0a, 0x00, 0x00, 0x02,
12090 0x0d, 0x00, 0xe0, 0x00,
12091 0x00, 0x00, 0x01, 0x00,
12092 0x00, 0x00, 0x02, 0x00,
12093 0x80, 0x10, 0x10, 0x00,
12094 0x14, 0x09, 0x00, 0x00,
12095 0x01, 0x01, 0x08, 0x0a,
12096 0x11, 0x11, 0x11, 0x11,
12097 0x11, 0x11, 0x11, 0x11,
12098 };
12099 
12100 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback)
12101 {
12102  u32 rx_start_idx, rx_idx, tx_idx, opaque_key;
12103  u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val;
12104  u32 budget;
12105  struct sk_buff *skb;
12106  u8 *tx_data, *rx_data;
12107  dma_addr_t map;
12108  int num_pkts, tx_len, rx_len, i, err;
12109  struct tg3_rx_buffer_desc *desc;
12110  struct tg3_napi *tnapi, *rnapi;
12111  struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring;
12112 
12113  tnapi = &tp->napi[0];
12114  rnapi = &tp->napi[0];
12115  if (tp->irq_cnt > 1) {
12116  if (tg3_flag(tp, ENABLE_RSS))
12117  rnapi = &tp->napi[1];
12118  if (tg3_flag(tp, ENABLE_TSS))
12119  tnapi = &tp->napi[1];
12120  }
12121  coal_now = tnapi->coal_now | rnapi->coal_now;
12122 
12123  err = -EIO;
12124 
12125  tx_len = pktsz;
12126  skb = netdev_alloc_skb(tp->dev, tx_len);
12127  if (!skb)
12128  return -ENOMEM;
12129 
12130  tx_data = skb_put(skb, tx_len);
12131  memcpy(tx_data, tp->dev->dev_addr, 6);
12132  memset(tx_data + 6, 0x0, 8);
12133 
12134  tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN);
12135 
12136  if (tso_loopback) {
12137  struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN];
12138 
12139  u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN +
12141 
12142  memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header,
12143  sizeof(tg3_tso_header));
12144  mss = TG3_TSO_MSS;
12145 
12146  val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header);
12147  num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS);
12148 
12149  /* Set the total length field in the IP header */
12150  iph->tot_len = htons((u16)(mss + hdr_len));
12151 
12152  base_flags = (TXD_FLAG_CPU_PRE_DMA |
12154 
12155  if (tg3_flag(tp, HW_TSO_1) ||
12156  tg3_flag(tp, HW_TSO_2) ||
12157  tg3_flag(tp, HW_TSO_3)) {
12158  struct tcphdr *th;
12159  val = ETH_HLEN + TG3_TSO_IP_HDR_LEN;
12160  th = (struct tcphdr *)&tx_data[val];
12161  th->check = 0;
12162  } else
12163  base_flags |= TXD_FLAG_TCPUDP_CSUM;
12164 
12165  if (tg3_flag(tp, HW_TSO_3)) {
12166  mss |= (hdr_len & 0xc) << 12;
12167  if (hdr_len & 0x10)
12168  base_flags |= 0x00000010;
12169  base_flags |= (hdr_len & 0x3e0) << 5;
12170  } else if (tg3_flag(tp, HW_TSO_2))
12171  mss |= hdr_len << 9;
12172  else if (tg3_flag(tp, HW_TSO_1) ||
12174  mss |= (TG3_TSO_TCP_OPT_LEN << 9);
12175  } else {
12176  base_flags |= (TG3_TSO_TCP_OPT_LEN << 10);
12177  }
12178 
12179  data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header);
12180  } else {
12181  num_pkts = 1;
12182  data_off = ETH_HLEN;
12183 
12184  if (tg3_flag(tp, USE_JUMBO_BDFLAG) &&
12185  tx_len > VLAN_ETH_FRAME_LEN)
12186  base_flags |= TXD_FLAG_JMB_PKT;
12187  }
12188 
12189  for (i = data_off; i < tx_len; i++)
12190  tx_data[i] = (u8) (i & 0xff);
12191 
12192  map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE);
12193  if (pci_dma_mapping_error(tp->pdev, map)) {
12194  dev_kfree_skb(skb);
12195  return -EIO;
12196  }
12197 
12198  val = tnapi->tx_prod;
12199  tnapi->tx_buffers[val].skb = skb;
12200  dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map);
12201 
12203  rnapi->coal_now);
12204 
12205  udelay(10);
12206 
12207  rx_start_idx = rnapi->hw_status->idx[0].rx_producer;
12208 
12209  budget = tg3_tx_avail(tnapi);
12210  if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len,
12211  base_flags | TXD_FLAG_END, mss, 0)) {
12212  tnapi->tx_buffers[val].skb = NULL;
12213  dev_kfree_skb(skb);
12214  return -EIO;
12215  }
12216 
12217  tnapi->tx_prod++;
12218 
12219  /* Sync BD data before updating mailbox */
12220  wmb();
12221 
12222  tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod);
12223  tr32_mailbox(tnapi->prodmbox);
12224 
12225  udelay(10);
12226 
12227  /* 350 usec to allow enough time on some 10/100 Mbps devices. */
12228  for (i = 0; i < 35; i++) {
12230  coal_now);
12231 
12232  udelay(10);
12233 
12234  tx_idx = tnapi->hw_status->idx[0].tx_consumer;
12235  rx_idx = rnapi->hw_status->idx[0].rx_producer;
12236  if ((tx_idx == tnapi->tx_prod) &&
12237  (rx_idx == (rx_start_idx + num_pkts)))
12238  break;
12239  }
12240 
12241  tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1);
12242  dev_kfree_skb(skb);
12243 
12244  if (tx_idx != tnapi->tx_prod)
12245  goto out;
12246 
12247  if (rx_idx != rx_start_idx + num_pkts)
12248  goto out;
12249 
12250  val = data_off;
12251  while (rx_idx != rx_start_idx) {
12252  desc = &rnapi->rx_rcb[rx_start_idx++];
12253  desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK;
12254  opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK;
12255 
12256  if ((desc->err_vlan & RXD_ERR_MASK) != 0 &&
12258  goto out;
12259 
12260  rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT)
12261  - ETH_FCS_LEN;
12262 
12263  if (!tso_loopback) {
12264  if (rx_len != tx_len)
12265  goto out;
12266 
12267  if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) {
12268  if (opaque_key != RXD_OPAQUE_RING_STD)
12269  goto out;
12270  } else {
12271  if (opaque_key != RXD_OPAQUE_RING_JUMBO)
12272  goto out;
12273  }
12274  } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) &&
12275  (desc->ip_tcp_csum & RXD_TCPCSUM_MASK)
12276  >> RXD_TCPCSUM_SHIFT != 0xffff) {
12277  goto out;
12278  }
12279 
12280  if (opaque_key == RXD_OPAQUE_RING_STD) {
12281  rx_data = tpr->rx_std_buffers[desc_idx].data;
12282  map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx],
12283  mapping);
12284  } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) {
12285  rx_data = tpr->rx_jmb_buffers[desc_idx].data;
12286  map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx],
12287  mapping);
12288  } else
12289  goto out;
12290 
12291  pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len,
12293 
12294  rx_data += TG3_RX_OFFSET(tp);
12295  for (i = data_off; i < rx_len; i++, val++) {
12296  if (*(rx_data + i) != (u8) (val & 0xff))
12297  goto out;
12298  }
12299  }
12300 
12301  err = 0;
12302 
12303  /* tg3_free_rings will unmap and free the rx_data */
12304 out:
12305  return err;
12306 }
12307 
12308 #define TG3_STD_LOOPBACK_FAILED 1
12309 #define TG3_JMB_LOOPBACK_FAILED 2
12310 #define TG3_TSO_LOOPBACK_FAILED 4
12311 #define TG3_LOOPBACK_FAILED \
12312  (TG3_STD_LOOPBACK_FAILED | \
12313  TG3_JMB_LOOPBACK_FAILED | \
12314  TG3_TSO_LOOPBACK_FAILED)
12315 
12316 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk)
12317 {
12318  int err = -EIO;
12319  u32 eee_cap;
12320  u32 jmb_pkt_sz = 9000;
12321 
12322  if (tp->dma_limit)
12323  jmb_pkt_sz = tp->dma_limit - ETH_HLEN;
12324 
12325  eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP;
12326  tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP;
12327 
12328  if (!netif_running(tp->dev)) {
12329  data[0] = TG3_LOOPBACK_FAILED;
12330  data[1] = TG3_LOOPBACK_FAILED;
12331  if (do_extlpbk)
12332  data[2] = TG3_LOOPBACK_FAILED;
12333  goto done;
12334  }
12335 
12336  err = tg3_reset_hw(tp, 1);
12337  if (err) {
12338  data[0] = TG3_LOOPBACK_FAILED;
12339  data[1] = TG3_LOOPBACK_FAILED;
12340  if (do_extlpbk)
12341  data[2] = TG3_LOOPBACK_FAILED;
12342  goto done;
12343  }
12344 
12345  if (tg3_flag(tp, ENABLE_RSS)) {
12346  int i;
12347 
12348  /* Reroute all rx packets to the 1st queue */
12349  for (i = MAC_RSS_INDIR_TBL_0;
12351  tw32(i, 0x0);
12352  }
12353 
12354  /* HW errata - mac loopback fails in some cases on 5780.
12355  * Normal traffic and PHY loopback are not affected by
12356  * errata. Also, the MAC loopback test is deprecated for
12357  * all newer ASIC revisions.
12358  */
12360  !tg3_flag(tp, CPMU_PRESENT)) {
12361  tg3_mac_loopback(tp, true);
12362 
12363  if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12364  data[0] |= TG3_STD_LOOPBACK_FAILED;
12365 
12366  if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12367  tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12368  data[0] |= TG3_JMB_LOOPBACK_FAILED;
12369 
12370  tg3_mac_loopback(tp, false);
12371  }
12372 
12373  if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) &&
12374  !tg3_flag(tp, USE_PHYLIB)) {
12375  int i;
12376 
12377  tg3_phy_lpbk_set(tp, 0, false);
12378 
12379  /* Wait for link */
12380  for (i = 0; i < 100; i++) {
12382  break;
12383  mdelay(1);
12384  }
12385 
12386  if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12387  data[1] |= TG3_STD_LOOPBACK_FAILED;
12388  if (tg3_flag(tp, TSO_CAPABLE) &&
12389  tg3_run_loopback(tp, ETH_FRAME_LEN, true))
12390  data[1] |= TG3_TSO_LOOPBACK_FAILED;
12391  if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12392  tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12393  data[1] |= TG3_JMB_LOOPBACK_FAILED;
12394 
12395  if (do_extlpbk) {
12396  tg3_phy_lpbk_set(tp, 0, true);
12397 
12398  /* All link indications report up, but the hardware
12399  * isn't really ready for about 20 msec. Double it
12400  * to be sure.
12401  */
12402  mdelay(40);
12403 
12404  if (tg3_run_loopback(tp, ETH_FRAME_LEN, false))
12405  data[2] |= TG3_STD_LOOPBACK_FAILED;
12406  if (tg3_flag(tp, TSO_CAPABLE) &&
12407  tg3_run_loopback(tp, ETH_FRAME_LEN, true))
12408  data[2] |= TG3_TSO_LOOPBACK_FAILED;
12409  if (tg3_flag(tp, JUMBO_RING_ENABLE) &&
12410  tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false))
12411  data[2] |= TG3_JMB_LOOPBACK_FAILED;
12412  }
12413 
12414  /* Re-enable gphy autopowerdown. */
12415  if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD)
12416  tg3_phy_toggle_apd(tp, true);
12417  }
12418 
12419  err = (data[0] | data[1] | data[2]) ? -EIO : 0;
12420 
12421 done:
12422  tp->phy_flags |= eee_cap;
12423 
12424  return err;
12425 }
12426 
12427 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
12428  u64 *data)
12429 {
12430  struct tg3 *tp = netdev_priv(dev);
12431  bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
12432 
12433  if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
12434  tg3_power_up(tp)) {
12435  etest->flags |= ETH_TEST_FL_FAILED;
12436  memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
12437  return;
12438  }
12439 
12440  memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
12441 
12442  if (tg3_test_nvram(tp) != 0) {
12443  etest->flags |= ETH_TEST_FL_FAILED;
12444  data[0] = 1;
12445  }
12446  if (!doextlpbk && tg3_test_link(tp)) {
12447  etest->flags |= ETH_TEST_FL_FAILED;
12448  data[1] = 1;
12449  }
12450  if (etest->flags & ETH_TEST_FL_OFFLINE) {
12451  int err, err2 = 0, irq_sync = 0;
12452 
12453  if (netif_running(dev)) {
12454  tg3_phy_stop(tp);
12455  tg3_netif_stop(tp);
12456  irq_sync = 1;
12457  }
12458 
12459  tg3_full_lock(tp, irq_sync);
12460 
12461  tg3_halt(tp, RESET_KIND_SUSPEND, 1);
12462  err = tg3_nvram_lock(tp);
12463  tg3_halt_cpu(tp, RX_CPU_BASE);
12464  if (!tg3_flag(tp, 5705_PLUS))
12465  tg3_halt_cpu(tp, TX_CPU_BASE);
12466  if (!err)
12467  tg3_nvram_unlock(tp);
12468 
12469  if (tp->phy_flags & TG3_PHYFLG_MII_SERDES)
12470  tg3_phy_reset(tp);
12471 
12472  if (tg3_test_registers(tp) != 0) {
12473  etest->flags |= ETH_TEST_FL_FAILED;
12474  data[2] = 1;
12475  }
12476 
12477  if (tg3_test_memory(tp) != 0) {
12478  etest->flags |= ETH_TEST_FL_FAILED;
12479  data[3] = 1;
12480  }
12481 
12482  if (doextlpbk)
12484 
12485  if (tg3_test_loopback(tp, &data[4], doextlpbk))
12486  etest->flags |= ETH_TEST_FL_FAILED;
12487 
12488  tg3_full_unlock(tp);
12489 
12490  if (tg3_test_interrupt(tp) != 0) {
12491  etest->flags |= ETH_TEST_FL_FAILED;
12492  data[7] = 1;
12493  }
12494 
12495  tg3_full_lock(tp, 0);
12496 
12497  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12498  if (netif_running(dev)) {
12499  tg3_flag_set(tp, INIT_COMPLETE);
12500  err2 = tg3_restart_hw(tp, 1);
12501  if (!err2)
12502  tg3_netif_start(tp);
12503  }
12504 
12505  tg3_full_unlock(tp);
12506 
12507  if (irq_sync && !err2)
12508  tg3_phy_start(tp);
12509  }
12511  tg3_power_down(tp);
12512 
12513 }
12514 
12515 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
12516 {
12517  struct mii_ioctl_data *data = if_mii(ifr);
12518  struct tg3 *tp = netdev_priv(dev);
12519  int err;
12520 
12521  if (tg3_flag(tp, USE_PHYLIB)) {
12522  struct phy_device *phydev;
12523  if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
12524  return -EAGAIN;
12525  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
12526  return phy_mii_ioctl(phydev, ifr, cmd);
12527  }
12528 
12529  switch (cmd) {
12530  case SIOCGMIIPHY:
12531  data->phy_id = tp->phy_addr;
12532 
12533  /* fallthru */
12534  case SIOCGMIIREG: {
12535  u32 mii_regval;
12536 
12537  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12538  break; /* We have no PHY */
12539 
12540  if (!netif_running(dev))
12541  return -EAGAIN;
12542 
12543  spin_lock_bh(&tp->lock);
12544  err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
12545  spin_unlock_bh(&tp->lock);
12546 
12547  data->val_out = mii_regval;
12548 
12549  return err;
12550  }
12551 
12552  case SIOCSMIIREG:
12553  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
12554  break; /* We have no PHY */
12555 
12556  if (!netif_running(dev))
12557  return -EAGAIN;
12558 
12559  spin_lock_bh(&tp->lock);
12560  err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
12561  spin_unlock_bh(&tp->lock);
12562 
12563  return err;
12564 
12565  default:
12566  /* do nothing */
12567  break;
12568  }
12569  return -EOPNOTSUPP;
12570 }
12571 
12572 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12573 {
12574  struct tg3 *tp = netdev_priv(dev);
12575 
12576  memcpy(ec, &tp->coal, sizeof(*ec));
12577  return 0;
12578 }
12579 
12580 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
12581 {
12582  struct tg3 *tp = netdev_priv(dev);
12583  u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0;
12584  u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0;
12585 
12586  if (!tg3_flag(tp, 5705_PLUS)) {
12587  max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT;
12588  max_txcoal_tick_int = MAX_TXCOAL_TICK_INT;
12589  max_stat_coal_ticks = MAX_STAT_COAL_TICKS;
12590  min_stat_coal_ticks = MIN_STAT_COAL_TICKS;
12591  }
12592 
12593  if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||
12597  (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||
12598  (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) ||
12601  (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||
12602  (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))
12603  return -EINVAL;
12604 
12605  /* No rx interrupts will be generated if both are zero */
12606  if ((ec->rx_coalesce_usecs == 0) &&
12607  (ec->rx_max_coalesced_frames == 0))
12608  return -EINVAL;
12609 
12610  /* No tx interrupts will be generated if both are zero */
12611  if ((ec->tx_coalesce_usecs == 0) &&
12612  (ec->tx_max_coalesced_frames == 0))
12613  return -EINVAL;
12614 
12615  /* Only copy relevant parameters, ignore all others. */
12616  tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs;
12617  tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs;
12618  tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames;
12619  tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
12620  tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
12621  tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
12622  tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
12623  tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
12624  tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs;
12625 
12626  if (netif_running(dev)) {
12627  tg3_full_lock(tp, 0);
12628  __tg3_set_coalesce(tp, &tp->coal);
12629  tg3_full_unlock(tp);
12630  }
12631  return 0;
12632 }
12633 
12634 static const struct ethtool_ops tg3_ethtool_ops = {
12635  .get_settings = tg3_get_settings,
12636  .set_settings = tg3_set_settings,
12637  .get_drvinfo = tg3_get_drvinfo,
12638  .get_regs_len = tg3_get_regs_len,
12639  .get_regs = tg3_get_regs,
12640  .get_wol = tg3_get_wol,
12641  .set_wol = tg3_set_wol,
12642  .get_msglevel = tg3_get_msglevel,
12643  .set_msglevel = tg3_set_msglevel,
12644  .nway_reset = tg3_nway_reset,
12645  .get_link = ethtool_op_get_link,
12646  .get_eeprom_len = tg3_get_eeprom_len,
12647  .get_eeprom = tg3_get_eeprom,
12648  .set_eeprom = tg3_set_eeprom,
12649  .get_ringparam = tg3_get_ringparam,
12650  .set_ringparam = tg3_set_ringparam,
12651  .get_pauseparam = tg3_get_pauseparam,
12652  .set_pauseparam = tg3_set_pauseparam,
12653  .self_test = tg3_self_test,
12654  .get_strings = tg3_get_strings,
12655  .set_phys_id = tg3_set_phys_id,
12656  .get_ethtool_stats = tg3_get_ethtool_stats,
12657  .get_coalesce = tg3_get_coalesce,
12658  .set_coalesce = tg3_set_coalesce,
12659  .get_sset_count = tg3_get_sset_count,
12660  .get_rxnfc = tg3_get_rxnfc,
12661  .get_rxfh_indir_size = tg3_get_rxfh_indir_size,
12662  .get_rxfh_indir = tg3_get_rxfh_indir,
12663  .set_rxfh_indir = tg3_set_rxfh_indir,
12664  .get_channels = tg3_get_channels,
12665  .set_channels = tg3_set_channels,
12666  .get_ts_info = ethtool_op_get_ts_info,
12667 };
12668 
12669 static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
12670  struct rtnl_link_stats64 *stats)
12671 {
12672  struct tg3 *tp = netdev_priv(dev);
12673 
12674  spin_lock_bh(&tp->lock);
12675  if (!tp->hw_stats) {
12676  spin_unlock_bh(&tp->lock);
12677  return &tp->net_stats_prev;
12678  }
12679 
12680  tg3_get_nstats(tp, stats);
12681  spin_unlock_bh(&tp->lock);
12682 
12683  return stats;
12684 }
12685 
12686 static void tg3_set_rx_mode(struct net_device *dev)
12687 {
12688  struct tg3 *tp = netdev_priv(dev);
12689 
12690  if (!netif_running(dev))
12691  return;
12692 
12693  tg3_full_lock(tp, 0);
12694  __tg3_set_rx_mode(dev);
12695  tg3_full_unlock(tp);
12696 }
12697 
12698 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
12699  int new_mtu)
12700 {
12701  dev->mtu = new_mtu;
12702 
12703  if (new_mtu > ETH_DATA_LEN) {
12704  if (tg3_flag(tp, 5780_CLASS)) {
12706  tg3_flag_clear(tp, TSO_CAPABLE);
12707  } else {
12708  tg3_flag_set(tp, JUMBO_RING_ENABLE);
12709  }
12710  } else {
12711  if (tg3_flag(tp, 5780_CLASS)) {
12712  tg3_flag_set(tp, TSO_CAPABLE);
12714  }
12715  tg3_flag_clear(tp, JUMBO_RING_ENABLE);
12716  }
12717 }
12718 
12719 static int tg3_change_mtu(struct net_device *dev, int new_mtu)
12720 {
12721  struct tg3 *tp = netdev_priv(dev);
12722  int err, reset_phy = 0;
12723 
12724  if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp))
12725  return -EINVAL;
12726 
12727  if (!netif_running(dev)) {
12728  /* We'll just catch it later when the
12729  * device is up'd.
12730  */
12731  tg3_set_mtu(dev, tp, new_mtu);
12732  return 0;
12733  }
12734 
12735  tg3_phy_stop(tp);
12736 
12737  tg3_netif_stop(tp);
12738 
12739  tg3_full_lock(tp, 1);
12740 
12741  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
12742 
12743  tg3_set_mtu(dev, tp, new_mtu);
12744 
12745  /* Reset PHY, otherwise the read DMA engine will be in a mode that
12746  * breaks all requests to 256 bytes.
12747  */
12749  reset_phy = 1;
12750 
12751  err = tg3_restart_hw(tp, reset_phy);
12752 
12753  if (!err)
12754  tg3_netif_start(tp);
12755 
12756  tg3_full_unlock(tp);
12757 
12758  if (!err)
12759  tg3_phy_start(tp);
12760 
12761  return err;
12762 }
12763 
12764 static const struct net_device_ops tg3_netdev_ops = {
12765  .ndo_open = tg3_open,
12766  .ndo_stop = tg3_close,
12767  .ndo_start_xmit = tg3_start_xmit,
12768  .ndo_get_stats64 = tg3_get_stats64,
12769  .ndo_validate_addr = eth_validate_addr,
12770  .ndo_set_rx_mode = tg3_set_rx_mode,
12771  .ndo_set_mac_address = tg3_set_mac_addr,
12772  .ndo_do_ioctl = tg3_ioctl,
12773  .ndo_tx_timeout = tg3_tx_timeout,
12774  .ndo_change_mtu = tg3_change_mtu,
12775  .ndo_fix_features = tg3_fix_features,
12776  .ndo_set_features = tg3_set_features,
12777 #ifdef CONFIG_NET_POLL_CONTROLLER
12778  .ndo_poll_controller = tg3_poll_controller,
12779 #endif
12780 };
12781 
12782 static void __devinit tg3_get_eeprom_size(struct tg3 *tp)
12783 {
12784  u32 cursize, val, magic;
12785 
12787 
12788  if (tg3_nvram_read(tp, 0, &magic) != 0)
12789  return;
12790 
12791  if ((magic != TG3_EEPROM_MAGIC) &&
12794  return;
12795 
12796  /*
12797  * Size the chip by reading offsets at increasing powers of two.
12798  * When we encounter our validation signature, we know the addressing
12799  * has wrapped around, and thus have our chip size.
12800  */
12801  cursize = 0x10;
12802 
12803  while (cursize < tp->nvram_size) {
12804  if (tg3_nvram_read(tp, cursize, &val) != 0)
12805  return;
12806 
12807  if (val == magic)
12808  break;
12809 
12810  cursize <<= 1;
12811  }
12812 
12813  tp->nvram_size = cursize;
12814 }
12815 
12816 static void __devinit tg3_get_nvram_size(struct tg3 *tp)
12817 {
12818  u32 val;
12819 
12820  if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0)
12821  return;
12822 
12823  /* Selfboot format */
12824  if (val != TG3_EEPROM_MAGIC) {
12825  tg3_get_eeprom_size(tp);
12826  return;
12827  }
12828 
12829  if (tg3_nvram_read(tp, 0xf0, &val) == 0) {
12830  if (val != 0) {
12831  /* This is confusing. We want to operate on the
12832  * 16-bit value at offset 0xf2. The tg3_nvram_read()
12833  * call will read from NVRAM and byteswap the data
12834  * according to the byteswapping settings for all
12835  * other register accesses. This ensures the data we
12836  * want will always reside in the lower 16-bits.
12837  * However, the data in NVRAM is in LE format, which
12838  * means the data from the NVRAM read will always be
12839  * opposite the endianness of the CPU. The 16-bit
12840  * byteswap then brings the data to CPU endianness.
12841  */
12842  tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024;
12843  return;
12844  }
12845  }
12847 }
12848 
12849 static void __devinit tg3_get_nvram_info(struct tg3 *tp)
12850 {
12851  u32 nvcfg1;
12852 
12853  nvcfg1 = tr32(NVRAM_CFG1);
12854  if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) {
12855  tg3_flag_set(tp, FLASH);
12856  } else {
12857  nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12858  tw32(NVRAM_CFG1, nvcfg1);
12859  }
12860 
12862  tg3_flag(tp, 5780_CLASS)) {
12863  switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) {
12867  tg3_flag_set(tp, NVRAM_BUFFERED);
12868  break;
12872  break;
12876  tg3_flag_set(tp, NVRAM_BUFFERED);
12877  break;
12878  case FLASH_VENDOR_ST:
12879  tp->nvram_jedecnum = JEDEC_ST;
12881  tg3_flag_set(tp, NVRAM_BUFFERED);
12882  break;
12883  case FLASH_VENDOR_SAIFUN:
12886  break;
12889  tp->nvram_jedecnum = JEDEC_SST;
12891  break;
12892  }
12893  } else {
12896  tg3_flag_set(tp, NVRAM_BUFFERED);
12897  }
12898 }
12899 
12900 static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1)
12901 {
12902  switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) {
12904  tp->nvram_pagesize = 256;
12905  break;
12907  tp->nvram_pagesize = 512;
12908  break;
12910  tp->nvram_pagesize = 1024;
12911  break;
12913  tp->nvram_pagesize = 2048;
12914  break;
12916  tp->nvram_pagesize = 4096;
12917  break;
12919  tp->nvram_pagesize = 264;
12920  break;
12922  tp->nvram_pagesize = 528;
12923  break;
12924  }
12925 }
12926 
12927 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp)
12928 {
12929  u32 nvcfg1;
12930 
12931  nvcfg1 = tr32(NVRAM_CFG1);
12932 
12933  /* NVRAM protection for TPM */
12934  if (nvcfg1 & (1 << 27))
12935  tg3_flag_set(tp, PROTECTED_NVRAM);
12936 
12937  switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
12941  tg3_flag_set(tp, NVRAM_BUFFERED);
12942  break;
12945  tg3_flag_set(tp, NVRAM_BUFFERED);
12946  tg3_flag_set(tp, FLASH);
12947  break;
12951  tp->nvram_jedecnum = JEDEC_ST;
12952  tg3_flag_set(tp, NVRAM_BUFFERED);
12953  tg3_flag_set(tp, FLASH);
12954  break;
12955  }
12956 
12957  if (tg3_flag(tp, FLASH)) {
12958  tg3_nvram_get_pagesize(tp, nvcfg1);
12959  } else {
12960  /* For eeprom, set pagesize to maximum eeprom size */
12962 
12963  nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
12964  tw32(NVRAM_CFG1, nvcfg1);
12965  }
12966 }
12967 
12968 static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp)
12969 {
12970  u32 nvcfg1, protect = 0;
12971 
12972  nvcfg1 = tr32(NVRAM_CFG1);
12973 
12974  /* NVRAM protection for TPM */
12975  if (nvcfg1 & (1 << 27)) {
12976  tg3_flag_set(tp, PROTECTED_NVRAM);
12977  protect = 1;
12978  }
12979 
12980  nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
12981  switch (nvcfg1) {
12987  tg3_flag_set(tp, NVRAM_BUFFERED);
12988  tg3_flag_set(tp, FLASH);
12989  tp->nvram_pagesize = 264;
12990  if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 ||
12992  tp->nvram_size = (protect ? 0x3e200 :
12994  else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2)
12995  tp->nvram_size = (protect ? 0x1f200 :
12997  else
12998  tp->nvram_size = (protect ? 0x1f200 :
13000  break;
13004  tp->nvram_jedecnum = JEDEC_ST;
13005  tg3_flag_set(tp, NVRAM_BUFFERED);
13006  tg3_flag_set(tp, FLASH);
13007  tp->nvram_pagesize = 256;
13008  if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10)
13009  tp->nvram_size = (protect ?
13012  else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20)
13013  tp->nvram_size = (protect ?
13016  else
13017  tp->nvram_size = (protect ?
13020  break;
13021  }
13022 }
13023 
13024 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp)
13025 {
13026  u32 nvcfg1;
13027 
13028  nvcfg1 = tr32(NVRAM_CFG1);
13029 
13030  switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13036  tg3_flag_set(tp, NVRAM_BUFFERED);
13038 
13039  nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13040  tw32(NVRAM_CFG1, nvcfg1);
13041  break;
13047  tg3_flag_set(tp, NVRAM_BUFFERED);
13048  tg3_flag_set(tp, FLASH);
13049  tp->nvram_pagesize = 264;
13050  break;
13054  tp->nvram_jedecnum = JEDEC_ST;
13055  tg3_flag_set(tp, NVRAM_BUFFERED);
13056  tg3_flag_set(tp, FLASH);
13057  tp->nvram_pagesize = 256;
13058  break;
13059  }
13060 }
13061 
13062 static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp)
13063 {
13064  u32 nvcfg1, protect = 0;
13065 
13066  nvcfg1 = tr32(NVRAM_CFG1);
13067 
13068  /* NVRAM protection for TPM */
13069  if (nvcfg1 & (1 << 27)) {
13070  tg3_flag_set(tp, PROTECTED_NVRAM);
13071  protect = 1;
13072  }
13073 
13074  nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK;
13075  switch (nvcfg1) {
13085  tg3_flag_set(tp, NVRAM_BUFFERED);
13086  tg3_flag_set(tp, FLASH);
13087  tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13088  tp->nvram_pagesize = 256;
13089  break;
13098  tp->nvram_jedecnum = JEDEC_ST;
13099  tg3_flag_set(tp, NVRAM_BUFFERED);
13100  tg3_flag_set(tp, FLASH);
13101  tp->nvram_pagesize = 256;
13102  break;
13103  }
13104 
13105  if (protect) {
13107  } else {
13108  switch (nvcfg1) {
13114  break;
13120  break;
13126  break;
13132  break;
13133  }
13134  }
13135 }
13136 
13137 static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp)
13138 {
13140  tg3_flag_set(tp, NVRAM_BUFFERED);
13142 }
13143 
13144 static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp)
13145 {
13146  u32 nvcfg1;
13147 
13148  nvcfg1 = tr32(NVRAM_CFG1);
13149 
13150  switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13154  tg3_flag_set(tp, NVRAM_BUFFERED);
13156 
13157  nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13158  tw32(NVRAM_CFG1, nvcfg1);
13159  return;
13168  tg3_flag_set(tp, NVRAM_BUFFERED);
13169  tg3_flag_set(tp, FLASH);
13170 
13171  switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13176  break;
13180  break;
13184  break;
13185  }
13186  break;
13190  tp->nvram_jedecnum = JEDEC_ST;
13191  tg3_flag_set(tp, NVRAM_BUFFERED);
13192  tg3_flag_set(tp, FLASH);
13193 
13194  switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13197  break;
13200  break;
13203  break;
13204  }
13205  break;
13206  default:
13207  tg3_flag_set(tp, NO_NVRAM);
13208  return;
13209  }
13210 
13211  tg3_nvram_get_pagesize(tp, nvcfg1);
13212  if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13213  tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13214 }
13215 
13216 
13217 static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp)
13218 {
13219  u32 nvcfg1;
13220 
13221  nvcfg1 = tr32(NVRAM_CFG1);
13222 
13223  switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13227  tg3_flag_set(tp, NVRAM_BUFFERED);
13229 
13230  nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13231  tw32(NVRAM_CFG1, nvcfg1);
13232  return;
13241  tg3_flag_set(tp, NVRAM_BUFFERED);
13242  tg3_flag_set(tp, FLASH);
13243 
13244  switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13246  /* Detect size with tg3_nvram_get_size() */
13247  break;
13251  break;
13252  default:
13254  break;
13255  }
13256  break;
13267  tp->nvram_jedecnum = JEDEC_ST;
13268  tg3_flag_set(tp, NVRAM_BUFFERED);
13269  tg3_flag_set(tp, FLASH);
13270 
13271  switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) {
13274  /* Detect size with tg3_nvram_get_size() */
13275  break;
13279  break;
13280  default:
13282  break;
13283  }
13284  break;
13285  default:
13286  tg3_flag_set(tp, NO_NVRAM);
13287  return;
13288  }
13289 
13290  tg3_nvram_get_pagesize(tp, nvcfg1);
13291  if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13292  tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13293 }
13294 
13295 static void __devinit tg3_get_5720_nvram_info(struct tg3 *tp)
13296 {
13297  u32 nvcfg1, nvmpinstrp;
13298 
13299  nvcfg1 = tr32(NVRAM_CFG1);
13300  nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK;
13301 
13302  switch (nvmpinstrp) {
13303  case FLASH_5720_EEPROM_HD:
13304  case FLASH_5720_EEPROM_LD:
13306  tg3_flag_set(tp, NVRAM_BUFFERED);
13307 
13308  nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS;
13309  tw32(NVRAM_CFG1, nvcfg1);
13310  if (nvmpinstrp == FLASH_5720_EEPROM_HD)
13312  else
13314  return;
13328  tg3_flag_set(tp, NVRAM_BUFFERED);
13329  tg3_flag_set(tp, FLASH);
13330 
13331  switch (nvmpinstrp) {
13336  break;
13341  break;
13345  break;
13346  default:
13348  break;
13349  }
13350  break;
13369  tp->nvram_jedecnum = JEDEC_ST;
13370  tg3_flag_set(tp, NVRAM_BUFFERED);
13371  tg3_flag_set(tp, FLASH);
13372 
13373  switch (nvmpinstrp) {
13379  break;
13385  break;
13391  break;
13392  default:
13394  break;
13395  }
13396  break;
13397  default:
13398  tg3_flag_set(tp, NO_NVRAM);
13399  return;
13400  }
13401 
13402  tg3_nvram_get_pagesize(tp, nvcfg1);
13403  if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528)
13404  tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS);
13405 }
13406 
13407 /* Chips other than 5700/5701 use the NVRAM for fetching info. */
13408 static void __devinit tg3_nvram_init(struct tg3 *tp)
13409 {
13414 
13415  msleep(1);
13416 
13417  /* Enable seeprom accesses. */
13420  udelay(100);
13421 
13424  tg3_flag_set(tp, NVRAM);
13425 
13426  if (tg3_nvram_lock(tp)) {
13427  netdev_warn(tp->dev,
13428  "Cannot get nvram lock, %s failed\n",
13429  __func__);
13430  return;
13431  }
13432  tg3_enable_nvram_access(tp);
13433 
13434  tp->nvram_size = 0;
13435 
13437  tg3_get_5752_nvram_info(tp);
13438  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755)
13439  tg3_get_5755_nvram_info(tp);
13440  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 ||
13443  tg3_get_5787_nvram_info(tp);
13444  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761)
13445  tg3_get_5761_nvram_info(tp);
13446  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
13447  tg3_get_5906_nvram_info(tp);
13448  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 ||
13449  tg3_flag(tp, 57765_CLASS))
13450  tg3_get_57780_nvram_info(tp);
13451  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
13453  tg3_get_5717_nvram_info(tp);
13454  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720)
13455  tg3_get_5720_nvram_info(tp);
13456  else
13457  tg3_get_nvram_info(tp);
13458 
13459  if (tp->nvram_size == 0)
13460  tg3_get_nvram_size(tp);
13461 
13462  tg3_disable_nvram_access(tp);
13463  tg3_nvram_unlock(tp);
13464 
13465  } else {
13466  tg3_flag_clear(tp, NVRAM);
13467  tg3_flag_clear(tp, NVRAM_BUFFERED);
13468 
13469  tg3_get_eeprom_size(tp);
13470  }
13471 }
13472 
13475  u32 phy_id;
13476 };
13477 
13478 static struct subsys_tbl_ent subsys_id_to_phy_id[] __devinitdata = {
13479  /* Broadcom boards. */
13502 
13503  /* 3com boards. */
13514 
13515  /* DELL boards. */
13524 
13525  /* Compaq boards. */
13536 
13537  /* IBM boards. */
13540 };
13541 
13542 static struct subsys_tbl_ent * __devinit tg3_lookup_by_subsys(struct tg3 *tp)
13543 {
13544  int i;
13545 
13546  for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) {
13547  if ((subsys_id_to_phy_id[i].subsys_vendor ==
13548  tp->pdev->subsystem_vendor) &&
13549  (subsys_id_to_phy_id[i].subsys_devid ==
13550  tp->pdev->subsystem_device))
13551  return &subsys_id_to_phy_id[i];
13552  }
13553  return NULL;
13554 }
13555 
13556 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
13557 {
13558  u32 val;
13559 
13560  tp->phy_id = TG3_PHY_ID_INVALID;
13562 
13563  /* Assume an onboard device and WOL capable by default. */
13564  tg3_flag_set(tp, EEPROM_WRITE_PROT);
13565  tg3_flag_set(tp, WOL_CAP);
13566 
13569  tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13570  tg3_flag_set(tp, IS_NIC);
13571  }
13572  val = tr32(VCPU_CFGSHDW);
13573  if (val & VCPU_CFGSHDW_ASPM_DBNC)
13574  tg3_flag_set(tp, ASPM_WORKAROUND);
13575  if ((val & VCPU_CFGSHDW_WOL_ENABLE) &&
13576  (val & VCPU_CFGSHDW_WOL_MAGPKT)) {
13577  tg3_flag_set(tp, WOL_ENABLE);
13578  device_set_wakeup_enable(&tp->pdev->dev, true);
13579  }
13580  goto done;
13581  }
13582 
13583  tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val);
13584  if (val == NIC_SRAM_DATA_SIG_MAGIC) {
13585  u32 nic_cfg, led_cfg;
13586  u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id;
13587  int eeprom_phy_serdes = 0;
13588 
13589  tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg);
13590  tp->nic_sram_data_cfg = nic_cfg;
13591 
13592  tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver);
13593  ver >>= NIC_SRAM_DATA_VER_SHIFT;
13597  (ver > 0) && (ver < 0x100))
13598  tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2);
13599 
13601  tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4);
13602 
13603  if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) ==
13605  eeprom_phy_serdes = 1;
13606 
13607  tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id);
13608  if (nic_phy_id != 0) {
13609  u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK;
13610  u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK;
13611 
13612  eeprom_phy_id = (id1 >> 16) << 10;
13613  eeprom_phy_id |= (id2 & 0xfc00) << 16;
13614  eeprom_phy_id |= (id2 & 0x03ff) << 0;
13615  } else
13616  eeprom_phy_id = 0;
13617 
13618  tp->phy_id = eeprom_phy_id;
13619  if (eeprom_phy_serdes) {
13620  if (!tg3_flag(tp, 5705_PLUS))
13622  else
13624  }
13625 
13626  if (tg3_flag(tp, 5750_PLUS))
13627  led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK |
13629  else
13630  led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK;
13631 
13632  switch (led_cfg) {
13633  default:
13636  break;
13637 
13640  break;
13641 
13644 
13645  /* Default to PHY_1_MODE if 0 (MAC_MODE) is
13646  * read on some older 5700/5701 bootcode.
13647  */
13648  if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
13649  ASIC_REV_5700 ||
13651  ASIC_REV_5701)
13653 
13654  break;
13655 
13656  case SHASTA_EXT_LED_SHARED:
13660  tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13662  break;
13663 
13664  case SHASTA_EXT_LED_MAC:
13666  break;
13667 
13668  case SHASTA_EXT_LED_COMBO:
13671  tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 |
13673  break;
13674 
13675  }
13676 
13679  tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
13681 
13684 
13685  if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) {
13686  tg3_flag_set(tp, EEPROM_WRITE_PROT);
13687  if ((tp->pdev->subsystem_vendor ==
13689  (tp->pdev->subsystem_device == 0x205a ||
13690  tp->pdev->subsystem_device == 0x2063))
13691  tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13692  } else {
13693  tg3_flag_clear(tp, EEPROM_WRITE_PROT);
13694  tg3_flag_set(tp, IS_NIC);
13695  }
13696 
13697  if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) {
13698  tg3_flag_set(tp, ENABLE_ASF);
13699  if (tg3_flag(tp, 5750_PLUS))
13700  tg3_flag_set(tp, ASF_NEW_HANDSHAKE);
13701  }
13702 
13703  if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) &&
13704  tg3_flag(tp, 5750_PLUS))
13705  tg3_flag_set(tp, ENABLE_APE);
13706 
13707  if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES &&
13708  !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL))
13709  tg3_flag_clear(tp, WOL_CAP);
13710 
13711  if (tg3_flag(tp, WOL_CAP) &&
13712  (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) {
13713  tg3_flag_set(tp, WOL_ENABLE);
13714  device_set_wakeup_enable(&tp->pdev->dev, true);
13715  }
13716 
13717  if (cfg2 & (1 << 17))
13719 
13720  /* serdes signal pre-emphasis in register 0x590 set by */
13721  /* bootcode if bit 18 is set */
13722  if (cfg2 & (1 << 18))
13724 
13725  if ((tg3_flag(tp, 57765_PLUS) ||
13728  (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN))
13730 
13731  if (tg3_flag(tp, PCI_EXPRESS) &&
13733  !tg3_flag(tp, 57765_PLUS)) {
13734  u32 cfg3;
13735 
13736  tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3);
13737  if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE)
13738  tg3_flag_set(tp, ASPM_WORKAROUND);
13739  }
13740 
13741  if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE)
13742  tg3_flag_set(tp, RGMII_INBAND_DISABLE);
13743  if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN)
13744  tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN);
13745  if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN)
13746  tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN);
13747  }
13748 done:
13749  if (tg3_flag(tp, WOL_CAP))
13750  device_set_wakeup_enable(&tp->pdev->dev,
13751  tg3_flag(tp, WOL_ENABLE));
13752  else
13753  device_set_wakeup_capable(&tp->pdev->dev, false);
13754 }
13755 
13756 static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd)
13757 {
13758  int i;
13759  u32 val;
13760 
13762  tw32(OTP_CTRL, cmd);
13763 
13764  /* Wait for up to 1 ms for command to execute. */
13765  for (i = 0; i < 100; i++) {
13766  val = tr32(OTP_STATUS);
13767  if (val & OTP_STATUS_CMD_DONE)
13768  break;
13769  udelay(10);
13770  }
13771 
13772  return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY;
13773 }
13774 
13775 /* Read the gphy configuration from the OTP region of the chip. The gphy
13776  * configuration is a 32-bit value that straddles the alignment boundary.
13777  * We do two 32-bit reads and then shift and merge the results.
13778  */
13779 static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp)
13780 {
13781  u32 bhalf_otp, thalf_otp;
13782 
13784 
13785  if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT))
13786  return 0;
13787 
13789 
13790  if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13791  return 0;
13792 
13793  thalf_otp = tr32(OTP_READ_DATA);
13794 
13796 
13797  if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ))
13798  return 0;
13799 
13800  bhalf_otp = tr32(OTP_READ_DATA);
13801 
13802  return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16);
13803 }
13804 
13805 static void __devinit tg3_phy_init_link_config(struct tg3 *tp)
13806 {
13807  u32 adv = ADVERTISED_Autoneg;
13808 
13809  if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY))
13810  adv |= ADVERTISED_1000baseT_Half |
13812 
13813  if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES))
13814  adv |= ADVERTISED_100baseT_Half |
13815  ADVERTISED_100baseT_Full |
13818  ADVERTISED_TP;
13819  else
13820  adv |= ADVERTISED_FIBRE;
13821 
13822  tp->link_config.advertising = adv;
13823  tp->link_config.speed = SPEED_UNKNOWN;
13824  tp->link_config.duplex = DUPLEX_UNKNOWN;
13825  tp->link_config.autoneg = AUTONEG_ENABLE;
13826  tp->link_config.active_speed = SPEED_UNKNOWN;
13827  tp->link_config.active_duplex = DUPLEX_UNKNOWN;
13828 
13829  tp->old_link = -1;
13830 }
13831 
13832 static int __devinit tg3_phy_probe(struct tg3 *tp)
13833 {
13834  u32 hw_phy_id_1, hw_phy_id_2;
13835  u32 hw_phy_id, hw_phy_id_masked;
13836  int err;
13837 
13838  /* flow control autonegotiation is default behavior */
13840  tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX;
13841 
13842  if (tg3_flag(tp, ENABLE_APE)) {
13843  switch (tp->pci_fn) {
13844  case 0:
13846  break;
13847  case 1:
13849  break;
13850  case 2:
13852  break;
13853  case 3:
13855  break;
13856  }
13857  }
13858 
13859  if (tg3_flag(tp, USE_PHYLIB))
13860  return tg3_phy_init(tp);
13861 
13862  /* Reading the PHY ID register can conflict with ASF
13863  * firmware access to the PHY hardware.
13864  */
13865  err = 0;
13866  if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) {
13867  hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID;
13868  } else {
13869  /* Now read the physical PHY_ID from the chip and verify
13870  * that it is sane. If it doesn't look good, we fall back
13871  * to either the hard-coded table based PHY_ID and failing
13872  * that the value found in the eeprom area.
13873  */
13874  err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1);
13875  err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2);
13876 
13877  hw_phy_id = (hw_phy_id_1 & 0xffff) << 10;
13878  hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16;
13879  hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0;
13880 
13881  hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK;
13882  }
13883 
13884  if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) {
13885  tp->phy_id = hw_phy_id;
13886  if (hw_phy_id_masked == TG3_PHY_ID_BCM8002)
13888  else
13890  } else {
13891  if (tp->phy_id != TG3_PHY_ID_INVALID) {
13892  /* Do nothing, phy ID already set up in
13893  * tg3_get_eeprom_hw_cfg().
13894  */
13895  } else {
13896  struct subsys_tbl_ent *p;
13897 
13898  /* No eeprom signature? Try the hardcoded
13899  * subsys device table.
13900  */
13901  p = tg3_lookup_by_subsys(tp);
13902  if (!p)
13903  return -ENODEV;
13904 
13905  tp->phy_id = p->phy_id;
13906  if (!tp->phy_id ||
13907  tp->phy_id == TG3_PHY_ID_BCM8002)
13909  }
13910  }
13911 
13912  if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
13915  (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 &&
13920 
13921  tg3_phy_init_link_config(tp);
13922 
13923  if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) &&
13924  !tg3_flag(tp, ENABLE_APE) &&
13925  !tg3_flag(tp, ENABLE_ASF)) {
13926  u32 bmsr, dummy;
13927 
13928  tg3_readphy(tp, MII_BMSR, &bmsr);
13929  if (!tg3_readphy(tp, MII_BMSR, &bmsr) &&
13930  (bmsr & BMSR_LSTATUS))
13931  goto skip_phy_reset;
13932 
13933  err = tg3_phy_reset(tp);
13934  if (err)
13935  return err;
13936 
13937  tg3_phy_set_wirespeed(tp);
13938 
13939  if (!tg3_phy_copper_an_config_ok(tp, &dummy)) {
13940  tg3_phy_autoneg_cfg(tp, tp->link_config.advertising,
13941  tp->link_config.flowctrl);
13942 
13943  tg3_writephy(tp, MII_BMCR,
13944  BMCR_ANENABLE | BMCR_ANRESTART);
13945  }
13946  }
13947 
13948 skip_phy_reset:
13949  if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) {
13950  err = tg3_init_5401phy_dsp(tp);
13951  if (err)
13952  return err;
13953 
13954  err = tg3_init_5401phy_dsp(tp);
13955  }
13956 
13957  return err;
13958 }
13959 
13960 static void __devinit tg3_read_vpd(struct tg3 *tp)
13961 {
13962  u8 *vpd_data;
13963  unsigned int block_end, rosize, len;
13964  u32 vpdlen;
13965  int j, i = 0;
13966 
13967  vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen);
13968  if (!vpd_data)
13969  goto out_no_vpd;
13970 
13971  i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA);
13972  if (i < 0)
13973  goto out_not_found;
13974 
13975  rosize = pci_vpd_lrdt_size(&vpd_data[i]);
13976  block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize;
13977  i += PCI_VPD_LRDT_TAG_SIZE;
13978 
13979  if (block_end > vpdlen)
13980  goto out_not_found;
13981 
13982  j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13984  if (j > 0) {
13985  len = pci_vpd_info_field_size(&vpd_data[j]);
13986 
13988  if (j + len > block_end || len != 4 ||
13989  memcmp(&vpd_data[j], "1028", 4))
13990  goto partno;
13991 
13992  j = pci_vpd_find_info_keyword(vpd_data, i, rosize,
13994  if (j < 0)
13995  goto partno;
13996 
13997  len = pci_vpd_info_field_size(&vpd_data[j]);
13998 
14000  if (j + len > block_end)
14001  goto partno;
14002 
14003  memcpy(tp->fw_ver, &vpd_data[j], len);
14004  strncat(tp->fw_ver, " bc ", vpdlen - len - 1);
14005  }
14006 
14007 partno:
14008  i = pci_vpd_find_info_keyword(vpd_data, i, rosize,
14010  if (i < 0)
14011  goto out_not_found;
14012 
14013  len = pci_vpd_info_field_size(&vpd_data[i]);
14014 
14016  if (len > TG3_BPN_SIZE ||
14017  (len + i) > vpdlen)
14018  goto out_not_found;
14019 
14020  memcpy(tp->board_part_number, &vpd_data[i], len);
14021 
14022 out_not_found:
14023  kfree(vpd_data);
14024  if (tp->board_part_number[0])
14025  return;
14026 
14027 out_no_vpd:
14029  if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717)
14030  strcpy(tp->board_part_number, "BCM5717");
14031  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718)
14032  strcpy(tp->board_part_number, "BCM5718");
14033  else
14034  goto nomatch;
14035  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) {
14036  if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780)
14037  strcpy(tp->board_part_number, "BCM57780");
14038  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760)
14039  strcpy(tp->board_part_number, "BCM57760");
14040  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790)
14041  strcpy(tp->board_part_number, "BCM57790");
14042  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788)
14043  strcpy(tp->board_part_number, "BCM57788");
14044  else
14045  goto nomatch;
14046  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) {
14047  if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761)
14048  strcpy(tp->board_part_number, "BCM57761");
14049  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765)
14050  strcpy(tp->board_part_number, "BCM57765");
14051  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781)
14052  strcpy(tp->board_part_number, "BCM57781");
14053  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785)
14054  strcpy(tp->board_part_number, "BCM57785");
14055  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791)
14056  strcpy(tp->board_part_number, "BCM57791");
14057  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795)
14058  strcpy(tp->board_part_number, "BCM57795");
14059  else
14060  goto nomatch;
14061  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) {
14062  if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762)
14063  strcpy(tp->board_part_number, "BCM57762");
14064  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766)
14065  strcpy(tp->board_part_number, "BCM57766");
14066  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782)
14067  strcpy(tp->board_part_number, "BCM57782");
14068  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
14069  strcpy(tp->board_part_number, "BCM57786");
14070  else
14071  goto nomatch;
14072  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
14073  strcpy(tp->board_part_number, "BCM95906");
14074  } else {
14075 nomatch:
14076  strcpy(tp->board_part_number, "none");
14077  }
14078 }
14079 
14080 static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)
14081 {
14082  u32 val;
14083 
14084  if (tg3_nvram_read(tp, offset, &val) ||
14085  (val & 0xfc000000) != 0x0c000000 ||
14086  tg3_nvram_read(tp, offset + 4, &val) ||
14087  val != 0)
14088  return 0;
14089 
14090  return 1;
14091 }
14092 
14093 static void __devinit tg3_read_bc_ver(struct tg3 *tp)
14094 {
14095  u32 val, offset, start, ver_offset;
14096  int i, dst_off;
14097  bool newver = false;
14098 
14099  if (tg3_nvram_read(tp, 0xc, &offset) ||
14100  tg3_nvram_read(tp, 0x4, &start))
14101  return;
14102 
14103  offset = tg3_nvram_logical_addr(tp, offset);
14104 
14105  if (tg3_nvram_read(tp, offset, &val))
14106  return;
14107 
14108  if ((val & 0xfc000000) == 0x0c000000) {
14109  if (tg3_nvram_read(tp, offset + 4, &val))
14110  return;
14111 
14112  if (val == 0)
14113  newver = true;
14114  }
14115 
14116  dst_off = strlen(tp->fw_ver);
14117 
14118  if (newver) {
14119  if (TG3_VER_SIZE - dst_off < 16 ||
14120  tg3_nvram_read(tp, offset + 8, &ver_offset))
14121  return;
14122 
14123  offset = offset + ver_offset - start;
14124  for (i = 0; i < 16; i += 4) {
14125  __be32 v;
14126  if (tg3_nvram_read_be32(tp, offset + i, &v))
14127  return;
14128 
14129  memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v));
14130  }
14131  } else {
14132  u32 major, minor;
14133 
14134  if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
14135  return;
14136 
14137  major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
14139  minor = ver_offset & TG3_NVM_BCVER_MINMSK;
14140  snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off,
14141  "v%d.%02d", major, minor);
14142  }
14143 }
14144 
14145 static void __devinit tg3_read_hwsb_ver(struct tg3 *tp)
14146 {
14147  u32 val, major, minor;
14148 
14149  /* Use native endian representation */
14150  if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val))
14151  return;
14152 
14153  major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >>
14155  minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >>
14157 
14158  snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor);
14159 }
14160 
14161 static void __devinit tg3_read_sb_ver(struct tg3 *tp, u32 val)
14162 {
14163  u32 offset, major, minor, build;
14164 
14165  strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1);
14166 
14168  return;
14169 
14170  switch (val & TG3_EEPROM_SB_REVISION_MASK) {
14172  offset = TG3_EEPROM_SB_F1R0_EDH_OFF;
14173  break;
14175  offset = TG3_EEPROM_SB_F1R2_EDH_OFF;
14176  break;
14178  offset = TG3_EEPROM_SB_F1R3_EDH_OFF;
14179  break;
14181  offset = TG3_EEPROM_SB_F1R4_EDH_OFF;
14182  break;
14184  offset = TG3_EEPROM_SB_F1R5_EDH_OFF;
14185  break;
14187  offset = TG3_EEPROM_SB_F1R6_EDH_OFF;
14188  break;
14189  default:
14190  return;
14191  }
14192 
14193  if (tg3_nvram_read(tp, offset, &val))
14194  return;
14195 
14196  build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >>
14198  major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >>
14200  minor = val & TG3_EEPROM_SB_EDH_MIN_MASK;
14201 
14202  if (minor > 99 || build > 26)
14203  return;
14204 
14205  offset = strlen(tp->fw_ver);
14206  snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset,
14207  " v%d.%02d", major, minor);
14208 
14209  if (build > 0) {
14210  offset = strlen(tp->fw_ver);
14211  if (offset < TG3_VER_SIZE - 1)
14212  tp->fw_ver[offset] = 'a' + build - 1;
14213  }
14214 }
14215 
14216 static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp)
14217 {
14218  u32 val, offset, start;
14219  int i, vlen;
14220 
14221  for (offset = TG3_NVM_DIR_START;
14222  offset < TG3_NVM_DIR_END;
14223  offset += TG3_NVM_DIRENT_SIZE) {
14224  if (tg3_nvram_read(tp, offset, &val))
14225  return;
14226 
14228  break;
14229  }
14230 
14231  if (offset == TG3_NVM_DIR_END)
14232  return;
14233 
14234  if (!tg3_flag(tp, 5705_PLUS))
14235  start = 0x08000000;
14236  else if (tg3_nvram_read(tp, offset - 4, &start))
14237  return;
14238 
14239  if (tg3_nvram_read(tp, offset + 4, &offset) ||
14240  !tg3_fw_img_is_valid(tp, offset) ||
14241  tg3_nvram_read(tp, offset + 8, &val))
14242  return;
14243 
14244  offset += val - start;
14245 
14246  vlen = strlen(tp->fw_ver);
14247 
14248  tp->fw_ver[vlen++] = ',';
14249  tp->fw_ver[vlen++] = ' ';
14250 
14251  for (i = 0; i < 4; i++) {
14252  __be32 v;
14253  if (tg3_nvram_read_be32(tp, offset, &v))
14254  return;
14255 
14256  offset += sizeof(v);
14257 
14258  if (vlen > TG3_VER_SIZE - sizeof(v)) {
14259  memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen);
14260  break;
14261  }
14262 
14263  memcpy(&tp->fw_ver[vlen], &v, sizeof(v));
14264  vlen += sizeof(v);
14265  }
14266 }
14267 
14268 static void __devinit tg3_probe_ncsi(struct tg3 *tp)
14269 {
14270  u32 apedata;
14271 
14272  apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
14273  if (apedata != APE_SEG_SIG_MAGIC)
14274  return;
14275 
14276  apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS);
14277  if (!(apedata & APE_FW_STATUS_READY))
14278  return;
14279 
14280  if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI)
14281  tg3_flag_set(tp, APE_HAS_NCSI);
14282 }
14283 
14284 static void __devinit tg3_read_dash_ver(struct tg3 *tp)
14285 {
14286  int vlen;
14287  u32 apedata;
14288  char *fwtype;
14289 
14290  apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
14291 
14292  if (tg3_flag(tp, APE_HAS_NCSI))
14293  fwtype = "NCSI";
14294  else
14295  fwtype = "DASH";
14296 
14297  vlen = strlen(tp->fw_ver);
14298 
14299  snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d",
14300  fwtype,
14304  (apedata & APE_FW_VERSION_BLDMSK));
14305 }
14306 
14307 static void __devinit tg3_read_fw_ver(struct tg3 *tp)
14308 {
14309  u32 val;
14310  bool vpd_vers = false;
14311 
14312  if (tp->fw_ver[0] != 0)
14313  vpd_vers = true;
14314 
14315  if (tg3_flag(tp, NO_NVRAM)) {
14316  strcat(tp->fw_ver, "sb");
14317  return;
14318  }
14319 
14320  if (tg3_nvram_read(tp, 0, &val))
14321  return;
14322 
14323  if (val == TG3_EEPROM_MAGIC)
14324  tg3_read_bc_ver(tp);
14325  else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW)
14326  tg3_read_sb_ver(tp, val);
14327  else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW)
14328  tg3_read_hwsb_ver(tp);
14329 
14330  if (tg3_flag(tp, ENABLE_ASF)) {
14331  if (tg3_flag(tp, ENABLE_APE)) {
14332  tg3_probe_ncsi(tp);
14333  if (!vpd_vers)
14334  tg3_read_dash_ver(tp);
14335  } else if (!vpd_vers) {
14336  tg3_read_mgmtfw_ver(tp);
14337  }
14338  }
14339 
14340  tp->fw_ver[TG3_VER_SIZE - 1] = 0;
14341 }
14342 
14343 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp)
14344 {
14345  if (tg3_flag(tp, LRG_PROD_RING_CAP))
14346  return TG3_RX_RET_MAX_SIZE_5717;
14347  else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))
14348  return TG3_RX_RET_MAX_SIZE_5700;
14349  else
14350  return TG3_RX_RET_MAX_SIZE_5705;
14351 }
14352 
14353 static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = {
14357  { },
14358 };
14359 
14360 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp)
14361 {
14362  struct pci_dev *peer;
14363  unsigned int func, devnr = tp->pdev->devfn & ~7;
14364 
14365  for (func = 0; func < 8; func++) {
14366  peer = pci_get_slot(tp->pdev->bus, devnr | func);
14367  if (peer && peer != tp->pdev)
14368  break;
14369  pci_dev_put(peer);
14370  }
14371  /* 5704 can be configured in single-port mode, set peer to
14372  * tp->pdev in that case.
14373  */
14374  if (!peer) {
14375  peer = tp->pdev;
14376  return peer;
14377  }
14378 
14379  /*
14380  * We don't need to keep the refcount elevated; there's no way
14381  * to remove one half of this device without removing the other
14382  */
14383  pci_dev_put(peer);
14384 
14385  return peer;
14386 }
14387 
14388 static void __devinit tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
14389 {
14390  tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT;
14392  u32 reg;
14393 
14394  /* All devices that use the alternate
14395  * ASIC REV location have a CPMU.
14396  */
14397  tg3_flag_set(tp, CPMU_PRESENT);
14398 
14399  if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
14400  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
14401  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
14402  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720)
14404  else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 ||
14405  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 ||
14406  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 ||
14407  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 ||
14408  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
14409  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
14410  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 ||
14411  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 ||
14412  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 ||
14413  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786)
14415  else
14416  reg = TG3PCI_PRODID_ASICREV;
14417 
14418  pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id);
14419  }
14420 
14421  /* Wrong chip ID in 5752 A0. This code can be removed later
14422  * as A0 is not in production.
14423  */
14426 
14430  tg3_flag_set(tp, 5717_PLUS);
14431 
14434  tg3_flag_set(tp, 57765_CLASS);
14435 
14436  if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS))
14437  tg3_flag_set(tp, 57765_PLUS);
14438 
14439  /* Intentionally exclude ASIC_REV_5906 */
14446  tg3_flag(tp, 57765_PLUS))
14447  tg3_flag_set(tp, 5755_PLUS);
14448 
14451  tg3_flag_set(tp, 5780_CLASS);
14452 
14456  tg3_flag(tp, 5755_PLUS) ||
14457  tg3_flag(tp, 5780_CLASS))
14458  tg3_flag_set(tp, 5750_PLUS);
14459 
14461  tg3_flag(tp, 5750_PLUS))
14462  tg3_flag_set(tp, 5705_PLUS);
14463 }
14464 
14465 static int __devinit tg3_get_invariants(struct tg3 *tp)
14466 {
14467  u32 misc_ctrl_reg;
14468  u32 pci_state_reg, grc_misc_cfg;
14469  u32 val;
14470  u16 pci_cmd;
14471  int err;
14472 
14473  /* Force memory write invalidate off. If we leave it on,
14474  * then on 5700_BX chips we have to enable a workaround.
14475  * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary
14476  * to match the cacheline size. The Broadcom driver have this
14477  * workaround but turns MWI off all the times so never uses
14478  * it. This seems to suggest that the workaround is insufficient.
14479  */
14480  pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14481  pci_cmd &= ~PCI_COMMAND_INVALIDATE;
14482  pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14483 
14484  /* Important! -- Make sure register accesses are byteswapped
14485  * correctly. Also, for those chips that require it, make
14486  * sure that indirect register accesses are enabled before
14487  * the first operation.
14488  */
14489  pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14490  &misc_ctrl_reg);
14491  tp->misc_host_ctrl |= (misc_ctrl_reg &
14493  pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
14494  tp->misc_host_ctrl);
14495 
14496  tg3_detect_asic_rev(tp, misc_ctrl_reg);
14497 
14498  /* If we have 5702/03 A1 or A2 on certain ICH chipsets,
14499  * we need to disable memory and use config. cycles
14500  * only to access all registers. The 5702/03 chips
14501  * can mistakenly decode the special cycles from the
14502  * ICH chipsets as memory write cycles, causing corruption
14503  * of register and memory space. Only certain ICH bridges
14504  * will drive special cycles with non-zero data during the
14505  * address phase which can fall within the 5703's address
14506  * range. This is not an ICH bug as the PCI spec allows
14507  * non-zero address during special cycles. However, only
14508  * these ICH bridges are known to drive non-zero addresses
14509  * during special cycles.
14510  *
14511  * Since special cycles do not cross PCI bridges, we only
14512  * enable this workaround if the 5703 is on the secondary
14513  * bus of these ICH bridges.
14514  */
14515  if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) ||
14517  static struct tg3_dev_id {
14518  u32 vendor;
14519  u32 device;
14520  u32 rev;
14521  } ich_chipsets[] = {
14523  PCI_ANY_ID },
14525  PCI_ANY_ID },
14527  0xa },
14529  PCI_ANY_ID },
14530  { },
14531  };
14532  struct tg3_dev_id *pci_id = &ich_chipsets[0];
14533  struct pci_dev *bridge = NULL;
14534 
14535  while (pci_id->vendor != 0) {
14536  bridge = pci_get_device(pci_id->vendor, pci_id->device,
14537  bridge);
14538  if (!bridge) {
14539  pci_id++;
14540  continue;
14541  }
14542  if (pci_id->rev != PCI_ANY_ID) {
14543  if (bridge->revision > pci_id->rev)
14544  continue;
14545  }
14546  if (bridge->subordinate &&
14547  (bridge->subordinate->number ==
14548  tp->pdev->bus->number)) {
14549  tg3_flag_set(tp, ICH_WORKAROUND);
14550  pci_dev_put(bridge);
14551  break;
14552  }
14553  }
14554  }
14555 
14557  static struct tg3_dev_id {
14558  u32 vendor;
14559  u32 device;
14560  } bridge_chipsets[] = {
14563  { },
14564  };
14565  struct tg3_dev_id *pci_id = &bridge_chipsets[0];
14566  struct pci_dev *bridge = NULL;
14567 
14568  while (pci_id->vendor != 0) {
14569  bridge = pci_get_device(pci_id->vendor,
14570  pci_id->device,
14571  bridge);
14572  if (!bridge) {
14573  pci_id++;
14574  continue;
14575  }
14576  if (bridge->subordinate &&
14577  (bridge->subordinate->number <=
14578  tp->pdev->bus->number) &&
14579  (bridge->subordinate->busn_res.end >=
14580  tp->pdev->bus->number)) {
14581  tg3_flag_set(tp, 5701_DMA_BUG);
14582  pci_dev_put(bridge);
14583  break;
14584  }
14585  }
14586  }
14587 
14588  /* The EPB bridge inside 5714, 5715, and 5780 cannot support
14589  * DMA addresses > 40-bit. This bridge may have other additional
14590  * 57xx devices behind it in some 4-port NIC designs for example.
14591  * Any tg3 device found behind the bridge will also need the 40-bit
14592  * DMA workaround.
14593  */
14594  if (tg3_flag(tp, 5780_CLASS)) {
14595  tg3_flag_set(tp, 40BIT_DMA_BUG);
14597  } else {
14598  struct pci_dev *bridge = NULL;
14599 
14600  do {
14603  bridge);
14604  if (bridge && bridge->subordinate &&
14605  (bridge->subordinate->number <=
14606  tp->pdev->bus->number) &&
14607  (bridge->subordinate->busn_res.end >=
14608  tp->pdev->bus->number)) {
14609  tg3_flag_set(tp, 40BIT_DMA_BUG);
14610  pci_dev_put(bridge);
14611  break;
14612  }
14613  } while (bridge);
14614  }
14615 
14618  tp->pdev_peer = tg3_find_peer(tp);
14619 
14620  /* Determine TSO capabilities */
14622  ; /* Do nothing. HW bug. */
14623  else if (tg3_flag(tp, 57765_PLUS))
14624  tg3_flag_set(tp, HW_TSO_3);
14625  else if (tg3_flag(tp, 5755_PLUS) ||
14627  tg3_flag_set(tp, HW_TSO_2);
14628  else if (tg3_flag(tp, 5750_PLUS)) {
14629  tg3_flag_set(tp, HW_TSO_1);
14630  tg3_flag_set(tp, TSO_BUG);
14633  tg3_flag_clear(tp, TSO_BUG);
14634  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
14637  tg3_flag_set(tp, TSO_BUG);
14640  else
14641  tp->fw_needed = FIRMWARE_TG3TSO;
14642  }
14643 
14644  /* Selectively allow TSO based on operating conditions */
14645  if (tg3_flag(tp, HW_TSO_1) ||
14646  tg3_flag(tp, HW_TSO_2) ||
14647  tg3_flag(tp, HW_TSO_3) ||
14648  tp->fw_needed) {
14649  /* For firmware TSO, assume ASF is disabled.
14650  * We'll disable TSO later if we discover ASF
14651  * is enabled in tg3_get_eeprom_hw_cfg().
14652  */
14653  tg3_flag_set(tp, TSO_CAPABLE);
14654  } else {
14655  tg3_flag_clear(tp, TSO_CAPABLE);
14656  tg3_flag_clear(tp, TSO_BUG);
14657  tp->fw_needed = NULL;
14658  }
14659 
14661  tp->fw_needed = FIRMWARE_TG3;
14662 
14663  tp->irq_max = 1;
14664 
14665  if (tg3_flag(tp, 5750_PLUS)) {
14666  tg3_flag_set(tp, SUPPORT_MSI);
14671  tp->pdev_peer == tp->pdev))
14672  tg3_flag_clear(tp, SUPPORT_MSI);
14673 
14674  if (tg3_flag(tp, 5755_PLUS) ||
14676  tg3_flag_set(tp, 1SHOT_MSI);
14677  }
14678 
14679  if (tg3_flag(tp, 57765_PLUS)) {
14680  tg3_flag_set(tp, SUPPORT_MSIX);
14681  tp->irq_max = TG3_IRQ_MAX_VECS;
14682  }
14683  }
14684 
14685  tp->txq_max = 1;
14686  tp->rxq_max = 1;
14687  if (tp->irq_max > 1) {
14689  tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS);
14690 
14693  tp->txq_max = tp->irq_max - 1;
14694  }
14695 
14696  if (tg3_flag(tp, 5755_PLUS) ||
14698  tg3_flag_set(tp, SHORT_DMA_BUG);
14699 
14702 
14706  tg3_flag_set(tp, LRG_PROD_RING_CAP);
14707 
14708  if (tg3_flag(tp, 57765_PLUS) &&
14710  tg3_flag_set(tp, USE_JUMBO_BDFLAG);
14711 
14712  if (!tg3_flag(tp, 5705_PLUS) ||
14713  tg3_flag(tp, 5780_CLASS) ||
14714  tg3_flag(tp, USE_JUMBO_BDFLAG))
14715  tg3_flag_set(tp, JUMBO_CAPABLE);
14716 
14717  pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
14718  &pci_state_reg);
14719 
14720  if (pci_is_pcie(tp->pdev)) {
14721  u16 lnkctl;
14722 
14723  tg3_flag_set(tp, PCI_EXPRESS);
14724 
14726  if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) {
14727  if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
14728  ASIC_REV_5906) {
14729  tg3_flag_clear(tp, HW_TSO_2);
14730  tg3_flag_clear(tp, TSO_CAPABLE);
14731  }
14736  tg3_flag_set(tp, CLKREQ_BUG);
14737  } else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) {
14738  tg3_flag_set(tp, L1PLLPD_EN);
14739  }
14740  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) {
14741  /* BCM5785 devices are effectively PCIe devices, and should
14742  * follow PCIe codepaths, but do not have a PCIe capabilities
14743  * section.
14744  */
14745  tg3_flag_set(tp, PCI_EXPRESS);
14746  } else if (!tg3_flag(tp, 5705_PLUS) ||
14747  tg3_flag(tp, 5780_CLASS)) {
14749  if (!tp->pcix_cap) {
14750  dev_err(&tp->pdev->dev,
14751  "Cannot find PCI-X capability, aborting\n");
14752  return -EIO;
14753  }
14754 
14755  if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE))
14756  tg3_flag_set(tp, PCIX_MODE);
14757  }
14758 
14759  /* If we have an AMD 762 or VIA K8T800 chipset, write
14760  * reordering to the mailbox registers done by the host
14761  * controller can cause major troubles. We read back from
14762  * every mailbox register write to force the writes to be
14763  * posted to the chip in order.
14764  */
14765  if (pci_dev_present(tg3_write_reorder_chipsets) &&
14766  !tg3_flag(tp, PCI_EXPRESS))
14767  tg3_flag_set(tp, MBOX_WRITE_REORDER);
14768 
14769  pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE,
14770  &tp->pci_cacheline_sz);
14771  pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14772  &tp->pci_lat_timer);
14774  tp->pci_lat_timer < 64) {
14775  tp->pci_lat_timer = 64;
14776  pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER,
14777  tp->pci_lat_timer);
14778  }
14779 
14780  /* Important! -- It is critical that the PCI-X hw workaround
14781  * situation is decided before the first MMIO register access.
14782  */
14784  /* 5700 BX chips need to have their TX producer index
14785  * mailboxes written twice to workaround a bug.
14786  */
14787  tg3_flag_set(tp, TXD_MBOX_HWBUG);
14788 
14789  /* If we are in PCI-X mode, enable register write workaround.
14790  *
14791  * The workaround is to use indirect register accesses
14792  * for all chip writes not to mailbox registers.
14793  */
14794  if (tg3_flag(tp, PCIX_MODE)) {
14795  u32 pm_reg;
14796 
14797  tg3_flag_set(tp, PCIX_TARGET_HWBUG);
14798 
14799  /* The chip can have it's power management PCI config
14800  * space registers clobbered due to this bug.
14801  * So explicitly force the chip into D0 here.
14802  */
14803  pci_read_config_dword(tp->pdev,
14804  tp->pm_cap + PCI_PM_CTRL,
14805  &pm_reg);
14806  pm_reg &= ~PCI_PM_CTRL_STATE_MASK;
14807  pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */;
14808  pci_write_config_dword(tp->pdev,
14809  tp->pm_cap + PCI_PM_CTRL,
14810  pm_reg);
14811 
14812  /* Also, force SERR#/PERR# in PCI command. */
14813  pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14814  pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR;
14815  pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14816  }
14817  }
14818 
14819  if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0)
14820  tg3_flag_set(tp, PCI_HIGH_SPEED);
14821  if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0)
14822  tg3_flag_set(tp, PCI_32BIT);
14823 
14824  /* Chip-specific fixup from Broadcom driver */
14825  if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) &&
14826  (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) {
14827  pci_state_reg |= PCISTATE_RETRY_SAME_DMA;
14828  pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg);
14829  }
14830 
14831  /* Default fast path register access methods */
14832  tp->read32 = tg3_read32;
14833  tp->write32 = tg3_write32;
14834  tp->read32_mbox = tg3_read32;
14835  tp->write32_mbox = tg3_write32;
14836  tp->write32_tx_mbox = tg3_write32;
14837  tp->write32_rx_mbox = tg3_write32;
14838 
14839  /* Various workaround register access methods */
14840  if (tg3_flag(tp, PCIX_TARGET_HWBUG))
14841  tp->write32 = tg3_write_indirect_reg32;
14842  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 ||
14843  (tg3_flag(tp, PCI_EXPRESS) &&
14845  /*
14846  * Back to back register writes can cause problems on these
14847  * chips, the workaround is to read back all reg writes
14848  * except those to mailbox regs.
14849  *
14850  * See tg3_write_indirect_reg32().
14851  */
14852  tp->write32 = tg3_write_flush_reg32;
14853  }
14854 
14855  if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) {
14856  tp->write32_tx_mbox = tg3_write32_tx_mbox;
14857  if (tg3_flag(tp, MBOX_WRITE_REORDER))
14858  tp->write32_rx_mbox = tg3_write_flush_reg32;
14859  }
14860 
14861  if (tg3_flag(tp, ICH_WORKAROUND)) {
14862  tp->read32 = tg3_read_indirect_reg32;
14863  tp->write32 = tg3_write_indirect_reg32;
14864  tp->read32_mbox = tg3_read_indirect_mbox;
14865  tp->write32_mbox = tg3_write_indirect_mbox;
14866  tp->write32_tx_mbox = tg3_write_indirect_mbox;
14867  tp->write32_rx_mbox = tg3_write_indirect_mbox;
14868 
14869  iounmap(tp->regs);
14870  tp->regs = NULL;
14871 
14872  pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd);
14873  pci_cmd &= ~PCI_COMMAND_MEMORY;
14874  pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd);
14875  }
14877  tp->read32_mbox = tg3_read32_mbox_5906;
14878  tp->write32_mbox = tg3_write32_mbox_5906;
14879  tp->write32_tx_mbox = tg3_write32_mbox_5906;
14880  tp->write32_rx_mbox = tg3_write32_mbox_5906;
14881  }
14882 
14883  if (tp->write32 == tg3_write_indirect_reg32 ||
14884  (tg3_flag(tp, PCIX_MODE) &&
14887  tg3_flag_set(tp, SRAM_USE_CONFIG);
14888 
14889  /* The memory arbiter has to be enabled in order for SRAM accesses
14890  * to succeed. Normally on powerup the tg3 chip firmware will make
14891  * sure it is enabled, but other entities such as system netboot
14892  * code might disable it.
14893  */
14894  val = tr32(MEMARB_MODE);
14896 
14897  tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3;
14899  tg3_flag(tp, 5780_CLASS)) {
14900  if (tg3_flag(tp, PCIX_MODE)) {
14901  pci_read_config_dword(tp->pdev,
14902  tp->pcix_cap + PCI_X_STATUS,
14903  &val);
14904  tp->pci_fn = val & 0x7;
14905  }
14906  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) {
14907  tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
14908  if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
14910  tp->pci_fn = val & TG3_CPMU_STATUS_FMSK_5717;
14911  tp->pci_fn = tp->pci_fn ? 1 : 0;
14912  }
14913  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 ||
14915  tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val);
14916  if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) ==
14918  tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >>
14920  }
14921  }
14922 
14923  /* Get eeprom hw config before calling tg3_set_power_state().
14924  * In particular, the TG3_FLAG_IS_NIC flag must be
14925  * determined before calling tg3_set_power_state() so that
14926  * we know whether or not to switch out of Vaux power.
14927  * When the flag is set, it means that GPIO1 is used for eeprom
14928  * write protect and also implies that it is a LOM where GPIOs
14929  * are not used to switch power.
14930  */
14931  tg3_get_eeprom_hw_cfg(tp);
14932 
14933  if (tp->fw_needed && tg3_flag(tp, ENABLE_ASF)) {
14934  tg3_flag_clear(tp, TSO_CAPABLE);
14935  tg3_flag_clear(tp, TSO_BUG);
14936  tp->fw_needed = NULL;
14937  }
14938 
14939  if (tg3_flag(tp, ENABLE_APE)) {
14940  /* Allow reads and writes to the
14941  * APE register and memory space.
14942  */
14943  pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR |
14946  pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE,
14947  pci_state_reg);
14948 
14949  tg3_ape_lock_init(tp);
14950  }
14951 
14952  /* Set up tp->grc_local_ctrl before calling
14953  * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high
14954  * will bring 5700's external PHY out of reset.
14955  * It is also used as eeprom write protect on LOMs.
14956  */
14959  tg3_flag(tp, EEPROM_WRITE_PROT))
14962  /* Unused GPIO3 must be driven as output on 5752 because there
14963  * are no pull-up resistors on unused GPIO pins.
14964  */
14965  else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
14967 
14970  tg3_flag(tp, 57765_CLASS))
14972 
14973  if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
14974  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) {
14975  /* Turn off the debug UART. */
14977  if (tg3_flag(tp, IS_NIC))
14978  /* Keep VMain power. */
14981  }
14982 
14983  /* Switch out of Vaux if it is a NIC */
14984  tg3_pwrsrc_switch_to_vmain(tp);
14985 
14986  /* Derive initial jumbo mode from MTU assigned in
14987  * ether_setup() via the alloc_etherdev() call
14988  */
14989  if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS))
14990  tg3_flag_set(tp, JUMBO_RING_ENABLE);
14991 
14992  /* Determine WakeOnLan speed to use. */
14997  tg3_flag_clear(tp, WOL_SPEED_100MB);
14998  } else {
14999  tg3_flag_set(tp, WOL_SPEED_100MB);
15000  }
15001 
15004 
15005  /* A few boards don't want Ethernet@WireSpeed phy feature */
15009  (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) ||
15010  (tp->phy_flags & TG3_PHYFLG_IS_FET) ||
15013 
15019 
15020  if (tg3_flag(tp, 5705_PLUS) &&
15021  !(tp->phy_flags & TG3_PHYFLG_IS_FET) &&
15024  !tg3_flag(tp, 57765_PLUS)) {
15029  if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 &&
15030  tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722)
15032  if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M)
15034  } else
15036  }
15037 
15040  tp->phy_otp = tg3_read_otp_phycfg(tp);
15041  if (tp->phy_otp == 0)
15042  tp->phy_otp = TG3_OTP_DEFAULT;
15043  }
15044 
15045  if (tg3_flag(tp, CPMU_PRESENT))
15047  else
15048  tp->mi_mode = MAC_MI_MODE_BASE;
15049 
15050  tp->coalesce_mode = 0;
15054 
15055  /* Set these bits to enable statistics workaround. */
15061  }
15062 
15065  tg3_flag_set(tp, USE_PHYLIB);
15066 
15067  err = tg3_mdio_init(tp);
15068  if (err)
15069  return err;
15070 
15071  /* Initialize data/descriptor byte/word swapping. */
15072  val = tr32(GRC_MODE);
15079  else
15080  val &= GRC_MODE_HOST_STACKUP;
15081 
15082  tw32(GRC_MODE, val | tp->grc_mode);
15083 
15084  tg3_switch_clocks(tp);
15085 
15086  /* Clear this out for sanity. */
15088 
15089  pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE,
15090  &pci_state_reg);
15091  if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 &&
15092  !tg3_flag(tp, PCIX_TARGET_HWBUG)) {
15093  u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl);
15094 
15095  if (chiprevid == CHIPREV_ID_5701_A0 ||
15096  chiprevid == CHIPREV_ID_5701_B0 ||
15097  chiprevid == CHIPREV_ID_5701_B2 ||
15098  chiprevid == CHIPREV_ID_5701_B5) {
15099  void __iomem *sram_base;
15100 
15101  /* Write some dummy words into the SRAM status block
15102  * area, see if it reads back correctly. If the return
15103  * value is bad, force enable the PCIX workaround.
15104  */
15105  sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK;
15106 
15107  writel(0x00000000, sram_base);
15108  writel(0x00000000, sram_base + 4);
15109  writel(0xffffffff, sram_base + 4);
15110  if (readl(sram_base) != 0x00000000)
15111  tg3_flag_set(tp, PCIX_TARGET_HWBUG);
15112  }
15113  }
15114 
15115  udelay(50);
15116  tg3_nvram_init(tp);
15117 
15118  grc_misc_cfg = tr32(GRC_MISC_CFG);
15119  grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
15120 
15122  (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 ||
15123  grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M))
15124  tg3_flag_set(tp, IS_5788);
15125 
15126  if (!tg3_flag(tp, IS_5788) &&
15128  tg3_flag_set(tp, TAGGED_STATUS);
15129  if (tg3_flag(tp, TAGGED_STATUS)) {
15132 
15134  pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL,
15135  tp->misc_host_ctrl);
15136  }
15137 
15138  /* Preserve the APE MAC_MODE bits */
15139  if (tg3_flag(tp, ENABLE_APE))
15141  else
15142  tp->mac_mode = 0;
15143 
15144  /* these are limited to 10/100 only */
15146  (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
15148  tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
15149  (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
15150  tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
15151  tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
15152  (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
15153  (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
15154  tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F ||
15155  tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) ||
15156  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790 ||
15157  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
15158  tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
15159  (tp->phy_flags & TG3_PHYFLG_IS_FET))
15161 
15162  err = tg3_phy_probe(tp);
15163  if (err) {
15164  dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err);
15165  /* ... but do not return immediately ... */
15166  tg3_mdio_fini(tp);
15167  }
15168 
15169  tg3_read_vpd(tp);
15170  tg3_read_fw_ver(tp);
15171 
15172  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) {
15174  } else {
15177  else
15179  }
15180 
15181  /* 5700 {AX,BX} chips have a broken status block link
15182  * change bit implementation, so we must use the
15183  * status register in those cases.
15184  */
15186  tg3_flag_set(tp, USE_LINKCHG_REG);
15187  else
15188  tg3_flag_clear(tp, USE_LINKCHG_REG);
15189 
15190  /* The led_ctrl is set during tg3_phy_probe, here we might
15191  * have to force the link status polling mechanism based
15192  * upon subsystem IDs.
15193  */
15194  if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
15196  !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) {
15198  tg3_flag_set(tp, USE_LINKCHG_REG);
15199  }
15200 
15201  /* For all SERDES we poll the MAC status register. */
15202  if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)
15203  tg3_flag_set(tp, POLL_SERDES);
15204  else
15205  tg3_flag_clear(tp, POLL_SERDES);
15206 
15210  tg3_flag(tp, PCIX_MODE)) {
15211  tp->rx_offset = NET_SKB_PAD;
15212 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
15213  tp->rx_copy_thresh = ~(u16)0;
15214 #endif
15215  }
15216 
15217  tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1;
15218  tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1;
15219  tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1;
15220 
15221  tp->rx_std_max_post = tp->rx_std_ring_mask + 1;
15222 
15223  /* Increment the rx prod index on the rx std ring by at most
15224  * 8 for these chips to workaround hw errata.
15225  */
15229  tp->rx_std_max_post = 8;
15230 
15231  if (tg3_flag(tp, ASPM_WORKAROUND))
15234 
15235  return err;
15236 }
15237 
15238 #ifdef CONFIG_SPARC
15239 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp)
15240 {
15241  struct net_device *dev = tp->dev;
15242  struct pci_dev *pdev = tp->pdev;
15243  struct device_node *dp = pci_device_to_OF_node(pdev);
15244  const unsigned char *addr;
15245  int len;
15246 
15247  addr = of_get_property(dp, "local-mac-address", &len);
15248  if (addr && len == 6) {
15249  memcpy(dev->dev_addr, addr, 6);
15250  memcpy(dev->perm_addr, dev->dev_addr, 6);
15251  return 0;
15252  }
15253  return -ENODEV;
15254 }
15255 
15256 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp)
15257 {
15258  struct net_device *dev = tp->dev;
15259 
15260  memcpy(dev->dev_addr, idprom->id_ethaddr, 6);
15261  memcpy(dev->perm_addr, idprom->id_ethaddr, 6);
15262  return 0;
15263 }
15264 #endif
15265 
15266 static int __devinit tg3_get_device_address(struct tg3 *tp)
15267 {
15268  struct net_device *dev = tp->dev;
15269  u32 hi, lo, mac_offset;
15270  int addr_ok = 0;
15271 
15272 #ifdef CONFIG_SPARC
15273  if (!tg3_get_macaddr_sparc(tp))
15274  return 0;
15275 #endif
15276 
15277  mac_offset = 0x7c;
15279  tg3_flag(tp, 5780_CLASS)) {
15281  mac_offset = 0xcc;
15282  if (tg3_nvram_lock(tp))
15284  else
15285  tg3_nvram_unlock(tp);
15286  } else if (tg3_flag(tp, 5717_PLUS)) {
15287  if (tp->pci_fn & 1)
15288  mac_offset = 0xcc;
15289  if (tp->pci_fn > 1)
15290  mac_offset += 0x18c;
15291  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906)
15292  mac_offset = 0x10;
15293 
15294  /* First try to get it from MAC address mailbox. */
15295  tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi);
15296  if ((hi >> 16) == 0x484b) {
15297  dev->dev_addr[0] = (hi >> 8) & 0xff;
15298  dev->dev_addr[1] = (hi >> 0) & 0xff;
15299 
15300  tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo);
15301  dev->dev_addr[2] = (lo >> 24) & 0xff;
15302  dev->dev_addr[3] = (lo >> 16) & 0xff;
15303  dev->dev_addr[4] = (lo >> 8) & 0xff;
15304  dev->dev_addr[5] = (lo >> 0) & 0xff;
15305 
15306  /* Some old bootcode may report a 0 MAC address in SRAM */
15307  addr_ok = is_valid_ether_addr(&dev->dev_addr[0]);
15308  }
15309  if (!addr_ok) {
15310  /* Next, try NVRAM. */
15311  if (!tg3_flag(tp, NO_NVRAM) &&
15312  !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) &&
15313  !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) {
15314  memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2);
15315  memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo));
15316  }
15317  /* Finally just fetch it out of the MAC control regs. */
15318  else {
15319  hi = tr32(MAC_ADDR_0_HIGH);
15320  lo = tr32(MAC_ADDR_0_LOW);
15321 
15322  dev->dev_addr[5] = lo & 0xff;
15323  dev->dev_addr[4] = (lo >> 8) & 0xff;
15324  dev->dev_addr[3] = (lo >> 16) & 0xff;
15325  dev->dev_addr[2] = (lo >> 24) & 0xff;
15326  dev->dev_addr[1] = hi & 0xff;
15327  dev->dev_addr[0] = (hi >> 8) & 0xff;
15328  }
15329  }
15330 
15331  if (!is_valid_ether_addr(&dev->dev_addr[0])) {
15332 #ifdef CONFIG_SPARC
15333  if (!tg3_get_default_macaddr_sparc(tp))
15334  return 0;
15335 #endif
15336  return -EINVAL;
15337  }
15338  memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
15339  return 0;
15340 }
15341 
15342 #define BOUNDARY_SINGLE_CACHELINE 1
15343 #define BOUNDARY_MULTI_CACHELINE 2
15344 
15345 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val)
15346 {
15347  int cacheline_size;
15348  u8 byte;
15349  int goal;
15350 
15351  pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte);
15352  if (byte == 0)
15353  cacheline_size = 1024;
15354  else
15355  cacheline_size = (int) byte * 4;
15356 
15357  /* On 5703 and later chips, the boundary bits have no
15358  * effect.
15359  */
15362  !tg3_flag(tp, PCI_EXPRESS))
15363  goto out;
15364 
15365 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC)
15366  goal = BOUNDARY_MULTI_CACHELINE;
15367 #else
15368 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA)
15370 #else
15371  goal = 0;
15372 #endif
15373 #endif
15374 
15375  if (tg3_flag(tp, 57765_PLUS)) {
15376  val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT;
15377  goto out;
15378  }
15379 
15380  if (!goal)
15381  goto out;
15382 
15383  /* PCI controllers on most RISC systems tend to disconnect
15384  * when a device tries to burst across a cache-line boundary.
15385  * Therefore, letting tg3 do so just wastes PCI bandwidth.
15386  *
15387  * Unfortunately, for PCI-E there are only limited
15388  * write-side controls for this, and thus for reads
15389  * we will still get the disconnects. We'll also waste
15390  * these PCI cycles for both read and write for chips
15391  * other than 5700 and 5701 which do not implement the
15392  * boundary bits.
15393  */
15394  if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) {
15395  switch (cacheline_size) {
15396  case 16:
15397  case 32:
15398  case 64:
15399  case 128:
15400  if (goal == BOUNDARY_SINGLE_CACHELINE) {
15403  } else {
15406  }
15407  break;
15408 
15409  case 256:
15412  break;
15413 
15414  default:
15417  break;
15418  }
15419  } else if (tg3_flag(tp, PCI_EXPRESS)) {
15420  switch (cacheline_size) {
15421  case 16:
15422  case 32:
15423  case 64:
15424  if (goal == BOUNDARY_SINGLE_CACHELINE) {
15427  break;
15428  }
15429  /* fallthrough */
15430  case 128:
15431  default:
15434  break;
15435  }
15436  } else {
15437  switch (cacheline_size) {
15438  case 16:
15439  if (goal == BOUNDARY_SINGLE_CACHELINE) {
15440  val |= (DMA_RWCTRL_READ_BNDRY_16 |
15442  break;
15443  }
15444  /* fallthrough */
15445  case 32:
15446  if (goal == BOUNDARY_SINGLE_CACHELINE) {
15447  val |= (DMA_RWCTRL_READ_BNDRY_32 |
15449  break;
15450  }
15451  /* fallthrough */
15452  case 64:
15453  if (goal == BOUNDARY_SINGLE_CACHELINE) {
15454  val |= (DMA_RWCTRL_READ_BNDRY_64 |
15456  break;
15457  }
15458  /* fallthrough */
15459  case 128:
15460  if (goal == BOUNDARY_SINGLE_CACHELINE) {
15461  val |= (DMA_RWCTRL_READ_BNDRY_128 |
15463  break;
15464  }
15465  /* fallthrough */
15466  case 256:
15467  val |= (DMA_RWCTRL_READ_BNDRY_256 |
15469  break;
15470  case 512:
15471  val |= (DMA_RWCTRL_READ_BNDRY_512 |
15473  break;
15474  case 1024:
15475  default:
15476  val |= (DMA_RWCTRL_READ_BNDRY_1024 |
15478  break;
15479  }
15480  }
15481 
15482 out:
15483  return val;
15484 }
15485 
15486 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device)
15487 {
15488  struct tg3_internal_buffer_desc test_desc;
15489  u32 sram_dma_descs;
15490  int i, ret;
15491 
15492  sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE;
15493 
15496  tw32(RDMAC_STATUS, 0);
15497  tw32(WDMAC_STATUS, 0);
15498 
15499  tw32(BUFMGR_MODE, 0);
15500  tw32(FTQ_RESET, 0);
15501 
15502  test_desc.addr_hi = ((u64) buf_dma) >> 32;
15503  test_desc.addr_lo = buf_dma & 0xffffffff;
15504  test_desc.nic_mbuf = 0x00002100;
15505  test_desc.len = size;
15506 
15507  /*
15508  * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz
15509  * the *second* time the tg3 driver was getting loaded after an
15510  * initial scan.
15511  *
15512  * Broadcom tells me:
15513  * ...the DMA engine is connected to the GRC block and a DMA
15514  * reset may affect the GRC block in some unpredictable way...
15515  * The behavior of resets to individual blocks has not been tested.
15516  *
15517  * Broadcom noted the GRC reset will also reset all sub-components.
15518  */
15519  if (to_device) {
15520  test_desc.cqid_sqid = (13 << 8) | 2;
15521 
15523  udelay(40);
15524  } else {
15525  test_desc.cqid_sqid = (16 << 8) | 7;
15526 
15528  udelay(40);
15529  }
15530  test_desc.flags = 0x00000005;
15531 
15532  for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) {
15533  u32 val;
15534 
15535  val = *(((u32 *)&test_desc) + i);
15536  pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR,
15537  sram_dma_descs + (i * sizeof(u32)));
15538  pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val);
15539  }
15540  pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0);
15541 
15542  if (to_device)
15543  tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs);
15544  else
15545  tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs);
15546 
15547  ret = -ENODEV;
15548  for (i = 0; i < 40; i++) {
15549  u32 val;
15550 
15551  if (to_device)
15553  else
15555  if ((val & 0xffff) == sram_dma_descs) {
15556  ret = 0;
15557  break;
15558  }
15559 
15560  udelay(100);
15561  }
15562 
15563  return ret;
15564 }
15565 
15566 #define TEST_BUFFER_SIZE 0x2000
15567 
15568 static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = {
15570  { },
15571 };
15572 
15573 static int __devinit tg3_test_dma(struct tg3 *tp)
15574 {
15575  dma_addr_t buf_dma;
15576  u32 *buf, saved_dma_rwctrl;
15577  int ret = 0;
15578 
15579  buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE,
15580  &buf_dma, GFP_KERNEL);
15581  if (!buf) {
15582  ret = -ENOMEM;
15583  goto out_nofree;
15584  }
15585 
15586  tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) |
15588 
15589  tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl);
15590 
15591  if (tg3_flag(tp, 57765_PLUS))
15592  goto out;
15593 
15594  if (tg3_flag(tp, PCI_EXPRESS)) {
15595  /* DMA read watermark not used on PCIE */
15596  tp->dma_rwctrl |= 0x00180000;
15597  } else if (!tg3_flag(tp, PCIX_MODE)) {
15600  tp->dma_rwctrl |= 0x003f0000;
15601  else
15602  tp->dma_rwctrl |= 0x003f000f;
15603  } else {
15606  u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f);
15607  u32 read_water = 0x7;
15608 
15609  /* If the 5704 is behind the EPB bridge, we can
15610  * do the less restrictive ONE_DMA workaround for
15611  * better performance.
15612  */
15613  if (tg3_flag(tp, 40BIT_DMA_BUG) &&
15615  tp->dma_rwctrl |= 0x8000;
15616  else if (ccval == 0x6 || ccval == 0x7)
15618 
15620  read_water = 4;
15621  /* Set bit 23 to enable PCIX hw bug fix */
15622  tp->dma_rwctrl |=
15623  (read_water << DMA_RWCTRL_READ_WATER_SHIFT) |
15624  (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) |
15625  (1 << 23);
15626  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) {
15627  /* 5780 always in PCIX mode */
15628  tp->dma_rwctrl |= 0x00144000;
15629  } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) {
15630  /* 5714 always in PCIX mode */
15631  tp->dma_rwctrl |= 0x00148000;
15632  } else {
15633  tp->dma_rwctrl |= 0x001b000f;
15634  }
15635  }
15636 
15639  tp->dma_rwctrl &= 0xfffffff0;
15640 
15643  /* Remove this if it causes problems for some boards. */
15645 
15646  /* On 5700/5701 chips, we need to set this bit.
15647  * Otherwise the chip will issue cacheline transactions
15648  * to streamable DMA memory with not all the byte
15649  * enables turned on. This is an error on several
15650  * RISC PCI controllers, in particular sparc64.
15651  *
15652  * On 5703/5704 chips, this bit has been reassigned
15653  * a different meaning. In particular, it is used
15654  * on those chips to enable a PCI-X workaround.
15655  */
15657  }
15658 
15660 
15661 #if 0
15662  /* Unneeded, already done by tg3_get_invariants. */
15663  tg3_switch_clocks(tp);
15664 #endif
15665 
15668  goto out;
15669 
15670  /* It is best to perform DMA test with maximum write burst size
15671  * to expose the 5700/5701 write DMA bug.
15672  */
15673  saved_dma_rwctrl = tp->dma_rwctrl;
15676 
15677  while (1) {
15678  u32 *p = buf, i;
15679 
15680  for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++)
15681  p[i] = i;
15682 
15683  /* Send the buffer to the chip. */
15684  ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1);
15685  if (ret) {
15686  dev_err(&tp->pdev->dev,
15687  "%s: Buffer write failed. err = %d\n",
15688  __func__, ret);
15689  break;
15690  }
15691 
15692 #if 0
15693  /* validate data reached card RAM correctly. */
15694  for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15695  u32 val;
15696  tg3_read_mem(tp, 0x2100 + (i*4), &val);
15697  if (le32_to_cpu(val) != p[i]) {
15698  dev_err(&tp->pdev->dev,
15699  "%s: Buffer corrupted on device! "
15700  "(%d != %d)\n", __func__, val, i);
15701  /* ret = -ENODEV here? */
15702  }
15703  p[i] = 0;
15704  }
15705 #endif
15706  /* Now read it back. */
15707  ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0);
15708  if (ret) {
15709  dev_err(&tp->pdev->dev, "%s: Buffer read failed. "
15710  "err = %d\n", __func__, ret);
15711  break;
15712  }
15713 
15714  /* Verify it. */
15715  for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) {
15716  if (p[i] == i)
15717  continue;
15718 
15724  break;
15725  } else {
15726  dev_err(&tp->pdev->dev,
15727  "%s: Buffer corrupted on read back! "
15728  "(%d != %d)\n", __func__, p[i], i);
15729  ret = -ENODEV;
15730  goto out;
15731  }
15732  }
15733 
15734  if (i == (TEST_BUFFER_SIZE / sizeof(u32))) {
15735  /* Success. */
15736  ret = 0;
15737  break;
15738  }
15739  }
15742  /* DMA test passed without adjusting DMA boundary,
15743  * now look for chipsets that are known to expose the
15744  * DMA bug without failing the test.
15745  */
15746  if (pci_dev_present(tg3_dma_wait_state_chipsets)) {
15749  } else {
15750  /* Safe to use the calculated DMA boundary. */
15751  tp->dma_rwctrl = saved_dma_rwctrl;
15752  }
15753 
15755  }
15756 
15757 out:
15758  dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma);
15759 out_nofree:
15760  return ret;
15761 }
15762 
15763 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp)
15764 {
15765  if (tg3_flag(tp, 57765_PLUS)) {
15766  tp->bufmgr_config.mbuf_read_dma_low_water =
15768  tp->bufmgr_config.mbuf_mac_rx_low_water =
15770  tp->bufmgr_config.mbuf_high_water =
15772 
15773  tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15775  tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15777  tp->bufmgr_config.mbuf_high_water_jumbo =
15779  } else if (tg3_flag(tp, 5705_PLUS)) {
15780  tp->bufmgr_config.mbuf_read_dma_low_water =
15782  tp->bufmgr_config.mbuf_mac_rx_low_water =
15784  tp->bufmgr_config.mbuf_high_water =
15787  tp->bufmgr_config.mbuf_mac_rx_low_water =
15789  tp->bufmgr_config.mbuf_high_water =
15791  }
15792 
15793  tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15795  tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15797  tp->bufmgr_config.mbuf_high_water_jumbo =
15799  } else {
15800  tp->bufmgr_config.mbuf_read_dma_low_water =
15802  tp->bufmgr_config.mbuf_mac_rx_low_water =
15804  tp->bufmgr_config.mbuf_high_water =
15806 
15807  tp->bufmgr_config.mbuf_read_dma_low_water_jumbo =
15809  tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo =
15811  tp->bufmgr_config.mbuf_high_water_jumbo =
15813  }
15814 
15815  tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER;
15816  tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER;
15817 }
15818 
15819 static char * __devinit tg3_phy_string(struct tg3 *tp)
15820 {
15821  switch (tp->phy_id & TG3_PHY_ID_MASK) {
15822  case TG3_PHY_ID_BCM5400: return "5400";
15823  case TG3_PHY_ID_BCM5401: return "5401";
15824  case TG3_PHY_ID_BCM5411: return "5411";
15825  case TG3_PHY_ID_BCM5701: return "5701";
15826  case TG3_PHY_ID_BCM5703: return "5703";
15827  case TG3_PHY_ID_BCM5704: return "5704";
15828  case TG3_PHY_ID_BCM5705: return "5705";
15829  case TG3_PHY_ID_BCM5750: return "5750";
15830  case TG3_PHY_ID_BCM5752: return "5752";
15831  case TG3_PHY_ID_BCM5714: return "5714";
15832  case TG3_PHY_ID_BCM5780: return "5780";
15833  case TG3_PHY_ID_BCM5755: return "5755";
15834  case TG3_PHY_ID_BCM5787: return "5787";
15835  case TG3_PHY_ID_BCM5784: return "5784";
15836  case TG3_PHY_ID_BCM5756: return "5722/5756";
15837  case TG3_PHY_ID_BCM5906: return "5906";
15838  case TG3_PHY_ID_BCM5761: return "5761";
15839  case TG3_PHY_ID_BCM5718C: return "5718C";
15840  case TG3_PHY_ID_BCM5718S: return "5718S";
15841  case TG3_PHY_ID_BCM57765: return "57765";
15842  case TG3_PHY_ID_BCM5719C: return "5719C";
15843  case TG3_PHY_ID_BCM5720C: return "5720C";
15844  case TG3_PHY_ID_BCM8002: return "8002/serdes";
15845  case 0: return "serdes";
15846  default: return "unknown";
15847  }
15848 }
15849 
15850 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
15851 {
15852  if (tg3_flag(tp, PCI_EXPRESS)) {
15853  strcpy(str, "PCI Express");
15854  return str;
15855  } else if (tg3_flag(tp, PCIX_MODE)) {
15856  u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
15857 
15858  strcpy(str, "PCIX:");
15859 
15860  if ((clock_ctrl == 7) ||
15863  strcat(str, "133MHz");
15864  else if (clock_ctrl == 0)
15865  strcat(str, "33MHz");
15866  else if (clock_ctrl == 2)
15867  strcat(str, "50MHz");
15868  else if (clock_ctrl == 4)
15869  strcat(str, "66MHz");
15870  else if (clock_ctrl == 6)
15871  strcat(str, "100MHz");
15872  } else {
15873  strcpy(str, "PCI:");
15874  if (tg3_flag(tp, PCI_HIGH_SPEED))
15875  strcat(str, "66MHz");
15876  else
15877  strcat(str, "33MHz");
15878  }
15879  if (tg3_flag(tp, PCI_32BIT))
15880  strcat(str, ":32-bit");
15881  else
15882  strcat(str, ":64-bit");
15883  return str;
15884 }
15885 
15886 static void __devinit tg3_init_coal(struct tg3 *tp)
15887 {
15888  struct ethtool_coalesce *ec = &tp->coal;
15889 
15890  memset(ec, 0, sizeof(*ec));
15891  ec->cmd = ETHTOOL_GCOALESCE;
15901 
15908  }
15909 
15910  if (tg3_flag(tp, 5705_PLUS)) {
15911  ec->rx_coalesce_usecs_irq = 0;
15912  ec->tx_coalesce_usecs_irq = 0;
15914  }
15915 }
15916 
15917 static int __devinit tg3_init_one(struct pci_dev *pdev,
15918  const struct pci_device_id *ent)
15919 {
15920  struct net_device *dev;
15921  struct tg3 *tp;
15922  int i, err, pm_cap;
15923  u32 sndmbx, rcvmbx, intmbx;
15924  char str[40];
15925  u64 dma_mask, persist_dma_mask;
15926  netdev_features_t features = 0;
15927 
15928  printk_once(KERN_INFO "%s\n", version);
15929 
15930  err = pci_enable_device(pdev);
15931  if (err) {
15932  dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
15933  return err;
15934  }
15935 
15936  err = pci_request_regions(pdev, DRV_MODULE_NAME);
15937  if (err) {
15938  dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
15939  goto err_out_disable_pdev;
15940  }
15941 
15942  pci_set_master(pdev);
15943 
15944  /* Find power-management capability. */
15945  pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM);
15946  if (pm_cap == 0) {
15947  dev_err(&pdev->dev,
15948  "Cannot find Power Management capability, aborting\n");
15949  err = -EIO;
15950  goto err_out_free_res;
15951  }
15952 
15953  err = pci_set_power_state(pdev, PCI_D0);
15954  if (err) {
15955  dev_err(&pdev->dev, "Transition to D0 failed, aborting\n");
15956  goto err_out_free_res;
15957  }
15958 
15959  dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS);
15960  if (!dev) {
15961  err = -ENOMEM;
15962  goto err_out_power_down;
15963  }
15964 
15965  SET_NETDEV_DEV(dev, &pdev->dev);
15966 
15967  tp = netdev_priv(dev);
15968  tp->pdev = pdev;
15969  tp->dev = dev;
15970  tp->pm_cap = pm_cap;
15971  tp->rx_mode = TG3_DEF_RX_MODE;
15972  tp->tx_mode = TG3_DEF_TX_MODE;
15973 
15974  if (tg3_debug > 0)
15975  tp->msg_enable = tg3_debug;
15976  else
15978 
15979  /* The word/byte swap controls here control register access byte
15980  * swapping. DMA data byte swapping is controlled in the GRC_MODE
15981  * setting below.
15982  */
15983  tp->misc_host_ctrl =
15984  MISC_HOST_CTRL_MASK_PCI_INT |
15988 
15989  /* The NONFRM (non-frame) byte/word swap controls take effect
15990  * on descriptor entries, anything which isn't packet data.
15991  *
15992  * The StrongARM chips on the board (one for tx, one for rx)
15993  * are running in big-endian mode.
15994  */
15997 #ifdef __BIG_ENDIAN
15999 #endif
16000  spin_lock_init(&tp->lock);
16002  INIT_WORK(&tp->reset_task, tg3_reset_task);
16003 
16004  tp->regs = pci_ioremap_bar(pdev, BAR_0);
16005  if (!tp->regs) {
16006  dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
16007  err = -ENOMEM;
16008  goto err_out_free_dev;
16009  }
16010 
16011  if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 ||
16012  tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E ||
16013  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S ||
16014  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE ||
16015  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 ||
16016  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 ||
16017  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 ||
16018  tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) {
16019  tg3_flag_set(tp, ENABLE_APE);
16020  tp->aperegs = pci_ioremap_bar(pdev, BAR_2);
16021  if (!tp->aperegs) {
16022  dev_err(&pdev->dev,
16023  "Cannot map APE registers, aborting\n");
16024  err = -ENOMEM;
16025  goto err_out_iounmap;
16026  }
16027  }
16028 
16031 
16032  dev->ethtool_ops = &tg3_ethtool_ops;
16034  dev->netdev_ops = &tg3_netdev_ops;
16035  dev->irq = pdev->irq;
16036 
16037  err = tg3_get_invariants(tp);
16038  if (err) {
16039  dev_err(&pdev->dev,
16040  "Problem fetching invariants of chip, aborting\n");
16041  goto err_out_apeunmap;
16042  }
16043 
16044  /* The EPB bridge inside 5714, 5715, and 5780 and any
16045  * device behind the EPB cannot support DMA addresses > 40-bit.
16046  * On 64-bit systems with IOMMU, use 40-bit dma_mask.
16047  * On 64-bit systems without IOMMU, use 64-bit dma_mask and
16048  * do DMA address check in tg3_start_xmit().
16049  */
16050  if (tg3_flag(tp, IS_5788))
16051  persist_dma_mask = dma_mask = DMA_BIT_MASK(32);
16052  else if (tg3_flag(tp, 40BIT_DMA_BUG)) {
16053  persist_dma_mask = dma_mask = DMA_BIT_MASK(40);
16054 #ifdef CONFIG_HIGHMEM
16055  dma_mask = DMA_BIT_MASK(64);
16056 #endif
16057  } else
16058  persist_dma_mask = dma_mask = DMA_BIT_MASK(64);
16059 
16060  /* Configure DMA attributes. */
16061  if (dma_mask > DMA_BIT_MASK(32)) {
16062  err = pci_set_dma_mask(pdev, dma_mask);
16063  if (!err) {
16064  features |= NETIF_F_HIGHDMA;
16065  err = pci_set_consistent_dma_mask(pdev,
16066  persist_dma_mask);
16067  if (err < 0) {
16068  dev_err(&pdev->dev, "Unable to obtain 64 bit "
16069  "DMA for consistent allocations\n");
16070  goto err_out_apeunmap;
16071  }
16072  }
16073  }
16074  if (err || dma_mask == DMA_BIT_MASK(32)) {
16075  err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
16076  if (err) {
16077  dev_err(&pdev->dev,
16078  "No usable DMA configuration, aborting\n");
16079  goto err_out_apeunmap;
16080  }
16081  }
16082 
16083  tg3_init_bufmgr_config(tp);
16084 
16085  features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
16086 
16087  /* 5700 B0 chips do not support checksumming correctly due
16088  * to hardware bugs.
16089  */
16090  if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) {
16091  features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
16092 
16093  if (tg3_flag(tp, 5755_PLUS))
16094  features |= NETIF_F_IPV6_CSUM;
16095  }
16096 
16097  /* TSO is on by default on chips that support hardware TSO.
16098  * Firmware TSO on older chips gives lower performance, so it
16099  * is off by default, but can be enabled using ethtool.
16100  */
16101  if ((tg3_flag(tp, HW_TSO_1) ||
16102  tg3_flag(tp, HW_TSO_2) ||
16103  tg3_flag(tp, HW_TSO_3)) &&
16104  (features & NETIF_F_IP_CSUM))
16105  features |= NETIF_F_TSO;
16106  if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) {
16107  if (features & NETIF_F_IPV6_CSUM)
16108  features |= NETIF_F_TSO6;
16109  if (tg3_flag(tp, HW_TSO_3) ||
16115  features |= NETIF_F_TSO_ECN;
16116  }
16117 
16118  dev->features |= features;
16119  dev->vlan_features |= features;
16120 
16121  /*
16122  * Add loopback capability only for a subset of devices that support
16123  * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY
16124  * loopback for the remaining devices.
16125  */
16127  !tg3_flag(tp, CPMU_PRESENT))
16128  /* Add the loopback capability */
16129  features |= NETIF_F_LOOPBACK;
16130 
16131  dev->hw_features |= features;
16132 
16133  if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 &&
16134  !tg3_flag(tp, TSO_CAPABLE) &&
16135  !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) {
16136  tg3_flag_set(tp, MAX_RXPEND_64);
16137  tp->rx_pending = 63;
16138  }
16139 
16140  err = tg3_get_device_address(tp);
16141  if (err) {
16142  dev_err(&pdev->dev,
16143  "Could not obtain valid ethernet address, aborting\n");
16144  goto err_out_apeunmap;
16145  }
16146 
16147  /*
16148  * Reset chip in case UNDI or EFI driver did not shutdown
16149  * DMA self test will enable WDMAC and we'll see (spurious)
16150  * pending DMA on the PCI bus at that point.
16151  */
16152  if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) ||
16155  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
16156  }
16157 
16158  err = tg3_test_dma(tp);
16159  if (err) {
16160  dev_err(&pdev->dev, "DMA engine test failed, aborting\n");
16161  goto err_out_apeunmap;
16162  }
16163 
16167  for (i = 0; i < tp->irq_max; i++) {
16168  struct tg3_napi *tnapi = &tp->napi[i];
16169 
16170  tnapi->tp = tp;
16172 
16173  tnapi->int_mbox = intmbx;
16174  if (i <= 4)
16175  intmbx += 0x8;
16176  else
16177  intmbx += 0x4;
16178 
16179  tnapi->consmbox = rcvmbx;
16180  tnapi->prodmbox = sndmbx;
16181 
16182  if (i)
16183  tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1);
16184  else
16185  tnapi->coal_now = HOSTCC_MODE_NOW;
16186 
16187  if (!tg3_flag(tp, SUPPORT_MSIX))
16188  break;
16189 
16190  /*
16191  * If we support MSIX, we'll be using RSS. If we're using
16192  * RSS, the first vector only handles link interrupts and the
16193  * remaining vectors handle rx and tx interrupts. Reuse the
16194  * mailbox values for the next iteration. The values we setup
16195  * above are still useful for the single vectored mode.
16196  */
16197  if (!i)
16198  continue;
16199 
16200  rcvmbx += 0x8;
16201 
16202  if (sndmbx & 0x4)
16203  sndmbx -= 0x4;
16204  else
16205  sndmbx += 0xc;
16206  }
16207 
16208  tg3_init_coal(tp);
16209 
16210  pci_set_drvdata(pdev, dev);
16211 
16212  if (tg3_flag(tp, 5717_PLUS)) {
16213  /* Resume a low-power mode */
16214  tg3_frob_aux_power(tp, false);
16215  }
16216 
16217  tg3_timer_init(tp);
16218 
16219  err = register_netdev(dev);
16220  if (err) {
16221  dev_err(&pdev->dev, "Cannot register net device, aborting\n");
16222  goto err_out_apeunmap;
16223  }
16224 
16225  netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n",
16226  tp->board_part_number,
16227  tp->pci_chip_rev_id,
16228  tg3_bus_string(tp, str),
16229  dev->dev_addr);
16230 
16231  if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
16232  struct phy_device *phydev;
16233  phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
16234  netdev_info(dev,
16235  "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n",
16236  phydev->drv->name, dev_name(&phydev->dev));
16237  } else {
16238  char *ethtype;
16239 
16241  ethtype = "10/100Base-TX";
16242  else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)
16243  ethtype = "1000Base-SX";
16244  else
16245  ethtype = "10/100/1000Base-T";
16246 
16247  netdev_info(dev, "attached PHY is %s (%s Ethernet) "
16248  "(WireSpeed[%d], EEE[%d])\n",
16249  tg3_phy_string(tp), ethtype,
16251  (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0);
16252  }
16253 
16254  netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n",
16255  (dev->features & NETIF_F_RXCSUM) != 0,
16256  tg3_flag(tp, USE_LINKCHG_REG) != 0,
16258  tg3_flag(tp, ENABLE_ASF) != 0,
16259  tg3_flag(tp, TSO_CAPABLE) != 0);
16260  netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n",
16261  tp->dma_rwctrl,
16262  pdev->dma_mask == DMA_BIT_MASK(32) ? 32 :
16263  ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64);
16264 
16265  pci_save_state(pdev);
16266 
16267  return 0;
16268 
16269 err_out_apeunmap:
16270  if (tp->aperegs) {
16271  iounmap(tp->aperegs);
16272  tp->aperegs = NULL;
16273  }
16274 
16275 err_out_iounmap:
16276  if (tp->regs) {
16277  iounmap(tp->regs);
16278  tp->regs = NULL;
16279  }
16280 
16281 err_out_free_dev:
16282  free_netdev(dev);
16283 
16284 err_out_power_down:
16286 
16287 err_out_free_res:
16288  pci_release_regions(pdev);
16289 
16290 err_out_disable_pdev:
16291  pci_disable_device(pdev);
16292  pci_set_drvdata(pdev, NULL);
16293  return err;
16294 }
16295 
16296 static void __devexit tg3_remove_one(struct pci_dev *pdev)
16297 {
16298  struct net_device *dev = pci_get_drvdata(pdev);
16299 
16300  if (dev) {
16301  struct tg3 *tp = netdev_priv(dev);
16302 
16303  release_firmware(tp->fw);
16304 
16305  tg3_reset_task_cancel(tp);
16306 
16307  if (tg3_flag(tp, USE_PHYLIB)) {
16308  tg3_phy_fini(tp);
16309  tg3_mdio_fini(tp);
16310  }
16311 
16312  unregister_netdev(dev);
16313  if (tp->aperegs) {
16314  iounmap(tp->aperegs);
16315  tp->aperegs = NULL;
16316  }
16317  if (tp->regs) {
16318  iounmap(tp->regs);
16319  tp->regs = NULL;
16320  }
16321  free_netdev(dev);
16322  pci_release_regions(pdev);
16323  pci_disable_device(pdev);
16324  pci_set_drvdata(pdev, NULL);
16325  }
16326 }
16327 
16328 #ifdef CONFIG_PM_SLEEP
16329 static int tg3_suspend(struct device *device)
16330 {
16331  struct pci_dev *pdev = to_pci_dev(device);
16332  struct net_device *dev = pci_get_drvdata(pdev);
16333  struct tg3 *tp = netdev_priv(dev);
16334  int err;
16335 
16336  if (!netif_running(dev))
16337  return 0;
16338 
16339  tg3_reset_task_cancel(tp);
16340  tg3_phy_stop(tp);
16341  tg3_netif_stop(tp);
16342 
16343  tg3_timer_stop(tp);
16344 
16345  tg3_full_lock(tp, 1);
16346  tg3_disable_ints(tp);
16347  tg3_full_unlock(tp);
16348 
16349  netif_device_detach(dev);
16350 
16351  tg3_full_lock(tp, 0);
16352  tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
16353  tg3_flag_clear(tp, INIT_COMPLETE);
16354  tg3_full_unlock(tp);
16355 
16356  err = tg3_power_down_prepare(tp);
16357  if (err) {
16358  int err2;
16359 
16360  tg3_full_lock(tp, 0);
16361 
16362  tg3_flag_set(tp, INIT_COMPLETE);
16363  err2 = tg3_restart_hw(tp, 1);
16364  if (err2)
16365  goto out;
16366 
16367  tg3_timer_start(tp);
16368 
16369  netif_device_attach(dev);
16370  tg3_netif_start(tp);
16371 
16372 out:
16373  tg3_full_unlock(tp);
16374 
16375  if (!err2)
16376  tg3_phy_start(tp);
16377  }
16378 
16379  return err;
16380 }
16381 
16382 static int tg3_resume(struct device *device)
16383 {
16384  struct pci_dev *pdev = to_pci_dev(device);
16385  struct net_device *dev = pci_get_drvdata(pdev);
16386  struct tg3 *tp = netdev_priv(dev);
16387  int err;
16388 
16389  if (!netif_running(dev))
16390  return 0;
16391 
16392  netif_device_attach(dev);
16393 
16394  tg3_full_lock(tp, 0);
16395 
16396  tg3_flag_set(tp, INIT_COMPLETE);
16397  err = tg3_restart_hw(tp, 1);
16398  if (err)
16399  goto out;
16400 
16401  tg3_timer_start(tp);
16402 
16403  tg3_netif_start(tp);
16404 
16405 out:
16406  tg3_full_unlock(tp);
16407 
16408  if (!err)
16409  tg3_phy_start(tp);
16410 
16411  return err;
16412 }
16413 
16414 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume);
16415 #define TG3_PM_OPS (&tg3_pm_ops)
16416 
16417 #else
16418 
16419 #define TG3_PM_OPS NULL
16420 
16421 #endif /* CONFIG_PM_SLEEP */
16422 
16431 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,
16432  pci_channel_state_t state)
16433 {
16434  struct net_device *netdev = pci_get_drvdata(pdev);
16435  struct tg3 *tp = netdev_priv(netdev);
16437 
16438  netdev_info(netdev, "PCI I/O error detected\n");
16439 
16440  rtnl_lock();
16441 
16442  if (!netif_running(netdev))
16443  goto done;
16444 
16445  tg3_phy_stop(tp);
16446 
16447  tg3_netif_stop(tp);
16448 
16449  tg3_timer_stop(tp);
16450 
16451  /* Want to make sure that the reset task doesn't run */
16452  tg3_reset_task_cancel(tp);
16453 
16454  netif_device_detach(netdev);
16455 
16456  /* Clean up software state, even if MMIO is blocked */
16457  tg3_full_lock(tp, 0);
16458  tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
16459  tg3_full_unlock(tp);
16460 
16461 done:
16462  if (state == pci_channel_io_perm_failure)
16464  else
16465  pci_disable_device(pdev);
16466 
16467  rtnl_unlock();
16468 
16469  return err;
16470 }
16471 
16481 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev)
16482 {
16483  struct net_device *netdev = pci_get_drvdata(pdev);
16484  struct tg3 *tp = netdev_priv(netdev);
16486  int err;
16487 
16488  rtnl_lock();
16489 
16490  if (pci_enable_device(pdev)) {
16491  netdev_err(netdev, "Cannot re-enable PCI device after reset.\n");
16492  goto done;
16493  }
16494 
16495  pci_set_master(pdev);
16496  pci_restore_state(pdev);
16497  pci_save_state(pdev);
16498 
16499  if (!netif_running(netdev)) {
16501  goto done;
16502  }
16503 
16504  err = tg3_power_up(tp);
16505  if (err)
16506  goto done;
16507 
16509 
16510 done:
16511  rtnl_unlock();
16512 
16513  return rc;
16514 }
16515 
16523 static void tg3_io_resume(struct pci_dev *pdev)
16524 {
16525  struct net_device *netdev = pci_get_drvdata(pdev);
16526  struct tg3 *tp = netdev_priv(netdev);
16527  int err;
16528 
16529  rtnl_lock();
16530 
16531  if (!netif_running(netdev))
16532  goto done;
16533 
16534  tg3_full_lock(tp, 0);
16535  tg3_flag_set(tp, INIT_COMPLETE);
16536  err = tg3_restart_hw(tp, 1);
16537  tg3_full_unlock(tp);
16538  if (err) {
16539  netdev_err(netdev, "Cannot restart hardware after reset.\n");
16540  goto done;
16541  }
16542 
16543  netif_device_attach(netdev);
16544 
16545  tg3_timer_start(tp);
16546 
16547  tg3_netif_start(tp);
16548 
16549  tg3_phy_start(tp);
16550 
16551 done:
16552  rtnl_unlock();
16553 }
16554 
16555 static const struct pci_error_handlers tg3_err_handler = {
16556  .error_detected = tg3_io_error_detected,
16557  .slot_reset = tg3_io_slot_reset,
16558  .resume = tg3_io_resume
16559 };
16560 
16561 static struct pci_driver tg3_driver = {
16562  .name = DRV_MODULE_NAME,
16563  .id_table = tg3_pci_tbl,
16564  .probe = tg3_init_one,
16565  .remove = __devexit_p(tg3_remove_one),
16566  .err_handler = &tg3_err_handler,
16567  .driver.pm = TG3_PM_OPS,
16568 };
16569 
16570 static int __init tg3_init(void)
16571 {
16572  return pci_register_driver(&tg3_driver);
16573 }
16574 
16575 static void __exit tg3_cleanup(void)
16576 {
16577  pci_unregister_driver(&tg3_driver);
16578 }
16579 
16580 module_init(tg3_init);
16581 module_exit(tg3_cleanup);