Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.1-rc7 15860 lines 424 kB view raw
1/* 2 * tg3.c: Broadcom Tigon3 ethernet driver. 3 * 4 * Copyright (C) 2001, 2002, 2003, 2004 David S. Miller (davem@redhat.com) 5 * Copyright (C) 2001, 2002, 2003 Jeff Garzik (jgarzik@pobox.com) 6 * Copyright (C) 2004 Sun Microsystems Inc. 7 * Copyright (C) 2005-2011 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 48#include <net/checksum.h> 49#include <net/ip.h> 50 51#include <asm/system.h> 52#include <linux/io.h> 53#include <asm/byteorder.h> 54#include <linux/uaccess.h> 55 56#ifdef CONFIG_SPARC 57#include <asm/idprom.h> 58#include <asm/prom.h> 59#endif 60 61#define BAR_0 0 62#define BAR_2 2 63 64#include "tg3.h" 65 66/* Functions & macros to verify TG3_FLAGS types */ 67 68static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits) 69{ 70 return test_bit(flag, bits); 71} 72 73static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits) 74{ 75 set_bit(flag, bits); 76} 77 78static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits) 79{ 80 clear_bit(flag, bits); 81} 82 83#define tg3_flag(tp, flag) \ 84 _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags) 85#define tg3_flag_set(tp, flag) \ 86 _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags) 87#define tg3_flag_clear(tp, flag) \ 88 _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags) 89 90#define DRV_MODULE_NAME "tg3" 91#define TG3_MAJ_NUM 3 92#define TG3_MIN_NUM 119 93#define DRV_MODULE_VERSION \ 94 __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM) 95#define DRV_MODULE_RELDATE "May 18, 2011" 96 97#define TG3_DEF_MAC_MODE 0 98#define TG3_DEF_RX_MODE 0 99#define TG3_DEF_TX_MODE 0 100#define TG3_DEF_MSG_ENABLE \ 101 (NETIF_MSG_DRV | \ 102 NETIF_MSG_PROBE | \ 103 NETIF_MSG_LINK | \ 104 NETIF_MSG_TIMER | \ 105 NETIF_MSG_IFDOWN | \ 106 NETIF_MSG_IFUP | \ 107 NETIF_MSG_RX_ERR | \ 108 NETIF_MSG_TX_ERR) 109 110#define TG3_GRC_LCLCTL_PWRSW_DELAY 100 111 112/* length of time before we decide the hardware is borked, 113 * and dev->tx_timeout() should be called to fix the problem 114 */ 115 116#define TG3_TX_TIMEOUT (5 * HZ) 117 118/* hardware minimum and maximum for a single frame's data payload */ 119#define TG3_MIN_MTU 60 120#define TG3_MAX_MTU(tp) \ 121 (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500) 122 123/* These numbers seem to be hard coded in the NIC firmware somehow. 124 * You can't change the ring sizes, but you can change where you place 125 * them in the NIC onboard memory. 126 */ 127#define TG3_RX_STD_RING_SIZE(tp) \ 128 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 129 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700) 130#define TG3_DEF_RX_RING_PENDING 200 131#define TG3_RX_JMB_RING_SIZE(tp) \ 132 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 133 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700) 134#define TG3_DEF_RX_JUMBO_RING_PENDING 100 135#define TG3_RSS_INDIR_TBL_SIZE 128 136 137/* Do not place this n-ring entries value into the tp struct itself, 138 * we really want to expose these constants to GCC so that modulo et 139 * al. operations are done with shifts and masks instead of with 140 * hw multiply/modulo instructions. Another solution would be to 141 * replace things like '% foo' with '& (foo - 1)'. 142 */ 143 144#define TG3_TX_RING_SIZE 512 145#define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1) 146 147#define TG3_RX_STD_RING_BYTES(tp) \ 148 (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp)) 149#define TG3_RX_JMB_RING_BYTES(tp) \ 150 (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp)) 151#define TG3_RX_RCB_RING_BYTES(tp) \ 152 (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1)) 153#define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \ 154 TG3_TX_RING_SIZE) 155#define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) 156 157#define TG3_DMA_BYTE_ENAB 64 158 159#define TG3_RX_STD_DMA_SZ 1536 160#define TG3_RX_JMB_DMA_SZ 9046 161 162#define TG3_RX_DMA_TO_MAP_SZ(x) ((x) + TG3_DMA_BYTE_ENAB) 163 164#define TG3_RX_STD_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ) 165#define TG3_RX_JMB_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ) 166 167#define TG3_RX_STD_BUFF_RING_SIZE(tp) \ 168 (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp)) 169 170#define TG3_RX_JMB_BUFF_RING_SIZE(tp) \ 171 (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp)) 172 173/* Due to a hardware bug, the 5701 can only DMA to memory addresses 174 * that are at least dword aligned when used in PCIX mode. The driver 175 * works around this bug by double copying the packet. This workaround 176 * is built into the normal double copy length check for efficiency. 177 * 178 * However, the double copy is only necessary on those architectures 179 * where unaligned memory accesses are inefficient. For those architectures 180 * where unaligned memory accesses incur little penalty, we can reintegrate 181 * the 5701 in the normal rx path. Doing so saves a device structure 182 * dereference by hardcoding the double copy threshold in place. 183 */ 184#define TG3_RX_COPY_THRESHOLD 256 185#if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) 186 #define TG3_RX_COPY_THRESH(tp) TG3_RX_COPY_THRESHOLD 187#else 188 #define TG3_RX_COPY_THRESH(tp) ((tp)->rx_copy_thresh) 189#endif 190 191/* minimum number of free TX descriptors required to wake up TX process */ 192#define TG3_TX_WAKEUP_THRESH(tnapi) ((tnapi)->tx_pending / 4) 193#define TG3_TX_BD_DMA_MAX 4096 194 195#define TG3_RAW_IP_ALIGN 2 196 197#define TG3_FW_UPDATE_TIMEOUT_SEC 5 198 199#define FIRMWARE_TG3 "tigon/tg3.bin" 200#define FIRMWARE_TG3TSO "tigon/tg3_tso.bin" 201#define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin" 202 203static char version[] __devinitdata = 204 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")"; 205 206MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)"); 207MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver"); 208MODULE_LICENSE("GPL"); 209MODULE_VERSION(DRV_MODULE_VERSION); 210MODULE_FIRMWARE(FIRMWARE_TG3); 211MODULE_FIRMWARE(FIRMWARE_TG3TSO); 212MODULE_FIRMWARE(FIRMWARE_TG3TSO5); 213 214static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */ 215module_param(tg3_debug, int, 0); 216MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value"); 217 218static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = { 219 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)}, 220 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)}, 221 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)}, 222 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)}, 223 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)}, 224 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)}, 225 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)}, 226 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)}, 227 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)}, 228 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)}, 229 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)}, 230 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)}, 231 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)}, 232 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)}, 233 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)}, 234 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)}, 235 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)}, 236 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)}, 237 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)}, 238 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)}, 239 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)}, 240 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)}, 241 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)}, 242 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)}, 243 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)}, 244 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)}, 245 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)}, 246 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)}, 247 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)}, 248 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)}, 249 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)}, 250 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)}, 251 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)}, 252 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)}, 253 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)}, 254 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)}, 255 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)}, 256 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)}, 257 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)}, 258 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)}, 259 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)}, 260 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)}, 261 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)}, 262 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)}, 263 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)}, 264 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)}, 265 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)}, 266 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)}, 267 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)}, 268 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)}, 269 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)}, 270 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)}, 271 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)}, 272 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)}, 273 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)}, 274 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)}, 275 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)}, 276 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)}, 277 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)}, 278 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)}, 279 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)}, 280 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790)}, 281 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)}, 282 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)}, 283 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)}, 284 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)}, 285 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)}, 286 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)}, 287 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)}, 288 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791)}, 289 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795)}, 290 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)}, 291 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)}, 292 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)}, 293 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)}, 294 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)}, 295 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)}, 296 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)}, 297 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)}, 298 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)}, 299 {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */ 300 {} 301}; 302 303MODULE_DEVICE_TABLE(pci, tg3_pci_tbl); 304 305static const struct { 306 const char string[ETH_GSTRING_LEN]; 307} ethtool_stats_keys[] = { 308 { "rx_octets" }, 309 { "rx_fragments" }, 310 { "rx_ucast_packets" }, 311 { "rx_mcast_packets" }, 312 { "rx_bcast_packets" }, 313 { "rx_fcs_errors" }, 314 { "rx_align_errors" }, 315 { "rx_xon_pause_rcvd" }, 316 { "rx_xoff_pause_rcvd" }, 317 { "rx_mac_ctrl_rcvd" }, 318 { "rx_xoff_entered" }, 319 { "rx_frame_too_long_errors" }, 320 { "rx_jabbers" }, 321 { "rx_undersize_packets" }, 322 { "rx_in_length_errors" }, 323 { "rx_out_length_errors" }, 324 { "rx_64_or_less_octet_packets" }, 325 { "rx_65_to_127_octet_packets" }, 326 { "rx_128_to_255_octet_packets" }, 327 { "rx_256_to_511_octet_packets" }, 328 { "rx_512_to_1023_octet_packets" }, 329 { "rx_1024_to_1522_octet_packets" }, 330 { "rx_1523_to_2047_octet_packets" }, 331 { "rx_2048_to_4095_octet_packets" }, 332 { "rx_4096_to_8191_octet_packets" }, 333 { "rx_8192_to_9022_octet_packets" }, 334 335 { "tx_octets" }, 336 { "tx_collisions" }, 337 338 { "tx_xon_sent" }, 339 { "tx_xoff_sent" }, 340 { "tx_flow_control" }, 341 { "tx_mac_errors" }, 342 { "tx_single_collisions" }, 343 { "tx_mult_collisions" }, 344 { "tx_deferred" }, 345 { "tx_excessive_collisions" }, 346 { "tx_late_collisions" }, 347 { "tx_collide_2times" }, 348 { "tx_collide_3times" }, 349 { "tx_collide_4times" }, 350 { "tx_collide_5times" }, 351 { "tx_collide_6times" }, 352 { "tx_collide_7times" }, 353 { "tx_collide_8times" }, 354 { "tx_collide_9times" }, 355 { "tx_collide_10times" }, 356 { "tx_collide_11times" }, 357 { "tx_collide_12times" }, 358 { "tx_collide_13times" }, 359 { "tx_collide_14times" }, 360 { "tx_collide_15times" }, 361 { "tx_ucast_packets" }, 362 { "tx_mcast_packets" }, 363 { "tx_bcast_packets" }, 364 { "tx_carrier_sense_errors" }, 365 { "tx_discards" }, 366 { "tx_errors" }, 367 368 { "dma_writeq_full" }, 369 { "dma_write_prioq_full" }, 370 { "rxbds_empty" }, 371 { "rx_discards" }, 372 { "rx_errors" }, 373 { "rx_threshold_hit" }, 374 375 { "dma_readq_full" }, 376 { "dma_read_prioq_full" }, 377 { "tx_comp_queue_full" }, 378 379 { "ring_set_send_prod_index" }, 380 { "ring_status_update" }, 381 { "nic_irqs" }, 382 { "nic_avoided_irqs" }, 383 { "nic_tx_threshold_hit" }, 384 385 { "mbuf_lwm_thresh_hit" }, 386}; 387 388#define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys) 389 390 391static const struct { 392 const char string[ETH_GSTRING_LEN]; 393} ethtool_test_keys[] = { 394 { "nvram test (online) " }, 395 { "link test (online) " }, 396 { "register test (offline)" }, 397 { "memory test (offline)" }, 398 { "loopback test (offline)" }, 399 { "interrupt test (offline)" }, 400}; 401 402#define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys) 403 404 405static void tg3_write32(struct tg3 *tp, u32 off, u32 val) 406{ 407 writel(val, tp->regs + off); 408} 409 410static u32 tg3_read32(struct tg3 *tp, u32 off) 411{ 412 return readl(tp->regs + off); 413} 414 415static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val) 416{ 417 writel(val, tp->aperegs + off); 418} 419 420static u32 tg3_ape_read32(struct tg3 *tp, u32 off) 421{ 422 return readl(tp->aperegs + off); 423} 424 425static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) 426{ 427 unsigned long flags; 428 429 spin_lock_irqsave(&tp->indirect_lock, flags); 430 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 431 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 432 spin_unlock_irqrestore(&tp->indirect_lock, flags); 433} 434 435static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val) 436{ 437 writel(val, tp->regs + off); 438 readl(tp->regs + off); 439} 440 441static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off) 442{ 443 unsigned long flags; 444 u32 val; 445 446 spin_lock_irqsave(&tp->indirect_lock, flags); 447 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 448 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 449 spin_unlock_irqrestore(&tp->indirect_lock, flags); 450 return val; 451} 452 453static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val) 454{ 455 unsigned long flags; 456 457 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) { 458 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX + 459 TG3_64BIT_REG_LOW, val); 460 return; 461 } 462 if (off == TG3_RX_STD_PROD_IDX_REG) { 463 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX + 464 TG3_64BIT_REG_LOW, val); 465 return; 466 } 467 468 spin_lock_irqsave(&tp->indirect_lock, flags); 469 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 470 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 471 spin_unlock_irqrestore(&tp->indirect_lock, flags); 472 473 /* In indirect mode when disabling interrupts, we also need 474 * to clear the interrupt bit in the GRC local ctrl register. 475 */ 476 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) && 477 (val == 0x1)) { 478 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL, 479 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT); 480 } 481} 482 483static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off) 484{ 485 unsigned long flags; 486 u32 val; 487 488 spin_lock_irqsave(&tp->indirect_lock, flags); 489 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 490 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 491 spin_unlock_irqrestore(&tp->indirect_lock, flags); 492 return val; 493} 494 495/* usec_wait specifies the wait time in usec when writing to certain registers 496 * where it is unsafe to read back the register without some delay. 497 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power. 498 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed. 499 */ 500static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait) 501{ 502 if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND)) 503 /* Non-posted methods */ 504 tp->write32(tp, off, val); 505 else { 506 /* Posted method */ 507 tg3_write32(tp, off, val); 508 if (usec_wait) 509 udelay(usec_wait); 510 tp->read32(tp, off); 511 } 512 /* Wait again after the read for the posted method to guarantee that 513 * the wait time is met. 514 */ 515 if (usec_wait) 516 udelay(usec_wait); 517} 518 519static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) 520{ 521 tp->write32_mbox(tp, off, val); 522 if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND)) 523 tp->read32_mbox(tp, off); 524} 525 526static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val) 527{ 528 void __iomem *mbox = tp->regs + off; 529 writel(val, mbox); 530 if (tg3_flag(tp, TXD_MBOX_HWBUG)) 531 writel(val, mbox); 532 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 533 readl(mbox); 534} 535 536static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off) 537{ 538 return readl(tp->regs + off + GRCMBOX_BASE); 539} 540 541static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val) 542{ 543 writel(val, tp->regs + off + GRCMBOX_BASE); 544} 545 546#define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val) 547#define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val)) 548#define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val) 549#define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val) 550#define tr32_mailbox(reg) tp->read32_mbox(tp, reg) 551 552#define tw32(reg, val) tp->write32(tp, reg, val) 553#define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0) 554#define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us)) 555#define tr32(reg) tp->read32(tp, reg) 556 557static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) 558{ 559 unsigned long flags; 560 561 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 && 562 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) 563 return; 564 565 spin_lock_irqsave(&tp->indirect_lock, flags); 566 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 567 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 568 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 569 570 /* Always leave this as zero. */ 571 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 572 } else { 573 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 574 tw32_f(TG3PCI_MEM_WIN_DATA, val); 575 576 /* Always leave this as zero. */ 577 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 578 } 579 spin_unlock_irqrestore(&tp->indirect_lock, flags); 580} 581 582static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) 583{ 584 unsigned long flags; 585 586 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 && 587 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) { 588 *val = 0; 589 return; 590 } 591 592 spin_lock_irqsave(&tp->indirect_lock, flags); 593 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 594 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 595 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 596 597 /* Always leave this as zero. */ 598 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 599 } else { 600 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 601 *val = tr32(TG3PCI_MEM_WIN_DATA); 602 603 /* Always leave this as zero. */ 604 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 605 } 606 spin_unlock_irqrestore(&tp->indirect_lock, flags); 607} 608 609static void tg3_ape_lock_init(struct tg3 *tp) 610{ 611 int i; 612 u32 regbase, bit; 613 614 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 615 regbase = TG3_APE_LOCK_GRANT; 616 else 617 regbase = TG3_APE_PER_LOCK_GRANT; 618 619 /* Make sure the driver hasn't any stale locks. */ 620 for (i = 0; i < 8; i++) { 621 if (i == TG3_APE_LOCK_GPIO) 622 continue; 623 tg3_ape_write32(tp, regbase + 4 * i, APE_LOCK_GRANT_DRIVER); 624 } 625 626 /* Clear the correct bit of the GPIO lock too. */ 627 if (!tp->pci_fn) 628 bit = APE_LOCK_GRANT_DRIVER; 629 else 630 bit = 1 << tp->pci_fn; 631 632 tg3_ape_write32(tp, regbase + 4 * TG3_APE_LOCK_GPIO, bit); 633} 634 635static int tg3_ape_lock(struct tg3 *tp, int locknum) 636{ 637 int i, off; 638 int ret = 0; 639 u32 status, req, gnt, bit; 640 641 if (!tg3_flag(tp, ENABLE_APE)) 642 return 0; 643 644 switch (locknum) { 645 case TG3_APE_LOCK_GPIO: 646 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 647 return 0; 648 case TG3_APE_LOCK_GRC: 649 case TG3_APE_LOCK_MEM: 650 break; 651 default: 652 return -EINVAL; 653 } 654 655 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) { 656 req = TG3_APE_LOCK_REQ; 657 gnt = TG3_APE_LOCK_GRANT; 658 } else { 659 req = TG3_APE_PER_LOCK_REQ; 660 gnt = TG3_APE_PER_LOCK_GRANT; 661 } 662 663 off = 4 * locknum; 664 665 if (locknum != TG3_APE_LOCK_GPIO || !tp->pci_fn) 666 bit = APE_LOCK_REQ_DRIVER; 667 else 668 bit = 1 << tp->pci_fn; 669 670 tg3_ape_write32(tp, req + off, bit); 671 672 /* Wait for up to 1 millisecond to acquire lock. */ 673 for (i = 0; i < 100; i++) { 674 status = tg3_ape_read32(tp, gnt + off); 675 if (status == bit) 676 break; 677 udelay(10); 678 } 679 680 if (status != bit) { 681 /* Revoke the lock request. */ 682 tg3_ape_write32(tp, gnt + off, bit); 683 ret = -EBUSY; 684 } 685 686 return ret; 687} 688 689static void tg3_ape_unlock(struct tg3 *tp, int locknum) 690{ 691 u32 gnt, bit; 692 693 if (!tg3_flag(tp, ENABLE_APE)) 694 return; 695 696 switch (locknum) { 697 case TG3_APE_LOCK_GPIO: 698 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 699 return; 700 case TG3_APE_LOCK_GRC: 701 case TG3_APE_LOCK_MEM: 702 break; 703 default: 704 return; 705 } 706 707 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 708 gnt = TG3_APE_LOCK_GRANT; 709 else 710 gnt = TG3_APE_PER_LOCK_GRANT; 711 712 if (locknum != TG3_APE_LOCK_GPIO || !tp->pci_fn) 713 bit = APE_LOCK_GRANT_DRIVER; 714 else 715 bit = 1 << tp->pci_fn; 716 717 tg3_ape_write32(tp, gnt + 4 * locknum, bit); 718} 719 720static void tg3_disable_ints(struct tg3 *tp) 721{ 722 int i; 723 724 tw32(TG3PCI_MISC_HOST_CTRL, 725 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT)); 726 for (i = 0; i < tp->irq_max; i++) 727 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001); 728} 729 730static void tg3_enable_ints(struct tg3 *tp) 731{ 732 int i; 733 734 tp->irq_sync = 0; 735 wmb(); 736 737 tw32(TG3PCI_MISC_HOST_CTRL, 738 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT)); 739 740 tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE; 741 for (i = 0; i < tp->irq_cnt; i++) { 742 struct tg3_napi *tnapi = &tp->napi[i]; 743 744 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 745 if (tg3_flag(tp, 1SHOT_MSI)) 746 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 747 748 tp->coal_now |= tnapi->coal_now; 749 } 750 751 /* Force an initial interrupt */ 752 if (!tg3_flag(tp, TAGGED_STATUS) && 753 (tp->napi[0].hw_status->status & SD_STATUS_UPDATED)) 754 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 755 else 756 tw32(HOSTCC_MODE, tp->coal_now); 757 758 tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now); 759} 760 761static inline unsigned int tg3_has_work(struct tg3_napi *tnapi) 762{ 763 struct tg3 *tp = tnapi->tp; 764 struct tg3_hw_status *sblk = tnapi->hw_status; 765 unsigned int work_exists = 0; 766 767 /* check for phy events */ 768 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 769 if (sblk->status & SD_STATUS_LINK_CHG) 770 work_exists = 1; 771 } 772 /* check for RX/TX work to do */ 773 if (sblk->idx[0].tx_consumer != tnapi->tx_cons || 774 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 775 work_exists = 1; 776 777 return work_exists; 778} 779 780/* tg3_int_reenable 781 * similar to tg3_enable_ints, but it accurately determines whether there 782 * is new work pending and can return without flushing the PIO write 783 * which reenables interrupts 784 */ 785static void tg3_int_reenable(struct tg3_napi *tnapi) 786{ 787 struct tg3 *tp = tnapi->tp; 788 789 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 790 mmiowb(); 791 792 /* When doing tagged status, this work check is unnecessary. 793 * The last_tag we write above tells the chip which piece of 794 * work we've completed. 795 */ 796 if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi)) 797 tw32(HOSTCC_MODE, tp->coalesce_mode | 798 HOSTCC_MODE_ENABLE | tnapi->coal_now); 799} 800 801static void tg3_switch_clocks(struct tg3 *tp) 802{ 803 u32 clock_ctrl; 804 u32 orig_clock_ctrl; 805 806 if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS)) 807 return; 808 809 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); 810 811 orig_clock_ctrl = clock_ctrl; 812 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | 813 CLOCK_CTRL_CLKRUN_OENABLE | 814 0x1f); 815 tp->pci_clock_ctrl = clock_ctrl; 816 817 if (tg3_flag(tp, 5705_PLUS)) { 818 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) { 819 tw32_wait_f(TG3PCI_CLOCK_CTRL, 820 clock_ctrl | CLOCK_CTRL_625_CORE, 40); 821 } 822 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { 823 tw32_wait_f(TG3PCI_CLOCK_CTRL, 824 clock_ctrl | 825 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK), 826 40); 827 tw32_wait_f(TG3PCI_CLOCK_CTRL, 828 clock_ctrl | (CLOCK_CTRL_ALTCLK), 829 40); 830 } 831 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40); 832} 833 834#define PHY_BUSY_LOOPS 5000 835 836static int tg3_readphy(struct tg3 *tp, int reg, u32 *val) 837{ 838 u32 frame_val; 839 unsigned int loops; 840 int ret; 841 842 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 843 tw32_f(MAC_MI_MODE, 844 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 845 udelay(80); 846 } 847 848 *val = 0x0; 849 850 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & 851 MI_COM_PHY_ADDR_MASK); 852 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 853 MI_COM_REG_ADDR_MASK); 854 frame_val |= (MI_COM_CMD_READ | MI_COM_START); 855 856 tw32_f(MAC_MI_COM, frame_val); 857 858 loops = PHY_BUSY_LOOPS; 859 while (loops != 0) { 860 udelay(10); 861 frame_val = tr32(MAC_MI_COM); 862 863 if ((frame_val & MI_COM_BUSY) == 0) { 864 udelay(5); 865 frame_val = tr32(MAC_MI_COM); 866 break; 867 } 868 loops -= 1; 869 } 870 871 ret = -EBUSY; 872 if (loops != 0) { 873 *val = frame_val & MI_COM_DATA_MASK; 874 ret = 0; 875 } 876 877 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 878 tw32_f(MAC_MI_MODE, tp->mi_mode); 879 udelay(80); 880 } 881 882 return ret; 883} 884 885static int tg3_writephy(struct tg3 *tp, int reg, u32 val) 886{ 887 u32 frame_val; 888 unsigned int loops; 889 int ret; 890 891 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 892 (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL)) 893 return 0; 894 895 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 896 tw32_f(MAC_MI_MODE, 897 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 898 udelay(80); 899 } 900 901 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & 902 MI_COM_PHY_ADDR_MASK); 903 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 904 MI_COM_REG_ADDR_MASK); 905 frame_val |= (val & MI_COM_DATA_MASK); 906 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START); 907 908 tw32_f(MAC_MI_COM, frame_val); 909 910 loops = PHY_BUSY_LOOPS; 911 while (loops != 0) { 912 udelay(10); 913 frame_val = tr32(MAC_MI_COM); 914 if ((frame_val & MI_COM_BUSY) == 0) { 915 udelay(5); 916 frame_val = tr32(MAC_MI_COM); 917 break; 918 } 919 loops -= 1; 920 } 921 922 ret = -EBUSY; 923 if (loops != 0) 924 ret = 0; 925 926 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 927 tw32_f(MAC_MI_MODE, tp->mi_mode); 928 udelay(80); 929 } 930 931 return ret; 932} 933 934static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val) 935{ 936 int err; 937 938 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 939 if (err) 940 goto done; 941 942 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 943 if (err) 944 goto done; 945 946 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 947 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 948 if (err) 949 goto done; 950 951 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val); 952 953done: 954 return err; 955} 956 957static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val) 958{ 959 int err; 960 961 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 962 if (err) 963 goto done; 964 965 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 966 if (err) 967 goto done; 968 969 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 970 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 971 if (err) 972 goto done; 973 974 err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val); 975 976done: 977 return err; 978} 979 980static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val) 981{ 982 int err; 983 984 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 985 if (!err) 986 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val); 987 988 return err; 989} 990 991static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val) 992{ 993 int err; 994 995 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 996 if (!err) 997 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val); 998 999 return err; 1000} 1001 1002static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val) 1003{ 1004 int err; 1005 1006 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 1007 (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) | 1008 MII_TG3_AUXCTL_SHDWSEL_MISC); 1009 if (!err) 1010 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val); 1011 1012 return err; 1013} 1014 1015static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set) 1016{ 1017 if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC) 1018 set |= MII_TG3_AUXCTL_MISC_WREN; 1019 1020 return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg); 1021} 1022 1023#define TG3_PHY_AUXCTL_SMDSP_ENABLE(tp) \ 1024 tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \ 1025 MII_TG3_AUXCTL_ACTL_SMDSP_ENA | \ 1026 MII_TG3_AUXCTL_ACTL_TX_6DB) 1027 1028#define TG3_PHY_AUXCTL_SMDSP_DISABLE(tp) \ 1029 tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \ 1030 MII_TG3_AUXCTL_ACTL_TX_6DB); 1031 1032static int tg3_bmcr_reset(struct tg3 *tp) 1033{ 1034 u32 phy_control; 1035 int limit, err; 1036 1037 /* OK, reset it, and poll the BMCR_RESET bit until it 1038 * clears or we time out. 1039 */ 1040 phy_control = BMCR_RESET; 1041 err = tg3_writephy(tp, MII_BMCR, phy_control); 1042 if (err != 0) 1043 return -EBUSY; 1044 1045 limit = 5000; 1046 while (limit--) { 1047 err = tg3_readphy(tp, MII_BMCR, &phy_control); 1048 if (err != 0) 1049 return -EBUSY; 1050 1051 if ((phy_control & BMCR_RESET) == 0) { 1052 udelay(40); 1053 break; 1054 } 1055 udelay(10); 1056 } 1057 if (limit < 0) 1058 return -EBUSY; 1059 1060 return 0; 1061} 1062 1063static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg) 1064{ 1065 struct tg3 *tp = bp->priv; 1066 u32 val; 1067 1068 spin_lock_bh(&tp->lock); 1069 1070 if (tg3_readphy(tp, reg, &val)) 1071 val = -EIO; 1072 1073 spin_unlock_bh(&tp->lock); 1074 1075 return val; 1076} 1077 1078static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val) 1079{ 1080 struct tg3 *tp = bp->priv; 1081 u32 ret = 0; 1082 1083 spin_lock_bh(&tp->lock); 1084 1085 if (tg3_writephy(tp, reg, val)) 1086 ret = -EIO; 1087 1088 spin_unlock_bh(&tp->lock); 1089 1090 return ret; 1091} 1092 1093static int tg3_mdio_reset(struct mii_bus *bp) 1094{ 1095 return 0; 1096} 1097 1098static void tg3_mdio_config_5785(struct tg3 *tp) 1099{ 1100 u32 val; 1101 struct phy_device *phydev; 1102 1103 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1104 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1105 case PHY_ID_BCM50610: 1106 case PHY_ID_BCM50610M: 1107 val = MAC_PHYCFG2_50610_LED_MODES; 1108 break; 1109 case PHY_ID_BCMAC131: 1110 val = MAC_PHYCFG2_AC131_LED_MODES; 1111 break; 1112 case PHY_ID_RTL8211C: 1113 val = MAC_PHYCFG2_RTL8211C_LED_MODES; 1114 break; 1115 case PHY_ID_RTL8201E: 1116 val = MAC_PHYCFG2_RTL8201E_LED_MODES; 1117 break; 1118 default: 1119 return; 1120 } 1121 1122 if (phydev->interface != PHY_INTERFACE_MODE_RGMII) { 1123 tw32(MAC_PHYCFG2, val); 1124 1125 val = tr32(MAC_PHYCFG1); 1126 val &= ~(MAC_PHYCFG1_RGMII_INT | 1127 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK); 1128 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT; 1129 tw32(MAC_PHYCFG1, val); 1130 1131 return; 1132 } 1133 1134 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) 1135 val |= MAC_PHYCFG2_EMODE_MASK_MASK | 1136 MAC_PHYCFG2_FMODE_MASK_MASK | 1137 MAC_PHYCFG2_GMODE_MASK_MASK | 1138 MAC_PHYCFG2_ACT_MASK_MASK | 1139 MAC_PHYCFG2_QUAL_MASK_MASK | 1140 MAC_PHYCFG2_INBAND_ENABLE; 1141 1142 tw32(MAC_PHYCFG2, val); 1143 1144 val = tr32(MAC_PHYCFG1); 1145 val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK | 1146 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN); 1147 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1148 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1149 val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC; 1150 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1151 val |= MAC_PHYCFG1_RGMII_SND_STAT_EN; 1152 } 1153 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT | 1154 MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV; 1155 tw32(MAC_PHYCFG1, val); 1156 1157 val = tr32(MAC_EXT_RGMII_MODE); 1158 val &= ~(MAC_RGMII_MODE_RX_INT_B | 1159 MAC_RGMII_MODE_RX_QUALITY | 1160 MAC_RGMII_MODE_RX_ACTIVITY | 1161 MAC_RGMII_MODE_RX_ENG_DET | 1162 MAC_RGMII_MODE_TX_ENABLE | 1163 MAC_RGMII_MODE_TX_LOWPWR | 1164 MAC_RGMII_MODE_TX_RESET); 1165 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1166 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1167 val |= MAC_RGMII_MODE_RX_INT_B | 1168 MAC_RGMII_MODE_RX_QUALITY | 1169 MAC_RGMII_MODE_RX_ACTIVITY | 1170 MAC_RGMII_MODE_RX_ENG_DET; 1171 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1172 val |= MAC_RGMII_MODE_TX_ENABLE | 1173 MAC_RGMII_MODE_TX_LOWPWR | 1174 MAC_RGMII_MODE_TX_RESET; 1175 } 1176 tw32(MAC_EXT_RGMII_MODE, val); 1177} 1178 1179static void tg3_mdio_start(struct tg3 *tp) 1180{ 1181 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL; 1182 tw32_f(MAC_MI_MODE, tp->mi_mode); 1183 udelay(80); 1184 1185 if (tg3_flag(tp, MDIOBUS_INITED) && 1186 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 1187 tg3_mdio_config_5785(tp); 1188} 1189 1190static int tg3_mdio_init(struct tg3 *tp) 1191{ 1192 int i; 1193 u32 reg; 1194 struct phy_device *phydev; 1195 1196 if (tg3_flag(tp, 5717_PLUS)) { 1197 u32 is_serdes; 1198 1199 tp->phy_addr = tp->pci_fn + 1; 1200 1201 if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) 1202 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; 1203 else 1204 is_serdes = tr32(TG3_CPMU_PHY_STRAP) & 1205 TG3_CPMU_PHY_STRAP_IS_SERDES; 1206 if (is_serdes) 1207 tp->phy_addr += 7; 1208 } else 1209 tp->phy_addr = TG3_PHY_MII_ADDR; 1210 1211 tg3_mdio_start(tp); 1212 1213 if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED)) 1214 return 0; 1215 1216 tp->mdio_bus = mdiobus_alloc(); 1217 if (tp->mdio_bus == NULL) 1218 return -ENOMEM; 1219 1220 tp->mdio_bus->name = "tg3 mdio bus"; 1221 snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x", 1222 (tp->pdev->bus->number << 8) | tp->pdev->devfn); 1223 tp->mdio_bus->priv = tp; 1224 tp->mdio_bus->parent = &tp->pdev->dev; 1225 tp->mdio_bus->read = &tg3_mdio_read; 1226 tp->mdio_bus->write = &tg3_mdio_write; 1227 tp->mdio_bus->reset = &tg3_mdio_reset; 1228 tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR); 1229 tp->mdio_bus->irq = &tp->mdio_irq[0]; 1230 1231 for (i = 0; i < PHY_MAX_ADDR; i++) 1232 tp->mdio_bus->irq[i] = PHY_POLL; 1233 1234 /* The bus registration will look for all the PHYs on the mdio bus. 1235 * Unfortunately, it does not ensure the PHY is powered up before 1236 * accessing the PHY ID registers. A chip reset is the 1237 * quickest way to bring the device back to an operational state.. 1238 */ 1239 if (tg3_readphy(tp, MII_BMCR, &reg) || (reg & BMCR_PDOWN)) 1240 tg3_bmcr_reset(tp); 1241 1242 i = mdiobus_register(tp->mdio_bus); 1243 if (i) { 1244 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i); 1245 mdiobus_free(tp->mdio_bus); 1246 return i; 1247 } 1248 1249 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1250 1251 if (!phydev || !phydev->drv) { 1252 dev_warn(&tp->pdev->dev, "No PHY devices\n"); 1253 mdiobus_unregister(tp->mdio_bus); 1254 mdiobus_free(tp->mdio_bus); 1255 return -ENODEV; 1256 } 1257 1258 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1259 case PHY_ID_BCM57780: 1260 phydev->interface = PHY_INTERFACE_MODE_GMII; 1261 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1262 break; 1263 case PHY_ID_BCM50610: 1264 case PHY_ID_BCM50610M: 1265 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE | 1266 PHY_BRCM_RX_REFCLK_UNUSED | 1267 PHY_BRCM_DIS_TXCRXC_NOENRGY | 1268 PHY_BRCM_AUTO_PWRDWN_ENABLE; 1269 if (tg3_flag(tp, RGMII_INBAND_DISABLE)) 1270 phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE; 1271 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1272 phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE; 1273 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1274 phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE; 1275 /* fallthru */ 1276 case PHY_ID_RTL8211C: 1277 phydev->interface = PHY_INTERFACE_MODE_RGMII; 1278 break; 1279 case PHY_ID_RTL8201E: 1280 case PHY_ID_BCMAC131: 1281 phydev->interface = PHY_INTERFACE_MODE_MII; 1282 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1283 tp->phy_flags |= TG3_PHYFLG_IS_FET; 1284 break; 1285 } 1286 1287 tg3_flag_set(tp, MDIOBUS_INITED); 1288 1289 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 1290 tg3_mdio_config_5785(tp); 1291 1292 return 0; 1293} 1294 1295static void tg3_mdio_fini(struct tg3 *tp) 1296{ 1297 if (tg3_flag(tp, MDIOBUS_INITED)) { 1298 tg3_flag_clear(tp, MDIOBUS_INITED); 1299 mdiobus_unregister(tp->mdio_bus); 1300 mdiobus_free(tp->mdio_bus); 1301 } 1302} 1303 1304/* tp->lock is held. */ 1305static inline void tg3_generate_fw_event(struct tg3 *tp) 1306{ 1307 u32 val; 1308 1309 val = tr32(GRC_RX_CPU_EVENT); 1310 val |= GRC_RX_CPU_DRIVER_EVENT; 1311 tw32_f(GRC_RX_CPU_EVENT, val); 1312 1313 tp->last_event_jiffies = jiffies; 1314} 1315 1316#define TG3_FW_EVENT_TIMEOUT_USEC 2500 1317 1318/* tp->lock is held. */ 1319static void tg3_wait_for_event_ack(struct tg3 *tp) 1320{ 1321 int i; 1322 unsigned int delay_cnt; 1323 long time_remain; 1324 1325 /* If enough time has passed, no wait is necessary. */ 1326 time_remain = (long)(tp->last_event_jiffies + 1 + 1327 usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) - 1328 (long)jiffies; 1329 if (time_remain < 0) 1330 return; 1331 1332 /* Check if we can shorten the wait time. */ 1333 delay_cnt = jiffies_to_usecs(time_remain); 1334 if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC) 1335 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC; 1336 delay_cnt = (delay_cnt >> 3) + 1; 1337 1338 for (i = 0; i < delay_cnt; i++) { 1339 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT)) 1340 break; 1341 udelay(8); 1342 } 1343} 1344 1345/* tp->lock is held. */ 1346static void tg3_ump_link_report(struct tg3 *tp) 1347{ 1348 u32 reg; 1349 u32 val; 1350 1351 if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF)) 1352 return; 1353 1354 tg3_wait_for_event_ack(tp); 1355 1356 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE); 1357 1358 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14); 1359 1360 val = 0; 1361 if (!tg3_readphy(tp, MII_BMCR, &reg)) 1362 val = reg << 16; 1363 if (!tg3_readphy(tp, MII_BMSR, &reg)) 1364 val |= (reg & 0xffff); 1365 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, val); 1366 1367 val = 0; 1368 if (!tg3_readphy(tp, MII_ADVERTISE, &reg)) 1369 val = reg << 16; 1370 if (!tg3_readphy(tp, MII_LPA, &reg)) 1371 val |= (reg & 0xffff); 1372 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 4, val); 1373 1374 val = 0; 1375 if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) { 1376 if (!tg3_readphy(tp, MII_CTRL1000, &reg)) 1377 val = reg << 16; 1378 if (!tg3_readphy(tp, MII_STAT1000, &reg)) 1379 val |= (reg & 0xffff); 1380 } 1381 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 8, val); 1382 1383 if (!tg3_readphy(tp, MII_PHYADDR, &reg)) 1384 val = reg << 16; 1385 else 1386 val = 0; 1387 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 12, val); 1388 1389 tg3_generate_fw_event(tp); 1390} 1391 1392static void tg3_link_report(struct tg3 *tp) 1393{ 1394 if (!netif_carrier_ok(tp->dev)) { 1395 netif_info(tp, link, tp->dev, "Link is down\n"); 1396 tg3_ump_link_report(tp); 1397 } else if (netif_msg_link(tp)) { 1398 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n", 1399 (tp->link_config.active_speed == SPEED_1000 ? 1400 1000 : 1401 (tp->link_config.active_speed == SPEED_100 ? 1402 100 : 10)), 1403 (tp->link_config.active_duplex == DUPLEX_FULL ? 1404 "full" : "half")); 1405 1406 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n", 1407 (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ? 1408 "on" : "off", 1409 (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ? 1410 "on" : "off"); 1411 1412 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 1413 netdev_info(tp->dev, "EEE is %s\n", 1414 tp->setlpicnt ? "enabled" : "disabled"); 1415 1416 tg3_ump_link_report(tp); 1417 } 1418} 1419 1420static u16 tg3_advert_flowctrl_1000T(u8 flow_ctrl) 1421{ 1422 u16 miireg; 1423 1424 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX)) 1425 miireg = ADVERTISE_PAUSE_CAP; 1426 else if (flow_ctrl & FLOW_CTRL_TX) 1427 miireg = ADVERTISE_PAUSE_ASYM; 1428 else if (flow_ctrl & FLOW_CTRL_RX) 1429 miireg = ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; 1430 else 1431 miireg = 0; 1432 1433 return miireg; 1434} 1435 1436static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl) 1437{ 1438 u16 miireg; 1439 1440 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX)) 1441 miireg = ADVERTISE_1000XPAUSE; 1442 else if (flow_ctrl & FLOW_CTRL_TX) 1443 miireg = ADVERTISE_1000XPSE_ASYM; 1444 else if (flow_ctrl & FLOW_CTRL_RX) 1445 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM; 1446 else 1447 miireg = 0; 1448 1449 return miireg; 1450} 1451 1452static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv) 1453{ 1454 u8 cap = 0; 1455 1456 if (lcladv & ADVERTISE_1000XPAUSE) { 1457 if (lcladv & ADVERTISE_1000XPSE_ASYM) { 1458 if (rmtadv & LPA_1000XPAUSE) 1459 cap = FLOW_CTRL_TX | FLOW_CTRL_RX; 1460 else if (rmtadv & LPA_1000XPAUSE_ASYM) 1461 cap = FLOW_CTRL_RX; 1462 } else { 1463 if (rmtadv & LPA_1000XPAUSE) 1464 cap = FLOW_CTRL_TX | FLOW_CTRL_RX; 1465 } 1466 } else if (lcladv & ADVERTISE_1000XPSE_ASYM) { 1467 if ((rmtadv & LPA_1000XPAUSE) && (rmtadv & LPA_1000XPAUSE_ASYM)) 1468 cap = FLOW_CTRL_TX; 1469 } 1470 1471 return cap; 1472} 1473 1474static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv) 1475{ 1476 u8 autoneg; 1477 u8 flowctrl = 0; 1478 u32 old_rx_mode = tp->rx_mode; 1479 u32 old_tx_mode = tp->tx_mode; 1480 1481 if (tg3_flag(tp, USE_PHYLIB)) 1482 autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg; 1483 else 1484 autoneg = tp->link_config.autoneg; 1485 1486 if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) { 1487 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 1488 flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv); 1489 else 1490 flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 1491 } else 1492 flowctrl = tp->link_config.flowctrl; 1493 1494 tp->link_config.active_flowctrl = flowctrl; 1495 1496 if (flowctrl & FLOW_CTRL_RX) 1497 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE; 1498 else 1499 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE; 1500 1501 if (old_rx_mode != tp->rx_mode) 1502 tw32_f(MAC_RX_MODE, tp->rx_mode); 1503 1504 if (flowctrl & FLOW_CTRL_TX) 1505 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE; 1506 else 1507 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE; 1508 1509 if (old_tx_mode != tp->tx_mode) 1510 tw32_f(MAC_TX_MODE, tp->tx_mode); 1511} 1512 1513static void tg3_adjust_link(struct net_device *dev) 1514{ 1515 u8 oldflowctrl, linkmesg = 0; 1516 u32 mac_mode, lcl_adv, rmt_adv; 1517 struct tg3 *tp = netdev_priv(dev); 1518 struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1519 1520 spin_lock_bh(&tp->lock); 1521 1522 mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK | 1523 MAC_MODE_HALF_DUPLEX); 1524 1525 oldflowctrl = tp->link_config.active_flowctrl; 1526 1527 if (phydev->link) { 1528 lcl_adv = 0; 1529 rmt_adv = 0; 1530 1531 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10) 1532 mac_mode |= MAC_MODE_PORT_MODE_MII; 1533 else if (phydev->speed == SPEED_1000 || 1534 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785) 1535 mac_mode |= MAC_MODE_PORT_MODE_GMII; 1536 else 1537 mac_mode |= MAC_MODE_PORT_MODE_MII; 1538 1539 if (phydev->duplex == DUPLEX_HALF) 1540 mac_mode |= MAC_MODE_HALF_DUPLEX; 1541 else { 1542 lcl_adv = tg3_advert_flowctrl_1000T( 1543 tp->link_config.flowctrl); 1544 1545 if (phydev->pause) 1546 rmt_adv = LPA_PAUSE_CAP; 1547 if (phydev->asym_pause) 1548 rmt_adv |= LPA_PAUSE_ASYM; 1549 } 1550 1551 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 1552 } else 1553 mac_mode |= MAC_MODE_PORT_MODE_GMII; 1554 1555 if (mac_mode != tp->mac_mode) { 1556 tp->mac_mode = mac_mode; 1557 tw32_f(MAC_MODE, tp->mac_mode); 1558 udelay(40); 1559 } 1560 1561 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 1562 if (phydev->speed == SPEED_10) 1563 tw32(MAC_MI_STAT, 1564 MAC_MI_STAT_10MBPS_MODE | 1565 MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 1566 else 1567 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 1568 } 1569 1570 if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF) 1571 tw32(MAC_TX_LENGTHS, 1572 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 1573 (6 << TX_LENGTHS_IPG_SHIFT) | 1574 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT))); 1575 else 1576 tw32(MAC_TX_LENGTHS, 1577 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 1578 (6 << TX_LENGTHS_IPG_SHIFT) | 1579 (32 << TX_LENGTHS_SLOT_TIME_SHIFT))); 1580 1581 if ((phydev->link && tp->link_config.active_speed == SPEED_INVALID) || 1582 (!phydev->link && tp->link_config.active_speed != SPEED_INVALID) || 1583 phydev->speed != tp->link_config.active_speed || 1584 phydev->duplex != tp->link_config.active_duplex || 1585 oldflowctrl != tp->link_config.active_flowctrl) 1586 linkmesg = 1; 1587 1588 tp->link_config.active_speed = phydev->speed; 1589 tp->link_config.active_duplex = phydev->duplex; 1590 1591 spin_unlock_bh(&tp->lock); 1592 1593 if (linkmesg) 1594 tg3_link_report(tp); 1595} 1596 1597static int tg3_phy_init(struct tg3 *tp) 1598{ 1599 struct phy_device *phydev; 1600 1601 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) 1602 return 0; 1603 1604 /* Bring the PHY back to a known state. */ 1605 tg3_bmcr_reset(tp); 1606 1607 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1608 1609 /* Attach the MAC to the PHY. */ 1610 phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link, 1611 phydev->dev_flags, phydev->interface); 1612 if (IS_ERR(phydev)) { 1613 dev_err(&tp->pdev->dev, "Could not attach to PHY\n"); 1614 return PTR_ERR(phydev); 1615 } 1616 1617 /* Mask with MAC supported features. */ 1618 switch (phydev->interface) { 1619 case PHY_INTERFACE_MODE_GMII: 1620 case PHY_INTERFACE_MODE_RGMII: 1621 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 1622 phydev->supported &= (PHY_GBIT_FEATURES | 1623 SUPPORTED_Pause | 1624 SUPPORTED_Asym_Pause); 1625 break; 1626 } 1627 /* fallthru */ 1628 case PHY_INTERFACE_MODE_MII: 1629 phydev->supported &= (PHY_BASIC_FEATURES | 1630 SUPPORTED_Pause | 1631 SUPPORTED_Asym_Pause); 1632 break; 1633 default: 1634 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 1635 return -EINVAL; 1636 } 1637 1638 tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; 1639 1640 phydev->advertising = phydev->supported; 1641 1642 return 0; 1643} 1644 1645static void tg3_phy_start(struct tg3 *tp) 1646{ 1647 struct phy_device *phydev; 1648 1649 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 1650 return; 1651 1652 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1653 1654 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 1655 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 1656 phydev->speed = tp->link_config.orig_speed; 1657 phydev->duplex = tp->link_config.orig_duplex; 1658 phydev->autoneg = tp->link_config.orig_autoneg; 1659 phydev->advertising = tp->link_config.orig_advertising; 1660 } 1661 1662 phy_start(phydev); 1663 1664 phy_start_aneg(phydev); 1665} 1666 1667static void tg3_phy_stop(struct tg3 *tp) 1668{ 1669 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 1670 return; 1671 1672 phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 1673} 1674 1675static void tg3_phy_fini(struct tg3 *tp) 1676{ 1677 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 1678 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 1679 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED; 1680 } 1681} 1682 1683static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable) 1684{ 1685 u32 phytest; 1686 1687 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 1688 u32 phy; 1689 1690 tg3_writephy(tp, MII_TG3_FET_TEST, 1691 phytest | MII_TG3_FET_SHADOW_EN); 1692 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) { 1693 if (enable) 1694 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD; 1695 else 1696 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD; 1697 tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy); 1698 } 1699 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 1700 } 1701} 1702 1703static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable) 1704{ 1705 u32 reg; 1706 1707 if (!tg3_flag(tp, 5705_PLUS) || 1708 (tg3_flag(tp, 5717_PLUS) && 1709 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) 1710 return; 1711 1712 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 1713 tg3_phy_fet_toggle_apd(tp, enable); 1714 return; 1715 } 1716 1717 reg = MII_TG3_MISC_SHDW_WREN | 1718 MII_TG3_MISC_SHDW_SCR5_SEL | 1719 MII_TG3_MISC_SHDW_SCR5_LPED | 1720 MII_TG3_MISC_SHDW_SCR5_DLPTLM | 1721 MII_TG3_MISC_SHDW_SCR5_SDTL | 1722 MII_TG3_MISC_SHDW_SCR5_C125OE; 1723 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable) 1724 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD; 1725 1726 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg); 1727 1728 1729 reg = MII_TG3_MISC_SHDW_WREN | 1730 MII_TG3_MISC_SHDW_APD_SEL | 1731 MII_TG3_MISC_SHDW_APD_WKTM_84MS; 1732 if (enable) 1733 reg |= MII_TG3_MISC_SHDW_APD_ENABLE; 1734 1735 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg); 1736} 1737 1738static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable) 1739{ 1740 u32 phy; 1741 1742 if (!tg3_flag(tp, 5705_PLUS) || 1743 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 1744 return; 1745 1746 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 1747 u32 ephy; 1748 1749 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) { 1750 u32 reg = MII_TG3_FET_SHDW_MISCCTRL; 1751 1752 tg3_writephy(tp, MII_TG3_FET_TEST, 1753 ephy | MII_TG3_FET_SHADOW_EN); 1754 if (!tg3_readphy(tp, reg, &phy)) { 1755 if (enable) 1756 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX; 1757 else 1758 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX; 1759 tg3_writephy(tp, reg, phy); 1760 } 1761 tg3_writephy(tp, MII_TG3_FET_TEST, ephy); 1762 } 1763 } else { 1764 int ret; 1765 1766 ret = tg3_phy_auxctl_read(tp, 1767 MII_TG3_AUXCTL_SHDWSEL_MISC, &phy); 1768 if (!ret) { 1769 if (enable) 1770 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 1771 else 1772 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 1773 tg3_phy_auxctl_write(tp, 1774 MII_TG3_AUXCTL_SHDWSEL_MISC, phy); 1775 } 1776 } 1777} 1778 1779static void tg3_phy_set_wirespeed(struct tg3 *tp) 1780{ 1781 int ret; 1782 u32 val; 1783 1784 if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) 1785 return; 1786 1787 ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val); 1788 if (!ret) 1789 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, 1790 val | MII_TG3_AUXCTL_MISC_WIRESPD_EN); 1791} 1792 1793static void tg3_phy_apply_otp(struct tg3 *tp) 1794{ 1795 u32 otp, phy; 1796 1797 if (!tp->phy_otp) 1798 return; 1799 1800 otp = tp->phy_otp; 1801 1802 if (TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) 1803 return; 1804 1805 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT); 1806 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT; 1807 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy); 1808 1809 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) | 1810 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT); 1811 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy); 1812 1813 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT); 1814 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ; 1815 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy); 1816 1817 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT); 1818 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy); 1819 1820 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT); 1821 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy); 1822 1823 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) | 1824 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT); 1825 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy); 1826 1827 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 1828} 1829 1830static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up) 1831{ 1832 u32 val; 1833 1834 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 1835 return; 1836 1837 tp->setlpicnt = 0; 1838 1839 if (tp->link_config.autoneg == AUTONEG_ENABLE && 1840 current_link_up == 1 && 1841 tp->link_config.active_duplex == DUPLEX_FULL && 1842 (tp->link_config.active_speed == SPEED_100 || 1843 tp->link_config.active_speed == SPEED_1000)) { 1844 u32 eeectl; 1845 1846 if (tp->link_config.active_speed == SPEED_1000) 1847 eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US; 1848 else 1849 eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US; 1850 1851 tw32(TG3_CPMU_EEE_CTRL, eeectl); 1852 1853 tg3_phy_cl45_read(tp, MDIO_MMD_AN, 1854 TG3_CL45_D7_EEERES_STAT, &val); 1855 1856 if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || 1857 val == TG3_CL45_D7_EEERES_STAT_LP_100TX) 1858 tp->setlpicnt = 2; 1859 } 1860 1861 if (!tp->setlpicnt) { 1862 if (current_link_up == 1 && 1863 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 1864 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000); 1865 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 1866 } 1867 1868 val = tr32(TG3_CPMU_EEE_MODE); 1869 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE); 1870 } 1871} 1872 1873static void tg3_phy_eee_enable(struct tg3 *tp) 1874{ 1875 u32 val; 1876 1877 if (tp->link_config.active_speed == SPEED_1000 && 1878 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 1879 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 1880 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) && 1881 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 1882 val = MII_TG3_DSP_TAP26_ALNOKO | 1883 MII_TG3_DSP_TAP26_RMRXSTO; 1884 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 1885 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 1886 } 1887 1888 val = tr32(TG3_CPMU_EEE_MODE); 1889 tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE); 1890} 1891 1892static int tg3_wait_macro_done(struct tg3 *tp) 1893{ 1894 int limit = 100; 1895 1896 while (limit--) { 1897 u32 tmp32; 1898 1899 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) { 1900 if ((tmp32 & 0x1000) == 0) 1901 break; 1902 } 1903 } 1904 if (limit < 0) 1905 return -EBUSY; 1906 1907 return 0; 1908} 1909 1910static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp) 1911{ 1912 static const u32 test_pat[4][6] = { 1913 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 }, 1914 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 }, 1915 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 }, 1916 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 } 1917 }; 1918 int chan; 1919 1920 for (chan = 0; chan < 4; chan++) { 1921 int i; 1922 1923 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 1924 (chan * 0x2000) | 0x0200); 1925 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 1926 1927 for (i = 0; i < 6; i++) 1928 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 1929 test_pat[chan][i]); 1930 1931 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 1932 if (tg3_wait_macro_done(tp)) { 1933 *resetp = 1; 1934 return -EBUSY; 1935 } 1936 1937 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 1938 (chan * 0x2000) | 0x0200); 1939 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082); 1940 if (tg3_wait_macro_done(tp)) { 1941 *resetp = 1; 1942 return -EBUSY; 1943 } 1944 1945 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802); 1946 if (tg3_wait_macro_done(tp)) { 1947 *resetp = 1; 1948 return -EBUSY; 1949 } 1950 1951 for (i = 0; i < 6; i += 2) { 1952 u32 low, high; 1953 1954 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) || 1955 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) || 1956 tg3_wait_macro_done(tp)) { 1957 *resetp = 1; 1958 return -EBUSY; 1959 } 1960 low &= 0x7fff; 1961 high &= 0x000f; 1962 if (low != test_pat[chan][i] || 1963 high != test_pat[chan][i+1]) { 1964 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b); 1965 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001); 1966 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005); 1967 1968 return -EBUSY; 1969 } 1970 } 1971 } 1972 1973 return 0; 1974} 1975 1976static int tg3_phy_reset_chanpat(struct tg3 *tp) 1977{ 1978 int chan; 1979 1980 for (chan = 0; chan < 4; chan++) { 1981 int i; 1982 1983 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 1984 (chan * 0x2000) | 0x0200); 1985 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 1986 for (i = 0; i < 6; i++) 1987 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000); 1988 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 1989 if (tg3_wait_macro_done(tp)) 1990 return -EBUSY; 1991 } 1992 1993 return 0; 1994} 1995 1996static int tg3_phy_reset_5703_4_5(struct tg3 *tp) 1997{ 1998 u32 reg32, phy9_orig; 1999 int retries, do_phy_reset, err; 2000 2001 retries = 10; 2002 do_phy_reset = 1; 2003 do { 2004 if (do_phy_reset) { 2005 err = tg3_bmcr_reset(tp); 2006 if (err) 2007 return err; 2008 do_phy_reset = 0; 2009 } 2010 2011 /* Disable transmitter and interrupt. */ 2012 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) 2013 continue; 2014 2015 reg32 |= 0x3000; 2016 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2017 2018 /* Set full-duplex, 1000 mbps. */ 2019 tg3_writephy(tp, MII_BMCR, 2020 BMCR_FULLDPLX | BMCR_SPEED1000); 2021 2022 /* Set to master mode. */ 2023 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig)) 2024 continue; 2025 2026 tg3_writephy(tp, MII_CTRL1000, 2027 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 2028 2029 err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp); 2030 if (err) 2031 return err; 2032 2033 /* Block the PHY control access. */ 2034 tg3_phydsp_write(tp, 0x8005, 0x0800); 2035 2036 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset); 2037 if (!err) 2038 break; 2039 } while (--retries); 2040 2041 err = tg3_phy_reset_chanpat(tp); 2042 if (err) 2043 return err; 2044 2045 tg3_phydsp_write(tp, 0x8005, 0x0000); 2046 2047 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200); 2048 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000); 2049 2050 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2051 2052 tg3_writephy(tp, MII_CTRL1000, phy9_orig); 2053 2054 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &reg32)) { 2055 reg32 &= ~0x3000; 2056 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2057 } else if (!err) 2058 err = -EBUSY; 2059 2060 return err; 2061} 2062 2063/* This will reset the tigon3 PHY if there is no valid 2064 * link unless the FORCE argument is non-zero. 2065 */ 2066static int tg3_phy_reset(struct tg3 *tp) 2067{ 2068 u32 val, cpmuctrl; 2069 int err; 2070 2071 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2072 val = tr32(GRC_MISC_CFG); 2073 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ); 2074 udelay(40); 2075 } 2076 err = tg3_readphy(tp, MII_BMSR, &val); 2077 err |= tg3_readphy(tp, MII_BMSR, &val); 2078 if (err != 0) 2079 return -EBUSY; 2080 2081 if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) { 2082 netif_carrier_off(tp->dev); 2083 tg3_link_report(tp); 2084 } 2085 2086 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 2087 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 2088 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 2089 err = tg3_phy_reset_5703_4_5(tp); 2090 if (err) 2091 return err; 2092 goto out; 2093 } 2094 2095 cpmuctrl = 0; 2096 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 2097 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) { 2098 cpmuctrl = tr32(TG3_CPMU_CTRL); 2099 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) 2100 tw32(TG3_CPMU_CTRL, 2101 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY); 2102 } 2103 2104 err = tg3_bmcr_reset(tp); 2105 if (err) 2106 return err; 2107 2108 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) { 2109 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz; 2110 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val); 2111 2112 tw32(TG3_CPMU_CTRL, cpmuctrl); 2113 } 2114 2115 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || 2116 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) { 2117 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2118 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) == 2119 CPMU_LSPD_1000MB_MACCLK_12_5) { 2120 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2121 udelay(40); 2122 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2123 } 2124 } 2125 2126 if (tg3_flag(tp, 5717_PLUS) && 2127 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) 2128 return 0; 2129 2130 tg3_phy_apply_otp(tp); 2131 2132 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 2133 tg3_phy_toggle_apd(tp, true); 2134 else 2135 tg3_phy_toggle_apd(tp, false); 2136 2137out: 2138 if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) && 2139 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2140 tg3_phydsp_write(tp, 0x201f, 0x2aaa); 2141 tg3_phydsp_write(tp, 0x000a, 0x0323); 2142 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2143 } 2144 2145 if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) { 2146 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2147 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2148 } 2149 2150 if (tp->phy_flags & TG3_PHYFLG_BER_BUG) { 2151 if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2152 tg3_phydsp_write(tp, 0x000a, 0x310b); 2153 tg3_phydsp_write(tp, 0x201f, 0x9506); 2154 tg3_phydsp_write(tp, 0x401f, 0x14e2); 2155 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2156 } 2157 } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) { 2158 if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2159 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a); 2160 if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) { 2161 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b); 2162 tg3_writephy(tp, MII_TG3_TEST1, 2163 MII_TG3_TEST1_TRIM_EN | 0x4); 2164 } else 2165 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b); 2166 2167 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2168 } 2169 } 2170 2171 /* Set Extended packet length bit (bit 14) on all chips that */ 2172 /* support jumbo frames */ 2173 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2174 /* Cannot do read-modify-write on 5401 */ 2175 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 2176 } else if (tg3_flag(tp, JUMBO_CAPABLE)) { 2177 /* Set bit 14 with read-modify-write to preserve other bits */ 2178 err = tg3_phy_auxctl_read(tp, 2179 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2180 if (!err) 2181 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2182 val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN); 2183 } 2184 2185 /* Set phy register 0x10 bit 0 to high fifo elasticity to support 2186 * jumbo frames transmission. 2187 */ 2188 if (tg3_flag(tp, JUMBO_CAPABLE)) { 2189 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val)) 2190 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2191 val | MII_TG3_EXT_CTRL_FIFO_ELASTIC); 2192 } 2193 2194 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2195 /* adjust output voltage */ 2196 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); 2197 } 2198 2199 tg3_phy_toggle_automdix(tp, 1); 2200 tg3_phy_set_wirespeed(tp); 2201 return 0; 2202} 2203 2204#define TG3_GPIO_MSG_DRVR_PRES 0x00000001 2205#define TG3_GPIO_MSG_NEED_VAUX 0x00000002 2206#define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \ 2207 TG3_GPIO_MSG_NEED_VAUX) 2208#define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \ 2209 ((TG3_GPIO_MSG_DRVR_PRES << 0) | \ 2210 (TG3_GPIO_MSG_DRVR_PRES << 4) | \ 2211 (TG3_GPIO_MSG_DRVR_PRES << 8) | \ 2212 (TG3_GPIO_MSG_DRVR_PRES << 12)) 2213 2214#define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \ 2215 ((TG3_GPIO_MSG_NEED_VAUX << 0) | \ 2216 (TG3_GPIO_MSG_NEED_VAUX << 4) | \ 2217 (TG3_GPIO_MSG_NEED_VAUX << 8) | \ 2218 (TG3_GPIO_MSG_NEED_VAUX << 12)) 2219 2220static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat) 2221{ 2222 u32 status, shift; 2223 2224 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2225 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 2226 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG); 2227 else 2228 status = tr32(TG3_CPMU_DRV_STATUS); 2229 2230 shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn; 2231 status &= ~(TG3_GPIO_MSG_MASK << shift); 2232 status |= (newstat << shift); 2233 2234 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2235 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 2236 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status); 2237 else 2238 tw32(TG3_CPMU_DRV_STATUS, status); 2239 2240 return status >> TG3_APE_GPIO_MSG_SHIFT; 2241} 2242 2243static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp) 2244{ 2245 if (!tg3_flag(tp, IS_NIC)) 2246 return 0; 2247 2248 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2249 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2250 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 2251 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2252 return -EIO; 2253 2254 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES); 2255 2256 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2257 TG3_GRC_LCLCTL_PWRSW_DELAY); 2258 2259 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2260 } else { 2261 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2262 TG3_GRC_LCLCTL_PWRSW_DELAY); 2263 } 2264 2265 return 0; 2266} 2267 2268static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp) 2269{ 2270 u32 grc_local_ctrl; 2271 2272 if (!tg3_flag(tp, IS_NIC) || 2273 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2274 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) 2275 return; 2276 2277 grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1; 2278 2279 tw32_wait_f(GRC_LOCAL_CTRL, 2280 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2281 TG3_GRC_LCLCTL_PWRSW_DELAY); 2282 2283 tw32_wait_f(GRC_LOCAL_CTRL, 2284 grc_local_ctrl, 2285 TG3_GRC_LCLCTL_PWRSW_DELAY); 2286 2287 tw32_wait_f(GRC_LOCAL_CTRL, 2288 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2289 TG3_GRC_LCLCTL_PWRSW_DELAY); 2290} 2291 2292static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp) 2293{ 2294 if (!tg3_flag(tp, IS_NIC)) 2295 return; 2296 2297 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2298 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 2299 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2300 (GRC_LCLCTRL_GPIO_OE0 | 2301 GRC_LCLCTRL_GPIO_OE1 | 2302 GRC_LCLCTRL_GPIO_OE2 | 2303 GRC_LCLCTRL_GPIO_OUTPUT0 | 2304 GRC_LCLCTRL_GPIO_OUTPUT1), 2305 TG3_GRC_LCLCTL_PWRSW_DELAY); 2306 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 2307 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 2308 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */ 2309 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | 2310 GRC_LCLCTRL_GPIO_OE1 | 2311 GRC_LCLCTRL_GPIO_OE2 | 2312 GRC_LCLCTRL_GPIO_OUTPUT0 | 2313 GRC_LCLCTRL_GPIO_OUTPUT1 | 2314 tp->grc_local_ctrl; 2315 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2316 TG3_GRC_LCLCTL_PWRSW_DELAY); 2317 2318 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2; 2319 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2320 TG3_GRC_LCLCTL_PWRSW_DELAY); 2321 2322 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0; 2323 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2324 TG3_GRC_LCLCTL_PWRSW_DELAY); 2325 } else { 2326 u32 no_gpio2; 2327 u32 grc_local_ctrl = 0; 2328 2329 /* Workaround to prevent overdrawing Amps. */ 2330 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 2331 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 2332 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2333 grc_local_ctrl, 2334 TG3_GRC_LCLCTL_PWRSW_DELAY); 2335 } 2336 2337 /* On 5753 and variants, GPIO2 cannot be used. */ 2338 no_gpio2 = tp->nic_sram_data_cfg & 2339 NIC_SRAM_DATA_CFG_NO_GPIO2; 2340 2341 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 2342 GRC_LCLCTRL_GPIO_OE1 | 2343 GRC_LCLCTRL_GPIO_OE2 | 2344 GRC_LCLCTRL_GPIO_OUTPUT1 | 2345 GRC_LCLCTRL_GPIO_OUTPUT2; 2346 if (no_gpio2) { 2347 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 | 2348 GRC_LCLCTRL_GPIO_OUTPUT2); 2349 } 2350 tw32_wait_f(GRC_LOCAL_CTRL, 2351 tp->grc_local_ctrl | grc_local_ctrl, 2352 TG3_GRC_LCLCTL_PWRSW_DELAY); 2353 2354 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0; 2355 2356 tw32_wait_f(GRC_LOCAL_CTRL, 2357 tp->grc_local_ctrl | grc_local_ctrl, 2358 TG3_GRC_LCLCTL_PWRSW_DELAY); 2359 2360 if (!no_gpio2) { 2361 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2; 2362 tw32_wait_f(GRC_LOCAL_CTRL, 2363 tp->grc_local_ctrl | grc_local_ctrl, 2364 TG3_GRC_LCLCTL_PWRSW_DELAY); 2365 } 2366 } 2367} 2368 2369static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable) 2370{ 2371 u32 msg = 0; 2372 2373 /* Serialize power state transitions */ 2374 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2375 return; 2376 2377 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable) 2378 msg = TG3_GPIO_MSG_NEED_VAUX; 2379 2380 msg = tg3_set_function_status(tp, msg); 2381 2382 if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK) 2383 goto done; 2384 2385 if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK) 2386 tg3_pwrsrc_switch_to_vaux(tp); 2387 else 2388 tg3_pwrsrc_die_with_vmain(tp); 2389 2390done: 2391 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2392} 2393 2394static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol) 2395{ 2396 bool need_vaux = false; 2397 2398 /* The GPIOs do something completely different on 57765. */ 2399 if (!tg3_flag(tp, IS_NIC) || 2400 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 2401 return; 2402 2403 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2404 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2405 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 2406 tg3_frob_aux_power_5717(tp, include_wol ? 2407 tg3_flag(tp, WOL_ENABLE) != 0 : 0); 2408 return; 2409 } 2410 2411 if (tp->pdev_peer && tp->pdev_peer != tp->pdev) { 2412 struct net_device *dev_peer; 2413 2414 dev_peer = pci_get_drvdata(tp->pdev_peer); 2415 2416 /* remove_one() may have been run on the peer. */ 2417 if (dev_peer) { 2418 struct tg3 *tp_peer = netdev_priv(dev_peer); 2419 2420 if (tg3_flag(tp_peer, INIT_COMPLETE)) 2421 return; 2422 2423 if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) || 2424 tg3_flag(tp_peer, ENABLE_ASF)) 2425 need_vaux = true; 2426 } 2427 } 2428 2429 if ((include_wol && tg3_flag(tp, WOL_ENABLE)) || 2430 tg3_flag(tp, ENABLE_ASF)) 2431 need_vaux = true; 2432 2433 if (need_vaux) 2434 tg3_pwrsrc_switch_to_vaux(tp); 2435 else 2436 tg3_pwrsrc_die_with_vmain(tp); 2437} 2438 2439static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed) 2440{ 2441 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2) 2442 return 1; 2443 else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) { 2444 if (speed != SPEED_10) 2445 return 1; 2446 } else if (speed == SPEED_10) 2447 return 1; 2448 2449 return 0; 2450} 2451 2452static int tg3_setup_phy(struct tg3 *, int); 2453 2454#define RESET_KIND_SHUTDOWN 0 2455#define RESET_KIND_INIT 1 2456#define RESET_KIND_SUSPEND 2 2457 2458static void tg3_write_sig_post_reset(struct tg3 *, int); 2459static int tg3_halt_cpu(struct tg3 *, u32); 2460 2461static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) 2462{ 2463 u32 val; 2464 2465 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 2466 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 2467 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL); 2468 u32 serdes_cfg = tr32(MAC_SERDES_CFG); 2469 2470 sg_dig_ctrl |= 2471 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET; 2472 tw32(SG_DIG_CTRL, sg_dig_ctrl); 2473 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15)); 2474 } 2475 return; 2476 } 2477 2478 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2479 tg3_bmcr_reset(tp); 2480 val = tr32(GRC_MISC_CFG); 2481 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ); 2482 udelay(40); 2483 return; 2484 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2485 u32 phytest; 2486 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2487 u32 phy; 2488 2489 tg3_writephy(tp, MII_ADVERTISE, 0); 2490 tg3_writephy(tp, MII_BMCR, 2491 BMCR_ANENABLE | BMCR_ANRESTART); 2492 2493 tg3_writephy(tp, MII_TG3_FET_TEST, 2494 phytest | MII_TG3_FET_SHADOW_EN); 2495 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) { 2496 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD; 2497 tg3_writephy(tp, 2498 MII_TG3_FET_SHDW_AUXMODE4, 2499 phy); 2500 } 2501 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2502 } 2503 return; 2504 } else if (do_low_power) { 2505 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2506 MII_TG3_EXT_CTRL_FORCE_LED_OFF); 2507 2508 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR | 2509 MII_TG3_AUXCTL_PCTL_SPR_ISOLATE | 2510 MII_TG3_AUXCTL_PCTL_VREG_11V; 2511 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val); 2512 } 2513 2514 /* The PHY should not be powered down on some chips because 2515 * of bugs. 2516 */ 2517 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2518 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 2519 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 && 2520 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) 2521 return; 2522 2523 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || 2524 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) { 2525 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2526 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2527 val |= CPMU_LSPD_1000MB_MACCLK_12_5; 2528 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2529 } 2530 2531 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN); 2532} 2533 2534/* tp->lock is held. */ 2535static int tg3_nvram_lock(struct tg3 *tp) 2536{ 2537 if (tg3_flag(tp, NVRAM)) { 2538 int i; 2539 2540 if (tp->nvram_lock_cnt == 0) { 2541 tw32(NVRAM_SWARB, SWARB_REQ_SET1); 2542 for (i = 0; i < 8000; i++) { 2543 if (tr32(NVRAM_SWARB) & SWARB_GNT1) 2544 break; 2545 udelay(20); 2546 } 2547 if (i == 8000) { 2548 tw32(NVRAM_SWARB, SWARB_REQ_CLR1); 2549 return -ENODEV; 2550 } 2551 } 2552 tp->nvram_lock_cnt++; 2553 } 2554 return 0; 2555} 2556 2557/* tp->lock is held. */ 2558static void tg3_nvram_unlock(struct tg3 *tp) 2559{ 2560 if (tg3_flag(tp, NVRAM)) { 2561 if (tp->nvram_lock_cnt > 0) 2562 tp->nvram_lock_cnt--; 2563 if (tp->nvram_lock_cnt == 0) 2564 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1); 2565 } 2566} 2567 2568/* tp->lock is held. */ 2569static void tg3_enable_nvram_access(struct tg3 *tp) 2570{ 2571 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 2572 u32 nvaccess = tr32(NVRAM_ACCESS); 2573 2574 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); 2575 } 2576} 2577 2578/* tp->lock is held. */ 2579static void tg3_disable_nvram_access(struct tg3 *tp) 2580{ 2581 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 2582 u32 nvaccess = tr32(NVRAM_ACCESS); 2583 2584 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); 2585 } 2586} 2587 2588static int tg3_nvram_read_using_eeprom(struct tg3 *tp, 2589 u32 offset, u32 *val) 2590{ 2591 u32 tmp; 2592 int i; 2593 2594 if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0) 2595 return -EINVAL; 2596 2597 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK | 2598 EEPROM_ADDR_DEVID_MASK | 2599 EEPROM_ADDR_READ); 2600 tw32(GRC_EEPROM_ADDR, 2601 tmp | 2602 (0 << EEPROM_ADDR_DEVID_SHIFT) | 2603 ((offset << EEPROM_ADDR_ADDR_SHIFT) & 2604 EEPROM_ADDR_ADDR_MASK) | 2605 EEPROM_ADDR_READ | EEPROM_ADDR_START); 2606 2607 for (i = 0; i < 1000; i++) { 2608 tmp = tr32(GRC_EEPROM_ADDR); 2609 2610 if (tmp & EEPROM_ADDR_COMPLETE) 2611 break; 2612 msleep(1); 2613 } 2614 if (!(tmp & EEPROM_ADDR_COMPLETE)) 2615 return -EBUSY; 2616 2617 tmp = tr32(GRC_EEPROM_DATA); 2618 2619 /* 2620 * The data will always be opposite the native endian 2621 * format. Perform a blind byteswap to compensate. 2622 */ 2623 *val = swab32(tmp); 2624 2625 return 0; 2626} 2627 2628#define NVRAM_CMD_TIMEOUT 10000 2629 2630static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd) 2631{ 2632 int i; 2633 2634 tw32(NVRAM_CMD, nvram_cmd); 2635 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) { 2636 udelay(10); 2637 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) { 2638 udelay(10); 2639 break; 2640 } 2641 } 2642 2643 if (i == NVRAM_CMD_TIMEOUT) 2644 return -EBUSY; 2645 2646 return 0; 2647} 2648 2649static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr) 2650{ 2651 if (tg3_flag(tp, NVRAM) && 2652 tg3_flag(tp, NVRAM_BUFFERED) && 2653 tg3_flag(tp, FLASH) && 2654 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 2655 (tp->nvram_jedecnum == JEDEC_ATMEL)) 2656 2657 addr = ((addr / tp->nvram_pagesize) << 2658 ATMEL_AT45DB0X1B_PAGE_POS) + 2659 (addr % tp->nvram_pagesize); 2660 2661 return addr; 2662} 2663 2664static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr) 2665{ 2666 if (tg3_flag(tp, NVRAM) && 2667 tg3_flag(tp, NVRAM_BUFFERED) && 2668 tg3_flag(tp, FLASH) && 2669 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 2670 (tp->nvram_jedecnum == JEDEC_ATMEL)) 2671 2672 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) * 2673 tp->nvram_pagesize) + 2674 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1)); 2675 2676 return addr; 2677} 2678 2679/* NOTE: Data read in from NVRAM is byteswapped according to 2680 * the byteswapping settings for all other register accesses. 2681 * tg3 devices are BE devices, so on a BE machine, the data 2682 * returned will be exactly as it is seen in NVRAM. On a LE 2683 * machine, the 32-bit value will be byteswapped. 2684 */ 2685static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) 2686{ 2687 int ret; 2688 2689 if (!tg3_flag(tp, NVRAM)) 2690 return tg3_nvram_read_using_eeprom(tp, offset, val); 2691 2692 offset = tg3_nvram_phys_addr(tp, offset); 2693 2694 if (offset > NVRAM_ADDR_MSK) 2695 return -EINVAL; 2696 2697 ret = tg3_nvram_lock(tp); 2698 if (ret) 2699 return ret; 2700 2701 tg3_enable_nvram_access(tp); 2702 2703 tw32(NVRAM_ADDR, offset); 2704 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO | 2705 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE); 2706 2707 if (ret == 0) 2708 *val = tr32(NVRAM_RDDATA); 2709 2710 tg3_disable_nvram_access(tp); 2711 2712 tg3_nvram_unlock(tp); 2713 2714 return ret; 2715} 2716 2717/* Ensures NVRAM data is in bytestream format. */ 2718static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val) 2719{ 2720 u32 v; 2721 int res = tg3_nvram_read(tp, offset, &v); 2722 if (!res) 2723 *val = cpu_to_be32(v); 2724 return res; 2725} 2726 2727/* tp->lock is held. */ 2728static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1) 2729{ 2730 u32 addr_high, addr_low; 2731 int i; 2732 2733 addr_high = ((tp->dev->dev_addr[0] << 8) | 2734 tp->dev->dev_addr[1]); 2735 addr_low = ((tp->dev->dev_addr[2] << 24) | 2736 (tp->dev->dev_addr[3] << 16) | 2737 (tp->dev->dev_addr[4] << 8) | 2738 (tp->dev->dev_addr[5] << 0)); 2739 for (i = 0; i < 4; i++) { 2740 if (i == 1 && skip_mac_1) 2741 continue; 2742 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high); 2743 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low); 2744 } 2745 2746 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 2747 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 2748 for (i = 0; i < 12; i++) { 2749 tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high); 2750 tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low); 2751 } 2752 } 2753 2754 addr_high = (tp->dev->dev_addr[0] + 2755 tp->dev->dev_addr[1] + 2756 tp->dev->dev_addr[2] + 2757 tp->dev->dev_addr[3] + 2758 tp->dev->dev_addr[4] + 2759 tp->dev->dev_addr[5]) & 2760 TX_BACKOFF_SEED_MASK; 2761 tw32(MAC_TX_BACKOFF_SEED, addr_high); 2762} 2763 2764static void tg3_enable_register_access(struct tg3 *tp) 2765{ 2766 /* 2767 * Make sure register accesses (indirect or otherwise) will function 2768 * correctly. 2769 */ 2770 pci_write_config_dword(tp->pdev, 2771 TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl); 2772} 2773 2774static int tg3_power_up(struct tg3 *tp) 2775{ 2776 int err; 2777 2778 tg3_enable_register_access(tp); 2779 2780 err = pci_set_power_state(tp->pdev, PCI_D0); 2781 if (!err) { 2782 /* Switch out of Vaux if it is a NIC */ 2783 tg3_pwrsrc_switch_to_vmain(tp); 2784 } else { 2785 netdev_err(tp->dev, "Transition to D0 failed\n"); 2786 } 2787 2788 return err; 2789} 2790 2791static int tg3_power_down_prepare(struct tg3 *tp) 2792{ 2793 u32 misc_host_ctrl; 2794 bool device_should_wake, do_low_power; 2795 2796 tg3_enable_register_access(tp); 2797 2798 /* Restore the CLKREQ setting. */ 2799 if (tg3_flag(tp, CLKREQ_BUG)) { 2800 u16 lnkctl; 2801 2802 pci_read_config_word(tp->pdev, 2803 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 2804 &lnkctl); 2805 lnkctl |= PCI_EXP_LNKCTL_CLKREQ_EN; 2806 pci_write_config_word(tp->pdev, 2807 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 2808 lnkctl); 2809 } 2810 2811 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 2812 tw32(TG3PCI_MISC_HOST_CTRL, 2813 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT); 2814 2815 device_should_wake = device_may_wakeup(&tp->pdev->dev) && 2816 tg3_flag(tp, WOL_ENABLE); 2817 2818 if (tg3_flag(tp, USE_PHYLIB)) { 2819 do_low_power = false; 2820 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) && 2821 !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 2822 struct phy_device *phydev; 2823 u32 phyid, advertising; 2824 2825 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 2826 2827 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 2828 2829 tp->link_config.orig_speed = phydev->speed; 2830 tp->link_config.orig_duplex = phydev->duplex; 2831 tp->link_config.orig_autoneg = phydev->autoneg; 2832 tp->link_config.orig_advertising = phydev->advertising; 2833 2834 advertising = ADVERTISED_TP | 2835 ADVERTISED_Pause | 2836 ADVERTISED_Autoneg | 2837 ADVERTISED_10baseT_Half; 2838 2839 if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) { 2840 if (tg3_flag(tp, WOL_SPEED_100MB)) 2841 advertising |= 2842 ADVERTISED_100baseT_Half | 2843 ADVERTISED_100baseT_Full | 2844 ADVERTISED_10baseT_Full; 2845 else 2846 advertising |= ADVERTISED_10baseT_Full; 2847 } 2848 2849 phydev->advertising = advertising; 2850 2851 phy_start_aneg(phydev); 2852 2853 phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; 2854 if (phyid != PHY_ID_BCMAC131) { 2855 phyid &= PHY_BCM_OUI_MASK; 2856 if (phyid == PHY_BCM_OUI_1 || 2857 phyid == PHY_BCM_OUI_2 || 2858 phyid == PHY_BCM_OUI_3) 2859 do_low_power = true; 2860 } 2861 } 2862 } else { 2863 do_low_power = true; 2864 2865 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 2866 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 2867 tp->link_config.orig_speed = tp->link_config.speed; 2868 tp->link_config.orig_duplex = tp->link_config.duplex; 2869 tp->link_config.orig_autoneg = tp->link_config.autoneg; 2870 } 2871 2872 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 2873 tp->link_config.speed = SPEED_10; 2874 tp->link_config.duplex = DUPLEX_HALF; 2875 tp->link_config.autoneg = AUTONEG_ENABLE; 2876 tg3_setup_phy(tp, 0); 2877 } 2878 } 2879 2880 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2881 u32 val; 2882 2883 val = tr32(GRC_VCPU_EXT_CTRL); 2884 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL); 2885 } else if (!tg3_flag(tp, ENABLE_ASF)) { 2886 int i; 2887 u32 val; 2888 2889 for (i = 0; i < 200; i++) { 2890 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val); 2891 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 2892 break; 2893 msleep(1); 2894 } 2895 } 2896 if (tg3_flag(tp, WOL_CAP)) 2897 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE | 2898 WOL_DRV_STATE_SHUTDOWN | 2899 WOL_DRV_WOL | 2900 WOL_SET_MAGIC_PKT); 2901 2902 if (device_should_wake) { 2903 u32 mac_mode; 2904 2905 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 2906 if (do_low_power && 2907 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 2908 tg3_phy_auxctl_write(tp, 2909 MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 2910 MII_TG3_AUXCTL_PCTL_WOL_EN | 2911 MII_TG3_AUXCTL_PCTL_100TX_LPWR | 2912 MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC); 2913 udelay(40); 2914 } 2915 2916 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 2917 mac_mode = MAC_MODE_PORT_MODE_GMII; 2918 else 2919 mac_mode = MAC_MODE_PORT_MODE_MII; 2920 2921 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY; 2922 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 2923 ASIC_REV_5700) { 2924 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ? 2925 SPEED_100 : SPEED_10; 2926 if (tg3_5700_link_polarity(tp, speed)) 2927 mac_mode |= MAC_MODE_LINK_POLARITY; 2928 else 2929 mac_mode &= ~MAC_MODE_LINK_POLARITY; 2930 } 2931 } else { 2932 mac_mode = MAC_MODE_PORT_MODE_TBI; 2933 } 2934 2935 if (!tg3_flag(tp, 5750_PLUS)) 2936 tw32(MAC_LED_CTRL, tp->led_ctrl); 2937 2938 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE; 2939 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) && 2940 (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE))) 2941 mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL; 2942 2943 if (tg3_flag(tp, ENABLE_APE)) 2944 mac_mode |= MAC_MODE_APE_TX_EN | 2945 MAC_MODE_APE_RX_EN | 2946 MAC_MODE_TDE_ENABLE; 2947 2948 tw32_f(MAC_MODE, mac_mode); 2949 udelay(100); 2950 2951 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE); 2952 udelay(10); 2953 } 2954 2955 if (!tg3_flag(tp, WOL_SPEED_100MB) && 2956 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2957 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 2958 u32 base_val; 2959 2960 base_val = tp->pci_clock_ctrl; 2961 base_val |= (CLOCK_CTRL_RXCLK_DISABLE | 2962 CLOCK_CTRL_TXCLK_DISABLE); 2963 2964 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK | 2965 CLOCK_CTRL_PWRDOWN_PLL133, 40); 2966 } else if (tg3_flag(tp, 5780_CLASS) || 2967 tg3_flag(tp, CPMU_PRESENT) || 2968 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2969 /* do nothing */ 2970 } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) { 2971 u32 newbits1, newbits2; 2972 2973 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2974 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 2975 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE | 2976 CLOCK_CTRL_TXCLK_DISABLE | 2977 CLOCK_CTRL_ALTCLK); 2978 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 2979 } else if (tg3_flag(tp, 5705_PLUS)) { 2980 newbits1 = CLOCK_CTRL_625_CORE; 2981 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK; 2982 } else { 2983 newbits1 = CLOCK_CTRL_ALTCLK; 2984 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 2985 } 2986 2987 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1, 2988 40); 2989 2990 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2, 2991 40); 2992 2993 if (!tg3_flag(tp, 5705_PLUS)) { 2994 u32 newbits3; 2995 2996 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2997 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 2998 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE | 2999 CLOCK_CTRL_TXCLK_DISABLE | 3000 CLOCK_CTRL_44MHZ_CORE); 3001 } else { 3002 newbits3 = CLOCK_CTRL_44MHZ_CORE; 3003 } 3004 3005 tw32_wait_f(TG3PCI_CLOCK_CTRL, 3006 tp->pci_clock_ctrl | newbits3, 40); 3007 } 3008 } 3009 3010 if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF)) 3011 tg3_power_down_phy(tp, do_low_power); 3012 3013 tg3_frob_aux_power(tp, true); 3014 3015 /* Workaround for unstable PLL clock */ 3016 if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) || 3017 (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) { 3018 u32 val = tr32(0x7d00); 3019 3020 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1); 3021 tw32(0x7d00, val); 3022 if (!tg3_flag(tp, ENABLE_ASF)) { 3023 int err; 3024 3025 err = tg3_nvram_lock(tp); 3026 tg3_halt_cpu(tp, RX_CPU_BASE); 3027 if (!err) 3028 tg3_nvram_unlock(tp); 3029 } 3030 } 3031 3032 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); 3033 3034 return 0; 3035} 3036 3037static void tg3_power_down(struct tg3 *tp) 3038{ 3039 tg3_power_down_prepare(tp); 3040 3041 pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE)); 3042 pci_set_power_state(tp->pdev, PCI_D3hot); 3043} 3044 3045static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex) 3046{ 3047 switch (val & MII_TG3_AUX_STAT_SPDMASK) { 3048 case MII_TG3_AUX_STAT_10HALF: 3049 *speed = SPEED_10; 3050 *duplex = DUPLEX_HALF; 3051 break; 3052 3053 case MII_TG3_AUX_STAT_10FULL: 3054 *speed = SPEED_10; 3055 *duplex = DUPLEX_FULL; 3056 break; 3057 3058 case MII_TG3_AUX_STAT_100HALF: 3059 *speed = SPEED_100; 3060 *duplex = DUPLEX_HALF; 3061 break; 3062 3063 case MII_TG3_AUX_STAT_100FULL: 3064 *speed = SPEED_100; 3065 *duplex = DUPLEX_FULL; 3066 break; 3067 3068 case MII_TG3_AUX_STAT_1000HALF: 3069 *speed = SPEED_1000; 3070 *duplex = DUPLEX_HALF; 3071 break; 3072 3073 case MII_TG3_AUX_STAT_1000FULL: 3074 *speed = SPEED_1000; 3075 *duplex = DUPLEX_FULL; 3076 break; 3077 3078 default: 3079 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 3080 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 : 3081 SPEED_10; 3082 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL : 3083 DUPLEX_HALF; 3084 break; 3085 } 3086 *speed = SPEED_INVALID; 3087 *duplex = DUPLEX_INVALID; 3088 break; 3089 } 3090} 3091 3092static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) 3093{ 3094 int err = 0; 3095 u32 val, new_adv; 3096 3097 new_adv = ADVERTISE_CSMA; 3098 if (advertise & ADVERTISED_10baseT_Half) 3099 new_adv |= ADVERTISE_10HALF; 3100 if (advertise & ADVERTISED_10baseT_Full) 3101 new_adv |= ADVERTISE_10FULL; 3102 if (advertise & ADVERTISED_100baseT_Half) 3103 new_adv |= ADVERTISE_100HALF; 3104 if (advertise & ADVERTISED_100baseT_Full) 3105 new_adv |= ADVERTISE_100FULL; 3106 3107 new_adv |= tg3_advert_flowctrl_1000T(flowctrl); 3108 3109 err = tg3_writephy(tp, MII_ADVERTISE, new_adv); 3110 if (err) 3111 goto done; 3112 3113 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 3114 goto done; 3115 3116 new_adv = 0; 3117 if (advertise & ADVERTISED_1000baseT_Half) 3118 new_adv |= ADVERTISE_1000HALF; 3119 if (advertise & ADVERTISED_1000baseT_Full) 3120 new_adv |= ADVERTISE_1000FULL; 3121 3122 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 3123 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) 3124 new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 3125 3126 err = tg3_writephy(tp, MII_CTRL1000, new_adv); 3127 if (err) 3128 goto done; 3129 3130 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 3131 goto done; 3132 3133 tw32(TG3_CPMU_EEE_MODE, 3134 tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE); 3135 3136 err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp); 3137 if (!err) { 3138 u32 err2; 3139 3140 val = 0; 3141 /* Advertise 100-BaseTX EEE ability */ 3142 if (advertise & ADVERTISED_100baseT_Full) 3143 val |= MDIO_AN_EEE_ADV_100TX; 3144 /* Advertise 1000-BaseT EEE ability */ 3145 if (advertise & ADVERTISED_1000baseT_Full) 3146 val |= MDIO_AN_EEE_ADV_1000T; 3147 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); 3148 if (err) 3149 val = 0; 3150 3151 switch (GET_ASIC_REV(tp->pci_chip_rev_id)) { 3152 case ASIC_REV_5717: 3153 case ASIC_REV_57765: 3154 case ASIC_REV_5719: 3155 /* If we advertised any eee advertisements above... */ 3156 if (val) 3157 val = MII_TG3_DSP_TAP26_ALNOKO | 3158 MII_TG3_DSP_TAP26_RMRXSTO | 3159 MII_TG3_DSP_TAP26_OPCSINPT; 3160 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 3161 /* Fall through */ 3162 case ASIC_REV_5720: 3163 if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) 3164 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | 3165 MII_TG3_DSP_CH34TP2_HIBW01); 3166 } 3167 3168 err2 = TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 3169 if (!err) 3170 err = err2; 3171 } 3172 3173done: 3174 return err; 3175} 3176 3177static void tg3_phy_copper_begin(struct tg3 *tp) 3178{ 3179 u32 new_adv; 3180 int i; 3181 3182 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 3183 new_adv = ADVERTISED_10baseT_Half | 3184 ADVERTISED_10baseT_Full; 3185 if (tg3_flag(tp, WOL_SPEED_100MB)) 3186 new_adv |= ADVERTISED_100baseT_Half | 3187 ADVERTISED_100baseT_Full; 3188 3189 tg3_phy_autoneg_cfg(tp, new_adv, 3190 FLOW_CTRL_TX | FLOW_CTRL_RX); 3191 } else if (tp->link_config.speed == SPEED_INVALID) { 3192 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 3193 tp->link_config.advertising &= 3194 ~(ADVERTISED_1000baseT_Half | 3195 ADVERTISED_1000baseT_Full); 3196 3197 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 3198 tp->link_config.flowctrl); 3199 } else { 3200 /* Asking for a specific link mode. */ 3201 if (tp->link_config.speed == SPEED_1000) { 3202 if (tp->link_config.duplex == DUPLEX_FULL) 3203 new_adv = ADVERTISED_1000baseT_Full; 3204 else 3205 new_adv = ADVERTISED_1000baseT_Half; 3206 } else if (tp->link_config.speed == SPEED_100) { 3207 if (tp->link_config.duplex == DUPLEX_FULL) 3208 new_adv = ADVERTISED_100baseT_Full; 3209 else 3210 new_adv = ADVERTISED_100baseT_Half; 3211 } else { 3212 if (tp->link_config.duplex == DUPLEX_FULL) 3213 new_adv = ADVERTISED_10baseT_Full; 3214 else 3215 new_adv = ADVERTISED_10baseT_Half; 3216 } 3217 3218 tg3_phy_autoneg_cfg(tp, new_adv, 3219 tp->link_config.flowctrl); 3220 } 3221 3222 if (tp->link_config.autoneg == AUTONEG_DISABLE && 3223 tp->link_config.speed != SPEED_INVALID) { 3224 u32 bmcr, orig_bmcr; 3225 3226 tp->link_config.active_speed = tp->link_config.speed; 3227 tp->link_config.active_duplex = tp->link_config.duplex; 3228 3229 bmcr = 0; 3230 switch (tp->link_config.speed) { 3231 default: 3232 case SPEED_10: 3233 break; 3234 3235 case SPEED_100: 3236 bmcr |= BMCR_SPEED100; 3237 break; 3238 3239 case SPEED_1000: 3240 bmcr |= BMCR_SPEED1000; 3241 break; 3242 } 3243 3244 if (tp->link_config.duplex == DUPLEX_FULL) 3245 bmcr |= BMCR_FULLDPLX; 3246 3247 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) && 3248 (bmcr != orig_bmcr)) { 3249 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK); 3250 for (i = 0; i < 1500; i++) { 3251 u32 tmp; 3252 3253 udelay(10); 3254 if (tg3_readphy(tp, MII_BMSR, &tmp) || 3255 tg3_readphy(tp, MII_BMSR, &tmp)) 3256 continue; 3257 if (!(tmp & BMSR_LSTATUS)) { 3258 udelay(40); 3259 break; 3260 } 3261 } 3262 tg3_writephy(tp, MII_BMCR, bmcr); 3263 udelay(40); 3264 } 3265 } else { 3266 tg3_writephy(tp, MII_BMCR, 3267 BMCR_ANENABLE | BMCR_ANRESTART); 3268 } 3269} 3270 3271static int tg3_init_5401phy_dsp(struct tg3 *tp) 3272{ 3273 int err; 3274 3275 /* Turn off tap power management. */ 3276 /* Set Extended packet length bit */ 3277 err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 3278 3279 err |= tg3_phydsp_write(tp, 0x0012, 0x1804); 3280 err |= tg3_phydsp_write(tp, 0x0013, 0x1204); 3281 err |= tg3_phydsp_write(tp, 0x8006, 0x0132); 3282 err |= tg3_phydsp_write(tp, 0x8006, 0x0232); 3283 err |= tg3_phydsp_write(tp, 0x201f, 0x0a20); 3284 3285 udelay(40); 3286 3287 return err; 3288} 3289 3290static int tg3_copper_is_advertising_all(struct tg3 *tp, u32 mask) 3291{ 3292 u32 adv_reg, all_mask = 0; 3293 3294 if (mask & ADVERTISED_10baseT_Half) 3295 all_mask |= ADVERTISE_10HALF; 3296 if (mask & ADVERTISED_10baseT_Full) 3297 all_mask |= ADVERTISE_10FULL; 3298 if (mask & ADVERTISED_100baseT_Half) 3299 all_mask |= ADVERTISE_100HALF; 3300 if (mask & ADVERTISED_100baseT_Full) 3301 all_mask |= ADVERTISE_100FULL; 3302 3303 if (tg3_readphy(tp, MII_ADVERTISE, &adv_reg)) 3304 return 0; 3305 3306 if ((adv_reg & all_mask) != all_mask) 3307 return 0; 3308 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 3309 u32 tg3_ctrl; 3310 3311 all_mask = 0; 3312 if (mask & ADVERTISED_1000baseT_Half) 3313 all_mask |= ADVERTISE_1000HALF; 3314 if (mask & ADVERTISED_1000baseT_Full) 3315 all_mask |= ADVERTISE_1000FULL; 3316 3317 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl)) 3318 return 0; 3319 3320 if ((tg3_ctrl & all_mask) != all_mask) 3321 return 0; 3322 } 3323 return 1; 3324} 3325 3326static int tg3_adv_1000T_flowctrl_ok(struct tg3 *tp, u32 *lcladv, u32 *rmtadv) 3327{ 3328 u32 curadv, reqadv; 3329 3330 if (tg3_readphy(tp, MII_ADVERTISE, lcladv)) 3331 return 1; 3332 3333 curadv = *lcladv & (ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM); 3334 reqadv = tg3_advert_flowctrl_1000T(tp->link_config.flowctrl); 3335 3336 if (tp->link_config.active_duplex == DUPLEX_FULL) { 3337 if (curadv != reqadv) 3338 return 0; 3339 3340 if (tg3_flag(tp, PAUSE_AUTONEG)) 3341 tg3_readphy(tp, MII_LPA, rmtadv); 3342 } else { 3343 /* Reprogram the advertisement register, even if it 3344 * does not affect the current link. If the link 3345 * gets renegotiated in the future, we can save an 3346 * additional renegotiation cycle by advertising 3347 * it correctly in the first place. 3348 */ 3349 if (curadv != reqadv) { 3350 *lcladv &= ~(ADVERTISE_PAUSE_CAP | 3351 ADVERTISE_PAUSE_ASYM); 3352 tg3_writephy(tp, MII_ADVERTISE, *lcladv | reqadv); 3353 } 3354 } 3355 3356 return 1; 3357} 3358 3359static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset) 3360{ 3361 int current_link_up; 3362 u32 bmsr, val; 3363 u32 lcl_adv, rmt_adv; 3364 u16 current_speed; 3365 u8 current_duplex; 3366 int i, err; 3367 3368 tw32(MAC_EVENT, 0); 3369 3370 tw32_f(MAC_STATUS, 3371 (MAC_STATUS_SYNC_CHANGED | 3372 MAC_STATUS_CFG_CHANGED | 3373 MAC_STATUS_MI_COMPLETION | 3374 MAC_STATUS_LNKSTATE_CHANGED)); 3375 udelay(40); 3376 3377 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 3378 tw32_f(MAC_MI_MODE, 3379 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 3380 udelay(80); 3381 } 3382 3383 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0); 3384 3385 /* Some third-party PHYs need to be reset on link going 3386 * down. 3387 */ 3388 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 3389 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 3390 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) && 3391 netif_carrier_ok(tp->dev)) { 3392 tg3_readphy(tp, MII_BMSR, &bmsr); 3393 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 3394 !(bmsr & BMSR_LSTATUS)) 3395 force_reset = 1; 3396 } 3397 if (force_reset) 3398 tg3_phy_reset(tp); 3399 3400 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 3401 tg3_readphy(tp, MII_BMSR, &bmsr); 3402 if (tg3_readphy(tp, MII_BMSR, &bmsr) || 3403 !tg3_flag(tp, INIT_COMPLETE)) 3404 bmsr = 0; 3405 3406 if (!(bmsr & BMSR_LSTATUS)) { 3407 err = tg3_init_5401phy_dsp(tp); 3408 if (err) 3409 return err; 3410 3411 tg3_readphy(tp, MII_BMSR, &bmsr); 3412 for (i = 0; i < 1000; i++) { 3413 udelay(10); 3414 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 3415 (bmsr & BMSR_LSTATUS)) { 3416 udelay(40); 3417 break; 3418 } 3419 } 3420 3421 if ((tp->phy_id & TG3_PHY_ID_REV_MASK) == 3422 TG3_PHY_REV_BCM5401_B0 && 3423 !(bmsr & BMSR_LSTATUS) && 3424 tp->link_config.active_speed == SPEED_1000) { 3425 err = tg3_phy_reset(tp); 3426 if (!err) 3427 err = tg3_init_5401phy_dsp(tp); 3428 if (err) 3429 return err; 3430 } 3431 } 3432 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 3433 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) { 3434 /* 5701 {A0,B0} CRC bug workaround */ 3435 tg3_writephy(tp, 0x15, 0x0a75); 3436 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 3437 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 3438 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 3439 } 3440 3441 /* Clear pending interrupts... */ 3442 tg3_readphy(tp, MII_TG3_ISTAT, &val); 3443 tg3_readphy(tp, MII_TG3_ISTAT, &val); 3444 3445 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) 3446 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); 3447 else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) 3448 tg3_writephy(tp, MII_TG3_IMASK, ~0); 3449 3450 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3451 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 3452 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1) 3453 tg3_writephy(tp, MII_TG3_EXT_CTRL, 3454 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 3455 else 3456 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); 3457 } 3458 3459 current_link_up = 0; 3460 current_speed = SPEED_INVALID; 3461 current_duplex = DUPLEX_INVALID; 3462 3463 if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) { 3464 err = tg3_phy_auxctl_read(tp, 3465 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 3466 &val); 3467 if (!err && !(val & (1 << 10))) { 3468 tg3_phy_auxctl_write(tp, 3469 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 3470 val | (1 << 10)); 3471 goto relink; 3472 } 3473 } 3474 3475 bmsr = 0; 3476 for (i = 0; i < 100; i++) { 3477 tg3_readphy(tp, MII_BMSR, &bmsr); 3478 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 3479 (bmsr & BMSR_LSTATUS)) 3480 break; 3481 udelay(40); 3482 } 3483 3484 if (bmsr & BMSR_LSTATUS) { 3485 u32 aux_stat, bmcr; 3486 3487 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat); 3488 for (i = 0; i < 2000; i++) { 3489 udelay(10); 3490 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) && 3491 aux_stat) 3492 break; 3493 } 3494 3495 tg3_aux_stat_to_speed_duplex(tp, aux_stat, 3496 &current_speed, 3497 &current_duplex); 3498 3499 bmcr = 0; 3500 for (i = 0; i < 200; i++) { 3501 tg3_readphy(tp, MII_BMCR, &bmcr); 3502 if (tg3_readphy(tp, MII_BMCR, &bmcr)) 3503 continue; 3504 if (bmcr && bmcr != 0x7fff) 3505 break; 3506 udelay(10); 3507 } 3508 3509 lcl_adv = 0; 3510 rmt_adv = 0; 3511 3512 tp->link_config.active_speed = current_speed; 3513 tp->link_config.active_duplex = current_duplex; 3514 3515 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 3516 if ((bmcr & BMCR_ANENABLE) && 3517 tg3_copper_is_advertising_all(tp, 3518 tp->link_config.advertising)) { 3519 if (tg3_adv_1000T_flowctrl_ok(tp, &lcl_adv, 3520 &rmt_adv)) 3521 current_link_up = 1; 3522 } 3523 } else { 3524 if (!(bmcr & BMCR_ANENABLE) && 3525 tp->link_config.speed == current_speed && 3526 tp->link_config.duplex == current_duplex && 3527 tp->link_config.flowctrl == 3528 tp->link_config.active_flowctrl) { 3529 current_link_up = 1; 3530 } 3531 } 3532 3533 if (current_link_up == 1 && 3534 tp->link_config.active_duplex == DUPLEX_FULL) 3535 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 3536 } 3537 3538relink: 3539 if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 3540 tg3_phy_copper_begin(tp); 3541 3542 tg3_readphy(tp, MII_BMSR, &bmsr); 3543 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) || 3544 (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 3545 current_link_up = 1; 3546 } 3547 3548 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 3549 if (current_link_up == 1) { 3550 if (tp->link_config.active_speed == SPEED_100 || 3551 tp->link_config.active_speed == SPEED_10) 3552 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 3553 else 3554 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 3555 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) 3556 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 3557 else 3558 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 3559 3560 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 3561 if (tp->link_config.active_duplex == DUPLEX_HALF) 3562 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 3563 3564 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) { 3565 if (current_link_up == 1 && 3566 tg3_5700_link_polarity(tp, tp->link_config.active_speed)) 3567 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 3568 else 3569 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 3570 } 3571 3572 /* ??? Without this setting Netgear GA302T PHY does not 3573 * ??? send/receive packets... 3574 */ 3575 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 && 3576 tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) { 3577 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL; 3578 tw32_f(MAC_MI_MODE, tp->mi_mode); 3579 udelay(80); 3580 } 3581 3582 tw32_f(MAC_MODE, tp->mac_mode); 3583 udelay(40); 3584 3585 tg3_phy_eee_adjust(tp, current_link_up); 3586 3587 if (tg3_flag(tp, USE_LINKCHG_REG)) { 3588 /* Polled via timer. */ 3589 tw32_f(MAC_EVENT, 0); 3590 } else { 3591 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 3592 } 3593 udelay(40); 3594 3595 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 && 3596 current_link_up == 1 && 3597 tp->link_config.active_speed == SPEED_1000 && 3598 (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) { 3599 udelay(120); 3600 tw32_f(MAC_STATUS, 3601 (MAC_STATUS_SYNC_CHANGED | 3602 MAC_STATUS_CFG_CHANGED)); 3603 udelay(40); 3604 tg3_write_mem(tp, 3605 NIC_SRAM_FIRMWARE_MBOX, 3606 NIC_SRAM_FIRMWARE_MBOX_MAGIC2); 3607 } 3608 3609 /* Prevent send BD corruption. */ 3610 if (tg3_flag(tp, CLKREQ_BUG)) { 3611 u16 oldlnkctl, newlnkctl; 3612 3613 pci_read_config_word(tp->pdev, 3614 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 3615 &oldlnkctl); 3616 if (tp->link_config.active_speed == SPEED_100 || 3617 tp->link_config.active_speed == SPEED_10) 3618 newlnkctl = oldlnkctl & ~PCI_EXP_LNKCTL_CLKREQ_EN; 3619 else 3620 newlnkctl = oldlnkctl | PCI_EXP_LNKCTL_CLKREQ_EN; 3621 if (newlnkctl != oldlnkctl) 3622 pci_write_config_word(tp->pdev, 3623 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 3624 newlnkctl); 3625 } 3626 3627 if (current_link_up != netif_carrier_ok(tp->dev)) { 3628 if (current_link_up) 3629 netif_carrier_on(tp->dev); 3630 else 3631 netif_carrier_off(tp->dev); 3632 tg3_link_report(tp); 3633 } 3634 3635 return 0; 3636} 3637 3638struct tg3_fiber_aneginfo { 3639 int state; 3640#define ANEG_STATE_UNKNOWN 0 3641#define ANEG_STATE_AN_ENABLE 1 3642#define ANEG_STATE_RESTART_INIT 2 3643#define ANEG_STATE_RESTART 3 3644#define ANEG_STATE_DISABLE_LINK_OK 4 3645#define ANEG_STATE_ABILITY_DETECT_INIT 5 3646#define ANEG_STATE_ABILITY_DETECT 6 3647#define ANEG_STATE_ACK_DETECT_INIT 7 3648#define ANEG_STATE_ACK_DETECT 8 3649#define ANEG_STATE_COMPLETE_ACK_INIT 9 3650#define ANEG_STATE_COMPLETE_ACK 10 3651#define ANEG_STATE_IDLE_DETECT_INIT 11 3652#define ANEG_STATE_IDLE_DETECT 12 3653#define ANEG_STATE_LINK_OK 13 3654#define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14 3655#define ANEG_STATE_NEXT_PAGE_WAIT 15 3656 3657 u32 flags; 3658#define MR_AN_ENABLE 0x00000001 3659#define MR_RESTART_AN 0x00000002 3660#define MR_AN_COMPLETE 0x00000004 3661#define MR_PAGE_RX 0x00000008 3662#define MR_NP_LOADED 0x00000010 3663#define MR_TOGGLE_TX 0x00000020 3664#define MR_LP_ADV_FULL_DUPLEX 0x00000040 3665#define MR_LP_ADV_HALF_DUPLEX 0x00000080 3666#define MR_LP_ADV_SYM_PAUSE 0x00000100 3667#define MR_LP_ADV_ASYM_PAUSE 0x00000200 3668#define MR_LP_ADV_REMOTE_FAULT1 0x00000400 3669#define MR_LP_ADV_REMOTE_FAULT2 0x00000800 3670#define MR_LP_ADV_NEXT_PAGE 0x00001000 3671#define MR_TOGGLE_RX 0x00002000 3672#define MR_NP_RX 0x00004000 3673 3674#define MR_LINK_OK 0x80000000 3675 3676 unsigned long link_time, cur_time; 3677 3678 u32 ability_match_cfg; 3679 int ability_match_count; 3680 3681 char ability_match, idle_match, ack_match; 3682 3683 u32 txconfig, rxconfig; 3684#define ANEG_CFG_NP 0x00000080 3685#define ANEG_CFG_ACK 0x00000040 3686#define ANEG_CFG_RF2 0x00000020 3687#define ANEG_CFG_RF1 0x00000010 3688#define ANEG_CFG_PS2 0x00000001 3689#define ANEG_CFG_PS1 0x00008000 3690#define ANEG_CFG_HD 0x00004000 3691#define ANEG_CFG_FD 0x00002000 3692#define ANEG_CFG_INVAL 0x00001f06 3693 3694}; 3695#define ANEG_OK 0 3696#define ANEG_DONE 1 3697#define ANEG_TIMER_ENAB 2 3698#define ANEG_FAILED -1 3699 3700#define ANEG_STATE_SETTLE_TIME 10000 3701 3702static int tg3_fiber_aneg_smachine(struct tg3 *tp, 3703 struct tg3_fiber_aneginfo *ap) 3704{ 3705 u16 flowctrl; 3706 unsigned long delta; 3707 u32 rx_cfg_reg; 3708 int ret; 3709 3710 if (ap->state == ANEG_STATE_UNKNOWN) { 3711 ap->rxconfig = 0; 3712 ap->link_time = 0; 3713 ap->cur_time = 0; 3714 ap->ability_match_cfg = 0; 3715 ap->ability_match_count = 0; 3716 ap->ability_match = 0; 3717 ap->idle_match = 0; 3718 ap->ack_match = 0; 3719 } 3720 ap->cur_time++; 3721 3722 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) { 3723 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG); 3724 3725 if (rx_cfg_reg != ap->ability_match_cfg) { 3726 ap->ability_match_cfg = rx_cfg_reg; 3727 ap->ability_match = 0; 3728 ap->ability_match_count = 0; 3729 } else { 3730 if (++ap->ability_match_count > 1) { 3731 ap->ability_match = 1; 3732 ap->ability_match_cfg = rx_cfg_reg; 3733 } 3734 } 3735 if (rx_cfg_reg & ANEG_CFG_ACK) 3736 ap->ack_match = 1; 3737 else 3738 ap->ack_match = 0; 3739 3740 ap->idle_match = 0; 3741 } else { 3742 ap->idle_match = 1; 3743 ap->ability_match_cfg = 0; 3744 ap->ability_match_count = 0; 3745 ap->ability_match = 0; 3746 ap->ack_match = 0; 3747 3748 rx_cfg_reg = 0; 3749 } 3750 3751 ap->rxconfig = rx_cfg_reg; 3752 ret = ANEG_OK; 3753 3754 switch (ap->state) { 3755 case ANEG_STATE_UNKNOWN: 3756 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) 3757 ap->state = ANEG_STATE_AN_ENABLE; 3758 3759 /* fallthru */ 3760 case ANEG_STATE_AN_ENABLE: 3761 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); 3762 if (ap->flags & MR_AN_ENABLE) { 3763 ap->link_time = 0; 3764 ap->cur_time = 0; 3765 ap->ability_match_cfg = 0; 3766 ap->ability_match_count = 0; 3767 ap->ability_match = 0; 3768 ap->idle_match = 0; 3769 ap->ack_match = 0; 3770 3771 ap->state = ANEG_STATE_RESTART_INIT; 3772 } else { 3773 ap->state = ANEG_STATE_DISABLE_LINK_OK; 3774 } 3775 break; 3776 3777 case ANEG_STATE_RESTART_INIT: 3778 ap->link_time = ap->cur_time; 3779 ap->flags &= ~(MR_NP_LOADED); 3780 ap->txconfig = 0; 3781 tw32(MAC_TX_AUTO_NEG, 0); 3782 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 3783 tw32_f(MAC_MODE, tp->mac_mode); 3784 udelay(40); 3785 3786 ret = ANEG_TIMER_ENAB; 3787 ap->state = ANEG_STATE_RESTART; 3788 3789 /* fallthru */ 3790 case ANEG_STATE_RESTART: 3791 delta = ap->cur_time - ap->link_time; 3792 if (delta > ANEG_STATE_SETTLE_TIME) 3793 ap->state = ANEG_STATE_ABILITY_DETECT_INIT; 3794 else 3795 ret = ANEG_TIMER_ENAB; 3796 break; 3797 3798 case ANEG_STATE_DISABLE_LINK_OK: 3799 ret = ANEG_DONE; 3800 break; 3801 3802 case ANEG_STATE_ABILITY_DETECT_INIT: 3803 ap->flags &= ~(MR_TOGGLE_TX); 3804 ap->txconfig = ANEG_CFG_FD; 3805 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 3806 if (flowctrl & ADVERTISE_1000XPAUSE) 3807 ap->txconfig |= ANEG_CFG_PS1; 3808 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 3809 ap->txconfig |= ANEG_CFG_PS2; 3810 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 3811 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 3812 tw32_f(MAC_MODE, tp->mac_mode); 3813 udelay(40); 3814 3815 ap->state = ANEG_STATE_ABILITY_DETECT; 3816 break; 3817 3818 case ANEG_STATE_ABILITY_DETECT: 3819 if (ap->ability_match != 0 && ap->rxconfig != 0) 3820 ap->state = ANEG_STATE_ACK_DETECT_INIT; 3821 break; 3822 3823 case ANEG_STATE_ACK_DETECT_INIT: 3824 ap->txconfig |= ANEG_CFG_ACK; 3825 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 3826 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 3827 tw32_f(MAC_MODE, tp->mac_mode); 3828 udelay(40); 3829 3830 ap->state = ANEG_STATE_ACK_DETECT; 3831 3832 /* fallthru */ 3833 case ANEG_STATE_ACK_DETECT: 3834 if (ap->ack_match != 0) { 3835 if ((ap->rxconfig & ~ANEG_CFG_ACK) == 3836 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) { 3837 ap->state = ANEG_STATE_COMPLETE_ACK_INIT; 3838 } else { 3839 ap->state = ANEG_STATE_AN_ENABLE; 3840 } 3841 } else if (ap->ability_match != 0 && 3842 ap->rxconfig == 0) { 3843 ap->state = ANEG_STATE_AN_ENABLE; 3844 } 3845 break; 3846 3847 case ANEG_STATE_COMPLETE_ACK_INIT: 3848 if (ap->rxconfig & ANEG_CFG_INVAL) { 3849 ret = ANEG_FAILED; 3850 break; 3851 } 3852 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX | 3853 MR_LP_ADV_HALF_DUPLEX | 3854 MR_LP_ADV_SYM_PAUSE | 3855 MR_LP_ADV_ASYM_PAUSE | 3856 MR_LP_ADV_REMOTE_FAULT1 | 3857 MR_LP_ADV_REMOTE_FAULT2 | 3858 MR_LP_ADV_NEXT_PAGE | 3859 MR_TOGGLE_RX | 3860 MR_NP_RX); 3861 if (ap->rxconfig & ANEG_CFG_FD) 3862 ap->flags |= MR_LP_ADV_FULL_DUPLEX; 3863 if (ap->rxconfig & ANEG_CFG_HD) 3864 ap->flags |= MR_LP_ADV_HALF_DUPLEX; 3865 if (ap->rxconfig & ANEG_CFG_PS1) 3866 ap->flags |= MR_LP_ADV_SYM_PAUSE; 3867 if (ap->rxconfig & ANEG_CFG_PS2) 3868 ap->flags |= MR_LP_ADV_ASYM_PAUSE; 3869 if (ap->rxconfig & ANEG_CFG_RF1) 3870 ap->flags |= MR_LP_ADV_REMOTE_FAULT1; 3871 if (ap->rxconfig & ANEG_CFG_RF2) 3872 ap->flags |= MR_LP_ADV_REMOTE_FAULT2; 3873 if (ap->rxconfig & ANEG_CFG_NP) 3874 ap->flags |= MR_LP_ADV_NEXT_PAGE; 3875 3876 ap->link_time = ap->cur_time; 3877 3878 ap->flags ^= (MR_TOGGLE_TX); 3879 if (ap->rxconfig & 0x0008) 3880 ap->flags |= MR_TOGGLE_RX; 3881 if (ap->rxconfig & ANEG_CFG_NP) 3882 ap->flags |= MR_NP_RX; 3883 ap->flags |= MR_PAGE_RX; 3884 3885 ap->state = ANEG_STATE_COMPLETE_ACK; 3886 ret = ANEG_TIMER_ENAB; 3887 break; 3888 3889 case ANEG_STATE_COMPLETE_ACK: 3890 if (ap->ability_match != 0 && 3891 ap->rxconfig == 0) { 3892 ap->state = ANEG_STATE_AN_ENABLE; 3893 break; 3894 } 3895 delta = ap->cur_time - ap->link_time; 3896 if (delta > ANEG_STATE_SETTLE_TIME) { 3897 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) { 3898 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 3899 } else { 3900 if ((ap->txconfig & ANEG_CFG_NP) == 0 && 3901 !(ap->flags & MR_NP_RX)) { 3902 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 3903 } else { 3904 ret = ANEG_FAILED; 3905 } 3906 } 3907 } 3908 break; 3909 3910 case ANEG_STATE_IDLE_DETECT_INIT: 3911 ap->link_time = ap->cur_time; 3912 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 3913 tw32_f(MAC_MODE, tp->mac_mode); 3914 udelay(40); 3915 3916 ap->state = ANEG_STATE_IDLE_DETECT; 3917 ret = ANEG_TIMER_ENAB; 3918 break; 3919 3920 case ANEG_STATE_IDLE_DETECT: 3921 if (ap->ability_match != 0 && 3922 ap->rxconfig == 0) { 3923 ap->state = ANEG_STATE_AN_ENABLE; 3924 break; 3925 } 3926 delta = ap->cur_time - ap->link_time; 3927 if (delta > ANEG_STATE_SETTLE_TIME) { 3928 /* XXX another gem from the Broadcom driver :( */ 3929 ap->state = ANEG_STATE_LINK_OK; 3930 } 3931 break; 3932 3933 case ANEG_STATE_LINK_OK: 3934 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK); 3935 ret = ANEG_DONE; 3936 break; 3937 3938 case ANEG_STATE_NEXT_PAGE_WAIT_INIT: 3939 /* ??? unimplemented */ 3940 break; 3941 3942 case ANEG_STATE_NEXT_PAGE_WAIT: 3943 /* ??? unimplemented */ 3944 break; 3945 3946 default: 3947 ret = ANEG_FAILED; 3948 break; 3949 } 3950 3951 return ret; 3952} 3953 3954static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags) 3955{ 3956 int res = 0; 3957 struct tg3_fiber_aneginfo aninfo; 3958 int status = ANEG_FAILED; 3959 unsigned int tick; 3960 u32 tmp; 3961 3962 tw32_f(MAC_TX_AUTO_NEG, 0); 3963 3964 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK; 3965 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII); 3966 udelay(40); 3967 3968 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS); 3969 udelay(40); 3970 3971 memset(&aninfo, 0, sizeof(aninfo)); 3972 aninfo.flags |= MR_AN_ENABLE; 3973 aninfo.state = ANEG_STATE_UNKNOWN; 3974 aninfo.cur_time = 0; 3975 tick = 0; 3976 while (++tick < 195000) { 3977 status = tg3_fiber_aneg_smachine(tp, &aninfo); 3978 if (status == ANEG_DONE || status == ANEG_FAILED) 3979 break; 3980 3981 udelay(1); 3982 } 3983 3984 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 3985 tw32_f(MAC_MODE, tp->mac_mode); 3986 udelay(40); 3987 3988 *txflags = aninfo.txconfig; 3989 *rxflags = aninfo.flags; 3990 3991 if (status == ANEG_DONE && 3992 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK | 3993 MR_LP_ADV_FULL_DUPLEX))) 3994 res = 1; 3995 3996 return res; 3997} 3998 3999static void tg3_init_bcm8002(struct tg3 *tp) 4000{ 4001 u32 mac_status = tr32(MAC_STATUS); 4002 int i; 4003 4004 /* Reset when initting first time or we have a link. */ 4005 if (tg3_flag(tp, INIT_COMPLETE) && 4006 !(mac_status & MAC_STATUS_PCS_SYNCED)) 4007 return; 4008 4009 /* Set PLL lock range. */ 4010 tg3_writephy(tp, 0x16, 0x8007); 4011 4012 /* SW reset */ 4013 tg3_writephy(tp, MII_BMCR, BMCR_RESET); 4014 4015 /* Wait for reset to complete. */ 4016 /* XXX schedule_timeout() ... */ 4017 for (i = 0; i < 500; i++) 4018 udelay(10); 4019 4020 /* Config mode; select PMA/Ch 1 regs. */ 4021 tg3_writephy(tp, 0x10, 0x8411); 4022 4023 /* Enable auto-lock and comdet, select txclk for tx. */ 4024 tg3_writephy(tp, 0x11, 0x0a10); 4025 4026 tg3_writephy(tp, 0x18, 0x00a0); 4027 tg3_writephy(tp, 0x16, 0x41ff); 4028 4029 /* Assert and deassert POR. */ 4030 tg3_writephy(tp, 0x13, 0x0400); 4031 udelay(40); 4032 tg3_writephy(tp, 0x13, 0x0000); 4033 4034 tg3_writephy(tp, 0x11, 0x0a50); 4035 udelay(40); 4036 tg3_writephy(tp, 0x11, 0x0a10); 4037 4038 /* Wait for signal to stabilize */ 4039 /* XXX schedule_timeout() ... */ 4040 for (i = 0; i < 15000; i++) 4041 udelay(10); 4042 4043 /* Deselect the channel register so we can read the PHYID 4044 * later. 4045 */ 4046 tg3_writephy(tp, 0x10, 0x8011); 4047} 4048 4049static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) 4050{ 4051 u16 flowctrl; 4052 u32 sg_dig_ctrl, sg_dig_status; 4053 u32 serdes_cfg, expected_sg_dig_ctrl; 4054 int workaround, port_a; 4055 int current_link_up; 4056 4057 serdes_cfg = 0; 4058 expected_sg_dig_ctrl = 0; 4059 workaround = 0; 4060 port_a = 1; 4061 current_link_up = 0; 4062 4063 if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 && 4064 tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) { 4065 workaround = 1; 4066 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 4067 port_a = 0; 4068 4069 /* preserve bits 0-11,13,14 for signal pre-emphasis */ 4070 /* preserve bits 20-23 for voltage regulator */ 4071 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff; 4072 } 4073 4074 sg_dig_ctrl = tr32(SG_DIG_CTRL); 4075 4076 if (tp->link_config.autoneg != AUTONEG_ENABLE) { 4077 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) { 4078 if (workaround) { 4079 u32 val = serdes_cfg; 4080 4081 if (port_a) 4082 val |= 0xc010000; 4083 else 4084 val |= 0x4010000; 4085 tw32_f(MAC_SERDES_CFG, val); 4086 } 4087 4088 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 4089 } 4090 if (mac_status & MAC_STATUS_PCS_SYNCED) { 4091 tg3_setup_flow_control(tp, 0, 0); 4092 current_link_up = 1; 4093 } 4094 goto out; 4095 } 4096 4097 /* Want auto-negotiation. */ 4098 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP; 4099 4100 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 4101 if (flowctrl & ADVERTISE_1000XPAUSE) 4102 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP; 4103 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 4104 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE; 4105 4106 if (sg_dig_ctrl != expected_sg_dig_ctrl) { 4107 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) && 4108 tp->serdes_counter && 4109 ((mac_status & (MAC_STATUS_PCS_SYNCED | 4110 MAC_STATUS_RCVD_CFG)) == 4111 MAC_STATUS_PCS_SYNCED)) { 4112 tp->serdes_counter--; 4113 current_link_up = 1; 4114 goto out; 4115 } 4116restart_autoneg: 4117 if (workaround) 4118 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000); 4119 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET); 4120 udelay(5); 4121 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl); 4122 4123 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 4124 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4125 } else if (mac_status & (MAC_STATUS_PCS_SYNCED | 4126 MAC_STATUS_SIGNAL_DET)) { 4127 sg_dig_status = tr32(SG_DIG_STATUS); 4128 mac_status = tr32(MAC_STATUS); 4129 4130 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) && 4131 (mac_status & MAC_STATUS_PCS_SYNCED)) { 4132 u32 local_adv = 0, remote_adv = 0; 4133 4134 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP) 4135 local_adv |= ADVERTISE_1000XPAUSE; 4136 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE) 4137 local_adv |= ADVERTISE_1000XPSE_ASYM; 4138 4139 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE) 4140 remote_adv |= LPA_1000XPAUSE; 4141 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE) 4142 remote_adv |= LPA_1000XPAUSE_ASYM; 4143 4144 tg3_setup_flow_control(tp, local_adv, remote_adv); 4145 current_link_up = 1; 4146 tp->serdes_counter = 0; 4147 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4148 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) { 4149 if (tp->serdes_counter) 4150 tp->serdes_counter--; 4151 else { 4152 if (workaround) { 4153 u32 val = serdes_cfg; 4154 4155 if (port_a) 4156 val |= 0xc010000; 4157 else 4158 val |= 0x4010000; 4159 4160 tw32_f(MAC_SERDES_CFG, val); 4161 } 4162 4163 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 4164 udelay(40); 4165 4166 /* Link parallel detection - link is up */ 4167 /* only if we have PCS_SYNC and not */ 4168 /* receiving config code words */ 4169 mac_status = tr32(MAC_STATUS); 4170 if ((mac_status & MAC_STATUS_PCS_SYNCED) && 4171 !(mac_status & MAC_STATUS_RCVD_CFG)) { 4172 tg3_setup_flow_control(tp, 0, 0); 4173 current_link_up = 1; 4174 tp->phy_flags |= 4175 TG3_PHYFLG_PARALLEL_DETECT; 4176 tp->serdes_counter = 4177 SERDES_PARALLEL_DET_TIMEOUT; 4178 } else 4179 goto restart_autoneg; 4180 } 4181 } 4182 } else { 4183 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 4184 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4185 } 4186 4187out: 4188 return current_link_up; 4189} 4190 4191static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status) 4192{ 4193 int current_link_up = 0; 4194 4195 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) 4196 goto out; 4197 4198 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4199 u32 txflags, rxflags; 4200 int i; 4201 4202 if (fiber_autoneg(tp, &txflags, &rxflags)) { 4203 u32 local_adv = 0, remote_adv = 0; 4204 4205 if (txflags & ANEG_CFG_PS1) 4206 local_adv |= ADVERTISE_1000XPAUSE; 4207 if (txflags & ANEG_CFG_PS2) 4208 local_adv |= ADVERTISE_1000XPSE_ASYM; 4209 4210 if (rxflags & MR_LP_ADV_SYM_PAUSE) 4211 remote_adv |= LPA_1000XPAUSE; 4212 if (rxflags & MR_LP_ADV_ASYM_PAUSE) 4213 remote_adv |= LPA_1000XPAUSE_ASYM; 4214 4215 tg3_setup_flow_control(tp, local_adv, remote_adv); 4216 4217 current_link_up = 1; 4218 } 4219 for (i = 0; i < 30; i++) { 4220 udelay(20); 4221 tw32_f(MAC_STATUS, 4222 (MAC_STATUS_SYNC_CHANGED | 4223 MAC_STATUS_CFG_CHANGED)); 4224 udelay(40); 4225 if ((tr32(MAC_STATUS) & 4226 (MAC_STATUS_SYNC_CHANGED | 4227 MAC_STATUS_CFG_CHANGED)) == 0) 4228 break; 4229 } 4230 4231 mac_status = tr32(MAC_STATUS); 4232 if (current_link_up == 0 && 4233 (mac_status & MAC_STATUS_PCS_SYNCED) && 4234 !(mac_status & MAC_STATUS_RCVD_CFG)) 4235 current_link_up = 1; 4236 } else { 4237 tg3_setup_flow_control(tp, 0, 0); 4238 4239 /* Forcing 1000FD link up. */ 4240 current_link_up = 1; 4241 4242 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS)); 4243 udelay(40); 4244 4245 tw32_f(MAC_MODE, tp->mac_mode); 4246 udelay(40); 4247 } 4248 4249out: 4250 return current_link_up; 4251} 4252 4253static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset) 4254{ 4255 u32 orig_pause_cfg; 4256 u16 orig_active_speed; 4257 u8 orig_active_duplex; 4258 u32 mac_status; 4259 int current_link_up; 4260 int i; 4261 4262 orig_pause_cfg = tp->link_config.active_flowctrl; 4263 orig_active_speed = tp->link_config.active_speed; 4264 orig_active_duplex = tp->link_config.active_duplex; 4265 4266 if (!tg3_flag(tp, HW_AUTONEG) && 4267 netif_carrier_ok(tp->dev) && 4268 tg3_flag(tp, INIT_COMPLETE)) { 4269 mac_status = tr32(MAC_STATUS); 4270 mac_status &= (MAC_STATUS_PCS_SYNCED | 4271 MAC_STATUS_SIGNAL_DET | 4272 MAC_STATUS_CFG_CHANGED | 4273 MAC_STATUS_RCVD_CFG); 4274 if (mac_status == (MAC_STATUS_PCS_SYNCED | 4275 MAC_STATUS_SIGNAL_DET)) { 4276 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 4277 MAC_STATUS_CFG_CHANGED)); 4278 return 0; 4279 } 4280 } 4281 4282 tw32_f(MAC_TX_AUTO_NEG, 0); 4283 4284 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 4285 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI; 4286 tw32_f(MAC_MODE, tp->mac_mode); 4287 udelay(40); 4288 4289 if (tp->phy_id == TG3_PHY_ID_BCM8002) 4290 tg3_init_bcm8002(tp); 4291 4292 /* Enable link change event even when serdes polling. */ 4293 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 4294 udelay(40); 4295 4296 current_link_up = 0; 4297 mac_status = tr32(MAC_STATUS); 4298 4299 if (tg3_flag(tp, HW_AUTONEG)) 4300 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status); 4301 else 4302 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status); 4303 4304 tp->napi[0].hw_status->status = 4305 (SD_STATUS_UPDATED | 4306 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG)); 4307 4308 for (i = 0; i < 100; i++) { 4309 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 4310 MAC_STATUS_CFG_CHANGED)); 4311 udelay(5); 4312 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED | 4313 MAC_STATUS_CFG_CHANGED | 4314 MAC_STATUS_LNKSTATE_CHANGED)) == 0) 4315 break; 4316 } 4317 4318 mac_status = tr32(MAC_STATUS); 4319 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) { 4320 current_link_up = 0; 4321 if (tp->link_config.autoneg == AUTONEG_ENABLE && 4322 tp->serdes_counter == 0) { 4323 tw32_f(MAC_MODE, (tp->mac_mode | 4324 MAC_MODE_SEND_CONFIGS)); 4325 udelay(1); 4326 tw32_f(MAC_MODE, tp->mac_mode); 4327 } 4328 } 4329 4330 if (current_link_up == 1) { 4331 tp->link_config.active_speed = SPEED_1000; 4332 tp->link_config.active_duplex = DUPLEX_FULL; 4333 tw32(MAC_LED_CTRL, (tp->led_ctrl | 4334 LED_CTRL_LNKLED_OVERRIDE | 4335 LED_CTRL_1000MBPS_ON)); 4336 } else { 4337 tp->link_config.active_speed = SPEED_INVALID; 4338 tp->link_config.active_duplex = DUPLEX_INVALID; 4339 tw32(MAC_LED_CTRL, (tp->led_ctrl | 4340 LED_CTRL_LNKLED_OVERRIDE | 4341 LED_CTRL_TRAFFIC_OVERRIDE)); 4342 } 4343 4344 if (current_link_up != netif_carrier_ok(tp->dev)) { 4345 if (current_link_up) 4346 netif_carrier_on(tp->dev); 4347 else 4348 netif_carrier_off(tp->dev); 4349 tg3_link_report(tp); 4350 } else { 4351 u32 now_pause_cfg = tp->link_config.active_flowctrl; 4352 if (orig_pause_cfg != now_pause_cfg || 4353 orig_active_speed != tp->link_config.active_speed || 4354 orig_active_duplex != tp->link_config.active_duplex) 4355 tg3_link_report(tp); 4356 } 4357 4358 return 0; 4359} 4360 4361static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset) 4362{ 4363 int current_link_up, err = 0; 4364 u32 bmsr, bmcr; 4365 u16 current_speed; 4366 u8 current_duplex; 4367 u32 local_adv, remote_adv; 4368 4369 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 4370 tw32_f(MAC_MODE, tp->mac_mode); 4371 udelay(40); 4372 4373 tw32(MAC_EVENT, 0); 4374 4375 tw32_f(MAC_STATUS, 4376 (MAC_STATUS_SYNC_CHANGED | 4377 MAC_STATUS_CFG_CHANGED | 4378 MAC_STATUS_MI_COMPLETION | 4379 MAC_STATUS_LNKSTATE_CHANGED)); 4380 udelay(40); 4381 4382 if (force_reset) 4383 tg3_phy_reset(tp); 4384 4385 current_link_up = 0; 4386 current_speed = SPEED_INVALID; 4387 current_duplex = DUPLEX_INVALID; 4388 4389 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 4390 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 4391 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 4392 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 4393 bmsr |= BMSR_LSTATUS; 4394 else 4395 bmsr &= ~BMSR_LSTATUS; 4396 } 4397 4398 err |= tg3_readphy(tp, MII_BMCR, &bmcr); 4399 4400 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset && 4401 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 4402 /* do nothing, just check for link up at the end */ 4403 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4404 u32 adv, new_adv; 4405 4406 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 4407 new_adv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF | 4408 ADVERTISE_1000XPAUSE | 4409 ADVERTISE_1000XPSE_ASYM | 4410 ADVERTISE_SLCT); 4411 4412 new_adv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 4413 4414 if (tp->link_config.advertising & ADVERTISED_1000baseT_Half) 4415 new_adv |= ADVERTISE_1000XHALF; 4416 if (tp->link_config.advertising & ADVERTISED_1000baseT_Full) 4417 new_adv |= ADVERTISE_1000XFULL; 4418 4419 if ((new_adv != adv) || !(bmcr & BMCR_ANENABLE)) { 4420 tg3_writephy(tp, MII_ADVERTISE, new_adv); 4421 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; 4422 tg3_writephy(tp, MII_BMCR, bmcr); 4423 4424 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 4425 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S; 4426 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4427 4428 return err; 4429 } 4430 } else { 4431 u32 new_bmcr; 4432 4433 bmcr &= ~BMCR_SPEED1000; 4434 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX); 4435 4436 if (tp->link_config.duplex == DUPLEX_FULL) 4437 new_bmcr |= BMCR_FULLDPLX; 4438 4439 if (new_bmcr != bmcr) { 4440 /* BMCR_SPEED1000 is a reserved bit that needs 4441 * to be set on write. 4442 */ 4443 new_bmcr |= BMCR_SPEED1000; 4444 4445 /* Force a linkdown */ 4446 if (netif_carrier_ok(tp->dev)) { 4447 u32 adv; 4448 4449 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 4450 adv &= ~(ADVERTISE_1000XFULL | 4451 ADVERTISE_1000XHALF | 4452 ADVERTISE_SLCT); 4453 tg3_writephy(tp, MII_ADVERTISE, adv); 4454 tg3_writephy(tp, MII_BMCR, bmcr | 4455 BMCR_ANRESTART | 4456 BMCR_ANENABLE); 4457 udelay(10); 4458 netif_carrier_off(tp->dev); 4459 } 4460 tg3_writephy(tp, MII_BMCR, new_bmcr); 4461 bmcr = new_bmcr; 4462 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 4463 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 4464 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 4465 ASIC_REV_5714) { 4466 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 4467 bmsr |= BMSR_LSTATUS; 4468 else 4469 bmsr &= ~BMSR_LSTATUS; 4470 } 4471 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4472 } 4473 } 4474 4475 if (bmsr & BMSR_LSTATUS) { 4476 current_speed = SPEED_1000; 4477 current_link_up = 1; 4478 if (bmcr & BMCR_FULLDPLX) 4479 current_duplex = DUPLEX_FULL; 4480 else 4481 current_duplex = DUPLEX_HALF; 4482 4483 local_adv = 0; 4484 remote_adv = 0; 4485 4486 if (bmcr & BMCR_ANENABLE) { 4487 u32 common; 4488 4489 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv); 4490 err |= tg3_readphy(tp, MII_LPA, &remote_adv); 4491 common = local_adv & remote_adv; 4492 if (common & (ADVERTISE_1000XHALF | 4493 ADVERTISE_1000XFULL)) { 4494 if (common & ADVERTISE_1000XFULL) 4495 current_duplex = DUPLEX_FULL; 4496 else 4497 current_duplex = DUPLEX_HALF; 4498 } else if (!tg3_flag(tp, 5780_CLASS)) { 4499 /* Link is up via parallel detect */ 4500 } else { 4501 current_link_up = 0; 4502 } 4503 } 4504 } 4505 4506 if (current_link_up == 1 && current_duplex == DUPLEX_FULL) 4507 tg3_setup_flow_control(tp, local_adv, remote_adv); 4508 4509 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 4510 if (tp->link_config.active_duplex == DUPLEX_HALF) 4511 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 4512 4513 tw32_f(MAC_MODE, tp->mac_mode); 4514 udelay(40); 4515 4516 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 4517 4518 tp->link_config.active_speed = current_speed; 4519 tp->link_config.active_duplex = current_duplex; 4520 4521 if (current_link_up != netif_carrier_ok(tp->dev)) { 4522 if (current_link_up) 4523 netif_carrier_on(tp->dev); 4524 else { 4525 netif_carrier_off(tp->dev); 4526 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4527 } 4528 tg3_link_report(tp); 4529 } 4530 return err; 4531} 4532 4533static void tg3_serdes_parallel_detect(struct tg3 *tp) 4534{ 4535 if (tp->serdes_counter) { 4536 /* Give autoneg time to complete. */ 4537 tp->serdes_counter--; 4538 return; 4539 } 4540 4541 if (!netif_carrier_ok(tp->dev) && 4542 (tp->link_config.autoneg == AUTONEG_ENABLE)) { 4543 u32 bmcr; 4544 4545 tg3_readphy(tp, MII_BMCR, &bmcr); 4546 if (bmcr & BMCR_ANENABLE) { 4547 u32 phy1, phy2; 4548 4549 /* Select shadow register 0x1f */ 4550 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00); 4551 tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1); 4552 4553 /* Select expansion interrupt status register */ 4554 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 4555 MII_TG3_DSP_EXP1_INT_STAT); 4556 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 4557 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 4558 4559 if ((phy1 & 0x10) && !(phy2 & 0x20)) { 4560 /* We have signal detect and not receiving 4561 * config code words, link is up by parallel 4562 * detection. 4563 */ 4564 4565 bmcr &= ~BMCR_ANENABLE; 4566 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX; 4567 tg3_writephy(tp, MII_BMCR, bmcr); 4568 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT; 4569 } 4570 } 4571 } else if (netif_carrier_ok(tp->dev) && 4572 (tp->link_config.autoneg == AUTONEG_ENABLE) && 4573 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 4574 u32 phy2; 4575 4576 /* Select expansion interrupt status register */ 4577 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 4578 MII_TG3_DSP_EXP1_INT_STAT); 4579 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 4580 if (phy2 & 0x20) { 4581 u32 bmcr; 4582 4583 /* Config code words received, turn on autoneg. */ 4584 tg3_readphy(tp, MII_BMCR, &bmcr); 4585 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE); 4586 4587 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4588 4589 } 4590 } 4591} 4592 4593static int tg3_setup_phy(struct tg3 *tp, int force_reset) 4594{ 4595 u32 val; 4596 int err; 4597 4598 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 4599 err = tg3_setup_fiber_phy(tp, force_reset); 4600 else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4601 err = tg3_setup_fiber_mii_phy(tp, force_reset); 4602 else 4603 err = tg3_setup_copper_phy(tp, force_reset); 4604 4605 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) { 4606 u32 scale; 4607 4608 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK; 4609 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5) 4610 scale = 65; 4611 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25) 4612 scale = 6; 4613 else 4614 scale = 12; 4615 4616 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK; 4617 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT); 4618 tw32(GRC_MISC_CFG, val); 4619 } 4620 4621 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 4622 (6 << TX_LENGTHS_IPG_SHIFT); 4623 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 4624 val |= tr32(MAC_TX_LENGTHS) & 4625 (TX_LENGTHS_JMB_FRM_LEN_MSK | 4626 TX_LENGTHS_CNT_DWN_VAL_MSK); 4627 4628 if (tp->link_config.active_speed == SPEED_1000 && 4629 tp->link_config.active_duplex == DUPLEX_HALF) 4630 tw32(MAC_TX_LENGTHS, val | 4631 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)); 4632 else 4633 tw32(MAC_TX_LENGTHS, val | 4634 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)); 4635 4636 if (!tg3_flag(tp, 5705_PLUS)) { 4637 if (netif_carrier_ok(tp->dev)) { 4638 tw32(HOSTCC_STAT_COAL_TICKS, 4639 tp->coal.stats_block_coalesce_usecs); 4640 } else { 4641 tw32(HOSTCC_STAT_COAL_TICKS, 0); 4642 } 4643 } 4644 4645 if (tg3_flag(tp, ASPM_WORKAROUND)) { 4646 val = tr32(PCIE_PWR_MGMT_THRESH); 4647 if (!netif_carrier_ok(tp->dev)) 4648 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) | 4649 tp->pwrmgmt_thresh; 4650 else 4651 val |= PCIE_PWR_MGMT_L1_THRESH_MSK; 4652 tw32(PCIE_PWR_MGMT_THRESH, val); 4653 } 4654 4655 return err; 4656} 4657 4658static inline int tg3_irq_sync(struct tg3 *tp) 4659{ 4660 return tp->irq_sync; 4661} 4662 4663static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len) 4664{ 4665 int i; 4666 4667 dst = (u32 *)((u8 *)dst + off); 4668 for (i = 0; i < len; i += sizeof(u32)) 4669 *dst++ = tr32(off + i); 4670} 4671 4672static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs) 4673{ 4674 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0); 4675 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200); 4676 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0); 4677 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0); 4678 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04); 4679 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80); 4680 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48); 4681 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04); 4682 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20); 4683 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c); 4684 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c); 4685 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c); 4686 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44); 4687 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04); 4688 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20); 4689 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14); 4690 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08); 4691 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08); 4692 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100); 4693 4694 if (tg3_flag(tp, SUPPORT_MSIX)) 4695 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180); 4696 4697 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10); 4698 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58); 4699 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08); 4700 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08); 4701 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04); 4702 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04); 4703 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04); 4704 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04); 4705 4706 if (!tg3_flag(tp, 5705_PLUS)) { 4707 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04); 4708 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04); 4709 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04); 4710 } 4711 4712 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110); 4713 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120); 4714 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c); 4715 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04); 4716 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c); 4717 4718 if (tg3_flag(tp, NVRAM)) 4719 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24); 4720} 4721 4722static void tg3_dump_state(struct tg3 *tp) 4723{ 4724 int i; 4725 u32 *regs; 4726 4727 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC); 4728 if (!regs) { 4729 netdev_err(tp->dev, "Failed allocating register dump buffer\n"); 4730 return; 4731 } 4732 4733 if (tg3_flag(tp, PCI_EXPRESS)) { 4734 /* Read up to but not including private PCI registers */ 4735 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32)) 4736 regs[i / sizeof(u32)] = tr32(i); 4737 } else 4738 tg3_dump_legacy_regs(tp, regs); 4739 4740 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) { 4741 if (!regs[i + 0] && !regs[i + 1] && 4742 !regs[i + 2] && !regs[i + 3]) 4743 continue; 4744 4745 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", 4746 i * 4, 4747 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]); 4748 } 4749 4750 kfree(regs); 4751 4752 for (i = 0; i < tp->irq_cnt; i++) { 4753 struct tg3_napi *tnapi = &tp->napi[i]; 4754 4755 /* SW status block */ 4756 netdev_err(tp->dev, 4757 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n", 4758 i, 4759 tnapi->hw_status->status, 4760 tnapi->hw_status->status_tag, 4761 tnapi->hw_status->rx_jumbo_consumer, 4762 tnapi->hw_status->rx_consumer, 4763 tnapi->hw_status->rx_mini_consumer, 4764 tnapi->hw_status->idx[0].rx_producer, 4765 tnapi->hw_status->idx[0].tx_consumer); 4766 4767 netdev_err(tp->dev, 4768 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n", 4769 i, 4770 tnapi->last_tag, tnapi->last_irq_tag, 4771 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending, 4772 tnapi->rx_rcb_ptr, 4773 tnapi->prodring.rx_std_prod_idx, 4774 tnapi->prodring.rx_std_cons_idx, 4775 tnapi->prodring.rx_jmb_prod_idx, 4776 tnapi->prodring.rx_jmb_cons_idx); 4777 } 4778} 4779 4780/* This is called whenever we suspect that the system chipset is re- 4781 * ordering the sequence of MMIO to the tx send mailbox. The symptom 4782 * is bogus tx completions. We try to recover by setting the 4783 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later 4784 * in the workqueue. 4785 */ 4786static void tg3_tx_recover(struct tg3 *tp) 4787{ 4788 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) || 4789 tp->write32_tx_mbox == tg3_write_indirect_mbox); 4790 4791 netdev_warn(tp->dev, 4792 "The system may be re-ordering memory-mapped I/O " 4793 "cycles to the network device, attempting to recover. " 4794 "Please report the problem to the driver maintainer " 4795 "and include system chipset information.\n"); 4796 4797 spin_lock(&tp->lock); 4798 tg3_flag_set(tp, TX_RECOVERY_PENDING); 4799 spin_unlock(&tp->lock); 4800} 4801 4802static inline u32 tg3_tx_avail(struct tg3_napi *tnapi) 4803{ 4804 /* Tell compiler to fetch tx indices from memory. */ 4805 barrier(); 4806 return tnapi->tx_pending - 4807 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1)); 4808} 4809 4810/* Tigon3 never reports partial packet sends. So we do not 4811 * need special logic to handle SKBs that have not had all 4812 * of their frags sent yet, like SunGEM does. 4813 */ 4814static void tg3_tx(struct tg3_napi *tnapi) 4815{ 4816 struct tg3 *tp = tnapi->tp; 4817 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer; 4818 u32 sw_idx = tnapi->tx_cons; 4819 struct netdev_queue *txq; 4820 int index = tnapi - tp->napi; 4821 4822 if (tg3_flag(tp, ENABLE_TSS)) 4823 index--; 4824 4825 txq = netdev_get_tx_queue(tp->dev, index); 4826 4827 while (sw_idx != hw_idx) { 4828 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx]; 4829 struct sk_buff *skb = ri->skb; 4830 int i, tx_bug = 0; 4831 4832 if (unlikely(skb == NULL)) { 4833 tg3_tx_recover(tp); 4834 return; 4835 } 4836 4837 pci_unmap_single(tp->pdev, 4838 dma_unmap_addr(ri, mapping), 4839 skb_headlen(skb), 4840 PCI_DMA_TODEVICE); 4841 4842 ri->skb = NULL; 4843 4844 while (ri->fragmented) { 4845 ri->fragmented = false; 4846 sw_idx = NEXT_TX(sw_idx); 4847 ri = &tnapi->tx_buffers[sw_idx]; 4848 } 4849 4850 sw_idx = NEXT_TX(sw_idx); 4851 4852 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 4853 ri = &tnapi->tx_buffers[sw_idx]; 4854 if (unlikely(ri->skb != NULL || sw_idx == hw_idx)) 4855 tx_bug = 1; 4856 4857 pci_unmap_page(tp->pdev, 4858 dma_unmap_addr(ri, mapping), 4859 skb_shinfo(skb)->frags[i].size, 4860 PCI_DMA_TODEVICE); 4861 4862 while (ri->fragmented) { 4863 ri->fragmented = false; 4864 sw_idx = NEXT_TX(sw_idx); 4865 ri = &tnapi->tx_buffers[sw_idx]; 4866 } 4867 4868 sw_idx = NEXT_TX(sw_idx); 4869 } 4870 4871 dev_kfree_skb(skb); 4872 4873 if (unlikely(tx_bug)) { 4874 tg3_tx_recover(tp); 4875 return; 4876 } 4877 } 4878 4879 tnapi->tx_cons = sw_idx; 4880 4881 /* Need to make the tx_cons update visible to tg3_start_xmit() 4882 * before checking for netif_queue_stopped(). Without the 4883 * memory barrier, there is a small possibility that tg3_start_xmit() 4884 * will miss it and cause the queue to be stopped forever. 4885 */ 4886 smp_mb(); 4887 4888 if (unlikely(netif_tx_queue_stopped(txq) && 4889 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) { 4890 __netif_tx_lock(txq, smp_processor_id()); 4891 if (netif_tx_queue_stopped(txq) && 4892 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))) 4893 netif_tx_wake_queue(txq); 4894 __netif_tx_unlock(txq); 4895 } 4896} 4897 4898static void tg3_rx_skb_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz) 4899{ 4900 if (!ri->skb) 4901 return; 4902 4903 pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping), 4904 map_sz, PCI_DMA_FROMDEVICE); 4905 dev_kfree_skb_any(ri->skb); 4906 ri->skb = NULL; 4907} 4908 4909/* Returns size of skb allocated or < 0 on error. 4910 * 4911 * We only need to fill in the address because the other members 4912 * of the RX descriptor are invariant, see tg3_init_rings. 4913 * 4914 * Note the purposeful assymetry of cpu vs. chip accesses. For 4915 * posting buffers we only dirty the first cache line of the RX 4916 * descriptor (containing the address). Whereas for the RX status 4917 * buffers the cpu only reads the last cacheline of the RX descriptor 4918 * (to fetch the error flags, vlan tag, checksum, and opaque cookie). 4919 */ 4920static int tg3_alloc_rx_skb(struct tg3 *tp, struct tg3_rx_prodring_set *tpr, 4921 u32 opaque_key, u32 dest_idx_unmasked) 4922{ 4923 struct tg3_rx_buffer_desc *desc; 4924 struct ring_info *map; 4925 struct sk_buff *skb; 4926 dma_addr_t mapping; 4927 int skb_size, dest_idx; 4928 4929 switch (opaque_key) { 4930 case RXD_OPAQUE_RING_STD: 4931 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 4932 desc = &tpr->rx_std[dest_idx]; 4933 map = &tpr->rx_std_buffers[dest_idx]; 4934 skb_size = tp->rx_pkt_map_sz; 4935 break; 4936 4937 case RXD_OPAQUE_RING_JUMBO: 4938 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 4939 desc = &tpr->rx_jmb[dest_idx].std; 4940 map = &tpr->rx_jmb_buffers[dest_idx]; 4941 skb_size = TG3_RX_JMB_MAP_SZ; 4942 break; 4943 4944 default: 4945 return -EINVAL; 4946 } 4947 4948 /* Do not overwrite any of the map or rp information 4949 * until we are sure we can commit to a new buffer. 4950 * 4951 * Callers depend upon this behavior and assume that 4952 * we leave everything unchanged if we fail. 4953 */ 4954 skb = netdev_alloc_skb(tp->dev, skb_size + tp->rx_offset); 4955 if (skb == NULL) 4956 return -ENOMEM; 4957 4958 skb_reserve(skb, tp->rx_offset); 4959 4960 mapping = pci_map_single(tp->pdev, skb->data, skb_size, 4961 PCI_DMA_FROMDEVICE); 4962 if (pci_dma_mapping_error(tp->pdev, mapping)) { 4963 dev_kfree_skb(skb); 4964 return -EIO; 4965 } 4966 4967 map->skb = skb; 4968 dma_unmap_addr_set(map, mapping, mapping); 4969 4970 desc->addr_hi = ((u64)mapping >> 32); 4971 desc->addr_lo = ((u64)mapping & 0xffffffff); 4972 4973 return skb_size; 4974} 4975 4976/* We only need to move over in the address because the other 4977 * members of the RX descriptor are invariant. See notes above 4978 * tg3_alloc_rx_skb for full details. 4979 */ 4980static void tg3_recycle_rx(struct tg3_napi *tnapi, 4981 struct tg3_rx_prodring_set *dpr, 4982 u32 opaque_key, int src_idx, 4983 u32 dest_idx_unmasked) 4984{ 4985 struct tg3 *tp = tnapi->tp; 4986 struct tg3_rx_buffer_desc *src_desc, *dest_desc; 4987 struct ring_info *src_map, *dest_map; 4988 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring; 4989 int dest_idx; 4990 4991 switch (opaque_key) { 4992 case RXD_OPAQUE_RING_STD: 4993 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 4994 dest_desc = &dpr->rx_std[dest_idx]; 4995 dest_map = &dpr->rx_std_buffers[dest_idx]; 4996 src_desc = &spr->rx_std[src_idx]; 4997 src_map = &spr->rx_std_buffers[src_idx]; 4998 break; 4999 5000 case RXD_OPAQUE_RING_JUMBO: 5001 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 5002 dest_desc = &dpr->rx_jmb[dest_idx].std; 5003 dest_map = &dpr->rx_jmb_buffers[dest_idx]; 5004 src_desc = &spr->rx_jmb[src_idx].std; 5005 src_map = &spr->rx_jmb_buffers[src_idx]; 5006 break; 5007 5008 default: 5009 return; 5010 } 5011 5012 dest_map->skb = src_map->skb; 5013 dma_unmap_addr_set(dest_map, mapping, 5014 dma_unmap_addr(src_map, mapping)); 5015 dest_desc->addr_hi = src_desc->addr_hi; 5016 dest_desc->addr_lo = src_desc->addr_lo; 5017 5018 /* Ensure that the update to the skb happens after the physical 5019 * addresses have been transferred to the new BD location. 5020 */ 5021 smp_wmb(); 5022 5023 src_map->skb = NULL; 5024} 5025 5026/* The RX ring scheme is composed of multiple rings which post fresh 5027 * buffers to the chip, and one special ring the chip uses to report 5028 * status back to the host. 5029 * 5030 * The special ring reports the status of received packets to the 5031 * host. The chip does not write into the original descriptor the 5032 * RX buffer was obtained from. The chip simply takes the original 5033 * descriptor as provided by the host, updates the status and length 5034 * field, then writes this into the next status ring entry. 5035 * 5036 * Each ring the host uses to post buffers to the chip is described 5037 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives, 5038 * it is first placed into the on-chip ram. When the packet's length 5039 * is known, it walks down the TG3_BDINFO entries to select the ring. 5040 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO 5041 * which is within the range of the new packet's length is chosen. 5042 * 5043 * The "separate ring for rx status" scheme may sound queer, but it makes 5044 * sense from a cache coherency perspective. If only the host writes 5045 * to the buffer post rings, and only the chip writes to the rx status 5046 * rings, then cache lines never move beyond shared-modified state. 5047 * If both the host and chip were to write into the same ring, cache line 5048 * eviction could occur since both entities want it in an exclusive state. 5049 */ 5050static int tg3_rx(struct tg3_napi *tnapi, int budget) 5051{ 5052 struct tg3 *tp = tnapi->tp; 5053 u32 work_mask, rx_std_posted = 0; 5054 u32 std_prod_idx, jmb_prod_idx; 5055 u32 sw_idx = tnapi->rx_rcb_ptr; 5056 u16 hw_idx; 5057 int received; 5058 struct tg3_rx_prodring_set *tpr = &tnapi->prodring; 5059 5060 hw_idx = *(tnapi->rx_rcb_prod_idx); 5061 /* 5062 * We need to order the read of hw_idx and the read of 5063 * the opaque cookie. 5064 */ 5065 rmb(); 5066 work_mask = 0; 5067 received = 0; 5068 std_prod_idx = tpr->rx_std_prod_idx; 5069 jmb_prod_idx = tpr->rx_jmb_prod_idx; 5070 while (sw_idx != hw_idx && budget > 0) { 5071 struct ring_info *ri; 5072 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx]; 5073 unsigned int len; 5074 struct sk_buff *skb; 5075 dma_addr_t dma_addr; 5076 u32 opaque_key, desc_idx, *post_ptr; 5077 5078 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 5079 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 5080 if (opaque_key == RXD_OPAQUE_RING_STD) { 5081 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx]; 5082 dma_addr = dma_unmap_addr(ri, mapping); 5083 skb = ri->skb; 5084 post_ptr = &std_prod_idx; 5085 rx_std_posted++; 5086 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 5087 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx]; 5088 dma_addr = dma_unmap_addr(ri, mapping); 5089 skb = ri->skb; 5090 post_ptr = &jmb_prod_idx; 5091 } else 5092 goto next_pkt_nopost; 5093 5094 work_mask |= opaque_key; 5095 5096 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 5097 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) { 5098 drop_it: 5099 tg3_recycle_rx(tnapi, tpr, opaque_key, 5100 desc_idx, *post_ptr); 5101 drop_it_no_recycle: 5102 /* Other statistics kept track of by card. */ 5103 tp->rx_dropped++; 5104 goto next_pkt; 5105 } 5106 5107 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 5108 ETH_FCS_LEN; 5109 5110 if (len > TG3_RX_COPY_THRESH(tp)) { 5111 int skb_size; 5112 5113 skb_size = tg3_alloc_rx_skb(tp, tpr, opaque_key, 5114 *post_ptr); 5115 if (skb_size < 0) 5116 goto drop_it; 5117 5118 pci_unmap_single(tp->pdev, dma_addr, skb_size, 5119 PCI_DMA_FROMDEVICE); 5120 5121 /* Ensure that the update to the skb happens 5122 * after the usage of the old DMA mapping. 5123 */ 5124 smp_wmb(); 5125 5126 ri->skb = NULL; 5127 5128 skb_put(skb, len); 5129 } else { 5130 struct sk_buff *copy_skb; 5131 5132 tg3_recycle_rx(tnapi, tpr, opaque_key, 5133 desc_idx, *post_ptr); 5134 5135 copy_skb = netdev_alloc_skb(tp->dev, len + 5136 TG3_RAW_IP_ALIGN); 5137 if (copy_skb == NULL) 5138 goto drop_it_no_recycle; 5139 5140 skb_reserve(copy_skb, TG3_RAW_IP_ALIGN); 5141 skb_put(copy_skb, len); 5142 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 5143 skb_copy_from_linear_data(skb, copy_skb->data, len); 5144 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 5145 5146 /* We'll reuse the original ring buffer. */ 5147 skb = copy_skb; 5148 } 5149 5150 if ((tp->dev->features & NETIF_F_RXCSUM) && 5151 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 5152 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 5153 >> RXD_TCPCSUM_SHIFT) == 0xffff)) 5154 skb->ip_summed = CHECKSUM_UNNECESSARY; 5155 else 5156 skb_checksum_none_assert(skb); 5157 5158 skb->protocol = eth_type_trans(skb, tp->dev); 5159 5160 if (len > (tp->dev->mtu + ETH_HLEN) && 5161 skb->protocol != htons(ETH_P_8021Q)) { 5162 dev_kfree_skb(skb); 5163 goto drop_it_no_recycle; 5164 } 5165 5166 if (desc->type_flags & RXD_FLAG_VLAN && 5167 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) 5168 __vlan_hwaccel_put_tag(skb, 5169 desc->err_vlan & RXD_VLAN_MASK); 5170 5171 napi_gro_receive(&tnapi->napi, skb); 5172 5173 received++; 5174 budget--; 5175 5176next_pkt: 5177 (*post_ptr)++; 5178 5179 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 5180 tpr->rx_std_prod_idx = std_prod_idx & 5181 tp->rx_std_ring_mask; 5182 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 5183 tpr->rx_std_prod_idx); 5184 work_mask &= ~RXD_OPAQUE_RING_STD; 5185 rx_std_posted = 0; 5186 } 5187next_pkt_nopost: 5188 sw_idx++; 5189 sw_idx &= tp->rx_ret_ring_mask; 5190 5191 /* Refresh hw_idx to see if there is new work */ 5192 if (sw_idx == hw_idx) { 5193 hw_idx = *(tnapi->rx_rcb_prod_idx); 5194 rmb(); 5195 } 5196 } 5197 5198 /* ACK the status ring. */ 5199 tnapi->rx_rcb_ptr = sw_idx; 5200 tw32_rx_mbox(tnapi->consmbox, sw_idx); 5201 5202 /* Refill RX ring(s). */ 5203 if (!tg3_flag(tp, ENABLE_RSS)) { 5204 if (work_mask & RXD_OPAQUE_RING_STD) { 5205 tpr->rx_std_prod_idx = std_prod_idx & 5206 tp->rx_std_ring_mask; 5207 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 5208 tpr->rx_std_prod_idx); 5209 } 5210 if (work_mask & RXD_OPAQUE_RING_JUMBO) { 5211 tpr->rx_jmb_prod_idx = jmb_prod_idx & 5212 tp->rx_jmb_ring_mask; 5213 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 5214 tpr->rx_jmb_prod_idx); 5215 } 5216 mmiowb(); 5217 } else if (work_mask) { 5218 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be 5219 * updated before the producer indices can be updated. 5220 */ 5221 smp_wmb(); 5222 5223 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask; 5224 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask; 5225 5226 if (tnapi != &tp->napi[1]) 5227 napi_schedule(&tp->napi[1].napi); 5228 } 5229 5230 return received; 5231} 5232 5233static void tg3_poll_link(struct tg3 *tp) 5234{ 5235 /* handle link change and other phy events */ 5236 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 5237 struct tg3_hw_status *sblk = tp->napi[0].hw_status; 5238 5239 if (sblk->status & SD_STATUS_LINK_CHG) { 5240 sblk->status = SD_STATUS_UPDATED | 5241 (sblk->status & ~SD_STATUS_LINK_CHG); 5242 spin_lock(&tp->lock); 5243 if (tg3_flag(tp, USE_PHYLIB)) { 5244 tw32_f(MAC_STATUS, 5245 (MAC_STATUS_SYNC_CHANGED | 5246 MAC_STATUS_CFG_CHANGED | 5247 MAC_STATUS_MI_COMPLETION | 5248 MAC_STATUS_LNKSTATE_CHANGED)); 5249 udelay(40); 5250 } else 5251 tg3_setup_phy(tp, 0); 5252 spin_unlock(&tp->lock); 5253 } 5254 } 5255} 5256 5257static int tg3_rx_prodring_xfer(struct tg3 *tp, 5258 struct tg3_rx_prodring_set *dpr, 5259 struct tg3_rx_prodring_set *spr) 5260{ 5261 u32 si, di, cpycnt, src_prod_idx; 5262 int i, err = 0; 5263 5264 while (1) { 5265 src_prod_idx = spr->rx_std_prod_idx; 5266 5267 /* Make sure updates to the rx_std_buffers[] entries and the 5268 * standard producer index are seen in the correct order. 5269 */ 5270 smp_rmb(); 5271 5272 if (spr->rx_std_cons_idx == src_prod_idx) 5273 break; 5274 5275 if (spr->rx_std_cons_idx < src_prod_idx) 5276 cpycnt = src_prod_idx - spr->rx_std_cons_idx; 5277 else 5278 cpycnt = tp->rx_std_ring_mask + 1 - 5279 spr->rx_std_cons_idx; 5280 5281 cpycnt = min(cpycnt, 5282 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx); 5283 5284 si = spr->rx_std_cons_idx; 5285 di = dpr->rx_std_prod_idx; 5286 5287 for (i = di; i < di + cpycnt; i++) { 5288 if (dpr->rx_std_buffers[i].skb) { 5289 cpycnt = i - di; 5290 err = -ENOSPC; 5291 break; 5292 } 5293 } 5294 5295 if (!cpycnt) 5296 break; 5297 5298 /* Ensure that updates to the rx_std_buffers ring and the 5299 * shadowed hardware producer ring from tg3_recycle_skb() are 5300 * ordered correctly WRT the skb check above. 5301 */ 5302 smp_rmb(); 5303 5304 memcpy(&dpr->rx_std_buffers[di], 5305 &spr->rx_std_buffers[si], 5306 cpycnt * sizeof(struct ring_info)); 5307 5308 for (i = 0; i < cpycnt; i++, di++, si++) { 5309 struct tg3_rx_buffer_desc *sbd, *dbd; 5310 sbd = &spr->rx_std[si]; 5311 dbd = &dpr->rx_std[di]; 5312 dbd->addr_hi = sbd->addr_hi; 5313 dbd->addr_lo = sbd->addr_lo; 5314 } 5315 5316 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) & 5317 tp->rx_std_ring_mask; 5318 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) & 5319 tp->rx_std_ring_mask; 5320 } 5321 5322 while (1) { 5323 src_prod_idx = spr->rx_jmb_prod_idx; 5324 5325 /* Make sure updates to the rx_jmb_buffers[] entries and 5326 * the jumbo producer index are seen in the correct order. 5327 */ 5328 smp_rmb(); 5329 5330 if (spr->rx_jmb_cons_idx == src_prod_idx) 5331 break; 5332 5333 if (spr->rx_jmb_cons_idx < src_prod_idx) 5334 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx; 5335 else 5336 cpycnt = tp->rx_jmb_ring_mask + 1 - 5337 spr->rx_jmb_cons_idx; 5338 5339 cpycnt = min(cpycnt, 5340 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx); 5341 5342 si = spr->rx_jmb_cons_idx; 5343 di = dpr->rx_jmb_prod_idx; 5344 5345 for (i = di; i < di + cpycnt; i++) { 5346 if (dpr->rx_jmb_buffers[i].skb) { 5347 cpycnt = i - di; 5348 err = -ENOSPC; 5349 break; 5350 } 5351 } 5352 5353 if (!cpycnt) 5354 break; 5355 5356 /* Ensure that updates to the rx_jmb_buffers ring and the 5357 * shadowed hardware producer ring from tg3_recycle_skb() are 5358 * ordered correctly WRT the skb check above. 5359 */ 5360 smp_rmb(); 5361 5362 memcpy(&dpr->rx_jmb_buffers[di], 5363 &spr->rx_jmb_buffers[si], 5364 cpycnt * sizeof(struct ring_info)); 5365 5366 for (i = 0; i < cpycnt; i++, di++, si++) { 5367 struct tg3_rx_buffer_desc *sbd, *dbd; 5368 sbd = &spr->rx_jmb[si].std; 5369 dbd = &dpr->rx_jmb[di].std; 5370 dbd->addr_hi = sbd->addr_hi; 5371 dbd->addr_lo = sbd->addr_lo; 5372 } 5373 5374 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) & 5375 tp->rx_jmb_ring_mask; 5376 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) & 5377 tp->rx_jmb_ring_mask; 5378 } 5379 5380 return err; 5381} 5382 5383static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget) 5384{ 5385 struct tg3 *tp = tnapi->tp; 5386 5387 /* run TX completion thread */ 5388 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) { 5389 tg3_tx(tnapi); 5390 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 5391 return work_done; 5392 } 5393 5394 /* run RX thread, within the bounds set by NAPI. 5395 * All RX "locking" is done by ensuring outside 5396 * code synchronizes with tg3->napi.poll() 5397 */ 5398 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 5399 work_done += tg3_rx(tnapi, budget - work_done); 5400 5401 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) { 5402 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring; 5403 int i, err = 0; 5404 u32 std_prod_idx = dpr->rx_std_prod_idx; 5405 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx; 5406 5407 for (i = 1; i < tp->irq_cnt; i++) 5408 err |= tg3_rx_prodring_xfer(tp, dpr, 5409 &tp->napi[i].prodring); 5410 5411 wmb(); 5412 5413 if (std_prod_idx != dpr->rx_std_prod_idx) 5414 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 5415 dpr->rx_std_prod_idx); 5416 5417 if (jmb_prod_idx != dpr->rx_jmb_prod_idx) 5418 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 5419 dpr->rx_jmb_prod_idx); 5420 5421 mmiowb(); 5422 5423 if (err) 5424 tw32_f(HOSTCC_MODE, tp->coal_now); 5425 } 5426 5427 return work_done; 5428} 5429 5430static int tg3_poll_msix(struct napi_struct *napi, int budget) 5431{ 5432 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 5433 struct tg3 *tp = tnapi->tp; 5434 int work_done = 0; 5435 struct tg3_hw_status *sblk = tnapi->hw_status; 5436 5437 while (1) { 5438 work_done = tg3_poll_work(tnapi, work_done, budget); 5439 5440 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 5441 goto tx_recovery; 5442 5443 if (unlikely(work_done >= budget)) 5444 break; 5445 5446 /* tp->last_tag is used in tg3_int_reenable() below 5447 * to tell the hw how much work has been processed, 5448 * so we must read it before checking for more work. 5449 */ 5450 tnapi->last_tag = sblk->status_tag; 5451 tnapi->last_irq_tag = tnapi->last_tag; 5452 rmb(); 5453 5454 /* check for RX/TX work to do */ 5455 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons && 5456 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) { 5457 napi_complete(napi); 5458 /* Reenable interrupts. */ 5459 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 5460 mmiowb(); 5461 break; 5462 } 5463 } 5464 5465 return work_done; 5466 5467tx_recovery: 5468 /* work_done is guaranteed to be less than budget. */ 5469 napi_complete(napi); 5470 schedule_work(&tp->reset_task); 5471 return work_done; 5472} 5473 5474static void tg3_process_error(struct tg3 *tp) 5475{ 5476 u32 val; 5477 bool real_error = false; 5478 5479 if (tg3_flag(tp, ERROR_PROCESSED)) 5480 return; 5481 5482 /* Check Flow Attention register */ 5483 val = tr32(HOSTCC_FLOW_ATTN); 5484 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) { 5485 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n"); 5486 real_error = true; 5487 } 5488 5489 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) { 5490 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n"); 5491 real_error = true; 5492 } 5493 5494 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) { 5495 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n"); 5496 real_error = true; 5497 } 5498 5499 if (!real_error) 5500 return; 5501 5502 tg3_dump_state(tp); 5503 5504 tg3_flag_set(tp, ERROR_PROCESSED); 5505 schedule_work(&tp->reset_task); 5506} 5507 5508static int tg3_poll(struct napi_struct *napi, int budget) 5509{ 5510 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 5511 struct tg3 *tp = tnapi->tp; 5512 int work_done = 0; 5513 struct tg3_hw_status *sblk = tnapi->hw_status; 5514 5515 while (1) { 5516 if (sblk->status & SD_STATUS_ERROR) 5517 tg3_process_error(tp); 5518 5519 tg3_poll_link(tp); 5520 5521 work_done = tg3_poll_work(tnapi, work_done, budget); 5522 5523 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 5524 goto tx_recovery; 5525 5526 if (unlikely(work_done >= budget)) 5527 break; 5528 5529 if (tg3_flag(tp, TAGGED_STATUS)) { 5530 /* tp->last_tag is used in tg3_int_reenable() below 5531 * to tell the hw how much work has been processed, 5532 * so we must read it before checking for more work. 5533 */ 5534 tnapi->last_tag = sblk->status_tag; 5535 tnapi->last_irq_tag = tnapi->last_tag; 5536 rmb(); 5537 } else 5538 sblk->status &= ~SD_STATUS_UPDATED; 5539 5540 if (likely(!tg3_has_work(tnapi))) { 5541 napi_complete(napi); 5542 tg3_int_reenable(tnapi); 5543 break; 5544 } 5545 } 5546 5547 return work_done; 5548 5549tx_recovery: 5550 /* work_done is guaranteed to be less than budget. */ 5551 napi_complete(napi); 5552 schedule_work(&tp->reset_task); 5553 return work_done; 5554} 5555 5556static void tg3_napi_disable(struct tg3 *tp) 5557{ 5558 int i; 5559 5560 for (i = tp->irq_cnt - 1; i >= 0; i--) 5561 napi_disable(&tp->napi[i].napi); 5562} 5563 5564static void tg3_napi_enable(struct tg3 *tp) 5565{ 5566 int i; 5567 5568 for (i = 0; i < tp->irq_cnt; i++) 5569 napi_enable(&tp->napi[i].napi); 5570} 5571 5572static void tg3_napi_init(struct tg3 *tp) 5573{ 5574 int i; 5575 5576 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64); 5577 for (i = 1; i < tp->irq_cnt; i++) 5578 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64); 5579} 5580 5581static void tg3_napi_fini(struct tg3 *tp) 5582{ 5583 int i; 5584 5585 for (i = 0; i < tp->irq_cnt; i++) 5586 netif_napi_del(&tp->napi[i].napi); 5587} 5588 5589static inline void tg3_netif_stop(struct tg3 *tp) 5590{ 5591 tp->dev->trans_start = jiffies; /* prevent tx timeout */ 5592 tg3_napi_disable(tp); 5593 netif_tx_disable(tp->dev); 5594} 5595 5596static inline void tg3_netif_start(struct tg3 *tp) 5597{ 5598 /* NOTE: unconditional netif_tx_wake_all_queues is only 5599 * appropriate so long as all callers are assured to 5600 * have free tx slots (such as after tg3_init_hw) 5601 */ 5602 netif_tx_wake_all_queues(tp->dev); 5603 5604 tg3_napi_enable(tp); 5605 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED; 5606 tg3_enable_ints(tp); 5607} 5608 5609static void tg3_irq_quiesce(struct tg3 *tp) 5610{ 5611 int i; 5612 5613 BUG_ON(tp->irq_sync); 5614 5615 tp->irq_sync = 1; 5616 smp_mb(); 5617 5618 for (i = 0; i < tp->irq_cnt; i++) 5619 synchronize_irq(tp->napi[i].irq_vec); 5620} 5621 5622/* Fully shutdown all tg3 driver activity elsewhere in the system. 5623 * If irq_sync is non-zero, then the IRQ handler must be synchronized 5624 * with as well. Most of the time, this is not necessary except when 5625 * shutting down the device. 5626 */ 5627static inline void tg3_full_lock(struct tg3 *tp, int irq_sync) 5628{ 5629 spin_lock_bh(&tp->lock); 5630 if (irq_sync) 5631 tg3_irq_quiesce(tp); 5632} 5633 5634static inline void tg3_full_unlock(struct tg3 *tp) 5635{ 5636 spin_unlock_bh(&tp->lock); 5637} 5638 5639/* One-shot MSI handler - Chip automatically disables interrupt 5640 * after sending MSI so driver doesn't have to do it. 5641 */ 5642static irqreturn_t tg3_msi_1shot(int irq, void *dev_id) 5643{ 5644 struct tg3_napi *tnapi = dev_id; 5645 struct tg3 *tp = tnapi->tp; 5646 5647 prefetch(tnapi->hw_status); 5648 if (tnapi->rx_rcb) 5649 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 5650 5651 if (likely(!tg3_irq_sync(tp))) 5652 napi_schedule(&tnapi->napi); 5653 5654 return IRQ_HANDLED; 5655} 5656 5657/* MSI ISR - No need to check for interrupt sharing and no need to 5658 * flush status block and interrupt mailbox. PCI ordering rules 5659 * guarantee that MSI will arrive after the status block. 5660 */ 5661static irqreturn_t tg3_msi(int irq, void *dev_id) 5662{ 5663 struct tg3_napi *tnapi = dev_id; 5664 struct tg3 *tp = tnapi->tp; 5665 5666 prefetch(tnapi->hw_status); 5667 if (tnapi->rx_rcb) 5668 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 5669 /* 5670 * Writing any value to intr-mbox-0 clears PCI INTA# and 5671 * chip-internal interrupt pending events. 5672 * Writing non-zero to intr-mbox-0 additional tells the 5673 * NIC to stop sending us irqs, engaging "in-intr-handler" 5674 * event coalescing. 5675 */ 5676 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 5677 if (likely(!tg3_irq_sync(tp))) 5678 napi_schedule(&tnapi->napi); 5679 5680 return IRQ_RETVAL(1); 5681} 5682 5683static irqreturn_t tg3_interrupt(int irq, void *dev_id) 5684{ 5685 struct tg3_napi *tnapi = dev_id; 5686 struct tg3 *tp = tnapi->tp; 5687 struct tg3_hw_status *sblk = tnapi->hw_status; 5688 unsigned int handled = 1; 5689 5690 /* In INTx mode, it is possible for the interrupt to arrive at 5691 * the CPU before the status block posted prior to the interrupt. 5692 * Reading the PCI State register will confirm whether the 5693 * interrupt is ours and will flush the status block. 5694 */ 5695 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) { 5696 if (tg3_flag(tp, CHIP_RESETTING) || 5697 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 5698 handled = 0; 5699 goto out; 5700 } 5701 } 5702 5703 /* 5704 * Writing any value to intr-mbox-0 clears PCI INTA# and 5705 * chip-internal interrupt pending events. 5706 * Writing non-zero to intr-mbox-0 additional tells the 5707 * NIC to stop sending us irqs, engaging "in-intr-handler" 5708 * event coalescing. 5709 * 5710 * Flush the mailbox to de-assert the IRQ immediately to prevent 5711 * spurious interrupts. The flush impacts performance but 5712 * excessive spurious interrupts can be worse in some cases. 5713 */ 5714 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 5715 if (tg3_irq_sync(tp)) 5716 goto out; 5717 sblk->status &= ~SD_STATUS_UPDATED; 5718 if (likely(tg3_has_work(tnapi))) { 5719 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 5720 napi_schedule(&tnapi->napi); 5721 } else { 5722 /* No work, shared interrupt perhaps? re-enable 5723 * interrupts, and flush that PCI write 5724 */ 5725 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 5726 0x00000000); 5727 } 5728out: 5729 return IRQ_RETVAL(handled); 5730} 5731 5732static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id) 5733{ 5734 struct tg3_napi *tnapi = dev_id; 5735 struct tg3 *tp = tnapi->tp; 5736 struct tg3_hw_status *sblk = tnapi->hw_status; 5737 unsigned int handled = 1; 5738 5739 /* In INTx mode, it is possible for the interrupt to arrive at 5740 * the CPU before the status block posted prior to the interrupt. 5741 * Reading the PCI State register will confirm whether the 5742 * interrupt is ours and will flush the status block. 5743 */ 5744 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) { 5745 if (tg3_flag(tp, CHIP_RESETTING) || 5746 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 5747 handled = 0; 5748 goto out; 5749 } 5750 } 5751 5752 /* 5753 * writing any value to intr-mbox-0 clears PCI INTA# and 5754 * chip-internal interrupt pending events. 5755 * writing non-zero to intr-mbox-0 additional tells the 5756 * NIC to stop sending us irqs, engaging "in-intr-handler" 5757 * event coalescing. 5758 * 5759 * Flush the mailbox to de-assert the IRQ immediately to prevent 5760 * spurious interrupts. The flush impacts performance but 5761 * excessive spurious interrupts can be worse in some cases. 5762 */ 5763 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 5764 5765 /* 5766 * In a shared interrupt configuration, sometimes other devices' 5767 * interrupts will scream. We record the current status tag here 5768 * so that the above check can report that the screaming interrupts 5769 * are unhandled. Eventually they will be silenced. 5770 */ 5771 tnapi->last_irq_tag = sblk->status_tag; 5772 5773 if (tg3_irq_sync(tp)) 5774 goto out; 5775 5776 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 5777 5778 napi_schedule(&tnapi->napi); 5779 5780out: 5781 return IRQ_RETVAL(handled); 5782} 5783 5784/* ISR for interrupt test */ 5785static irqreturn_t tg3_test_isr(int irq, void *dev_id) 5786{ 5787 struct tg3_napi *tnapi = dev_id; 5788 struct tg3 *tp = tnapi->tp; 5789 struct tg3_hw_status *sblk = tnapi->hw_status; 5790 5791 if ((sblk->status & SD_STATUS_UPDATED) || 5792 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 5793 tg3_disable_ints(tp); 5794 return IRQ_RETVAL(1); 5795 } 5796 return IRQ_RETVAL(0); 5797} 5798 5799static int tg3_init_hw(struct tg3 *, int); 5800static int tg3_halt(struct tg3 *, int, int); 5801 5802/* Restart hardware after configuration changes, self-test, etc. 5803 * Invoked with tp->lock held. 5804 */ 5805static int tg3_restart_hw(struct tg3 *tp, int reset_phy) 5806 __releases(tp->lock) 5807 __acquires(tp->lock) 5808{ 5809 int err; 5810 5811 err = tg3_init_hw(tp, reset_phy); 5812 if (err) { 5813 netdev_err(tp->dev, 5814 "Failed to re-initialize device, aborting\n"); 5815 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 5816 tg3_full_unlock(tp); 5817 del_timer_sync(&tp->timer); 5818 tp->irq_sync = 0; 5819 tg3_napi_enable(tp); 5820 dev_close(tp->dev); 5821 tg3_full_lock(tp, 0); 5822 } 5823 return err; 5824} 5825 5826#ifdef CONFIG_NET_POLL_CONTROLLER 5827static void tg3_poll_controller(struct net_device *dev) 5828{ 5829 int i; 5830 struct tg3 *tp = netdev_priv(dev); 5831 5832 for (i = 0; i < tp->irq_cnt; i++) 5833 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); 5834} 5835#endif 5836 5837static void tg3_reset_task(struct work_struct *work) 5838{ 5839 struct tg3 *tp = container_of(work, struct tg3, reset_task); 5840 int err; 5841 unsigned int restart_timer; 5842 5843 tg3_full_lock(tp, 0); 5844 5845 if (!netif_running(tp->dev)) { 5846 tg3_full_unlock(tp); 5847 return; 5848 } 5849 5850 tg3_full_unlock(tp); 5851 5852 tg3_phy_stop(tp); 5853 5854 tg3_netif_stop(tp); 5855 5856 tg3_full_lock(tp, 1); 5857 5858 restart_timer = tg3_flag(tp, RESTART_TIMER); 5859 tg3_flag_clear(tp, RESTART_TIMER); 5860 5861 if (tg3_flag(tp, TX_RECOVERY_PENDING)) { 5862 tp->write32_tx_mbox = tg3_write32_tx_mbox; 5863 tp->write32_rx_mbox = tg3_write_flush_reg32; 5864 tg3_flag_set(tp, MBOX_WRITE_REORDER); 5865 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 5866 } 5867 5868 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 5869 err = tg3_init_hw(tp, 1); 5870 if (err) 5871 goto out; 5872 5873 tg3_netif_start(tp); 5874 5875 if (restart_timer) 5876 mod_timer(&tp->timer, jiffies + 1); 5877 5878out: 5879 tg3_full_unlock(tp); 5880 5881 if (!err) 5882 tg3_phy_start(tp); 5883} 5884 5885static void tg3_tx_timeout(struct net_device *dev) 5886{ 5887 struct tg3 *tp = netdev_priv(dev); 5888 5889 if (netif_msg_tx_err(tp)) { 5890 netdev_err(dev, "transmit timed out, resetting\n"); 5891 tg3_dump_state(tp); 5892 } 5893 5894 schedule_work(&tp->reset_task); 5895} 5896 5897/* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */ 5898static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) 5899{ 5900 u32 base = (u32) mapping & 0xffffffff; 5901 5902 return (base > 0xffffdcc0) && (base + len + 8 < base); 5903} 5904 5905/* Test for DMA addresses > 40-bit */ 5906static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, 5907 int len) 5908{ 5909#if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 5910 if (tg3_flag(tp, 40BIT_DMA_BUG)) 5911 return ((u64) mapping + len) > DMA_BIT_MASK(40); 5912 return 0; 5913#else 5914 return 0; 5915#endif 5916} 5917 5918static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd, 5919 dma_addr_t mapping, u32 len, u32 flags, 5920 u32 mss, u32 vlan) 5921{ 5922 txbd->addr_hi = ((u64) mapping >> 32); 5923 txbd->addr_lo = ((u64) mapping & 0xffffffff); 5924 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff); 5925 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT); 5926} 5927 5928static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget, 5929 dma_addr_t map, u32 len, u32 flags, 5930 u32 mss, u32 vlan) 5931{ 5932 struct tg3 *tp = tnapi->tp; 5933 bool hwbug = false; 5934 5935 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8) 5936 hwbug = 1; 5937 5938 if (tg3_4g_overflow_test(map, len)) 5939 hwbug = 1; 5940 5941 if (tg3_40bit_overflow_test(tp, map, len)) 5942 hwbug = 1; 5943 5944 if (tg3_flag(tp, 4K_FIFO_LIMIT)) { 5945 u32 tmp_flag = flags & ~TXD_FLAG_END; 5946 while (len > TG3_TX_BD_DMA_MAX) { 5947 u32 frag_len = TG3_TX_BD_DMA_MAX; 5948 len -= TG3_TX_BD_DMA_MAX; 5949 5950 if (len) { 5951 tnapi->tx_buffers[*entry].fragmented = true; 5952 /* Avoid the 8byte DMA problem */ 5953 if (len <= 8) { 5954 len += TG3_TX_BD_DMA_MAX / 2; 5955 frag_len = TG3_TX_BD_DMA_MAX / 2; 5956 } 5957 } else 5958 tmp_flag = flags; 5959 5960 if (*budget) { 5961 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 5962 frag_len, tmp_flag, mss, vlan); 5963 (*budget)--; 5964 *entry = NEXT_TX(*entry); 5965 } else { 5966 hwbug = 1; 5967 break; 5968 } 5969 5970 map += frag_len; 5971 } 5972 5973 if (len) { 5974 if (*budget) { 5975 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 5976 len, flags, mss, vlan); 5977 (*budget)--; 5978 *entry = NEXT_TX(*entry); 5979 } else { 5980 hwbug = 1; 5981 } 5982 } 5983 } else { 5984 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 5985 len, flags, mss, vlan); 5986 *entry = NEXT_TX(*entry); 5987 } 5988 5989 return hwbug; 5990} 5991 5992static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last) 5993{ 5994 int i; 5995 struct sk_buff *skb; 5996 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry]; 5997 5998 skb = txb->skb; 5999 txb->skb = NULL; 6000 6001 pci_unmap_single(tnapi->tp->pdev, 6002 dma_unmap_addr(txb, mapping), 6003 skb_headlen(skb), 6004 PCI_DMA_TODEVICE); 6005 6006 while (txb->fragmented) { 6007 txb->fragmented = false; 6008 entry = NEXT_TX(entry); 6009 txb = &tnapi->tx_buffers[entry]; 6010 } 6011 6012 for (i = 0; i < last; i++) { 6013 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 6014 6015 entry = NEXT_TX(entry); 6016 txb = &tnapi->tx_buffers[entry]; 6017 6018 pci_unmap_page(tnapi->tp->pdev, 6019 dma_unmap_addr(txb, mapping), 6020 frag->size, PCI_DMA_TODEVICE); 6021 6022 while (txb->fragmented) { 6023 txb->fragmented = false; 6024 entry = NEXT_TX(entry); 6025 txb = &tnapi->tx_buffers[entry]; 6026 } 6027 } 6028} 6029 6030/* Workaround 4GB and 40-bit hardware DMA bugs. */ 6031static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, 6032 struct sk_buff *skb, 6033 u32 *entry, u32 *budget, 6034 u32 base_flags, u32 mss, u32 vlan) 6035{ 6036 struct tg3 *tp = tnapi->tp; 6037 struct sk_buff *new_skb; 6038 dma_addr_t new_addr = 0; 6039 int ret = 0; 6040 6041 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) 6042 new_skb = skb_copy(skb, GFP_ATOMIC); 6043 else { 6044 int more_headroom = 4 - ((unsigned long)skb->data & 3); 6045 6046 new_skb = skb_copy_expand(skb, 6047 skb_headroom(skb) + more_headroom, 6048 skb_tailroom(skb), GFP_ATOMIC); 6049 } 6050 6051 if (!new_skb) { 6052 ret = -1; 6053 } else { 6054 /* New SKB is guaranteed to be linear. */ 6055 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len, 6056 PCI_DMA_TODEVICE); 6057 /* Make sure the mapping succeeded */ 6058 if (pci_dma_mapping_error(tp->pdev, new_addr)) { 6059 dev_kfree_skb(new_skb); 6060 ret = -1; 6061 } else { 6062 base_flags |= TXD_FLAG_END; 6063 6064 tnapi->tx_buffers[*entry].skb = new_skb; 6065 dma_unmap_addr_set(&tnapi->tx_buffers[*entry], 6066 mapping, new_addr); 6067 6068 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr, 6069 new_skb->len, base_flags, 6070 mss, vlan)) { 6071 tg3_tx_skb_unmap(tnapi, *entry, 0); 6072 dev_kfree_skb(new_skb); 6073 ret = -1; 6074 } 6075 } 6076 } 6077 6078 dev_kfree_skb(skb); 6079 6080 return ret; 6081} 6082 6083static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *); 6084 6085/* Use GSO to workaround a rare TSO bug that may be triggered when the 6086 * TSO header is greater than 80 bytes. 6087 */ 6088static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb) 6089{ 6090 struct sk_buff *segs, *nskb; 6091 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; 6092 6093 /* Estimate the number of fragments in the worst case */ 6094 if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) { 6095 netif_stop_queue(tp->dev); 6096 6097 /* netif_tx_stop_queue() must be done before checking 6098 * checking tx index in tg3_tx_avail() below, because in 6099 * tg3_tx(), we update tx index before checking for 6100 * netif_tx_queue_stopped(). 6101 */ 6102 smp_mb(); 6103 if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est) 6104 return NETDEV_TX_BUSY; 6105 6106 netif_wake_queue(tp->dev); 6107 } 6108 6109 segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO); 6110 if (IS_ERR(segs)) 6111 goto tg3_tso_bug_end; 6112 6113 do { 6114 nskb = segs; 6115 segs = segs->next; 6116 nskb->next = NULL; 6117 tg3_start_xmit(nskb, tp->dev); 6118 } while (segs); 6119 6120tg3_tso_bug_end: 6121 dev_kfree_skb(skb); 6122 6123 return NETDEV_TX_OK; 6124} 6125 6126/* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and 6127 * support TG3_FLAG_HW_TSO_1 or firmware TSO only. 6128 */ 6129static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) 6130{ 6131 struct tg3 *tp = netdev_priv(dev); 6132 u32 len, entry, base_flags, mss, vlan = 0; 6133 u32 budget; 6134 int i = -1, would_hit_hwbug; 6135 dma_addr_t mapping; 6136 struct tg3_napi *tnapi; 6137 struct netdev_queue *txq; 6138 unsigned int last; 6139 6140 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 6141 tnapi = &tp->napi[skb_get_queue_mapping(skb)]; 6142 if (tg3_flag(tp, ENABLE_TSS)) 6143 tnapi++; 6144 6145 budget = tg3_tx_avail(tnapi); 6146 6147 /* We are running in BH disabled context with netif_tx_lock 6148 * and TX reclaim runs via tp->napi.poll inside of a software 6149 * interrupt. Furthermore, IRQ processing runs lockless so we have 6150 * no IRQ context deadlocks to worry about either. Rejoice! 6151 */ 6152 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) { 6153 if (!netif_tx_queue_stopped(txq)) { 6154 netif_tx_stop_queue(txq); 6155 6156 /* This is a hard error, log it. */ 6157 netdev_err(dev, 6158 "BUG! Tx Ring full when queue awake!\n"); 6159 } 6160 return NETDEV_TX_BUSY; 6161 } 6162 6163 entry = tnapi->tx_prod; 6164 base_flags = 0; 6165 if (skb->ip_summed == CHECKSUM_PARTIAL) 6166 base_flags |= TXD_FLAG_TCPUDP_CSUM; 6167 6168 mss = skb_shinfo(skb)->gso_size; 6169 if (mss) { 6170 struct iphdr *iph; 6171 u32 tcp_opt_len, hdr_len; 6172 6173 if (skb_header_cloned(skb) && 6174 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { 6175 dev_kfree_skb(skb); 6176 goto out_unlock; 6177 } 6178 6179 iph = ip_hdr(skb); 6180 tcp_opt_len = tcp_optlen(skb); 6181 6182 if (skb_is_gso_v6(skb)) { 6183 hdr_len = skb_headlen(skb) - ETH_HLEN; 6184 } else { 6185 u32 ip_tcp_len; 6186 6187 ip_tcp_len = ip_hdrlen(skb) + sizeof(struct tcphdr); 6188 hdr_len = ip_tcp_len + tcp_opt_len; 6189 6190 iph->check = 0; 6191 iph->tot_len = htons(mss + hdr_len); 6192 } 6193 6194 if (unlikely((ETH_HLEN + hdr_len) > 80) && 6195 tg3_flag(tp, TSO_BUG)) 6196 return tg3_tso_bug(tp, skb); 6197 6198 base_flags |= (TXD_FLAG_CPU_PRE_DMA | 6199 TXD_FLAG_CPU_POST_DMA); 6200 6201 if (tg3_flag(tp, HW_TSO_1) || 6202 tg3_flag(tp, HW_TSO_2) || 6203 tg3_flag(tp, HW_TSO_3)) { 6204 tcp_hdr(skb)->check = 0; 6205 base_flags &= ~TXD_FLAG_TCPUDP_CSUM; 6206 } else 6207 tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr, 6208 iph->daddr, 0, 6209 IPPROTO_TCP, 6210 0); 6211 6212 if (tg3_flag(tp, HW_TSO_3)) { 6213 mss |= (hdr_len & 0xc) << 12; 6214 if (hdr_len & 0x10) 6215 base_flags |= 0x00000010; 6216 base_flags |= (hdr_len & 0x3e0) << 5; 6217 } else if (tg3_flag(tp, HW_TSO_2)) 6218 mss |= hdr_len << 9; 6219 else if (tg3_flag(tp, HW_TSO_1) || 6220 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 6221 if (tcp_opt_len || iph->ihl > 5) { 6222 int tsflags; 6223 6224 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 6225 mss |= (tsflags << 11); 6226 } 6227 } else { 6228 if (tcp_opt_len || iph->ihl > 5) { 6229 int tsflags; 6230 6231 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 6232 base_flags |= tsflags << 12; 6233 } 6234 } 6235 } 6236 6237 if (vlan_tx_tag_present(skb)) { 6238 base_flags |= TXD_FLAG_VLAN; 6239 vlan = vlan_tx_tag_get(skb); 6240 } 6241 6242 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 6243 !mss && skb->len > VLAN_ETH_FRAME_LEN) 6244 base_flags |= TXD_FLAG_JMB_PKT; 6245 6246 len = skb_headlen(skb); 6247 6248 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE); 6249 if (pci_dma_mapping_error(tp->pdev, mapping)) { 6250 dev_kfree_skb(skb); 6251 goto out_unlock; 6252 } 6253 6254 tnapi->tx_buffers[entry].skb = skb; 6255 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 6256 6257 would_hit_hwbug = 0; 6258 6259 if (tg3_flag(tp, 5701_DMA_BUG)) 6260 would_hit_hwbug = 1; 6261 6262 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags | 6263 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0), 6264 mss, vlan)) 6265 would_hit_hwbug = 1; 6266 6267 /* Now loop through additional data fragments, and queue them. */ 6268 if (skb_shinfo(skb)->nr_frags > 0) { 6269 u32 tmp_mss = mss; 6270 6271 if (!tg3_flag(tp, HW_TSO_1) && 6272 !tg3_flag(tp, HW_TSO_2) && 6273 !tg3_flag(tp, HW_TSO_3)) 6274 tmp_mss = 0; 6275 6276 last = skb_shinfo(skb)->nr_frags - 1; 6277 for (i = 0; i <= last; i++) { 6278 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 6279 6280 len = frag->size; 6281 mapping = pci_map_page(tp->pdev, 6282 frag->page, 6283 frag->page_offset, 6284 len, PCI_DMA_TODEVICE); 6285 6286 tnapi->tx_buffers[entry].skb = NULL; 6287 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, 6288 mapping); 6289 if (pci_dma_mapping_error(tp->pdev, mapping)) 6290 goto dma_error; 6291 6292 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, 6293 len, base_flags | 6294 ((i == last) ? TXD_FLAG_END : 0), 6295 tmp_mss, vlan)) 6296 would_hit_hwbug = 1; 6297 } 6298 } 6299 6300 if (would_hit_hwbug) { 6301 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 6302 6303 /* If the workaround fails due to memory/mapping 6304 * failure, silently drop this packet. 6305 */ 6306 entry = tnapi->tx_prod; 6307 budget = tg3_tx_avail(tnapi); 6308 if (tigon3_dma_hwbug_workaround(tnapi, skb, &entry, &budget, 6309 base_flags, mss, vlan)) 6310 goto out_unlock; 6311 } 6312 6313 skb_tx_timestamp(skb); 6314 6315 /* Packets are ready, update Tx producer idx local and on card. */ 6316 tw32_tx_mbox(tnapi->prodmbox, entry); 6317 6318 tnapi->tx_prod = entry; 6319 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) { 6320 netif_tx_stop_queue(txq); 6321 6322 /* netif_tx_stop_queue() must be done before checking 6323 * checking tx index in tg3_tx_avail() below, because in 6324 * tg3_tx(), we update tx index before checking for 6325 * netif_tx_queue_stopped(). 6326 */ 6327 smp_mb(); 6328 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)) 6329 netif_tx_wake_queue(txq); 6330 } 6331 6332out_unlock: 6333 mmiowb(); 6334 6335 return NETDEV_TX_OK; 6336 6337dma_error: 6338 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 6339 dev_kfree_skb(skb); 6340 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 6341 return NETDEV_TX_OK; 6342} 6343 6344static void tg3_set_loopback(struct net_device *dev, u32 features) 6345{ 6346 struct tg3 *tp = netdev_priv(dev); 6347 6348 if (features & NETIF_F_LOOPBACK) { 6349 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK) 6350 return; 6351 6352 /* 6353 * Clear MAC_MODE_HALF_DUPLEX or you won't get packets back in 6354 * loopback mode if Half-Duplex mode was negotiated earlier. 6355 */ 6356 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 6357 6358 /* Enable internal MAC loopback mode */ 6359 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK; 6360 spin_lock_bh(&tp->lock); 6361 tw32(MAC_MODE, tp->mac_mode); 6362 netif_carrier_on(tp->dev); 6363 spin_unlock_bh(&tp->lock); 6364 netdev_info(dev, "Internal MAC loopback mode enabled.\n"); 6365 } else { 6366 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 6367 return; 6368 6369 /* Disable internal MAC loopback mode */ 6370 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK; 6371 spin_lock_bh(&tp->lock); 6372 tw32(MAC_MODE, tp->mac_mode); 6373 /* Force link status check */ 6374 tg3_setup_phy(tp, 1); 6375 spin_unlock_bh(&tp->lock); 6376 netdev_info(dev, "Internal MAC loopback mode disabled.\n"); 6377 } 6378} 6379 6380static u32 tg3_fix_features(struct net_device *dev, u32 features) 6381{ 6382 struct tg3 *tp = netdev_priv(dev); 6383 6384 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS)) 6385 features &= ~NETIF_F_ALL_TSO; 6386 6387 return features; 6388} 6389 6390static int tg3_set_features(struct net_device *dev, u32 features) 6391{ 6392 u32 changed = dev->features ^ features; 6393 6394 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev)) 6395 tg3_set_loopback(dev, features); 6396 6397 return 0; 6398} 6399 6400static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, 6401 int new_mtu) 6402{ 6403 dev->mtu = new_mtu; 6404 6405 if (new_mtu > ETH_DATA_LEN) { 6406 if (tg3_flag(tp, 5780_CLASS)) { 6407 netdev_update_features(dev); 6408 tg3_flag_clear(tp, TSO_CAPABLE); 6409 } else { 6410 tg3_flag_set(tp, JUMBO_RING_ENABLE); 6411 } 6412 } else { 6413 if (tg3_flag(tp, 5780_CLASS)) { 6414 tg3_flag_set(tp, TSO_CAPABLE); 6415 netdev_update_features(dev); 6416 } 6417 tg3_flag_clear(tp, JUMBO_RING_ENABLE); 6418 } 6419} 6420 6421static int tg3_change_mtu(struct net_device *dev, int new_mtu) 6422{ 6423 struct tg3 *tp = netdev_priv(dev); 6424 int err; 6425 6426 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp)) 6427 return -EINVAL; 6428 6429 if (!netif_running(dev)) { 6430 /* We'll just catch it later when the 6431 * device is up'd. 6432 */ 6433 tg3_set_mtu(dev, tp, new_mtu); 6434 return 0; 6435 } 6436 6437 tg3_phy_stop(tp); 6438 6439 tg3_netif_stop(tp); 6440 6441 tg3_full_lock(tp, 1); 6442 6443 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 6444 6445 tg3_set_mtu(dev, tp, new_mtu); 6446 6447 err = tg3_restart_hw(tp, 0); 6448 6449 if (!err) 6450 tg3_netif_start(tp); 6451 6452 tg3_full_unlock(tp); 6453 6454 if (!err) 6455 tg3_phy_start(tp); 6456 6457 return err; 6458} 6459 6460static void tg3_rx_prodring_free(struct tg3 *tp, 6461 struct tg3_rx_prodring_set *tpr) 6462{ 6463 int i; 6464 6465 if (tpr != &tp->napi[0].prodring) { 6466 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx; 6467 i = (i + 1) & tp->rx_std_ring_mask) 6468 tg3_rx_skb_free(tp, &tpr->rx_std_buffers[i], 6469 tp->rx_pkt_map_sz); 6470 6471 if (tg3_flag(tp, JUMBO_CAPABLE)) { 6472 for (i = tpr->rx_jmb_cons_idx; 6473 i != tpr->rx_jmb_prod_idx; 6474 i = (i + 1) & tp->rx_jmb_ring_mask) { 6475 tg3_rx_skb_free(tp, &tpr->rx_jmb_buffers[i], 6476 TG3_RX_JMB_MAP_SZ); 6477 } 6478 } 6479 6480 return; 6481 } 6482 6483 for (i = 0; i <= tp->rx_std_ring_mask; i++) 6484 tg3_rx_skb_free(tp, &tpr->rx_std_buffers[i], 6485 tp->rx_pkt_map_sz); 6486 6487 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 6488 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) 6489 tg3_rx_skb_free(tp, &tpr->rx_jmb_buffers[i], 6490 TG3_RX_JMB_MAP_SZ); 6491 } 6492} 6493 6494/* Initialize rx rings for packet processing. 6495 * 6496 * The chip has been shut down and the driver detached from 6497 * the networking, so no interrupts or new tx packets will 6498 * end up in the driver. tp->{tx,}lock are held and thus 6499 * we may not sleep. 6500 */ 6501static int tg3_rx_prodring_alloc(struct tg3 *tp, 6502 struct tg3_rx_prodring_set *tpr) 6503{ 6504 u32 i, rx_pkt_dma_sz; 6505 6506 tpr->rx_std_cons_idx = 0; 6507 tpr->rx_std_prod_idx = 0; 6508 tpr->rx_jmb_cons_idx = 0; 6509 tpr->rx_jmb_prod_idx = 0; 6510 6511 if (tpr != &tp->napi[0].prodring) { 6512 memset(&tpr->rx_std_buffers[0], 0, 6513 TG3_RX_STD_BUFF_RING_SIZE(tp)); 6514 if (tpr->rx_jmb_buffers) 6515 memset(&tpr->rx_jmb_buffers[0], 0, 6516 TG3_RX_JMB_BUFF_RING_SIZE(tp)); 6517 goto done; 6518 } 6519 6520 /* Zero out all descriptors. */ 6521 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp)); 6522 6523 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ; 6524 if (tg3_flag(tp, 5780_CLASS) && 6525 tp->dev->mtu > ETH_DATA_LEN) 6526 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ; 6527 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz); 6528 6529 /* Initialize invariants of the rings, we only set this 6530 * stuff once. This works because the card does not 6531 * write into the rx buffer posting rings. 6532 */ 6533 for (i = 0; i <= tp->rx_std_ring_mask; i++) { 6534 struct tg3_rx_buffer_desc *rxd; 6535 6536 rxd = &tpr->rx_std[i]; 6537 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT; 6538 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); 6539 rxd->opaque = (RXD_OPAQUE_RING_STD | 6540 (i << RXD_OPAQUE_INDEX_SHIFT)); 6541 } 6542 6543 /* Now allocate fresh SKBs for each rx ring. */ 6544 for (i = 0; i < tp->rx_pending; i++) { 6545 if (tg3_alloc_rx_skb(tp, tpr, RXD_OPAQUE_RING_STD, i) < 0) { 6546 netdev_warn(tp->dev, 6547 "Using a smaller RX standard ring. Only " 6548 "%d out of %d buffers were allocated " 6549 "successfully\n", i, tp->rx_pending); 6550 if (i == 0) 6551 goto initfail; 6552 tp->rx_pending = i; 6553 break; 6554 } 6555 } 6556 6557 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 6558 goto done; 6559 6560 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp)); 6561 6562 if (!tg3_flag(tp, JUMBO_RING_ENABLE)) 6563 goto done; 6564 6565 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) { 6566 struct tg3_rx_buffer_desc *rxd; 6567 6568 rxd = &tpr->rx_jmb[i].std; 6569 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT; 6570 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) | 6571 RXD_FLAG_JUMBO; 6572 rxd->opaque = (RXD_OPAQUE_RING_JUMBO | 6573 (i << RXD_OPAQUE_INDEX_SHIFT)); 6574 } 6575 6576 for (i = 0; i < tp->rx_jumbo_pending; i++) { 6577 if (tg3_alloc_rx_skb(tp, tpr, RXD_OPAQUE_RING_JUMBO, i) < 0) { 6578 netdev_warn(tp->dev, 6579 "Using a smaller RX jumbo ring. Only %d " 6580 "out of %d buffers were allocated " 6581 "successfully\n", i, tp->rx_jumbo_pending); 6582 if (i == 0) 6583 goto initfail; 6584 tp->rx_jumbo_pending = i; 6585 break; 6586 } 6587 } 6588 6589done: 6590 return 0; 6591 6592initfail: 6593 tg3_rx_prodring_free(tp, tpr); 6594 return -ENOMEM; 6595} 6596 6597static void tg3_rx_prodring_fini(struct tg3 *tp, 6598 struct tg3_rx_prodring_set *tpr) 6599{ 6600 kfree(tpr->rx_std_buffers); 6601 tpr->rx_std_buffers = NULL; 6602 kfree(tpr->rx_jmb_buffers); 6603 tpr->rx_jmb_buffers = NULL; 6604 if (tpr->rx_std) { 6605 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp), 6606 tpr->rx_std, tpr->rx_std_mapping); 6607 tpr->rx_std = NULL; 6608 } 6609 if (tpr->rx_jmb) { 6610 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp), 6611 tpr->rx_jmb, tpr->rx_jmb_mapping); 6612 tpr->rx_jmb = NULL; 6613 } 6614} 6615 6616static int tg3_rx_prodring_init(struct tg3 *tp, 6617 struct tg3_rx_prodring_set *tpr) 6618{ 6619 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp), 6620 GFP_KERNEL); 6621 if (!tpr->rx_std_buffers) 6622 return -ENOMEM; 6623 6624 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev, 6625 TG3_RX_STD_RING_BYTES(tp), 6626 &tpr->rx_std_mapping, 6627 GFP_KERNEL); 6628 if (!tpr->rx_std) 6629 goto err_out; 6630 6631 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 6632 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp), 6633 GFP_KERNEL); 6634 if (!tpr->rx_jmb_buffers) 6635 goto err_out; 6636 6637 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev, 6638 TG3_RX_JMB_RING_BYTES(tp), 6639 &tpr->rx_jmb_mapping, 6640 GFP_KERNEL); 6641 if (!tpr->rx_jmb) 6642 goto err_out; 6643 } 6644 6645 return 0; 6646 6647err_out: 6648 tg3_rx_prodring_fini(tp, tpr); 6649 return -ENOMEM; 6650} 6651 6652/* Free up pending packets in all rx/tx rings. 6653 * 6654 * The chip has been shut down and the driver detached from 6655 * the networking, so no interrupts or new tx packets will 6656 * end up in the driver. tp->{tx,}lock is not held and we are not 6657 * in an interrupt context and thus may sleep. 6658 */ 6659static void tg3_free_rings(struct tg3 *tp) 6660{ 6661 int i, j; 6662 6663 for (j = 0; j < tp->irq_cnt; j++) { 6664 struct tg3_napi *tnapi = &tp->napi[j]; 6665 6666 tg3_rx_prodring_free(tp, &tnapi->prodring); 6667 6668 if (!tnapi->tx_buffers) 6669 continue; 6670 6671 for (i = 0; i < TG3_TX_RING_SIZE; i++) { 6672 struct sk_buff *skb = tnapi->tx_buffers[i].skb; 6673 6674 if (!skb) 6675 continue; 6676 6677 tg3_tx_skb_unmap(tnapi, i, skb_shinfo(skb)->nr_frags); 6678 6679 dev_kfree_skb_any(skb); 6680 } 6681 } 6682} 6683 6684/* Initialize tx/rx rings for packet processing. 6685 * 6686 * The chip has been shut down and the driver detached from 6687 * the networking, so no interrupts or new tx packets will 6688 * end up in the driver. tp->{tx,}lock are held and thus 6689 * we may not sleep. 6690 */ 6691static int tg3_init_rings(struct tg3 *tp) 6692{ 6693 int i; 6694 6695 /* Free up all the SKBs. */ 6696 tg3_free_rings(tp); 6697 6698 for (i = 0; i < tp->irq_cnt; i++) { 6699 struct tg3_napi *tnapi = &tp->napi[i]; 6700 6701 tnapi->last_tag = 0; 6702 tnapi->last_irq_tag = 0; 6703 tnapi->hw_status->status = 0; 6704 tnapi->hw_status->status_tag = 0; 6705 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 6706 6707 tnapi->tx_prod = 0; 6708 tnapi->tx_cons = 0; 6709 if (tnapi->tx_ring) 6710 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES); 6711 6712 tnapi->rx_rcb_ptr = 0; 6713 if (tnapi->rx_rcb) 6714 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 6715 6716 if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) { 6717 tg3_free_rings(tp); 6718 return -ENOMEM; 6719 } 6720 } 6721 6722 return 0; 6723} 6724 6725/* 6726 * Must not be invoked with interrupt sources disabled and 6727 * the hardware shutdown down. 6728 */ 6729static void tg3_free_consistent(struct tg3 *tp) 6730{ 6731 int i; 6732 6733 for (i = 0; i < tp->irq_cnt; i++) { 6734 struct tg3_napi *tnapi = &tp->napi[i]; 6735 6736 if (tnapi->tx_ring) { 6737 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES, 6738 tnapi->tx_ring, tnapi->tx_desc_mapping); 6739 tnapi->tx_ring = NULL; 6740 } 6741 6742 kfree(tnapi->tx_buffers); 6743 tnapi->tx_buffers = NULL; 6744 6745 if (tnapi->rx_rcb) { 6746 dma_free_coherent(&tp->pdev->dev, 6747 TG3_RX_RCB_RING_BYTES(tp), 6748 tnapi->rx_rcb, 6749 tnapi->rx_rcb_mapping); 6750 tnapi->rx_rcb = NULL; 6751 } 6752 6753 tg3_rx_prodring_fini(tp, &tnapi->prodring); 6754 6755 if (tnapi->hw_status) { 6756 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE, 6757 tnapi->hw_status, 6758 tnapi->status_mapping); 6759 tnapi->hw_status = NULL; 6760 } 6761 } 6762 6763 if (tp->hw_stats) { 6764 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 6765 tp->hw_stats, tp->stats_mapping); 6766 tp->hw_stats = NULL; 6767 } 6768} 6769 6770/* 6771 * Must not be invoked with interrupt sources disabled and 6772 * the hardware shutdown down. Can sleep. 6773 */ 6774static int tg3_alloc_consistent(struct tg3 *tp) 6775{ 6776 int i; 6777 6778 tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev, 6779 sizeof(struct tg3_hw_stats), 6780 &tp->stats_mapping, 6781 GFP_KERNEL); 6782 if (!tp->hw_stats) 6783 goto err_out; 6784 6785 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 6786 6787 for (i = 0; i < tp->irq_cnt; i++) { 6788 struct tg3_napi *tnapi = &tp->napi[i]; 6789 struct tg3_hw_status *sblk; 6790 6791 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev, 6792 TG3_HW_STATUS_SIZE, 6793 &tnapi->status_mapping, 6794 GFP_KERNEL); 6795 if (!tnapi->hw_status) 6796 goto err_out; 6797 6798 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 6799 sblk = tnapi->hw_status; 6800 6801 if (tg3_rx_prodring_init(tp, &tnapi->prodring)) 6802 goto err_out; 6803 6804 /* If multivector TSS is enabled, vector 0 does not handle 6805 * tx interrupts. Don't allocate any resources for it. 6806 */ 6807 if ((!i && !tg3_flag(tp, ENABLE_TSS)) || 6808 (i && tg3_flag(tp, ENABLE_TSS))) { 6809 tnapi->tx_buffers = kzalloc( 6810 sizeof(struct tg3_tx_ring_info) * 6811 TG3_TX_RING_SIZE, GFP_KERNEL); 6812 if (!tnapi->tx_buffers) 6813 goto err_out; 6814 6815 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev, 6816 TG3_TX_RING_BYTES, 6817 &tnapi->tx_desc_mapping, 6818 GFP_KERNEL); 6819 if (!tnapi->tx_ring) 6820 goto err_out; 6821 } 6822 6823 /* 6824 * When RSS is enabled, the status block format changes 6825 * slightly. The "rx_jumbo_consumer", "reserved", 6826 * and "rx_mini_consumer" members get mapped to the 6827 * other three rx return ring producer indexes. 6828 */ 6829 switch (i) { 6830 default: 6831 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 6832 break; 6833 case 2: 6834 tnapi->rx_rcb_prod_idx = &sblk->rx_jumbo_consumer; 6835 break; 6836 case 3: 6837 tnapi->rx_rcb_prod_idx = &sblk->reserved; 6838 break; 6839 case 4: 6840 tnapi->rx_rcb_prod_idx = &sblk->rx_mini_consumer; 6841 break; 6842 } 6843 6844 /* 6845 * If multivector RSS is enabled, vector 0 does not handle 6846 * rx or tx interrupts. Don't allocate any resources for it. 6847 */ 6848 if (!i && tg3_flag(tp, ENABLE_RSS)) 6849 continue; 6850 6851 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev, 6852 TG3_RX_RCB_RING_BYTES(tp), 6853 &tnapi->rx_rcb_mapping, 6854 GFP_KERNEL); 6855 if (!tnapi->rx_rcb) 6856 goto err_out; 6857 6858 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 6859 } 6860 6861 return 0; 6862 6863err_out: 6864 tg3_free_consistent(tp); 6865 return -ENOMEM; 6866} 6867 6868#define MAX_WAIT_CNT 1000 6869 6870/* To stop a block, clear the enable bit and poll till it 6871 * clears. tp->lock is held. 6872 */ 6873static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent) 6874{ 6875 unsigned int i; 6876 u32 val; 6877 6878 if (tg3_flag(tp, 5705_PLUS)) { 6879 switch (ofs) { 6880 case RCVLSC_MODE: 6881 case DMAC_MODE: 6882 case MBFREE_MODE: 6883 case BUFMGR_MODE: 6884 case MEMARB_MODE: 6885 /* We can't enable/disable these bits of the 6886 * 5705/5750, just say success. 6887 */ 6888 return 0; 6889 6890 default: 6891 break; 6892 } 6893 } 6894 6895 val = tr32(ofs); 6896 val &= ~enable_bit; 6897 tw32_f(ofs, val); 6898 6899 for (i = 0; i < MAX_WAIT_CNT; i++) { 6900 udelay(100); 6901 val = tr32(ofs); 6902 if ((val & enable_bit) == 0) 6903 break; 6904 } 6905 6906 if (i == MAX_WAIT_CNT && !silent) { 6907 dev_err(&tp->pdev->dev, 6908 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n", 6909 ofs, enable_bit); 6910 return -ENODEV; 6911 } 6912 6913 return 0; 6914} 6915 6916/* tp->lock is held. */ 6917static int tg3_abort_hw(struct tg3 *tp, int silent) 6918{ 6919 int i, err; 6920 6921 tg3_disable_ints(tp); 6922 6923 tp->rx_mode &= ~RX_MODE_ENABLE; 6924 tw32_f(MAC_RX_MODE, tp->rx_mode); 6925 udelay(10); 6926 6927 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent); 6928 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent); 6929 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent); 6930 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent); 6931 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent); 6932 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent); 6933 6934 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent); 6935 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent); 6936 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent); 6937 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent); 6938 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent); 6939 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent); 6940 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent); 6941 6942 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 6943 tw32_f(MAC_MODE, tp->mac_mode); 6944 udelay(40); 6945 6946 tp->tx_mode &= ~TX_MODE_ENABLE; 6947 tw32_f(MAC_TX_MODE, tp->tx_mode); 6948 6949 for (i = 0; i < MAX_WAIT_CNT; i++) { 6950 udelay(100); 6951 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE)) 6952 break; 6953 } 6954 if (i >= MAX_WAIT_CNT) { 6955 dev_err(&tp->pdev->dev, 6956 "%s timed out, TX_MODE_ENABLE will not clear " 6957 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE)); 6958 err |= -ENODEV; 6959 } 6960 6961 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent); 6962 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent); 6963 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent); 6964 6965 tw32(FTQ_RESET, 0xffffffff); 6966 tw32(FTQ_RESET, 0x00000000); 6967 6968 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent); 6969 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent); 6970 6971 for (i = 0; i < tp->irq_cnt; i++) { 6972 struct tg3_napi *tnapi = &tp->napi[i]; 6973 if (tnapi->hw_status) 6974 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 6975 } 6976 if (tp->hw_stats) 6977 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 6978 6979 return err; 6980} 6981 6982static void tg3_ape_send_event(struct tg3 *tp, u32 event) 6983{ 6984 int i; 6985 u32 apedata; 6986 6987 /* NCSI does not support APE events */ 6988 if (tg3_flag(tp, APE_HAS_NCSI)) 6989 return; 6990 6991 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 6992 if (apedata != APE_SEG_SIG_MAGIC) 6993 return; 6994 6995 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 6996 if (!(apedata & APE_FW_STATUS_READY)) 6997 return; 6998 6999 /* Wait for up to 1 millisecond for APE to service previous event. */ 7000 for (i = 0; i < 10; i++) { 7001 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM)) 7002 return; 7003 7004 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 7005 7006 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 7007 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, 7008 event | APE_EVENT_STATUS_EVENT_PENDING); 7009 7010 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 7011 7012 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 7013 break; 7014 7015 udelay(100); 7016 } 7017 7018 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 7019 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 7020} 7021 7022static void tg3_ape_driver_state_change(struct tg3 *tp, int kind) 7023{ 7024 u32 event; 7025 u32 apedata; 7026 7027 if (!tg3_flag(tp, ENABLE_APE)) 7028 return; 7029 7030 switch (kind) { 7031 case RESET_KIND_INIT: 7032 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 7033 APE_HOST_SEG_SIG_MAGIC); 7034 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN, 7035 APE_HOST_SEG_LEN_MAGIC); 7036 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT); 7037 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata); 7038 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID, 7039 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM)); 7040 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR, 7041 APE_HOST_BEHAV_NO_PHYLOCK); 7042 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, 7043 TG3_APE_HOST_DRVR_STATE_START); 7044 7045 event = APE_EVENT_STATUS_STATE_START; 7046 break; 7047 case RESET_KIND_SHUTDOWN: 7048 /* With the interface we are currently using, 7049 * APE does not track driver state. Wiping 7050 * out the HOST SEGMENT SIGNATURE forces 7051 * the APE to assume OS absent status. 7052 */ 7053 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0); 7054 7055 if (device_may_wakeup(&tp->pdev->dev) && 7056 tg3_flag(tp, WOL_ENABLE)) { 7057 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED, 7058 TG3_APE_HOST_WOL_SPEED_AUTO); 7059 apedata = TG3_APE_HOST_DRVR_STATE_WOL; 7060 } else 7061 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD; 7062 7063 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata); 7064 7065 event = APE_EVENT_STATUS_STATE_UNLOAD; 7066 break; 7067 case RESET_KIND_SUSPEND: 7068 event = APE_EVENT_STATUS_STATE_SUSPEND; 7069 break; 7070 default: 7071 return; 7072 } 7073 7074 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE; 7075 7076 tg3_ape_send_event(tp, event); 7077} 7078 7079/* tp->lock is held. */ 7080static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) 7081{ 7082 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, 7083 NIC_SRAM_FIRMWARE_MBOX_MAGIC1); 7084 7085 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 7086 switch (kind) { 7087 case RESET_KIND_INIT: 7088 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 7089 DRV_STATE_START); 7090 break; 7091 7092 case RESET_KIND_SHUTDOWN: 7093 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 7094 DRV_STATE_UNLOAD); 7095 break; 7096 7097 case RESET_KIND_SUSPEND: 7098 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 7099 DRV_STATE_SUSPEND); 7100 break; 7101 7102 default: 7103 break; 7104 } 7105 } 7106 7107 if (kind == RESET_KIND_INIT || 7108 kind == RESET_KIND_SUSPEND) 7109 tg3_ape_driver_state_change(tp, kind); 7110} 7111 7112/* tp->lock is held. */ 7113static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) 7114{ 7115 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 7116 switch (kind) { 7117 case RESET_KIND_INIT: 7118 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 7119 DRV_STATE_START_DONE); 7120 break; 7121 7122 case RESET_KIND_SHUTDOWN: 7123 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 7124 DRV_STATE_UNLOAD_DONE); 7125 break; 7126 7127 default: 7128 break; 7129 } 7130 } 7131 7132 if (kind == RESET_KIND_SHUTDOWN) 7133 tg3_ape_driver_state_change(tp, kind); 7134} 7135 7136/* tp->lock is held. */ 7137static void tg3_write_sig_legacy(struct tg3 *tp, int kind) 7138{ 7139 if (tg3_flag(tp, ENABLE_ASF)) { 7140 switch (kind) { 7141 case RESET_KIND_INIT: 7142 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 7143 DRV_STATE_START); 7144 break; 7145 7146 case RESET_KIND_SHUTDOWN: 7147 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 7148 DRV_STATE_UNLOAD); 7149 break; 7150 7151 case RESET_KIND_SUSPEND: 7152 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 7153 DRV_STATE_SUSPEND); 7154 break; 7155 7156 default: 7157 break; 7158 } 7159 } 7160} 7161 7162static int tg3_poll_fw(struct tg3 *tp) 7163{ 7164 int i; 7165 u32 val; 7166 7167 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 7168 /* Wait up to 20ms for init done. */ 7169 for (i = 0; i < 200; i++) { 7170 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE) 7171 return 0; 7172 udelay(100); 7173 } 7174 return -ENODEV; 7175 } 7176 7177 /* Wait for firmware initialization to complete. */ 7178 for (i = 0; i < 100000; i++) { 7179 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); 7180 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 7181 break; 7182 udelay(10); 7183 } 7184 7185 /* Chip might not be fitted with firmware. Some Sun onboard 7186 * parts are configured like that. So don't signal the timeout 7187 * of the above loop as an error, but do report the lack of 7188 * running firmware once. 7189 */ 7190 if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) { 7191 tg3_flag_set(tp, NO_FWARE_REPORTED); 7192 7193 netdev_info(tp->dev, "No firmware running\n"); 7194 } 7195 7196 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) { 7197 /* The 57765 A0 needs a little more 7198 * time to do some important work. 7199 */ 7200 mdelay(10); 7201 } 7202 7203 return 0; 7204} 7205 7206/* Save PCI command register before chip reset */ 7207static void tg3_save_pci_state(struct tg3 *tp) 7208{ 7209 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd); 7210} 7211 7212/* Restore PCI state after chip reset */ 7213static void tg3_restore_pci_state(struct tg3 *tp) 7214{ 7215 u32 val; 7216 7217 /* Re-enable indirect register accesses. */ 7218 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 7219 tp->misc_host_ctrl); 7220 7221 /* Set MAX PCI retry to zero. */ 7222 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE); 7223 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && 7224 tg3_flag(tp, PCIX_MODE)) 7225 val |= PCISTATE_RETRY_SAME_DMA; 7226 /* Allow reads and writes to the APE register and memory space. */ 7227 if (tg3_flag(tp, ENABLE_APE)) 7228 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 7229 PCISTATE_ALLOW_APE_SHMEM_WR | 7230 PCISTATE_ALLOW_APE_PSPACE_WR; 7231 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val); 7232 7233 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd); 7234 7235 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785) { 7236 if (tg3_flag(tp, PCI_EXPRESS)) 7237 pcie_set_readrq(tp->pdev, tp->pcie_readrq); 7238 else { 7239 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 7240 tp->pci_cacheline_sz); 7241 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 7242 tp->pci_lat_timer); 7243 } 7244 } 7245 7246 /* Make sure PCI-X relaxed ordering bit is clear. */ 7247 if (tg3_flag(tp, PCIX_MODE)) { 7248 u16 pcix_cmd; 7249 7250 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 7251 &pcix_cmd); 7252 pcix_cmd &= ~PCI_X_CMD_ERO; 7253 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 7254 pcix_cmd); 7255 } 7256 7257 if (tg3_flag(tp, 5780_CLASS)) { 7258 7259 /* Chip reset on 5780 will reset MSI enable bit, 7260 * so need to restore it. 7261 */ 7262 if (tg3_flag(tp, USING_MSI)) { 7263 u16 ctrl; 7264 7265 pci_read_config_word(tp->pdev, 7266 tp->msi_cap + PCI_MSI_FLAGS, 7267 &ctrl); 7268 pci_write_config_word(tp->pdev, 7269 tp->msi_cap + PCI_MSI_FLAGS, 7270 ctrl | PCI_MSI_FLAGS_ENABLE); 7271 val = tr32(MSGINT_MODE); 7272 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); 7273 } 7274 } 7275} 7276 7277static void tg3_stop_fw(struct tg3 *); 7278 7279/* tp->lock is held. */ 7280static int tg3_chip_reset(struct tg3 *tp) 7281{ 7282 u32 val; 7283 void (*write_op)(struct tg3 *, u32, u32); 7284 int i, err; 7285 7286 tg3_nvram_lock(tp); 7287 7288 tg3_ape_lock(tp, TG3_APE_LOCK_GRC); 7289 7290 /* No matching tg3_nvram_unlock() after this because 7291 * chip reset below will undo the nvram lock. 7292 */ 7293 tp->nvram_lock_cnt = 0; 7294 7295 /* GRC_MISC_CFG core clock reset will clear the memory 7296 * enable bit in PCI register 4 and the MSI enable bit 7297 * on some chips, so we save relevant registers here. 7298 */ 7299 tg3_save_pci_state(tp); 7300 7301 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 7302 tg3_flag(tp, 5755_PLUS)) 7303 tw32(GRC_FASTBOOT_PC, 0); 7304 7305 /* 7306 * We must avoid the readl() that normally takes place. 7307 * It locks machines, causes machine checks, and other 7308 * fun things. So, temporarily disable the 5701 7309 * hardware workaround, while we do the reset. 7310 */ 7311 write_op = tp->write32; 7312 if (write_op == tg3_write_flush_reg32) 7313 tp->write32 = tg3_write32; 7314 7315 /* Prevent the irq handler from reading or writing PCI registers 7316 * during chip reset when the memory enable bit in the PCI command 7317 * register may be cleared. The chip does not generate interrupt 7318 * at this time, but the irq handler may still be called due to irq 7319 * sharing or irqpoll. 7320 */ 7321 tg3_flag_set(tp, CHIP_RESETTING); 7322 for (i = 0; i < tp->irq_cnt; i++) { 7323 struct tg3_napi *tnapi = &tp->napi[i]; 7324 if (tnapi->hw_status) { 7325 tnapi->hw_status->status = 0; 7326 tnapi->hw_status->status_tag = 0; 7327 } 7328 tnapi->last_tag = 0; 7329 tnapi->last_irq_tag = 0; 7330 } 7331 smp_mb(); 7332 7333 for (i = 0; i < tp->irq_cnt; i++) 7334 synchronize_irq(tp->napi[i].irq_vec); 7335 7336 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 7337 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 7338 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 7339 } 7340 7341 /* do the reset */ 7342 val = GRC_MISC_CFG_CORECLK_RESET; 7343 7344 if (tg3_flag(tp, PCI_EXPRESS)) { 7345 /* Force PCIe 1.0a mode */ 7346 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 7347 !tg3_flag(tp, 57765_PLUS) && 7348 tr32(TG3_PCIE_PHY_TSTCTL) == 7349 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM)) 7350 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM); 7351 7352 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) { 7353 tw32(GRC_MISC_CFG, (1 << 29)); 7354 val |= (1 << 29); 7355 } 7356 } 7357 7358 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 7359 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET); 7360 tw32(GRC_VCPU_EXT_CTRL, 7361 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU); 7362 } 7363 7364 /* Manage gphy power for all CPMU absent PCIe devices. */ 7365 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT)) 7366 val |= GRC_MISC_CFG_KEEP_GPHY_POWER; 7367 7368 tw32(GRC_MISC_CFG, val); 7369 7370 /* restore 5701 hardware bug workaround write method */ 7371 tp->write32 = write_op; 7372 7373 /* Unfortunately, we have to delay before the PCI read back. 7374 * Some 575X chips even will not respond to a PCI cfg access 7375 * when the reset command is given to the chip. 7376 * 7377 * How do these hardware designers expect things to work 7378 * properly if the PCI write is posted for a long period 7379 * of time? It is always necessary to have some method by 7380 * which a register read back can occur to push the write 7381 * out which does the reset. 7382 * 7383 * For most tg3 variants the trick below was working. 7384 * Ho hum... 7385 */ 7386 udelay(120); 7387 7388 /* Flush PCI posted writes. The normal MMIO registers 7389 * are inaccessible at this time so this is the only 7390 * way to make this reliably (actually, this is no longer 7391 * the case, see above). I tried to use indirect 7392 * register read/write but this upset some 5701 variants. 7393 */ 7394 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); 7395 7396 udelay(120); 7397 7398 if (tg3_flag(tp, PCI_EXPRESS) && pci_pcie_cap(tp->pdev)) { 7399 u16 val16; 7400 7401 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) { 7402 int i; 7403 u32 cfg_val; 7404 7405 /* Wait for link training to complete. */ 7406 for (i = 0; i < 5000; i++) 7407 udelay(100); 7408 7409 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); 7410 pci_write_config_dword(tp->pdev, 0xc4, 7411 cfg_val | (1 << 15)); 7412 } 7413 7414 /* Clear the "no snoop" and "relaxed ordering" bits. */ 7415 pci_read_config_word(tp->pdev, 7416 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL, 7417 &val16); 7418 val16 &= ~(PCI_EXP_DEVCTL_RELAX_EN | 7419 PCI_EXP_DEVCTL_NOSNOOP_EN); 7420 /* 7421 * Older PCIe devices only support the 128 byte 7422 * MPS setting. Enforce the restriction. 7423 */ 7424 if (!tg3_flag(tp, CPMU_PRESENT)) 7425 val16 &= ~PCI_EXP_DEVCTL_PAYLOAD; 7426 pci_write_config_word(tp->pdev, 7427 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL, 7428 val16); 7429 7430 pcie_set_readrq(tp->pdev, tp->pcie_readrq); 7431 7432 /* Clear error status */ 7433 pci_write_config_word(tp->pdev, 7434 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVSTA, 7435 PCI_EXP_DEVSTA_CED | 7436 PCI_EXP_DEVSTA_NFED | 7437 PCI_EXP_DEVSTA_FED | 7438 PCI_EXP_DEVSTA_URD); 7439 } 7440 7441 tg3_restore_pci_state(tp); 7442 7443 tg3_flag_clear(tp, CHIP_RESETTING); 7444 tg3_flag_clear(tp, ERROR_PROCESSED); 7445 7446 val = 0; 7447 if (tg3_flag(tp, 5780_CLASS)) 7448 val = tr32(MEMARB_MODE); 7449 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 7450 7451 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) { 7452 tg3_stop_fw(tp); 7453 tw32(0x5000, 0x400); 7454 } 7455 7456 tw32(GRC_MODE, tp->grc_mode); 7457 7458 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) { 7459 val = tr32(0xc4); 7460 7461 tw32(0xc4, val | (1 << 15)); 7462 } 7463 7464 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && 7465 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 7466 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; 7467 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) 7468 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; 7469 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 7470 } 7471 7472 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 7473 tp->mac_mode = MAC_MODE_PORT_MODE_TBI; 7474 val = tp->mac_mode; 7475 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 7476 tp->mac_mode = MAC_MODE_PORT_MODE_GMII; 7477 val = tp->mac_mode; 7478 } else 7479 val = 0; 7480 7481 tw32_f(MAC_MODE, val); 7482 udelay(40); 7483 7484 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC); 7485 7486 err = tg3_poll_fw(tp); 7487 if (err) 7488 return err; 7489 7490 tg3_mdio_start(tp); 7491 7492 if (tg3_flag(tp, PCI_EXPRESS) && 7493 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && 7494 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 7495 !tg3_flag(tp, 57765_PLUS)) { 7496 val = tr32(0x7c00); 7497 7498 tw32(0x7c00, val | (1 << 25)); 7499 } 7500 7501 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 7502 val = tr32(TG3_CPMU_CLCK_ORIDE); 7503 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 7504 } 7505 7506 /* Reprobe ASF enable state. */ 7507 tg3_flag_clear(tp, ENABLE_ASF); 7508 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE); 7509 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 7510 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 7511 u32 nic_cfg; 7512 7513 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 7514 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 7515 tg3_flag_set(tp, ENABLE_ASF); 7516 tp->last_event_jiffies = jiffies; 7517 if (tg3_flag(tp, 5750_PLUS)) 7518 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 7519 } 7520 } 7521 7522 return 0; 7523} 7524 7525/* tp->lock is held. */ 7526static void tg3_stop_fw(struct tg3 *tp) 7527{ 7528 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 7529 /* Wait for RX cpu to ACK the previous event. */ 7530 tg3_wait_for_event_ack(tp); 7531 7532 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW); 7533 7534 tg3_generate_fw_event(tp); 7535 7536 /* Wait for RX cpu to ACK this event. */ 7537 tg3_wait_for_event_ack(tp); 7538 } 7539} 7540 7541/* tp->lock is held. */ 7542static int tg3_halt(struct tg3 *tp, int kind, int silent) 7543{ 7544 int err; 7545 7546 tg3_stop_fw(tp); 7547 7548 tg3_write_sig_pre_reset(tp, kind); 7549 7550 tg3_abort_hw(tp, silent); 7551 err = tg3_chip_reset(tp); 7552 7553 __tg3_set_mac_addr(tp, 0); 7554 7555 tg3_write_sig_legacy(tp, kind); 7556 tg3_write_sig_post_reset(tp, kind); 7557 7558 if (err) 7559 return err; 7560 7561 return 0; 7562} 7563 7564#define RX_CPU_SCRATCH_BASE 0x30000 7565#define RX_CPU_SCRATCH_SIZE 0x04000 7566#define TX_CPU_SCRATCH_BASE 0x34000 7567#define TX_CPU_SCRATCH_SIZE 0x04000 7568 7569/* tp->lock is held. */ 7570static int tg3_halt_cpu(struct tg3 *tp, u32 offset) 7571{ 7572 int i; 7573 7574 BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)); 7575 7576 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 7577 u32 val = tr32(GRC_VCPU_EXT_CTRL); 7578 7579 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU); 7580 return 0; 7581 } 7582 if (offset == RX_CPU_BASE) { 7583 for (i = 0; i < 10000; i++) { 7584 tw32(offset + CPU_STATE, 0xffffffff); 7585 tw32(offset + CPU_MODE, CPU_MODE_HALT); 7586 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT) 7587 break; 7588 } 7589 7590 tw32(offset + CPU_STATE, 0xffffffff); 7591 tw32_f(offset + CPU_MODE, CPU_MODE_HALT); 7592 udelay(10); 7593 } else { 7594 for (i = 0; i < 10000; i++) { 7595 tw32(offset + CPU_STATE, 0xffffffff); 7596 tw32(offset + CPU_MODE, CPU_MODE_HALT); 7597 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT) 7598 break; 7599 } 7600 } 7601 7602 if (i >= 10000) { 7603 netdev_err(tp->dev, "%s timed out, %s CPU\n", 7604 __func__, offset == RX_CPU_BASE ? "RX" : "TX"); 7605 return -ENODEV; 7606 } 7607 7608 /* Clear firmware's nvram arbitration. */ 7609 if (tg3_flag(tp, NVRAM)) 7610 tw32(NVRAM_SWARB, SWARB_REQ_CLR0); 7611 return 0; 7612} 7613 7614struct fw_info { 7615 unsigned int fw_base; 7616 unsigned int fw_len; 7617 const __be32 *fw_data; 7618}; 7619 7620/* tp->lock is held. */ 7621static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, u32 cpu_scratch_base, 7622 int cpu_scratch_size, struct fw_info *info) 7623{ 7624 int err, lock_err, i; 7625 void (*write_op)(struct tg3 *, u32, u32); 7626 7627 if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) { 7628 netdev_err(tp->dev, 7629 "%s: Trying to load TX cpu firmware which is 5705\n", 7630 __func__); 7631 return -EINVAL; 7632 } 7633 7634 if (tg3_flag(tp, 5705_PLUS)) 7635 write_op = tg3_write_mem; 7636 else 7637 write_op = tg3_write_indirect_reg32; 7638 7639 /* It is possible that bootcode is still loading at this point. 7640 * Get the nvram lock first before halting the cpu. 7641 */ 7642 lock_err = tg3_nvram_lock(tp); 7643 err = tg3_halt_cpu(tp, cpu_base); 7644 if (!lock_err) 7645 tg3_nvram_unlock(tp); 7646 if (err) 7647 goto out; 7648 7649 for (i = 0; i < cpu_scratch_size; i += sizeof(u32)) 7650 write_op(tp, cpu_scratch_base + i, 0); 7651 tw32(cpu_base + CPU_STATE, 0xffffffff); 7652 tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT); 7653 for (i = 0; i < (info->fw_len / sizeof(u32)); i++) 7654 write_op(tp, (cpu_scratch_base + 7655 (info->fw_base & 0xffff) + 7656 (i * sizeof(u32))), 7657 be32_to_cpu(info->fw_data[i])); 7658 7659 err = 0; 7660 7661out: 7662 return err; 7663} 7664 7665/* tp->lock is held. */ 7666static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp) 7667{ 7668 struct fw_info info; 7669 const __be32 *fw_data; 7670 int err, i; 7671 7672 fw_data = (void *)tp->fw->data; 7673 7674 /* Firmware blob starts with version numbers, followed by 7675 start address and length. We are setting complete length. 7676 length = end_address_of_bss - start_address_of_text. 7677 Remainder is the blob to be loaded contiguously 7678 from start address. */ 7679 7680 info.fw_base = be32_to_cpu(fw_data[1]); 7681 info.fw_len = tp->fw->size - 12; 7682 info.fw_data = &fw_data[3]; 7683 7684 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE, 7685 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE, 7686 &info); 7687 if (err) 7688 return err; 7689 7690 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE, 7691 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE, 7692 &info); 7693 if (err) 7694 return err; 7695 7696 /* Now startup only the RX cpu. */ 7697 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 7698 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base); 7699 7700 for (i = 0; i < 5; i++) { 7701 if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base) 7702 break; 7703 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 7704 tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT); 7705 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base); 7706 udelay(1000); 7707 } 7708 if (i >= 5) { 7709 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x " 7710 "should be %08x\n", __func__, 7711 tr32(RX_CPU_BASE + CPU_PC), info.fw_base); 7712 return -ENODEV; 7713 } 7714 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 7715 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000); 7716 7717 return 0; 7718} 7719 7720/* tp->lock is held. */ 7721static int tg3_load_tso_firmware(struct tg3 *tp) 7722{ 7723 struct fw_info info; 7724 const __be32 *fw_data; 7725 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size; 7726 int err, i; 7727 7728 if (tg3_flag(tp, HW_TSO_1) || 7729 tg3_flag(tp, HW_TSO_2) || 7730 tg3_flag(tp, HW_TSO_3)) 7731 return 0; 7732 7733 fw_data = (void *)tp->fw->data; 7734 7735 /* Firmware blob starts with version numbers, followed by 7736 start address and length. We are setting complete length. 7737 length = end_address_of_bss - start_address_of_text. 7738 Remainder is the blob to be loaded contiguously 7739 from start address. */ 7740 7741 info.fw_base = be32_to_cpu(fw_data[1]); 7742 cpu_scratch_size = tp->fw_len; 7743 info.fw_len = tp->fw->size - 12; 7744 info.fw_data = &fw_data[3]; 7745 7746 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 7747 cpu_base = RX_CPU_BASE; 7748 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705; 7749 } else { 7750 cpu_base = TX_CPU_BASE; 7751 cpu_scratch_base = TX_CPU_SCRATCH_BASE; 7752 cpu_scratch_size = TX_CPU_SCRATCH_SIZE; 7753 } 7754 7755 err = tg3_load_firmware_cpu(tp, cpu_base, 7756 cpu_scratch_base, cpu_scratch_size, 7757 &info); 7758 if (err) 7759 return err; 7760 7761 /* Now startup the cpu. */ 7762 tw32(cpu_base + CPU_STATE, 0xffffffff); 7763 tw32_f(cpu_base + CPU_PC, info.fw_base); 7764 7765 for (i = 0; i < 5; i++) { 7766 if (tr32(cpu_base + CPU_PC) == info.fw_base) 7767 break; 7768 tw32(cpu_base + CPU_STATE, 0xffffffff); 7769 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 7770 tw32_f(cpu_base + CPU_PC, info.fw_base); 7771 udelay(1000); 7772 } 7773 if (i >= 5) { 7774 netdev_err(tp->dev, 7775 "%s fails to set CPU PC, is %08x should be %08x\n", 7776 __func__, tr32(cpu_base + CPU_PC), info.fw_base); 7777 return -ENODEV; 7778 } 7779 tw32(cpu_base + CPU_STATE, 0xffffffff); 7780 tw32_f(cpu_base + CPU_MODE, 0x00000000); 7781 return 0; 7782} 7783 7784 7785static int tg3_set_mac_addr(struct net_device *dev, void *p) 7786{ 7787 struct tg3 *tp = netdev_priv(dev); 7788 struct sockaddr *addr = p; 7789 int err = 0, skip_mac_1 = 0; 7790 7791 if (!is_valid_ether_addr(addr->sa_data)) 7792 return -EINVAL; 7793 7794 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 7795 7796 if (!netif_running(dev)) 7797 return 0; 7798 7799 if (tg3_flag(tp, ENABLE_ASF)) { 7800 u32 addr0_high, addr0_low, addr1_high, addr1_low; 7801 7802 addr0_high = tr32(MAC_ADDR_0_HIGH); 7803 addr0_low = tr32(MAC_ADDR_0_LOW); 7804 addr1_high = tr32(MAC_ADDR_1_HIGH); 7805 addr1_low = tr32(MAC_ADDR_1_LOW); 7806 7807 /* Skip MAC addr 1 if ASF is using it. */ 7808 if ((addr0_high != addr1_high || addr0_low != addr1_low) && 7809 !(addr1_high == 0 && addr1_low == 0)) 7810 skip_mac_1 = 1; 7811 } 7812 spin_lock_bh(&tp->lock); 7813 __tg3_set_mac_addr(tp, skip_mac_1); 7814 spin_unlock_bh(&tp->lock); 7815 7816 return err; 7817} 7818 7819/* tp->lock is held. */ 7820static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr, 7821 dma_addr_t mapping, u32 maxlen_flags, 7822 u32 nic_addr) 7823{ 7824 tg3_write_mem(tp, 7825 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH), 7826 ((u64) mapping >> 32)); 7827 tg3_write_mem(tp, 7828 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW), 7829 ((u64) mapping & 0xffffffff)); 7830 tg3_write_mem(tp, 7831 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS), 7832 maxlen_flags); 7833 7834 if (!tg3_flag(tp, 5705_PLUS)) 7835 tg3_write_mem(tp, 7836 (bdinfo_addr + TG3_BDINFO_NIC_ADDR), 7837 nic_addr); 7838} 7839 7840static void __tg3_set_rx_mode(struct net_device *); 7841static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec) 7842{ 7843 int i; 7844 7845 if (!tg3_flag(tp, ENABLE_TSS)) { 7846 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs); 7847 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames); 7848 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq); 7849 } else { 7850 tw32(HOSTCC_TXCOL_TICKS, 0); 7851 tw32(HOSTCC_TXMAX_FRAMES, 0); 7852 tw32(HOSTCC_TXCOAL_MAXF_INT, 0); 7853 } 7854 7855 if (!tg3_flag(tp, ENABLE_RSS)) { 7856 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs); 7857 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames); 7858 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq); 7859 } else { 7860 tw32(HOSTCC_RXCOL_TICKS, 0); 7861 tw32(HOSTCC_RXMAX_FRAMES, 0); 7862 tw32(HOSTCC_RXCOAL_MAXF_INT, 0); 7863 } 7864 7865 if (!tg3_flag(tp, 5705_PLUS)) { 7866 u32 val = ec->stats_block_coalesce_usecs; 7867 7868 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq); 7869 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq); 7870 7871 if (!netif_carrier_ok(tp->dev)) 7872 val = 0; 7873 7874 tw32(HOSTCC_STAT_COAL_TICKS, val); 7875 } 7876 7877 for (i = 0; i < tp->irq_cnt - 1; i++) { 7878 u32 reg; 7879 7880 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18; 7881 tw32(reg, ec->rx_coalesce_usecs); 7882 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18; 7883 tw32(reg, ec->rx_max_coalesced_frames); 7884 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18; 7885 tw32(reg, ec->rx_max_coalesced_frames_irq); 7886 7887 if (tg3_flag(tp, ENABLE_TSS)) { 7888 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18; 7889 tw32(reg, ec->tx_coalesce_usecs); 7890 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18; 7891 tw32(reg, ec->tx_max_coalesced_frames); 7892 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18; 7893 tw32(reg, ec->tx_max_coalesced_frames_irq); 7894 } 7895 } 7896 7897 for (; i < tp->irq_max - 1; i++) { 7898 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0); 7899 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0); 7900 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 7901 7902 if (tg3_flag(tp, ENABLE_TSS)) { 7903 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0); 7904 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0); 7905 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 7906 } 7907 } 7908} 7909 7910/* tp->lock is held. */ 7911static void tg3_rings_reset(struct tg3 *tp) 7912{ 7913 int i; 7914 u32 stblk, txrcb, rxrcb, limit; 7915 struct tg3_napi *tnapi = &tp->napi[0]; 7916 7917 /* Disable all transmit rings but the first. */ 7918 if (!tg3_flag(tp, 5705_PLUS)) 7919 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; 7920 else if (tg3_flag(tp, 5717_PLUS)) 7921 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; 7922 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 7923 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; 7924 else 7925 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 7926 7927 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 7928 txrcb < limit; txrcb += TG3_BDINFO_SIZE) 7929 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS, 7930 BDINFO_FLAGS_DISABLED); 7931 7932 7933 /* Disable all receive return rings but the first. */ 7934 if (tg3_flag(tp, 5717_PLUS)) 7935 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; 7936 else if (!tg3_flag(tp, 5705_PLUS)) 7937 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; 7938 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 7939 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 7940 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; 7941 else 7942 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 7943 7944 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 7945 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE) 7946 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS, 7947 BDINFO_FLAGS_DISABLED); 7948 7949 /* Disable interrupts */ 7950 tw32_mailbox_f(tp->napi[0].int_mbox, 1); 7951 tp->napi[0].chk_msi_cnt = 0; 7952 tp->napi[0].last_rx_cons = 0; 7953 tp->napi[0].last_tx_cons = 0; 7954 7955 /* Zero mailbox registers. */ 7956 if (tg3_flag(tp, SUPPORT_MSIX)) { 7957 for (i = 1; i < tp->irq_max; i++) { 7958 tp->napi[i].tx_prod = 0; 7959 tp->napi[i].tx_cons = 0; 7960 if (tg3_flag(tp, ENABLE_TSS)) 7961 tw32_mailbox(tp->napi[i].prodmbox, 0); 7962 tw32_rx_mbox(tp->napi[i].consmbox, 0); 7963 tw32_mailbox_f(tp->napi[i].int_mbox, 1); 7964 tp->napi[0].chk_msi_cnt = 0; 7965 tp->napi[i].last_rx_cons = 0; 7966 tp->napi[i].last_tx_cons = 0; 7967 } 7968 if (!tg3_flag(tp, ENABLE_TSS)) 7969 tw32_mailbox(tp->napi[0].prodmbox, 0); 7970 } else { 7971 tp->napi[0].tx_prod = 0; 7972 tp->napi[0].tx_cons = 0; 7973 tw32_mailbox(tp->napi[0].prodmbox, 0); 7974 tw32_rx_mbox(tp->napi[0].consmbox, 0); 7975 } 7976 7977 /* Make sure the NIC-based send BD rings are disabled. */ 7978 if (!tg3_flag(tp, 5705_PLUS)) { 7979 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW; 7980 for (i = 0; i < 16; i++) 7981 tw32_tx_mbox(mbox + i * 8, 0); 7982 } 7983 7984 txrcb = NIC_SRAM_SEND_RCB; 7985 rxrcb = NIC_SRAM_RCV_RET_RCB; 7986 7987 /* Clear status block in ram. */ 7988 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 7989 7990 /* Set status block DMA address */ 7991 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 7992 ((u64) tnapi->status_mapping >> 32)); 7993 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 7994 ((u64) tnapi->status_mapping & 0xffffffff)); 7995 7996 if (tnapi->tx_ring) { 7997 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 7998 (TG3_TX_RING_SIZE << 7999 BDINFO_FLAGS_MAXLEN_SHIFT), 8000 NIC_SRAM_TX_BUFFER_DESC); 8001 txrcb += TG3_BDINFO_SIZE; 8002 } 8003 8004 if (tnapi->rx_rcb) { 8005 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 8006 (tp->rx_ret_ring_mask + 1) << 8007 BDINFO_FLAGS_MAXLEN_SHIFT, 0); 8008 rxrcb += TG3_BDINFO_SIZE; 8009 } 8010 8011 stblk = HOSTCC_STATBLCK_RING1; 8012 8013 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) { 8014 u64 mapping = (u64)tnapi->status_mapping; 8015 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32); 8016 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff); 8017 8018 /* Clear status block in ram. */ 8019 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8020 8021 if (tnapi->tx_ring) { 8022 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 8023 (TG3_TX_RING_SIZE << 8024 BDINFO_FLAGS_MAXLEN_SHIFT), 8025 NIC_SRAM_TX_BUFFER_DESC); 8026 txrcb += TG3_BDINFO_SIZE; 8027 } 8028 8029 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 8030 ((tp->rx_ret_ring_mask + 1) << 8031 BDINFO_FLAGS_MAXLEN_SHIFT), 0); 8032 8033 stblk += 8; 8034 rxrcb += TG3_BDINFO_SIZE; 8035 } 8036} 8037 8038static void tg3_setup_rxbd_thresholds(struct tg3 *tp) 8039{ 8040 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh; 8041 8042 if (!tg3_flag(tp, 5750_PLUS) || 8043 tg3_flag(tp, 5780_CLASS) || 8044 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 8045 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 8046 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700; 8047 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 8048 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) 8049 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755; 8050 else 8051 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906; 8052 8053 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post); 8054 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1); 8055 8056 val = min(nic_rep_thresh, host_rep_thresh); 8057 tw32(RCVBDI_STD_THRESH, val); 8058 8059 if (tg3_flag(tp, 57765_PLUS)) 8060 tw32(STD_REPLENISH_LWM, bdcache_maxcnt); 8061 8062 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 8063 return; 8064 8065 if (!tg3_flag(tp, 5705_PLUS)) 8066 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700; 8067 else 8068 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5717; 8069 8070 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1); 8071 8072 val = min(bdcache_maxcnt / 2, host_rep_thresh); 8073 tw32(RCVBDI_JUMBO_THRESH, val); 8074 8075 if (tg3_flag(tp, 57765_PLUS)) 8076 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt); 8077} 8078 8079/* tp->lock is held. */ 8080static int tg3_reset_hw(struct tg3 *tp, int reset_phy) 8081{ 8082 u32 val, rdmac_mode; 8083 int i, err, limit; 8084 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 8085 8086 tg3_disable_ints(tp); 8087 8088 tg3_stop_fw(tp); 8089 8090 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); 8091 8092 if (tg3_flag(tp, INIT_COMPLETE)) 8093 tg3_abort_hw(tp, 1); 8094 8095 /* Enable MAC control of LPI */ 8096 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) { 8097 tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, 8098 TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | 8099 TG3_CPMU_EEE_LNKIDL_UART_IDL); 8100 8101 tw32_f(TG3_CPMU_EEE_CTRL, 8102 TG3_CPMU_EEE_CTRL_EXIT_20_1_US); 8103 8104 val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET | 8105 TG3_CPMU_EEEMD_LPI_IN_TX | 8106 TG3_CPMU_EEEMD_LPI_IN_RX | 8107 TG3_CPMU_EEEMD_EEE_ENABLE; 8108 8109 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) 8110 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN; 8111 8112 if (tg3_flag(tp, ENABLE_APE)) 8113 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN; 8114 8115 tw32_f(TG3_CPMU_EEE_MODE, val); 8116 8117 tw32_f(TG3_CPMU_EEE_DBTMR1, 8118 TG3_CPMU_DBTMR1_PCIEXIT_2047US | 8119 TG3_CPMU_DBTMR1_LNKIDLE_2047US); 8120 8121 tw32_f(TG3_CPMU_EEE_DBTMR2, 8122 TG3_CPMU_DBTMR2_APE_TX_2047US | 8123 TG3_CPMU_DBTMR2_TXIDXEQ_2047US); 8124 } 8125 8126 if (reset_phy) 8127 tg3_phy_reset(tp); 8128 8129 err = tg3_chip_reset(tp); 8130 if (err) 8131 return err; 8132 8133 tg3_write_sig_legacy(tp, RESET_KIND_INIT); 8134 8135 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) { 8136 val = tr32(TG3_CPMU_CTRL); 8137 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE); 8138 tw32(TG3_CPMU_CTRL, val); 8139 8140 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 8141 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 8142 val |= CPMU_LSPD_10MB_MACCLK_6_25; 8143 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 8144 8145 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD); 8146 val &= ~CPMU_LNK_AWARE_MACCLK_MASK; 8147 val |= CPMU_LNK_AWARE_MACCLK_6_25; 8148 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val); 8149 8150 val = tr32(TG3_CPMU_HST_ACC); 8151 val &= ~CPMU_HST_ACC_MACCLK_MASK; 8152 val |= CPMU_HST_ACC_MACCLK_6_25; 8153 tw32(TG3_CPMU_HST_ACC, val); 8154 } 8155 8156 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 8157 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK; 8158 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN | 8159 PCIE_PWR_MGMT_L1_THRESH_4MS; 8160 tw32(PCIE_PWR_MGMT_THRESH, val); 8161 8162 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK; 8163 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS); 8164 8165 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR); 8166 8167 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 8168 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 8169 } 8170 8171 if (tg3_flag(tp, L1PLLPD_EN)) { 8172 u32 grc_mode = tr32(GRC_MODE); 8173 8174 /* Access the lower 1K of PL PCIE block registers. */ 8175 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 8176 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 8177 8178 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1); 8179 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1, 8180 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN); 8181 8182 tw32(GRC_MODE, grc_mode); 8183 } 8184 8185 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) { 8186 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) { 8187 u32 grc_mode = tr32(GRC_MODE); 8188 8189 /* Access the lower 1K of PL PCIE block registers. */ 8190 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 8191 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 8192 8193 val = tr32(TG3_PCIE_TLDLPL_PORT + 8194 TG3_PCIE_PL_LO_PHYCTL5); 8195 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5, 8196 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ); 8197 8198 tw32(GRC_MODE, grc_mode); 8199 } 8200 8201 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) { 8202 u32 grc_mode = tr32(GRC_MODE); 8203 8204 /* Access the lower 1K of DL PCIE block registers. */ 8205 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 8206 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL); 8207 8208 val = tr32(TG3_PCIE_TLDLPL_PORT + 8209 TG3_PCIE_DL_LO_FTSMAX); 8210 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK; 8211 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX, 8212 val | TG3_PCIE_DL_LO_FTSMAX_VAL); 8213 8214 tw32(GRC_MODE, grc_mode); 8215 } 8216 8217 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 8218 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 8219 val |= CPMU_LSPD_10MB_MACCLK_6_25; 8220 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 8221 } 8222 8223 /* This works around an issue with Athlon chipsets on 8224 * B3 tigon3 silicon. This bit has no effect on any 8225 * other revision. But do not set this on PCI Express 8226 * chips and don't even touch the clocks if the CPMU is present. 8227 */ 8228 if (!tg3_flag(tp, CPMU_PRESENT)) { 8229 if (!tg3_flag(tp, PCI_EXPRESS)) 8230 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 8231 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 8232 } 8233 8234 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && 8235 tg3_flag(tp, PCIX_MODE)) { 8236 val = tr32(TG3PCI_PCISTATE); 8237 val |= PCISTATE_RETRY_SAME_DMA; 8238 tw32(TG3PCI_PCISTATE, val); 8239 } 8240 8241 if (tg3_flag(tp, ENABLE_APE)) { 8242 /* Allow reads and writes to the 8243 * APE register and memory space. 8244 */ 8245 val = tr32(TG3PCI_PCISTATE); 8246 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 8247 PCISTATE_ALLOW_APE_SHMEM_WR | 8248 PCISTATE_ALLOW_APE_PSPACE_WR; 8249 tw32(TG3PCI_PCISTATE, val); 8250 } 8251 8252 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) { 8253 /* Enable some hw fixes. */ 8254 val = tr32(TG3PCI_MSI_DATA); 8255 val |= (1 << 26) | (1 << 28) | (1 << 29); 8256 tw32(TG3PCI_MSI_DATA, val); 8257 } 8258 8259 /* Descriptor ring init may make accesses to the 8260 * NIC SRAM area to setup the TX descriptors, so we 8261 * can only do this after the hardware has been 8262 * successfully reset. 8263 */ 8264 err = tg3_init_rings(tp); 8265 if (err) 8266 return err; 8267 8268 if (tg3_flag(tp, 57765_PLUS)) { 8269 val = tr32(TG3PCI_DMA_RW_CTRL) & 8270 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 8271 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) 8272 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; 8273 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57765 && 8274 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) 8275 val |= DMA_RWCTRL_TAGGED_STAT_WA; 8276 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); 8277 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 && 8278 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) { 8279 /* This value is determined during the probe time DMA 8280 * engine test, tg3_test_dma. 8281 */ 8282 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 8283 } 8284 8285 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS | 8286 GRC_MODE_4X_NIC_SEND_RINGS | 8287 GRC_MODE_NO_TX_PHDR_CSUM | 8288 GRC_MODE_NO_RX_PHDR_CSUM); 8289 tp->grc_mode |= GRC_MODE_HOST_SENDBDS; 8290 8291 /* Pseudo-header checksum is done by hardware logic and not 8292 * the offload processers, so make the chip do the pseudo- 8293 * header checksums on receive. For transmit it is more 8294 * convenient to do the pseudo-header checksum in software 8295 * as Linux does that on transmit for us in all cases. 8296 */ 8297 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; 8298 8299 tw32(GRC_MODE, 8300 tp->grc_mode | 8301 (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP)); 8302 8303 /* Setup the timer prescalar register. Clock is always 66Mhz. */ 8304 val = tr32(GRC_MISC_CFG); 8305 val &= ~0xff; 8306 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT); 8307 tw32(GRC_MISC_CFG, val); 8308 8309 /* Initialize MBUF/DESC pool. */ 8310 if (tg3_flag(tp, 5750_PLUS)) { 8311 /* Do nothing. */ 8312 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { 8313 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); 8314 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 8315 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); 8316 else 8317 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96); 8318 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE); 8319 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE); 8320 } else if (tg3_flag(tp, TSO_CAPABLE)) { 8321 int fw_len; 8322 8323 fw_len = tp->fw_len; 8324 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1); 8325 tw32(BUFMGR_MB_POOL_ADDR, 8326 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len); 8327 tw32(BUFMGR_MB_POOL_SIZE, 8328 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00); 8329 } 8330 8331 if (tp->dev->mtu <= ETH_DATA_LEN) { 8332 tw32(BUFMGR_MB_RDMA_LOW_WATER, 8333 tp->bufmgr_config.mbuf_read_dma_low_water); 8334 tw32(BUFMGR_MB_MACRX_LOW_WATER, 8335 tp->bufmgr_config.mbuf_mac_rx_low_water); 8336 tw32(BUFMGR_MB_HIGH_WATER, 8337 tp->bufmgr_config.mbuf_high_water); 8338 } else { 8339 tw32(BUFMGR_MB_RDMA_LOW_WATER, 8340 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo); 8341 tw32(BUFMGR_MB_MACRX_LOW_WATER, 8342 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo); 8343 tw32(BUFMGR_MB_HIGH_WATER, 8344 tp->bufmgr_config.mbuf_high_water_jumbo); 8345 } 8346 tw32(BUFMGR_DMA_LOW_WATER, 8347 tp->bufmgr_config.dma_low_water); 8348 tw32(BUFMGR_DMA_HIGH_WATER, 8349 tp->bufmgr_config.dma_high_water); 8350 8351 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE; 8352 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 8353 val |= BUFMGR_MODE_NO_TX_UNDERRUN; 8354 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 8355 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 8356 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) 8357 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB; 8358 tw32(BUFMGR_MODE, val); 8359 for (i = 0; i < 2000; i++) { 8360 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE) 8361 break; 8362 udelay(10); 8363 } 8364 if (i >= 2000) { 8365 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__); 8366 return -ENODEV; 8367 } 8368 8369 if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1) 8370 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2); 8371 8372 tg3_setup_rxbd_thresholds(tp); 8373 8374 /* Initialize TG3_BDINFO's at: 8375 * RCVDBDI_STD_BD: standard eth size rx ring 8376 * RCVDBDI_JUMBO_BD: jumbo frame rx ring 8377 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work) 8378 * 8379 * like so: 8380 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring 8381 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) | 8382 * ring attribute flags 8383 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM 8384 * 8385 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries. 8386 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries. 8387 * 8388 * The size of each ring is fixed in the firmware, but the location is 8389 * configurable. 8390 */ 8391 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 8392 ((u64) tpr->rx_std_mapping >> 32)); 8393 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 8394 ((u64) tpr->rx_std_mapping & 0xffffffff)); 8395 if (!tg3_flag(tp, 5717_PLUS)) 8396 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 8397 NIC_SRAM_RX_BUFFER_DESC); 8398 8399 /* Disable the mini ring */ 8400 if (!tg3_flag(tp, 5705_PLUS)) 8401 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS, 8402 BDINFO_FLAGS_DISABLED); 8403 8404 /* Program the jumbo buffer descriptor ring control 8405 * blocks on those devices that have them. 8406 */ 8407 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 8408 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) { 8409 8410 if (tg3_flag(tp, JUMBO_RING_ENABLE)) { 8411 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 8412 ((u64) tpr->rx_jmb_mapping >> 32)); 8413 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 8414 ((u64) tpr->rx_jmb_mapping & 0xffffffff)); 8415 val = TG3_RX_JMB_RING_SIZE(tp) << 8416 BDINFO_FLAGS_MAXLEN_SHIFT; 8417 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 8418 val | BDINFO_FLAGS_USE_EXT_RECV); 8419 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || 8420 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 8421 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, 8422 NIC_SRAM_RX_JUMBO_BUFFER_DESC); 8423 } else { 8424 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 8425 BDINFO_FLAGS_DISABLED); 8426 } 8427 8428 if (tg3_flag(tp, 57765_PLUS)) { 8429 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 8430 val = TG3_RX_STD_MAX_SIZE_5700; 8431 else 8432 val = TG3_RX_STD_MAX_SIZE_5717; 8433 val <<= BDINFO_FLAGS_MAXLEN_SHIFT; 8434 val |= (TG3_RX_STD_DMA_SZ << 2); 8435 } else 8436 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT; 8437 } else 8438 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT; 8439 8440 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val); 8441 8442 tpr->rx_std_prod_idx = tp->rx_pending; 8443 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx); 8444 8445 tpr->rx_jmb_prod_idx = 8446 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0; 8447 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx); 8448 8449 tg3_rings_reset(tp); 8450 8451 /* Initialize MAC address and backoff seed. */ 8452 __tg3_set_mac_addr(tp, 0); 8453 8454 /* MTU + ethernet header + FCS + optional VLAN tag */ 8455 tw32(MAC_RX_MTU_SIZE, 8456 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 8457 8458 /* The slot time is changed by tg3_setup_phy if we 8459 * run at gigabit with half duplex. 8460 */ 8461 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 8462 (6 << TX_LENGTHS_IPG_SHIFT) | 8463 (32 << TX_LENGTHS_SLOT_TIME_SHIFT); 8464 8465 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 8466 val |= tr32(MAC_TX_LENGTHS) & 8467 (TX_LENGTHS_JMB_FRM_LEN_MSK | 8468 TX_LENGTHS_CNT_DWN_VAL_MSK); 8469 8470 tw32(MAC_TX_LENGTHS, val); 8471 8472 /* Receive rules. */ 8473 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS); 8474 tw32(RCVLPC_CONFIG, 0x0181); 8475 8476 /* Calculate RDMAC_MODE setting early, we need it to determine 8477 * the RCVLPC_STATE_ENABLE mask. 8478 */ 8479 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB | 8480 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB | 8481 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB | 8482 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB | 8483 RDMAC_MODE_LNGREAD_ENAB); 8484 8485 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) 8486 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS; 8487 8488 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 8489 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 8490 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 8491 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB | 8492 RDMAC_MODE_MBUF_RBD_CRPT_ENAB | 8493 RDMAC_MODE_MBUF_SBD_CRPT_ENAB; 8494 8495 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 8496 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 8497 if (tg3_flag(tp, TSO_CAPABLE) && 8498 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 8499 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; 8500 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 8501 !tg3_flag(tp, IS_5788)) { 8502 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 8503 } 8504 } 8505 8506 if (tg3_flag(tp, PCI_EXPRESS)) 8507 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 8508 8509 if (tg3_flag(tp, HW_TSO_1) || 8510 tg3_flag(tp, HW_TSO_2) || 8511 tg3_flag(tp, HW_TSO_3)) 8512 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN; 8513 8514 if (tg3_flag(tp, 57765_PLUS) || 8515 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 8516 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 8517 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; 8518 8519 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 8520 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; 8521 8522 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 8523 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 8524 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 8525 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 8526 tg3_flag(tp, 57765_PLUS)) { 8527 val = tr32(TG3_RDMA_RSRVCTRL_REG); 8528 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 8529 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 8530 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | 8531 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | 8532 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); 8533 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B | 8534 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | 8535 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; 8536 } 8537 tw32(TG3_RDMA_RSRVCTRL_REG, 8538 val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); 8539 } 8540 8541 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 8542 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 8543 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 8544 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val | 8545 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | 8546 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); 8547 } 8548 8549 /* Receive/send statistics. */ 8550 if (tg3_flag(tp, 5750_PLUS)) { 8551 val = tr32(RCVLPC_STATS_ENABLE); 8552 val &= ~RCVLPC_STATSENAB_DACK_FIX; 8553 tw32(RCVLPC_STATS_ENABLE, val); 8554 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && 8555 tg3_flag(tp, TSO_CAPABLE)) { 8556 val = tr32(RCVLPC_STATS_ENABLE); 8557 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX; 8558 tw32(RCVLPC_STATS_ENABLE, val); 8559 } else { 8560 tw32(RCVLPC_STATS_ENABLE, 0xffffff); 8561 } 8562 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE); 8563 tw32(SNDDATAI_STATSENAB, 0xffffff); 8564 tw32(SNDDATAI_STATSCTRL, 8565 (SNDDATAI_SCTRL_ENABLE | 8566 SNDDATAI_SCTRL_FASTUPD)); 8567 8568 /* Setup host coalescing engine. */ 8569 tw32(HOSTCC_MODE, 0); 8570 for (i = 0; i < 2000; i++) { 8571 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE)) 8572 break; 8573 udelay(10); 8574 } 8575 8576 __tg3_set_coalesce(tp, &tp->coal); 8577 8578 if (!tg3_flag(tp, 5705_PLUS)) { 8579 /* Status/statistics block address. See tg3_timer, 8580 * the tg3_periodic_fetch_stats call there, and 8581 * tg3_get_stats to see how this works for 5705/5750 chips. 8582 */ 8583 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 8584 ((u64) tp->stats_mapping >> 32)); 8585 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 8586 ((u64) tp->stats_mapping & 0xffffffff)); 8587 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK); 8588 8589 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK); 8590 8591 /* Clear statistics and status block memory areas */ 8592 for (i = NIC_SRAM_STATS_BLK; 8593 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; 8594 i += sizeof(u32)) { 8595 tg3_write_mem(tp, i, 0); 8596 udelay(40); 8597 } 8598 } 8599 8600 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode); 8601 8602 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); 8603 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); 8604 if (!tg3_flag(tp, 5705_PLUS)) 8605 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); 8606 8607 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 8608 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 8609 /* reset to prevent losing 1st rx packet intermittently */ 8610 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 8611 udelay(10); 8612 } 8613 8614 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | 8615 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | 8616 MAC_MODE_FHDE_ENABLE; 8617 if (tg3_flag(tp, ENABLE_APE)) 8618 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 8619 if (!tg3_flag(tp, 5705_PLUS) && 8620 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 8621 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) 8622 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 8623 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); 8624 udelay(40); 8625 8626 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). 8627 * If TG3_FLAG_IS_NIC is zero, we should read the 8628 * register to preserve the GPIO settings for LOMs. The GPIOs, 8629 * whether used as inputs or outputs, are set by boot code after 8630 * reset. 8631 */ 8632 if (!tg3_flag(tp, IS_NIC)) { 8633 u32 gpio_mask; 8634 8635 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | 8636 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | 8637 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; 8638 8639 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 8640 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | 8641 GRC_LCLCTRL_GPIO_OUTPUT3; 8642 8643 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 8644 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL; 8645 8646 tp->grc_local_ctrl &= ~gpio_mask; 8647 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; 8648 8649 /* GPIO1 must be driven high for eeprom write protect */ 8650 if (tg3_flag(tp, EEPROM_WRITE_PROT)) 8651 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 8652 GRC_LCLCTRL_GPIO_OUTPUT1); 8653 } 8654 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 8655 udelay(100); 8656 8657 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) { 8658 val = tr32(MSGINT_MODE); 8659 val |= MSGINT_MODE_MULTIVEC_EN | MSGINT_MODE_ENABLE; 8660 tw32(MSGINT_MODE, val); 8661 } 8662 8663 if (!tg3_flag(tp, 5705_PLUS)) { 8664 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); 8665 udelay(40); 8666 } 8667 8668 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB | 8669 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB | 8670 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | 8671 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | 8672 WDMAC_MODE_LNGREAD_ENAB); 8673 8674 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 8675 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 8676 if (tg3_flag(tp, TSO_CAPABLE) && 8677 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 || 8678 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) { 8679 /* nothing */ 8680 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 8681 !tg3_flag(tp, IS_5788)) { 8682 val |= WDMAC_MODE_RX_ACCEL; 8683 } 8684 } 8685 8686 /* Enable host coalescing bug fix */ 8687 if (tg3_flag(tp, 5755_PLUS)) 8688 val |= WDMAC_MODE_STATUS_TAG_FIX; 8689 8690 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 8691 val |= WDMAC_MODE_BURST_ALL_DATA; 8692 8693 tw32_f(WDMAC_MODE, val); 8694 udelay(40); 8695 8696 if (tg3_flag(tp, PCIX_MODE)) { 8697 u16 pcix_cmd; 8698 8699 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8700 &pcix_cmd); 8701 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) { 8702 pcix_cmd &= ~PCI_X_CMD_MAX_READ; 8703 pcix_cmd |= PCI_X_CMD_READ_2K; 8704 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 8705 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ); 8706 pcix_cmd |= PCI_X_CMD_READ_2K; 8707 } 8708 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8709 pcix_cmd); 8710 } 8711 8712 tw32_f(RDMAC_MODE, rdmac_mode); 8713 udelay(40); 8714 8715 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); 8716 if (!tg3_flag(tp, 5705_PLUS)) 8717 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); 8718 8719 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 8720 tw32(SNDDATAC_MODE, 8721 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY); 8722 else 8723 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); 8724 8725 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); 8726 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); 8727 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ; 8728 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 8729 val |= RCVDBDI_MODE_LRG_RING_SZ; 8730 tw32(RCVDBDI_MODE, val); 8731 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); 8732 if (tg3_flag(tp, HW_TSO_1) || 8733 tg3_flag(tp, HW_TSO_2) || 8734 tg3_flag(tp, HW_TSO_3)) 8735 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); 8736 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE; 8737 if (tg3_flag(tp, ENABLE_TSS)) 8738 val |= SNDBDI_MODE_MULTI_TXQ_EN; 8739 tw32(SNDBDI_MODE, val); 8740 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); 8741 8742 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) { 8743 err = tg3_load_5701_a0_firmware_fix(tp); 8744 if (err) 8745 return err; 8746 } 8747 8748 if (tg3_flag(tp, TSO_CAPABLE)) { 8749 err = tg3_load_tso_firmware(tp); 8750 if (err) 8751 return err; 8752 } 8753 8754 tp->tx_mode = TX_MODE_ENABLE; 8755 8756 if (tg3_flag(tp, 5755_PLUS) || 8757 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 8758 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; 8759 8760 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 8761 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; 8762 tp->tx_mode &= ~val; 8763 tp->tx_mode |= tr32(MAC_TX_MODE) & val; 8764 } 8765 8766 tw32_f(MAC_TX_MODE, tp->tx_mode); 8767 udelay(100); 8768 8769 if (tg3_flag(tp, ENABLE_RSS)) { 8770 int i = 0; 8771 u32 reg = MAC_RSS_INDIR_TBL_0; 8772 8773 if (tp->irq_cnt == 2) { 8774 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i += 8) { 8775 tw32(reg, 0x0); 8776 reg += 4; 8777 } 8778 } else { 8779 u32 val; 8780 8781 while (i < TG3_RSS_INDIR_TBL_SIZE) { 8782 val = i % (tp->irq_cnt - 1); 8783 i++; 8784 for (; i % 8; i++) { 8785 val <<= 4; 8786 val |= (i % (tp->irq_cnt - 1)); 8787 } 8788 tw32(reg, val); 8789 reg += 4; 8790 } 8791 } 8792 8793 /* Setup the "secret" hash key. */ 8794 tw32(MAC_RSS_HASH_KEY_0, 0x5f865437); 8795 tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc); 8796 tw32(MAC_RSS_HASH_KEY_2, 0x50103a45); 8797 tw32(MAC_RSS_HASH_KEY_3, 0x36621985); 8798 tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8); 8799 tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e); 8800 tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556); 8801 tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe); 8802 tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7); 8803 tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481); 8804 } 8805 8806 tp->rx_mode = RX_MODE_ENABLE; 8807 if (tg3_flag(tp, 5755_PLUS)) 8808 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE; 8809 8810 if (tg3_flag(tp, ENABLE_RSS)) 8811 tp->rx_mode |= RX_MODE_RSS_ENABLE | 8812 RX_MODE_RSS_ITBL_HASH_BITS_7 | 8813 RX_MODE_RSS_IPV6_HASH_EN | 8814 RX_MODE_RSS_TCP_IPV6_HASH_EN | 8815 RX_MODE_RSS_IPV4_HASH_EN | 8816 RX_MODE_RSS_TCP_IPV4_HASH_EN; 8817 8818 tw32_f(MAC_RX_MODE, tp->rx_mode); 8819 udelay(10); 8820 8821 tw32(MAC_LED_CTRL, tp->led_ctrl); 8822 8823 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 8824 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 8825 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 8826 udelay(10); 8827 } 8828 tw32_f(MAC_RX_MODE, tp->rx_mode); 8829 udelay(10); 8830 8831 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 8832 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) && 8833 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) { 8834 /* Set drive transmission level to 1.2V */ 8835 /* only if the signal pre-emphasis bit is not set */ 8836 val = tr32(MAC_SERDES_CFG); 8837 val &= 0xfffff000; 8838 val |= 0x880; 8839 tw32(MAC_SERDES_CFG, val); 8840 } 8841 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) 8842 tw32(MAC_SERDES_CFG, 0x616000); 8843 } 8844 8845 /* Prevent chip from dropping frames when flow control 8846 * is enabled. 8847 */ 8848 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 8849 val = 1; 8850 else 8851 val = 2; 8852 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val); 8853 8854 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && 8855 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 8856 /* Use hardware link auto-negotiation */ 8857 tg3_flag_set(tp, HW_AUTONEG); 8858 } 8859 8860 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 8861 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 8862 u32 tmp; 8863 8864 tmp = tr32(SERDES_RX_CTRL); 8865 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); 8866 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; 8867 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; 8868 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 8869 } 8870 8871 if (!tg3_flag(tp, USE_PHYLIB)) { 8872 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 8873 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 8874 tp->link_config.speed = tp->link_config.orig_speed; 8875 tp->link_config.duplex = tp->link_config.orig_duplex; 8876 tp->link_config.autoneg = tp->link_config.orig_autoneg; 8877 } 8878 8879 err = tg3_setup_phy(tp, 0); 8880 if (err) 8881 return err; 8882 8883 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 8884 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 8885 u32 tmp; 8886 8887 /* Clear CRC stats. */ 8888 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) { 8889 tg3_writephy(tp, MII_TG3_TEST1, 8890 tmp | MII_TG3_TEST1_CRC_EN); 8891 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp); 8892 } 8893 } 8894 } 8895 8896 __tg3_set_rx_mode(tp->dev); 8897 8898 /* Initialize receive rules. */ 8899 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK); 8900 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK); 8901 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); 8902 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); 8903 8904 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) 8905 limit = 8; 8906 else 8907 limit = 16; 8908 if (tg3_flag(tp, ENABLE_ASF)) 8909 limit -= 4; 8910 switch (limit) { 8911 case 16: 8912 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); 8913 case 15: 8914 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); 8915 case 14: 8916 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); 8917 case 13: 8918 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); 8919 case 12: 8920 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); 8921 case 11: 8922 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); 8923 case 10: 8924 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); 8925 case 9: 8926 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); 8927 case 8: 8928 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); 8929 case 7: 8930 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); 8931 case 6: 8932 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); 8933 case 5: 8934 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); 8935 case 4: 8936 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ 8937 case 3: 8938 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */ 8939 case 2: 8940 case 1: 8941 8942 default: 8943 break; 8944 } 8945 8946 if (tg3_flag(tp, ENABLE_APE)) 8947 /* Write our heartbeat update interval to APE. */ 8948 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS, 8949 APE_HOST_HEARTBEAT_INT_DISABLE); 8950 8951 tg3_write_sig_post_reset(tp, RESET_KIND_INIT); 8952 8953 return 0; 8954} 8955 8956/* Called at device open time to get the chip ready for 8957 * packet processing. Invoked with tp->lock held. 8958 */ 8959static int tg3_init_hw(struct tg3 *tp, int reset_phy) 8960{ 8961 tg3_switch_clocks(tp); 8962 8963 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 8964 8965 return tg3_reset_hw(tp, reset_phy); 8966} 8967 8968#define TG3_STAT_ADD32(PSTAT, REG) \ 8969do { u32 __val = tr32(REG); \ 8970 (PSTAT)->low += __val; \ 8971 if ((PSTAT)->low < __val) \ 8972 (PSTAT)->high += 1; \ 8973} while (0) 8974 8975static void tg3_periodic_fetch_stats(struct tg3 *tp) 8976{ 8977 struct tg3_hw_stats *sp = tp->hw_stats; 8978 8979 if (!netif_carrier_ok(tp->dev)) 8980 return; 8981 8982 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS); 8983 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS); 8984 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT); 8985 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT); 8986 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS); 8987 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS); 8988 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS); 8989 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED); 8990 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL); 8991 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL); 8992 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); 8993 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); 8994 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); 8995 8996 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); 8997 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS); 8998 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST); 8999 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST); 9000 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST); 9001 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS); 9002 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS); 9003 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD); 9004 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD); 9005 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD); 9006 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED); 9007 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG); 9008 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS); 9009 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE); 9010 9011 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT); 9012 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && 9013 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0 && 9014 tp->pci_chip_rev_id != CHIPREV_ID_5720_A0) { 9015 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT); 9016 } else { 9017 u32 val = tr32(HOSTCC_FLOW_ATTN); 9018 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0; 9019 if (val) { 9020 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM); 9021 sp->rx_discards.low += val; 9022 if (sp->rx_discards.low < val) 9023 sp->rx_discards.high += 1; 9024 } 9025 sp->mbuf_lwm_thresh_hit = sp->rx_discards; 9026 } 9027 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT); 9028} 9029 9030static void tg3_chk_missed_msi(struct tg3 *tp) 9031{ 9032 u32 i; 9033 9034 for (i = 0; i < tp->irq_cnt; i++) { 9035 struct tg3_napi *tnapi = &tp->napi[i]; 9036 9037 if (tg3_has_work(tnapi)) { 9038 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr && 9039 tnapi->last_tx_cons == tnapi->tx_cons) { 9040 if (tnapi->chk_msi_cnt < 1) { 9041 tnapi->chk_msi_cnt++; 9042 return; 9043 } 9044 tw32_mailbox(tnapi->int_mbox, 9045 tnapi->last_tag << 24); 9046 } 9047 } 9048 tnapi->chk_msi_cnt = 0; 9049 tnapi->last_rx_cons = tnapi->rx_rcb_ptr; 9050 tnapi->last_tx_cons = tnapi->tx_cons; 9051 } 9052} 9053 9054static void tg3_timer(unsigned long __opaque) 9055{ 9056 struct tg3 *tp = (struct tg3 *) __opaque; 9057 9058 if (tp->irq_sync) 9059 goto restart_timer; 9060 9061 spin_lock(&tp->lock); 9062 9063 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 9064 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 9065 tg3_chk_missed_msi(tp); 9066 9067 if (!tg3_flag(tp, TAGGED_STATUS)) { 9068 /* All of this garbage is because when using non-tagged 9069 * IRQ status the mailbox/status_block protocol the chip 9070 * uses with the cpu is race prone. 9071 */ 9072 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) { 9073 tw32(GRC_LOCAL_CTRL, 9074 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 9075 } else { 9076 tw32(HOSTCC_MODE, tp->coalesce_mode | 9077 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW); 9078 } 9079 9080 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 9081 tg3_flag_set(tp, RESTART_TIMER); 9082 spin_unlock(&tp->lock); 9083 schedule_work(&tp->reset_task); 9084 return; 9085 } 9086 } 9087 9088 /* This part only runs once per second. */ 9089 if (!--tp->timer_counter) { 9090 if (tg3_flag(tp, 5705_PLUS)) 9091 tg3_periodic_fetch_stats(tp); 9092 9093 if (tp->setlpicnt && !--tp->setlpicnt) 9094 tg3_phy_eee_enable(tp); 9095 9096 if (tg3_flag(tp, USE_LINKCHG_REG)) { 9097 u32 mac_stat; 9098 int phy_event; 9099 9100 mac_stat = tr32(MAC_STATUS); 9101 9102 phy_event = 0; 9103 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) { 9104 if (mac_stat & MAC_STATUS_MI_INTERRUPT) 9105 phy_event = 1; 9106 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) 9107 phy_event = 1; 9108 9109 if (phy_event) 9110 tg3_setup_phy(tp, 0); 9111 } else if (tg3_flag(tp, POLL_SERDES)) { 9112 u32 mac_stat = tr32(MAC_STATUS); 9113 int need_setup = 0; 9114 9115 if (netif_carrier_ok(tp->dev) && 9116 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) { 9117 need_setup = 1; 9118 } 9119 if (!netif_carrier_ok(tp->dev) && 9120 (mac_stat & (MAC_STATUS_PCS_SYNCED | 9121 MAC_STATUS_SIGNAL_DET))) { 9122 need_setup = 1; 9123 } 9124 if (need_setup) { 9125 if (!tp->serdes_counter) { 9126 tw32_f(MAC_MODE, 9127 (tp->mac_mode & 9128 ~MAC_MODE_PORT_MODE_MASK)); 9129 udelay(40); 9130 tw32_f(MAC_MODE, tp->mac_mode); 9131 udelay(40); 9132 } 9133 tg3_setup_phy(tp, 0); 9134 } 9135 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 9136 tg3_flag(tp, 5780_CLASS)) { 9137 tg3_serdes_parallel_detect(tp); 9138 } 9139 9140 tp->timer_counter = tp->timer_multiplier; 9141 } 9142 9143 /* Heartbeat is only sent once every 2 seconds. 9144 * 9145 * The heartbeat is to tell the ASF firmware that the host 9146 * driver is still alive. In the event that the OS crashes, 9147 * ASF needs to reset the hardware to free up the FIFO space 9148 * that may be filled with rx packets destined for the host. 9149 * If the FIFO is full, ASF will no longer function properly. 9150 * 9151 * Unintended resets have been reported on real time kernels 9152 * where the timer doesn't run on time. Netpoll will also have 9153 * same problem. 9154 * 9155 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware 9156 * to check the ring condition when the heartbeat is expiring 9157 * before doing the reset. This will prevent most unintended 9158 * resets. 9159 */ 9160 if (!--tp->asf_counter) { 9161 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 9162 tg3_wait_for_event_ack(tp); 9163 9164 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, 9165 FWCMD_NICDRV_ALIVE3); 9166 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 9167 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 9168 TG3_FW_UPDATE_TIMEOUT_SEC); 9169 9170 tg3_generate_fw_event(tp); 9171 } 9172 tp->asf_counter = tp->asf_multiplier; 9173 } 9174 9175 spin_unlock(&tp->lock); 9176 9177restart_timer: 9178 tp->timer.expires = jiffies + tp->timer_offset; 9179 add_timer(&tp->timer); 9180} 9181 9182static int tg3_request_irq(struct tg3 *tp, int irq_num) 9183{ 9184 irq_handler_t fn; 9185 unsigned long flags; 9186 char *name; 9187 struct tg3_napi *tnapi = &tp->napi[irq_num]; 9188 9189 if (tp->irq_cnt == 1) 9190 name = tp->dev->name; 9191 else { 9192 name = &tnapi->irq_lbl[0]; 9193 snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num); 9194 name[IFNAMSIZ-1] = 0; 9195 } 9196 9197 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 9198 fn = tg3_msi; 9199 if (tg3_flag(tp, 1SHOT_MSI)) 9200 fn = tg3_msi_1shot; 9201 flags = 0; 9202 } else { 9203 fn = tg3_interrupt; 9204 if (tg3_flag(tp, TAGGED_STATUS)) 9205 fn = tg3_interrupt_tagged; 9206 flags = IRQF_SHARED; 9207 } 9208 9209 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi); 9210} 9211 9212static int tg3_test_interrupt(struct tg3 *tp) 9213{ 9214 struct tg3_napi *tnapi = &tp->napi[0]; 9215 struct net_device *dev = tp->dev; 9216 int err, i, intr_ok = 0; 9217 u32 val; 9218 9219 if (!netif_running(dev)) 9220 return -ENODEV; 9221 9222 tg3_disable_ints(tp); 9223 9224 free_irq(tnapi->irq_vec, tnapi); 9225 9226 /* 9227 * Turn off MSI one shot mode. Otherwise this test has no 9228 * observable way to know whether the interrupt was delivered. 9229 */ 9230 if (tg3_flag(tp, 57765_PLUS)) { 9231 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; 9232 tw32(MSGINT_MODE, val); 9233 } 9234 9235 err = request_irq(tnapi->irq_vec, tg3_test_isr, 9236 IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, tnapi); 9237 if (err) 9238 return err; 9239 9240 tnapi->hw_status->status &= ~SD_STATUS_UPDATED; 9241 tg3_enable_ints(tp); 9242 9243 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 9244 tnapi->coal_now); 9245 9246 for (i = 0; i < 5; i++) { 9247 u32 int_mbox, misc_host_ctrl; 9248 9249 int_mbox = tr32_mailbox(tnapi->int_mbox); 9250 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 9251 9252 if ((int_mbox != 0) || 9253 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) { 9254 intr_ok = 1; 9255 break; 9256 } 9257 9258 if (tg3_flag(tp, 57765_PLUS) && 9259 tnapi->hw_status->status_tag != tnapi->last_tag) 9260 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 9261 9262 msleep(10); 9263 } 9264 9265 tg3_disable_ints(tp); 9266 9267 free_irq(tnapi->irq_vec, tnapi); 9268 9269 err = tg3_request_irq(tp, 0); 9270 9271 if (err) 9272 return err; 9273 9274 if (intr_ok) { 9275 /* Reenable MSI one shot mode. */ 9276 if (tg3_flag(tp, 57765_PLUS)) { 9277 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; 9278 tw32(MSGINT_MODE, val); 9279 } 9280 return 0; 9281 } 9282 9283 return -EIO; 9284} 9285 9286/* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is 9287 * successfully restored 9288 */ 9289static int tg3_test_msi(struct tg3 *tp) 9290{ 9291 int err; 9292 u16 pci_cmd; 9293 9294 if (!tg3_flag(tp, USING_MSI)) 9295 return 0; 9296 9297 /* Turn off SERR reporting in case MSI terminates with Master 9298 * Abort. 9299 */ 9300 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 9301 pci_write_config_word(tp->pdev, PCI_COMMAND, 9302 pci_cmd & ~PCI_COMMAND_SERR); 9303 9304 err = tg3_test_interrupt(tp); 9305 9306 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 9307 9308 if (!err) 9309 return 0; 9310 9311 /* other failures */ 9312 if (err != -EIO) 9313 return err; 9314 9315 /* MSI test failed, go back to INTx mode */ 9316 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching " 9317 "to INTx mode. Please report this failure to the PCI " 9318 "maintainer and include system chipset information\n"); 9319 9320 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 9321 9322 pci_disable_msi(tp->pdev); 9323 9324 tg3_flag_clear(tp, USING_MSI); 9325 tp->napi[0].irq_vec = tp->pdev->irq; 9326 9327 err = tg3_request_irq(tp, 0); 9328 if (err) 9329 return err; 9330 9331 /* Need to reset the chip because the MSI cycle may have terminated 9332 * with Master Abort. 9333 */ 9334 tg3_full_lock(tp, 1); 9335 9336 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 9337 err = tg3_init_hw(tp, 1); 9338 9339 tg3_full_unlock(tp); 9340 9341 if (err) 9342 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 9343 9344 return err; 9345} 9346 9347static int tg3_request_firmware(struct tg3 *tp) 9348{ 9349 const __be32 *fw_data; 9350 9351 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) { 9352 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n", 9353 tp->fw_needed); 9354 return -ENOENT; 9355 } 9356 9357 fw_data = (void *)tp->fw->data; 9358 9359 /* Firmware blob starts with version numbers, followed by 9360 * start address and _full_ length including BSS sections 9361 * (which must be longer than the actual data, of course 9362 */ 9363 9364 tp->fw_len = be32_to_cpu(fw_data[2]); /* includes bss */ 9365 if (tp->fw_len < (tp->fw->size - 12)) { 9366 netdev_err(tp->dev, "bogus length %d in \"%s\"\n", 9367 tp->fw_len, tp->fw_needed); 9368 release_firmware(tp->fw); 9369 tp->fw = NULL; 9370 return -EINVAL; 9371 } 9372 9373 /* We no longer need firmware; we have it. */ 9374 tp->fw_needed = NULL; 9375 return 0; 9376} 9377 9378static bool tg3_enable_msix(struct tg3 *tp) 9379{ 9380 int i, rc, cpus = num_online_cpus(); 9381 struct msix_entry msix_ent[tp->irq_max]; 9382 9383 if (cpus == 1) 9384 /* Just fallback to the simpler MSI mode. */ 9385 return false; 9386 9387 /* 9388 * We want as many rx rings enabled as there are cpus. 9389 * The first MSIX vector only deals with link interrupts, etc, 9390 * so we add one to the number of vectors we are requesting. 9391 */ 9392 tp->irq_cnt = min_t(unsigned, cpus + 1, tp->irq_max); 9393 9394 for (i = 0; i < tp->irq_max; i++) { 9395 msix_ent[i].entry = i; 9396 msix_ent[i].vector = 0; 9397 } 9398 9399 rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt); 9400 if (rc < 0) { 9401 return false; 9402 } else if (rc != 0) { 9403 if (pci_enable_msix(tp->pdev, msix_ent, rc)) 9404 return false; 9405 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n", 9406 tp->irq_cnt, rc); 9407 tp->irq_cnt = rc; 9408 } 9409 9410 for (i = 0; i < tp->irq_max; i++) 9411 tp->napi[i].irq_vec = msix_ent[i].vector; 9412 9413 netif_set_real_num_tx_queues(tp->dev, 1); 9414 rc = tp->irq_cnt > 1 ? tp->irq_cnt - 1 : 1; 9415 if (netif_set_real_num_rx_queues(tp->dev, rc)) { 9416 pci_disable_msix(tp->pdev); 9417 return false; 9418 } 9419 9420 if (tp->irq_cnt > 1) { 9421 tg3_flag_set(tp, ENABLE_RSS); 9422 9423 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 9424 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 9425 tg3_flag_set(tp, ENABLE_TSS); 9426 netif_set_real_num_tx_queues(tp->dev, tp->irq_cnt - 1); 9427 } 9428 } 9429 9430 return true; 9431} 9432 9433static void tg3_ints_init(struct tg3 *tp) 9434{ 9435 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) && 9436 !tg3_flag(tp, TAGGED_STATUS)) { 9437 /* All MSI supporting chips should support tagged 9438 * status. Assert that this is the case. 9439 */ 9440 netdev_warn(tp->dev, 9441 "MSI without TAGGED_STATUS? Not using MSI\n"); 9442 goto defcfg; 9443 } 9444 9445 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp)) 9446 tg3_flag_set(tp, USING_MSIX); 9447 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0) 9448 tg3_flag_set(tp, USING_MSI); 9449 9450 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 9451 u32 msi_mode = tr32(MSGINT_MODE); 9452 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) 9453 msi_mode |= MSGINT_MODE_MULTIVEC_EN; 9454 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); 9455 } 9456defcfg: 9457 if (!tg3_flag(tp, USING_MSIX)) { 9458 tp->irq_cnt = 1; 9459 tp->napi[0].irq_vec = tp->pdev->irq; 9460 netif_set_real_num_tx_queues(tp->dev, 1); 9461 netif_set_real_num_rx_queues(tp->dev, 1); 9462 } 9463} 9464 9465static void tg3_ints_fini(struct tg3 *tp) 9466{ 9467 if (tg3_flag(tp, USING_MSIX)) 9468 pci_disable_msix(tp->pdev); 9469 else if (tg3_flag(tp, USING_MSI)) 9470 pci_disable_msi(tp->pdev); 9471 tg3_flag_clear(tp, USING_MSI); 9472 tg3_flag_clear(tp, USING_MSIX); 9473 tg3_flag_clear(tp, ENABLE_RSS); 9474 tg3_flag_clear(tp, ENABLE_TSS); 9475} 9476 9477static int tg3_open(struct net_device *dev) 9478{ 9479 struct tg3 *tp = netdev_priv(dev); 9480 int i, err; 9481 9482 if (tp->fw_needed) { 9483 err = tg3_request_firmware(tp); 9484 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) { 9485 if (err) 9486 return err; 9487 } else if (err) { 9488 netdev_warn(tp->dev, "TSO capability disabled\n"); 9489 tg3_flag_clear(tp, TSO_CAPABLE); 9490 } else if (!tg3_flag(tp, TSO_CAPABLE)) { 9491 netdev_notice(tp->dev, "TSO capability restored\n"); 9492 tg3_flag_set(tp, TSO_CAPABLE); 9493 } 9494 } 9495 9496 netif_carrier_off(tp->dev); 9497 9498 err = tg3_power_up(tp); 9499 if (err) 9500 return err; 9501 9502 tg3_full_lock(tp, 0); 9503 9504 tg3_disable_ints(tp); 9505 tg3_flag_clear(tp, INIT_COMPLETE); 9506 9507 tg3_full_unlock(tp); 9508 9509 /* 9510 * Setup interrupts first so we know how 9511 * many NAPI resources to allocate 9512 */ 9513 tg3_ints_init(tp); 9514 9515 /* The placement of this call is tied 9516 * to the setup and use of Host TX descriptors. 9517 */ 9518 err = tg3_alloc_consistent(tp); 9519 if (err) 9520 goto err_out1; 9521 9522 tg3_napi_init(tp); 9523 9524 tg3_napi_enable(tp); 9525 9526 for (i = 0; i < tp->irq_cnt; i++) { 9527 struct tg3_napi *tnapi = &tp->napi[i]; 9528 err = tg3_request_irq(tp, i); 9529 if (err) { 9530 for (i--; i >= 0; i--) 9531 free_irq(tnapi->irq_vec, tnapi); 9532 break; 9533 } 9534 } 9535 9536 if (err) 9537 goto err_out2; 9538 9539 tg3_full_lock(tp, 0); 9540 9541 err = tg3_init_hw(tp, 1); 9542 if (err) { 9543 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 9544 tg3_free_rings(tp); 9545 } else { 9546 if (tg3_flag(tp, TAGGED_STATUS) && 9547 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && 9548 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57765) 9549 tp->timer_offset = HZ; 9550 else 9551 tp->timer_offset = HZ / 10; 9552 9553 BUG_ON(tp->timer_offset > HZ); 9554 tp->timer_counter = tp->timer_multiplier = 9555 (HZ / tp->timer_offset); 9556 tp->asf_counter = tp->asf_multiplier = 9557 ((HZ / tp->timer_offset) * 2); 9558 9559 init_timer(&tp->timer); 9560 tp->timer.expires = jiffies + tp->timer_offset; 9561 tp->timer.data = (unsigned long) tp; 9562 tp->timer.function = tg3_timer; 9563 } 9564 9565 tg3_full_unlock(tp); 9566 9567 if (err) 9568 goto err_out3; 9569 9570 if (tg3_flag(tp, USING_MSI)) { 9571 err = tg3_test_msi(tp); 9572 9573 if (err) { 9574 tg3_full_lock(tp, 0); 9575 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 9576 tg3_free_rings(tp); 9577 tg3_full_unlock(tp); 9578 9579 goto err_out2; 9580 } 9581 9582 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { 9583 u32 val = tr32(PCIE_TRANSACTION_CFG); 9584 9585 tw32(PCIE_TRANSACTION_CFG, 9586 val | PCIE_TRANS_CFG_1SHOT_MSI); 9587 } 9588 } 9589 9590 tg3_phy_start(tp); 9591 9592 tg3_full_lock(tp, 0); 9593 9594 add_timer(&tp->timer); 9595 tg3_flag_set(tp, INIT_COMPLETE); 9596 tg3_enable_ints(tp); 9597 9598 tg3_full_unlock(tp); 9599 9600 netif_tx_start_all_queues(dev); 9601 9602 /* 9603 * Reset loopback feature if it was turned on while the device was down 9604 * make sure that it's installed properly now. 9605 */ 9606 if (dev->features & NETIF_F_LOOPBACK) 9607 tg3_set_loopback(dev, dev->features); 9608 9609 return 0; 9610 9611err_out3: 9612 for (i = tp->irq_cnt - 1; i >= 0; i--) { 9613 struct tg3_napi *tnapi = &tp->napi[i]; 9614 free_irq(tnapi->irq_vec, tnapi); 9615 } 9616 9617err_out2: 9618 tg3_napi_disable(tp); 9619 tg3_napi_fini(tp); 9620 tg3_free_consistent(tp); 9621 9622err_out1: 9623 tg3_ints_fini(tp); 9624 tg3_frob_aux_power(tp, false); 9625 pci_set_power_state(tp->pdev, PCI_D3hot); 9626 return err; 9627} 9628 9629static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *, 9630 struct rtnl_link_stats64 *); 9631static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *); 9632 9633static int tg3_close(struct net_device *dev) 9634{ 9635 int i; 9636 struct tg3 *tp = netdev_priv(dev); 9637 9638 tg3_napi_disable(tp); 9639 cancel_work_sync(&tp->reset_task); 9640 9641 netif_tx_stop_all_queues(dev); 9642 9643 del_timer_sync(&tp->timer); 9644 9645 tg3_phy_stop(tp); 9646 9647 tg3_full_lock(tp, 1); 9648 9649 tg3_disable_ints(tp); 9650 9651 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 9652 tg3_free_rings(tp); 9653 tg3_flag_clear(tp, INIT_COMPLETE); 9654 9655 tg3_full_unlock(tp); 9656 9657 for (i = tp->irq_cnt - 1; i >= 0; i--) { 9658 struct tg3_napi *tnapi = &tp->napi[i]; 9659 free_irq(tnapi->irq_vec, tnapi); 9660 } 9661 9662 tg3_ints_fini(tp); 9663 9664 tg3_get_stats64(tp->dev, &tp->net_stats_prev); 9665 9666 memcpy(&tp->estats_prev, tg3_get_estats(tp), 9667 sizeof(tp->estats_prev)); 9668 9669 tg3_napi_fini(tp); 9670 9671 tg3_free_consistent(tp); 9672 9673 tg3_power_down(tp); 9674 9675 netif_carrier_off(tp->dev); 9676 9677 return 0; 9678} 9679 9680static inline u64 get_stat64(tg3_stat64_t *val) 9681{ 9682 return ((u64)val->high << 32) | ((u64)val->low); 9683} 9684 9685static u64 calc_crc_errors(struct tg3 *tp) 9686{ 9687 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9688 9689 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 9690 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 9691 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 9692 u32 val; 9693 9694 spin_lock_bh(&tp->lock); 9695 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 9696 tg3_writephy(tp, MII_TG3_TEST1, 9697 val | MII_TG3_TEST1_CRC_EN); 9698 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 9699 } else 9700 val = 0; 9701 spin_unlock_bh(&tp->lock); 9702 9703 tp->phy_crc_errors += val; 9704 9705 return tp->phy_crc_errors; 9706 } 9707 9708 return get_stat64(&hw_stats->rx_fcs_errors); 9709} 9710 9711#define ESTAT_ADD(member) \ 9712 estats->member = old_estats->member + \ 9713 get_stat64(&hw_stats->member) 9714 9715static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp) 9716{ 9717 struct tg3_ethtool_stats *estats = &tp->estats; 9718 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 9719 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9720 9721 if (!hw_stats) 9722 return old_estats; 9723 9724 ESTAT_ADD(rx_octets); 9725 ESTAT_ADD(rx_fragments); 9726 ESTAT_ADD(rx_ucast_packets); 9727 ESTAT_ADD(rx_mcast_packets); 9728 ESTAT_ADD(rx_bcast_packets); 9729 ESTAT_ADD(rx_fcs_errors); 9730 ESTAT_ADD(rx_align_errors); 9731 ESTAT_ADD(rx_xon_pause_rcvd); 9732 ESTAT_ADD(rx_xoff_pause_rcvd); 9733 ESTAT_ADD(rx_mac_ctrl_rcvd); 9734 ESTAT_ADD(rx_xoff_entered); 9735 ESTAT_ADD(rx_frame_too_long_errors); 9736 ESTAT_ADD(rx_jabbers); 9737 ESTAT_ADD(rx_undersize_packets); 9738 ESTAT_ADD(rx_in_length_errors); 9739 ESTAT_ADD(rx_out_length_errors); 9740 ESTAT_ADD(rx_64_or_less_octet_packets); 9741 ESTAT_ADD(rx_65_to_127_octet_packets); 9742 ESTAT_ADD(rx_128_to_255_octet_packets); 9743 ESTAT_ADD(rx_256_to_511_octet_packets); 9744 ESTAT_ADD(rx_512_to_1023_octet_packets); 9745 ESTAT_ADD(rx_1024_to_1522_octet_packets); 9746 ESTAT_ADD(rx_1523_to_2047_octet_packets); 9747 ESTAT_ADD(rx_2048_to_4095_octet_packets); 9748 ESTAT_ADD(rx_4096_to_8191_octet_packets); 9749 ESTAT_ADD(rx_8192_to_9022_octet_packets); 9750 9751 ESTAT_ADD(tx_octets); 9752 ESTAT_ADD(tx_collisions); 9753 ESTAT_ADD(tx_xon_sent); 9754 ESTAT_ADD(tx_xoff_sent); 9755 ESTAT_ADD(tx_flow_control); 9756 ESTAT_ADD(tx_mac_errors); 9757 ESTAT_ADD(tx_single_collisions); 9758 ESTAT_ADD(tx_mult_collisions); 9759 ESTAT_ADD(tx_deferred); 9760 ESTAT_ADD(tx_excessive_collisions); 9761 ESTAT_ADD(tx_late_collisions); 9762 ESTAT_ADD(tx_collide_2times); 9763 ESTAT_ADD(tx_collide_3times); 9764 ESTAT_ADD(tx_collide_4times); 9765 ESTAT_ADD(tx_collide_5times); 9766 ESTAT_ADD(tx_collide_6times); 9767 ESTAT_ADD(tx_collide_7times); 9768 ESTAT_ADD(tx_collide_8times); 9769 ESTAT_ADD(tx_collide_9times); 9770 ESTAT_ADD(tx_collide_10times); 9771 ESTAT_ADD(tx_collide_11times); 9772 ESTAT_ADD(tx_collide_12times); 9773 ESTAT_ADD(tx_collide_13times); 9774 ESTAT_ADD(tx_collide_14times); 9775 ESTAT_ADD(tx_collide_15times); 9776 ESTAT_ADD(tx_ucast_packets); 9777 ESTAT_ADD(tx_mcast_packets); 9778 ESTAT_ADD(tx_bcast_packets); 9779 ESTAT_ADD(tx_carrier_sense_errors); 9780 ESTAT_ADD(tx_discards); 9781 ESTAT_ADD(tx_errors); 9782 9783 ESTAT_ADD(dma_writeq_full); 9784 ESTAT_ADD(dma_write_prioq_full); 9785 ESTAT_ADD(rxbds_empty); 9786 ESTAT_ADD(rx_discards); 9787 ESTAT_ADD(rx_errors); 9788 ESTAT_ADD(rx_threshold_hit); 9789 9790 ESTAT_ADD(dma_readq_full); 9791 ESTAT_ADD(dma_read_prioq_full); 9792 ESTAT_ADD(tx_comp_queue_full); 9793 9794 ESTAT_ADD(ring_set_send_prod_index); 9795 ESTAT_ADD(ring_status_update); 9796 ESTAT_ADD(nic_irqs); 9797 ESTAT_ADD(nic_avoided_irqs); 9798 ESTAT_ADD(nic_tx_threshold_hit); 9799 9800 ESTAT_ADD(mbuf_lwm_thresh_hit); 9801 9802 return estats; 9803} 9804 9805static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, 9806 struct rtnl_link_stats64 *stats) 9807{ 9808 struct tg3 *tp = netdev_priv(dev); 9809 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 9810 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9811 9812 if (!hw_stats) 9813 return old_stats; 9814 9815 stats->rx_packets = old_stats->rx_packets + 9816 get_stat64(&hw_stats->rx_ucast_packets) + 9817 get_stat64(&hw_stats->rx_mcast_packets) + 9818 get_stat64(&hw_stats->rx_bcast_packets); 9819 9820 stats->tx_packets = old_stats->tx_packets + 9821 get_stat64(&hw_stats->tx_ucast_packets) + 9822 get_stat64(&hw_stats->tx_mcast_packets) + 9823 get_stat64(&hw_stats->tx_bcast_packets); 9824 9825 stats->rx_bytes = old_stats->rx_bytes + 9826 get_stat64(&hw_stats->rx_octets); 9827 stats->tx_bytes = old_stats->tx_bytes + 9828 get_stat64(&hw_stats->tx_octets); 9829 9830 stats->rx_errors = old_stats->rx_errors + 9831 get_stat64(&hw_stats->rx_errors); 9832 stats->tx_errors = old_stats->tx_errors + 9833 get_stat64(&hw_stats->tx_errors) + 9834 get_stat64(&hw_stats->tx_mac_errors) + 9835 get_stat64(&hw_stats->tx_carrier_sense_errors) + 9836 get_stat64(&hw_stats->tx_discards); 9837 9838 stats->multicast = old_stats->multicast + 9839 get_stat64(&hw_stats->rx_mcast_packets); 9840 stats->collisions = old_stats->collisions + 9841 get_stat64(&hw_stats->tx_collisions); 9842 9843 stats->rx_length_errors = old_stats->rx_length_errors + 9844 get_stat64(&hw_stats->rx_frame_too_long_errors) + 9845 get_stat64(&hw_stats->rx_undersize_packets); 9846 9847 stats->rx_over_errors = old_stats->rx_over_errors + 9848 get_stat64(&hw_stats->rxbds_empty); 9849 stats->rx_frame_errors = old_stats->rx_frame_errors + 9850 get_stat64(&hw_stats->rx_align_errors); 9851 stats->tx_aborted_errors = old_stats->tx_aborted_errors + 9852 get_stat64(&hw_stats->tx_discards); 9853 stats->tx_carrier_errors = old_stats->tx_carrier_errors + 9854 get_stat64(&hw_stats->tx_carrier_sense_errors); 9855 9856 stats->rx_crc_errors = old_stats->rx_crc_errors + 9857 calc_crc_errors(tp); 9858 9859 stats->rx_missed_errors = old_stats->rx_missed_errors + 9860 get_stat64(&hw_stats->rx_discards); 9861 9862 stats->rx_dropped = tp->rx_dropped; 9863 9864 return stats; 9865} 9866 9867static inline u32 calc_crc(unsigned char *buf, int len) 9868{ 9869 u32 reg; 9870 u32 tmp; 9871 int j, k; 9872 9873 reg = 0xffffffff; 9874 9875 for (j = 0; j < len; j++) { 9876 reg ^= buf[j]; 9877 9878 for (k = 0; k < 8; k++) { 9879 tmp = reg & 0x01; 9880 9881 reg >>= 1; 9882 9883 if (tmp) 9884 reg ^= 0xedb88320; 9885 } 9886 } 9887 9888 return ~reg; 9889} 9890 9891static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all) 9892{ 9893 /* accept or reject all multicast frames */ 9894 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0); 9895 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0); 9896 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0); 9897 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0); 9898} 9899 9900static void __tg3_set_rx_mode(struct net_device *dev) 9901{ 9902 struct tg3 *tp = netdev_priv(dev); 9903 u32 rx_mode; 9904 9905 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | 9906 RX_MODE_KEEP_VLAN_TAG); 9907 9908#if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE) 9909 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG 9910 * flag clear. 9911 */ 9912 if (!tg3_flag(tp, ENABLE_ASF)) 9913 rx_mode |= RX_MODE_KEEP_VLAN_TAG; 9914#endif 9915 9916 if (dev->flags & IFF_PROMISC) { 9917 /* Promiscuous mode. */ 9918 rx_mode |= RX_MODE_PROMISC; 9919 } else if (dev->flags & IFF_ALLMULTI) { 9920 /* Accept all multicast. */ 9921 tg3_set_multi(tp, 1); 9922 } else if (netdev_mc_empty(dev)) { 9923 /* Reject all multicast. */ 9924 tg3_set_multi(tp, 0); 9925 } else { 9926 /* Accept one or more multicast(s). */ 9927 struct netdev_hw_addr *ha; 9928 u32 mc_filter[4] = { 0, }; 9929 u32 regidx; 9930 u32 bit; 9931 u32 crc; 9932 9933 netdev_for_each_mc_addr(ha, dev) { 9934 crc = calc_crc(ha->addr, ETH_ALEN); 9935 bit = ~crc & 0x7f; 9936 regidx = (bit & 0x60) >> 5; 9937 bit &= 0x1f; 9938 mc_filter[regidx] |= (1 << bit); 9939 } 9940 9941 tw32(MAC_HASH_REG_0, mc_filter[0]); 9942 tw32(MAC_HASH_REG_1, mc_filter[1]); 9943 tw32(MAC_HASH_REG_2, mc_filter[2]); 9944 tw32(MAC_HASH_REG_3, mc_filter[3]); 9945 } 9946 9947 if (rx_mode != tp->rx_mode) { 9948 tp->rx_mode = rx_mode; 9949 tw32_f(MAC_RX_MODE, rx_mode); 9950 udelay(10); 9951 } 9952} 9953 9954static void tg3_set_rx_mode(struct net_device *dev) 9955{ 9956 struct tg3 *tp = netdev_priv(dev); 9957 9958 if (!netif_running(dev)) 9959 return; 9960 9961 tg3_full_lock(tp, 0); 9962 __tg3_set_rx_mode(dev); 9963 tg3_full_unlock(tp); 9964} 9965 9966static int tg3_get_regs_len(struct net_device *dev) 9967{ 9968 return TG3_REG_BLK_SIZE; 9969} 9970 9971static void tg3_get_regs(struct net_device *dev, 9972 struct ethtool_regs *regs, void *_p) 9973{ 9974 struct tg3 *tp = netdev_priv(dev); 9975 9976 regs->version = 0; 9977 9978 memset(_p, 0, TG3_REG_BLK_SIZE); 9979 9980 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 9981 return; 9982 9983 tg3_full_lock(tp, 0); 9984 9985 tg3_dump_legacy_regs(tp, (u32 *)_p); 9986 9987 tg3_full_unlock(tp); 9988} 9989 9990static int tg3_get_eeprom_len(struct net_device *dev) 9991{ 9992 struct tg3 *tp = netdev_priv(dev); 9993 9994 return tp->nvram_size; 9995} 9996 9997static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 9998{ 9999 struct tg3 *tp = netdev_priv(dev); 10000 int ret; 10001 u8 *pd; 10002 u32 i, offset, len, b_offset, b_count; 10003 __be32 val; 10004 10005 if (tg3_flag(tp, NO_NVRAM)) 10006 return -EINVAL; 10007 10008 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10009 return -EAGAIN; 10010 10011 offset = eeprom->offset; 10012 len = eeprom->len; 10013 eeprom->len = 0; 10014 10015 eeprom->magic = TG3_EEPROM_MAGIC; 10016 10017 if (offset & 3) { 10018 /* adjustments to start on required 4 byte boundary */ 10019 b_offset = offset & 3; 10020 b_count = 4 - b_offset; 10021 if (b_count > len) { 10022 /* i.e. offset=1 len=2 */ 10023 b_count = len; 10024 } 10025 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val); 10026 if (ret) 10027 return ret; 10028 memcpy(data, ((char *)&val) + b_offset, b_count); 10029 len -= b_count; 10030 offset += b_count; 10031 eeprom->len += b_count; 10032 } 10033 10034 /* read bytes up to the last 4 byte boundary */ 10035 pd = &data[eeprom->len]; 10036 for (i = 0; i < (len - (len & 3)); i += 4) { 10037 ret = tg3_nvram_read_be32(tp, offset + i, &val); 10038 if (ret) { 10039 eeprom->len += i; 10040 return ret; 10041 } 10042 memcpy(pd + i, &val, 4); 10043 } 10044 eeprom->len += i; 10045 10046 if (len & 3) { 10047 /* read last bytes not ending on 4 byte boundary */ 10048 pd = &data[eeprom->len]; 10049 b_count = len & 3; 10050 b_offset = offset + len - b_count; 10051 ret = tg3_nvram_read_be32(tp, b_offset, &val); 10052 if (ret) 10053 return ret; 10054 memcpy(pd, &val, b_count); 10055 eeprom->len += b_count; 10056 } 10057 return 0; 10058} 10059 10060static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf); 10061 10062static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 10063{ 10064 struct tg3 *tp = netdev_priv(dev); 10065 int ret; 10066 u32 offset, len, b_offset, odd_len; 10067 u8 *buf; 10068 __be32 start, end; 10069 10070 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10071 return -EAGAIN; 10072 10073 if (tg3_flag(tp, NO_NVRAM) || 10074 eeprom->magic != TG3_EEPROM_MAGIC) 10075 return -EINVAL; 10076 10077 offset = eeprom->offset; 10078 len = eeprom->len; 10079 10080 if ((b_offset = (offset & 3))) { 10081 /* adjustments to start on required 4 byte boundary */ 10082 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start); 10083 if (ret) 10084 return ret; 10085 len += b_offset; 10086 offset &= ~3; 10087 if (len < 4) 10088 len = 4; 10089 } 10090 10091 odd_len = 0; 10092 if (len & 3) { 10093 /* adjustments to end on required 4 byte boundary */ 10094 odd_len = 1; 10095 len = (len + 3) & ~3; 10096 ret = tg3_nvram_read_be32(tp, offset+len-4, &end); 10097 if (ret) 10098 return ret; 10099 } 10100 10101 buf = data; 10102 if (b_offset || odd_len) { 10103 buf = kmalloc(len, GFP_KERNEL); 10104 if (!buf) 10105 return -ENOMEM; 10106 if (b_offset) 10107 memcpy(buf, &start, 4); 10108 if (odd_len) 10109 memcpy(buf+len-4, &end, 4); 10110 memcpy(buf + b_offset, data, eeprom->len); 10111 } 10112 10113 ret = tg3_nvram_write_block(tp, offset, len, buf); 10114 10115 if (buf != data) 10116 kfree(buf); 10117 10118 return ret; 10119} 10120 10121static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) 10122{ 10123 struct tg3 *tp = netdev_priv(dev); 10124 10125 if (tg3_flag(tp, USE_PHYLIB)) { 10126 struct phy_device *phydev; 10127 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 10128 return -EAGAIN; 10129 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 10130 return phy_ethtool_gset(phydev, cmd); 10131 } 10132 10133 cmd->supported = (SUPPORTED_Autoneg); 10134 10135 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 10136 cmd->supported |= (SUPPORTED_1000baseT_Half | 10137 SUPPORTED_1000baseT_Full); 10138 10139 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 10140 cmd->supported |= (SUPPORTED_100baseT_Half | 10141 SUPPORTED_100baseT_Full | 10142 SUPPORTED_10baseT_Half | 10143 SUPPORTED_10baseT_Full | 10144 SUPPORTED_TP); 10145 cmd->port = PORT_TP; 10146 } else { 10147 cmd->supported |= SUPPORTED_FIBRE; 10148 cmd->port = PORT_FIBRE; 10149 } 10150 10151 cmd->advertising = tp->link_config.advertising; 10152 if (tg3_flag(tp, PAUSE_AUTONEG)) { 10153 if (tp->link_config.flowctrl & FLOW_CTRL_RX) { 10154 if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 10155 cmd->advertising |= ADVERTISED_Pause; 10156 } else { 10157 cmd->advertising |= ADVERTISED_Pause | 10158 ADVERTISED_Asym_Pause; 10159 } 10160 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 10161 cmd->advertising |= ADVERTISED_Asym_Pause; 10162 } 10163 } 10164 if (netif_running(dev)) { 10165 ethtool_cmd_speed_set(cmd, tp->link_config.active_speed); 10166 cmd->duplex = tp->link_config.active_duplex; 10167 } else { 10168 ethtool_cmd_speed_set(cmd, SPEED_INVALID); 10169 cmd->duplex = DUPLEX_INVALID; 10170 } 10171 cmd->phy_address = tp->phy_addr; 10172 cmd->transceiver = XCVR_INTERNAL; 10173 cmd->autoneg = tp->link_config.autoneg; 10174 cmd->maxtxpkt = 0; 10175 cmd->maxrxpkt = 0; 10176 return 0; 10177} 10178 10179static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 10180{ 10181 struct tg3 *tp = netdev_priv(dev); 10182 u32 speed = ethtool_cmd_speed(cmd); 10183 10184 if (tg3_flag(tp, USE_PHYLIB)) { 10185 struct phy_device *phydev; 10186 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 10187 return -EAGAIN; 10188 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 10189 return phy_ethtool_sset(phydev, cmd); 10190 } 10191 10192 if (cmd->autoneg != AUTONEG_ENABLE && 10193 cmd->autoneg != AUTONEG_DISABLE) 10194 return -EINVAL; 10195 10196 if (cmd->autoneg == AUTONEG_DISABLE && 10197 cmd->duplex != DUPLEX_FULL && 10198 cmd->duplex != DUPLEX_HALF) 10199 return -EINVAL; 10200 10201 if (cmd->autoneg == AUTONEG_ENABLE) { 10202 u32 mask = ADVERTISED_Autoneg | 10203 ADVERTISED_Pause | 10204 ADVERTISED_Asym_Pause; 10205 10206 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 10207 mask |= ADVERTISED_1000baseT_Half | 10208 ADVERTISED_1000baseT_Full; 10209 10210 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 10211 mask |= ADVERTISED_100baseT_Half | 10212 ADVERTISED_100baseT_Full | 10213 ADVERTISED_10baseT_Half | 10214 ADVERTISED_10baseT_Full | 10215 ADVERTISED_TP; 10216 else 10217 mask |= ADVERTISED_FIBRE; 10218 10219 if (cmd->advertising & ~mask) 10220 return -EINVAL; 10221 10222 mask &= (ADVERTISED_1000baseT_Half | 10223 ADVERTISED_1000baseT_Full | 10224 ADVERTISED_100baseT_Half | 10225 ADVERTISED_100baseT_Full | 10226 ADVERTISED_10baseT_Half | 10227 ADVERTISED_10baseT_Full); 10228 10229 cmd->advertising &= mask; 10230 } else { 10231 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 10232 if (speed != SPEED_1000) 10233 return -EINVAL; 10234 10235 if (cmd->duplex != DUPLEX_FULL) 10236 return -EINVAL; 10237 } else { 10238 if (speed != SPEED_100 && 10239 speed != SPEED_10) 10240 return -EINVAL; 10241 } 10242 } 10243 10244 tg3_full_lock(tp, 0); 10245 10246 tp->link_config.autoneg = cmd->autoneg; 10247 if (cmd->autoneg == AUTONEG_ENABLE) { 10248 tp->link_config.advertising = (cmd->advertising | 10249 ADVERTISED_Autoneg); 10250 tp->link_config.speed = SPEED_INVALID; 10251 tp->link_config.duplex = DUPLEX_INVALID; 10252 } else { 10253 tp->link_config.advertising = 0; 10254 tp->link_config.speed = speed; 10255 tp->link_config.duplex = cmd->duplex; 10256 } 10257 10258 tp->link_config.orig_speed = tp->link_config.speed; 10259 tp->link_config.orig_duplex = tp->link_config.duplex; 10260 tp->link_config.orig_autoneg = tp->link_config.autoneg; 10261 10262 if (netif_running(dev)) 10263 tg3_setup_phy(tp, 1); 10264 10265 tg3_full_unlock(tp); 10266 10267 return 0; 10268} 10269 10270static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 10271{ 10272 struct tg3 *tp = netdev_priv(dev); 10273 10274 strcpy(info->driver, DRV_MODULE_NAME); 10275 strcpy(info->version, DRV_MODULE_VERSION); 10276 strcpy(info->fw_version, tp->fw_ver); 10277 strcpy(info->bus_info, pci_name(tp->pdev)); 10278} 10279 10280static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 10281{ 10282 struct tg3 *tp = netdev_priv(dev); 10283 10284 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev)) 10285 wol->supported = WAKE_MAGIC; 10286 else 10287 wol->supported = 0; 10288 wol->wolopts = 0; 10289 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev)) 10290 wol->wolopts = WAKE_MAGIC; 10291 memset(&wol->sopass, 0, sizeof(wol->sopass)); 10292} 10293 10294static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 10295{ 10296 struct tg3 *tp = netdev_priv(dev); 10297 struct device *dp = &tp->pdev->dev; 10298 10299 if (wol->wolopts & ~WAKE_MAGIC) 10300 return -EINVAL; 10301 if ((wol->wolopts & WAKE_MAGIC) && 10302 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp))) 10303 return -EINVAL; 10304 10305 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); 10306 10307 spin_lock_bh(&tp->lock); 10308 if (device_may_wakeup(dp)) 10309 tg3_flag_set(tp, WOL_ENABLE); 10310 else 10311 tg3_flag_clear(tp, WOL_ENABLE); 10312 spin_unlock_bh(&tp->lock); 10313 10314 return 0; 10315} 10316 10317static u32 tg3_get_msglevel(struct net_device *dev) 10318{ 10319 struct tg3 *tp = netdev_priv(dev); 10320 return tp->msg_enable; 10321} 10322 10323static void tg3_set_msglevel(struct net_device *dev, u32 value) 10324{ 10325 struct tg3 *tp = netdev_priv(dev); 10326 tp->msg_enable = value; 10327} 10328 10329static int tg3_nway_reset(struct net_device *dev) 10330{ 10331 struct tg3 *tp = netdev_priv(dev); 10332 int r; 10333 10334 if (!netif_running(dev)) 10335 return -EAGAIN; 10336 10337 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 10338 return -EINVAL; 10339 10340 if (tg3_flag(tp, USE_PHYLIB)) { 10341 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 10342 return -EAGAIN; 10343 r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 10344 } else { 10345 u32 bmcr; 10346 10347 spin_lock_bh(&tp->lock); 10348 r = -EINVAL; 10349 tg3_readphy(tp, MII_BMCR, &bmcr); 10350 if (!tg3_readphy(tp, MII_BMCR, &bmcr) && 10351 ((bmcr & BMCR_ANENABLE) || 10352 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) { 10353 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART | 10354 BMCR_ANENABLE); 10355 r = 0; 10356 } 10357 spin_unlock_bh(&tp->lock); 10358 } 10359 10360 return r; 10361} 10362 10363static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 10364{ 10365 struct tg3 *tp = netdev_priv(dev); 10366 10367 ering->rx_max_pending = tp->rx_std_ring_mask; 10368 ering->rx_mini_max_pending = 0; 10369 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 10370 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask; 10371 else 10372 ering->rx_jumbo_max_pending = 0; 10373 10374 ering->tx_max_pending = TG3_TX_RING_SIZE - 1; 10375 10376 ering->rx_pending = tp->rx_pending; 10377 ering->rx_mini_pending = 0; 10378 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 10379 ering->rx_jumbo_pending = tp->rx_jumbo_pending; 10380 else 10381 ering->rx_jumbo_pending = 0; 10382 10383 ering->tx_pending = tp->napi[0].tx_pending; 10384} 10385 10386static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 10387{ 10388 struct tg3 *tp = netdev_priv(dev); 10389 int i, irq_sync = 0, err = 0; 10390 10391 if ((ering->rx_pending > tp->rx_std_ring_mask) || 10392 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || 10393 (ering->tx_pending > TG3_TX_RING_SIZE - 1) || 10394 (ering->tx_pending <= MAX_SKB_FRAGS) || 10395 (tg3_flag(tp, TSO_BUG) && 10396 (ering->tx_pending <= (MAX_SKB_FRAGS * 3)))) 10397 return -EINVAL; 10398 10399 if (netif_running(dev)) { 10400 tg3_phy_stop(tp); 10401 tg3_netif_stop(tp); 10402 irq_sync = 1; 10403 } 10404 10405 tg3_full_lock(tp, irq_sync); 10406 10407 tp->rx_pending = ering->rx_pending; 10408 10409 if (tg3_flag(tp, MAX_RXPEND_64) && 10410 tp->rx_pending > 63) 10411 tp->rx_pending = 63; 10412 tp->rx_jumbo_pending = ering->rx_jumbo_pending; 10413 10414 for (i = 0; i < tp->irq_max; i++) 10415 tp->napi[i].tx_pending = ering->tx_pending; 10416 10417 if (netif_running(dev)) { 10418 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10419 err = tg3_restart_hw(tp, 1); 10420 if (!err) 10421 tg3_netif_start(tp); 10422 } 10423 10424 tg3_full_unlock(tp); 10425 10426 if (irq_sync && !err) 10427 tg3_phy_start(tp); 10428 10429 return err; 10430} 10431 10432static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 10433{ 10434 struct tg3 *tp = netdev_priv(dev); 10435 10436 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG); 10437 10438 if (tp->link_config.active_flowctrl & FLOW_CTRL_RX) 10439 epause->rx_pause = 1; 10440 else 10441 epause->rx_pause = 0; 10442 10443 if (tp->link_config.active_flowctrl & FLOW_CTRL_TX) 10444 epause->tx_pause = 1; 10445 else 10446 epause->tx_pause = 0; 10447} 10448 10449static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 10450{ 10451 struct tg3 *tp = netdev_priv(dev); 10452 int err = 0; 10453 10454 if (tg3_flag(tp, USE_PHYLIB)) { 10455 u32 newadv; 10456 struct phy_device *phydev; 10457 10458 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 10459 10460 if (!(phydev->supported & SUPPORTED_Pause) || 10461 (!(phydev->supported & SUPPORTED_Asym_Pause) && 10462 (epause->rx_pause != epause->tx_pause))) 10463 return -EINVAL; 10464 10465 tp->link_config.flowctrl = 0; 10466 if (epause->rx_pause) { 10467 tp->link_config.flowctrl |= FLOW_CTRL_RX; 10468 10469 if (epause->tx_pause) { 10470 tp->link_config.flowctrl |= FLOW_CTRL_TX; 10471 newadv = ADVERTISED_Pause; 10472 } else 10473 newadv = ADVERTISED_Pause | 10474 ADVERTISED_Asym_Pause; 10475 } else if (epause->tx_pause) { 10476 tp->link_config.flowctrl |= FLOW_CTRL_TX; 10477 newadv = ADVERTISED_Asym_Pause; 10478 } else 10479 newadv = 0; 10480 10481 if (epause->autoneg) 10482 tg3_flag_set(tp, PAUSE_AUTONEG); 10483 else 10484 tg3_flag_clear(tp, PAUSE_AUTONEG); 10485 10486 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 10487 u32 oldadv = phydev->advertising & 10488 (ADVERTISED_Pause | ADVERTISED_Asym_Pause); 10489 if (oldadv != newadv) { 10490 phydev->advertising &= 10491 ~(ADVERTISED_Pause | 10492 ADVERTISED_Asym_Pause); 10493 phydev->advertising |= newadv; 10494 if (phydev->autoneg) { 10495 /* 10496 * Always renegotiate the link to 10497 * inform our link partner of our 10498 * flow control settings, even if the 10499 * flow control is forced. Let 10500 * tg3_adjust_link() do the final 10501 * flow control setup. 10502 */ 10503 return phy_start_aneg(phydev); 10504 } 10505 } 10506 10507 if (!epause->autoneg) 10508 tg3_setup_flow_control(tp, 0, 0); 10509 } else { 10510 tp->link_config.orig_advertising &= 10511 ~(ADVERTISED_Pause | 10512 ADVERTISED_Asym_Pause); 10513 tp->link_config.orig_advertising |= newadv; 10514 } 10515 } else { 10516 int irq_sync = 0; 10517 10518 if (netif_running(dev)) { 10519 tg3_netif_stop(tp); 10520 irq_sync = 1; 10521 } 10522 10523 tg3_full_lock(tp, irq_sync); 10524 10525 if (epause->autoneg) 10526 tg3_flag_set(tp, PAUSE_AUTONEG); 10527 else 10528 tg3_flag_clear(tp, PAUSE_AUTONEG); 10529 if (epause->rx_pause) 10530 tp->link_config.flowctrl |= FLOW_CTRL_RX; 10531 else 10532 tp->link_config.flowctrl &= ~FLOW_CTRL_RX; 10533 if (epause->tx_pause) 10534 tp->link_config.flowctrl |= FLOW_CTRL_TX; 10535 else 10536 tp->link_config.flowctrl &= ~FLOW_CTRL_TX; 10537 10538 if (netif_running(dev)) { 10539 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10540 err = tg3_restart_hw(tp, 1); 10541 if (!err) 10542 tg3_netif_start(tp); 10543 } 10544 10545 tg3_full_unlock(tp); 10546 } 10547 10548 return err; 10549} 10550 10551static int tg3_get_sset_count(struct net_device *dev, int sset) 10552{ 10553 switch (sset) { 10554 case ETH_SS_TEST: 10555 return TG3_NUM_TEST; 10556 case ETH_SS_STATS: 10557 return TG3_NUM_STATS; 10558 default: 10559 return -EOPNOTSUPP; 10560 } 10561} 10562 10563static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 10564{ 10565 switch (stringset) { 10566 case ETH_SS_STATS: 10567 memcpy(buf, &ethtool_stats_keys, sizeof(ethtool_stats_keys)); 10568 break; 10569 case ETH_SS_TEST: 10570 memcpy(buf, &ethtool_test_keys, sizeof(ethtool_test_keys)); 10571 break; 10572 default: 10573 WARN_ON(1); /* we need a WARN() */ 10574 break; 10575 } 10576} 10577 10578static int tg3_set_phys_id(struct net_device *dev, 10579 enum ethtool_phys_id_state state) 10580{ 10581 struct tg3 *tp = netdev_priv(dev); 10582 10583 if (!netif_running(tp->dev)) 10584 return -EAGAIN; 10585 10586 switch (state) { 10587 case ETHTOOL_ID_ACTIVE: 10588 return 1; /* cycle on/off once per second */ 10589 10590 case ETHTOOL_ID_ON: 10591 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 10592 LED_CTRL_1000MBPS_ON | 10593 LED_CTRL_100MBPS_ON | 10594 LED_CTRL_10MBPS_ON | 10595 LED_CTRL_TRAFFIC_OVERRIDE | 10596 LED_CTRL_TRAFFIC_BLINK | 10597 LED_CTRL_TRAFFIC_LED); 10598 break; 10599 10600 case ETHTOOL_ID_OFF: 10601 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 10602 LED_CTRL_TRAFFIC_OVERRIDE); 10603 break; 10604 10605 case ETHTOOL_ID_INACTIVE: 10606 tw32(MAC_LED_CTRL, tp->led_ctrl); 10607 break; 10608 } 10609 10610 return 0; 10611} 10612 10613static void tg3_get_ethtool_stats(struct net_device *dev, 10614 struct ethtool_stats *estats, u64 *tmp_stats) 10615{ 10616 struct tg3 *tp = netdev_priv(dev); 10617 memcpy(tmp_stats, tg3_get_estats(tp), sizeof(tp->estats)); 10618} 10619 10620static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen) 10621{ 10622 int i; 10623 __be32 *buf; 10624 u32 offset = 0, len = 0; 10625 u32 magic, val; 10626 10627 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic)) 10628 return NULL; 10629 10630 if (magic == TG3_EEPROM_MAGIC) { 10631 for (offset = TG3_NVM_DIR_START; 10632 offset < TG3_NVM_DIR_END; 10633 offset += TG3_NVM_DIRENT_SIZE) { 10634 if (tg3_nvram_read(tp, offset, &val)) 10635 return NULL; 10636 10637 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == 10638 TG3_NVM_DIRTYPE_EXTVPD) 10639 break; 10640 } 10641 10642 if (offset != TG3_NVM_DIR_END) { 10643 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4; 10644 if (tg3_nvram_read(tp, offset + 4, &offset)) 10645 return NULL; 10646 10647 offset = tg3_nvram_logical_addr(tp, offset); 10648 } 10649 } 10650 10651 if (!offset || !len) { 10652 offset = TG3_NVM_VPD_OFF; 10653 len = TG3_NVM_VPD_LEN; 10654 } 10655 10656 buf = kmalloc(len, GFP_KERNEL); 10657 if (buf == NULL) 10658 return NULL; 10659 10660 if (magic == TG3_EEPROM_MAGIC) { 10661 for (i = 0; i < len; i += 4) { 10662 /* The data is in little-endian format in NVRAM. 10663 * Use the big-endian read routines to preserve 10664 * the byte order as it exists in NVRAM. 10665 */ 10666 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4])) 10667 goto error; 10668 } 10669 } else { 10670 u8 *ptr; 10671 ssize_t cnt; 10672 unsigned int pos = 0; 10673 10674 ptr = (u8 *)&buf[0]; 10675 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) { 10676 cnt = pci_read_vpd(tp->pdev, pos, 10677 len - pos, ptr); 10678 if (cnt == -ETIMEDOUT || cnt == -EINTR) 10679 cnt = 0; 10680 else if (cnt < 0) 10681 goto error; 10682 } 10683 if (pos != len) 10684 goto error; 10685 } 10686 10687 *vpdlen = len; 10688 10689 return buf; 10690 10691error: 10692 kfree(buf); 10693 return NULL; 10694} 10695 10696#define NVRAM_TEST_SIZE 0x100 10697#define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14 10698#define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18 10699#define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c 10700#define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20 10701#define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24 10702#define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50 10703#define NVRAM_SELFBOOT_HW_SIZE 0x20 10704#define NVRAM_SELFBOOT_DATA_SIZE 0x1c 10705 10706static int tg3_test_nvram(struct tg3 *tp) 10707{ 10708 u32 csum, magic, len; 10709 __be32 *buf; 10710 int i, j, k, err = 0, size; 10711 10712 if (tg3_flag(tp, NO_NVRAM)) 10713 return 0; 10714 10715 if (tg3_nvram_read(tp, 0, &magic) != 0) 10716 return -EIO; 10717 10718 if (magic == TG3_EEPROM_MAGIC) 10719 size = NVRAM_TEST_SIZE; 10720 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) { 10721 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) == 10722 TG3_EEPROM_SB_FORMAT_1) { 10723 switch (magic & TG3_EEPROM_SB_REVISION_MASK) { 10724 case TG3_EEPROM_SB_REVISION_0: 10725 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE; 10726 break; 10727 case TG3_EEPROM_SB_REVISION_2: 10728 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE; 10729 break; 10730 case TG3_EEPROM_SB_REVISION_3: 10731 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE; 10732 break; 10733 case TG3_EEPROM_SB_REVISION_4: 10734 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE; 10735 break; 10736 case TG3_EEPROM_SB_REVISION_5: 10737 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE; 10738 break; 10739 case TG3_EEPROM_SB_REVISION_6: 10740 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE; 10741 break; 10742 default: 10743 return -EIO; 10744 } 10745 } else 10746 return 0; 10747 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 10748 size = NVRAM_SELFBOOT_HW_SIZE; 10749 else 10750 return -EIO; 10751 10752 buf = kmalloc(size, GFP_KERNEL); 10753 if (buf == NULL) 10754 return -ENOMEM; 10755 10756 err = -EIO; 10757 for (i = 0, j = 0; i < size; i += 4, j++) { 10758 err = tg3_nvram_read_be32(tp, i, &buf[j]); 10759 if (err) 10760 break; 10761 } 10762 if (i < size) 10763 goto out; 10764 10765 /* Selfboot format */ 10766 magic = be32_to_cpu(buf[0]); 10767 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 10768 TG3_EEPROM_MAGIC_FW) { 10769 u8 *buf8 = (u8 *) buf, csum8 = 0; 10770 10771 if ((magic & TG3_EEPROM_SB_REVISION_MASK) == 10772 TG3_EEPROM_SB_REVISION_2) { 10773 /* For rev 2, the csum doesn't include the MBA. */ 10774 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++) 10775 csum8 += buf8[i]; 10776 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++) 10777 csum8 += buf8[i]; 10778 } else { 10779 for (i = 0; i < size; i++) 10780 csum8 += buf8[i]; 10781 } 10782 10783 if (csum8 == 0) { 10784 err = 0; 10785 goto out; 10786 } 10787 10788 err = -EIO; 10789 goto out; 10790 } 10791 10792 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 10793 TG3_EEPROM_MAGIC_HW) { 10794 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 10795 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 10796 u8 *buf8 = (u8 *) buf; 10797 10798 /* Separate the parity bits and the data bytes. */ 10799 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) { 10800 if ((i == 0) || (i == 8)) { 10801 int l; 10802 u8 msk; 10803 10804 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1) 10805 parity[k++] = buf8[i] & msk; 10806 i++; 10807 } else if (i == 16) { 10808 int l; 10809 u8 msk; 10810 10811 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1) 10812 parity[k++] = buf8[i] & msk; 10813 i++; 10814 10815 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1) 10816 parity[k++] = buf8[i] & msk; 10817 i++; 10818 } 10819 data[j++] = buf8[i]; 10820 } 10821 10822 err = -EIO; 10823 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) { 10824 u8 hw8 = hweight8(data[i]); 10825 10826 if ((hw8 & 0x1) && parity[i]) 10827 goto out; 10828 else if (!(hw8 & 0x1) && !parity[i]) 10829 goto out; 10830 } 10831 err = 0; 10832 goto out; 10833 } 10834 10835 err = -EIO; 10836 10837 /* Bootstrap checksum at offset 0x10 */ 10838 csum = calc_crc((unsigned char *) buf, 0x10); 10839 if (csum != le32_to_cpu(buf[0x10/4])) 10840 goto out; 10841 10842 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 10843 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 10844 if (csum != le32_to_cpu(buf[0xfc/4])) 10845 goto out; 10846 10847 kfree(buf); 10848 10849 buf = tg3_vpd_readblock(tp, &len); 10850 if (!buf) 10851 return -ENOMEM; 10852 10853 i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA); 10854 if (i > 0) { 10855 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]); 10856 if (j < 0) 10857 goto out; 10858 10859 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len) 10860 goto out; 10861 10862 i += PCI_VPD_LRDT_TAG_SIZE; 10863 j = pci_vpd_find_info_keyword((u8 *)buf, i, j, 10864 PCI_VPD_RO_KEYWORD_CHKSUM); 10865 if (j > 0) { 10866 u8 csum8 = 0; 10867 10868 j += PCI_VPD_INFO_FLD_HDR_SIZE; 10869 10870 for (i = 0; i <= j; i++) 10871 csum8 += ((u8 *)buf)[i]; 10872 10873 if (csum8) 10874 goto out; 10875 } 10876 } 10877 10878 err = 0; 10879 10880out: 10881 kfree(buf); 10882 return err; 10883} 10884 10885#define TG3_SERDES_TIMEOUT_SEC 2 10886#define TG3_COPPER_TIMEOUT_SEC 6 10887 10888static int tg3_test_link(struct tg3 *tp) 10889{ 10890 int i, max; 10891 10892 if (!netif_running(tp->dev)) 10893 return -ENODEV; 10894 10895 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 10896 max = TG3_SERDES_TIMEOUT_SEC; 10897 else 10898 max = TG3_COPPER_TIMEOUT_SEC; 10899 10900 for (i = 0; i < max; i++) { 10901 if (netif_carrier_ok(tp->dev)) 10902 return 0; 10903 10904 if (msleep_interruptible(1000)) 10905 break; 10906 } 10907 10908 return -EIO; 10909} 10910 10911/* Only test the commonly used registers */ 10912static int tg3_test_registers(struct tg3 *tp) 10913{ 10914 int i, is_5705, is_5750; 10915 u32 offset, read_mask, write_mask, val, save_val, read_val; 10916 static struct { 10917 u16 offset; 10918 u16 flags; 10919#define TG3_FL_5705 0x1 10920#define TG3_FL_NOT_5705 0x2 10921#define TG3_FL_NOT_5788 0x4 10922#define TG3_FL_NOT_5750 0x8 10923 u32 read_mask; 10924 u32 write_mask; 10925 } reg_tbl[] = { 10926 /* MAC Control Registers */ 10927 { MAC_MODE, TG3_FL_NOT_5705, 10928 0x00000000, 0x00ef6f8c }, 10929 { MAC_MODE, TG3_FL_5705, 10930 0x00000000, 0x01ef6b8c }, 10931 { MAC_STATUS, TG3_FL_NOT_5705, 10932 0x03800107, 0x00000000 }, 10933 { MAC_STATUS, TG3_FL_5705, 10934 0x03800100, 0x00000000 }, 10935 { MAC_ADDR_0_HIGH, 0x0000, 10936 0x00000000, 0x0000ffff }, 10937 { MAC_ADDR_0_LOW, 0x0000, 10938 0x00000000, 0xffffffff }, 10939 { MAC_RX_MTU_SIZE, 0x0000, 10940 0x00000000, 0x0000ffff }, 10941 { MAC_TX_MODE, 0x0000, 10942 0x00000000, 0x00000070 }, 10943 { MAC_TX_LENGTHS, 0x0000, 10944 0x00000000, 0x00003fff }, 10945 { MAC_RX_MODE, TG3_FL_NOT_5705, 10946 0x00000000, 0x000007fc }, 10947 { MAC_RX_MODE, TG3_FL_5705, 10948 0x00000000, 0x000007dc }, 10949 { MAC_HASH_REG_0, 0x0000, 10950 0x00000000, 0xffffffff }, 10951 { MAC_HASH_REG_1, 0x0000, 10952 0x00000000, 0xffffffff }, 10953 { MAC_HASH_REG_2, 0x0000, 10954 0x00000000, 0xffffffff }, 10955 { MAC_HASH_REG_3, 0x0000, 10956 0x00000000, 0xffffffff }, 10957 10958 /* Receive Data and Receive BD Initiator Control Registers. */ 10959 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705, 10960 0x00000000, 0xffffffff }, 10961 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705, 10962 0x00000000, 0xffffffff }, 10963 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705, 10964 0x00000000, 0x00000003 }, 10965 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705, 10966 0x00000000, 0xffffffff }, 10967 { RCVDBDI_STD_BD+0, 0x0000, 10968 0x00000000, 0xffffffff }, 10969 { RCVDBDI_STD_BD+4, 0x0000, 10970 0x00000000, 0xffffffff }, 10971 { RCVDBDI_STD_BD+8, 0x0000, 10972 0x00000000, 0xffff0002 }, 10973 { RCVDBDI_STD_BD+0xc, 0x0000, 10974 0x00000000, 0xffffffff }, 10975 10976 /* Receive BD Initiator Control Registers. */ 10977 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705, 10978 0x00000000, 0xffffffff }, 10979 { RCVBDI_STD_THRESH, TG3_FL_5705, 10980 0x00000000, 0x000003ff }, 10981 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705, 10982 0x00000000, 0xffffffff }, 10983 10984 /* Host Coalescing Control Registers. */ 10985 { HOSTCC_MODE, TG3_FL_NOT_5705, 10986 0x00000000, 0x00000004 }, 10987 { HOSTCC_MODE, TG3_FL_5705, 10988 0x00000000, 0x000000f6 }, 10989 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705, 10990 0x00000000, 0xffffffff }, 10991 { HOSTCC_RXCOL_TICKS, TG3_FL_5705, 10992 0x00000000, 0x000003ff }, 10993 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705, 10994 0x00000000, 0xffffffff }, 10995 { HOSTCC_TXCOL_TICKS, TG3_FL_5705, 10996 0x00000000, 0x000003ff }, 10997 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705, 10998 0x00000000, 0xffffffff }, 10999 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 11000 0x00000000, 0x000000ff }, 11001 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705, 11002 0x00000000, 0xffffffff }, 11003 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 11004 0x00000000, 0x000000ff }, 11005 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705, 11006 0x00000000, 0xffffffff }, 11007 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705, 11008 0x00000000, 0xffffffff }, 11009 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705, 11010 0x00000000, 0xffffffff }, 11011 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 11012 0x00000000, 0x000000ff }, 11013 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705, 11014 0x00000000, 0xffffffff }, 11015 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 11016 0x00000000, 0x000000ff }, 11017 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705, 11018 0x00000000, 0xffffffff }, 11019 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705, 11020 0x00000000, 0xffffffff }, 11021 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705, 11022 0x00000000, 0xffffffff }, 11023 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000, 11024 0x00000000, 0xffffffff }, 11025 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000, 11026 0x00000000, 0xffffffff }, 11027 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000, 11028 0xffffffff, 0x00000000 }, 11029 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000, 11030 0xffffffff, 0x00000000 }, 11031 11032 /* Buffer Manager Control Registers. */ 11033 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750, 11034 0x00000000, 0x007fff80 }, 11035 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750, 11036 0x00000000, 0x007fffff }, 11037 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000, 11038 0x00000000, 0x0000003f }, 11039 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000, 11040 0x00000000, 0x000001ff }, 11041 { BUFMGR_MB_HIGH_WATER, 0x0000, 11042 0x00000000, 0x000001ff }, 11043 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705, 11044 0xffffffff, 0x00000000 }, 11045 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705, 11046 0xffffffff, 0x00000000 }, 11047 11048 /* Mailbox Registers */ 11049 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000, 11050 0x00000000, 0x000001ff }, 11051 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705, 11052 0x00000000, 0x000001ff }, 11053 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000, 11054 0x00000000, 0x000007ff }, 11055 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000, 11056 0x00000000, 0x000001ff }, 11057 11058 { 0xffff, 0x0000, 0x00000000, 0x00000000 }, 11059 }; 11060 11061 is_5705 = is_5750 = 0; 11062 if (tg3_flag(tp, 5705_PLUS)) { 11063 is_5705 = 1; 11064 if (tg3_flag(tp, 5750_PLUS)) 11065 is_5750 = 1; 11066 } 11067 11068 for (i = 0; reg_tbl[i].offset != 0xffff; i++) { 11069 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705)) 11070 continue; 11071 11072 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705)) 11073 continue; 11074 11075 if (tg3_flag(tp, IS_5788) && 11076 (reg_tbl[i].flags & TG3_FL_NOT_5788)) 11077 continue; 11078 11079 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750)) 11080 continue; 11081 11082 offset = (u32) reg_tbl[i].offset; 11083 read_mask = reg_tbl[i].read_mask; 11084 write_mask = reg_tbl[i].write_mask; 11085 11086 /* Save the original register content */ 11087 save_val = tr32(offset); 11088 11089 /* Determine the read-only value. */ 11090 read_val = save_val & read_mask; 11091 11092 /* Write zero to the register, then make sure the read-only bits 11093 * are not changed and the read/write bits are all zeros. 11094 */ 11095 tw32(offset, 0); 11096 11097 val = tr32(offset); 11098 11099 /* Test the read-only and read/write bits. */ 11100 if (((val & read_mask) != read_val) || (val & write_mask)) 11101 goto out; 11102 11103 /* Write ones to all the bits defined by RdMask and WrMask, then 11104 * make sure the read-only bits are not changed and the 11105 * read/write bits are all ones. 11106 */ 11107 tw32(offset, read_mask | write_mask); 11108 11109 val = tr32(offset); 11110 11111 /* Test the read-only bits. */ 11112 if ((val & read_mask) != read_val) 11113 goto out; 11114 11115 /* Test the read/write bits. */ 11116 if ((val & write_mask) != write_mask) 11117 goto out; 11118 11119 tw32(offset, save_val); 11120 } 11121 11122 return 0; 11123 11124out: 11125 if (netif_msg_hw(tp)) 11126 netdev_err(tp->dev, 11127 "Register test failed at offset %x\n", offset); 11128 tw32(offset, save_val); 11129 return -EIO; 11130} 11131 11132static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len) 11133{ 11134 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a }; 11135 int i; 11136 u32 j; 11137 11138 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) { 11139 for (j = 0; j < len; j += 4) { 11140 u32 val; 11141 11142 tg3_write_mem(tp, offset + j, test_pattern[i]); 11143 tg3_read_mem(tp, offset + j, &val); 11144 if (val != test_pattern[i]) 11145 return -EIO; 11146 } 11147 } 11148 return 0; 11149} 11150 11151static int tg3_test_memory(struct tg3 *tp) 11152{ 11153 static struct mem_entry { 11154 u32 offset; 11155 u32 len; 11156 } mem_tbl_570x[] = { 11157 { 0x00000000, 0x00b50}, 11158 { 0x00002000, 0x1c000}, 11159 { 0xffffffff, 0x00000} 11160 }, mem_tbl_5705[] = { 11161 { 0x00000100, 0x0000c}, 11162 { 0x00000200, 0x00008}, 11163 { 0x00004000, 0x00800}, 11164 { 0x00006000, 0x01000}, 11165 { 0x00008000, 0x02000}, 11166 { 0x00010000, 0x0e000}, 11167 { 0xffffffff, 0x00000} 11168 }, mem_tbl_5755[] = { 11169 { 0x00000200, 0x00008}, 11170 { 0x00004000, 0x00800}, 11171 { 0x00006000, 0x00800}, 11172 { 0x00008000, 0x02000}, 11173 { 0x00010000, 0x0c000}, 11174 { 0xffffffff, 0x00000} 11175 }, mem_tbl_5906[] = { 11176 { 0x00000200, 0x00008}, 11177 { 0x00004000, 0x00400}, 11178 { 0x00006000, 0x00400}, 11179 { 0x00008000, 0x01000}, 11180 { 0x00010000, 0x01000}, 11181 { 0xffffffff, 0x00000} 11182 }, mem_tbl_5717[] = { 11183 { 0x00000200, 0x00008}, 11184 { 0x00010000, 0x0a000}, 11185 { 0x00020000, 0x13c00}, 11186 { 0xffffffff, 0x00000} 11187 }, mem_tbl_57765[] = { 11188 { 0x00000200, 0x00008}, 11189 { 0x00004000, 0x00800}, 11190 { 0x00006000, 0x09800}, 11191 { 0x00010000, 0x0a000}, 11192 { 0xffffffff, 0x00000} 11193 }; 11194 struct mem_entry *mem_tbl; 11195 int err = 0; 11196 int i; 11197 11198 if (tg3_flag(tp, 5717_PLUS)) 11199 mem_tbl = mem_tbl_5717; 11200 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 11201 mem_tbl = mem_tbl_57765; 11202 else if (tg3_flag(tp, 5755_PLUS)) 11203 mem_tbl = mem_tbl_5755; 11204 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 11205 mem_tbl = mem_tbl_5906; 11206 else if (tg3_flag(tp, 5705_PLUS)) 11207 mem_tbl = mem_tbl_5705; 11208 else 11209 mem_tbl = mem_tbl_570x; 11210 11211 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) { 11212 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len); 11213 if (err) 11214 break; 11215 } 11216 11217 return err; 11218} 11219 11220#define TG3_MAC_LOOPBACK 0 11221#define TG3_PHY_LOOPBACK 1 11222#define TG3_TSO_LOOPBACK 2 11223 11224#define TG3_TSO_MSS 500 11225 11226#define TG3_TSO_IP_HDR_LEN 20 11227#define TG3_TSO_TCP_HDR_LEN 20 11228#define TG3_TSO_TCP_OPT_LEN 12 11229 11230static const u8 tg3_tso_header[] = { 112310x08, 0x00, 112320x45, 0x00, 0x00, 0x00, 112330x00, 0x00, 0x40, 0x00, 112340x40, 0x06, 0x00, 0x00, 112350x0a, 0x00, 0x00, 0x01, 112360x0a, 0x00, 0x00, 0x02, 112370x0d, 0x00, 0xe0, 0x00, 112380x00, 0x00, 0x01, 0x00, 112390x00, 0x00, 0x02, 0x00, 112400x80, 0x10, 0x10, 0x00, 112410x14, 0x09, 0x00, 0x00, 112420x01, 0x01, 0x08, 0x0a, 112430x11, 0x11, 0x11, 0x11, 112440x11, 0x11, 0x11, 0x11, 11245}; 11246 11247static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, int loopback_mode) 11248{ 11249 u32 mac_mode, rx_start_idx, rx_idx, tx_idx, opaque_key; 11250 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val; 11251 u32 budget; 11252 struct sk_buff *skb, *rx_skb; 11253 u8 *tx_data; 11254 dma_addr_t map; 11255 int num_pkts, tx_len, rx_len, i, err; 11256 struct tg3_rx_buffer_desc *desc; 11257 struct tg3_napi *tnapi, *rnapi; 11258 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 11259 11260 tnapi = &tp->napi[0]; 11261 rnapi = &tp->napi[0]; 11262 if (tp->irq_cnt > 1) { 11263 if (tg3_flag(tp, ENABLE_RSS)) 11264 rnapi = &tp->napi[1]; 11265 if (tg3_flag(tp, ENABLE_TSS)) 11266 tnapi = &tp->napi[1]; 11267 } 11268 coal_now = tnapi->coal_now | rnapi->coal_now; 11269 11270 if (loopback_mode == TG3_MAC_LOOPBACK) { 11271 /* HW errata - mac loopback fails in some cases on 5780. 11272 * Normal traffic and PHY loopback are not affected by 11273 * errata. Also, the MAC loopback test is deprecated for 11274 * all newer ASIC revisions. 11275 */ 11276 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 || 11277 tg3_flag(tp, CPMU_PRESENT)) 11278 return 0; 11279 11280 mac_mode = tp->mac_mode & 11281 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 11282 mac_mode |= MAC_MODE_PORT_INT_LPBACK; 11283 if (!tg3_flag(tp, 5705_PLUS)) 11284 mac_mode |= MAC_MODE_LINK_POLARITY; 11285 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 11286 mac_mode |= MAC_MODE_PORT_MODE_MII; 11287 else 11288 mac_mode |= MAC_MODE_PORT_MODE_GMII; 11289 tw32(MAC_MODE, mac_mode); 11290 } else { 11291 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 11292 tg3_phy_fet_toggle_apd(tp, false); 11293 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED100; 11294 } else 11295 val = BMCR_LOOPBACK | BMCR_FULLDPLX | BMCR_SPEED1000; 11296 11297 tg3_phy_toggle_automdix(tp, 0); 11298 11299 tg3_writephy(tp, MII_BMCR, val); 11300 udelay(40); 11301 11302 mac_mode = tp->mac_mode & 11303 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 11304 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 11305 tg3_writephy(tp, MII_TG3_FET_PTEST, 11306 MII_TG3_FET_PTEST_FRC_TX_LINK | 11307 MII_TG3_FET_PTEST_FRC_TX_LOCK); 11308 /* The write needs to be flushed for the AC131 */ 11309 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 11310 tg3_readphy(tp, MII_TG3_FET_PTEST, &val); 11311 mac_mode |= MAC_MODE_PORT_MODE_MII; 11312 } else 11313 mac_mode |= MAC_MODE_PORT_MODE_GMII; 11314 11315 /* reset to prevent losing 1st rx packet intermittently */ 11316 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 11317 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 11318 udelay(10); 11319 tw32_f(MAC_RX_MODE, tp->rx_mode); 11320 } 11321 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) { 11322 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK; 11323 if (masked_phy_id == TG3_PHY_ID_BCM5401) 11324 mac_mode &= ~MAC_MODE_LINK_POLARITY; 11325 else if (masked_phy_id == TG3_PHY_ID_BCM5411) 11326 mac_mode |= MAC_MODE_LINK_POLARITY; 11327 tg3_writephy(tp, MII_TG3_EXT_CTRL, 11328 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 11329 } 11330 tw32(MAC_MODE, mac_mode); 11331 11332 /* Wait for link */ 11333 for (i = 0; i < 100; i++) { 11334 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 11335 break; 11336 mdelay(1); 11337 } 11338 } 11339 11340 err = -EIO; 11341 11342 tx_len = pktsz; 11343 skb = netdev_alloc_skb(tp->dev, tx_len); 11344 if (!skb) 11345 return -ENOMEM; 11346 11347 tx_data = skb_put(skb, tx_len); 11348 memcpy(tx_data, tp->dev->dev_addr, 6); 11349 memset(tx_data + 6, 0x0, 8); 11350 11351 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN); 11352 11353 if (loopback_mode == TG3_TSO_LOOPBACK) { 11354 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN]; 11355 11356 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN + 11357 TG3_TSO_TCP_OPT_LEN; 11358 11359 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header, 11360 sizeof(tg3_tso_header)); 11361 mss = TG3_TSO_MSS; 11362 11363 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header); 11364 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS); 11365 11366 /* Set the total length field in the IP header */ 11367 iph->tot_len = htons((u16)(mss + hdr_len)); 11368 11369 base_flags = (TXD_FLAG_CPU_PRE_DMA | 11370 TXD_FLAG_CPU_POST_DMA); 11371 11372 if (tg3_flag(tp, HW_TSO_1) || 11373 tg3_flag(tp, HW_TSO_2) || 11374 tg3_flag(tp, HW_TSO_3)) { 11375 struct tcphdr *th; 11376 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN; 11377 th = (struct tcphdr *)&tx_data[val]; 11378 th->check = 0; 11379 } else 11380 base_flags |= TXD_FLAG_TCPUDP_CSUM; 11381 11382 if (tg3_flag(tp, HW_TSO_3)) { 11383 mss |= (hdr_len & 0xc) << 12; 11384 if (hdr_len & 0x10) 11385 base_flags |= 0x00000010; 11386 base_flags |= (hdr_len & 0x3e0) << 5; 11387 } else if (tg3_flag(tp, HW_TSO_2)) 11388 mss |= hdr_len << 9; 11389 else if (tg3_flag(tp, HW_TSO_1) || 11390 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 11391 mss |= (TG3_TSO_TCP_OPT_LEN << 9); 11392 } else { 11393 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10); 11394 } 11395 11396 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header); 11397 } else { 11398 num_pkts = 1; 11399 data_off = ETH_HLEN; 11400 } 11401 11402 for (i = data_off; i < tx_len; i++) 11403 tx_data[i] = (u8) (i & 0xff); 11404 11405 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE); 11406 if (pci_dma_mapping_error(tp->pdev, map)) { 11407 dev_kfree_skb(skb); 11408 return -EIO; 11409 } 11410 11411 val = tnapi->tx_prod; 11412 tnapi->tx_buffers[val].skb = skb; 11413 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map); 11414 11415 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 11416 rnapi->coal_now); 11417 11418 udelay(10); 11419 11420 rx_start_idx = rnapi->hw_status->idx[0].rx_producer; 11421 11422 budget = tg3_tx_avail(tnapi); 11423 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len, 11424 base_flags | TXD_FLAG_END, mss, 0)) { 11425 tnapi->tx_buffers[val].skb = NULL; 11426 dev_kfree_skb(skb); 11427 return -EIO; 11428 } 11429 11430 tnapi->tx_prod++; 11431 11432 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod); 11433 tr32_mailbox(tnapi->prodmbox); 11434 11435 udelay(10); 11436 11437 /* 350 usec to allow enough time on some 10/100 Mbps devices. */ 11438 for (i = 0; i < 35; i++) { 11439 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 11440 coal_now); 11441 11442 udelay(10); 11443 11444 tx_idx = tnapi->hw_status->idx[0].tx_consumer; 11445 rx_idx = rnapi->hw_status->idx[0].rx_producer; 11446 if ((tx_idx == tnapi->tx_prod) && 11447 (rx_idx == (rx_start_idx + num_pkts))) 11448 break; 11449 } 11450 11451 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, 0); 11452 dev_kfree_skb(skb); 11453 11454 if (tx_idx != tnapi->tx_prod) 11455 goto out; 11456 11457 if (rx_idx != rx_start_idx + num_pkts) 11458 goto out; 11459 11460 val = data_off; 11461 while (rx_idx != rx_start_idx) { 11462 desc = &rnapi->rx_rcb[rx_start_idx++]; 11463 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 11464 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 11465 11466 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 11467 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) 11468 goto out; 11469 11470 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) 11471 - ETH_FCS_LEN; 11472 11473 if (loopback_mode != TG3_TSO_LOOPBACK) { 11474 if (rx_len != tx_len) 11475 goto out; 11476 11477 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) { 11478 if (opaque_key != RXD_OPAQUE_RING_STD) 11479 goto out; 11480 } else { 11481 if (opaque_key != RXD_OPAQUE_RING_JUMBO) 11482 goto out; 11483 } 11484 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 11485 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 11486 >> RXD_TCPCSUM_SHIFT != 0xffff) { 11487 goto out; 11488 } 11489 11490 if (opaque_key == RXD_OPAQUE_RING_STD) { 11491 rx_skb = tpr->rx_std_buffers[desc_idx].skb; 11492 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx], 11493 mapping); 11494 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 11495 rx_skb = tpr->rx_jmb_buffers[desc_idx].skb; 11496 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx], 11497 mapping); 11498 } else 11499 goto out; 11500 11501 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, 11502 PCI_DMA_FROMDEVICE); 11503 11504 for (i = data_off; i < rx_len; i++, val++) { 11505 if (*(rx_skb->data + i) != (u8) (val & 0xff)) 11506 goto out; 11507 } 11508 } 11509 11510 err = 0; 11511 11512 /* tg3_free_rings will unmap and free the rx_skb */ 11513out: 11514 return err; 11515} 11516 11517#define TG3_STD_LOOPBACK_FAILED 1 11518#define TG3_JMB_LOOPBACK_FAILED 2 11519#define TG3_TSO_LOOPBACK_FAILED 4 11520 11521#define TG3_MAC_LOOPBACK_SHIFT 0 11522#define TG3_PHY_LOOPBACK_SHIFT 4 11523#define TG3_LOOPBACK_FAILED 0x00000077 11524 11525static int tg3_test_loopback(struct tg3 *tp) 11526{ 11527 int err = 0; 11528 u32 eee_cap, cpmuctrl = 0; 11529 11530 if (!netif_running(tp->dev)) 11531 return TG3_LOOPBACK_FAILED; 11532 11533 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP; 11534 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 11535 11536 err = tg3_reset_hw(tp, 1); 11537 if (err) { 11538 err = TG3_LOOPBACK_FAILED; 11539 goto done; 11540 } 11541 11542 if (tg3_flag(tp, ENABLE_RSS)) { 11543 int i; 11544 11545 /* Reroute all rx packets to the 1st queue */ 11546 for (i = MAC_RSS_INDIR_TBL_0; 11547 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4) 11548 tw32(i, 0x0); 11549 } 11550 11551 /* Turn off gphy autopowerdown. */ 11552 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 11553 tg3_phy_toggle_apd(tp, false); 11554 11555 if (tg3_flag(tp, CPMU_PRESENT)) { 11556 int i; 11557 u32 status; 11558 11559 tw32(TG3_CPMU_MUTEX_REQ, CPMU_MUTEX_REQ_DRIVER); 11560 11561 /* Wait for up to 40 microseconds to acquire lock. */ 11562 for (i = 0; i < 4; i++) { 11563 status = tr32(TG3_CPMU_MUTEX_GNT); 11564 if (status == CPMU_MUTEX_GNT_DRIVER) 11565 break; 11566 udelay(10); 11567 } 11568 11569 if (status != CPMU_MUTEX_GNT_DRIVER) { 11570 err = TG3_LOOPBACK_FAILED; 11571 goto done; 11572 } 11573 11574 /* Turn off link-based power management. */ 11575 cpmuctrl = tr32(TG3_CPMU_CTRL); 11576 tw32(TG3_CPMU_CTRL, 11577 cpmuctrl & ~(CPMU_CTRL_LINK_SPEED_MODE | 11578 CPMU_CTRL_LINK_AWARE_MODE)); 11579 } 11580 11581 if (tg3_run_loopback(tp, ETH_FRAME_LEN, TG3_MAC_LOOPBACK)) 11582 err |= TG3_STD_LOOPBACK_FAILED << TG3_MAC_LOOPBACK_SHIFT; 11583 11584 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 11585 tg3_run_loopback(tp, 9000 + ETH_HLEN, TG3_MAC_LOOPBACK)) 11586 err |= TG3_JMB_LOOPBACK_FAILED << TG3_MAC_LOOPBACK_SHIFT; 11587 11588 if (tg3_flag(tp, CPMU_PRESENT)) { 11589 tw32(TG3_CPMU_CTRL, cpmuctrl); 11590 11591 /* Release the mutex */ 11592 tw32(TG3_CPMU_MUTEX_GNT, CPMU_MUTEX_GNT_DRIVER); 11593 } 11594 11595 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 11596 !tg3_flag(tp, USE_PHYLIB)) { 11597 if (tg3_run_loopback(tp, ETH_FRAME_LEN, TG3_PHY_LOOPBACK)) 11598 err |= TG3_STD_LOOPBACK_FAILED << 11599 TG3_PHY_LOOPBACK_SHIFT; 11600 if (tg3_flag(tp, TSO_CAPABLE) && 11601 tg3_run_loopback(tp, ETH_FRAME_LEN, TG3_TSO_LOOPBACK)) 11602 err |= TG3_TSO_LOOPBACK_FAILED << 11603 TG3_PHY_LOOPBACK_SHIFT; 11604 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 11605 tg3_run_loopback(tp, 9000 + ETH_HLEN, TG3_PHY_LOOPBACK)) 11606 err |= TG3_JMB_LOOPBACK_FAILED << 11607 TG3_PHY_LOOPBACK_SHIFT; 11608 } 11609 11610 /* Re-enable gphy autopowerdown. */ 11611 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 11612 tg3_phy_toggle_apd(tp, true); 11613 11614done: 11615 tp->phy_flags |= eee_cap; 11616 11617 return err; 11618} 11619 11620static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, 11621 u64 *data) 11622{ 11623 struct tg3 *tp = netdev_priv(dev); 11624 11625 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 11626 tg3_power_up(tp)) { 11627 etest->flags |= ETH_TEST_FL_FAILED; 11628 memset(data, 1, sizeof(u64) * TG3_NUM_TEST); 11629 return; 11630 } 11631 11632 memset(data, 0, sizeof(u64) * TG3_NUM_TEST); 11633 11634 if (tg3_test_nvram(tp) != 0) { 11635 etest->flags |= ETH_TEST_FL_FAILED; 11636 data[0] = 1; 11637 } 11638 if (tg3_test_link(tp) != 0) { 11639 etest->flags |= ETH_TEST_FL_FAILED; 11640 data[1] = 1; 11641 } 11642 if (etest->flags & ETH_TEST_FL_OFFLINE) { 11643 int err, err2 = 0, irq_sync = 0; 11644 11645 if (netif_running(dev)) { 11646 tg3_phy_stop(tp); 11647 tg3_netif_stop(tp); 11648 irq_sync = 1; 11649 } 11650 11651 tg3_full_lock(tp, irq_sync); 11652 11653 tg3_halt(tp, RESET_KIND_SUSPEND, 1); 11654 err = tg3_nvram_lock(tp); 11655 tg3_halt_cpu(tp, RX_CPU_BASE); 11656 if (!tg3_flag(tp, 5705_PLUS)) 11657 tg3_halt_cpu(tp, TX_CPU_BASE); 11658 if (!err) 11659 tg3_nvram_unlock(tp); 11660 11661 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 11662 tg3_phy_reset(tp); 11663 11664 if (tg3_test_registers(tp) != 0) { 11665 etest->flags |= ETH_TEST_FL_FAILED; 11666 data[2] = 1; 11667 } 11668 if (tg3_test_memory(tp) != 0) { 11669 etest->flags |= ETH_TEST_FL_FAILED; 11670 data[3] = 1; 11671 } 11672 if ((data[4] = tg3_test_loopback(tp)) != 0) 11673 etest->flags |= ETH_TEST_FL_FAILED; 11674 11675 tg3_full_unlock(tp); 11676 11677 if (tg3_test_interrupt(tp) != 0) { 11678 etest->flags |= ETH_TEST_FL_FAILED; 11679 data[5] = 1; 11680 } 11681 11682 tg3_full_lock(tp, 0); 11683 11684 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11685 if (netif_running(dev)) { 11686 tg3_flag_set(tp, INIT_COMPLETE); 11687 err2 = tg3_restart_hw(tp, 1); 11688 if (!err2) 11689 tg3_netif_start(tp); 11690 } 11691 11692 tg3_full_unlock(tp); 11693 11694 if (irq_sync && !err2) 11695 tg3_phy_start(tp); 11696 } 11697 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 11698 tg3_power_down(tp); 11699 11700} 11701 11702static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 11703{ 11704 struct mii_ioctl_data *data = if_mii(ifr); 11705 struct tg3 *tp = netdev_priv(dev); 11706 int err; 11707 11708 if (tg3_flag(tp, USE_PHYLIB)) { 11709 struct phy_device *phydev; 11710 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 11711 return -EAGAIN; 11712 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 11713 return phy_mii_ioctl(phydev, ifr, cmd); 11714 } 11715 11716 switch (cmd) { 11717 case SIOCGMIIPHY: 11718 data->phy_id = tp->phy_addr; 11719 11720 /* fallthru */ 11721 case SIOCGMIIREG: { 11722 u32 mii_regval; 11723 11724 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 11725 break; /* We have no PHY */ 11726 11727 if (!netif_running(dev)) 11728 return -EAGAIN; 11729 11730 spin_lock_bh(&tp->lock); 11731 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval); 11732 spin_unlock_bh(&tp->lock); 11733 11734 data->val_out = mii_regval; 11735 11736 return err; 11737 } 11738 11739 case SIOCSMIIREG: 11740 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 11741 break; /* We have no PHY */ 11742 11743 if (!netif_running(dev)) 11744 return -EAGAIN; 11745 11746 spin_lock_bh(&tp->lock); 11747 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in); 11748 spin_unlock_bh(&tp->lock); 11749 11750 return err; 11751 11752 default: 11753 /* do nothing */ 11754 break; 11755 } 11756 return -EOPNOTSUPP; 11757} 11758 11759static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 11760{ 11761 struct tg3 *tp = netdev_priv(dev); 11762 11763 memcpy(ec, &tp->coal, sizeof(*ec)); 11764 return 0; 11765} 11766 11767static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 11768{ 11769 struct tg3 *tp = netdev_priv(dev); 11770 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0; 11771 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0; 11772 11773 if (!tg3_flag(tp, 5705_PLUS)) { 11774 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT; 11775 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT; 11776 max_stat_coal_ticks = MAX_STAT_COAL_TICKS; 11777 min_stat_coal_ticks = MIN_STAT_COAL_TICKS; 11778 } 11779 11780 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) || 11781 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) || 11782 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) || 11783 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) || 11784 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) || 11785 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) || 11786 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) || 11787 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) || 11788 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) || 11789 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks)) 11790 return -EINVAL; 11791 11792 /* No rx interrupts will be generated if both are zero */ 11793 if ((ec->rx_coalesce_usecs == 0) && 11794 (ec->rx_max_coalesced_frames == 0)) 11795 return -EINVAL; 11796 11797 /* No tx interrupts will be generated if both are zero */ 11798 if ((ec->tx_coalesce_usecs == 0) && 11799 (ec->tx_max_coalesced_frames == 0)) 11800 return -EINVAL; 11801 11802 /* Only copy relevant parameters, ignore all others. */ 11803 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs; 11804 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs; 11805 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames; 11806 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; 11807 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq; 11808 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq; 11809 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq; 11810 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq; 11811 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs; 11812 11813 if (netif_running(dev)) { 11814 tg3_full_lock(tp, 0); 11815 __tg3_set_coalesce(tp, &tp->coal); 11816 tg3_full_unlock(tp); 11817 } 11818 return 0; 11819} 11820 11821static const struct ethtool_ops tg3_ethtool_ops = { 11822 .get_settings = tg3_get_settings, 11823 .set_settings = tg3_set_settings, 11824 .get_drvinfo = tg3_get_drvinfo, 11825 .get_regs_len = tg3_get_regs_len, 11826 .get_regs = tg3_get_regs, 11827 .get_wol = tg3_get_wol, 11828 .set_wol = tg3_set_wol, 11829 .get_msglevel = tg3_get_msglevel, 11830 .set_msglevel = tg3_set_msglevel, 11831 .nway_reset = tg3_nway_reset, 11832 .get_link = ethtool_op_get_link, 11833 .get_eeprom_len = tg3_get_eeprom_len, 11834 .get_eeprom = tg3_get_eeprom, 11835 .set_eeprom = tg3_set_eeprom, 11836 .get_ringparam = tg3_get_ringparam, 11837 .set_ringparam = tg3_set_ringparam, 11838 .get_pauseparam = tg3_get_pauseparam, 11839 .set_pauseparam = tg3_set_pauseparam, 11840 .self_test = tg3_self_test, 11841 .get_strings = tg3_get_strings, 11842 .set_phys_id = tg3_set_phys_id, 11843 .get_ethtool_stats = tg3_get_ethtool_stats, 11844 .get_coalesce = tg3_get_coalesce, 11845 .set_coalesce = tg3_set_coalesce, 11846 .get_sset_count = tg3_get_sset_count, 11847}; 11848 11849static void __devinit tg3_get_eeprom_size(struct tg3 *tp) 11850{ 11851 u32 cursize, val, magic; 11852 11853 tp->nvram_size = EEPROM_CHIP_SIZE; 11854 11855 if (tg3_nvram_read(tp, 0, &magic) != 0) 11856 return; 11857 11858 if ((magic != TG3_EEPROM_MAGIC) && 11859 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) && 11860 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW)) 11861 return; 11862 11863 /* 11864 * Size the chip by reading offsets at increasing powers of two. 11865 * When we encounter our validation signature, we know the addressing 11866 * has wrapped around, and thus have our chip size. 11867 */ 11868 cursize = 0x10; 11869 11870 while (cursize < tp->nvram_size) { 11871 if (tg3_nvram_read(tp, cursize, &val) != 0) 11872 return; 11873 11874 if (val == magic) 11875 break; 11876 11877 cursize <<= 1; 11878 } 11879 11880 tp->nvram_size = cursize; 11881} 11882 11883static void __devinit tg3_get_nvram_size(struct tg3 *tp) 11884{ 11885 u32 val; 11886 11887 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0) 11888 return; 11889 11890 /* Selfboot format */ 11891 if (val != TG3_EEPROM_MAGIC) { 11892 tg3_get_eeprom_size(tp); 11893 return; 11894 } 11895 11896 if (tg3_nvram_read(tp, 0xf0, &val) == 0) { 11897 if (val != 0) { 11898 /* This is confusing. We want to operate on the 11899 * 16-bit value at offset 0xf2. The tg3_nvram_read() 11900 * call will read from NVRAM and byteswap the data 11901 * according to the byteswapping settings for all 11902 * other register accesses. This ensures the data we 11903 * want will always reside in the lower 16-bits. 11904 * However, the data in NVRAM is in LE format, which 11905 * means the data from the NVRAM read will always be 11906 * opposite the endianness of the CPU. The 16-bit 11907 * byteswap then brings the data to CPU endianness. 11908 */ 11909 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024; 11910 return; 11911 } 11912 } 11913 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 11914} 11915 11916static void __devinit tg3_get_nvram_info(struct tg3 *tp) 11917{ 11918 u32 nvcfg1; 11919 11920 nvcfg1 = tr32(NVRAM_CFG1); 11921 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { 11922 tg3_flag_set(tp, FLASH); 11923 } else { 11924 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 11925 tw32(NVRAM_CFG1, nvcfg1); 11926 } 11927 11928 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 11929 tg3_flag(tp, 5780_CLASS)) { 11930 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { 11931 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: 11932 tp->nvram_jedecnum = JEDEC_ATMEL; 11933 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 11934 tg3_flag_set(tp, NVRAM_BUFFERED); 11935 break; 11936 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED: 11937 tp->nvram_jedecnum = JEDEC_ATMEL; 11938 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE; 11939 break; 11940 case FLASH_VENDOR_ATMEL_EEPROM: 11941 tp->nvram_jedecnum = JEDEC_ATMEL; 11942 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 11943 tg3_flag_set(tp, NVRAM_BUFFERED); 11944 break; 11945 case FLASH_VENDOR_ST: 11946 tp->nvram_jedecnum = JEDEC_ST; 11947 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE; 11948 tg3_flag_set(tp, NVRAM_BUFFERED); 11949 break; 11950 case FLASH_VENDOR_SAIFUN: 11951 tp->nvram_jedecnum = JEDEC_SAIFUN; 11952 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE; 11953 break; 11954 case FLASH_VENDOR_SST_SMALL: 11955 case FLASH_VENDOR_SST_LARGE: 11956 tp->nvram_jedecnum = JEDEC_SST; 11957 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE; 11958 break; 11959 } 11960 } else { 11961 tp->nvram_jedecnum = JEDEC_ATMEL; 11962 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 11963 tg3_flag_set(tp, NVRAM_BUFFERED); 11964 } 11965} 11966 11967static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) 11968{ 11969 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { 11970 case FLASH_5752PAGE_SIZE_256: 11971 tp->nvram_pagesize = 256; 11972 break; 11973 case FLASH_5752PAGE_SIZE_512: 11974 tp->nvram_pagesize = 512; 11975 break; 11976 case FLASH_5752PAGE_SIZE_1K: 11977 tp->nvram_pagesize = 1024; 11978 break; 11979 case FLASH_5752PAGE_SIZE_2K: 11980 tp->nvram_pagesize = 2048; 11981 break; 11982 case FLASH_5752PAGE_SIZE_4K: 11983 tp->nvram_pagesize = 4096; 11984 break; 11985 case FLASH_5752PAGE_SIZE_264: 11986 tp->nvram_pagesize = 264; 11987 break; 11988 case FLASH_5752PAGE_SIZE_528: 11989 tp->nvram_pagesize = 528; 11990 break; 11991 } 11992} 11993 11994static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp) 11995{ 11996 u32 nvcfg1; 11997 11998 nvcfg1 = tr32(NVRAM_CFG1); 11999 12000 /* NVRAM protection for TPM */ 12001 if (nvcfg1 & (1 << 27)) 12002 tg3_flag_set(tp, PROTECTED_NVRAM); 12003 12004 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12005 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ: 12006 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ: 12007 tp->nvram_jedecnum = JEDEC_ATMEL; 12008 tg3_flag_set(tp, NVRAM_BUFFERED); 12009 break; 12010 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12011 tp->nvram_jedecnum = JEDEC_ATMEL; 12012 tg3_flag_set(tp, NVRAM_BUFFERED); 12013 tg3_flag_set(tp, FLASH); 12014 break; 12015 case FLASH_5752VENDOR_ST_M45PE10: 12016 case FLASH_5752VENDOR_ST_M45PE20: 12017 case FLASH_5752VENDOR_ST_M45PE40: 12018 tp->nvram_jedecnum = JEDEC_ST; 12019 tg3_flag_set(tp, NVRAM_BUFFERED); 12020 tg3_flag_set(tp, FLASH); 12021 break; 12022 } 12023 12024 if (tg3_flag(tp, FLASH)) { 12025 tg3_nvram_get_pagesize(tp, nvcfg1); 12026 } else { 12027 /* For eeprom, set pagesize to maximum eeprom size */ 12028 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12029 12030 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12031 tw32(NVRAM_CFG1, nvcfg1); 12032 } 12033} 12034 12035static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp) 12036{ 12037 u32 nvcfg1, protect = 0; 12038 12039 nvcfg1 = tr32(NVRAM_CFG1); 12040 12041 /* NVRAM protection for TPM */ 12042 if (nvcfg1 & (1 << 27)) { 12043 tg3_flag_set(tp, PROTECTED_NVRAM); 12044 protect = 1; 12045 } 12046 12047 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 12048 switch (nvcfg1) { 12049 case FLASH_5755VENDOR_ATMEL_FLASH_1: 12050 case FLASH_5755VENDOR_ATMEL_FLASH_2: 12051 case FLASH_5755VENDOR_ATMEL_FLASH_3: 12052 case FLASH_5755VENDOR_ATMEL_FLASH_5: 12053 tp->nvram_jedecnum = JEDEC_ATMEL; 12054 tg3_flag_set(tp, NVRAM_BUFFERED); 12055 tg3_flag_set(tp, FLASH); 12056 tp->nvram_pagesize = 264; 12057 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 || 12058 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5) 12059 tp->nvram_size = (protect ? 0x3e200 : 12060 TG3_NVRAM_SIZE_512KB); 12061 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2) 12062 tp->nvram_size = (protect ? 0x1f200 : 12063 TG3_NVRAM_SIZE_256KB); 12064 else 12065 tp->nvram_size = (protect ? 0x1f200 : 12066 TG3_NVRAM_SIZE_128KB); 12067 break; 12068 case FLASH_5752VENDOR_ST_M45PE10: 12069 case FLASH_5752VENDOR_ST_M45PE20: 12070 case FLASH_5752VENDOR_ST_M45PE40: 12071 tp->nvram_jedecnum = JEDEC_ST; 12072 tg3_flag_set(tp, NVRAM_BUFFERED); 12073 tg3_flag_set(tp, FLASH); 12074 tp->nvram_pagesize = 256; 12075 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10) 12076 tp->nvram_size = (protect ? 12077 TG3_NVRAM_SIZE_64KB : 12078 TG3_NVRAM_SIZE_128KB); 12079 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20) 12080 tp->nvram_size = (protect ? 12081 TG3_NVRAM_SIZE_64KB : 12082 TG3_NVRAM_SIZE_256KB); 12083 else 12084 tp->nvram_size = (protect ? 12085 TG3_NVRAM_SIZE_128KB : 12086 TG3_NVRAM_SIZE_512KB); 12087 break; 12088 } 12089} 12090 12091static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp) 12092{ 12093 u32 nvcfg1; 12094 12095 nvcfg1 = tr32(NVRAM_CFG1); 12096 12097 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12098 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ: 12099 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 12100 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ: 12101 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 12102 tp->nvram_jedecnum = JEDEC_ATMEL; 12103 tg3_flag_set(tp, NVRAM_BUFFERED); 12104 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12105 12106 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12107 tw32(NVRAM_CFG1, nvcfg1); 12108 break; 12109 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12110 case FLASH_5755VENDOR_ATMEL_FLASH_1: 12111 case FLASH_5755VENDOR_ATMEL_FLASH_2: 12112 case FLASH_5755VENDOR_ATMEL_FLASH_3: 12113 tp->nvram_jedecnum = JEDEC_ATMEL; 12114 tg3_flag_set(tp, NVRAM_BUFFERED); 12115 tg3_flag_set(tp, FLASH); 12116 tp->nvram_pagesize = 264; 12117 break; 12118 case FLASH_5752VENDOR_ST_M45PE10: 12119 case FLASH_5752VENDOR_ST_M45PE20: 12120 case FLASH_5752VENDOR_ST_M45PE40: 12121 tp->nvram_jedecnum = JEDEC_ST; 12122 tg3_flag_set(tp, NVRAM_BUFFERED); 12123 tg3_flag_set(tp, FLASH); 12124 tp->nvram_pagesize = 256; 12125 break; 12126 } 12127} 12128 12129static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp) 12130{ 12131 u32 nvcfg1, protect = 0; 12132 12133 nvcfg1 = tr32(NVRAM_CFG1); 12134 12135 /* NVRAM protection for TPM */ 12136 if (nvcfg1 & (1 << 27)) { 12137 tg3_flag_set(tp, PROTECTED_NVRAM); 12138 protect = 1; 12139 } 12140 12141 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 12142 switch (nvcfg1) { 12143 case FLASH_5761VENDOR_ATMEL_ADB021D: 12144 case FLASH_5761VENDOR_ATMEL_ADB041D: 12145 case FLASH_5761VENDOR_ATMEL_ADB081D: 12146 case FLASH_5761VENDOR_ATMEL_ADB161D: 12147 case FLASH_5761VENDOR_ATMEL_MDB021D: 12148 case FLASH_5761VENDOR_ATMEL_MDB041D: 12149 case FLASH_5761VENDOR_ATMEL_MDB081D: 12150 case FLASH_5761VENDOR_ATMEL_MDB161D: 12151 tp->nvram_jedecnum = JEDEC_ATMEL; 12152 tg3_flag_set(tp, NVRAM_BUFFERED); 12153 tg3_flag_set(tp, FLASH); 12154 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 12155 tp->nvram_pagesize = 256; 12156 break; 12157 case FLASH_5761VENDOR_ST_A_M45PE20: 12158 case FLASH_5761VENDOR_ST_A_M45PE40: 12159 case FLASH_5761VENDOR_ST_A_M45PE80: 12160 case FLASH_5761VENDOR_ST_A_M45PE16: 12161 case FLASH_5761VENDOR_ST_M_M45PE20: 12162 case FLASH_5761VENDOR_ST_M_M45PE40: 12163 case FLASH_5761VENDOR_ST_M_M45PE80: 12164 case FLASH_5761VENDOR_ST_M_M45PE16: 12165 tp->nvram_jedecnum = JEDEC_ST; 12166 tg3_flag_set(tp, NVRAM_BUFFERED); 12167 tg3_flag_set(tp, FLASH); 12168 tp->nvram_pagesize = 256; 12169 break; 12170 } 12171 12172 if (protect) { 12173 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT); 12174 } else { 12175 switch (nvcfg1) { 12176 case FLASH_5761VENDOR_ATMEL_ADB161D: 12177 case FLASH_5761VENDOR_ATMEL_MDB161D: 12178 case FLASH_5761VENDOR_ST_A_M45PE16: 12179 case FLASH_5761VENDOR_ST_M_M45PE16: 12180 tp->nvram_size = TG3_NVRAM_SIZE_2MB; 12181 break; 12182 case FLASH_5761VENDOR_ATMEL_ADB081D: 12183 case FLASH_5761VENDOR_ATMEL_MDB081D: 12184 case FLASH_5761VENDOR_ST_A_M45PE80: 12185 case FLASH_5761VENDOR_ST_M_M45PE80: 12186 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 12187 break; 12188 case FLASH_5761VENDOR_ATMEL_ADB041D: 12189 case FLASH_5761VENDOR_ATMEL_MDB041D: 12190 case FLASH_5761VENDOR_ST_A_M45PE40: 12191 case FLASH_5761VENDOR_ST_M_M45PE40: 12192 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12193 break; 12194 case FLASH_5761VENDOR_ATMEL_ADB021D: 12195 case FLASH_5761VENDOR_ATMEL_MDB021D: 12196 case FLASH_5761VENDOR_ST_A_M45PE20: 12197 case FLASH_5761VENDOR_ST_M_M45PE20: 12198 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12199 break; 12200 } 12201 } 12202} 12203 12204static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp) 12205{ 12206 tp->nvram_jedecnum = JEDEC_ATMEL; 12207 tg3_flag_set(tp, NVRAM_BUFFERED); 12208 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12209} 12210 12211static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp) 12212{ 12213 u32 nvcfg1; 12214 12215 nvcfg1 = tr32(NVRAM_CFG1); 12216 12217 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12218 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 12219 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 12220 tp->nvram_jedecnum = JEDEC_ATMEL; 12221 tg3_flag_set(tp, NVRAM_BUFFERED); 12222 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12223 12224 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12225 tw32(NVRAM_CFG1, nvcfg1); 12226 return; 12227 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12228 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 12229 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 12230 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 12231 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 12232 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 12233 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 12234 tp->nvram_jedecnum = JEDEC_ATMEL; 12235 tg3_flag_set(tp, NVRAM_BUFFERED); 12236 tg3_flag_set(tp, FLASH); 12237 12238 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12239 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12240 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 12241 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 12242 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12243 break; 12244 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 12245 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 12246 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12247 break; 12248 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 12249 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 12250 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12251 break; 12252 } 12253 break; 12254 case FLASH_5752VENDOR_ST_M45PE10: 12255 case FLASH_5752VENDOR_ST_M45PE20: 12256 case FLASH_5752VENDOR_ST_M45PE40: 12257 tp->nvram_jedecnum = JEDEC_ST; 12258 tg3_flag_set(tp, NVRAM_BUFFERED); 12259 tg3_flag_set(tp, FLASH); 12260 12261 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12262 case FLASH_5752VENDOR_ST_M45PE10: 12263 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12264 break; 12265 case FLASH_5752VENDOR_ST_M45PE20: 12266 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12267 break; 12268 case FLASH_5752VENDOR_ST_M45PE40: 12269 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12270 break; 12271 } 12272 break; 12273 default: 12274 tg3_flag_set(tp, NO_NVRAM); 12275 return; 12276 } 12277 12278 tg3_nvram_get_pagesize(tp, nvcfg1); 12279 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 12280 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 12281} 12282 12283 12284static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp) 12285{ 12286 u32 nvcfg1; 12287 12288 nvcfg1 = tr32(NVRAM_CFG1); 12289 12290 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12291 case FLASH_5717VENDOR_ATMEL_EEPROM: 12292 case FLASH_5717VENDOR_MICRO_EEPROM: 12293 tp->nvram_jedecnum = JEDEC_ATMEL; 12294 tg3_flag_set(tp, NVRAM_BUFFERED); 12295 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12296 12297 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12298 tw32(NVRAM_CFG1, nvcfg1); 12299 return; 12300 case FLASH_5717VENDOR_ATMEL_MDB011D: 12301 case FLASH_5717VENDOR_ATMEL_ADB011B: 12302 case FLASH_5717VENDOR_ATMEL_ADB011D: 12303 case FLASH_5717VENDOR_ATMEL_MDB021D: 12304 case FLASH_5717VENDOR_ATMEL_ADB021B: 12305 case FLASH_5717VENDOR_ATMEL_ADB021D: 12306 case FLASH_5717VENDOR_ATMEL_45USPT: 12307 tp->nvram_jedecnum = JEDEC_ATMEL; 12308 tg3_flag_set(tp, NVRAM_BUFFERED); 12309 tg3_flag_set(tp, FLASH); 12310 12311 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12312 case FLASH_5717VENDOR_ATMEL_MDB021D: 12313 /* Detect size with tg3_nvram_get_size() */ 12314 break; 12315 case FLASH_5717VENDOR_ATMEL_ADB021B: 12316 case FLASH_5717VENDOR_ATMEL_ADB021D: 12317 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12318 break; 12319 default: 12320 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12321 break; 12322 } 12323 break; 12324 case FLASH_5717VENDOR_ST_M_M25PE10: 12325 case FLASH_5717VENDOR_ST_A_M25PE10: 12326 case FLASH_5717VENDOR_ST_M_M45PE10: 12327 case FLASH_5717VENDOR_ST_A_M45PE10: 12328 case FLASH_5717VENDOR_ST_M_M25PE20: 12329 case FLASH_5717VENDOR_ST_A_M25PE20: 12330 case FLASH_5717VENDOR_ST_M_M45PE20: 12331 case FLASH_5717VENDOR_ST_A_M45PE20: 12332 case FLASH_5717VENDOR_ST_25USPT: 12333 case FLASH_5717VENDOR_ST_45USPT: 12334 tp->nvram_jedecnum = JEDEC_ST; 12335 tg3_flag_set(tp, NVRAM_BUFFERED); 12336 tg3_flag_set(tp, FLASH); 12337 12338 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12339 case FLASH_5717VENDOR_ST_M_M25PE20: 12340 case FLASH_5717VENDOR_ST_M_M45PE20: 12341 /* Detect size with tg3_nvram_get_size() */ 12342 break; 12343 case FLASH_5717VENDOR_ST_A_M25PE20: 12344 case FLASH_5717VENDOR_ST_A_M45PE20: 12345 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12346 break; 12347 default: 12348 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12349 break; 12350 } 12351 break; 12352 default: 12353 tg3_flag_set(tp, NO_NVRAM); 12354 return; 12355 } 12356 12357 tg3_nvram_get_pagesize(tp, nvcfg1); 12358 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 12359 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 12360} 12361 12362static void __devinit tg3_get_5720_nvram_info(struct tg3 *tp) 12363{ 12364 u32 nvcfg1, nvmpinstrp; 12365 12366 nvcfg1 = tr32(NVRAM_CFG1); 12367 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; 12368 12369 switch (nvmpinstrp) { 12370 case FLASH_5720_EEPROM_HD: 12371 case FLASH_5720_EEPROM_LD: 12372 tp->nvram_jedecnum = JEDEC_ATMEL; 12373 tg3_flag_set(tp, NVRAM_BUFFERED); 12374 12375 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12376 tw32(NVRAM_CFG1, nvcfg1); 12377 if (nvmpinstrp == FLASH_5720_EEPROM_HD) 12378 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12379 else 12380 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE; 12381 return; 12382 case FLASH_5720VENDOR_M_ATMEL_DB011D: 12383 case FLASH_5720VENDOR_A_ATMEL_DB011B: 12384 case FLASH_5720VENDOR_A_ATMEL_DB011D: 12385 case FLASH_5720VENDOR_M_ATMEL_DB021D: 12386 case FLASH_5720VENDOR_A_ATMEL_DB021B: 12387 case FLASH_5720VENDOR_A_ATMEL_DB021D: 12388 case FLASH_5720VENDOR_M_ATMEL_DB041D: 12389 case FLASH_5720VENDOR_A_ATMEL_DB041B: 12390 case FLASH_5720VENDOR_A_ATMEL_DB041D: 12391 case FLASH_5720VENDOR_M_ATMEL_DB081D: 12392 case FLASH_5720VENDOR_A_ATMEL_DB081D: 12393 case FLASH_5720VENDOR_ATMEL_45USPT: 12394 tp->nvram_jedecnum = JEDEC_ATMEL; 12395 tg3_flag_set(tp, NVRAM_BUFFERED); 12396 tg3_flag_set(tp, FLASH); 12397 12398 switch (nvmpinstrp) { 12399 case FLASH_5720VENDOR_M_ATMEL_DB021D: 12400 case FLASH_5720VENDOR_A_ATMEL_DB021B: 12401 case FLASH_5720VENDOR_A_ATMEL_DB021D: 12402 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12403 break; 12404 case FLASH_5720VENDOR_M_ATMEL_DB041D: 12405 case FLASH_5720VENDOR_A_ATMEL_DB041B: 12406 case FLASH_5720VENDOR_A_ATMEL_DB041D: 12407 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12408 break; 12409 case FLASH_5720VENDOR_M_ATMEL_DB081D: 12410 case FLASH_5720VENDOR_A_ATMEL_DB081D: 12411 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 12412 break; 12413 default: 12414 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12415 break; 12416 } 12417 break; 12418 case FLASH_5720VENDOR_M_ST_M25PE10: 12419 case FLASH_5720VENDOR_M_ST_M45PE10: 12420 case FLASH_5720VENDOR_A_ST_M25PE10: 12421 case FLASH_5720VENDOR_A_ST_M45PE10: 12422 case FLASH_5720VENDOR_M_ST_M25PE20: 12423 case FLASH_5720VENDOR_M_ST_M45PE20: 12424 case FLASH_5720VENDOR_A_ST_M25PE20: 12425 case FLASH_5720VENDOR_A_ST_M45PE20: 12426 case FLASH_5720VENDOR_M_ST_M25PE40: 12427 case FLASH_5720VENDOR_M_ST_M45PE40: 12428 case FLASH_5720VENDOR_A_ST_M25PE40: 12429 case FLASH_5720VENDOR_A_ST_M45PE40: 12430 case FLASH_5720VENDOR_M_ST_M25PE80: 12431 case FLASH_5720VENDOR_M_ST_M45PE80: 12432 case FLASH_5720VENDOR_A_ST_M25PE80: 12433 case FLASH_5720VENDOR_A_ST_M45PE80: 12434 case FLASH_5720VENDOR_ST_25USPT: 12435 case FLASH_5720VENDOR_ST_45USPT: 12436 tp->nvram_jedecnum = JEDEC_ST; 12437 tg3_flag_set(tp, NVRAM_BUFFERED); 12438 tg3_flag_set(tp, FLASH); 12439 12440 switch (nvmpinstrp) { 12441 case FLASH_5720VENDOR_M_ST_M25PE20: 12442 case FLASH_5720VENDOR_M_ST_M45PE20: 12443 case FLASH_5720VENDOR_A_ST_M25PE20: 12444 case FLASH_5720VENDOR_A_ST_M45PE20: 12445 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12446 break; 12447 case FLASH_5720VENDOR_M_ST_M25PE40: 12448 case FLASH_5720VENDOR_M_ST_M45PE40: 12449 case FLASH_5720VENDOR_A_ST_M25PE40: 12450 case FLASH_5720VENDOR_A_ST_M45PE40: 12451 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12452 break; 12453 case FLASH_5720VENDOR_M_ST_M25PE80: 12454 case FLASH_5720VENDOR_M_ST_M45PE80: 12455 case FLASH_5720VENDOR_A_ST_M25PE80: 12456 case FLASH_5720VENDOR_A_ST_M45PE80: 12457 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 12458 break; 12459 default: 12460 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12461 break; 12462 } 12463 break; 12464 default: 12465 tg3_flag_set(tp, NO_NVRAM); 12466 return; 12467 } 12468 12469 tg3_nvram_get_pagesize(tp, nvcfg1); 12470 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 12471 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 12472} 12473 12474/* Chips other than 5700/5701 use the NVRAM for fetching info. */ 12475static void __devinit tg3_nvram_init(struct tg3 *tp) 12476{ 12477 tw32_f(GRC_EEPROM_ADDR, 12478 (EEPROM_ADDR_FSM_RESET | 12479 (EEPROM_DEFAULT_CLOCK_PERIOD << 12480 EEPROM_ADDR_CLKPERD_SHIFT))); 12481 12482 msleep(1); 12483 12484 /* Enable seeprom accesses. */ 12485 tw32_f(GRC_LOCAL_CTRL, 12486 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM); 12487 udelay(100); 12488 12489 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 12490 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) { 12491 tg3_flag_set(tp, NVRAM); 12492 12493 if (tg3_nvram_lock(tp)) { 12494 netdev_warn(tp->dev, 12495 "Cannot get nvram lock, %s failed\n", 12496 __func__); 12497 return; 12498 } 12499 tg3_enable_nvram_access(tp); 12500 12501 tp->nvram_size = 0; 12502 12503 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 12504 tg3_get_5752_nvram_info(tp); 12505 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 12506 tg3_get_5755_nvram_info(tp); 12507 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 12508 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 12509 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 12510 tg3_get_5787_nvram_info(tp); 12511 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 12512 tg3_get_5761_nvram_info(tp); 12513 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 12514 tg3_get_5906_nvram_info(tp); 12515 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 12516 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 12517 tg3_get_57780_nvram_info(tp); 12518 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 12519 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 12520 tg3_get_5717_nvram_info(tp); 12521 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 12522 tg3_get_5720_nvram_info(tp); 12523 else 12524 tg3_get_nvram_info(tp); 12525 12526 if (tp->nvram_size == 0) 12527 tg3_get_nvram_size(tp); 12528 12529 tg3_disable_nvram_access(tp); 12530 tg3_nvram_unlock(tp); 12531 12532 } else { 12533 tg3_flag_clear(tp, NVRAM); 12534 tg3_flag_clear(tp, NVRAM_BUFFERED); 12535 12536 tg3_get_eeprom_size(tp); 12537 } 12538} 12539 12540static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp, 12541 u32 offset, u32 len, u8 *buf) 12542{ 12543 int i, j, rc = 0; 12544 u32 val; 12545 12546 for (i = 0; i < len; i += 4) { 12547 u32 addr; 12548 __be32 data; 12549 12550 addr = offset + i; 12551 12552 memcpy(&data, buf + i, 4); 12553 12554 /* 12555 * The SEEPROM interface expects the data to always be opposite 12556 * the native endian format. We accomplish this by reversing 12557 * all the operations that would have been performed on the 12558 * data from a call to tg3_nvram_read_be32(). 12559 */ 12560 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data))); 12561 12562 val = tr32(GRC_EEPROM_ADDR); 12563 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE); 12564 12565 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK | 12566 EEPROM_ADDR_READ); 12567 tw32(GRC_EEPROM_ADDR, val | 12568 (0 << EEPROM_ADDR_DEVID_SHIFT) | 12569 (addr & EEPROM_ADDR_ADDR_MASK) | 12570 EEPROM_ADDR_START | 12571 EEPROM_ADDR_WRITE); 12572 12573 for (j = 0; j < 1000; j++) { 12574 val = tr32(GRC_EEPROM_ADDR); 12575 12576 if (val & EEPROM_ADDR_COMPLETE) 12577 break; 12578 msleep(1); 12579 } 12580 if (!(val & EEPROM_ADDR_COMPLETE)) { 12581 rc = -EBUSY; 12582 break; 12583 } 12584 } 12585 12586 return rc; 12587} 12588 12589/* offset and length are dword aligned */ 12590static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len, 12591 u8 *buf) 12592{ 12593 int ret = 0; 12594 u32 pagesize = tp->nvram_pagesize; 12595 u32 pagemask = pagesize - 1; 12596 u32 nvram_cmd; 12597 u8 *tmp; 12598 12599 tmp = kmalloc(pagesize, GFP_KERNEL); 12600 if (tmp == NULL) 12601 return -ENOMEM; 12602 12603 while (len) { 12604 int j; 12605 u32 phy_addr, page_off, size; 12606 12607 phy_addr = offset & ~pagemask; 12608 12609 for (j = 0; j < pagesize; j += 4) { 12610 ret = tg3_nvram_read_be32(tp, phy_addr + j, 12611 (__be32 *) (tmp + j)); 12612 if (ret) 12613 break; 12614 } 12615 if (ret) 12616 break; 12617 12618 page_off = offset & pagemask; 12619 size = pagesize; 12620 if (len < size) 12621 size = len; 12622 12623 len -= size; 12624 12625 memcpy(tmp + page_off, buf, size); 12626 12627 offset = offset + (pagesize - page_off); 12628 12629 tg3_enable_nvram_access(tp); 12630 12631 /* 12632 * Before we can erase the flash page, we need 12633 * to issue a special "write enable" command. 12634 */ 12635 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 12636 12637 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 12638 break; 12639 12640 /* Erase the target page */ 12641 tw32(NVRAM_ADDR, phy_addr); 12642 12643 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR | 12644 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE; 12645 12646 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 12647 break; 12648 12649 /* Issue another write enable to start the write. */ 12650 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 12651 12652 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 12653 break; 12654 12655 for (j = 0; j < pagesize; j += 4) { 12656 __be32 data; 12657 12658 data = *((__be32 *) (tmp + j)); 12659 12660 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 12661 12662 tw32(NVRAM_ADDR, phy_addr + j); 12663 12664 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | 12665 NVRAM_CMD_WR; 12666 12667 if (j == 0) 12668 nvram_cmd |= NVRAM_CMD_FIRST; 12669 else if (j == (pagesize - 4)) 12670 nvram_cmd |= NVRAM_CMD_LAST; 12671 12672 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd))) 12673 break; 12674 } 12675 if (ret) 12676 break; 12677 } 12678 12679 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE; 12680 tg3_nvram_exec_cmd(tp, nvram_cmd); 12681 12682 kfree(tmp); 12683 12684 return ret; 12685} 12686 12687/* offset and length are dword aligned */ 12688static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len, 12689 u8 *buf) 12690{ 12691 int i, ret = 0; 12692 12693 for (i = 0; i < len; i += 4, offset += 4) { 12694 u32 page_off, phy_addr, nvram_cmd; 12695 __be32 data; 12696 12697 memcpy(&data, buf + i, 4); 12698 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 12699 12700 page_off = offset % tp->nvram_pagesize; 12701 12702 phy_addr = tg3_nvram_phys_addr(tp, offset); 12703 12704 tw32(NVRAM_ADDR, phy_addr); 12705 12706 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR; 12707 12708 if (page_off == 0 || i == 0) 12709 nvram_cmd |= NVRAM_CMD_FIRST; 12710 if (page_off == (tp->nvram_pagesize - 4)) 12711 nvram_cmd |= NVRAM_CMD_LAST; 12712 12713 if (i == (len - 4)) 12714 nvram_cmd |= NVRAM_CMD_LAST; 12715 12716 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 && 12717 !tg3_flag(tp, 5755_PLUS) && 12718 (tp->nvram_jedecnum == JEDEC_ST) && 12719 (nvram_cmd & NVRAM_CMD_FIRST)) { 12720 12721 if ((ret = tg3_nvram_exec_cmd(tp, 12722 NVRAM_CMD_WREN | NVRAM_CMD_GO | 12723 NVRAM_CMD_DONE))) 12724 12725 break; 12726 } 12727 if (!tg3_flag(tp, FLASH)) { 12728 /* We always do complete word writes to eeprom. */ 12729 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST); 12730 } 12731 12732 if ((ret = tg3_nvram_exec_cmd(tp, nvram_cmd))) 12733 break; 12734 } 12735 return ret; 12736} 12737 12738/* offset and length are dword aligned */ 12739static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf) 12740{ 12741 int ret; 12742 12743 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 12744 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & 12745 ~GRC_LCLCTRL_GPIO_OUTPUT1); 12746 udelay(40); 12747 } 12748 12749 if (!tg3_flag(tp, NVRAM)) { 12750 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf); 12751 } else { 12752 u32 grc_mode; 12753 12754 ret = tg3_nvram_lock(tp); 12755 if (ret) 12756 return ret; 12757 12758 tg3_enable_nvram_access(tp); 12759 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) 12760 tw32(NVRAM_WRITE1, 0x406); 12761 12762 grc_mode = tr32(GRC_MODE); 12763 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE); 12764 12765 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) { 12766 ret = tg3_nvram_write_block_buffered(tp, offset, len, 12767 buf); 12768 } else { 12769 ret = tg3_nvram_write_block_unbuffered(tp, offset, len, 12770 buf); 12771 } 12772 12773 grc_mode = tr32(GRC_MODE); 12774 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE); 12775 12776 tg3_disable_nvram_access(tp); 12777 tg3_nvram_unlock(tp); 12778 } 12779 12780 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 12781 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 12782 udelay(40); 12783 } 12784 12785 return ret; 12786} 12787 12788struct subsys_tbl_ent { 12789 u16 subsys_vendor, subsys_devid; 12790 u32 phy_id; 12791}; 12792 12793static struct subsys_tbl_ent subsys_id_to_phy_id[] __devinitdata = { 12794 /* Broadcom boards. */ 12795 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12796 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, 12797 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12798 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 }, 12799 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12800 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 }, 12801 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12802 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 }, 12803 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12804 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 }, 12805 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12806 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 }, 12807 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12808 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 }, 12809 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12810 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 }, 12811 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12812 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 }, 12813 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12814 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 }, 12815 { TG3PCI_SUBVENDOR_ID_BROADCOM, 12816 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 }, 12817 12818 /* 3com boards. */ 12819 { TG3PCI_SUBVENDOR_ID_3COM, 12820 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 }, 12821 { TG3PCI_SUBVENDOR_ID_3COM, 12822 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 }, 12823 { TG3PCI_SUBVENDOR_ID_3COM, 12824 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 }, 12825 { TG3PCI_SUBVENDOR_ID_3COM, 12826 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 }, 12827 { TG3PCI_SUBVENDOR_ID_3COM, 12828 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 }, 12829 12830 /* DELL boards. */ 12831 { TG3PCI_SUBVENDOR_ID_DELL, 12832 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 }, 12833 { TG3PCI_SUBVENDOR_ID_DELL, 12834 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 }, 12835 { TG3PCI_SUBVENDOR_ID_DELL, 12836 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 }, 12837 { TG3PCI_SUBVENDOR_ID_DELL, 12838 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 }, 12839 12840 /* Compaq boards. */ 12841 { TG3PCI_SUBVENDOR_ID_COMPAQ, 12842 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 }, 12843 { TG3PCI_SUBVENDOR_ID_COMPAQ, 12844 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 }, 12845 { TG3PCI_SUBVENDOR_ID_COMPAQ, 12846 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 }, 12847 { TG3PCI_SUBVENDOR_ID_COMPAQ, 12848 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 }, 12849 { TG3PCI_SUBVENDOR_ID_COMPAQ, 12850 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 }, 12851 12852 /* IBM boards. */ 12853 { TG3PCI_SUBVENDOR_ID_IBM, 12854 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } 12855}; 12856 12857static struct subsys_tbl_ent * __devinit tg3_lookup_by_subsys(struct tg3 *tp) 12858{ 12859 int i; 12860 12861 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) { 12862 if ((subsys_id_to_phy_id[i].subsys_vendor == 12863 tp->pdev->subsystem_vendor) && 12864 (subsys_id_to_phy_id[i].subsys_devid == 12865 tp->pdev->subsystem_device)) 12866 return &subsys_id_to_phy_id[i]; 12867 } 12868 return NULL; 12869} 12870 12871static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) 12872{ 12873 u32 val; 12874 12875 tp->phy_id = TG3_PHY_ID_INVALID; 12876 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 12877 12878 /* Assume an onboard device and WOL capable by default. */ 12879 tg3_flag_set(tp, EEPROM_WRITE_PROT); 12880 tg3_flag_set(tp, WOL_CAP); 12881 12882 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 12883 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { 12884 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 12885 tg3_flag_set(tp, IS_NIC); 12886 } 12887 val = tr32(VCPU_CFGSHDW); 12888 if (val & VCPU_CFGSHDW_ASPM_DBNC) 12889 tg3_flag_set(tp, ASPM_WORKAROUND); 12890 if ((val & VCPU_CFGSHDW_WOL_ENABLE) && 12891 (val & VCPU_CFGSHDW_WOL_MAGPKT)) { 12892 tg3_flag_set(tp, WOL_ENABLE); 12893 device_set_wakeup_enable(&tp->pdev->dev, true); 12894 } 12895 goto done; 12896 } 12897 12898 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 12899 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 12900 u32 nic_cfg, led_cfg; 12901 u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id; 12902 int eeprom_phy_serdes = 0; 12903 12904 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 12905 tp->nic_sram_data_cfg = nic_cfg; 12906 12907 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver); 12908 ver >>= NIC_SRAM_DATA_VER_SHIFT; 12909 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 12910 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 12911 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703 && 12912 (ver > 0) && (ver < 0x100)) 12913 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2); 12914 12915 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 12916 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4); 12917 12918 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) == 12919 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) 12920 eeprom_phy_serdes = 1; 12921 12922 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id); 12923 if (nic_phy_id != 0) { 12924 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK; 12925 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK; 12926 12927 eeprom_phy_id = (id1 >> 16) << 10; 12928 eeprom_phy_id |= (id2 & 0xfc00) << 16; 12929 eeprom_phy_id |= (id2 & 0x03ff) << 0; 12930 } else 12931 eeprom_phy_id = 0; 12932 12933 tp->phy_id = eeprom_phy_id; 12934 if (eeprom_phy_serdes) { 12935 if (!tg3_flag(tp, 5705_PLUS)) 12936 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 12937 else 12938 tp->phy_flags |= TG3_PHYFLG_MII_SERDES; 12939 } 12940 12941 if (tg3_flag(tp, 5750_PLUS)) 12942 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | 12943 SHASTA_EXT_LED_MODE_MASK); 12944 else 12945 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; 12946 12947 switch (led_cfg) { 12948 default: 12949 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: 12950 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 12951 break; 12952 12953 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: 12954 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 12955 break; 12956 12957 case NIC_SRAM_DATA_CFG_LED_MODE_MAC: 12958 tp->led_ctrl = LED_CTRL_MODE_MAC; 12959 12960 /* Default to PHY_1_MODE if 0 (MAC_MODE) is 12961 * read on some older 5700/5701 bootcode. 12962 */ 12963 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 12964 ASIC_REV_5700 || 12965 GET_ASIC_REV(tp->pci_chip_rev_id) == 12966 ASIC_REV_5701) 12967 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 12968 12969 break; 12970 12971 case SHASTA_EXT_LED_SHARED: 12972 tp->led_ctrl = LED_CTRL_MODE_SHARED; 12973 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && 12974 tp->pci_chip_rev_id != CHIPREV_ID_5750_A1) 12975 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 12976 LED_CTRL_MODE_PHY_2); 12977 break; 12978 12979 case SHASTA_EXT_LED_MAC: 12980 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; 12981 break; 12982 12983 case SHASTA_EXT_LED_COMBO: 12984 tp->led_ctrl = LED_CTRL_MODE_COMBO; 12985 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) 12986 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 12987 LED_CTRL_MODE_PHY_2); 12988 break; 12989 12990 } 12991 12992 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 12993 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) && 12994 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) 12995 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 12996 12997 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) 12998 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 12999 13000 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { 13001 tg3_flag_set(tp, EEPROM_WRITE_PROT); 13002 if ((tp->pdev->subsystem_vendor == 13003 PCI_VENDOR_ID_ARIMA) && 13004 (tp->pdev->subsystem_device == 0x205a || 13005 tp->pdev->subsystem_device == 0x2063)) 13006 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 13007 } else { 13008 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 13009 tg3_flag_set(tp, IS_NIC); 13010 } 13011 13012 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 13013 tg3_flag_set(tp, ENABLE_ASF); 13014 if (tg3_flag(tp, 5750_PLUS)) 13015 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 13016 } 13017 13018 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) && 13019 tg3_flag(tp, 5750_PLUS)) 13020 tg3_flag_set(tp, ENABLE_APE); 13021 13022 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES && 13023 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)) 13024 tg3_flag_clear(tp, WOL_CAP); 13025 13026 if (tg3_flag(tp, WOL_CAP) && 13027 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { 13028 tg3_flag_set(tp, WOL_ENABLE); 13029 device_set_wakeup_enable(&tp->pdev->dev, true); 13030 } 13031 13032 if (cfg2 & (1 << 17)) 13033 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; 13034 13035 /* serdes signal pre-emphasis in register 0x590 set by */ 13036 /* bootcode if bit 18 is set */ 13037 if (cfg2 & (1 << 18)) 13038 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS; 13039 13040 if ((tg3_flag(tp, 57765_PLUS) || 13041 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 13042 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX)) && 13043 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN)) 13044 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD; 13045 13046 if (tg3_flag(tp, PCI_EXPRESS) && 13047 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 13048 !tg3_flag(tp, 57765_PLUS)) { 13049 u32 cfg3; 13050 13051 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3); 13052 if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE) 13053 tg3_flag_set(tp, ASPM_WORKAROUND); 13054 } 13055 13056 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE) 13057 tg3_flag_set(tp, RGMII_INBAND_DISABLE); 13058 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN) 13059 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN); 13060 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN) 13061 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN); 13062 } 13063done: 13064 if (tg3_flag(tp, WOL_CAP)) 13065 device_set_wakeup_enable(&tp->pdev->dev, 13066 tg3_flag(tp, WOL_ENABLE)); 13067 else 13068 device_set_wakeup_capable(&tp->pdev->dev, false); 13069} 13070 13071static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd) 13072{ 13073 int i; 13074 u32 val; 13075 13076 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START); 13077 tw32(OTP_CTRL, cmd); 13078 13079 /* Wait for up to 1 ms for command to execute. */ 13080 for (i = 0; i < 100; i++) { 13081 val = tr32(OTP_STATUS); 13082 if (val & OTP_STATUS_CMD_DONE) 13083 break; 13084 udelay(10); 13085 } 13086 13087 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY; 13088} 13089 13090/* Read the gphy configuration from the OTP region of the chip. The gphy 13091 * configuration is a 32-bit value that straddles the alignment boundary. 13092 * We do two 32-bit reads and then shift and merge the results. 13093 */ 13094static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp) 13095{ 13096 u32 bhalf_otp, thalf_otp; 13097 13098 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC); 13099 13100 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT)) 13101 return 0; 13102 13103 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1); 13104 13105 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 13106 return 0; 13107 13108 thalf_otp = tr32(OTP_READ_DATA); 13109 13110 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2); 13111 13112 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 13113 return 0; 13114 13115 bhalf_otp = tr32(OTP_READ_DATA); 13116 13117 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); 13118} 13119 13120static void __devinit tg3_phy_init_link_config(struct tg3 *tp) 13121{ 13122 u32 adv = ADVERTISED_Autoneg | 13123 ADVERTISED_Pause; 13124 13125 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 13126 adv |= ADVERTISED_1000baseT_Half | 13127 ADVERTISED_1000baseT_Full; 13128 13129 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 13130 adv |= ADVERTISED_100baseT_Half | 13131 ADVERTISED_100baseT_Full | 13132 ADVERTISED_10baseT_Half | 13133 ADVERTISED_10baseT_Full | 13134 ADVERTISED_TP; 13135 else 13136 adv |= ADVERTISED_FIBRE; 13137 13138 tp->link_config.advertising = adv; 13139 tp->link_config.speed = SPEED_INVALID; 13140 tp->link_config.duplex = DUPLEX_INVALID; 13141 tp->link_config.autoneg = AUTONEG_ENABLE; 13142 tp->link_config.active_speed = SPEED_INVALID; 13143 tp->link_config.active_duplex = DUPLEX_INVALID; 13144 tp->link_config.orig_speed = SPEED_INVALID; 13145 tp->link_config.orig_duplex = DUPLEX_INVALID; 13146 tp->link_config.orig_autoneg = AUTONEG_INVALID; 13147} 13148 13149static int __devinit tg3_phy_probe(struct tg3 *tp) 13150{ 13151 u32 hw_phy_id_1, hw_phy_id_2; 13152 u32 hw_phy_id, hw_phy_id_masked; 13153 int err; 13154 13155 /* flow control autonegotiation is default behavior */ 13156 tg3_flag_set(tp, PAUSE_AUTONEG); 13157 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX; 13158 13159 if (tg3_flag(tp, USE_PHYLIB)) 13160 return tg3_phy_init(tp); 13161 13162 /* Reading the PHY ID register can conflict with ASF 13163 * firmware access to the PHY hardware. 13164 */ 13165 err = 0; 13166 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) { 13167 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID; 13168 } else { 13169 /* Now read the physical PHY_ID from the chip and verify 13170 * that it is sane. If it doesn't look good, we fall back 13171 * to either the hard-coded table based PHY_ID and failing 13172 * that the value found in the eeprom area. 13173 */ 13174 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1); 13175 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2); 13176 13177 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10; 13178 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16; 13179 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0; 13180 13181 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK; 13182 } 13183 13184 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) { 13185 tp->phy_id = hw_phy_id; 13186 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002) 13187 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 13188 else 13189 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES; 13190 } else { 13191 if (tp->phy_id != TG3_PHY_ID_INVALID) { 13192 /* Do nothing, phy ID already set up in 13193 * tg3_get_eeprom_hw_cfg(). 13194 */ 13195 } else { 13196 struct subsys_tbl_ent *p; 13197 13198 /* No eeprom signature? Try the hardcoded 13199 * subsys device table. 13200 */ 13201 p = tg3_lookup_by_subsys(tp); 13202 if (!p) 13203 return -ENODEV; 13204 13205 tp->phy_id = p->phy_id; 13206 if (!tp->phy_id || 13207 tp->phy_id == TG3_PHY_ID_BCM8002) 13208 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 13209 } 13210 } 13211 13212 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 13213 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 13214 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || 13215 (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 && 13216 tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) || 13217 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 && 13218 tp->pci_chip_rev_id != CHIPREV_ID_57765_A0))) 13219 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 13220 13221 tg3_phy_init_link_config(tp); 13222 13223 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 13224 !tg3_flag(tp, ENABLE_APE) && 13225 !tg3_flag(tp, ENABLE_ASF)) { 13226 u32 bmsr, mask; 13227 13228 tg3_readphy(tp, MII_BMSR, &bmsr); 13229 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 13230 (bmsr & BMSR_LSTATUS)) 13231 goto skip_phy_reset; 13232 13233 err = tg3_phy_reset(tp); 13234 if (err) 13235 return err; 13236 13237 tg3_phy_set_wirespeed(tp); 13238 13239 mask = (ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | 13240 ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | 13241 ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Full); 13242 if (!tg3_copper_is_advertising_all(tp, mask)) { 13243 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 13244 tp->link_config.flowctrl); 13245 13246 tg3_writephy(tp, MII_BMCR, 13247 BMCR_ANENABLE | BMCR_ANRESTART); 13248 } 13249 } 13250 13251skip_phy_reset: 13252 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 13253 err = tg3_init_5401phy_dsp(tp); 13254 if (err) 13255 return err; 13256 13257 err = tg3_init_5401phy_dsp(tp); 13258 } 13259 13260 return err; 13261} 13262 13263static void __devinit tg3_read_vpd(struct tg3 *tp) 13264{ 13265 u8 *vpd_data; 13266 unsigned int block_end, rosize, len; 13267 u32 vpdlen; 13268 int j, i = 0; 13269 13270 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen); 13271 if (!vpd_data) 13272 goto out_no_vpd; 13273 13274 i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA); 13275 if (i < 0) 13276 goto out_not_found; 13277 13278 rosize = pci_vpd_lrdt_size(&vpd_data[i]); 13279 block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize; 13280 i += PCI_VPD_LRDT_TAG_SIZE; 13281 13282 if (block_end > vpdlen) 13283 goto out_not_found; 13284 13285 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 13286 PCI_VPD_RO_KEYWORD_MFR_ID); 13287 if (j > 0) { 13288 len = pci_vpd_info_field_size(&vpd_data[j]); 13289 13290 j += PCI_VPD_INFO_FLD_HDR_SIZE; 13291 if (j + len > block_end || len != 4 || 13292 memcmp(&vpd_data[j], "1028", 4)) 13293 goto partno; 13294 13295 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 13296 PCI_VPD_RO_KEYWORD_VENDOR0); 13297 if (j < 0) 13298 goto partno; 13299 13300 len = pci_vpd_info_field_size(&vpd_data[j]); 13301 13302 j += PCI_VPD_INFO_FLD_HDR_SIZE; 13303 if (j + len > block_end) 13304 goto partno; 13305 13306 memcpy(tp->fw_ver, &vpd_data[j], len); 13307 strncat(tp->fw_ver, " bc ", vpdlen - len - 1); 13308 } 13309 13310partno: 13311 i = pci_vpd_find_info_keyword(vpd_data, i, rosize, 13312 PCI_VPD_RO_KEYWORD_PARTNO); 13313 if (i < 0) 13314 goto out_not_found; 13315 13316 len = pci_vpd_info_field_size(&vpd_data[i]); 13317 13318 i += PCI_VPD_INFO_FLD_HDR_SIZE; 13319 if (len > TG3_BPN_SIZE || 13320 (len + i) > vpdlen) 13321 goto out_not_found; 13322 13323 memcpy(tp->board_part_number, &vpd_data[i], len); 13324 13325out_not_found: 13326 kfree(vpd_data); 13327 if (tp->board_part_number[0]) 13328 return; 13329 13330out_no_vpd: 13331 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { 13332 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717) 13333 strcpy(tp->board_part_number, "BCM5717"); 13334 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718) 13335 strcpy(tp->board_part_number, "BCM5718"); 13336 else 13337 goto nomatch; 13338 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 13339 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780) 13340 strcpy(tp->board_part_number, "BCM57780"); 13341 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760) 13342 strcpy(tp->board_part_number, "BCM57760"); 13343 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790) 13344 strcpy(tp->board_part_number, "BCM57790"); 13345 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788) 13346 strcpy(tp->board_part_number, "BCM57788"); 13347 else 13348 goto nomatch; 13349 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) { 13350 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761) 13351 strcpy(tp->board_part_number, "BCM57761"); 13352 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765) 13353 strcpy(tp->board_part_number, "BCM57765"); 13354 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781) 13355 strcpy(tp->board_part_number, "BCM57781"); 13356 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785) 13357 strcpy(tp->board_part_number, "BCM57785"); 13358 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791) 13359 strcpy(tp->board_part_number, "BCM57791"); 13360 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 13361 strcpy(tp->board_part_number, "BCM57795"); 13362 else 13363 goto nomatch; 13364 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 13365 strcpy(tp->board_part_number, "BCM95906"); 13366 } else { 13367nomatch: 13368 strcpy(tp->board_part_number, "none"); 13369 } 13370} 13371 13372static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) 13373{ 13374 u32 val; 13375 13376 if (tg3_nvram_read(tp, offset, &val) || 13377 (val & 0xfc000000) != 0x0c000000 || 13378 tg3_nvram_read(tp, offset + 4, &val) || 13379 val != 0) 13380 return 0; 13381 13382 return 1; 13383} 13384 13385static void __devinit tg3_read_bc_ver(struct tg3 *tp) 13386{ 13387 u32 val, offset, start, ver_offset; 13388 int i, dst_off; 13389 bool newver = false; 13390 13391 if (tg3_nvram_read(tp, 0xc, &offset) || 13392 tg3_nvram_read(tp, 0x4, &start)) 13393 return; 13394 13395 offset = tg3_nvram_logical_addr(tp, offset); 13396 13397 if (tg3_nvram_read(tp, offset, &val)) 13398 return; 13399 13400 if ((val & 0xfc000000) == 0x0c000000) { 13401 if (tg3_nvram_read(tp, offset + 4, &val)) 13402 return; 13403 13404 if (val == 0) 13405 newver = true; 13406 } 13407 13408 dst_off = strlen(tp->fw_ver); 13409 13410 if (newver) { 13411 if (TG3_VER_SIZE - dst_off < 16 || 13412 tg3_nvram_read(tp, offset + 8, &ver_offset)) 13413 return; 13414 13415 offset = offset + ver_offset - start; 13416 for (i = 0; i < 16; i += 4) { 13417 __be32 v; 13418 if (tg3_nvram_read_be32(tp, offset + i, &v)) 13419 return; 13420 13421 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v)); 13422 } 13423 } else { 13424 u32 major, minor; 13425 13426 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset)) 13427 return; 13428 13429 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >> 13430 TG3_NVM_BCVER_MAJSFT; 13431 minor = ver_offset & TG3_NVM_BCVER_MINMSK; 13432 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off, 13433 "v%d.%02d", major, minor); 13434 } 13435} 13436 13437static void __devinit tg3_read_hwsb_ver(struct tg3 *tp) 13438{ 13439 u32 val, major, minor; 13440 13441 /* Use native endian representation */ 13442 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val)) 13443 return; 13444 13445 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >> 13446 TG3_NVM_HWSB_CFG1_MAJSFT; 13447 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >> 13448 TG3_NVM_HWSB_CFG1_MINSFT; 13449 13450 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); 13451} 13452 13453static void __devinit tg3_read_sb_ver(struct tg3 *tp, u32 val) 13454{ 13455 u32 offset, major, minor, build; 13456 13457 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1); 13458 13459 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1) 13460 return; 13461 13462 switch (val & TG3_EEPROM_SB_REVISION_MASK) { 13463 case TG3_EEPROM_SB_REVISION_0: 13464 offset = TG3_EEPROM_SB_F1R0_EDH_OFF; 13465 break; 13466 case TG3_EEPROM_SB_REVISION_2: 13467 offset = TG3_EEPROM_SB_F1R2_EDH_OFF; 13468 break; 13469 case TG3_EEPROM_SB_REVISION_3: 13470 offset = TG3_EEPROM_SB_F1R3_EDH_OFF; 13471 break; 13472 case TG3_EEPROM_SB_REVISION_4: 13473 offset = TG3_EEPROM_SB_F1R4_EDH_OFF; 13474 break; 13475 case TG3_EEPROM_SB_REVISION_5: 13476 offset = TG3_EEPROM_SB_F1R5_EDH_OFF; 13477 break; 13478 case TG3_EEPROM_SB_REVISION_6: 13479 offset = TG3_EEPROM_SB_F1R6_EDH_OFF; 13480 break; 13481 default: 13482 return; 13483 } 13484 13485 if (tg3_nvram_read(tp, offset, &val)) 13486 return; 13487 13488 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >> 13489 TG3_EEPROM_SB_EDH_BLD_SHFT; 13490 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >> 13491 TG3_EEPROM_SB_EDH_MAJ_SHFT; 13492 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK; 13493 13494 if (minor > 99 || build > 26) 13495 return; 13496 13497 offset = strlen(tp->fw_ver); 13498 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset, 13499 " v%d.%02d", major, minor); 13500 13501 if (build > 0) { 13502 offset = strlen(tp->fw_ver); 13503 if (offset < TG3_VER_SIZE - 1) 13504 tp->fw_ver[offset] = 'a' + build - 1; 13505 } 13506} 13507 13508static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp) 13509{ 13510 u32 val, offset, start; 13511 int i, vlen; 13512 13513 for (offset = TG3_NVM_DIR_START; 13514 offset < TG3_NVM_DIR_END; 13515 offset += TG3_NVM_DIRENT_SIZE) { 13516 if (tg3_nvram_read(tp, offset, &val)) 13517 return; 13518 13519 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI) 13520 break; 13521 } 13522 13523 if (offset == TG3_NVM_DIR_END) 13524 return; 13525 13526 if (!tg3_flag(tp, 5705_PLUS)) 13527 start = 0x08000000; 13528 else if (tg3_nvram_read(tp, offset - 4, &start)) 13529 return; 13530 13531 if (tg3_nvram_read(tp, offset + 4, &offset) || 13532 !tg3_fw_img_is_valid(tp, offset) || 13533 tg3_nvram_read(tp, offset + 8, &val)) 13534 return; 13535 13536 offset += val - start; 13537 13538 vlen = strlen(tp->fw_ver); 13539 13540 tp->fw_ver[vlen++] = ','; 13541 tp->fw_ver[vlen++] = ' '; 13542 13543 for (i = 0; i < 4; i++) { 13544 __be32 v; 13545 if (tg3_nvram_read_be32(tp, offset, &v)) 13546 return; 13547 13548 offset += sizeof(v); 13549 13550 if (vlen > TG3_VER_SIZE - sizeof(v)) { 13551 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen); 13552 break; 13553 } 13554 13555 memcpy(&tp->fw_ver[vlen], &v, sizeof(v)); 13556 vlen += sizeof(v); 13557 } 13558} 13559 13560static void __devinit tg3_read_dash_ver(struct tg3 *tp) 13561{ 13562 int vlen; 13563 u32 apedata; 13564 char *fwtype; 13565 13566 if (!tg3_flag(tp, ENABLE_APE) || !tg3_flag(tp, ENABLE_ASF)) 13567 return; 13568 13569 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 13570 if (apedata != APE_SEG_SIG_MAGIC) 13571 return; 13572 13573 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 13574 if (!(apedata & APE_FW_STATUS_READY)) 13575 return; 13576 13577 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 13578 13579 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) { 13580 tg3_flag_set(tp, APE_HAS_NCSI); 13581 fwtype = "NCSI"; 13582 } else { 13583 fwtype = "DASH"; 13584 } 13585 13586 vlen = strlen(tp->fw_ver); 13587 13588 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d", 13589 fwtype, 13590 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT, 13591 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT, 13592 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT, 13593 (apedata & APE_FW_VERSION_BLDMSK)); 13594} 13595 13596static void __devinit tg3_read_fw_ver(struct tg3 *tp) 13597{ 13598 u32 val; 13599 bool vpd_vers = false; 13600 13601 if (tp->fw_ver[0] != 0) 13602 vpd_vers = true; 13603 13604 if (tg3_flag(tp, NO_NVRAM)) { 13605 strcat(tp->fw_ver, "sb"); 13606 return; 13607 } 13608 13609 if (tg3_nvram_read(tp, 0, &val)) 13610 return; 13611 13612 if (val == TG3_EEPROM_MAGIC) 13613 tg3_read_bc_ver(tp); 13614 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) 13615 tg3_read_sb_ver(tp, val); 13616 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 13617 tg3_read_hwsb_ver(tp); 13618 else 13619 return; 13620 13621 if (vpd_vers) 13622 goto done; 13623 13624 if (tg3_flag(tp, ENABLE_APE)) { 13625 if (tg3_flag(tp, ENABLE_ASF)) 13626 tg3_read_dash_ver(tp); 13627 } else if (tg3_flag(tp, ENABLE_ASF)) { 13628 tg3_read_mgmtfw_ver(tp); 13629 } 13630 13631done: 13632 tp->fw_ver[TG3_VER_SIZE - 1] = 0; 13633} 13634 13635static struct pci_dev * __devinit tg3_find_peer(struct tg3 *); 13636 13637static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp) 13638{ 13639 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 13640 return TG3_RX_RET_MAX_SIZE_5717; 13641 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) 13642 return TG3_RX_RET_MAX_SIZE_5700; 13643 else 13644 return TG3_RX_RET_MAX_SIZE_5705; 13645} 13646 13647static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = { 13648 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) }, 13649 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) }, 13650 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) }, 13651 { }, 13652}; 13653 13654static int __devinit tg3_get_invariants(struct tg3 *tp) 13655{ 13656 u32 misc_ctrl_reg; 13657 u32 pci_state_reg, grc_misc_cfg; 13658 u32 val; 13659 u16 pci_cmd; 13660 int err; 13661 13662 /* Force memory write invalidate off. If we leave it on, 13663 * then on 5700_BX chips we have to enable a workaround. 13664 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary 13665 * to match the cacheline size. The Broadcom driver have this 13666 * workaround but turns MWI off all the times so never uses 13667 * it. This seems to suggest that the workaround is insufficient. 13668 */ 13669 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 13670 pci_cmd &= ~PCI_COMMAND_INVALIDATE; 13671 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 13672 13673 /* Important! -- Make sure register accesses are byteswapped 13674 * correctly. Also, for those chips that require it, make 13675 * sure that indirect register accesses are enabled before 13676 * the first operation. 13677 */ 13678 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 13679 &misc_ctrl_reg); 13680 tp->misc_host_ctrl |= (misc_ctrl_reg & 13681 MISC_HOST_CTRL_CHIPREV); 13682 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 13683 tp->misc_host_ctrl); 13684 13685 tp->pci_chip_rev_id = (misc_ctrl_reg >> 13686 MISC_HOST_CTRL_CHIPREV_SHIFT); 13687 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) { 13688 u32 prod_id_asic_rev; 13689 13690 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 13691 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 13692 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 13693 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) 13694 pci_read_config_dword(tp->pdev, 13695 TG3PCI_GEN2_PRODID_ASICREV, 13696 &prod_id_asic_rev); 13697 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || 13698 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || 13699 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 || 13700 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 || 13701 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 13702 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 13703 pci_read_config_dword(tp->pdev, 13704 TG3PCI_GEN15_PRODID_ASICREV, 13705 &prod_id_asic_rev); 13706 else 13707 pci_read_config_dword(tp->pdev, TG3PCI_PRODID_ASICREV, 13708 &prod_id_asic_rev); 13709 13710 tp->pci_chip_rev_id = prod_id_asic_rev; 13711 } 13712 13713 /* Wrong chip ID in 5752 A0. This code can be removed later 13714 * as A0 is not in production. 13715 */ 13716 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW) 13717 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; 13718 13719 /* If we have 5702/03 A1 or A2 on certain ICH chipsets, 13720 * we need to disable memory and use config. cycles 13721 * only to access all registers. The 5702/03 chips 13722 * can mistakenly decode the special cycles from the 13723 * ICH chipsets as memory write cycles, causing corruption 13724 * of register and memory space. Only certain ICH bridges 13725 * will drive special cycles with non-zero data during the 13726 * address phase which can fall within the 5703's address 13727 * range. This is not an ICH bug as the PCI spec allows 13728 * non-zero address during special cycles. However, only 13729 * these ICH bridges are known to drive non-zero addresses 13730 * during special cycles. 13731 * 13732 * Since special cycles do not cross PCI bridges, we only 13733 * enable this workaround if the 5703 is on the secondary 13734 * bus of these ICH bridges. 13735 */ 13736 if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) || 13737 (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) { 13738 static struct tg3_dev_id { 13739 u32 vendor; 13740 u32 device; 13741 u32 rev; 13742 } ich_chipsets[] = { 13743 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8, 13744 PCI_ANY_ID }, 13745 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8, 13746 PCI_ANY_ID }, 13747 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11, 13748 0xa }, 13749 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6, 13750 PCI_ANY_ID }, 13751 { }, 13752 }; 13753 struct tg3_dev_id *pci_id = &ich_chipsets[0]; 13754 struct pci_dev *bridge = NULL; 13755 13756 while (pci_id->vendor != 0) { 13757 bridge = pci_get_device(pci_id->vendor, pci_id->device, 13758 bridge); 13759 if (!bridge) { 13760 pci_id++; 13761 continue; 13762 } 13763 if (pci_id->rev != PCI_ANY_ID) { 13764 if (bridge->revision > pci_id->rev) 13765 continue; 13766 } 13767 if (bridge->subordinate && 13768 (bridge->subordinate->number == 13769 tp->pdev->bus->number)) { 13770 tg3_flag_set(tp, ICH_WORKAROUND); 13771 pci_dev_put(bridge); 13772 break; 13773 } 13774 } 13775 } 13776 13777 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 13778 static struct tg3_dev_id { 13779 u32 vendor; 13780 u32 device; 13781 } bridge_chipsets[] = { 13782 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, 13783 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, 13784 { }, 13785 }; 13786 struct tg3_dev_id *pci_id = &bridge_chipsets[0]; 13787 struct pci_dev *bridge = NULL; 13788 13789 while (pci_id->vendor != 0) { 13790 bridge = pci_get_device(pci_id->vendor, 13791 pci_id->device, 13792 bridge); 13793 if (!bridge) { 13794 pci_id++; 13795 continue; 13796 } 13797 if (bridge->subordinate && 13798 (bridge->subordinate->number <= 13799 tp->pdev->bus->number) && 13800 (bridge->subordinate->subordinate >= 13801 tp->pdev->bus->number)) { 13802 tg3_flag_set(tp, 5701_DMA_BUG); 13803 pci_dev_put(bridge); 13804 break; 13805 } 13806 } 13807 } 13808 13809 /* The EPB bridge inside 5714, 5715, and 5780 cannot support 13810 * DMA addresses > 40-bit. This bridge may have other additional 13811 * 57xx devices behind it in some 4-port NIC designs for example. 13812 * Any tg3 device found behind the bridge will also need the 40-bit 13813 * DMA workaround. 13814 */ 13815 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 || 13816 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 13817 tg3_flag_set(tp, 5780_CLASS); 13818 tg3_flag_set(tp, 40BIT_DMA_BUG); 13819 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI); 13820 } else { 13821 struct pci_dev *bridge = NULL; 13822 13823 do { 13824 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS, 13825 PCI_DEVICE_ID_SERVERWORKS_EPB, 13826 bridge); 13827 if (bridge && bridge->subordinate && 13828 (bridge->subordinate->number <= 13829 tp->pdev->bus->number) && 13830 (bridge->subordinate->subordinate >= 13831 tp->pdev->bus->number)) { 13832 tg3_flag_set(tp, 40BIT_DMA_BUG); 13833 pci_dev_put(bridge); 13834 break; 13835 } 13836 } while (bridge); 13837 } 13838 13839 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 13840 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) 13841 tp->pdev_peer = tg3_find_peer(tp); 13842 13843 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 13844 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 13845 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 13846 tg3_flag_set(tp, 5717_PLUS); 13847 13848 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 || 13849 tg3_flag(tp, 5717_PLUS)) 13850 tg3_flag_set(tp, 57765_PLUS); 13851 13852 /* Intentionally exclude ASIC_REV_5906 */ 13853 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 13854 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 13855 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 13856 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 13857 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 13858 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 13859 tg3_flag(tp, 57765_PLUS)) 13860 tg3_flag_set(tp, 5755_PLUS); 13861 13862 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 13863 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 13864 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 || 13865 tg3_flag(tp, 5755_PLUS) || 13866 tg3_flag(tp, 5780_CLASS)) 13867 tg3_flag_set(tp, 5750_PLUS); 13868 13869 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || 13870 tg3_flag(tp, 5750_PLUS)) 13871 tg3_flag_set(tp, 5705_PLUS); 13872 13873 /* Determine TSO capabilities */ 13874 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) 13875 ; /* Do nothing. HW bug. */ 13876 else if (tg3_flag(tp, 57765_PLUS)) 13877 tg3_flag_set(tp, HW_TSO_3); 13878 else if (tg3_flag(tp, 5755_PLUS) || 13879 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 13880 tg3_flag_set(tp, HW_TSO_2); 13881 else if (tg3_flag(tp, 5750_PLUS)) { 13882 tg3_flag_set(tp, HW_TSO_1); 13883 tg3_flag_set(tp, TSO_BUG); 13884 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 && 13885 tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2) 13886 tg3_flag_clear(tp, TSO_BUG); 13887 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 13888 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 13889 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 13890 tg3_flag_set(tp, TSO_BUG); 13891 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) 13892 tp->fw_needed = FIRMWARE_TG3TSO5; 13893 else 13894 tp->fw_needed = FIRMWARE_TG3TSO; 13895 } 13896 13897 /* Selectively allow TSO based on operating conditions */ 13898 if (tg3_flag(tp, HW_TSO_1) || 13899 tg3_flag(tp, HW_TSO_2) || 13900 tg3_flag(tp, HW_TSO_3) || 13901 (tp->fw_needed && !tg3_flag(tp, ENABLE_ASF))) 13902 tg3_flag_set(tp, TSO_CAPABLE); 13903 else { 13904 tg3_flag_clear(tp, TSO_CAPABLE); 13905 tg3_flag_clear(tp, TSO_BUG); 13906 tp->fw_needed = NULL; 13907 } 13908 13909 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) 13910 tp->fw_needed = FIRMWARE_TG3; 13911 13912 tp->irq_max = 1; 13913 13914 if (tg3_flag(tp, 5750_PLUS)) { 13915 tg3_flag_set(tp, SUPPORT_MSI); 13916 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX || 13917 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX || 13918 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 && 13919 tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 && 13920 tp->pdev_peer == tp->pdev)) 13921 tg3_flag_clear(tp, SUPPORT_MSI); 13922 13923 if (tg3_flag(tp, 5755_PLUS) || 13924 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 13925 tg3_flag_set(tp, 1SHOT_MSI); 13926 } 13927 13928 if (tg3_flag(tp, 57765_PLUS)) { 13929 tg3_flag_set(tp, SUPPORT_MSIX); 13930 tp->irq_max = TG3_IRQ_MAX_VECS; 13931 } 13932 } 13933 13934 if (tg3_flag(tp, 5755_PLUS)) 13935 tg3_flag_set(tp, SHORT_DMA_BUG); 13936 13937 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 13938 tg3_flag_set(tp, 4K_FIFO_LIMIT); 13939 13940 if (tg3_flag(tp, 5717_PLUS)) 13941 tg3_flag_set(tp, LRG_PROD_RING_CAP); 13942 13943 if (tg3_flag(tp, 57765_PLUS) && 13944 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0) 13945 tg3_flag_set(tp, USE_JUMBO_BDFLAG); 13946 13947 if (!tg3_flag(tp, 5705_PLUS) || 13948 tg3_flag(tp, 5780_CLASS) || 13949 tg3_flag(tp, USE_JUMBO_BDFLAG)) 13950 tg3_flag_set(tp, JUMBO_CAPABLE); 13951 13952 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 13953 &pci_state_reg); 13954 13955 if (pci_is_pcie(tp->pdev)) { 13956 u16 lnkctl; 13957 13958 tg3_flag_set(tp, PCI_EXPRESS); 13959 13960 tp->pcie_readrq = 4096; 13961 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 13962 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 13963 tp->pcie_readrq = 2048; 13964 13965 pcie_set_readrq(tp->pdev, tp->pcie_readrq); 13966 13967 pci_read_config_word(tp->pdev, 13968 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 13969 &lnkctl); 13970 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) { 13971 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 13972 ASIC_REV_5906) { 13973 tg3_flag_clear(tp, HW_TSO_2); 13974 tg3_flag_clear(tp, TSO_CAPABLE); 13975 } 13976 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 13977 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 13978 tp->pci_chip_rev_id == CHIPREV_ID_57780_A0 || 13979 tp->pci_chip_rev_id == CHIPREV_ID_57780_A1) 13980 tg3_flag_set(tp, CLKREQ_BUG); 13981 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) { 13982 tg3_flag_set(tp, L1PLLPD_EN); 13983 } 13984 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 13985 /* BCM5785 devices are effectively PCIe devices, and should 13986 * follow PCIe codepaths, but do not have a PCIe capabilities 13987 * section. 13988 */ 13989 tg3_flag_set(tp, PCI_EXPRESS); 13990 } else if (!tg3_flag(tp, 5705_PLUS) || 13991 tg3_flag(tp, 5780_CLASS)) { 13992 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX); 13993 if (!tp->pcix_cap) { 13994 dev_err(&tp->pdev->dev, 13995 "Cannot find PCI-X capability, aborting\n"); 13996 return -EIO; 13997 } 13998 13999 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE)) 14000 tg3_flag_set(tp, PCIX_MODE); 14001 } 14002 14003 /* If we have an AMD 762 or VIA K8T800 chipset, write 14004 * reordering to the mailbox registers done by the host 14005 * controller can cause major troubles. We read back from 14006 * every mailbox register write to force the writes to be 14007 * posted to the chip in order. 14008 */ 14009 if (pci_dev_present(tg3_write_reorder_chipsets) && 14010 !tg3_flag(tp, PCI_EXPRESS)) 14011 tg3_flag_set(tp, MBOX_WRITE_REORDER); 14012 14013 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 14014 &tp->pci_cacheline_sz); 14015 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, 14016 &tp->pci_lat_timer); 14017 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 && 14018 tp->pci_lat_timer < 64) { 14019 tp->pci_lat_timer = 64; 14020 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 14021 tp->pci_lat_timer); 14022 } 14023 14024 /* Important! -- It is critical that the PCI-X hw workaround 14025 * situation is decided before the first MMIO register access. 14026 */ 14027 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) { 14028 /* 5700 BX chips need to have their TX producer index 14029 * mailboxes written twice to workaround a bug. 14030 */ 14031 tg3_flag_set(tp, TXD_MBOX_HWBUG); 14032 14033 /* If we are in PCI-X mode, enable register write workaround. 14034 * 14035 * The workaround is to use indirect register accesses 14036 * for all chip writes not to mailbox registers. 14037 */ 14038 if (tg3_flag(tp, PCIX_MODE)) { 14039 u32 pm_reg; 14040 14041 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 14042 14043 /* The chip can have it's power management PCI config 14044 * space registers clobbered due to this bug. 14045 * So explicitly force the chip into D0 here. 14046 */ 14047 pci_read_config_dword(tp->pdev, 14048 tp->pm_cap + PCI_PM_CTRL, 14049 &pm_reg); 14050 pm_reg &= ~PCI_PM_CTRL_STATE_MASK; 14051 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */; 14052 pci_write_config_dword(tp->pdev, 14053 tp->pm_cap + PCI_PM_CTRL, 14054 pm_reg); 14055 14056 /* Also, force SERR#/PERR# in PCI command. */ 14057 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 14058 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; 14059 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 14060 } 14061 } 14062 14063 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) 14064 tg3_flag_set(tp, PCI_HIGH_SPEED); 14065 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0) 14066 tg3_flag_set(tp, PCI_32BIT); 14067 14068 /* Chip-specific fixup from Broadcom driver */ 14069 if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) && 14070 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) { 14071 pci_state_reg |= PCISTATE_RETRY_SAME_DMA; 14072 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg); 14073 } 14074 14075 /* Default fast path register access methods */ 14076 tp->read32 = tg3_read32; 14077 tp->write32 = tg3_write32; 14078 tp->read32_mbox = tg3_read32; 14079 tp->write32_mbox = tg3_write32; 14080 tp->write32_tx_mbox = tg3_write32; 14081 tp->write32_rx_mbox = tg3_write32; 14082 14083 /* Various workaround register access methods */ 14084 if (tg3_flag(tp, PCIX_TARGET_HWBUG)) 14085 tp->write32 = tg3_write_indirect_reg32; 14086 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 || 14087 (tg3_flag(tp, PCI_EXPRESS) && 14088 tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) { 14089 /* 14090 * Back to back register writes can cause problems on these 14091 * chips, the workaround is to read back all reg writes 14092 * except those to mailbox regs. 14093 * 14094 * See tg3_write_indirect_reg32(). 14095 */ 14096 tp->write32 = tg3_write_flush_reg32; 14097 } 14098 14099 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) { 14100 tp->write32_tx_mbox = tg3_write32_tx_mbox; 14101 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 14102 tp->write32_rx_mbox = tg3_write_flush_reg32; 14103 } 14104 14105 if (tg3_flag(tp, ICH_WORKAROUND)) { 14106 tp->read32 = tg3_read_indirect_reg32; 14107 tp->write32 = tg3_write_indirect_reg32; 14108 tp->read32_mbox = tg3_read_indirect_mbox; 14109 tp->write32_mbox = tg3_write_indirect_mbox; 14110 tp->write32_tx_mbox = tg3_write_indirect_mbox; 14111 tp->write32_rx_mbox = tg3_write_indirect_mbox; 14112 14113 iounmap(tp->regs); 14114 tp->regs = NULL; 14115 14116 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 14117 pci_cmd &= ~PCI_COMMAND_MEMORY; 14118 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 14119 } 14120 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 14121 tp->read32_mbox = tg3_read32_mbox_5906; 14122 tp->write32_mbox = tg3_write32_mbox_5906; 14123 tp->write32_tx_mbox = tg3_write32_mbox_5906; 14124 tp->write32_rx_mbox = tg3_write32_mbox_5906; 14125 } 14126 14127 if (tp->write32 == tg3_write_indirect_reg32 || 14128 (tg3_flag(tp, PCIX_MODE) && 14129 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14130 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701))) 14131 tg3_flag_set(tp, SRAM_USE_CONFIG); 14132 14133 /* The memory arbiter has to be enabled in order for SRAM accesses 14134 * to succeed. Normally on powerup the tg3 chip firmware will make 14135 * sure it is enabled, but other entities such as system netboot 14136 * code might disable it. 14137 */ 14138 val = tr32(MEMARB_MODE); 14139 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 14140 14141 if (tg3_flag(tp, PCIX_MODE)) { 14142 pci_read_config_dword(tp->pdev, 14143 tp->pcix_cap + PCI_X_STATUS, &val); 14144 tp->pci_fn = val & 0x7; 14145 } else { 14146 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; 14147 } 14148 14149 /* Get eeprom hw config before calling tg3_set_power_state(). 14150 * In particular, the TG3_FLAG_IS_NIC flag must be 14151 * determined before calling tg3_set_power_state() so that 14152 * we know whether or not to switch out of Vaux power. 14153 * When the flag is set, it means that GPIO1 is used for eeprom 14154 * write protect and also implies that it is a LOM where GPIOs 14155 * are not used to switch power. 14156 */ 14157 tg3_get_eeprom_hw_cfg(tp); 14158 14159 if (tg3_flag(tp, ENABLE_APE)) { 14160 /* Allow reads and writes to the 14161 * APE register and memory space. 14162 */ 14163 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR | 14164 PCISTATE_ALLOW_APE_SHMEM_WR | 14165 PCISTATE_ALLOW_APE_PSPACE_WR; 14166 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, 14167 pci_state_reg); 14168 14169 tg3_ape_lock_init(tp); 14170 } 14171 14172 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 14173 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 14174 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 14175 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 14176 tg3_flag(tp, 57765_PLUS)) 14177 tg3_flag_set(tp, CPMU_PRESENT); 14178 14179 /* Set up tp->grc_local_ctrl before calling 14180 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high 14181 * will bring 5700's external PHY out of reset. 14182 * It is also used as eeprom write protect on LOMs. 14183 */ 14184 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM; 14185 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14186 tg3_flag(tp, EEPROM_WRITE_PROT)) 14187 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 14188 GRC_LCLCTRL_GPIO_OUTPUT1); 14189 /* Unused GPIO3 must be driven as output on 5752 because there 14190 * are no pull-up resistors on unused GPIO pins. 14191 */ 14192 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 14193 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 14194 14195 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 14196 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 14197 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) 14198 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 14199 14200 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 14201 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 14202 /* Turn off the debug UART. */ 14203 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 14204 if (tg3_flag(tp, IS_NIC)) 14205 /* Keep VMain power. */ 14206 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 14207 GRC_LCLCTRL_GPIO_OUTPUT0; 14208 } 14209 14210 /* Switch out of Vaux if it is a NIC */ 14211 tg3_pwrsrc_switch_to_vmain(tp); 14212 14213 /* Derive initial jumbo mode from MTU assigned in 14214 * ether_setup() via the alloc_etherdev() call 14215 */ 14216 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS)) 14217 tg3_flag_set(tp, JUMBO_RING_ENABLE); 14218 14219 /* Determine WakeOnLan speed to use. */ 14220 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14221 tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 14222 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 || 14223 tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) { 14224 tg3_flag_clear(tp, WOL_SPEED_100MB); 14225 } else { 14226 tg3_flag_set(tp, WOL_SPEED_100MB); 14227 } 14228 14229 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 14230 tp->phy_flags |= TG3_PHYFLG_IS_FET; 14231 14232 /* A few boards don't want Ethernet@WireSpeed phy feature */ 14233 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14234 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 14235 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) && 14236 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) || 14237 (tp->phy_flags & TG3_PHYFLG_IS_FET) || 14238 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 14239 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED; 14240 14241 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX || 14242 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX) 14243 tp->phy_flags |= TG3_PHYFLG_ADC_BUG; 14244 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) 14245 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG; 14246 14247 if (tg3_flag(tp, 5705_PLUS) && 14248 !(tp->phy_flags & TG3_PHYFLG_IS_FET) && 14249 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 14250 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 && 14251 !tg3_flag(tp, 57765_PLUS)) { 14252 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 14253 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 14254 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 14255 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) { 14256 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 && 14257 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722) 14258 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG; 14259 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M) 14260 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM; 14261 } else 14262 tp->phy_flags |= TG3_PHYFLG_BER_BUG; 14263 } 14264 14265 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 14266 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) { 14267 tp->phy_otp = tg3_read_otp_phycfg(tp); 14268 if (tp->phy_otp == 0) 14269 tp->phy_otp = TG3_OTP_DEFAULT; 14270 } 14271 14272 if (tg3_flag(tp, CPMU_PRESENT)) 14273 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST; 14274 else 14275 tp->mi_mode = MAC_MI_MODE_BASE; 14276 14277 tp->coalesce_mode = 0; 14278 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX && 14279 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX) 14280 tp->coalesce_mode |= HOSTCC_MODE_32BYTE; 14281 14282 /* Set these bits to enable statistics workaround. */ 14283 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 14284 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 14285 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) { 14286 tp->coalesce_mode |= HOSTCC_MODE_ATTN; 14287 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN; 14288 } 14289 14290 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 14291 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 14292 tg3_flag_set(tp, USE_PHYLIB); 14293 14294 err = tg3_mdio_init(tp); 14295 if (err) 14296 return err; 14297 14298 /* Initialize data/descriptor byte/word swapping. */ 14299 val = tr32(GRC_MODE); 14300 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 14301 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | 14302 GRC_MODE_WORD_SWAP_B2HRX_DATA | 14303 GRC_MODE_B2HRX_ENABLE | 14304 GRC_MODE_HTX2B_ENABLE | 14305 GRC_MODE_HOST_STACKUP); 14306 else 14307 val &= GRC_MODE_HOST_STACKUP; 14308 14309 tw32(GRC_MODE, val | tp->grc_mode); 14310 14311 tg3_switch_clocks(tp); 14312 14313 /* Clear this out for sanity. */ 14314 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 14315 14316 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 14317 &pci_state_reg); 14318 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && 14319 !tg3_flag(tp, PCIX_TARGET_HWBUG)) { 14320 u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl); 14321 14322 if (chiprevid == CHIPREV_ID_5701_A0 || 14323 chiprevid == CHIPREV_ID_5701_B0 || 14324 chiprevid == CHIPREV_ID_5701_B2 || 14325 chiprevid == CHIPREV_ID_5701_B5) { 14326 void __iomem *sram_base; 14327 14328 /* Write some dummy words into the SRAM status block 14329 * area, see if it reads back correctly. If the return 14330 * value is bad, force enable the PCIX workaround. 14331 */ 14332 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK; 14333 14334 writel(0x00000000, sram_base); 14335 writel(0x00000000, sram_base + 4); 14336 writel(0xffffffff, sram_base + 4); 14337 if (readl(sram_base) != 0x00000000) 14338 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 14339 } 14340 } 14341 14342 udelay(50); 14343 tg3_nvram_init(tp); 14344 14345 grc_misc_cfg = tr32(GRC_MISC_CFG); 14346 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; 14347 14348 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 14349 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 || 14350 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M)) 14351 tg3_flag_set(tp, IS_5788); 14352 14353 if (!tg3_flag(tp, IS_5788) && 14354 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) 14355 tg3_flag_set(tp, TAGGED_STATUS); 14356 if (tg3_flag(tp, TAGGED_STATUS)) { 14357 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD | 14358 HOSTCC_MODE_CLRTICK_TXBD); 14359 14360 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS; 14361 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 14362 tp->misc_host_ctrl); 14363 } 14364 14365 /* Preserve the APE MAC_MODE bits */ 14366 if (tg3_flag(tp, ENABLE_APE)) 14367 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 14368 else 14369 tp->mac_mode = TG3_DEF_MAC_MODE; 14370 14371 /* these are limited to 10/100 only */ 14372 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 && 14373 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) || 14374 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 14375 tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM && 14376 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 || 14377 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 || 14378 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) || 14379 (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM && 14380 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F || 14381 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F || 14382 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) || 14383 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790 || 14384 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 14385 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 14386 (tp->phy_flags & TG3_PHYFLG_IS_FET)) 14387 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY; 14388 14389 err = tg3_phy_probe(tp); 14390 if (err) { 14391 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err); 14392 /* ... but do not return immediately ... */ 14393 tg3_mdio_fini(tp); 14394 } 14395 14396 tg3_read_vpd(tp); 14397 tg3_read_fw_ver(tp); 14398 14399 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 14400 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 14401 } else { 14402 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 14403 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 14404 else 14405 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 14406 } 14407 14408 /* 5700 {AX,BX} chips have a broken status block link 14409 * change bit implementation, so we must use the 14410 * status register in those cases. 14411 */ 14412 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 14413 tg3_flag_set(tp, USE_LINKCHG_REG); 14414 else 14415 tg3_flag_clear(tp, USE_LINKCHG_REG); 14416 14417 /* The led_ctrl is set during tg3_phy_probe, here we might 14418 * have to force the link status polling mechanism based 14419 * upon subsystem IDs. 14420 */ 14421 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 14422 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 && 14423 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 14424 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 14425 tg3_flag_set(tp, USE_LINKCHG_REG); 14426 } 14427 14428 /* For all SERDES we poll the MAC status register. */ 14429 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 14430 tg3_flag_set(tp, POLL_SERDES); 14431 else 14432 tg3_flag_clear(tp, POLL_SERDES); 14433 14434 tp->rx_offset = NET_IP_ALIGN; 14435 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD; 14436 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 && 14437 tg3_flag(tp, PCIX_MODE)) { 14438 tp->rx_offset = 0; 14439#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 14440 tp->rx_copy_thresh = ~(u16)0; 14441#endif 14442 } 14443 14444 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1; 14445 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1; 14446 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1; 14447 14448 tp->rx_std_max_post = tp->rx_std_ring_mask + 1; 14449 14450 /* Increment the rx prod index on the rx std ring by at most 14451 * 8 for these chips to workaround hw errata. 14452 */ 14453 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 14454 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 14455 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 14456 tp->rx_std_max_post = 8; 14457 14458 if (tg3_flag(tp, ASPM_WORKAROUND)) 14459 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) & 14460 PCIE_PWR_MGMT_L1_THRESH_MSK; 14461 14462 return err; 14463} 14464 14465#ifdef CONFIG_SPARC 14466static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp) 14467{ 14468 struct net_device *dev = tp->dev; 14469 struct pci_dev *pdev = tp->pdev; 14470 struct device_node *dp = pci_device_to_OF_node(pdev); 14471 const unsigned char *addr; 14472 int len; 14473 14474 addr = of_get_property(dp, "local-mac-address", &len); 14475 if (addr && len == 6) { 14476 memcpy(dev->dev_addr, addr, 6); 14477 memcpy(dev->perm_addr, dev->dev_addr, 6); 14478 return 0; 14479 } 14480 return -ENODEV; 14481} 14482 14483static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp) 14484{ 14485 struct net_device *dev = tp->dev; 14486 14487 memcpy(dev->dev_addr, idprom->id_ethaddr, 6); 14488 memcpy(dev->perm_addr, idprom->id_ethaddr, 6); 14489 return 0; 14490} 14491#endif 14492 14493static int __devinit tg3_get_device_address(struct tg3 *tp) 14494{ 14495 struct net_device *dev = tp->dev; 14496 u32 hi, lo, mac_offset; 14497 int addr_ok = 0; 14498 14499#ifdef CONFIG_SPARC 14500 if (!tg3_get_macaddr_sparc(tp)) 14501 return 0; 14502#endif 14503 14504 mac_offset = 0x7c; 14505 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 14506 tg3_flag(tp, 5780_CLASS)) { 14507 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 14508 mac_offset = 0xcc; 14509 if (tg3_nvram_lock(tp)) 14510 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); 14511 else 14512 tg3_nvram_unlock(tp); 14513 } else if (tg3_flag(tp, 5717_PLUS)) { 14514 if (tp->pci_fn & 1) 14515 mac_offset = 0xcc; 14516 if (tp->pci_fn > 1) 14517 mac_offset += 0x18c; 14518 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 14519 mac_offset = 0x10; 14520 14521 /* First try to get it from MAC address mailbox. */ 14522 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); 14523 if ((hi >> 16) == 0x484b) { 14524 dev->dev_addr[0] = (hi >> 8) & 0xff; 14525 dev->dev_addr[1] = (hi >> 0) & 0xff; 14526 14527 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo); 14528 dev->dev_addr[2] = (lo >> 24) & 0xff; 14529 dev->dev_addr[3] = (lo >> 16) & 0xff; 14530 dev->dev_addr[4] = (lo >> 8) & 0xff; 14531 dev->dev_addr[5] = (lo >> 0) & 0xff; 14532 14533 /* Some old bootcode may report a 0 MAC address in SRAM */ 14534 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]); 14535 } 14536 if (!addr_ok) { 14537 /* Next, try NVRAM. */ 14538 if (!tg3_flag(tp, NO_NVRAM) && 14539 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) && 14540 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) { 14541 memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2); 14542 memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo)); 14543 } 14544 /* Finally just fetch it out of the MAC control regs. */ 14545 else { 14546 hi = tr32(MAC_ADDR_0_HIGH); 14547 lo = tr32(MAC_ADDR_0_LOW); 14548 14549 dev->dev_addr[5] = lo & 0xff; 14550 dev->dev_addr[4] = (lo >> 8) & 0xff; 14551 dev->dev_addr[3] = (lo >> 16) & 0xff; 14552 dev->dev_addr[2] = (lo >> 24) & 0xff; 14553 dev->dev_addr[1] = hi & 0xff; 14554 dev->dev_addr[0] = (hi >> 8) & 0xff; 14555 } 14556 } 14557 14558 if (!is_valid_ether_addr(&dev->dev_addr[0])) { 14559#ifdef CONFIG_SPARC 14560 if (!tg3_get_default_macaddr_sparc(tp)) 14561 return 0; 14562#endif 14563 return -EINVAL; 14564 } 14565 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); 14566 return 0; 14567} 14568 14569#define BOUNDARY_SINGLE_CACHELINE 1 14570#define BOUNDARY_MULTI_CACHELINE 2 14571 14572static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val) 14573{ 14574 int cacheline_size; 14575 u8 byte; 14576 int goal; 14577 14578 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte); 14579 if (byte == 0) 14580 cacheline_size = 1024; 14581 else 14582 cacheline_size = (int) byte * 4; 14583 14584 /* On 5703 and later chips, the boundary bits have no 14585 * effect. 14586 */ 14587 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 14588 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 14589 !tg3_flag(tp, PCI_EXPRESS)) 14590 goto out; 14591 14592#if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) 14593 goal = BOUNDARY_MULTI_CACHELINE; 14594#else 14595#if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA) 14596 goal = BOUNDARY_SINGLE_CACHELINE; 14597#else 14598 goal = 0; 14599#endif 14600#endif 14601 14602 if (tg3_flag(tp, 57765_PLUS)) { 14603 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 14604 goto out; 14605 } 14606 14607 if (!goal) 14608 goto out; 14609 14610 /* PCI controllers on most RISC systems tend to disconnect 14611 * when a device tries to burst across a cache-line boundary. 14612 * Therefore, letting tg3 do so just wastes PCI bandwidth. 14613 * 14614 * Unfortunately, for PCI-E there are only limited 14615 * write-side controls for this, and thus for reads 14616 * we will still get the disconnects. We'll also waste 14617 * these PCI cycles for both read and write for chips 14618 * other than 5700 and 5701 which do not implement the 14619 * boundary bits. 14620 */ 14621 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) { 14622 switch (cacheline_size) { 14623 case 16: 14624 case 32: 14625 case 64: 14626 case 128: 14627 if (goal == BOUNDARY_SINGLE_CACHELINE) { 14628 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX | 14629 DMA_RWCTRL_WRITE_BNDRY_128_PCIX); 14630 } else { 14631 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 14632 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 14633 } 14634 break; 14635 14636 case 256: 14637 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX | 14638 DMA_RWCTRL_WRITE_BNDRY_256_PCIX); 14639 break; 14640 14641 default: 14642 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 14643 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 14644 break; 14645 } 14646 } else if (tg3_flag(tp, PCI_EXPRESS)) { 14647 switch (cacheline_size) { 14648 case 16: 14649 case 32: 14650 case 64: 14651 if (goal == BOUNDARY_SINGLE_CACHELINE) { 14652 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 14653 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; 14654 break; 14655 } 14656 /* fallthrough */ 14657 case 128: 14658 default: 14659 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 14660 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE; 14661 break; 14662 } 14663 } else { 14664 switch (cacheline_size) { 14665 case 16: 14666 if (goal == BOUNDARY_SINGLE_CACHELINE) { 14667 val |= (DMA_RWCTRL_READ_BNDRY_16 | 14668 DMA_RWCTRL_WRITE_BNDRY_16); 14669 break; 14670 } 14671 /* fallthrough */ 14672 case 32: 14673 if (goal == BOUNDARY_SINGLE_CACHELINE) { 14674 val |= (DMA_RWCTRL_READ_BNDRY_32 | 14675 DMA_RWCTRL_WRITE_BNDRY_32); 14676 break; 14677 } 14678 /* fallthrough */ 14679 case 64: 14680 if (goal == BOUNDARY_SINGLE_CACHELINE) { 14681 val |= (DMA_RWCTRL_READ_BNDRY_64 | 14682 DMA_RWCTRL_WRITE_BNDRY_64); 14683 break; 14684 } 14685 /* fallthrough */ 14686 case 128: 14687 if (goal == BOUNDARY_SINGLE_CACHELINE) { 14688 val |= (DMA_RWCTRL_READ_BNDRY_128 | 14689 DMA_RWCTRL_WRITE_BNDRY_128); 14690 break; 14691 } 14692 /* fallthrough */ 14693 case 256: 14694 val |= (DMA_RWCTRL_READ_BNDRY_256 | 14695 DMA_RWCTRL_WRITE_BNDRY_256); 14696 break; 14697 case 512: 14698 val |= (DMA_RWCTRL_READ_BNDRY_512 | 14699 DMA_RWCTRL_WRITE_BNDRY_512); 14700 break; 14701 case 1024: 14702 default: 14703 val |= (DMA_RWCTRL_READ_BNDRY_1024 | 14704 DMA_RWCTRL_WRITE_BNDRY_1024); 14705 break; 14706 } 14707 } 14708 14709out: 14710 return val; 14711} 14712 14713static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device) 14714{ 14715 struct tg3_internal_buffer_desc test_desc; 14716 u32 sram_dma_descs; 14717 int i, ret; 14718 14719 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE; 14720 14721 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0); 14722 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0); 14723 tw32(RDMAC_STATUS, 0); 14724 tw32(WDMAC_STATUS, 0); 14725 14726 tw32(BUFMGR_MODE, 0); 14727 tw32(FTQ_RESET, 0); 14728 14729 test_desc.addr_hi = ((u64) buf_dma) >> 32; 14730 test_desc.addr_lo = buf_dma & 0xffffffff; 14731 test_desc.nic_mbuf = 0x00002100; 14732 test_desc.len = size; 14733 14734 /* 14735 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz 14736 * the *second* time the tg3 driver was getting loaded after an 14737 * initial scan. 14738 * 14739 * Broadcom tells me: 14740 * ...the DMA engine is connected to the GRC block and a DMA 14741 * reset may affect the GRC block in some unpredictable way... 14742 * The behavior of resets to individual blocks has not been tested. 14743 * 14744 * Broadcom noted the GRC reset will also reset all sub-components. 14745 */ 14746 if (to_device) { 14747 test_desc.cqid_sqid = (13 << 8) | 2; 14748 14749 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE); 14750 udelay(40); 14751 } else { 14752 test_desc.cqid_sqid = (16 << 8) | 7; 14753 14754 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE); 14755 udelay(40); 14756 } 14757 test_desc.flags = 0x00000005; 14758 14759 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) { 14760 u32 val; 14761 14762 val = *(((u32 *)&test_desc) + i); 14763 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 14764 sram_dma_descs + (i * sizeof(u32))); 14765 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 14766 } 14767 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 14768 14769 if (to_device) 14770 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs); 14771 else 14772 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs); 14773 14774 ret = -ENODEV; 14775 for (i = 0; i < 40; i++) { 14776 u32 val; 14777 14778 if (to_device) 14779 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ); 14780 else 14781 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ); 14782 if ((val & 0xffff) == sram_dma_descs) { 14783 ret = 0; 14784 break; 14785 } 14786 14787 udelay(100); 14788 } 14789 14790 return ret; 14791} 14792 14793#define TEST_BUFFER_SIZE 0x2000 14794 14795static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = { 14796 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) }, 14797 { }, 14798}; 14799 14800static int __devinit tg3_test_dma(struct tg3 *tp) 14801{ 14802 dma_addr_t buf_dma; 14803 u32 *buf, saved_dma_rwctrl; 14804 int ret = 0; 14805 14806 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, 14807 &buf_dma, GFP_KERNEL); 14808 if (!buf) { 14809 ret = -ENOMEM; 14810 goto out_nofree; 14811 } 14812 14813 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | 14814 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); 14815 14816 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl); 14817 14818 if (tg3_flag(tp, 57765_PLUS)) 14819 goto out; 14820 14821 if (tg3_flag(tp, PCI_EXPRESS)) { 14822 /* DMA read watermark not used on PCIE */ 14823 tp->dma_rwctrl |= 0x00180000; 14824 } else if (!tg3_flag(tp, PCIX_MODE)) { 14825 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || 14826 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) 14827 tp->dma_rwctrl |= 0x003f0000; 14828 else 14829 tp->dma_rwctrl |= 0x003f000f; 14830 } else { 14831 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 14832 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 14833 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); 14834 u32 read_water = 0x7; 14835 14836 /* If the 5704 is behind the EPB bridge, we can 14837 * do the less restrictive ONE_DMA workaround for 14838 * better performance. 14839 */ 14840 if (tg3_flag(tp, 40BIT_DMA_BUG) && 14841 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 14842 tp->dma_rwctrl |= 0x8000; 14843 else if (ccval == 0x6 || ccval == 0x7) 14844 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 14845 14846 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) 14847 read_water = 4; 14848 /* Set bit 23 to enable PCIX hw bug fix */ 14849 tp->dma_rwctrl |= 14850 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) | 14851 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | 14852 (1 << 23); 14853 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { 14854 /* 5780 always in PCIX mode */ 14855 tp->dma_rwctrl |= 0x00144000; 14856 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 14857 /* 5714 always in PCIX mode */ 14858 tp->dma_rwctrl |= 0x00148000; 14859 } else { 14860 tp->dma_rwctrl |= 0x001b000f; 14861 } 14862 } 14863 14864 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 14865 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 14866 tp->dma_rwctrl &= 0xfffffff0; 14867 14868 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14869 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 14870 /* Remove this if it causes problems for some boards. */ 14871 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT; 14872 14873 /* On 5700/5701 chips, we need to set this bit. 14874 * Otherwise the chip will issue cacheline transactions 14875 * to streamable DMA memory with not all the byte 14876 * enables turned on. This is an error on several 14877 * RISC PCI controllers, in particular sparc64. 14878 * 14879 * On 5703/5704 chips, this bit has been reassigned 14880 * a different meaning. In particular, it is used 14881 * on those chips to enable a PCI-X workaround. 14882 */ 14883 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE; 14884 } 14885 14886 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 14887 14888#if 0 14889 /* Unneeded, already done by tg3_get_invariants. */ 14890 tg3_switch_clocks(tp); 14891#endif 14892 14893 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 14894 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) 14895 goto out; 14896 14897 /* It is best to perform DMA test with maximum write burst size 14898 * to expose the 5700/5701 write DMA bug. 14899 */ 14900 saved_dma_rwctrl = tp->dma_rwctrl; 14901 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 14902 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 14903 14904 while (1) { 14905 u32 *p = buf, i; 14906 14907 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) 14908 p[i] = i; 14909 14910 /* Send the buffer to the chip. */ 14911 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1); 14912 if (ret) { 14913 dev_err(&tp->pdev->dev, 14914 "%s: Buffer write failed. err = %d\n", 14915 __func__, ret); 14916 break; 14917 } 14918 14919#if 0 14920 /* validate data reached card RAM correctly. */ 14921 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 14922 u32 val; 14923 tg3_read_mem(tp, 0x2100 + (i*4), &val); 14924 if (le32_to_cpu(val) != p[i]) { 14925 dev_err(&tp->pdev->dev, 14926 "%s: Buffer corrupted on device! " 14927 "(%d != %d)\n", __func__, val, i); 14928 /* ret = -ENODEV here? */ 14929 } 14930 p[i] = 0; 14931 } 14932#endif 14933 /* Now read it back. */ 14934 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0); 14935 if (ret) { 14936 dev_err(&tp->pdev->dev, "%s: Buffer read failed. " 14937 "err = %d\n", __func__, ret); 14938 break; 14939 } 14940 14941 /* Verify it. */ 14942 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 14943 if (p[i] == i) 14944 continue; 14945 14946 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 14947 DMA_RWCTRL_WRITE_BNDRY_16) { 14948 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 14949 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 14950 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 14951 break; 14952 } else { 14953 dev_err(&tp->pdev->dev, 14954 "%s: Buffer corrupted on read back! " 14955 "(%d != %d)\n", __func__, p[i], i); 14956 ret = -ENODEV; 14957 goto out; 14958 } 14959 } 14960 14961 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) { 14962 /* Success. */ 14963 ret = 0; 14964 break; 14965 } 14966 } 14967 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 14968 DMA_RWCTRL_WRITE_BNDRY_16) { 14969 /* DMA test passed without adjusting DMA boundary, 14970 * now look for chipsets that are known to expose the 14971 * DMA bug without failing the test. 14972 */ 14973 if (pci_dev_present(tg3_dma_wait_state_chipsets)) { 14974 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 14975 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 14976 } else { 14977 /* Safe to use the calculated DMA boundary. */ 14978 tp->dma_rwctrl = saved_dma_rwctrl; 14979 } 14980 14981 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 14982 } 14983 14984out: 14985 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma); 14986out_nofree: 14987 return ret; 14988} 14989 14990static void __devinit tg3_init_bufmgr_config(struct tg3 *tp) 14991{ 14992 if (tg3_flag(tp, 57765_PLUS)) { 14993 tp->bufmgr_config.mbuf_read_dma_low_water = 14994 DEFAULT_MB_RDMA_LOW_WATER_5705; 14995 tp->bufmgr_config.mbuf_mac_rx_low_water = 14996 DEFAULT_MB_MACRX_LOW_WATER_57765; 14997 tp->bufmgr_config.mbuf_high_water = 14998 DEFAULT_MB_HIGH_WATER_57765; 14999 15000 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 15001 DEFAULT_MB_RDMA_LOW_WATER_5705; 15002 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 15003 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765; 15004 tp->bufmgr_config.mbuf_high_water_jumbo = 15005 DEFAULT_MB_HIGH_WATER_JUMBO_57765; 15006 } else if (tg3_flag(tp, 5705_PLUS)) { 15007 tp->bufmgr_config.mbuf_read_dma_low_water = 15008 DEFAULT_MB_RDMA_LOW_WATER_5705; 15009 tp->bufmgr_config.mbuf_mac_rx_low_water = 15010 DEFAULT_MB_MACRX_LOW_WATER_5705; 15011 tp->bufmgr_config.mbuf_high_water = 15012 DEFAULT_MB_HIGH_WATER_5705; 15013 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 15014 tp->bufmgr_config.mbuf_mac_rx_low_water = 15015 DEFAULT_MB_MACRX_LOW_WATER_5906; 15016 tp->bufmgr_config.mbuf_high_water = 15017 DEFAULT_MB_HIGH_WATER_5906; 15018 } 15019 15020 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 15021 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; 15022 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 15023 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; 15024 tp->bufmgr_config.mbuf_high_water_jumbo = 15025 DEFAULT_MB_HIGH_WATER_JUMBO_5780; 15026 } else { 15027 tp->bufmgr_config.mbuf_read_dma_low_water = 15028 DEFAULT_MB_RDMA_LOW_WATER; 15029 tp->bufmgr_config.mbuf_mac_rx_low_water = 15030 DEFAULT_MB_MACRX_LOW_WATER; 15031 tp->bufmgr_config.mbuf_high_water = 15032 DEFAULT_MB_HIGH_WATER; 15033 15034 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 15035 DEFAULT_MB_RDMA_LOW_WATER_JUMBO; 15036 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 15037 DEFAULT_MB_MACRX_LOW_WATER_JUMBO; 15038 tp->bufmgr_config.mbuf_high_water_jumbo = 15039 DEFAULT_MB_HIGH_WATER_JUMBO; 15040 } 15041 15042 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; 15043 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; 15044} 15045 15046static char * __devinit tg3_phy_string(struct tg3 *tp) 15047{ 15048 switch (tp->phy_id & TG3_PHY_ID_MASK) { 15049 case TG3_PHY_ID_BCM5400: return "5400"; 15050 case TG3_PHY_ID_BCM5401: return "5401"; 15051 case TG3_PHY_ID_BCM5411: return "5411"; 15052 case TG3_PHY_ID_BCM5701: return "5701"; 15053 case TG3_PHY_ID_BCM5703: return "5703"; 15054 case TG3_PHY_ID_BCM5704: return "5704"; 15055 case TG3_PHY_ID_BCM5705: return "5705"; 15056 case TG3_PHY_ID_BCM5750: return "5750"; 15057 case TG3_PHY_ID_BCM5752: return "5752"; 15058 case TG3_PHY_ID_BCM5714: return "5714"; 15059 case TG3_PHY_ID_BCM5780: return "5780"; 15060 case TG3_PHY_ID_BCM5755: return "5755"; 15061 case TG3_PHY_ID_BCM5787: return "5787"; 15062 case TG3_PHY_ID_BCM5784: return "5784"; 15063 case TG3_PHY_ID_BCM5756: return "5722/5756"; 15064 case TG3_PHY_ID_BCM5906: return "5906"; 15065 case TG3_PHY_ID_BCM5761: return "5761"; 15066 case TG3_PHY_ID_BCM5718C: return "5718C"; 15067 case TG3_PHY_ID_BCM5718S: return "5718S"; 15068 case TG3_PHY_ID_BCM57765: return "57765"; 15069 case TG3_PHY_ID_BCM5719C: return "5719C"; 15070 case TG3_PHY_ID_BCM5720C: return "5720C"; 15071 case TG3_PHY_ID_BCM8002: return "8002/serdes"; 15072 case 0: return "serdes"; 15073 default: return "unknown"; 15074 } 15075} 15076 15077static char * __devinit tg3_bus_string(struct tg3 *tp, char *str) 15078{ 15079 if (tg3_flag(tp, PCI_EXPRESS)) { 15080 strcpy(str, "PCI Express"); 15081 return str; 15082 } else if (tg3_flag(tp, PCIX_MODE)) { 15083 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f; 15084 15085 strcpy(str, "PCIX:"); 15086 15087 if ((clock_ctrl == 7) || 15088 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) == 15089 GRC_MISC_CFG_BOARD_ID_5704CIOBE)) 15090 strcat(str, "133MHz"); 15091 else if (clock_ctrl == 0) 15092 strcat(str, "33MHz"); 15093 else if (clock_ctrl == 2) 15094 strcat(str, "50MHz"); 15095 else if (clock_ctrl == 4) 15096 strcat(str, "66MHz"); 15097 else if (clock_ctrl == 6) 15098 strcat(str, "100MHz"); 15099 } else { 15100 strcpy(str, "PCI:"); 15101 if (tg3_flag(tp, PCI_HIGH_SPEED)) 15102 strcat(str, "66MHz"); 15103 else 15104 strcat(str, "33MHz"); 15105 } 15106 if (tg3_flag(tp, PCI_32BIT)) 15107 strcat(str, ":32-bit"); 15108 else 15109 strcat(str, ":64-bit"); 15110 return str; 15111} 15112 15113static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp) 15114{ 15115 struct pci_dev *peer; 15116 unsigned int func, devnr = tp->pdev->devfn & ~7; 15117 15118 for (func = 0; func < 8; func++) { 15119 peer = pci_get_slot(tp->pdev->bus, devnr | func); 15120 if (peer && peer != tp->pdev) 15121 break; 15122 pci_dev_put(peer); 15123 } 15124 /* 5704 can be configured in single-port mode, set peer to 15125 * tp->pdev in that case. 15126 */ 15127 if (!peer) { 15128 peer = tp->pdev; 15129 return peer; 15130 } 15131 15132 /* 15133 * We don't need to keep the refcount elevated; there's no way 15134 * to remove one half of this device without removing the other 15135 */ 15136 pci_dev_put(peer); 15137 15138 return peer; 15139} 15140 15141static void __devinit tg3_init_coal(struct tg3 *tp) 15142{ 15143 struct ethtool_coalesce *ec = &tp->coal; 15144 15145 memset(ec, 0, sizeof(*ec)); 15146 ec->cmd = ETHTOOL_GCOALESCE; 15147 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS; 15148 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS; 15149 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES; 15150 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES; 15151 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT; 15152 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT; 15153 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT; 15154 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT; 15155 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS; 15156 15157 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD | 15158 HOSTCC_MODE_CLRTICK_TXBD)) { 15159 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS; 15160 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS; 15161 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS; 15162 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS; 15163 } 15164 15165 if (tg3_flag(tp, 5705_PLUS)) { 15166 ec->rx_coalesce_usecs_irq = 0; 15167 ec->tx_coalesce_usecs_irq = 0; 15168 ec->stats_block_coalesce_usecs = 0; 15169 } 15170} 15171 15172static const struct net_device_ops tg3_netdev_ops = { 15173 .ndo_open = tg3_open, 15174 .ndo_stop = tg3_close, 15175 .ndo_start_xmit = tg3_start_xmit, 15176 .ndo_get_stats64 = tg3_get_stats64, 15177 .ndo_validate_addr = eth_validate_addr, 15178 .ndo_set_multicast_list = tg3_set_rx_mode, 15179 .ndo_set_mac_address = tg3_set_mac_addr, 15180 .ndo_do_ioctl = tg3_ioctl, 15181 .ndo_tx_timeout = tg3_tx_timeout, 15182 .ndo_change_mtu = tg3_change_mtu, 15183 .ndo_fix_features = tg3_fix_features, 15184 .ndo_set_features = tg3_set_features, 15185#ifdef CONFIG_NET_POLL_CONTROLLER 15186 .ndo_poll_controller = tg3_poll_controller, 15187#endif 15188}; 15189 15190static int __devinit tg3_init_one(struct pci_dev *pdev, 15191 const struct pci_device_id *ent) 15192{ 15193 struct net_device *dev; 15194 struct tg3 *tp; 15195 int i, err, pm_cap; 15196 u32 sndmbx, rcvmbx, intmbx; 15197 char str[40]; 15198 u64 dma_mask, persist_dma_mask; 15199 u32 features = 0; 15200 15201 printk_once(KERN_INFO "%s\n", version); 15202 15203 err = pci_enable_device(pdev); 15204 if (err) { 15205 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); 15206 return err; 15207 } 15208 15209 err = pci_request_regions(pdev, DRV_MODULE_NAME); 15210 if (err) { 15211 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n"); 15212 goto err_out_disable_pdev; 15213 } 15214 15215 pci_set_master(pdev); 15216 15217 /* Find power-management capability. */ 15218 pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); 15219 if (pm_cap == 0) { 15220 dev_err(&pdev->dev, 15221 "Cannot find Power Management capability, aborting\n"); 15222 err = -EIO; 15223 goto err_out_free_res; 15224 } 15225 15226 err = pci_set_power_state(pdev, PCI_D0); 15227 if (err) { 15228 dev_err(&pdev->dev, "Transition to D0 failed, aborting\n"); 15229 goto err_out_free_res; 15230 } 15231 15232 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS); 15233 if (!dev) { 15234 dev_err(&pdev->dev, "Etherdev alloc failed, aborting\n"); 15235 err = -ENOMEM; 15236 goto err_out_power_down; 15237 } 15238 15239 SET_NETDEV_DEV(dev, &pdev->dev); 15240 15241 tp = netdev_priv(dev); 15242 tp->pdev = pdev; 15243 tp->dev = dev; 15244 tp->pm_cap = pm_cap; 15245 tp->rx_mode = TG3_DEF_RX_MODE; 15246 tp->tx_mode = TG3_DEF_TX_MODE; 15247 15248 if (tg3_debug > 0) 15249 tp->msg_enable = tg3_debug; 15250 else 15251 tp->msg_enable = TG3_DEF_MSG_ENABLE; 15252 15253 /* The word/byte swap controls here control register access byte 15254 * swapping. DMA data byte swapping is controlled in the GRC_MODE 15255 * setting below. 15256 */ 15257 tp->misc_host_ctrl = 15258 MISC_HOST_CTRL_MASK_PCI_INT | 15259 MISC_HOST_CTRL_WORD_SWAP | 15260 MISC_HOST_CTRL_INDIR_ACCESS | 15261 MISC_HOST_CTRL_PCISTATE_RW; 15262 15263 /* The NONFRM (non-frame) byte/word swap controls take effect 15264 * on descriptor entries, anything which isn't packet data. 15265 * 15266 * The StrongARM chips on the board (one for tx, one for rx) 15267 * are running in big-endian mode. 15268 */ 15269 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA | 15270 GRC_MODE_WSWAP_NONFRM_DATA); 15271#ifdef __BIG_ENDIAN 15272 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; 15273#endif 15274 spin_lock_init(&tp->lock); 15275 spin_lock_init(&tp->indirect_lock); 15276 INIT_WORK(&tp->reset_task, tg3_reset_task); 15277 15278 tp->regs = pci_ioremap_bar(pdev, BAR_0); 15279 if (!tp->regs) { 15280 dev_err(&pdev->dev, "Cannot map device registers, aborting\n"); 15281 err = -ENOMEM; 15282 goto err_out_free_dev; 15283 } 15284 15285 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 15286 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E || 15287 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S || 15288 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE || 15289 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 15290 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 15291 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 15292 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) { 15293 tg3_flag_set(tp, ENABLE_APE); 15294 tp->aperegs = pci_ioremap_bar(pdev, BAR_2); 15295 if (!tp->aperegs) { 15296 dev_err(&pdev->dev, 15297 "Cannot map APE registers, aborting\n"); 15298 err = -ENOMEM; 15299 goto err_out_iounmap; 15300 } 15301 } 15302 15303 tp->rx_pending = TG3_DEF_RX_RING_PENDING; 15304 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; 15305 15306 dev->ethtool_ops = &tg3_ethtool_ops; 15307 dev->watchdog_timeo = TG3_TX_TIMEOUT; 15308 dev->netdev_ops = &tg3_netdev_ops; 15309 dev->irq = pdev->irq; 15310 15311 err = tg3_get_invariants(tp); 15312 if (err) { 15313 dev_err(&pdev->dev, 15314 "Problem fetching invariants of chip, aborting\n"); 15315 goto err_out_apeunmap; 15316 } 15317 15318 /* The EPB bridge inside 5714, 5715, and 5780 and any 15319 * device behind the EPB cannot support DMA addresses > 40-bit. 15320 * On 64-bit systems with IOMMU, use 40-bit dma_mask. 15321 * On 64-bit systems without IOMMU, use 64-bit dma_mask and 15322 * do DMA address check in tg3_start_xmit(). 15323 */ 15324 if (tg3_flag(tp, IS_5788)) 15325 persist_dma_mask = dma_mask = DMA_BIT_MASK(32); 15326 else if (tg3_flag(tp, 40BIT_DMA_BUG)) { 15327 persist_dma_mask = dma_mask = DMA_BIT_MASK(40); 15328#ifdef CONFIG_HIGHMEM 15329 dma_mask = DMA_BIT_MASK(64); 15330#endif 15331 } else 15332 persist_dma_mask = dma_mask = DMA_BIT_MASK(64); 15333 15334 /* Configure DMA attributes. */ 15335 if (dma_mask > DMA_BIT_MASK(32)) { 15336 err = pci_set_dma_mask(pdev, dma_mask); 15337 if (!err) { 15338 features |= NETIF_F_HIGHDMA; 15339 err = pci_set_consistent_dma_mask(pdev, 15340 persist_dma_mask); 15341 if (err < 0) { 15342 dev_err(&pdev->dev, "Unable to obtain 64 bit " 15343 "DMA for consistent allocations\n"); 15344 goto err_out_apeunmap; 15345 } 15346 } 15347 } 15348 if (err || dma_mask == DMA_BIT_MASK(32)) { 15349 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 15350 if (err) { 15351 dev_err(&pdev->dev, 15352 "No usable DMA configuration, aborting\n"); 15353 goto err_out_apeunmap; 15354 } 15355 } 15356 15357 tg3_init_bufmgr_config(tp); 15358 15359 features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 15360 15361 /* 5700 B0 chips do not support checksumming correctly due 15362 * to hardware bugs. 15363 */ 15364 if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) { 15365 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM; 15366 15367 if (tg3_flag(tp, 5755_PLUS)) 15368 features |= NETIF_F_IPV6_CSUM; 15369 } 15370 15371 /* TSO is on by default on chips that support hardware TSO. 15372 * Firmware TSO on older chips gives lower performance, so it 15373 * is off by default, but can be enabled using ethtool. 15374 */ 15375 if ((tg3_flag(tp, HW_TSO_1) || 15376 tg3_flag(tp, HW_TSO_2) || 15377 tg3_flag(tp, HW_TSO_3)) && 15378 (features & NETIF_F_IP_CSUM)) 15379 features |= NETIF_F_TSO; 15380 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) { 15381 if (features & NETIF_F_IPV6_CSUM) 15382 features |= NETIF_F_TSO6; 15383 if (tg3_flag(tp, HW_TSO_3) || 15384 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 15385 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 15386 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) || 15387 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 15388 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 15389 features |= NETIF_F_TSO_ECN; 15390 } 15391 15392 dev->features |= features; 15393 dev->vlan_features |= features; 15394 15395 /* 15396 * Add loopback capability only for a subset of devices that support 15397 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY 15398 * loopback for the remaining devices. 15399 */ 15400 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 && 15401 !tg3_flag(tp, CPMU_PRESENT)) 15402 /* Add the loopback capability */ 15403 features |= NETIF_F_LOOPBACK; 15404 15405 dev->hw_features |= features; 15406 15407 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 && 15408 !tg3_flag(tp, TSO_CAPABLE) && 15409 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) { 15410 tg3_flag_set(tp, MAX_RXPEND_64); 15411 tp->rx_pending = 63; 15412 } 15413 15414 err = tg3_get_device_address(tp); 15415 if (err) { 15416 dev_err(&pdev->dev, 15417 "Could not obtain valid ethernet address, aborting\n"); 15418 goto err_out_apeunmap; 15419 } 15420 15421 /* 15422 * Reset chip in case UNDI or EFI driver did not shutdown 15423 * DMA self test will enable WDMAC and we'll see (spurious) 15424 * pending DMA on the PCI bus at that point. 15425 */ 15426 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) || 15427 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 15428 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); 15429 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 15430 } 15431 15432 err = tg3_test_dma(tp); 15433 if (err) { 15434 dev_err(&pdev->dev, "DMA engine test failed, aborting\n"); 15435 goto err_out_apeunmap; 15436 } 15437 15438 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW; 15439 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW; 15440 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW; 15441 for (i = 0; i < tp->irq_max; i++) { 15442 struct tg3_napi *tnapi = &tp->napi[i]; 15443 15444 tnapi->tp = tp; 15445 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING; 15446 15447 tnapi->int_mbox = intmbx; 15448 if (i < 4) 15449 intmbx += 0x8; 15450 else 15451 intmbx += 0x4; 15452 15453 tnapi->consmbox = rcvmbx; 15454 tnapi->prodmbox = sndmbx; 15455 15456 if (i) 15457 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1); 15458 else 15459 tnapi->coal_now = HOSTCC_MODE_NOW; 15460 15461 if (!tg3_flag(tp, SUPPORT_MSIX)) 15462 break; 15463 15464 /* 15465 * If we support MSIX, we'll be using RSS. If we're using 15466 * RSS, the first vector only handles link interrupts and the 15467 * remaining vectors handle rx and tx interrupts. Reuse the 15468 * mailbox values for the next iteration. The values we setup 15469 * above are still useful for the single vectored mode. 15470 */ 15471 if (!i) 15472 continue; 15473 15474 rcvmbx += 0x8; 15475 15476 if (sndmbx & 0x4) 15477 sndmbx -= 0x4; 15478 else 15479 sndmbx += 0xc; 15480 } 15481 15482 tg3_init_coal(tp); 15483 15484 pci_set_drvdata(pdev, dev); 15485 15486 if (tg3_flag(tp, 5717_PLUS)) { 15487 /* Resume a low-power mode */ 15488 tg3_frob_aux_power(tp, false); 15489 } 15490 15491 err = register_netdev(dev); 15492 if (err) { 15493 dev_err(&pdev->dev, "Cannot register net device, aborting\n"); 15494 goto err_out_apeunmap; 15495 } 15496 15497 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", 15498 tp->board_part_number, 15499 tp->pci_chip_rev_id, 15500 tg3_bus_string(tp, str), 15501 dev->dev_addr); 15502 15503 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 15504 struct phy_device *phydev; 15505 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 15506 netdev_info(dev, 15507 "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n", 15508 phydev->drv->name, dev_name(&phydev->dev)); 15509 } else { 15510 char *ethtype; 15511 15512 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 15513 ethtype = "10/100Base-TX"; 15514 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 15515 ethtype = "1000Base-SX"; 15516 else 15517 ethtype = "10/100/1000Base-T"; 15518 15519 netdev_info(dev, "attached PHY is %s (%s Ethernet) " 15520 "(WireSpeed[%d], EEE[%d])\n", 15521 tg3_phy_string(tp), ethtype, 15522 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0, 15523 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0); 15524 } 15525 15526 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n", 15527 (dev->features & NETIF_F_RXCSUM) != 0, 15528 tg3_flag(tp, USE_LINKCHG_REG) != 0, 15529 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0, 15530 tg3_flag(tp, ENABLE_ASF) != 0, 15531 tg3_flag(tp, TSO_CAPABLE) != 0); 15532 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n", 15533 tp->dma_rwctrl, 15534 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 : 15535 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64); 15536 15537 pci_save_state(pdev); 15538 15539 return 0; 15540 15541err_out_apeunmap: 15542 if (tp->aperegs) { 15543 iounmap(tp->aperegs); 15544 tp->aperegs = NULL; 15545 } 15546 15547err_out_iounmap: 15548 if (tp->regs) { 15549 iounmap(tp->regs); 15550 tp->regs = NULL; 15551 } 15552 15553err_out_free_dev: 15554 free_netdev(dev); 15555 15556err_out_power_down: 15557 pci_set_power_state(pdev, PCI_D3hot); 15558 15559err_out_free_res: 15560 pci_release_regions(pdev); 15561 15562err_out_disable_pdev: 15563 pci_disable_device(pdev); 15564 pci_set_drvdata(pdev, NULL); 15565 return err; 15566} 15567 15568static void __devexit tg3_remove_one(struct pci_dev *pdev) 15569{ 15570 struct net_device *dev = pci_get_drvdata(pdev); 15571 15572 if (dev) { 15573 struct tg3 *tp = netdev_priv(dev); 15574 15575 if (tp->fw) 15576 release_firmware(tp->fw); 15577 15578 cancel_work_sync(&tp->reset_task); 15579 15580 if (!tg3_flag(tp, USE_PHYLIB)) { 15581 tg3_phy_fini(tp); 15582 tg3_mdio_fini(tp); 15583 } 15584 15585 unregister_netdev(dev); 15586 if (tp->aperegs) { 15587 iounmap(tp->aperegs); 15588 tp->aperegs = NULL; 15589 } 15590 if (tp->regs) { 15591 iounmap(tp->regs); 15592 tp->regs = NULL; 15593 } 15594 free_netdev(dev); 15595 pci_release_regions(pdev); 15596 pci_disable_device(pdev); 15597 pci_set_drvdata(pdev, NULL); 15598 } 15599} 15600 15601#ifdef CONFIG_PM_SLEEP 15602static int tg3_suspend(struct device *device) 15603{ 15604 struct pci_dev *pdev = to_pci_dev(device); 15605 struct net_device *dev = pci_get_drvdata(pdev); 15606 struct tg3 *tp = netdev_priv(dev); 15607 int err; 15608 15609 if (!netif_running(dev)) 15610 return 0; 15611 15612 flush_work_sync(&tp->reset_task); 15613 tg3_phy_stop(tp); 15614 tg3_netif_stop(tp); 15615 15616 del_timer_sync(&tp->timer); 15617 15618 tg3_full_lock(tp, 1); 15619 tg3_disable_ints(tp); 15620 tg3_full_unlock(tp); 15621 15622 netif_device_detach(dev); 15623 15624 tg3_full_lock(tp, 0); 15625 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 15626 tg3_flag_clear(tp, INIT_COMPLETE); 15627 tg3_full_unlock(tp); 15628 15629 err = tg3_power_down_prepare(tp); 15630 if (err) { 15631 int err2; 15632 15633 tg3_full_lock(tp, 0); 15634 15635 tg3_flag_set(tp, INIT_COMPLETE); 15636 err2 = tg3_restart_hw(tp, 1); 15637 if (err2) 15638 goto out; 15639 15640 tp->timer.expires = jiffies + tp->timer_offset; 15641 add_timer(&tp->timer); 15642 15643 netif_device_attach(dev); 15644 tg3_netif_start(tp); 15645 15646out: 15647 tg3_full_unlock(tp); 15648 15649 if (!err2) 15650 tg3_phy_start(tp); 15651 } 15652 15653 return err; 15654} 15655 15656static int tg3_resume(struct device *device) 15657{ 15658 struct pci_dev *pdev = to_pci_dev(device); 15659 struct net_device *dev = pci_get_drvdata(pdev); 15660 struct tg3 *tp = netdev_priv(dev); 15661 int err; 15662 15663 if (!netif_running(dev)) 15664 return 0; 15665 15666 netif_device_attach(dev); 15667 15668 tg3_full_lock(tp, 0); 15669 15670 tg3_flag_set(tp, INIT_COMPLETE); 15671 err = tg3_restart_hw(tp, 1); 15672 if (err) 15673 goto out; 15674 15675 tp->timer.expires = jiffies + tp->timer_offset; 15676 add_timer(&tp->timer); 15677 15678 tg3_netif_start(tp); 15679 15680out: 15681 tg3_full_unlock(tp); 15682 15683 if (!err) 15684 tg3_phy_start(tp); 15685 15686 return err; 15687} 15688 15689static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume); 15690#define TG3_PM_OPS (&tg3_pm_ops) 15691 15692#else 15693 15694#define TG3_PM_OPS NULL 15695 15696#endif /* CONFIG_PM_SLEEP */ 15697 15698/** 15699 * tg3_io_error_detected - called when PCI error is detected 15700 * @pdev: Pointer to PCI device 15701 * @state: The current pci connection state 15702 * 15703 * This function is called after a PCI bus error affecting 15704 * this device has been detected. 15705 */ 15706static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, 15707 pci_channel_state_t state) 15708{ 15709 struct net_device *netdev = pci_get_drvdata(pdev); 15710 struct tg3 *tp = netdev_priv(netdev); 15711 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET; 15712 15713 netdev_info(netdev, "PCI I/O error detected\n"); 15714 15715 rtnl_lock(); 15716 15717 if (!netif_running(netdev)) 15718 goto done; 15719 15720 tg3_phy_stop(tp); 15721 15722 tg3_netif_stop(tp); 15723 15724 del_timer_sync(&tp->timer); 15725 tg3_flag_clear(tp, RESTART_TIMER); 15726 15727 /* Want to make sure that the reset task doesn't run */ 15728 cancel_work_sync(&tp->reset_task); 15729 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 15730 tg3_flag_clear(tp, RESTART_TIMER); 15731 15732 netif_device_detach(netdev); 15733 15734 /* Clean up software state, even if MMIO is blocked */ 15735 tg3_full_lock(tp, 0); 15736 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 15737 tg3_full_unlock(tp); 15738 15739done: 15740 if (state == pci_channel_io_perm_failure) 15741 err = PCI_ERS_RESULT_DISCONNECT; 15742 else 15743 pci_disable_device(pdev); 15744 15745 rtnl_unlock(); 15746 15747 return err; 15748} 15749 15750/** 15751 * tg3_io_slot_reset - called after the pci bus has been reset. 15752 * @pdev: Pointer to PCI device 15753 * 15754 * Restart the card from scratch, as if from a cold-boot. 15755 * At this point, the card has exprienced a hard reset, 15756 * followed by fixups by BIOS, and has its config space 15757 * set up identically to what it was at cold boot. 15758 */ 15759static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev) 15760{ 15761 struct net_device *netdev = pci_get_drvdata(pdev); 15762 struct tg3 *tp = netdev_priv(netdev); 15763 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; 15764 int err; 15765 15766 rtnl_lock(); 15767 15768 if (pci_enable_device(pdev)) { 15769 netdev_err(netdev, "Cannot re-enable PCI device after reset.\n"); 15770 goto done; 15771 } 15772 15773 pci_set_master(pdev); 15774 pci_restore_state(pdev); 15775 pci_save_state(pdev); 15776 15777 if (!netif_running(netdev)) { 15778 rc = PCI_ERS_RESULT_RECOVERED; 15779 goto done; 15780 } 15781 15782 err = tg3_power_up(tp); 15783 if (err) 15784 goto done; 15785 15786 rc = PCI_ERS_RESULT_RECOVERED; 15787 15788done: 15789 rtnl_unlock(); 15790 15791 return rc; 15792} 15793 15794/** 15795 * tg3_io_resume - called when traffic can start flowing again. 15796 * @pdev: Pointer to PCI device 15797 * 15798 * This callback is called when the error recovery driver tells 15799 * us that its OK to resume normal operation. 15800 */ 15801static void tg3_io_resume(struct pci_dev *pdev) 15802{ 15803 struct net_device *netdev = pci_get_drvdata(pdev); 15804 struct tg3 *tp = netdev_priv(netdev); 15805 int err; 15806 15807 rtnl_lock(); 15808 15809 if (!netif_running(netdev)) 15810 goto done; 15811 15812 tg3_full_lock(tp, 0); 15813 tg3_flag_set(tp, INIT_COMPLETE); 15814 err = tg3_restart_hw(tp, 1); 15815 tg3_full_unlock(tp); 15816 if (err) { 15817 netdev_err(netdev, "Cannot restart hardware after reset.\n"); 15818 goto done; 15819 } 15820 15821 netif_device_attach(netdev); 15822 15823 tp->timer.expires = jiffies + tp->timer_offset; 15824 add_timer(&tp->timer); 15825 15826 tg3_netif_start(tp); 15827 15828 tg3_phy_start(tp); 15829 15830done: 15831 rtnl_unlock(); 15832} 15833 15834static struct pci_error_handlers tg3_err_handler = { 15835 .error_detected = tg3_io_error_detected, 15836 .slot_reset = tg3_io_slot_reset, 15837 .resume = tg3_io_resume 15838}; 15839 15840static struct pci_driver tg3_driver = { 15841 .name = DRV_MODULE_NAME, 15842 .id_table = tg3_pci_tbl, 15843 .probe = tg3_init_one, 15844 .remove = __devexit_p(tg3_remove_one), 15845 .err_handler = &tg3_err_handler, 15846 .driver.pm = TG3_PM_OPS, 15847}; 15848 15849static int __init tg3_init(void) 15850{ 15851 return pci_register_driver(&tg3_driver); 15852} 15853 15854static void __exit tg3_cleanup(void) 15855{ 15856 pci_unregister_driver(&tg3_driver); 15857} 15858 15859module_init(tg3_init); 15860module_exit(tg3_cleanup);