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-2012 Broadcom Corporation. 8 * 9 * Firmware is: 10 * Derived from proprietary unpublished source code, 11 * Copyright (C) 2000-2003 Broadcom Corporation. 12 * 13 * Permission is hereby granted for the distribution of this firmware 14 * data in hexadecimal or equivalent format, provided this copyright 15 * notice is accompanying it. 16 */ 17 18 19 #include <linux/module.h> 20 #include <linux/moduleparam.h> 21 #include <linux/stringify.h> 22 #include <linux/kernel.h> 23 #include <linux/types.h> 24 #include <linux/compiler.h> 25 #include <linux/slab.h> 26 #include <linux/delay.h> 27 #include <linux/in.h> 28 #include <linux/init.h> 29 #include <linux/interrupt.h> 30 #include <linux/ioport.h> 31 #include <linux/pci.h> 32 #include <linux/netdevice.h> 33 #include <linux/etherdevice.h> 34 #include <linux/skbuff.h> 35 #include <linux/ethtool.h> 36 #include <linux/mdio.h> 37 #include <linux/mii.h> 38 #include <linux/phy.h> 39 #include <linux/brcmphy.h> 40 #include <linux/if_vlan.h> 41 #include <linux/ip.h> 42 #include <linux/tcp.h> 43 #include <linux/workqueue.h> 44 #include <linux/prefetch.h> 45 #include <linux/dma-mapping.h> 46 #include <linux/firmware.h> 47 48 #include <net/checksum.h> 49 #include <net/ip.h> 50 51 #include <linux/io.h> 52 #include <asm/byteorder.h> 53 #include <linux/uaccess.h> 54 55 #ifdef CONFIG_SPARC 56 #include <asm/idprom.h> 57 #include <asm/prom.h> 58 #endif 59 60 #define BAR_0 0 61 #define BAR_2 2 62 63 #include "tg3.h" 64 65 /* Functions & macros to verify TG3_FLAGS types */ 66 67 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits) 68 { 69 return test_bit(flag, bits); 70 } 71 72 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits) 73 { 74 set_bit(flag, bits); 75 } 76 77 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits) 78 { 79 clear_bit(flag, bits); 80 } 81 82 #define tg3_flag(tp, flag) \ 83 _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags) 84 #define tg3_flag_set(tp, flag) \ 85 _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags) 86 #define tg3_flag_clear(tp, flag) \ 87 _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags) 88 89 #define DRV_MODULE_NAME "tg3" 90 #define TG3_MAJ_NUM 3 91 #define TG3_MIN_NUM 123 92 #define DRV_MODULE_VERSION \ 93 __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM) 94 #define DRV_MODULE_RELDATE "March 21, 2012" 95 96 #define RESET_KIND_SHUTDOWN 0 97 #define RESET_KIND_INIT 1 98 #define RESET_KIND_SUSPEND 2 99 100 #define TG3_DEF_RX_MODE 0 101 #define TG3_DEF_TX_MODE 0 102 #define TG3_DEF_MSG_ENABLE \ 103 (NETIF_MSG_DRV | \ 104 NETIF_MSG_PROBE | \ 105 NETIF_MSG_LINK | \ 106 NETIF_MSG_TIMER | \ 107 NETIF_MSG_IFDOWN | \ 108 NETIF_MSG_IFUP | \ 109 NETIF_MSG_RX_ERR | \ 110 NETIF_MSG_TX_ERR) 111 112 #define TG3_GRC_LCLCTL_PWRSW_DELAY 100 113 114 /* length of time before we decide the hardware is borked, 115 * and dev->tx_timeout() should be called to fix the problem 116 */ 117 118 #define TG3_TX_TIMEOUT (5 * HZ) 119 120 /* hardware minimum and maximum for a single frame's data payload */ 121 #define TG3_MIN_MTU 60 122 #define TG3_MAX_MTU(tp) \ 123 (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500) 124 125 /* These numbers seem to be hard coded in the NIC firmware somehow. 126 * You can't change the ring sizes, but you can change where you place 127 * them in the NIC onboard memory. 128 */ 129 #define TG3_RX_STD_RING_SIZE(tp) \ 130 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 131 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700) 132 #define TG3_DEF_RX_RING_PENDING 200 133 #define TG3_RX_JMB_RING_SIZE(tp) \ 134 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 135 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700) 136 #define TG3_DEF_RX_JUMBO_RING_PENDING 100 137 138 /* Do not place this n-ring entries value into the tp struct itself, 139 * we really want to expose these constants to GCC so that modulo et 140 * al. operations are done with shifts and masks instead of with 141 * hw multiply/modulo instructions. Another solution would be to 142 * replace things like '% foo' with '& (foo - 1)'. 143 */ 144 145 #define TG3_TX_RING_SIZE 512 146 #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1) 147 148 #define TG3_RX_STD_RING_BYTES(tp) \ 149 (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp)) 150 #define TG3_RX_JMB_RING_BYTES(tp) \ 151 (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp)) 152 #define TG3_RX_RCB_RING_BYTES(tp) \ 153 (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1)) 154 #define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \ 155 TG3_TX_RING_SIZE) 156 #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) 157 158 #define TG3_DMA_BYTE_ENAB 64 159 160 #define TG3_RX_STD_DMA_SZ 1536 161 #define TG3_RX_JMB_DMA_SZ 9046 162 163 #define TG3_RX_DMA_TO_MAP_SZ(x) ((x) + TG3_DMA_BYTE_ENAB) 164 165 #define TG3_RX_STD_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ) 166 #define TG3_RX_JMB_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ) 167 168 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \ 169 (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp)) 170 171 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \ 172 (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp)) 173 174 /* Due to a hardware bug, the 5701 can only DMA to memory addresses 175 * that are at least dword aligned when used in PCIX mode. The driver 176 * works around this bug by double copying the packet. This workaround 177 * is built into the normal double copy length check for efficiency. 178 * 179 * However, the double copy is only necessary on those architectures 180 * where unaligned memory accesses are inefficient. For those architectures 181 * where unaligned memory accesses incur little penalty, we can reintegrate 182 * the 5701 in the normal rx path. Doing so saves a device structure 183 * dereference by hardcoding the double copy threshold in place. 184 */ 185 #define TG3_RX_COPY_THRESHOLD 256 186 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) 187 #define TG3_RX_COPY_THRESH(tp) TG3_RX_COPY_THRESHOLD 188 #else 189 #define TG3_RX_COPY_THRESH(tp) ((tp)->rx_copy_thresh) 190 #endif 191 192 #if (NET_IP_ALIGN != 0) 193 #define TG3_RX_OFFSET(tp) ((tp)->rx_offset) 194 #else 195 #define TG3_RX_OFFSET(tp) (NET_SKB_PAD) 196 #endif 197 198 /* minimum number of free TX descriptors required to wake up TX process */ 199 #define TG3_TX_WAKEUP_THRESH(tnapi) ((tnapi)->tx_pending / 4) 200 #define TG3_TX_BD_DMA_MAX_2K 2048 201 #define TG3_TX_BD_DMA_MAX_4K 4096 202 203 #define TG3_RAW_IP_ALIGN 2 204 205 #define TG3_FW_UPDATE_TIMEOUT_SEC 5 206 #define TG3_FW_UPDATE_FREQ_SEC (TG3_FW_UPDATE_TIMEOUT_SEC / 2) 207 208 #define FIRMWARE_TG3 "tigon/tg3.bin" 209 #define FIRMWARE_TG3TSO "tigon/tg3_tso.bin" 210 #define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin" 211 212 static char version[] __devinitdata = 213 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")"; 214 215 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)"); 216 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver"); 217 MODULE_LICENSE("GPL"); 218 MODULE_VERSION(DRV_MODULE_VERSION); 219 MODULE_FIRMWARE(FIRMWARE_TG3); 220 MODULE_FIRMWARE(FIRMWARE_TG3TSO); 221 MODULE_FIRMWARE(FIRMWARE_TG3TSO5); 222 223 static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */ 224 module_param(tg3_debug, int, 0); 225 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value"); 226 227 static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = { 228 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)}, 229 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)}, 230 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)}, 231 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)}, 232 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)}, 233 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)}, 234 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)}, 235 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)}, 236 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)}, 237 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)}, 238 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)}, 239 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)}, 240 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)}, 241 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)}, 242 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)}, 243 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)}, 244 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)}, 245 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)}, 246 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)}, 247 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)}, 248 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)}, 249 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)}, 250 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)}, 251 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)}, 252 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)}, 253 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)}, 254 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)}, 255 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)}, 256 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)}, 257 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)}, 258 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)}, 259 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)}, 260 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)}, 261 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)}, 262 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)}, 263 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)}, 264 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)}, 265 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)}, 266 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)}, 267 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)}, 268 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)}, 269 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)}, 270 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)}, 271 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)}, 272 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)}, 273 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)}, 274 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)}, 275 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)}, 276 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)}, 277 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)}, 278 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)}, 279 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)}, 280 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)}, 281 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)}, 282 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)}, 283 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)}, 284 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)}, 285 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)}, 286 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)}, 287 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)}, 288 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)}, 289 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790)}, 290 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)}, 291 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)}, 292 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)}, 293 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)}, 294 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)}, 295 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)}, 296 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)}, 297 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791)}, 298 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795)}, 299 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)}, 300 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)}, 301 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)}, 302 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)}, 303 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)}, 304 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)}, 305 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)}, 306 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)}, 307 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)}, 308 {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */ 309 {} 310 }; 311 312 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl); 313 314 static const struct { 315 const char string[ETH_GSTRING_LEN]; 316 } ethtool_stats_keys[] = { 317 { "rx_octets" }, 318 { "rx_fragments" }, 319 { "rx_ucast_packets" }, 320 { "rx_mcast_packets" }, 321 { "rx_bcast_packets" }, 322 { "rx_fcs_errors" }, 323 { "rx_align_errors" }, 324 { "rx_xon_pause_rcvd" }, 325 { "rx_xoff_pause_rcvd" }, 326 { "rx_mac_ctrl_rcvd" }, 327 { "rx_xoff_entered" }, 328 { "rx_frame_too_long_errors" }, 329 { "rx_jabbers" }, 330 { "rx_undersize_packets" }, 331 { "rx_in_length_errors" }, 332 { "rx_out_length_errors" }, 333 { "rx_64_or_less_octet_packets" }, 334 { "rx_65_to_127_octet_packets" }, 335 { "rx_128_to_255_octet_packets" }, 336 { "rx_256_to_511_octet_packets" }, 337 { "rx_512_to_1023_octet_packets" }, 338 { "rx_1024_to_1522_octet_packets" }, 339 { "rx_1523_to_2047_octet_packets" }, 340 { "rx_2048_to_4095_octet_packets" }, 341 { "rx_4096_to_8191_octet_packets" }, 342 { "rx_8192_to_9022_octet_packets" }, 343 344 { "tx_octets" }, 345 { "tx_collisions" }, 346 347 { "tx_xon_sent" }, 348 { "tx_xoff_sent" }, 349 { "tx_flow_control" }, 350 { "tx_mac_errors" }, 351 { "tx_single_collisions" }, 352 { "tx_mult_collisions" }, 353 { "tx_deferred" }, 354 { "tx_excessive_collisions" }, 355 { "tx_late_collisions" }, 356 { "tx_collide_2times" }, 357 { "tx_collide_3times" }, 358 { "tx_collide_4times" }, 359 { "tx_collide_5times" }, 360 { "tx_collide_6times" }, 361 { "tx_collide_7times" }, 362 { "tx_collide_8times" }, 363 { "tx_collide_9times" }, 364 { "tx_collide_10times" }, 365 { "tx_collide_11times" }, 366 { "tx_collide_12times" }, 367 { "tx_collide_13times" }, 368 { "tx_collide_14times" }, 369 { "tx_collide_15times" }, 370 { "tx_ucast_packets" }, 371 { "tx_mcast_packets" }, 372 { "tx_bcast_packets" }, 373 { "tx_carrier_sense_errors" }, 374 { "tx_discards" }, 375 { "tx_errors" }, 376 377 { "dma_writeq_full" }, 378 { "dma_write_prioq_full" }, 379 { "rxbds_empty" }, 380 { "rx_discards" }, 381 { "rx_errors" }, 382 { "rx_threshold_hit" }, 383 384 { "dma_readq_full" }, 385 { "dma_read_prioq_full" }, 386 { "tx_comp_queue_full" }, 387 388 { "ring_set_send_prod_index" }, 389 { "ring_status_update" }, 390 { "nic_irqs" }, 391 { "nic_avoided_irqs" }, 392 { "nic_tx_threshold_hit" }, 393 394 { "mbuf_lwm_thresh_hit" }, 395 }; 396 397 #define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys) 398 399 400 static const struct { 401 const char string[ETH_GSTRING_LEN]; 402 } ethtool_test_keys[] = { 403 { "nvram test (online) " }, 404 { "link test (online) " }, 405 { "register test (offline)" }, 406 { "memory test (offline)" }, 407 { "mac loopback test (offline)" }, 408 { "phy loopback test (offline)" }, 409 { "ext loopback test (offline)" }, 410 { "interrupt test (offline)" }, 411 }; 412 413 #define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys) 414 415 416 static void tg3_write32(struct tg3 *tp, u32 off, u32 val) 417 { 418 writel(val, tp->regs + off); 419 } 420 421 static u32 tg3_read32(struct tg3 *tp, u32 off) 422 { 423 return readl(tp->regs + off); 424 } 425 426 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val) 427 { 428 writel(val, tp->aperegs + off); 429 } 430 431 static u32 tg3_ape_read32(struct tg3 *tp, u32 off) 432 { 433 return readl(tp->aperegs + off); 434 } 435 436 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) 437 { 438 unsigned long flags; 439 440 spin_lock_irqsave(&tp->indirect_lock, flags); 441 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 442 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 443 spin_unlock_irqrestore(&tp->indirect_lock, flags); 444 } 445 446 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val) 447 { 448 writel(val, tp->regs + off); 449 readl(tp->regs + off); 450 } 451 452 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off) 453 { 454 unsigned long flags; 455 u32 val; 456 457 spin_lock_irqsave(&tp->indirect_lock, flags); 458 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 459 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 460 spin_unlock_irqrestore(&tp->indirect_lock, flags); 461 return val; 462 } 463 464 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val) 465 { 466 unsigned long flags; 467 468 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) { 469 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX + 470 TG3_64BIT_REG_LOW, val); 471 return; 472 } 473 if (off == TG3_RX_STD_PROD_IDX_REG) { 474 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX + 475 TG3_64BIT_REG_LOW, val); 476 return; 477 } 478 479 spin_lock_irqsave(&tp->indirect_lock, flags); 480 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 481 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 482 spin_unlock_irqrestore(&tp->indirect_lock, flags); 483 484 /* In indirect mode when disabling interrupts, we also need 485 * to clear the interrupt bit in the GRC local ctrl register. 486 */ 487 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) && 488 (val == 0x1)) { 489 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL, 490 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT); 491 } 492 } 493 494 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off) 495 { 496 unsigned long flags; 497 u32 val; 498 499 spin_lock_irqsave(&tp->indirect_lock, flags); 500 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 501 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 502 spin_unlock_irqrestore(&tp->indirect_lock, flags); 503 return val; 504 } 505 506 /* usec_wait specifies the wait time in usec when writing to certain registers 507 * where it is unsafe to read back the register without some delay. 508 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power. 509 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed. 510 */ 511 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait) 512 { 513 if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND)) 514 /* Non-posted methods */ 515 tp->write32(tp, off, val); 516 else { 517 /* Posted method */ 518 tg3_write32(tp, off, val); 519 if (usec_wait) 520 udelay(usec_wait); 521 tp->read32(tp, off); 522 } 523 /* Wait again after the read for the posted method to guarantee that 524 * the wait time is met. 525 */ 526 if (usec_wait) 527 udelay(usec_wait); 528 } 529 530 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) 531 { 532 tp->write32_mbox(tp, off, val); 533 if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND)) 534 tp->read32_mbox(tp, off); 535 } 536 537 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val) 538 { 539 void __iomem *mbox = tp->regs + off; 540 writel(val, mbox); 541 if (tg3_flag(tp, TXD_MBOX_HWBUG)) 542 writel(val, mbox); 543 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 544 readl(mbox); 545 } 546 547 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off) 548 { 549 return readl(tp->regs + off + GRCMBOX_BASE); 550 } 551 552 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val) 553 { 554 writel(val, tp->regs + off + GRCMBOX_BASE); 555 } 556 557 #define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val) 558 #define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val)) 559 #define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val) 560 #define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val) 561 #define tr32_mailbox(reg) tp->read32_mbox(tp, reg) 562 563 #define tw32(reg, val) tp->write32(tp, reg, val) 564 #define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0) 565 #define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us)) 566 #define tr32(reg) tp->read32(tp, reg) 567 568 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) 569 { 570 unsigned long flags; 571 572 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 && 573 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) 574 return; 575 576 spin_lock_irqsave(&tp->indirect_lock, flags); 577 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 578 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 579 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 580 581 /* Always leave this as zero. */ 582 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 583 } else { 584 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 585 tw32_f(TG3PCI_MEM_WIN_DATA, val); 586 587 /* Always leave this as zero. */ 588 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 589 } 590 spin_unlock_irqrestore(&tp->indirect_lock, flags); 591 } 592 593 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) 594 { 595 unsigned long flags; 596 597 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 && 598 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) { 599 *val = 0; 600 return; 601 } 602 603 spin_lock_irqsave(&tp->indirect_lock, flags); 604 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 605 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 606 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 607 608 /* Always leave this as zero. */ 609 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 610 } else { 611 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 612 *val = tr32(TG3PCI_MEM_WIN_DATA); 613 614 /* Always leave this as zero. */ 615 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 616 } 617 spin_unlock_irqrestore(&tp->indirect_lock, flags); 618 } 619 620 static void tg3_ape_lock_init(struct tg3 *tp) 621 { 622 int i; 623 u32 regbase, bit; 624 625 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 626 regbase = TG3_APE_LOCK_GRANT; 627 else 628 regbase = TG3_APE_PER_LOCK_GRANT; 629 630 /* Make sure the driver hasn't any stale locks. */ 631 for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) { 632 switch (i) { 633 case TG3_APE_LOCK_PHY0: 634 case TG3_APE_LOCK_PHY1: 635 case TG3_APE_LOCK_PHY2: 636 case TG3_APE_LOCK_PHY3: 637 bit = APE_LOCK_GRANT_DRIVER; 638 break; 639 default: 640 if (!tp->pci_fn) 641 bit = APE_LOCK_GRANT_DRIVER; 642 else 643 bit = 1 << tp->pci_fn; 644 } 645 tg3_ape_write32(tp, regbase + 4 * i, bit); 646 } 647 648 } 649 650 static int tg3_ape_lock(struct tg3 *tp, int locknum) 651 { 652 int i, off; 653 int ret = 0; 654 u32 status, req, gnt, bit; 655 656 if (!tg3_flag(tp, ENABLE_APE)) 657 return 0; 658 659 switch (locknum) { 660 case TG3_APE_LOCK_GPIO: 661 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 662 return 0; 663 case TG3_APE_LOCK_GRC: 664 case TG3_APE_LOCK_MEM: 665 if (!tp->pci_fn) 666 bit = APE_LOCK_REQ_DRIVER; 667 else 668 bit = 1 << tp->pci_fn; 669 break; 670 default: 671 return -EINVAL; 672 } 673 674 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) { 675 req = TG3_APE_LOCK_REQ; 676 gnt = TG3_APE_LOCK_GRANT; 677 } else { 678 req = TG3_APE_PER_LOCK_REQ; 679 gnt = TG3_APE_PER_LOCK_GRANT; 680 } 681 682 off = 4 * locknum; 683 684 tg3_ape_write32(tp, req + off, bit); 685 686 /* Wait for up to 1 millisecond to acquire lock. */ 687 for (i = 0; i < 100; i++) { 688 status = tg3_ape_read32(tp, gnt + off); 689 if (status == bit) 690 break; 691 udelay(10); 692 } 693 694 if (status != bit) { 695 /* Revoke the lock request. */ 696 tg3_ape_write32(tp, gnt + off, bit); 697 ret = -EBUSY; 698 } 699 700 return ret; 701 } 702 703 static void tg3_ape_unlock(struct tg3 *tp, int locknum) 704 { 705 u32 gnt, bit; 706 707 if (!tg3_flag(tp, ENABLE_APE)) 708 return; 709 710 switch (locknum) { 711 case TG3_APE_LOCK_GPIO: 712 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 713 return; 714 case TG3_APE_LOCK_GRC: 715 case TG3_APE_LOCK_MEM: 716 if (!tp->pci_fn) 717 bit = APE_LOCK_GRANT_DRIVER; 718 else 719 bit = 1 << tp->pci_fn; 720 break; 721 default: 722 return; 723 } 724 725 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 726 gnt = TG3_APE_LOCK_GRANT; 727 else 728 gnt = TG3_APE_PER_LOCK_GRANT; 729 730 tg3_ape_write32(tp, gnt + 4 * locknum, bit); 731 } 732 733 static void tg3_ape_send_event(struct tg3 *tp, u32 event) 734 { 735 int i; 736 u32 apedata; 737 738 /* NCSI does not support APE events */ 739 if (tg3_flag(tp, APE_HAS_NCSI)) 740 return; 741 742 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 743 if (apedata != APE_SEG_SIG_MAGIC) 744 return; 745 746 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 747 if (!(apedata & APE_FW_STATUS_READY)) 748 return; 749 750 /* Wait for up to 1 millisecond for APE to service previous event. */ 751 for (i = 0; i < 10; i++) { 752 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM)) 753 return; 754 755 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 756 757 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 758 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, 759 event | APE_EVENT_STATUS_EVENT_PENDING); 760 761 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 762 763 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 764 break; 765 766 udelay(100); 767 } 768 769 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 770 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 771 } 772 773 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind) 774 { 775 u32 event; 776 u32 apedata; 777 778 if (!tg3_flag(tp, ENABLE_APE)) 779 return; 780 781 switch (kind) { 782 case RESET_KIND_INIT: 783 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 784 APE_HOST_SEG_SIG_MAGIC); 785 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN, 786 APE_HOST_SEG_LEN_MAGIC); 787 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT); 788 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata); 789 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID, 790 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM)); 791 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR, 792 APE_HOST_BEHAV_NO_PHYLOCK); 793 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, 794 TG3_APE_HOST_DRVR_STATE_START); 795 796 event = APE_EVENT_STATUS_STATE_START; 797 break; 798 case RESET_KIND_SHUTDOWN: 799 /* With the interface we are currently using, 800 * APE does not track driver state. Wiping 801 * out the HOST SEGMENT SIGNATURE forces 802 * the APE to assume OS absent status. 803 */ 804 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0); 805 806 if (device_may_wakeup(&tp->pdev->dev) && 807 tg3_flag(tp, WOL_ENABLE)) { 808 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED, 809 TG3_APE_HOST_WOL_SPEED_AUTO); 810 apedata = TG3_APE_HOST_DRVR_STATE_WOL; 811 } else 812 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD; 813 814 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata); 815 816 event = APE_EVENT_STATUS_STATE_UNLOAD; 817 break; 818 case RESET_KIND_SUSPEND: 819 event = APE_EVENT_STATUS_STATE_SUSPEND; 820 break; 821 default: 822 return; 823 } 824 825 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE; 826 827 tg3_ape_send_event(tp, event); 828 } 829 830 static void tg3_disable_ints(struct tg3 *tp) 831 { 832 int i; 833 834 tw32(TG3PCI_MISC_HOST_CTRL, 835 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT)); 836 for (i = 0; i < tp->irq_max; i++) 837 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001); 838 } 839 840 static void tg3_enable_ints(struct tg3 *tp) 841 { 842 int i; 843 844 tp->irq_sync = 0; 845 wmb(); 846 847 tw32(TG3PCI_MISC_HOST_CTRL, 848 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT)); 849 850 tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE; 851 for (i = 0; i < tp->irq_cnt; i++) { 852 struct tg3_napi *tnapi = &tp->napi[i]; 853 854 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 855 if (tg3_flag(tp, 1SHOT_MSI)) 856 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 857 858 tp->coal_now |= tnapi->coal_now; 859 } 860 861 /* Force an initial interrupt */ 862 if (!tg3_flag(tp, TAGGED_STATUS) && 863 (tp->napi[0].hw_status->status & SD_STATUS_UPDATED)) 864 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 865 else 866 tw32(HOSTCC_MODE, tp->coal_now); 867 868 tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now); 869 } 870 871 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi) 872 { 873 struct tg3 *tp = tnapi->tp; 874 struct tg3_hw_status *sblk = tnapi->hw_status; 875 unsigned int work_exists = 0; 876 877 /* check for phy events */ 878 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 879 if (sblk->status & SD_STATUS_LINK_CHG) 880 work_exists = 1; 881 } 882 883 /* check for TX work to do */ 884 if (sblk->idx[0].tx_consumer != tnapi->tx_cons) 885 work_exists = 1; 886 887 /* check for RX work to do */ 888 if (tnapi->rx_rcb_prod_idx && 889 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 890 work_exists = 1; 891 892 return work_exists; 893 } 894 895 /* tg3_int_reenable 896 * similar to tg3_enable_ints, but it accurately determines whether there 897 * is new work pending and can return without flushing the PIO write 898 * which reenables interrupts 899 */ 900 static void tg3_int_reenable(struct tg3_napi *tnapi) 901 { 902 struct tg3 *tp = tnapi->tp; 903 904 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 905 mmiowb(); 906 907 /* When doing tagged status, this work check is unnecessary. 908 * The last_tag we write above tells the chip which piece of 909 * work we've completed. 910 */ 911 if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi)) 912 tw32(HOSTCC_MODE, tp->coalesce_mode | 913 HOSTCC_MODE_ENABLE | tnapi->coal_now); 914 } 915 916 static void tg3_switch_clocks(struct tg3 *tp) 917 { 918 u32 clock_ctrl; 919 u32 orig_clock_ctrl; 920 921 if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS)) 922 return; 923 924 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); 925 926 orig_clock_ctrl = clock_ctrl; 927 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | 928 CLOCK_CTRL_CLKRUN_OENABLE | 929 0x1f); 930 tp->pci_clock_ctrl = clock_ctrl; 931 932 if (tg3_flag(tp, 5705_PLUS)) { 933 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) { 934 tw32_wait_f(TG3PCI_CLOCK_CTRL, 935 clock_ctrl | CLOCK_CTRL_625_CORE, 40); 936 } 937 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { 938 tw32_wait_f(TG3PCI_CLOCK_CTRL, 939 clock_ctrl | 940 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK), 941 40); 942 tw32_wait_f(TG3PCI_CLOCK_CTRL, 943 clock_ctrl | (CLOCK_CTRL_ALTCLK), 944 40); 945 } 946 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40); 947 } 948 949 #define PHY_BUSY_LOOPS 5000 950 951 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val) 952 { 953 u32 frame_val; 954 unsigned int loops; 955 int ret; 956 957 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 958 tw32_f(MAC_MI_MODE, 959 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 960 udelay(80); 961 } 962 963 *val = 0x0; 964 965 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & 966 MI_COM_PHY_ADDR_MASK); 967 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 968 MI_COM_REG_ADDR_MASK); 969 frame_val |= (MI_COM_CMD_READ | MI_COM_START); 970 971 tw32_f(MAC_MI_COM, frame_val); 972 973 loops = PHY_BUSY_LOOPS; 974 while (loops != 0) { 975 udelay(10); 976 frame_val = tr32(MAC_MI_COM); 977 978 if ((frame_val & MI_COM_BUSY) == 0) { 979 udelay(5); 980 frame_val = tr32(MAC_MI_COM); 981 break; 982 } 983 loops -= 1; 984 } 985 986 ret = -EBUSY; 987 if (loops != 0) { 988 *val = frame_val & MI_COM_DATA_MASK; 989 ret = 0; 990 } 991 992 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 993 tw32_f(MAC_MI_MODE, tp->mi_mode); 994 udelay(80); 995 } 996 997 return ret; 998 } 999 1000 static int tg3_writephy(struct tg3 *tp, int reg, u32 val) 1001 { 1002 u32 frame_val; 1003 unsigned int loops; 1004 int ret; 1005 1006 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 1007 (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL)) 1008 return 0; 1009 1010 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1011 tw32_f(MAC_MI_MODE, 1012 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1013 udelay(80); 1014 } 1015 1016 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1017 MI_COM_PHY_ADDR_MASK); 1018 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1019 MI_COM_REG_ADDR_MASK); 1020 frame_val |= (val & MI_COM_DATA_MASK); 1021 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START); 1022 1023 tw32_f(MAC_MI_COM, frame_val); 1024 1025 loops = PHY_BUSY_LOOPS; 1026 while (loops != 0) { 1027 udelay(10); 1028 frame_val = tr32(MAC_MI_COM); 1029 if ((frame_val & MI_COM_BUSY) == 0) { 1030 udelay(5); 1031 frame_val = tr32(MAC_MI_COM); 1032 break; 1033 } 1034 loops -= 1; 1035 } 1036 1037 ret = -EBUSY; 1038 if (loops != 0) 1039 ret = 0; 1040 1041 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1042 tw32_f(MAC_MI_MODE, tp->mi_mode); 1043 udelay(80); 1044 } 1045 1046 return ret; 1047 } 1048 1049 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val) 1050 { 1051 int err; 1052 1053 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1054 if (err) 1055 goto done; 1056 1057 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1058 if (err) 1059 goto done; 1060 1061 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1062 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1063 if (err) 1064 goto done; 1065 1066 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val); 1067 1068 done: 1069 return err; 1070 } 1071 1072 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val) 1073 { 1074 int err; 1075 1076 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1077 if (err) 1078 goto done; 1079 1080 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1081 if (err) 1082 goto done; 1083 1084 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1085 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1086 if (err) 1087 goto done; 1088 1089 err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val); 1090 1091 done: 1092 return err; 1093 } 1094 1095 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val) 1096 { 1097 int err; 1098 1099 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1100 if (!err) 1101 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val); 1102 1103 return err; 1104 } 1105 1106 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val) 1107 { 1108 int err; 1109 1110 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1111 if (!err) 1112 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val); 1113 1114 return err; 1115 } 1116 1117 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val) 1118 { 1119 int err; 1120 1121 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 1122 (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) | 1123 MII_TG3_AUXCTL_SHDWSEL_MISC); 1124 if (!err) 1125 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val); 1126 1127 return err; 1128 } 1129 1130 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set) 1131 { 1132 if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC) 1133 set |= MII_TG3_AUXCTL_MISC_WREN; 1134 1135 return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg); 1136 } 1137 1138 #define TG3_PHY_AUXCTL_SMDSP_ENABLE(tp) \ 1139 tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \ 1140 MII_TG3_AUXCTL_ACTL_SMDSP_ENA | \ 1141 MII_TG3_AUXCTL_ACTL_TX_6DB) 1142 1143 #define TG3_PHY_AUXCTL_SMDSP_DISABLE(tp) \ 1144 tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \ 1145 MII_TG3_AUXCTL_ACTL_TX_6DB); 1146 1147 static int tg3_bmcr_reset(struct tg3 *tp) 1148 { 1149 u32 phy_control; 1150 int limit, err; 1151 1152 /* OK, reset it, and poll the BMCR_RESET bit until it 1153 * clears or we time out. 1154 */ 1155 phy_control = BMCR_RESET; 1156 err = tg3_writephy(tp, MII_BMCR, phy_control); 1157 if (err != 0) 1158 return -EBUSY; 1159 1160 limit = 5000; 1161 while (limit--) { 1162 err = tg3_readphy(tp, MII_BMCR, &phy_control); 1163 if (err != 0) 1164 return -EBUSY; 1165 1166 if ((phy_control & BMCR_RESET) == 0) { 1167 udelay(40); 1168 break; 1169 } 1170 udelay(10); 1171 } 1172 if (limit < 0) 1173 return -EBUSY; 1174 1175 return 0; 1176 } 1177 1178 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg) 1179 { 1180 struct tg3 *tp = bp->priv; 1181 u32 val; 1182 1183 spin_lock_bh(&tp->lock); 1184 1185 if (tg3_readphy(tp, reg, &val)) 1186 val = -EIO; 1187 1188 spin_unlock_bh(&tp->lock); 1189 1190 return val; 1191 } 1192 1193 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val) 1194 { 1195 struct tg3 *tp = bp->priv; 1196 u32 ret = 0; 1197 1198 spin_lock_bh(&tp->lock); 1199 1200 if (tg3_writephy(tp, reg, val)) 1201 ret = -EIO; 1202 1203 spin_unlock_bh(&tp->lock); 1204 1205 return ret; 1206 } 1207 1208 static int tg3_mdio_reset(struct mii_bus *bp) 1209 { 1210 return 0; 1211 } 1212 1213 static void tg3_mdio_config_5785(struct tg3 *tp) 1214 { 1215 u32 val; 1216 struct phy_device *phydev; 1217 1218 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1219 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1220 case PHY_ID_BCM50610: 1221 case PHY_ID_BCM50610M: 1222 val = MAC_PHYCFG2_50610_LED_MODES; 1223 break; 1224 case PHY_ID_BCMAC131: 1225 val = MAC_PHYCFG2_AC131_LED_MODES; 1226 break; 1227 case PHY_ID_RTL8211C: 1228 val = MAC_PHYCFG2_RTL8211C_LED_MODES; 1229 break; 1230 case PHY_ID_RTL8201E: 1231 val = MAC_PHYCFG2_RTL8201E_LED_MODES; 1232 break; 1233 default: 1234 return; 1235 } 1236 1237 if (phydev->interface != PHY_INTERFACE_MODE_RGMII) { 1238 tw32(MAC_PHYCFG2, val); 1239 1240 val = tr32(MAC_PHYCFG1); 1241 val &= ~(MAC_PHYCFG1_RGMII_INT | 1242 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK); 1243 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT; 1244 tw32(MAC_PHYCFG1, val); 1245 1246 return; 1247 } 1248 1249 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) 1250 val |= MAC_PHYCFG2_EMODE_MASK_MASK | 1251 MAC_PHYCFG2_FMODE_MASK_MASK | 1252 MAC_PHYCFG2_GMODE_MASK_MASK | 1253 MAC_PHYCFG2_ACT_MASK_MASK | 1254 MAC_PHYCFG2_QUAL_MASK_MASK | 1255 MAC_PHYCFG2_INBAND_ENABLE; 1256 1257 tw32(MAC_PHYCFG2, val); 1258 1259 val = tr32(MAC_PHYCFG1); 1260 val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK | 1261 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN); 1262 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1263 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1264 val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC; 1265 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1266 val |= MAC_PHYCFG1_RGMII_SND_STAT_EN; 1267 } 1268 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT | 1269 MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV; 1270 tw32(MAC_PHYCFG1, val); 1271 1272 val = tr32(MAC_EXT_RGMII_MODE); 1273 val &= ~(MAC_RGMII_MODE_RX_INT_B | 1274 MAC_RGMII_MODE_RX_QUALITY | 1275 MAC_RGMII_MODE_RX_ACTIVITY | 1276 MAC_RGMII_MODE_RX_ENG_DET | 1277 MAC_RGMII_MODE_TX_ENABLE | 1278 MAC_RGMII_MODE_TX_LOWPWR | 1279 MAC_RGMII_MODE_TX_RESET); 1280 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1281 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1282 val |= MAC_RGMII_MODE_RX_INT_B | 1283 MAC_RGMII_MODE_RX_QUALITY | 1284 MAC_RGMII_MODE_RX_ACTIVITY | 1285 MAC_RGMII_MODE_RX_ENG_DET; 1286 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1287 val |= MAC_RGMII_MODE_TX_ENABLE | 1288 MAC_RGMII_MODE_TX_LOWPWR | 1289 MAC_RGMII_MODE_TX_RESET; 1290 } 1291 tw32(MAC_EXT_RGMII_MODE, val); 1292 } 1293 1294 static void tg3_mdio_start(struct tg3 *tp) 1295 { 1296 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL; 1297 tw32_f(MAC_MI_MODE, tp->mi_mode); 1298 udelay(80); 1299 1300 if (tg3_flag(tp, MDIOBUS_INITED) && 1301 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 1302 tg3_mdio_config_5785(tp); 1303 } 1304 1305 static int tg3_mdio_init(struct tg3 *tp) 1306 { 1307 int i; 1308 u32 reg; 1309 struct phy_device *phydev; 1310 1311 if (tg3_flag(tp, 5717_PLUS)) { 1312 u32 is_serdes; 1313 1314 tp->phy_addr = tp->pci_fn + 1; 1315 1316 if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) 1317 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; 1318 else 1319 is_serdes = tr32(TG3_CPMU_PHY_STRAP) & 1320 TG3_CPMU_PHY_STRAP_IS_SERDES; 1321 if (is_serdes) 1322 tp->phy_addr += 7; 1323 } else 1324 tp->phy_addr = TG3_PHY_MII_ADDR; 1325 1326 tg3_mdio_start(tp); 1327 1328 if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED)) 1329 return 0; 1330 1331 tp->mdio_bus = mdiobus_alloc(); 1332 if (tp->mdio_bus == NULL) 1333 return -ENOMEM; 1334 1335 tp->mdio_bus->name = "tg3 mdio bus"; 1336 snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x", 1337 (tp->pdev->bus->number << 8) | tp->pdev->devfn); 1338 tp->mdio_bus->priv = tp; 1339 tp->mdio_bus->parent = &tp->pdev->dev; 1340 tp->mdio_bus->read = &tg3_mdio_read; 1341 tp->mdio_bus->write = &tg3_mdio_write; 1342 tp->mdio_bus->reset = &tg3_mdio_reset; 1343 tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR); 1344 tp->mdio_bus->irq = &tp->mdio_irq[0]; 1345 1346 for (i = 0; i < PHY_MAX_ADDR; i++) 1347 tp->mdio_bus->irq[i] = PHY_POLL; 1348 1349 /* The bus registration will look for all the PHYs on the mdio bus. 1350 * Unfortunately, it does not ensure the PHY is powered up before 1351 * accessing the PHY ID registers. A chip reset is the 1352 * quickest way to bring the device back to an operational state.. 1353 */ 1354 if (tg3_readphy(tp, MII_BMCR, ®) || (reg & BMCR_PDOWN)) 1355 tg3_bmcr_reset(tp); 1356 1357 i = mdiobus_register(tp->mdio_bus); 1358 if (i) { 1359 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i); 1360 mdiobus_free(tp->mdio_bus); 1361 return i; 1362 } 1363 1364 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1365 1366 if (!phydev || !phydev->drv) { 1367 dev_warn(&tp->pdev->dev, "No PHY devices\n"); 1368 mdiobus_unregister(tp->mdio_bus); 1369 mdiobus_free(tp->mdio_bus); 1370 return -ENODEV; 1371 } 1372 1373 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1374 case PHY_ID_BCM57780: 1375 phydev->interface = PHY_INTERFACE_MODE_GMII; 1376 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1377 break; 1378 case PHY_ID_BCM50610: 1379 case PHY_ID_BCM50610M: 1380 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE | 1381 PHY_BRCM_RX_REFCLK_UNUSED | 1382 PHY_BRCM_DIS_TXCRXC_NOENRGY | 1383 PHY_BRCM_AUTO_PWRDWN_ENABLE; 1384 if (tg3_flag(tp, RGMII_INBAND_DISABLE)) 1385 phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE; 1386 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1387 phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE; 1388 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1389 phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE; 1390 /* fallthru */ 1391 case PHY_ID_RTL8211C: 1392 phydev->interface = PHY_INTERFACE_MODE_RGMII; 1393 break; 1394 case PHY_ID_RTL8201E: 1395 case PHY_ID_BCMAC131: 1396 phydev->interface = PHY_INTERFACE_MODE_MII; 1397 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1398 tp->phy_flags |= TG3_PHYFLG_IS_FET; 1399 break; 1400 } 1401 1402 tg3_flag_set(tp, MDIOBUS_INITED); 1403 1404 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 1405 tg3_mdio_config_5785(tp); 1406 1407 return 0; 1408 } 1409 1410 static void tg3_mdio_fini(struct tg3 *tp) 1411 { 1412 if (tg3_flag(tp, MDIOBUS_INITED)) { 1413 tg3_flag_clear(tp, MDIOBUS_INITED); 1414 mdiobus_unregister(tp->mdio_bus); 1415 mdiobus_free(tp->mdio_bus); 1416 } 1417 } 1418 1419 /* tp->lock is held. */ 1420 static inline void tg3_generate_fw_event(struct tg3 *tp) 1421 { 1422 u32 val; 1423 1424 val = tr32(GRC_RX_CPU_EVENT); 1425 val |= GRC_RX_CPU_DRIVER_EVENT; 1426 tw32_f(GRC_RX_CPU_EVENT, val); 1427 1428 tp->last_event_jiffies = jiffies; 1429 } 1430 1431 #define TG3_FW_EVENT_TIMEOUT_USEC 2500 1432 1433 /* tp->lock is held. */ 1434 static void tg3_wait_for_event_ack(struct tg3 *tp) 1435 { 1436 int i; 1437 unsigned int delay_cnt; 1438 long time_remain; 1439 1440 /* If enough time has passed, no wait is necessary. */ 1441 time_remain = (long)(tp->last_event_jiffies + 1 + 1442 usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) - 1443 (long)jiffies; 1444 if (time_remain < 0) 1445 return; 1446 1447 /* Check if we can shorten the wait time. */ 1448 delay_cnt = jiffies_to_usecs(time_remain); 1449 if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC) 1450 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC; 1451 delay_cnt = (delay_cnt >> 3) + 1; 1452 1453 for (i = 0; i < delay_cnt; i++) { 1454 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT)) 1455 break; 1456 udelay(8); 1457 } 1458 } 1459 1460 /* tp->lock is held. */ 1461 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data) 1462 { 1463 u32 reg, val; 1464 1465 val = 0; 1466 if (!tg3_readphy(tp, MII_BMCR, ®)) 1467 val = reg << 16; 1468 if (!tg3_readphy(tp, MII_BMSR, ®)) 1469 val |= (reg & 0xffff); 1470 *data++ = val; 1471 1472 val = 0; 1473 if (!tg3_readphy(tp, MII_ADVERTISE, ®)) 1474 val = reg << 16; 1475 if (!tg3_readphy(tp, MII_LPA, ®)) 1476 val |= (reg & 0xffff); 1477 *data++ = val; 1478 1479 val = 0; 1480 if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) { 1481 if (!tg3_readphy(tp, MII_CTRL1000, ®)) 1482 val = reg << 16; 1483 if (!tg3_readphy(tp, MII_STAT1000, ®)) 1484 val |= (reg & 0xffff); 1485 } 1486 *data++ = val; 1487 1488 if (!tg3_readphy(tp, MII_PHYADDR, ®)) 1489 val = reg << 16; 1490 else 1491 val = 0; 1492 *data++ = val; 1493 } 1494 1495 /* tp->lock is held. */ 1496 static void tg3_ump_link_report(struct tg3 *tp) 1497 { 1498 u32 data[4]; 1499 1500 if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF)) 1501 return; 1502 1503 tg3_phy_gather_ump_data(tp, data); 1504 1505 tg3_wait_for_event_ack(tp); 1506 1507 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE); 1508 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14); 1509 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]); 1510 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]); 1511 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]); 1512 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]); 1513 1514 tg3_generate_fw_event(tp); 1515 } 1516 1517 /* tp->lock is held. */ 1518 static void tg3_stop_fw(struct tg3 *tp) 1519 { 1520 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 1521 /* Wait for RX cpu to ACK the previous event. */ 1522 tg3_wait_for_event_ack(tp); 1523 1524 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW); 1525 1526 tg3_generate_fw_event(tp); 1527 1528 /* Wait for RX cpu to ACK this event. */ 1529 tg3_wait_for_event_ack(tp); 1530 } 1531 } 1532 1533 /* tp->lock is held. */ 1534 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) 1535 { 1536 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, 1537 NIC_SRAM_FIRMWARE_MBOX_MAGIC1); 1538 1539 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1540 switch (kind) { 1541 case RESET_KIND_INIT: 1542 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1543 DRV_STATE_START); 1544 break; 1545 1546 case RESET_KIND_SHUTDOWN: 1547 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1548 DRV_STATE_UNLOAD); 1549 break; 1550 1551 case RESET_KIND_SUSPEND: 1552 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1553 DRV_STATE_SUSPEND); 1554 break; 1555 1556 default: 1557 break; 1558 } 1559 } 1560 1561 if (kind == RESET_KIND_INIT || 1562 kind == RESET_KIND_SUSPEND) 1563 tg3_ape_driver_state_change(tp, kind); 1564 } 1565 1566 /* tp->lock is held. */ 1567 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) 1568 { 1569 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1570 switch (kind) { 1571 case RESET_KIND_INIT: 1572 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1573 DRV_STATE_START_DONE); 1574 break; 1575 1576 case RESET_KIND_SHUTDOWN: 1577 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1578 DRV_STATE_UNLOAD_DONE); 1579 break; 1580 1581 default: 1582 break; 1583 } 1584 } 1585 1586 if (kind == RESET_KIND_SHUTDOWN) 1587 tg3_ape_driver_state_change(tp, kind); 1588 } 1589 1590 /* tp->lock is held. */ 1591 static void tg3_write_sig_legacy(struct tg3 *tp, int kind) 1592 { 1593 if (tg3_flag(tp, ENABLE_ASF)) { 1594 switch (kind) { 1595 case RESET_KIND_INIT: 1596 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1597 DRV_STATE_START); 1598 break; 1599 1600 case RESET_KIND_SHUTDOWN: 1601 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1602 DRV_STATE_UNLOAD); 1603 break; 1604 1605 case RESET_KIND_SUSPEND: 1606 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1607 DRV_STATE_SUSPEND); 1608 break; 1609 1610 default: 1611 break; 1612 } 1613 } 1614 } 1615 1616 static int tg3_poll_fw(struct tg3 *tp) 1617 { 1618 int i; 1619 u32 val; 1620 1621 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 1622 /* Wait up to 20ms for init done. */ 1623 for (i = 0; i < 200; i++) { 1624 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE) 1625 return 0; 1626 udelay(100); 1627 } 1628 return -ENODEV; 1629 } 1630 1631 /* Wait for firmware initialization to complete. */ 1632 for (i = 0; i < 100000; i++) { 1633 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); 1634 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 1635 break; 1636 udelay(10); 1637 } 1638 1639 /* Chip might not be fitted with firmware. Some Sun onboard 1640 * parts are configured like that. So don't signal the timeout 1641 * of the above loop as an error, but do report the lack of 1642 * running firmware once. 1643 */ 1644 if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) { 1645 tg3_flag_set(tp, NO_FWARE_REPORTED); 1646 1647 netdev_info(tp->dev, "No firmware running\n"); 1648 } 1649 1650 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) { 1651 /* The 57765 A0 needs a little more 1652 * time to do some important work. 1653 */ 1654 mdelay(10); 1655 } 1656 1657 return 0; 1658 } 1659 1660 static void tg3_link_report(struct tg3 *tp) 1661 { 1662 if (!netif_carrier_ok(tp->dev)) { 1663 netif_info(tp, link, tp->dev, "Link is down\n"); 1664 tg3_ump_link_report(tp); 1665 } else if (netif_msg_link(tp)) { 1666 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n", 1667 (tp->link_config.active_speed == SPEED_1000 ? 1668 1000 : 1669 (tp->link_config.active_speed == SPEED_100 ? 1670 100 : 10)), 1671 (tp->link_config.active_duplex == DUPLEX_FULL ? 1672 "full" : "half")); 1673 1674 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n", 1675 (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ? 1676 "on" : "off", 1677 (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ? 1678 "on" : "off"); 1679 1680 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 1681 netdev_info(tp->dev, "EEE is %s\n", 1682 tp->setlpicnt ? "enabled" : "disabled"); 1683 1684 tg3_ump_link_report(tp); 1685 } 1686 } 1687 1688 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl) 1689 { 1690 u16 miireg; 1691 1692 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX)) 1693 miireg = ADVERTISE_1000XPAUSE; 1694 else if (flow_ctrl & FLOW_CTRL_TX) 1695 miireg = ADVERTISE_1000XPSE_ASYM; 1696 else if (flow_ctrl & FLOW_CTRL_RX) 1697 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM; 1698 else 1699 miireg = 0; 1700 1701 return miireg; 1702 } 1703 1704 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv) 1705 { 1706 u8 cap = 0; 1707 1708 if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) { 1709 cap = FLOW_CTRL_TX | FLOW_CTRL_RX; 1710 } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) { 1711 if (lcladv & ADVERTISE_1000XPAUSE) 1712 cap = FLOW_CTRL_RX; 1713 if (rmtadv & ADVERTISE_1000XPAUSE) 1714 cap = FLOW_CTRL_TX; 1715 } 1716 1717 return cap; 1718 } 1719 1720 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv) 1721 { 1722 u8 autoneg; 1723 u8 flowctrl = 0; 1724 u32 old_rx_mode = tp->rx_mode; 1725 u32 old_tx_mode = tp->tx_mode; 1726 1727 if (tg3_flag(tp, USE_PHYLIB)) 1728 autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg; 1729 else 1730 autoneg = tp->link_config.autoneg; 1731 1732 if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) { 1733 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 1734 flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv); 1735 else 1736 flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 1737 } else 1738 flowctrl = tp->link_config.flowctrl; 1739 1740 tp->link_config.active_flowctrl = flowctrl; 1741 1742 if (flowctrl & FLOW_CTRL_RX) 1743 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE; 1744 else 1745 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE; 1746 1747 if (old_rx_mode != tp->rx_mode) 1748 tw32_f(MAC_RX_MODE, tp->rx_mode); 1749 1750 if (flowctrl & FLOW_CTRL_TX) 1751 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE; 1752 else 1753 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE; 1754 1755 if (old_tx_mode != tp->tx_mode) 1756 tw32_f(MAC_TX_MODE, tp->tx_mode); 1757 } 1758 1759 static void tg3_adjust_link(struct net_device *dev) 1760 { 1761 u8 oldflowctrl, linkmesg = 0; 1762 u32 mac_mode, lcl_adv, rmt_adv; 1763 struct tg3 *tp = netdev_priv(dev); 1764 struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1765 1766 spin_lock_bh(&tp->lock); 1767 1768 mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK | 1769 MAC_MODE_HALF_DUPLEX); 1770 1771 oldflowctrl = tp->link_config.active_flowctrl; 1772 1773 if (phydev->link) { 1774 lcl_adv = 0; 1775 rmt_adv = 0; 1776 1777 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10) 1778 mac_mode |= MAC_MODE_PORT_MODE_MII; 1779 else if (phydev->speed == SPEED_1000 || 1780 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785) 1781 mac_mode |= MAC_MODE_PORT_MODE_GMII; 1782 else 1783 mac_mode |= MAC_MODE_PORT_MODE_MII; 1784 1785 if (phydev->duplex == DUPLEX_HALF) 1786 mac_mode |= MAC_MODE_HALF_DUPLEX; 1787 else { 1788 lcl_adv = mii_advertise_flowctrl( 1789 tp->link_config.flowctrl); 1790 1791 if (phydev->pause) 1792 rmt_adv = LPA_PAUSE_CAP; 1793 if (phydev->asym_pause) 1794 rmt_adv |= LPA_PAUSE_ASYM; 1795 } 1796 1797 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 1798 } else 1799 mac_mode |= MAC_MODE_PORT_MODE_GMII; 1800 1801 if (mac_mode != tp->mac_mode) { 1802 tp->mac_mode = mac_mode; 1803 tw32_f(MAC_MODE, tp->mac_mode); 1804 udelay(40); 1805 } 1806 1807 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 1808 if (phydev->speed == SPEED_10) 1809 tw32(MAC_MI_STAT, 1810 MAC_MI_STAT_10MBPS_MODE | 1811 MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 1812 else 1813 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 1814 } 1815 1816 if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF) 1817 tw32(MAC_TX_LENGTHS, 1818 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 1819 (6 << TX_LENGTHS_IPG_SHIFT) | 1820 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT))); 1821 else 1822 tw32(MAC_TX_LENGTHS, 1823 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 1824 (6 << TX_LENGTHS_IPG_SHIFT) | 1825 (32 << TX_LENGTHS_SLOT_TIME_SHIFT))); 1826 1827 if (phydev->link != tp->old_link || 1828 phydev->speed != tp->link_config.active_speed || 1829 phydev->duplex != tp->link_config.active_duplex || 1830 oldflowctrl != tp->link_config.active_flowctrl) 1831 linkmesg = 1; 1832 1833 tp->old_link = phydev->link; 1834 tp->link_config.active_speed = phydev->speed; 1835 tp->link_config.active_duplex = phydev->duplex; 1836 1837 spin_unlock_bh(&tp->lock); 1838 1839 if (linkmesg) 1840 tg3_link_report(tp); 1841 } 1842 1843 static int tg3_phy_init(struct tg3 *tp) 1844 { 1845 struct phy_device *phydev; 1846 1847 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) 1848 return 0; 1849 1850 /* Bring the PHY back to a known state. */ 1851 tg3_bmcr_reset(tp); 1852 1853 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1854 1855 /* Attach the MAC to the PHY. */ 1856 phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link, 1857 phydev->dev_flags, phydev->interface); 1858 if (IS_ERR(phydev)) { 1859 dev_err(&tp->pdev->dev, "Could not attach to PHY\n"); 1860 return PTR_ERR(phydev); 1861 } 1862 1863 /* Mask with MAC supported features. */ 1864 switch (phydev->interface) { 1865 case PHY_INTERFACE_MODE_GMII: 1866 case PHY_INTERFACE_MODE_RGMII: 1867 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 1868 phydev->supported &= (PHY_GBIT_FEATURES | 1869 SUPPORTED_Pause | 1870 SUPPORTED_Asym_Pause); 1871 break; 1872 } 1873 /* fallthru */ 1874 case PHY_INTERFACE_MODE_MII: 1875 phydev->supported &= (PHY_BASIC_FEATURES | 1876 SUPPORTED_Pause | 1877 SUPPORTED_Asym_Pause); 1878 break; 1879 default: 1880 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 1881 return -EINVAL; 1882 } 1883 1884 tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; 1885 1886 phydev->advertising = phydev->supported; 1887 1888 return 0; 1889 } 1890 1891 static void tg3_phy_start(struct tg3 *tp) 1892 { 1893 struct phy_device *phydev; 1894 1895 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 1896 return; 1897 1898 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1899 1900 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 1901 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 1902 phydev->speed = tp->link_config.speed; 1903 phydev->duplex = tp->link_config.duplex; 1904 phydev->autoneg = tp->link_config.autoneg; 1905 phydev->advertising = tp->link_config.advertising; 1906 } 1907 1908 phy_start(phydev); 1909 1910 phy_start_aneg(phydev); 1911 } 1912 1913 static void tg3_phy_stop(struct tg3 *tp) 1914 { 1915 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 1916 return; 1917 1918 phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 1919 } 1920 1921 static void tg3_phy_fini(struct tg3 *tp) 1922 { 1923 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 1924 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 1925 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED; 1926 } 1927 } 1928 1929 static int tg3_phy_set_extloopbk(struct tg3 *tp) 1930 { 1931 int err; 1932 u32 val; 1933 1934 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 1935 return 0; 1936 1937 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 1938 /* Cannot do read-modify-write on 5401 */ 1939 err = tg3_phy_auxctl_write(tp, 1940 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 1941 MII_TG3_AUXCTL_ACTL_EXTLOOPBK | 1942 0x4c20); 1943 goto done; 1944 } 1945 1946 err = tg3_phy_auxctl_read(tp, 1947 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 1948 if (err) 1949 return err; 1950 1951 val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK; 1952 err = tg3_phy_auxctl_write(tp, 1953 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val); 1954 1955 done: 1956 return err; 1957 } 1958 1959 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable) 1960 { 1961 u32 phytest; 1962 1963 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 1964 u32 phy; 1965 1966 tg3_writephy(tp, MII_TG3_FET_TEST, 1967 phytest | MII_TG3_FET_SHADOW_EN); 1968 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) { 1969 if (enable) 1970 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD; 1971 else 1972 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD; 1973 tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy); 1974 } 1975 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 1976 } 1977 } 1978 1979 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable) 1980 { 1981 u32 reg; 1982 1983 if (!tg3_flag(tp, 5705_PLUS) || 1984 (tg3_flag(tp, 5717_PLUS) && 1985 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) 1986 return; 1987 1988 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 1989 tg3_phy_fet_toggle_apd(tp, enable); 1990 return; 1991 } 1992 1993 reg = MII_TG3_MISC_SHDW_WREN | 1994 MII_TG3_MISC_SHDW_SCR5_SEL | 1995 MII_TG3_MISC_SHDW_SCR5_LPED | 1996 MII_TG3_MISC_SHDW_SCR5_DLPTLM | 1997 MII_TG3_MISC_SHDW_SCR5_SDTL | 1998 MII_TG3_MISC_SHDW_SCR5_C125OE; 1999 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable) 2000 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD; 2001 2002 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg); 2003 2004 2005 reg = MII_TG3_MISC_SHDW_WREN | 2006 MII_TG3_MISC_SHDW_APD_SEL | 2007 MII_TG3_MISC_SHDW_APD_WKTM_84MS; 2008 if (enable) 2009 reg |= MII_TG3_MISC_SHDW_APD_ENABLE; 2010 2011 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg); 2012 } 2013 2014 static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable) 2015 { 2016 u32 phy; 2017 2018 if (!tg3_flag(tp, 5705_PLUS) || 2019 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 2020 return; 2021 2022 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2023 u32 ephy; 2024 2025 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) { 2026 u32 reg = MII_TG3_FET_SHDW_MISCCTRL; 2027 2028 tg3_writephy(tp, MII_TG3_FET_TEST, 2029 ephy | MII_TG3_FET_SHADOW_EN); 2030 if (!tg3_readphy(tp, reg, &phy)) { 2031 if (enable) 2032 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2033 else 2034 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2035 tg3_writephy(tp, reg, phy); 2036 } 2037 tg3_writephy(tp, MII_TG3_FET_TEST, ephy); 2038 } 2039 } else { 2040 int ret; 2041 2042 ret = tg3_phy_auxctl_read(tp, 2043 MII_TG3_AUXCTL_SHDWSEL_MISC, &phy); 2044 if (!ret) { 2045 if (enable) 2046 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2047 else 2048 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2049 tg3_phy_auxctl_write(tp, 2050 MII_TG3_AUXCTL_SHDWSEL_MISC, phy); 2051 } 2052 } 2053 } 2054 2055 static void tg3_phy_set_wirespeed(struct tg3 *tp) 2056 { 2057 int ret; 2058 u32 val; 2059 2060 if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) 2061 return; 2062 2063 ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val); 2064 if (!ret) 2065 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, 2066 val | MII_TG3_AUXCTL_MISC_WIRESPD_EN); 2067 } 2068 2069 static void tg3_phy_apply_otp(struct tg3 *tp) 2070 { 2071 u32 otp, phy; 2072 2073 if (!tp->phy_otp) 2074 return; 2075 2076 otp = tp->phy_otp; 2077 2078 if (TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) 2079 return; 2080 2081 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT); 2082 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT; 2083 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy); 2084 2085 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) | 2086 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT); 2087 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy); 2088 2089 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT); 2090 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ; 2091 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy); 2092 2093 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT); 2094 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy); 2095 2096 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT); 2097 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy); 2098 2099 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) | 2100 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT); 2101 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy); 2102 2103 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2104 } 2105 2106 static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up) 2107 { 2108 u32 val; 2109 2110 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2111 return; 2112 2113 tp->setlpicnt = 0; 2114 2115 if (tp->link_config.autoneg == AUTONEG_ENABLE && 2116 current_link_up == 1 && 2117 tp->link_config.active_duplex == DUPLEX_FULL && 2118 (tp->link_config.active_speed == SPEED_100 || 2119 tp->link_config.active_speed == SPEED_1000)) { 2120 u32 eeectl; 2121 2122 if (tp->link_config.active_speed == SPEED_1000) 2123 eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US; 2124 else 2125 eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US; 2126 2127 tw32(TG3_CPMU_EEE_CTRL, eeectl); 2128 2129 tg3_phy_cl45_read(tp, MDIO_MMD_AN, 2130 TG3_CL45_D7_EEERES_STAT, &val); 2131 2132 if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || 2133 val == TG3_CL45_D7_EEERES_STAT_LP_100TX) 2134 tp->setlpicnt = 2; 2135 } 2136 2137 if (!tp->setlpicnt) { 2138 if (current_link_up == 1 && 2139 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2140 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000); 2141 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2142 } 2143 2144 val = tr32(TG3_CPMU_EEE_MODE); 2145 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE); 2146 } 2147 } 2148 2149 static void tg3_phy_eee_enable(struct tg3 *tp) 2150 { 2151 u32 val; 2152 2153 if (tp->link_config.active_speed == SPEED_1000 && 2154 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2155 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2156 tg3_flag(tp, 57765_CLASS)) && 2157 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2158 val = MII_TG3_DSP_TAP26_ALNOKO | 2159 MII_TG3_DSP_TAP26_RMRXSTO; 2160 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 2161 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2162 } 2163 2164 val = tr32(TG3_CPMU_EEE_MODE); 2165 tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE); 2166 } 2167 2168 static int tg3_wait_macro_done(struct tg3 *tp) 2169 { 2170 int limit = 100; 2171 2172 while (limit--) { 2173 u32 tmp32; 2174 2175 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) { 2176 if ((tmp32 & 0x1000) == 0) 2177 break; 2178 } 2179 } 2180 if (limit < 0) 2181 return -EBUSY; 2182 2183 return 0; 2184 } 2185 2186 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp) 2187 { 2188 static const u32 test_pat[4][6] = { 2189 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 }, 2190 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 }, 2191 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 }, 2192 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 } 2193 }; 2194 int chan; 2195 2196 for (chan = 0; chan < 4; chan++) { 2197 int i; 2198 2199 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2200 (chan * 0x2000) | 0x0200); 2201 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2202 2203 for (i = 0; i < 6; i++) 2204 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 2205 test_pat[chan][i]); 2206 2207 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2208 if (tg3_wait_macro_done(tp)) { 2209 *resetp = 1; 2210 return -EBUSY; 2211 } 2212 2213 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2214 (chan * 0x2000) | 0x0200); 2215 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082); 2216 if (tg3_wait_macro_done(tp)) { 2217 *resetp = 1; 2218 return -EBUSY; 2219 } 2220 2221 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802); 2222 if (tg3_wait_macro_done(tp)) { 2223 *resetp = 1; 2224 return -EBUSY; 2225 } 2226 2227 for (i = 0; i < 6; i += 2) { 2228 u32 low, high; 2229 2230 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) || 2231 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) || 2232 tg3_wait_macro_done(tp)) { 2233 *resetp = 1; 2234 return -EBUSY; 2235 } 2236 low &= 0x7fff; 2237 high &= 0x000f; 2238 if (low != test_pat[chan][i] || 2239 high != test_pat[chan][i+1]) { 2240 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b); 2241 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001); 2242 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005); 2243 2244 return -EBUSY; 2245 } 2246 } 2247 } 2248 2249 return 0; 2250 } 2251 2252 static int tg3_phy_reset_chanpat(struct tg3 *tp) 2253 { 2254 int chan; 2255 2256 for (chan = 0; chan < 4; chan++) { 2257 int i; 2258 2259 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2260 (chan * 0x2000) | 0x0200); 2261 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2262 for (i = 0; i < 6; i++) 2263 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000); 2264 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2265 if (tg3_wait_macro_done(tp)) 2266 return -EBUSY; 2267 } 2268 2269 return 0; 2270 } 2271 2272 static int tg3_phy_reset_5703_4_5(struct tg3 *tp) 2273 { 2274 u32 reg32, phy9_orig; 2275 int retries, do_phy_reset, err; 2276 2277 retries = 10; 2278 do_phy_reset = 1; 2279 do { 2280 if (do_phy_reset) { 2281 err = tg3_bmcr_reset(tp); 2282 if (err) 2283 return err; 2284 do_phy_reset = 0; 2285 } 2286 2287 /* Disable transmitter and interrupt. */ 2288 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) 2289 continue; 2290 2291 reg32 |= 0x3000; 2292 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2293 2294 /* Set full-duplex, 1000 mbps. */ 2295 tg3_writephy(tp, MII_BMCR, 2296 BMCR_FULLDPLX | BMCR_SPEED1000); 2297 2298 /* Set to master mode. */ 2299 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig)) 2300 continue; 2301 2302 tg3_writephy(tp, MII_CTRL1000, 2303 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 2304 2305 err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp); 2306 if (err) 2307 return err; 2308 2309 /* Block the PHY control access. */ 2310 tg3_phydsp_write(tp, 0x8005, 0x0800); 2311 2312 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset); 2313 if (!err) 2314 break; 2315 } while (--retries); 2316 2317 err = tg3_phy_reset_chanpat(tp); 2318 if (err) 2319 return err; 2320 2321 tg3_phydsp_write(tp, 0x8005, 0x0000); 2322 2323 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200); 2324 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000); 2325 2326 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2327 2328 tg3_writephy(tp, MII_CTRL1000, phy9_orig); 2329 2330 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) { 2331 reg32 &= ~0x3000; 2332 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2333 } else if (!err) 2334 err = -EBUSY; 2335 2336 return err; 2337 } 2338 2339 /* This will reset the tigon3 PHY if there is no valid 2340 * link unless the FORCE argument is non-zero. 2341 */ 2342 static int tg3_phy_reset(struct tg3 *tp) 2343 { 2344 u32 val, cpmuctrl; 2345 int err; 2346 2347 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2348 val = tr32(GRC_MISC_CFG); 2349 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ); 2350 udelay(40); 2351 } 2352 err = tg3_readphy(tp, MII_BMSR, &val); 2353 err |= tg3_readphy(tp, MII_BMSR, &val); 2354 if (err != 0) 2355 return -EBUSY; 2356 2357 if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) { 2358 netif_carrier_off(tp->dev); 2359 tg3_link_report(tp); 2360 } 2361 2362 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 2363 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 2364 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 2365 err = tg3_phy_reset_5703_4_5(tp); 2366 if (err) 2367 return err; 2368 goto out; 2369 } 2370 2371 cpmuctrl = 0; 2372 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 2373 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) { 2374 cpmuctrl = tr32(TG3_CPMU_CTRL); 2375 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) 2376 tw32(TG3_CPMU_CTRL, 2377 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY); 2378 } 2379 2380 err = tg3_bmcr_reset(tp); 2381 if (err) 2382 return err; 2383 2384 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) { 2385 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz; 2386 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val); 2387 2388 tw32(TG3_CPMU_CTRL, cpmuctrl); 2389 } 2390 2391 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || 2392 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) { 2393 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2394 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) == 2395 CPMU_LSPD_1000MB_MACCLK_12_5) { 2396 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2397 udelay(40); 2398 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2399 } 2400 } 2401 2402 if (tg3_flag(tp, 5717_PLUS) && 2403 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) 2404 return 0; 2405 2406 tg3_phy_apply_otp(tp); 2407 2408 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 2409 tg3_phy_toggle_apd(tp, true); 2410 else 2411 tg3_phy_toggle_apd(tp, false); 2412 2413 out: 2414 if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) && 2415 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2416 tg3_phydsp_write(tp, 0x201f, 0x2aaa); 2417 tg3_phydsp_write(tp, 0x000a, 0x0323); 2418 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2419 } 2420 2421 if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) { 2422 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2423 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2424 } 2425 2426 if (tp->phy_flags & TG3_PHYFLG_BER_BUG) { 2427 if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2428 tg3_phydsp_write(tp, 0x000a, 0x310b); 2429 tg3_phydsp_write(tp, 0x201f, 0x9506); 2430 tg3_phydsp_write(tp, 0x401f, 0x14e2); 2431 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2432 } 2433 } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) { 2434 if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2435 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a); 2436 if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) { 2437 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b); 2438 tg3_writephy(tp, MII_TG3_TEST1, 2439 MII_TG3_TEST1_TRIM_EN | 0x4); 2440 } else 2441 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b); 2442 2443 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2444 } 2445 } 2446 2447 /* Set Extended packet length bit (bit 14) on all chips that */ 2448 /* support jumbo frames */ 2449 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2450 /* Cannot do read-modify-write on 5401 */ 2451 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 2452 } else if (tg3_flag(tp, JUMBO_CAPABLE)) { 2453 /* Set bit 14 with read-modify-write to preserve other bits */ 2454 err = tg3_phy_auxctl_read(tp, 2455 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2456 if (!err) 2457 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2458 val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN); 2459 } 2460 2461 /* Set phy register 0x10 bit 0 to high fifo elasticity to support 2462 * jumbo frames transmission. 2463 */ 2464 if (tg3_flag(tp, JUMBO_CAPABLE)) { 2465 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val)) 2466 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2467 val | MII_TG3_EXT_CTRL_FIFO_ELASTIC); 2468 } 2469 2470 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2471 /* adjust output voltage */ 2472 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); 2473 } 2474 2475 tg3_phy_toggle_automdix(tp, 1); 2476 tg3_phy_set_wirespeed(tp); 2477 return 0; 2478 } 2479 2480 #define TG3_GPIO_MSG_DRVR_PRES 0x00000001 2481 #define TG3_GPIO_MSG_NEED_VAUX 0x00000002 2482 #define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \ 2483 TG3_GPIO_MSG_NEED_VAUX) 2484 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \ 2485 ((TG3_GPIO_MSG_DRVR_PRES << 0) | \ 2486 (TG3_GPIO_MSG_DRVR_PRES << 4) | \ 2487 (TG3_GPIO_MSG_DRVR_PRES << 8) | \ 2488 (TG3_GPIO_MSG_DRVR_PRES << 12)) 2489 2490 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \ 2491 ((TG3_GPIO_MSG_NEED_VAUX << 0) | \ 2492 (TG3_GPIO_MSG_NEED_VAUX << 4) | \ 2493 (TG3_GPIO_MSG_NEED_VAUX << 8) | \ 2494 (TG3_GPIO_MSG_NEED_VAUX << 12)) 2495 2496 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat) 2497 { 2498 u32 status, shift; 2499 2500 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2501 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 2502 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG); 2503 else 2504 status = tr32(TG3_CPMU_DRV_STATUS); 2505 2506 shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn; 2507 status &= ~(TG3_GPIO_MSG_MASK << shift); 2508 status |= (newstat << shift); 2509 2510 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2511 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 2512 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status); 2513 else 2514 tw32(TG3_CPMU_DRV_STATUS, status); 2515 2516 return status >> TG3_APE_GPIO_MSG_SHIFT; 2517 } 2518 2519 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp) 2520 { 2521 if (!tg3_flag(tp, IS_NIC)) 2522 return 0; 2523 2524 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2525 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2526 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 2527 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2528 return -EIO; 2529 2530 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES); 2531 2532 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2533 TG3_GRC_LCLCTL_PWRSW_DELAY); 2534 2535 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2536 } else { 2537 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2538 TG3_GRC_LCLCTL_PWRSW_DELAY); 2539 } 2540 2541 return 0; 2542 } 2543 2544 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp) 2545 { 2546 u32 grc_local_ctrl; 2547 2548 if (!tg3_flag(tp, IS_NIC) || 2549 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2550 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) 2551 return; 2552 2553 grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1; 2554 2555 tw32_wait_f(GRC_LOCAL_CTRL, 2556 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2557 TG3_GRC_LCLCTL_PWRSW_DELAY); 2558 2559 tw32_wait_f(GRC_LOCAL_CTRL, 2560 grc_local_ctrl, 2561 TG3_GRC_LCLCTL_PWRSW_DELAY); 2562 2563 tw32_wait_f(GRC_LOCAL_CTRL, 2564 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2565 TG3_GRC_LCLCTL_PWRSW_DELAY); 2566 } 2567 2568 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp) 2569 { 2570 if (!tg3_flag(tp, IS_NIC)) 2571 return; 2572 2573 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2574 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 2575 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2576 (GRC_LCLCTRL_GPIO_OE0 | 2577 GRC_LCLCTRL_GPIO_OE1 | 2578 GRC_LCLCTRL_GPIO_OE2 | 2579 GRC_LCLCTRL_GPIO_OUTPUT0 | 2580 GRC_LCLCTRL_GPIO_OUTPUT1), 2581 TG3_GRC_LCLCTL_PWRSW_DELAY); 2582 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 2583 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 2584 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */ 2585 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | 2586 GRC_LCLCTRL_GPIO_OE1 | 2587 GRC_LCLCTRL_GPIO_OE2 | 2588 GRC_LCLCTRL_GPIO_OUTPUT0 | 2589 GRC_LCLCTRL_GPIO_OUTPUT1 | 2590 tp->grc_local_ctrl; 2591 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2592 TG3_GRC_LCLCTL_PWRSW_DELAY); 2593 2594 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2; 2595 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2596 TG3_GRC_LCLCTL_PWRSW_DELAY); 2597 2598 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0; 2599 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2600 TG3_GRC_LCLCTL_PWRSW_DELAY); 2601 } else { 2602 u32 no_gpio2; 2603 u32 grc_local_ctrl = 0; 2604 2605 /* Workaround to prevent overdrawing Amps. */ 2606 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 2607 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 2608 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2609 grc_local_ctrl, 2610 TG3_GRC_LCLCTL_PWRSW_DELAY); 2611 } 2612 2613 /* On 5753 and variants, GPIO2 cannot be used. */ 2614 no_gpio2 = tp->nic_sram_data_cfg & 2615 NIC_SRAM_DATA_CFG_NO_GPIO2; 2616 2617 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 2618 GRC_LCLCTRL_GPIO_OE1 | 2619 GRC_LCLCTRL_GPIO_OE2 | 2620 GRC_LCLCTRL_GPIO_OUTPUT1 | 2621 GRC_LCLCTRL_GPIO_OUTPUT2; 2622 if (no_gpio2) { 2623 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 | 2624 GRC_LCLCTRL_GPIO_OUTPUT2); 2625 } 2626 tw32_wait_f(GRC_LOCAL_CTRL, 2627 tp->grc_local_ctrl | grc_local_ctrl, 2628 TG3_GRC_LCLCTL_PWRSW_DELAY); 2629 2630 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0; 2631 2632 tw32_wait_f(GRC_LOCAL_CTRL, 2633 tp->grc_local_ctrl | grc_local_ctrl, 2634 TG3_GRC_LCLCTL_PWRSW_DELAY); 2635 2636 if (!no_gpio2) { 2637 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2; 2638 tw32_wait_f(GRC_LOCAL_CTRL, 2639 tp->grc_local_ctrl | grc_local_ctrl, 2640 TG3_GRC_LCLCTL_PWRSW_DELAY); 2641 } 2642 } 2643 } 2644 2645 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable) 2646 { 2647 u32 msg = 0; 2648 2649 /* Serialize power state transitions */ 2650 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2651 return; 2652 2653 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable) 2654 msg = TG3_GPIO_MSG_NEED_VAUX; 2655 2656 msg = tg3_set_function_status(tp, msg); 2657 2658 if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK) 2659 goto done; 2660 2661 if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK) 2662 tg3_pwrsrc_switch_to_vaux(tp); 2663 else 2664 tg3_pwrsrc_die_with_vmain(tp); 2665 2666 done: 2667 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2668 } 2669 2670 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol) 2671 { 2672 bool need_vaux = false; 2673 2674 /* The GPIOs do something completely different on 57765. */ 2675 if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS)) 2676 return; 2677 2678 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2679 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2680 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 2681 tg3_frob_aux_power_5717(tp, include_wol ? 2682 tg3_flag(tp, WOL_ENABLE) != 0 : 0); 2683 return; 2684 } 2685 2686 if (tp->pdev_peer && tp->pdev_peer != tp->pdev) { 2687 struct net_device *dev_peer; 2688 2689 dev_peer = pci_get_drvdata(tp->pdev_peer); 2690 2691 /* remove_one() may have been run on the peer. */ 2692 if (dev_peer) { 2693 struct tg3 *tp_peer = netdev_priv(dev_peer); 2694 2695 if (tg3_flag(tp_peer, INIT_COMPLETE)) 2696 return; 2697 2698 if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) || 2699 tg3_flag(tp_peer, ENABLE_ASF)) 2700 need_vaux = true; 2701 } 2702 } 2703 2704 if ((include_wol && tg3_flag(tp, WOL_ENABLE)) || 2705 tg3_flag(tp, ENABLE_ASF)) 2706 need_vaux = true; 2707 2708 if (need_vaux) 2709 tg3_pwrsrc_switch_to_vaux(tp); 2710 else 2711 tg3_pwrsrc_die_with_vmain(tp); 2712 } 2713 2714 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed) 2715 { 2716 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2) 2717 return 1; 2718 else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) { 2719 if (speed != SPEED_10) 2720 return 1; 2721 } else if (speed == SPEED_10) 2722 return 1; 2723 2724 return 0; 2725 } 2726 2727 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) 2728 { 2729 u32 val; 2730 2731 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 2732 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 2733 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL); 2734 u32 serdes_cfg = tr32(MAC_SERDES_CFG); 2735 2736 sg_dig_ctrl |= 2737 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET; 2738 tw32(SG_DIG_CTRL, sg_dig_ctrl); 2739 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15)); 2740 } 2741 return; 2742 } 2743 2744 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2745 tg3_bmcr_reset(tp); 2746 val = tr32(GRC_MISC_CFG); 2747 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ); 2748 udelay(40); 2749 return; 2750 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2751 u32 phytest; 2752 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2753 u32 phy; 2754 2755 tg3_writephy(tp, MII_ADVERTISE, 0); 2756 tg3_writephy(tp, MII_BMCR, 2757 BMCR_ANENABLE | BMCR_ANRESTART); 2758 2759 tg3_writephy(tp, MII_TG3_FET_TEST, 2760 phytest | MII_TG3_FET_SHADOW_EN); 2761 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) { 2762 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD; 2763 tg3_writephy(tp, 2764 MII_TG3_FET_SHDW_AUXMODE4, 2765 phy); 2766 } 2767 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2768 } 2769 return; 2770 } else if (do_low_power) { 2771 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2772 MII_TG3_EXT_CTRL_FORCE_LED_OFF); 2773 2774 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR | 2775 MII_TG3_AUXCTL_PCTL_SPR_ISOLATE | 2776 MII_TG3_AUXCTL_PCTL_VREG_11V; 2777 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val); 2778 } 2779 2780 /* The PHY should not be powered down on some chips because 2781 * of bugs. 2782 */ 2783 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2784 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 2785 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 && 2786 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) || 2787 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 && 2788 !tp->pci_fn)) 2789 return; 2790 2791 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || 2792 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) { 2793 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2794 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2795 val |= CPMU_LSPD_1000MB_MACCLK_12_5; 2796 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2797 } 2798 2799 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN); 2800 } 2801 2802 /* tp->lock is held. */ 2803 static int tg3_nvram_lock(struct tg3 *tp) 2804 { 2805 if (tg3_flag(tp, NVRAM)) { 2806 int i; 2807 2808 if (tp->nvram_lock_cnt == 0) { 2809 tw32(NVRAM_SWARB, SWARB_REQ_SET1); 2810 for (i = 0; i < 8000; i++) { 2811 if (tr32(NVRAM_SWARB) & SWARB_GNT1) 2812 break; 2813 udelay(20); 2814 } 2815 if (i == 8000) { 2816 tw32(NVRAM_SWARB, SWARB_REQ_CLR1); 2817 return -ENODEV; 2818 } 2819 } 2820 tp->nvram_lock_cnt++; 2821 } 2822 return 0; 2823 } 2824 2825 /* tp->lock is held. */ 2826 static void tg3_nvram_unlock(struct tg3 *tp) 2827 { 2828 if (tg3_flag(tp, NVRAM)) { 2829 if (tp->nvram_lock_cnt > 0) 2830 tp->nvram_lock_cnt--; 2831 if (tp->nvram_lock_cnt == 0) 2832 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1); 2833 } 2834 } 2835 2836 /* tp->lock is held. */ 2837 static void tg3_enable_nvram_access(struct tg3 *tp) 2838 { 2839 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 2840 u32 nvaccess = tr32(NVRAM_ACCESS); 2841 2842 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); 2843 } 2844 } 2845 2846 /* tp->lock is held. */ 2847 static void tg3_disable_nvram_access(struct tg3 *tp) 2848 { 2849 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 2850 u32 nvaccess = tr32(NVRAM_ACCESS); 2851 2852 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); 2853 } 2854 } 2855 2856 static int tg3_nvram_read_using_eeprom(struct tg3 *tp, 2857 u32 offset, u32 *val) 2858 { 2859 u32 tmp; 2860 int i; 2861 2862 if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0) 2863 return -EINVAL; 2864 2865 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK | 2866 EEPROM_ADDR_DEVID_MASK | 2867 EEPROM_ADDR_READ); 2868 tw32(GRC_EEPROM_ADDR, 2869 tmp | 2870 (0 << EEPROM_ADDR_DEVID_SHIFT) | 2871 ((offset << EEPROM_ADDR_ADDR_SHIFT) & 2872 EEPROM_ADDR_ADDR_MASK) | 2873 EEPROM_ADDR_READ | EEPROM_ADDR_START); 2874 2875 for (i = 0; i < 1000; i++) { 2876 tmp = tr32(GRC_EEPROM_ADDR); 2877 2878 if (tmp & EEPROM_ADDR_COMPLETE) 2879 break; 2880 msleep(1); 2881 } 2882 if (!(tmp & EEPROM_ADDR_COMPLETE)) 2883 return -EBUSY; 2884 2885 tmp = tr32(GRC_EEPROM_DATA); 2886 2887 /* 2888 * The data will always be opposite the native endian 2889 * format. Perform a blind byteswap to compensate. 2890 */ 2891 *val = swab32(tmp); 2892 2893 return 0; 2894 } 2895 2896 #define NVRAM_CMD_TIMEOUT 10000 2897 2898 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd) 2899 { 2900 int i; 2901 2902 tw32(NVRAM_CMD, nvram_cmd); 2903 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) { 2904 udelay(10); 2905 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) { 2906 udelay(10); 2907 break; 2908 } 2909 } 2910 2911 if (i == NVRAM_CMD_TIMEOUT) 2912 return -EBUSY; 2913 2914 return 0; 2915 } 2916 2917 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr) 2918 { 2919 if (tg3_flag(tp, NVRAM) && 2920 tg3_flag(tp, NVRAM_BUFFERED) && 2921 tg3_flag(tp, FLASH) && 2922 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 2923 (tp->nvram_jedecnum == JEDEC_ATMEL)) 2924 2925 addr = ((addr / tp->nvram_pagesize) << 2926 ATMEL_AT45DB0X1B_PAGE_POS) + 2927 (addr % tp->nvram_pagesize); 2928 2929 return addr; 2930 } 2931 2932 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr) 2933 { 2934 if (tg3_flag(tp, NVRAM) && 2935 tg3_flag(tp, NVRAM_BUFFERED) && 2936 tg3_flag(tp, FLASH) && 2937 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 2938 (tp->nvram_jedecnum == JEDEC_ATMEL)) 2939 2940 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) * 2941 tp->nvram_pagesize) + 2942 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1)); 2943 2944 return addr; 2945 } 2946 2947 /* NOTE: Data read in from NVRAM is byteswapped according to 2948 * the byteswapping settings for all other register accesses. 2949 * tg3 devices are BE devices, so on a BE machine, the data 2950 * returned will be exactly as it is seen in NVRAM. On a LE 2951 * machine, the 32-bit value will be byteswapped. 2952 */ 2953 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) 2954 { 2955 int ret; 2956 2957 if (!tg3_flag(tp, NVRAM)) 2958 return tg3_nvram_read_using_eeprom(tp, offset, val); 2959 2960 offset = tg3_nvram_phys_addr(tp, offset); 2961 2962 if (offset > NVRAM_ADDR_MSK) 2963 return -EINVAL; 2964 2965 ret = tg3_nvram_lock(tp); 2966 if (ret) 2967 return ret; 2968 2969 tg3_enable_nvram_access(tp); 2970 2971 tw32(NVRAM_ADDR, offset); 2972 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO | 2973 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE); 2974 2975 if (ret == 0) 2976 *val = tr32(NVRAM_RDDATA); 2977 2978 tg3_disable_nvram_access(tp); 2979 2980 tg3_nvram_unlock(tp); 2981 2982 return ret; 2983 } 2984 2985 /* Ensures NVRAM data is in bytestream format. */ 2986 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val) 2987 { 2988 u32 v; 2989 int res = tg3_nvram_read(tp, offset, &v); 2990 if (!res) 2991 *val = cpu_to_be32(v); 2992 return res; 2993 } 2994 2995 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp, 2996 u32 offset, u32 len, u8 *buf) 2997 { 2998 int i, j, rc = 0; 2999 u32 val; 3000 3001 for (i = 0; i < len; i += 4) { 3002 u32 addr; 3003 __be32 data; 3004 3005 addr = offset + i; 3006 3007 memcpy(&data, buf + i, 4); 3008 3009 /* 3010 * The SEEPROM interface expects the data to always be opposite 3011 * the native endian format. We accomplish this by reversing 3012 * all the operations that would have been performed on the 3013 * data from a call to tg3_nvram_read_be32(). 3014 */ 3015 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data))); 3016 3017 val = tr32(GRC_EEPROM_ADDR); 3018 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE); 3019 3020 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK | 3021 EEPROM_ADDR_READ); 3022 tw32(GRC_EEPROM_ADDR, val | 3023 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3024 (addr & EEPROM_ADDR_ADDR_MASK) | 3025 EEPROM_ADDR_START | 3026 EEPROM_ADDR_WRITE); 3027 3028 for (j = 0; j < 1000; j++) { 3029 val = tr32(GRC_EEPROM_ADDR); 3030 3031 if (val & EEPROM_ADDR_COMPLETE) 3032 break; 3033 msleep(1); 3034 } 3035 if (!(val & EEPROM_ADDR_COMPLETE)) { 3036 rc = -EBUSY; 3037 break; 3038 } 3039 } 3040 3041 return rc; 3042 } 3043 3044 /* offset and length are dword aligned */ 3045 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len, 3046 u8 *buf) 3047 { 3048 int ret = 0; 3049 u32 pagesize = tp->nvram_pagesize; 3050 u32 pagemask = pagesize - 1; 3051 u32 nvram_cmd; 3052 u8 *tmp; 3053 3054 tmp = kmalloc(pagesize, GFP_KERNEL); 3055 if (tmp == NULL) 3056 return -ENOMEM; 3057 3058 while (len) { 3059 int j; 3060 u32 phy_addr, page_off, size; 3061 3062 phy_addr = offset & ~pagemask; 3063 3064 for (j = 0; j < pagesize; j += 4) { 3065 ret = tg3_nvram_read_be32(tp, phy_addr + j, 3066 (__be32 *) (tmp + j)); 3067 if (ret) 3068 break; 3069 } 3070 if (ret) 3071 break; 3072 3073 page_off = offset & pagemask; 3074 size = pagesize; 3075 if (len < size) 3076 size = len; 3077 3078 len -= size; 3079 3080 memcpy(tmp + page_off, buf, size); 3081 3082 offset = offset + (pagesize - page_off); 3083 3084 tg3_enable_nvram_access(tp); 3085 3086 /* 3087 * Before we can erase the flash page, we need 3088 * to issue a special "write enable" command. 3089 */ 3090 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3091 3092 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3093 break; 3094 3095 /* Erase the target page */ 3096 tw32(NVRAM_ADDR, phy_addr); 3097 3098 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR | 3099 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE; 3100 3101 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3102 break; 3103 3104 /* Issue another write enable to start the write. */ 3105 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3106 3107 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3108 break; 3109 3110 for (j = 0; j < pagesize; j += 4) { 3111 __be32 data; 3112 3113 data = *((__be32 *) (tmp + j)); 3114 3115 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3116 3117 tw32(NVRAM_ADDR, phy_addr + j); 3118 3119 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | 3120 NVRAM_CMD_WR; 3121 3122 if (j == 0) 3123 nvram_cmd |= NVRAM_CMD_FIRST; 3124 else if (j == (pagesize - 4)) 3125 nvram_cmd |= NVRAM_CMD_LAST; 3126 3127 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3128 if (ret) 3129 break; 3130 } 3131 if (ret) 3132 break; 3133 } 3134 3135 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3136 tg3_nvram_exec_cmd(tp, nvram_cmd); 3137 3138 kfree(tmp); 3139 3140 return ret; 3141 } 3142 3143 /* offset and length are dword aligned */ 3144 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len, 3145 u8 *buf) 3146 { 3147 int i, ret = 0; 3148 3149 for (i = 0; i < len; i += 4, offset += 4) { 3150 u32 page_off, phy_addr, nvram_cmd; 3151 __be32 data; 3152 3153 memcpy(&data, buf + i, 4); 3154 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3155 3156 page_off = offset % tp->nvram_pagesize; 3157 3158 phy_addr = tg3_nvram_phys_addr(tp, offset); 3159 3160 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR; 3161 3162 if (page_off == 0 || i == 0) 3163 nvram_cmd |= NVRAM_CMD_FIRST; 3164 if (page_off == (tp->nvram_pagesize - 4)) 3165 nvram_cmd |= NVRAM_CMD_LAST; 3166 3167 if (i == (len - 4)) 3168 nvram_cmd |= NVRAM_CMD_LAST; 3169 3170 if ((nvram_cmd & NVRAM_CMD_FIRST) || 3171 !tg3_flag(tp, FLASH) || 3172 !tg3_flag(tp, 57765_PLUS)) 3173 tw32(NVRAM_ADDR, phy_addr); 3174 3175 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 && 3176 !tg3_flag(tp, 5755_PLUS) && 3177 (tp->nvram_jedecnum == JEDEC_ST) && 3178 (nvram_cmd & NVRAM_CMD_FIRST)) { 3179 u32 cmd; 3180 3181 cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3182 ret = tg3_nvram_exec_cmd(tp, cmd); 3183 if (ret) 3184 break; 3185 } 3186 if (!tg3_flag(tp, FLASH)) { 3187 /* We always do complete word writes to eeprom. */ 3188 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST); 3189 } 3190 3191 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3192 if (ret) 3193 break; 3194 } 3195 return ret; 3196 } 3197 3198 /* offset and length are dword aligned */ 3199 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf) 3200 { 3201 int ret; 3202 3203 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3204 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & 3205 ~GRC_LCLCTRL_GPIO_OUTPUT1); 3206 udelay(40); 3207 } 3208 3209 if (!tg3_flag(tp, NVRAM)) { 3210 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf); 3211 } else { 3212 u32 grc_mode; 3213 3214 ret = tg3_nvram_lock(tp); 3215 if (ret) 3216 return ret; 3217 3218 tg3_enable_nvram_access(tp); 3219 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) 3220 tw32(NVRAM_WRITE1, 0x406); 3221 3222 grc_mode = tr32(GRC_MODE); 3223 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE); 3224 3225 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) { 3226 ret = tg3_nvram_write_block_buffered(tp, offset, len, 3227 buf); 3228 } else { 3229 ret = tg3_nvram_write_block_unbuffered(tp, offset, len, 3230 buf); 3231 } 3232 3233 grc_mode = tr32(GRC_MODE); 3234 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE); 3235 3236 tg3_disable_nvram_access(tp); 3237 tg3_nvram_unlock(tp); 3238 } 3239 3240 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3241 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 3242 udelay(40); 3243 } 3244 3245 return ret; 3246 } 3247 3248 #define RX_CPU_SCRATCH_BASE 0x30000 3249 #define RX_CPU_SCRATCH_SIZE 0x04000 3250 #define TX_CPU_SCRATCH_BASE 0x34000 3251 #define TX_CPU_SCRATCH_SIZE 0x04000 3252 3253 /* tp->lock is held. */ 3254 static int tg3_halt_cpu(struct tg3 *tp, u32 offset) 3255 { 3256 int i; 3257 3258 BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)); 3259 3260 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 3261 u32 val = tr32(GRC_VCPU_EXT_CTRL); 3262 3263 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU); 3264 return 0; 3265 } 3266 if (offset == RX_CPU_BASE) { 3267 for (i = 0; i < 10000; i++) { 3268 tw32(offset + CPU_STATE, 0xffffffff); 3269 tw32(offset + CPU_MODE, CPU_MODE_HALT); 3270 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT) 3271 break; 3272 } 3273 3274 tw32(offset + CPU_STATE, 0xffffffff); 3275 tw32_f(offset + CPU_MODE, CPU_MODE_HALT); 3276 udelay(10); 3277 } else { 3278 for (i = 0; i < 10000; i++) { 3279 tw32(offset + CPU_STATE, 0xffffffff); 3280 tw32(offset + CPU_MODE, CPU_MODE_HALT); 3281 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT) 3282 break; 3283 } 3284 } 3285 3286 if (i >= 10000) { 3287 netdev_err(tp->dev, "%s timed out, %s CPU\n", 3288 __func__, offset == RX_CPU_BASE ? "RX" : "TX"); 3289 return -ENODEV; 3290 } 3291 3292 /* Clear firmware's nvram arbitration. */ 3293 if (tg3_flag(tp, NVRAM)) 3294 tw32(NVRAM_SWARB, SWARB_REQ_CLR0); 3295 return 0; 3296 } 3297 3298 struct fw_info { 3299 unsigned int fw_base; 3300 unsigned int fw_len; 3301 const __be32 *fw_data; 3302 }; 3303 3304 /* tp->lock is held. */ 3305 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, 3306 u32 cpu_scratch_base, int cpu_scratch_size, 3307 struct fw_info *info) 3308 { 3309 int err, lock_err, i; 3310 void (*write_op)(struct tg3 *, u32, u32); 3311 3312 if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) { 3313 netdev_err(tp->dev, 3314 "%s: Trying to load TX cpu firmware which is 5705\n", 3315 __func__); 3316 return -EINVAL; 3317 } 3318 3319 if (tg3_flag(tp, 5705_PLUS)) 3320 write_op = tg3_write_mem; 3321 else 3322 write_op = tg3_write_indirect_reg32; 3323 3324 /* It is possible that bootcode is still loading at this point. 3325 * Get the nvram lock first before halting the cpu. 3326 */ 3327 lock_err = tg3_nvram_lock(tp); 3328 err = tg3_halt_cpu(tp, cpu_base); 3329 if (!lock_err) 3330 tg3_nvram_unlock(tp); 3331 if (err) 3332 goto out; 3333 3334 for (i = 0; i < cpu_scratch_size; i += sizeof(u32)) 3335 write_op(tp, cpu_scratch_base + i, 0); 3336 tw32(cpu_base + CPU_STATE, 0xffffffff); 3337 tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT); 3338 for (i = 0; i < (info->fw_len / sizeof(u32)); i++) 3339 write_op(tp, (cpu_scratch_base + 3340 (info->fw_base & 0xffff) + 3341 (i * sizeof(u32))), 3342 be32_to_cpu(info->fw_data[i])); 3343 3344 err = 0; 3345 3346 out: 3347 return err; 3348 } 3349 3350 /* tp->lock is held. */ 3351 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp) 3352 { 3353 struct fw_info info; 3354 const __be32 *fw_data; 3355 int err, i; 3356 3357 fw_data = (void *)tp->fw->data; 3358 3359 /* Firmware blob starts with version numbers, followed by 3360 start address and length. We are setting complete length. 3361 length = end_address_of_bss - start_address_of_text. 3362 Remainder is the blob to be loaded contiguously 3363 from start address. */ 3364 3365 info.fw_base = be32_to_cpu(fw_data[1]); 3366 info.fw_len = tp->fw->size - 12; 3367 info.fw_data = &fw_data[3]; 3368 3369 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE, 3370 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE, 3371 &info); 3372 if (err) 3373 return err; 3374 3375 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE, 3376 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE, 3377 &info); 3378 if (err) 3379 return err; 3380 3381 /* Now startup only the RX cpu. */ 3382 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3383 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base); 3384 3385 for (i = 0; i < 5; i++) { 3386 if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base) 3387 break; 3388 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3389 tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT); 3390 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base); 3391 udelay(1000); 3392 } 3393 if (i >= 5) { 3394 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x " 3395 "should be %08x\n", __func__, 3396 tr32(RX_CPU_BASE + CPU_PC), info.fw_base); 3397 return -ENODEV; 3398 } 3399 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3400 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000); 3401 3402 return 0; 3403 } 3404 3405 /* tp->lock is held. */ 3406 static int tg3_load_tso_firmware(struct tg3 *tp) 3407 { 3408 struct fw_info info; 3409 const __be32 *fw_data; 3410 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size; 3411 int err, i; 3412 3413 if (tg3_flag(tp, HW_TSO_1) || 3414 tg3_flag(tp, HW_TSO_2) || 3415 tg3_flag(tp, HW_TSO_3)) 3416 return 0; 3417 3418 fw_data = (void *)tp->fw->data; 3419 3420 /* Firmware blob starts with version numbers, followed by 3421 start address and length. We are setting complete length. 3422 length = end_address_of_bss - start_address_of_text. 3423 Remainder is the blob to be loaded contiguously 3424 from start address. */ 3425 3426 info.fw_base = be32_to_cpu(fw_data[1]); 3427 cpu_scratch_size = tp->fw_len; 3428 info.fw_len = tp->fw->size - 12; 3429 info.fw_data = &fw_data[3]; 3430 3431 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 3432 cpu_base = RX_CPU_BASE; 3433 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705; 3434 } else { 3435 cpu_base = TX_CPU_BASE; 3436 cpu_scratch_base = TX_CPU_SCRATCH_BASE; 3437 cpu_scratch_size = TX_CPU_SCRATCH_SIZE; 3438 } 3439 3440 err = tg3_load_firmware_cpu(tp, cpu_base, 3441 cpu_scratch_base, cpu_scratch_size, 3442 &info); 3443 if (err) 3444 return err; 3445 3446 /* Now startup the cpu. */ 3447 tw32(cpu_base + CPU_STATE, 0xffffffff); 3448 tw32_f(cpu_base + CPU_PC, info.fw_base); 3449 3450 for (i = 0; i < 5; i++) { 3451 if (tr32(cpu_base + CPU_PC) == info.fw_base) 3452 break; 3453 tw32(cpu_base + CPU_STATE, 0xffffffff); 3454 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3455 tw32_f(cpu_base + CPU_PC, info.fw_base); 3456 udelay(1000); 3457 } 3458 if (i >= 5) { 3459 netdev_err(tp->dev, 3460 "%s fails to set CPU PC, is %08x should be %08x\n", 3461 __func__, tr32(cpu_base + CPU_PC), info.fw_base); 3462 return -ENODEV; 3463 } 3464 tw32(cpu_base + CPU_STATE, 0xffffffff); 3465 tw32_f(cpu_base + CPU_MODE, 0x00000000); 3466 return 0; 3467 } 3468 3469 3470 /* tp->lock is held. */ 3471 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1) 3472 { 3473 u32 addr_high, addr_low; 3474 int i; 3475 3476 addr_high = ((tp->dev->dev_addr[0] << 8) | 3477 tp->dev->dev_addr[1]); 3478 addr_low = ((tp->dev->dev_addr[2] << 24) | 3479 (tp->dev->dev_addr[3] << 16) | 3480 (tp->dev->dev_addr[4] << 8) | 3481 (tp->dev->dev_addr[5] << 0)); 3482 for (i = 0; i < 4; i++) { 3483 if (i == 1 && skip_mac_1) 3484 continue; 3485 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high); 3486 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low); 3487 } 3488 3489 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 3490 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 3491 for (i = 0; i < 12; i++) { 3492 tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high); 3493 tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low); 3494 } 3495 } 3496 3497 addr_high = (tp->dev->dev_addr[0] + 3498 tp->dev->dev_addr[1] + 3499 tp->dev->dev_addr[2] + 3500 tp->dev->dev_addr[3] + 3501 tp->dev->dev_addr[4] + 3502 tp->dev->dev_addr[5]) & 3503 TX_BACKOFF_SEED_MASK; 3504 tw32(MAC_TX_BACKOFF_SEED, addr_high); 3505 } 3506 3507 static void tg3_enable_register_access(struct tg3 *tp) 3508 { 3509 /* 3510 * Make sure register accesses (indirect or otherwise) will function 3511 * correctly. 3512 */ 3513 pci_write_config_dword(tp->pdev, 3514 TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl); 3515 } 3516 3517 static int tg3_power_up(struct tg3 *tp) 3518 { 3519 int err; 3520 3521 tg3_enable_register_access(tp); 3522 3523 err = pci_set_power_state(tp->pdev, PCI_D0); 3524 if (!err) { 3525 /* Switch out of Vaux if it is a NIC */ 3526 tg3_pwrsrc_switch_to_vmain(tp); 3527 } else { 3528 netdev_err(tp->dev, "Transition to D0 failed\n"); 3529 } 3530 3531 return err; 3532 } 3533 3534 static int tg3_setup_phy(struct tg3 *, int); 3535 3536 static int tg3_power_down_prepare(struct tg3 *tp) 3537 { 3538 u32 misc_host_ctrl; 3539 bool device_should_wake, do_low_power; 3540 3541 tg3_enable_register_access(tp); 3542 3543 /* Restore the CLKREQ setting. */ 3544 if (tg3_flag(tp, CLKREQ_BUG)) { 3545 u16 lnkctl; 3546 3547 pci_read_config_word(tp->pdev, 3548 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 3549 &lnkctl); 3550 lnkctl |= PCI_EXP_LNKCTL_CLKREQ_EN; 3551 pci_write_config_word(tp->pdev, 3552 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 3553 lnkctl); 3554 } 3555 3556 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 3557 tw32(TG3PCI_MISC_HOST_CTRL, 3558 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT); 3559 3560 device_should_wake = device_may_wakeup(&tp->pdev->dev) && 3561 tg3_flag(tp, WOL_ENABLE); 3562 3563 if (tg3_flag(tp, USE_PHYLIB)) { 3564 do_low_power = false; 3565 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) && 3566 !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 3567 struct phy_device *phydev; 3568 u32 phyid, advertising; 3569 3570 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 3571 3572 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 3573 3574 tp->link_config.speed = phydev->speed; 3575 tp->link_config.duplex = phydev->duplex; 3576 tp->link_config.autoneg = phydev->autoneg; 3577 tp->link_config.advertising = phydev->advertising; 3578 3579 advertising = ADVERTISED_TP | 3580 ADVERTISED_Pause | 3581 ADVERTISED_Autoneg | 3582 ADVERTISED_10baseT_Half; 3583 3584 if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) { 3585 if (tg3_flag(tp, WOL_SPEED_100MB)) 3586 advertising |= 3587 ADVERTISED_100baseT_Half | 3588 ADVERTISED_100baseT_Full | 3589 ADVERTISED_10baseT_Full; 3590 else 3591 advertising |= ADVERTISED_10baseT_Full; 3592 } 3593 3594 phydev->advertising = advertising; 3595 3596 phy_start_aneg(phydev); 3597 3598 phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; 3599 if (phyid != PHY_ID_BCMAC131) { 3600 phyid &= PHY_BCM_OUI_MASK; 3601 if (phyid == PHY_BCM_OUI_1 || 3602 phyid == PHY_BCM_OUI_2 || 3603 phyid == PHY_BCM_OUI_3) 3604 do_low_power = true; 3605 } 3606 } 3607 } else { 3608 do_low_power = true; 3609 3610 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) 3611 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 3612 3613 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 3614 tg3_setup_phy(tp, 0); 3615 } 3616 3617 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 3618 u32 val; 3619 3620 val = tr32(GRC_VCPU_EXT_CTRL); 3621 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL); 3622 } else if (!tg3_flag(tp, ENABLE_ASF)) { 3623 int i; 3624 u32 val; 3625 3626 for (i = 0; i < 200; i++) { 3627 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val); 3628 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 3629 break; 3630 msleep(1); 3631 } 3632 } 3633 if (tg3_flag(tp, WOL_CAP)) 3634 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE | 3635 WOL_DRV_STATE_SHUTDOWN | 3636 WOL_DRV_WOL | 3637 WOL_SET_MAGIC_PKT); 3638 3639 if (device_should_wake) { 3640 u32 mac_mode; 3641 3642 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 3643 if (do_low_power && 3644 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 3645 tg3_phy_auxctl_write(tp, 3646 MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 3647 MII_TG3_AUXCTL_PCTL_WOL_EN | 3648 MII_TG3_AUXCTL_PCTL_100TX_LPWR | 3649 MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC); 3650 udelay(40); 3651 } 3652 3653 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 3654 mac_mode = MAC_MODE_PORT_MODE_GMII; 3655 else 3656 mac_mode = MAC_MODE_PORT_MODE_MII; 3657 3658 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY; 3659 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 3660 ASIC_REV_5700) { 3661 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ? 3662 SPEED_100 : SPEED_10; 3663 if (tg3_5700_link_polarity(tp, speed)) 3664 mac_mode |= MAC_MODE_LINK_POLARITY; 3665 else 3666 mac_mode &= ~MAC_MODE_LINK_POLARITY; 3667 } 3668 } else { 3669 mac_mode = MAC_MODE_PORT_MODE_TBI; 3670 } 3671 3672 if (!tg3_flag(tp, 5750_PLUS)) 3673 tw32(MAC_LED_CTRL, tp->led_ctrl); 3674 3675 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE; 3676 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) && 3677 (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE))) 3678 mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL; 3679 3680 if (tg3_flag(tp, ENABLE_APE)) 3681 mac_mode |= MAC_MODE_APE_TX_EN | 3682 MAC_MODE_APE_RX_EN | 3683 MAC_MODE_TDE_ENABLE; 3684 3685 tw32_f(MAC_MODE, mac_mode); 3686 udelay(100); 3687 3688 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE); 3689 udelay(10); 3690 } 3691 3692 if (!tg3_flag(tp, WOL_SPEED_100MB) && 3693 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3694 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 3695 u32 base_val; 3696 3697 base_val = tp->pci_clock_ctrl; 3698 base_val |= (CLOCK_CTRL_RXCLK_DISABLE | 3699 CLOCK_CTRL_TXCLK_DISABLE); 3700 3701 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK | 3702 CLOCK_CTRL_PWRDOWN_PLL133, 40); 3703 } else if (tg3_flag(tp, 5780_CLASS) || 3704 tg3_flag(tp, CPMU_PRESENT) || 3705 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 3706 /* do nothing */ 3707 } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) { 3708 u32 newbits1, newbits2; 3709 3710 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3711 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 3712 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE | 3713 CLOCK_CTRL_TXCLK_DISABLE | 3714 CLOCK_CTRL_ALTCLK); 3715 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 3716 } else if (tg3_flag(tp, 5705_PLUS)) { 3717 newbits1 = CLOCK_CTRL_625_CORE; 3718 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK; 3719 } else { 3720 newbits1 = CLOCK_CTRL_ALTCLK; 3721 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 3722 } 3723 3724 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1, 3725 40); 3726 3727 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2, 3728 40); 3729 3730 if (!tg3_flag(tp, 5705_PLUS)) { 3731 u32 newbits3; 3732 3733 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3734 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 3735 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE | 3736 CLOCK_CTRL_TXCLK_DISABLE | 3737 CLOCK_CTRL_44MHZ_CORE); 3738 } else { 3739 newbits3 = CLOCK_CTRL_44MHZ_CORE; 3740 } 3741 3742 tw32_wait_f(TG3PCI_CLOCK_CTRL, 3743 tp->pci_clock_ctrl | newbits3, 40); 3744 } 3745 } 3746 3747 if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF)) 3748 tg3_power_down_phy(tp, do_low_power); 3749 3750 tg3_frob_aux_power(tp, true); 3751 3752 /* Workaround for unstable PLL clock */ 3753 if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) || 3754 (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) { 3755 u32 val = tr32(0x7d00); 3756 3757 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1); 3758 tw32(0x7d00, val); 3759 if (!tg3_flag(tp, ENABLE_ASF)) { 3760 int err; 3761 3762 err = tg3_nvram_lock(tp); 3763 tg3_halt_cpu(tp, RX_CPU_BASE); 3764 if (!err) 3765 tg3_nvram_unlock(tp); 3766 } 3767 } 3768 3769 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); 3770 3771 return 0; 3772 } 3773 3774 static void tg3_power_down(struct tg3 *tp) 3775 { 3776 tg3_power_down_prepare(tp); 3777 3778 pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE)); 3779 pci_set_power_state(tp->pdev, PCI_D3hot); 3780 } 3781 3782 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex) 3783 { 3784 switch (val & MII_TG3_AUX_STAT_SPDMASK) { 3785 case MII_TG3_AUX_STAT_10HALF: 3786 *speed = SPEED_10; 3787 *duplex = DUPLEX_HALF; 3788 break; 3789 3790 case MII_TG3_AUX_STAT_10FULL: 3791 *speed = SPEED_10; 3792 *duplex = DUPLEX_FULL; 3793 break; 3794 3795 case MII_TG3_AUX_STAT_100HALF: 3796 *speed = SPEED_100; 3797 *duplex = DUPLEX_HALF; 3798 break; 3799 3800 case MII_TG3_AUX_STAT_100FULL: 3801 *speed = SPEED_100; 3802 *duplex = DUPLEX_FULL; 3803 break; 3804 3805 case MII_TG3_AUX_STAT_1000HALF: 3806 *speed = SPEED_1000; 3807 *duplex = DUPLEX_HALF; 3808 break; 3809 3810 case MII_TG3_AUX_STAT_1000FULL: 3811 *speed = SPEED_1000; 3812 *duplex = DUPLEX_FULL; 3813 break; 3814 3815 default: 3816 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 3817 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 : 3818 SPEED_10; 3819 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL : 3820 DUPLEX_HALF; 3821 break; 3822 } 3823 *speed = SPEED_UNKNOWN; 3824 *duplex = DUPLEX_UNKNOWN; 3825 break; 3826 } 3827 } 3828 3829 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) 3830 { 3831 int err = 0; 3832 u32 val, new_adv; 3833 3834 new_adv = ADVERTISE_CSMA; 3835 new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL; 3836 new_adv |= mii_advertise_flowctrl(flowctrl); 3837 3838 err = tg3_writephy(tp, MII_ADVERTISE, new_adv); 3839 if (err) 3840 goto done; 3841 3842 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 3843 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise); 3844 3845 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 3846 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) 3847 new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 3848 3849 err = tg3_writephy(tp, MII_CTRL1000, new_adv); 3850 if (err) 3851 goto done; 3852 } 3853 3854 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 3855 goto done; 3856 3857 tw32(TG3_CPMU_EEE_MODE, 3858 tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE); 3859 3860 err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp); 3861 if (!err) { 3862 u32 err2; 3863 3864 val = 0; 3865 /* Advertise 100-BaseTX EEE ability */ 3866 if (advertise & ADVERTISED_100baseT_Full) 3867 val |= MDIO_AN_EEE_ADV_100TX; 3868 /* Advertise 1000-BaseT EEE ability */ 3869 if (advertise & ADVERTISED_1000baseT_Full) 3870 val |= MDIO_AN_EEE_ADV_1000T; 3871 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); 3872 if (err) 3873 val = 0; 3874 3875 switch (GET_ASIC_REV(tp->pci_chip_rev_id)) { 3876 case ASIC_REV_5717: 3877 case ASIC_REV_57765: 3878 case ASIC_REV_57766: 3879 case ASIC_REV_5719: 3880 /* If we advertised any eee advertisements above... */ 3881 if (val) 3882 val = MII_TG3_DSP_TAP26_ALNOKO | 3883 MII_TG3_DSP_TAP26_RMRXSTO | 3884 MII_TG3_DSP_TAP26_OPCSINPT; 3885 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 3886 /* Fall through */ 3887 case ASIC_REV_5720: 3888 if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) 3889 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | 3890 MII_TG3_DSP_CH34TP2_HIBW01); 3891 } 3892 3893 err2 = TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 3894 if (!err) 3895 err = err2; 3896 } 3897 3898 done: 3899 return err; 3900 } 3901 3902 static void tg3_phy_copper_begin(struct tg3 *tp) 3903 { 3904 if (tp->link_config.autoneg == AUTONEG_ENABLE || 3905 (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 3906 u32 adv, fc; 3907 3908 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 3909 adv = ADVERTISED_10baseT_Half | 3910 ADVERTISED_10baseT_Full; 3911 if (tg3_flag(tp, WOL_SPEED_100MB)) 3912 adv |= ADVERTISED_100baseT_Half | 3913 ADVERTISED_100baseT_Full; 3914 3915 fc = FLOW_CTRL_TX | FLOW_CTRL_RX; 3916 } else { 3917 adv = tp->link_config.advertising; 3918 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 3919 adv &= ~(ADVERTISED_1000baseT_Half | 3920 ADVERTISED_1000baseT_Full); 3921 3922 fc = tp->link_config.flowctrl; 3923 } 3924 3925 tg3_phy_autoneg_cfg(tp, adv, fc); 3926 3927 tg3_writephy(tp, MII_BMCR, 3928 BMCR_ANENABLE | BMCR_ANRESTART); 3929 } else { 3930 int i; 3931 u32 bmcr, orig_bmcr; 3932 3933 tp->link_config.active_speed = tp->link_config.speed; 3934 tp->link_config.active_duplex = tp->link_config.duplex; 3935 3936 bmcr = 0; 3937 switch (tp->link_config.speed) { 3938 default: 3939 case SPEED_10: 3940 break; 3941 3942 case SPEED_100: 3943 bmcr |= BMCR_SPEED100; 3944 break; 3945 3946 case SPEED_1000: 3947 bmcr |= BMCR_SPEED1000; 3948 break; 3949 } 3950 3951 if (tp->link_config.duplex == DUPLEX_FULL) 3952 bmcr |= BMCR_FULLDPLX; 3953 3954 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) && 3955 (bmcr != orig_bmcr)) { 3956 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK); 3957 for (i = 0; i < 1500; i++) { 3958 u32 tmp; 3959 3960 udelay(10); 3961 if (tg3_readphy(tp, MII_BMSR, &tmp) || 3962 tg3_readphy(tp, MII_BMSR, &tmp)) 3963 continue; 3964 if (!(tmp & BMSR_LSTATUS)) { 3965 udelay(40); 3966 break; 3967 } 3968 } 3969 tg3_writephy(tp, MII_BMCR, bmcr); 3970 udelay(40); 3971 } 3972 } 3973 } 3974 3975 static int tg3_init_5401phy_dsp(struct tg3 *tp) 3976 { 3977 int err; 3978 3979 /* Turn off tap power management. */ 3980 /* Set Extended packet length bit */ 3981 err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 3982 3983 err |= tg3_phydsp_write(tp, 0x0012, 0x1804); 3984 err |= tg3_phydsp_write(tp, 0x0013, 0x1204); 3985 err |= tg3_phydsp_write(tp, 0x8006, 0x0132); 3986 err |= tg3_phydsp_write(tp, 0x8006, 0x0232); 3987 err |= tg3_phydsp_write(tp, 0x201f, 0x0a20); 3988 3989 udelay(40); 3990 3991 return err; 3992 } 3993 3994 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv) 3995 { 3996 u32 advmsk, tgtadv, advertising; 3997 3998 advertising = tp->link_config.advertising; 3999 tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL; 4000 4001 advmsk = ADVERTISE_ALL; 4002 if (tp->link_config.active_duplex == DUPLEX_FULL) { 4003 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl); 4004 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; 4005 } 4006 4007 if (tg3_readphy(tp, MII_ADVERTISE, lcladv)) 4008 return false; 4009 4010 if ((*lcladv & advmsk) != tgtadv) 4011 return false; 4012 4013 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4014 u32 tg3_ctrl; 4015 4016 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising); 4017 4018 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl)) 4019 return false; 4020 4021 if (tgtadv && 4022 (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 4023 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)) { 4024 tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4025 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL | 4026 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 4027 } else { 4028 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL); 4029 } 4030 4031 if (tg3_ctrl != tgtadv) 4032 return false; 4033 } 4034 4035 return true; 4036 } 4037 4038 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv) 4039 { 4040 u32 lpeth = 0; 4041 4042 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4043 u32 val; 4044 4045 if (tg3_readphy(tp, MII_STAT1000, &val)) 4046 return false; 4047 4048 lpeth = mii_stat1000_to_ethtool_lpa_t(val); 4049 } 4050 4051 if (tg3_readphy(tp, MII_LPA, rmtadv)) 4052 return false; 4053 4054 lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv); 4055 tp->link_config.rmt_adv = lpeth; 4056 4057 return true; 4058 } 4059 4060 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset) 4061 { 4062 int current_link_up; 4063 u32 bmsr, val; 4064 u32 lcl_adv, rmt_adv; 4065 u16 current_speed; 4066 u8 current_duplex; 4067 int i, err; 4068 4069 tw32(MAC_EVENT, 0); 4070 4071 tw32_f(MAC_STATUS, 4072 (MAC_STATUS_SYNC_CHANGED | 4073 MAC_STATUS_CFG_CHANGED | 4074 MAC_STATUS_MI_COMPLETION | 4075 MAC_STATUS_LNKSTATE_CHANGED)); 4076 udelay(40); 4077 4078 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 4079 tw32_f(MAC_MI_MODE, 4080 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 4081 udelay(80); 4082 } 4083 4084 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0); 4085 4086 /* Some third-party PHYs need to be reset on link going 4087 * down. 4088 */ 4089 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 4090 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 4091 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) && 4092 netif_carrier_ok(tp->dev)) { 4093 tg3_readphy(tp, MII_BMSR, &bmsr); 4094 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4095 !(bmsr & BMSR_LSTATUS)) 4096 force_reset = 1; 4097 } 4098 if (force_reset) 4099 tg3_phy_reset(tp); 4100 4101 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 4102 tg3_readphy(tp, MII_BMSR, &bmsr); 4103 if (tg3_readphy(tp, MII_BMSR, &bmsr) || 4104 !tg3_flag(tp, INIT_COMPLETE)) 4105 bmsr = 0; 4106 4107 if (!(bmsr & BMSR_LSTATUS)) { 4108 err = tg3_init_5401phy_dsp(tp); 4109 if (err) 4110 return err; 4111 4112 tg3_readphy(tp, MII_BMSR, &bmsr); 4113 for (i = 0; i < 1000; i++) { 4114 udelay(10); 4115 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4116 (bmsr & BMSR_LSTATUS)) { 4117 udelay(40); 4118 break; 4119 } 4120 } 4121 4122 if ((tp->phy_id & TG3_PHY_ID_REV_MASK) == 4123 TG3_PHY_REV_BCM5401_B0 && 4124 !(bmsr & BMSR_LSTATUS) && 4125 tp->link_config.active_speed == SPEED_1000) { 4126 err = tg3_phy_reset(tp); 4127 if (!err) 4128 err = tg3_init_5401phy_dsp(tp); 4129 if (err) 4130 return err; 4131 } 4132 } 4133 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 4134 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) { 4135 /* 5701 {A0,B0} CRC bug workaround */ 4136 tg3_writephy(tp, 0x15, 0x0a75); 4137 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4138 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 4139 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4140 } 4141 4142 /* Clear pending interrupts... */ 4143 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4144 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4145 4146 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) 4147 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); 4148 else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) 4149 tg3_writephy(tp, MII_TG3_IMASK, ~0); 4150 4151 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 4152 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 4153 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1) 4154 tg3_writephy(tp, MII_TG3_EXT_CTRL, 4155 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 4156 else 4157 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); 4158 } 4159 4160 current_link_up = 0; 4161 current_speed = SPEED_UNKNOWN; 4162 current_duplex = DUPLEX_UNKNOWN; 4163 tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE; 4164 tp->link_config.rmt_adv = 0; 4165 4166 if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) { 4167 err = tg3_phy_auxctl_read(tp, 4168 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4169 &val); 4170 if (!err && !(val & (1 << 10))) { 4171 tg3_phy_auxctl_write(tp, 4172 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4173 val | (1 << 10)); 4174 goto relink; 4175 } 4176 } 4177 4178 bmsr = 0; 4179 for (i = 0; i < 100; i++) { 4180 tg3_readphy(tp, MII_BMSR, &bmsr); 4181 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4182 (bmsr & BMSR_LSTATUS)) 4183 break; 4184 udelay(40); 4185 } 4186 4187 if (bmsr & BMSR_LSTATUS) { 4188 u32 aux_stat, bmcr; 4189 4190 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat); 4191 for (i = 0; i < 2000; i++) { 4192 udelay(10); 4193 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) && 4194 aux_stat) 4195 break; 4196 } 4197 4198 tg3_aux_stat_to_speed_duplex(tp, aux_stat, 4199 ¤t_speed, 4200 ¤t_duplex); 4201 4202 bmcr = 0; 4203 for (i = 0; i < 200; i++) { 4204 tg3_readphy(tp, MII_BMCR, &bmcr); 4205 if (tg3_readphy(tp, MII_BMCR, &bmcr)) 4206 continue; 4207 if (bmcr && bmcr != 0x7fff) 4208 break; 4209 udelay(10); 4210 } 4211 4212 lcl_adv = 0; 4213 rmt_adv = 0; 4214 4215 tp->link_config.active_speed = current_speed; 4216 tp->link_config.active_duplex = current_duplex; 4217 4218 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4219 if ((bmcr & BMCR_ANENABLE) && 4220 tg3_phy_copper_an_config_ok(tp, &lcl_adv) && 4221 tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv)) 4222 current_link_up = 1; 4223 } else { 4224 if (!(bmcr & BMCR_ANENABLE) && 4225 tp->link_config.speed == current_speed && 4226 tp->link_config.duplex == current_duplex && 4227 tp->link_config.flowctrl == 4228 tp->link_config.active_flowctrl) { 4229 current_link_up = 1; 4230 } 4231 } 4232 4233 if (current_link_up == 1 && 4234 tp->link_config.active_duplex == DUPLEX_FULL) { 4235 u32 reg, bit; 4236 4237 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4238 reg = MII_TG3_FET_GEN_STAT; 4239 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT; 4240 } else { 4241 reg = MII_TG3_EXT_STAT; 4242 bit = MII_TG3_EXT_STAT_MDIX; 4243 } 4244 4245 if (!tg3_readphy(tp, reg, &val) && (val & bit)) 4246 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE; 4247 4248 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 4249 } 4250 } 4251 4252 relink: 4253 if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4254 tg3_phy_copper_begin(tp); 4255 4256 tg3_readphy(tp, MII_BMSR, &bmsr); 4257 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) || 4258 (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 4259 current_link_up = 1; 4260 } 4261 4262 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 4263 if (current_link_up == 1) { 4264 if (tp->link_config.active_speed == SPEED_100 || 4265 tp->link_config.active_speed == SPEED_10) 4266 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4267 else 4268 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 4269 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) 4270 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4271 else 4272 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 4273 4274 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 4275 if (tp->link_config.active_duplex == DUPLEX_HALF) 4276 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 4277 4278 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) { 4279 if (current_link_up == 1 && 4280 tg3_5700_link_polarity(tp, tp->link_config.active_speed)) 4281 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 4282 else 4283 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 4284 } 4285 4286 /* ??? Without this setting Netgear GA302T PHY does not 4287 * ??? send/receive packets... 4288 */ 4289 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 && 4290 tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) { 4291 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL; 4292 tw32_f(MAC_MI_MODE, tp->mi_mode); 4293 udelay(80); 4294 } 4295 4296 tw32_f(MAC_MODE, tp->mac_mode); 4297 udelay(40); 4298 4299 tg3_phy_eee_adjust(tp, current_link_up); 4300 4301 if (tg3_flag(tp, USE_LINKCHG_REG)) { 4302 /* Polled via timer. */ 4303 tw32_f(MAC_EVENT, 0); 4304 } else { 4305 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 4306 } 4307 udelay(40); 4308 4309 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 && 4310 current_link_up == 1 && 4311 tp->link_config.active_speed == SPEED_1000 && 4312 (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) { 4313 udelay(120); 4314 tw32_f(MAC_STATUS, 4315 (MAC_STATUS_SYNC_CHANGED | 4316 MAC_STATUS_CFG_CHANGED)); 4317 udelay(40); 4318 tg3_write_mem(tp, 4319 NIC_SRAM_FIRMWARE_MBOX, 4320 NIC_SRAM_FIRMWARE_MBOX_MAGIC2); 4321 } 4322 4323 /* Prevent send BD corruption. */ 4324 if (tg3_flag(tp, CLKREQ_BUG)) { 4325 u16 oldlnkctl, newlnkctl; 4326 4327 pci_read_config_word(tp->pdev, 4328 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 4329 &oldlnkctl); 4330 if (tp->link_config.active_speed == SPEED_100 || 4331 tp->link_config.active_speed == SPEED_10) 4332 newlnkctl = oldlnkctl & ~PCI_EXP_LNKCTL_CLKREQ_EN; 4333 else 4334 newlnkctl = oldlnkctl | PCI_EXP_LNKCTL_CLKREQ_EN; 4335 if (newlnkctl != oldlnkctl) 4336 pci_write_config_word(tp->pdev, 4337 pci_pcie_cap(tp->pdev) + 4338 PCI_EXP_LNKCTL, newlnkctl); 4339 } 4340 4341 if (current_link_up != netif_carrier_ok(tp->dev)) { 4342 if (current_link_up) 4343 netif_carrier_on(tp->dev); 4344 else 4345 netif_carrier_off(tp->dev); 4346 tg3_link_report(tp); 4347 } 4348 4349 return 0; 4350 } 4351 4352 struct tg3_fiber_aneginfo { 4353 int state; 4354 #define ANEG_STATE_UNKNOWN 0 4355 #define ANEG_STATE_AN_ENABLE 1 4356 #define ANEG_STATE_RESTART_INIT 2 4357 #define ANEG_STATE_RESTART 3 4358 #define ANEG_STATE_DISABLE_LINK_OK 4 4359 #define ANEG_STATE_ABILITY_DETECT_INIT 5 4360 #define ANEG_STATE_ABILITY_DETECT 6 4361 #define ANEG_STATE_ACK_DETECT_INIT 7 4362 #define ANEG_STATE_ACK_DETECT 8 4363 #define ANEG_STATE_COMPLETE_ACK_INIT 9 4364 #define ANEG_STATE_COMPLETE_ACK 10 4365 #define ANEG_STATE_IDLE_DETECT_INIT 11 4366 #define ANEG_STATE_IDLE_DETECT 12 4367 #define ANEG_STATE_LINK_OK 13 4368 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14 4369 #define ANEG_STATE_NEXT_PAGE_WAIT 15 4370 4371 u32 flags; 4372 #define MR_AN_ENABLE 0x00000001 4373 #define MR_RESTART_AN 0x00000002 4374 #define MR_AN_COMPLETE 0x00000004 4375 #define MR_PAGE_RX 0x00000008 4376 #define MR_NP_LOADED 0x00000010 4377 #define MR_TOGGLE_TX 0x00000020 4378 #define MR_LP_ADV_FULL_DUPLEX 0x00000040 4379 #define MR_LP_ADV_HALF_DUPLEX 0x00000080 4380 #define MR_LP_ADV_SYM_PAUSE 0x00000100 4381 #define MR_LP_ADV_ASYM_PAUSE 0x00000200 4382 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400 4383 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800 4384 #define MR_LP_ADV_NEXT_PAGE 0x00001000 4385 #define MR_TOGGLE_RX 0x00002000 4386 #define MR_NP_RX 0x00004000 4387 4388 #define MR_LINK_OK 0x80000000 4389 4390 unsigned long link_time, cur_time; 4391 4392 u32 ability_match_cfg; 4393 int ability_match_count; 4394 4395 char ability_match, idle_match, ack_match; 4396 4397 u32 txconfig, rxconfig; 4398 #define ANEG_CFG_NP 0x00000080 4399 #define ANEG_CFG_ACK 0x00000040 4400 #define ANEG_CFG_RF2 0x00000020 4401 #define ANEG_CFG_RF1 0x00000010 4402 #define ANEG_CFG_PS2 0x00000001 4403 #define ANEG_CFG_PS1 0x00008000 4404 #define ANEG_CFG_HD 0x00004000 4405 #define ANEG_CFG_FD 0x00002000 4406 #define ANEG_CFG_INVAL 0x00001f06 4407 4408 }; 4409 #define ANEG_OK 0 4410 #define ANEG_DONE 1 4411 #define ANEG_TIMER_ENAB 2 4412 #define ANEG_FAILED -1 4413 4414 #define ANEG_STATE_SETTLE_TIME 10000 4415 4416 static int tg3_fiber_aneg_smachine(struct tg3 *tp, 4417 struct tg3_fiber_aneginfo *ap) 4418 { 4419 u16 flowctrl; 4420 unsigned long delta; 4421 u32 rx_cfg_reg; 4422 int ret; 4423 4424 if (ap->state == ANEG_STATE_UNKNOWN) { 4425 ap->rxconfig = 0; 4426 ap->link_time = 0; 4427 ap->cur_time = 0; 4428 ap->ability_match_cfg = 0; 4429 ap->ability_match_count = 0; 4430 ap->ability_match = 0; 4431 ap->idle_match = 0; 4432 ap->ack_match = 0; 4433 } 4434 ap->cur_time++; 4435 4436 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) { 4437 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG); 4438 4439 if (rx_cfg_reg != ap->ability_match_cfg) { 4440 ap->ability_match_cfg = rx_cfg_reg; 4441 ap->ability_match = 0; 4442 ap->ability_match_count = 0; 4443 } else { 4444 if (++ap->ability_match_count > 1) { 4445 ap->ability_match = 1; 4446 ap->ability_match_cfg = rx_cfg_reg; 4447 } 4448 } 4449 if (rx_cfg_reg & ANEG_CFG_ACK) 4450 ap->ack_match = 1; 4451 else 4452 ap->ack_match = 0; 4453 4454 ap->idle_match = 0; 4455 } else { 4456 ap->idle_match = 1; 4457 ap->ability_match_cfg = 0; 4458 ap->ability_match_count = 0; 4459 ap->ability_match = 0; 4460 ap->ack_match = 0; 4461 4462 rx_cfg_reg = 0; 4463 } 4464 4465 ap->rxconfig = rx_cfg_reg; 4466 ret = ANEG_OK; 4467 4468 switch (ap->state) { 4469 case ANEG_STATE_UNKNOWN: 4470 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) 4471 ap->state = ANEG_STATE_AN_ENABLE; 4472 4473 /* fallthru */ 4474 case ANEG_STATE_AN_ENABLE: 4475 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); 4476 if (ap->flags & MR_AN_ENABLE) { 4477 ap->link_time = 0; 4478 ap->cur_time = 0; 4479 ap->ability_match_cfg = 0; 4480 ap->ability_match_count = 0; 4481 ap->ability_match = 0; 4482 ap->idle_match = 0; 4483 ap->ack_match = 0; 4484 4485 ap->state = ANEG_STATE_RESTART_INIT; 4486 } else { 4487 ap->state = ANEG_STATE_DISABLE_LINK_OK; 4488 } 4489 break; 4490 4491 case ANEG_STATE_RESTART_INIT: 4492 ap->link_time = ap->cur_time; 4493 ap->flags &= ~(MR_NP_LOADED); 4494 ap->txconfig = 0; 4495 tw32(MAC_TX_AUTO_NEG, 0); 4496 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 4497 tw32_f(MAC_MODE, tp->mac_mode); 4498 udelay(40); 4499 4500 ret = ANEG_TIMER_ENAB; 4501 ap->state = ANEG_STATE_RESTART; 4502 4503 /* fallthru */ 4504 case ANEG_STATE_RESTART: 4505 delta = ap->cur_time - ap->link_time; 4506 if (delta > ANEG_STATE_SETTLE_TIME) 4507 ap->state = ANEG_STATE_ABILITY_DETECT_INIT; 4508 else 4509 ret = ANEG_TIMER_ENAB; 4510 break; 4511 4512 case ANEG_STATE_DISABLE_LINK_OK: 4513 ret = ANEG_DONE; 4514 break; 4515 4516 case ANEG_STATE_ABILITY_DETECT_INIT: 4517 ap->flags &= ~(MR_TOGGLE_TX); 4518 ap->txconfig = ANEG_CFG_FD; 4519 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 4520 if (flowctrl & ADVERTISE_1000XPAUSE) 4521 ap->txconfig |= ANEG_CFG_PS1; 4522 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 4523 ap->txconfig |= ANEG_CFG_PS2; 4524 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 4525 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 4526 tw32_f(MAC_MODE, tp->mac_mode); 4527 udelay(40); 4528 4529 ap->state = ANEG_STATE_ABILITY_DETECT; 4530 break; 4531 4532 case ANEG_STATE_ABILITY_DETECT: 4533 if (ap->ability_match != 0 && ap->rxconfig != 0) 4534 ap->state = ANEG_STATE_ACK_DETECT_INIT; 4535 break; 4536 4537 case ANEG_STATE_ACK_DETECT_INIT: 4538 ap->txconfig |= ANEG_CFG_ACK; 4539 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 4540 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 4541 tw32_f(MAC_MODE, tp->mac_mode); 4542 udelay(40); 4543 4544 ap->state = ANEG_STATE_ACK_DETECT; 4545 4546 /* fallthru */ 4547 case ANEG_STATE_ACK_DETECT: 4548 if (ap->ack_match != 0) { 4549 if ((ap->rxconfig & ~ANEG_CFG_ACK) == 4550 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) { 4551 ap->state = ANEG_STATE_COMPLETE_ACK_INIT; 4552 } else { 4553 ap->state = ANEG_STATE_AN_ENABLE; 4554 } 4555 } else if (ap->ability_match != 0 && 4556 ap->rxconfig == 0) { 4557 ap->state = ANEG_STATE_AN_ENABLE; 4558 } 4559 break; 4560 4561 case ANEG_STATE_COMPLETE_ACK_INIT: 4562 if (ap->rxconfig & ANEG_CFG_INVAL) { 4563 ret = ANEG_FAILED; 4564 break; 4565 } 4566 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX | 4567 MR_LP_ADV_HALF_DUPLEX | 4568 MR_LP_ADV_SYM_PAUSE | 4569 MR_LP_ADV_ASYM_PAUSE | 4570 MR_LP_ADV_REMOTE_FAULT1 | 4571 MR_LP_ADV_REMOTE_FAULT2 | 4572 MR_LP_ADV_NEXT_PAGE | 4573 MR_TOGGLE_RX | 4574 MR_NP_RX); 4575 if (ap->rxconfig & ANEG_CFG_FD) 4576 ap->flags |= MR_LP_ADV_FULL_DUPLEX; 4577 if (ap->rxconfig & ANEG_CFG_HD) 4578 ap->flags |= MR_LP_ADV_HALF_DUPLEX; 4579 if (ap->rxconfig & ANEG_CFG_PS1) 4580 ap->flags |= MR_LP_ADV_SYM_PAUSE; 4581 if (ap->rxconfig & ANEG_CFG_PS2) 4582 ap->flags |= MR_LP_ADV_ASYM_PAUSE; 4583 if (ap->rxconfig & ANEG_CFG_RF1) 4584 ap->flags |= MR_LP_ADV_REMOTE_FAULT1; 4585 if (ap->rxconfig & ANEG_CFG_RF2) 4586 ap->flags |= MR_LP_ADV_REMOTE_FAULT2; 4587 if (ap->rxconfig & ANEG_CFG_NP) 4588 ap->flags |= MR_LP_ADV_NEXT_PAGE; 4589 4590 ap->link_time = ap->cur_time; 4591 4592 ap->flags ^= (MR_TOGGLE_TX); 4593 if (ap->rxconfig & 0x0008) 4594 ap->flags |= MR_TOGGLE_RX; 4595 if (ap->rxconfig & ANEG_CFG_NP) 4596 ap->flags |= MR_NP_RX; 4597 ap->flags |= MR_PAGE_RX; 4598 4599 ap->state = ANEG_STATE_COMPLETE_ACK; 4600 ret = ANEG_TIMER_ENAB; 4601 break; 4602 4603 case ANEG_STATE_COMPLETE_ACK: 4604 if (ap->ability_match != 0 && 4605 ap->rxconfig == 0) { 4606 ap->state = ANEG_STATE_AN_ENABLE; 4607 break; 4608 } 4609 delta = ap->cur_time - ap->link_time; 4610 if (delta > ANEG_STATE_SETTLE_TIME) { 4611 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) { 4612 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 4613 } else { 4614 if ((ap->txconfig & ANEG_CFG_NP) == 0 && 4615 !(ap->flags & MR_NP_RX)) { 4616 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 4617 } else { 4618 ret = ANEG_FAILED; 4619 } 4620 } 4621 } 4622 break; 4623 4624 case ANEG_STATE_IDLE_DETECT_INIT: 4625 ap->link_time = ap->cur_time; 4626 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 4627 tw32_f(MAC_MODE, tp->mac_mode); 4628 udelay(40); 4629 4630 ap->state = ANEG_STATE_IDLE_DETECT; 4631 ret = ANEG_TIMER_ENAB; 4632 break; 4633 4634 case ANEG_STATE_IDLE_DETECT: 4635 if (ap->ability_match != 0 && 4636 ap->rxconfig == 0) { 4637 ap->state = ANEG_STATE_AN_ENABLE; 4638 break; 4639 } 4640 delta = ap->cur_time - ap->link_time; 4641 if (delta > ANEG_STATE_SETTLE_TIME) { 4642 /* XXX another gem from the Broadcom driver :( */ 4643 ap->state = ANEG_STATE_LINK_OK; 4644 } 4645 break; 4646 4647 case ANEG_STATE_LINK_OK: 4648 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK); 4649 ret = ANEG_DONE; 4650 break; 4651 4652 case ANEG_STATE_NEXT_PAGE_WAIT_INIT: 4653 /* ??? unimplemented */ 4654 break; 4655 4656 case ANEG_STATE_NEXT_PAGE_WAIT: 4657 /* ??? unimplemented */ 4658 break; 4659 4660 default: 4661 ret = ANEG_FAILED; 4662 break; 4663 } 4664 4665 return ret; 4666 } 4667 4668 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags) 4669 { 4670 int res = 0; 4671 struct tg3_fiber_aneginfo aninfo; 4672 int status = ANEG_FAILED; 4673 unsigned int tick; 4674 u32 tmp; 4675 4676 tw32_f(MAC_TX_AUTO_NEG, 0); 4677 4678 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK; 4679 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII); 4680 udelay(40); 4681 4682 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS); 4683 udelay(40); 4684 4685 memset(&aninfo, 0, sizeof(aninfo)); 4686 aninfo.flags |= MR_AN_ENABLE; 4687 aninfo.state = ANEG_STATE_UNKNOWN; 4688 aninfo.cur_time = 0; 4689 tick = 0; 4690 while (++tick < 195000) { 4691 status = tg3_fiber_aneg_smachine(tp, &aninfo); 4692 if (status == ANEG_DONE || status == ANEG_FAILED) 4693 break; 4694 4695 udelay(1); 4696 } 4697 4698 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 4699 tw32_f(MAC_MODE, tp->mac_mode); 4700 udelay(40); 4701 4702 *txflags = aninfo.txconfig; 4703 *rxflags = aninfo.flags; 4704 4705 if (status == ANEG_DONE && 4706 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK | 4707 MR_LP_ADV_FULL_DUPLEX))) 4708 res = 1; 4709 4710 return res; 4711 } 4712 4713 static void tg3_init_bcm8002(struct tg3 *tp) 4714 { 4715 u32 mac_status = tr32(MAC_STATUS); 4716 int i; 4717 4718 /* Reset when initting first time or we have a link. */ 4719 if (tg3_flag(tp, INIT_COMPLETE) && 4720 !(mac_status & MAC_STATUS_PCS_SYNCED)) 4721 return; 4722 4723 /* Set PLL lock range. */ 4724 tg3_writephy(tp, 0x16, 0x8007); 4725 4726 /* SW reset */ 4727 tg3_writephy(tp, MII_BMCR, BMCR_RESET); 4728 4729 /* Wait for reset to complete. */ 4730 /* XXX schedule_timeout() ... */ 4731 for (i = 0; i < 500; i++) 4732 udelay(10); 4733 4734 /* Config mode; select PMA/Ch 1 regs. */ 4735 tg3_writephy(tp, 0x10, 0x8411); 4736 4737 /* Enable auto-lock and comdet, select txclk for tx. */ 4738 tg3_writephy(tp, 0x11, 0x0a10); 4739 4740 tg3_writephy(tp, 0x18, 0x00a0); 4741 tg3_writephy(tp, 0x16, 0x41ff); 4742 4743 /* Assert and deassert POR. */ 4744 tg3_writephy(tp, 0x13, 0x0400); 4745 udelay(40); 4746 tg3_writephy(tp, 0x13, 0x0000); 4747 4748 tg3_writephy(tp, 0x11, 0x0a50); 4749 udelay(40); 4750 tg3_writephy(tp, 0x11, 0x0a10); 4751 4752 /* Wait for signal to stabilize */ 4753 /* XXX schedule_timeout() ... */ 4754 for (i = 0; i < 15000; i++) 4755 udelay(10); 4756 4757 /* Deselect the channel register so we can read the PHYID 4758 * later. 4759 */ 4760 tg3_writephy(tp, 0x10, 0x8011); 4761 } 4762 4763 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) 4764 { 4765 u16 flowctrl; 4766 u32 sg_dig_ctrl, sg_dig_status; 4767 u32 serdes_cfg, expected_sg_dig_ctrl; 4768 int workaround, port_a; 4769 int current_link_up; 4770 4771 serdes_cfg = 0; 4772 expected_sg_dig_ctrl = 0; 4773 workaround = 0; 4774 port_a = 1; 4775 current_link_up = 0; 4776 4777 if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 && 4778 tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) { 4779 workaround = 1; 4780 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 4781 port_a = 0; 4782 4783 /* preserve bits 0-11,13,14 for signal pre-emphasis */ 4784 /* preserve bits 20-23 for voltage regulator */ 4785 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff; 4786 } 4787 4788 sg_dig_ctrl = tr32(SG_DIG_CTRL); 4789 4790 if (tp->link_config.autoneg != AUTONEG_ENABLE) { 4791 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) { 4792 if (workaround) { 4793 u32 val = serdes_cfg; 4794 4795 if (port_a) 4796 val |= 0xc010000; 4797 else 4798 val |= 0x4010000; 4799 tw32_f(MAC_SERDES_CFG, val); 4800 } 4801 4802 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 4803 } 4804 if (mac_status & MAC_STATUS_PCS_SYNCED) { 4805 tg3_setup_flow_control(tp, 0, 0); 4806 current_link_up = 1; 4807 } 4808 goto out; 4809 } 4810 4811 /* Want auto-negotiation. */ 4812 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP; 4813 4814 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 4815 if (flowctrl & ADVERTISE_1000XPAUSE) 4816 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP; 4817 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 4818 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE; 4819 4820 if (sg_dig_ctrl != expected_sg_dig_ctrl) { 4821 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) && 4822 tp->serdes_counter && 4823 ((mac_status & (MAC_STATUS_PCS_SYNCED | 4824 MAC_STATUS_RCVD_CFG)) == 4825 MAC_STATUS_PCS_SYNCED)) { 4826 tp->serdes_counter--; 4827 current_link_up = 1; 4828 goto out; 4829 } 4830 restart_autoneg: 4831 if (workaround) 4832 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000); 4833 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET); 4834 udelay(5); 4835 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl); 4836 4837 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 4838 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4839 } else if (mac_status & (MAC_STATUS_PCS_SYNCED | 4840 MAC_STATUS_SIGNAL_DET)) { 4841 sg_dig_status = tr32(SG_DIG_STATUS); 4842 mac_status = tr32(MAC_STATUS); 4843 4844 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) && 4845 (mac_status & MAC_STATUS_PCS_SYNCED)) { 4846 u32 local_adv = 0, remote_adv = 0; 4847 4848 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP) 4849 local_adv |= ADVERTISE_1000XPAUSE; 4850 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE) 4851 local_adv |= ADVERTISE_1000XPSE_ASYM; 4852 4853 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE) 4854 remote_adv |= LPA_1000XPAUSE; 4855 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE) 4856 remote_adv |= LPA_1000XPAUSE_ASYM; 4857 4858 tp->link_config.rmt_adv = 4859 mii_adv_to_ethtool_adv_x(remote_adv); 4860 4861 tg3_setup_flow_control(tp, local_adv, remote_adv); 4862 current_link_up = 1; 4863 tp->serdes_counter = 0; 4864 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4865 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) { 4866 if (tp->serdes_counter) 4867 tp->serdes_counter--; 4868 else { 4869 if (workaround) { 4870 u32 val = serdes_cfg; 4871 4872 if (port_a) 4873 val |= 0xc010000; 4874 else 4875 val |= 0x4010000; 4876 4877 tw32_f(MAC_SERDES_CFG, val); 4878 } 4879 4880 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 4881 udelay(40); 4882 4883 /* Link parallel detection - link is up */ 4884 /* only if we have PCS_SYNC and not */ 4885 /* receiving config code words */ 4886 mac_status = tr32(MAC_STATUS); 4887 if ((mac_status & MAC_STATUS_PCS_SYNCED) && 4888 !(mac_status & MAC_STATUS_RCVD_CFG)) { 4889 tg3_setup_flow_control(tp, 0, 0); 4890 current_link_up = 1; 4891 tp->phy_flags |= 4892 TG3_PHYFLG_PARALLEL_DETECT; 4893 tp->serdes_counter = 4894 SERDES_PARALLEL_DET_TIMEOUT; 4895 } else 4896 goto restart_autoneg; 4897 } 4898 } 4899 } else { 4900 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 4901 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4902 } 4903 4904 out: 4905 return current_link_up; 4906 } 4907 4908 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status) 4909 { 4910 int current_link_up = 0; 4911 4912 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) 4913 goto out; 4914 4915 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4916 u32 txflags, rxflags; 4917 int i; 4918 4919 if (fiber_autoneg(tp, &txflags, &rxflags)) { 4920 u32 local_adv = 0, remote_adv = 0; 4921 4922 if (txflags & ANEG_CFG_PS1) 4923 local_adv |= ADVERTISE_1000XPAUSE; 4924 if (txflags & ANEG_CFG_PS2) 4925 local_adv |= ADVERTISE_1000XPSE_ASYM; 4926 4927 if (rxflags & MR_LP_ADV_SYM_PAUSE) 4928 remote_adv |= LPA_1000XPAUSE; 4929 if (rxflags & MR_LP_ADV_ASYM_PAUSE) 4930 remote_adv |= LPA_1000XPAUSE_ASYM; 4931 4932 tp->link_config.rmt_adv = 4933 mii_adv_to_ethtool_adv_x(remote_adv); 4934 4935 tg3_setup_flow_control(tp, local_adv, remote_adv); 4936 4937 current_link_up = 1; 4938 } 4939 for (i = 0; i < 30; i++) { 4940 udelay(20); 4941 tw32_f(MAC_STATUS, 4942 (MAC_STATUS_SYNC_CHANGED | 4943 MAC_STATUS_CFG_CHANGED)); 4944 udelay(40); 4945 if ((tr32(MAC_STATUS) & 4946 (MAC_STATUS_SYNC_CHANGED | 4947 MAC_STATUS_CFG_CHANGED)) == 0) 4948 break; 4949 } 4950 4951 mac_status = tr32(MAC_STATUS); 4952 if (current_link_up == 0 && 4953 (mac_status & MAC_STATUS_PCS_SYNCED) && 4954 !(mac_status & MAC_STATUS_RCVD_CFG)) 4955 current_link_up = 1; 4956 } else { 4957 tg3_setup_flow_control(tp, 0, 0); 4958 4959 /* Forcing 1000FD link up. */ 4960 current_link_up = 1; 4961 4962 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS)); 4963 udelay(40); 4964 4965 tw32_f(MAC_MODE, tp->mac_mode); 4966 udelay(40); 4967 } 4968 4969 out: 4970 return current_link_up; 4971 } 4972 4973 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset) 4974 { 4975 u32 orig_pause_cfg; 4976 u16 orig_active_speed; 4977 u8 orig_active_duplex; 4978 u32 mac_status; 4979 int current_link_up; 4980 int i; 4981 4982 orig_pause_cfg = tp->link_config.active_flowctrl; 4983 orig_active_speed = tp->link_config.active_speed; 4984 orig_active_duplex = tp->link_config.active_duplex; 4985 4986 if (!tg3_flag(tp, HW_AUTONEG) && 4987 netif_carrier_ok(tp->dev) && 4988 tg3_flag(tp, INIT_COMPLETE)) { 4989 mac_status = tr32(MAC_STATUS); 4990 mac_status &= (MAC_STATUS_PCS_SYNCED | 4991 MAC_STATUS_SIGNAL_DET | 4992 MAC_STATUS_CFG_CHANGED | 4993 MAC_STATUS_RCVD_CFG); 4994 if (mac_status == (MAC_STATUS_PCS_SYNCED | 4995 MAC_STATUS_SIGNAL_DET)) { 4996 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 4997 MAC_STATUS_CFG_CHANGED)); 4998 return 0; 4999 } 5000 } 5001 5002 tw32_f(MAC_TX_AUTO_NEG, 0); 5003 5004 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 5005 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI; 5006 tw32_f(MAC_MODE, tp->mac_mode); 5007 udelay(40); 5008 5009 if (tp->phy_id == TG3_PHY_ID_BCM8002) 5010 tg3_init_bcm8002(tp); 5011 5012 /* Enable link change event even when serdes polling. */ 5013 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5014 udelay(40); 5015 5016 current_link_up = 0; 5017 tp->link_config.rmt_adv = 0; 5018 mac_status = tr32(MAC_STATUS); 5019 5020 if (tg3_flag(tp, HW_AUTONEG)) 5021 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status); 5022 else 5023 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status); 5024 5025 tp->napi[0].hw_status->status = 5026 (SD_STATUS_UPDATED | 5027 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG)); 5028 5029 for (i = 0; i < 100; i++) { 5030 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5031 MAC_STATUS_CFG_CHANGED)); 5032 udelay(5); 5033 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED | 5034 MAC_STATUS_CFG_CHANGED | 5035 MAC_STATUS_LNKSTATE_CHANGED)) == 0) 5036 break; 5037 } 5038 5039 mac_status = tr32(MAC_STATUS); 5040 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) { 5041 current_link_up = 0; 5042 if (tp->link_config.autoneg == AUTONEG_ENABLE && 5043 tp->serdes_counter == 0) { 5044 tw32_f(MAC_MODE, (tp->mac_mode | 5045 MAC_MODE_SEND_CONFIGS)); 5046 udelay(1); 5047 tw32_f(MAC_MODE, tp->mac_mode); 5048 } 5049 } 5050 5051 if (current_link_up == 1) { 5052 tp->link_config.active_speed = SPEED_1000; 5053 tp->link_config.active_duplex = DUPLEX_FULL; 5054 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5055 LED_CTRL_LNKLED_OVERRIDE | 5056 LED_CTRL_1000MBPS_ON)); 5057 } else { 5058 tp->link_config.active_speed = SPEED_UNKNOWN; 5059 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 5060 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5061 LED_CTRL_LNKLED_OVERRIDE | 5062 LED_CTRL_TRAFFIC_OVERRIDE)); 5063 } 5064 5065 if (current_link_up != netif_carrier_ok(tp->dev)) { 5066 if (current_link_up) 5067 netif_carrier_on(tp->dev); 5068 else 5069 netif_carrier_off(tp->dev); 5070 tg3_link_report(tp); 5071 } else { 5072 u32 now_pause_cfg = tp->link_config.active_flowctrl; 5073 if (orig_pause_cfg != now_pause_cfg || 5074 orig_active_speed != tp->link_config.active_speed || 5075 orig_active_duplex != tp->link_config.active_duplex) 5076 tg3_link_report(tp); 5077 } 5078 5079 return 0; 5080 } 5081 5082 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset) 5083 { 5084 int current_link_up, err = 0; 5085 u32 bmsr, bmcr; 5086 u16 current_speed; 5087 u8 current_duplex; 5088 u32 local_adv, remote_adv; 5089 5090 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5091 tw32_f(MAC_MODE, tp->mac_mode); 5092 udelay(40); 5093 5094 tw32(MAC_EVENT, 0); 5095 5096 tw32_f(MAC_STATUS, 5097 (MAC_STATUS_SYNC_CHANGED | 5098 MAC_STATUS_CFG_CHANGED | 5099 MAC_STATUS_MI_COMPLETION | 5100 MAC_STATUS_LNKSTATE_CHANGED)); 5101 udelay(40); 5102 5103 if (force_reset) 5104 tg3_phy_reset(tp); 5105 5106 current_link_up = 0; 5107 current_speed = SPEED_UNKNOWN; 5108 current_duplex = DUPLEX_UNKNOWN; 5109 tp->link_config.rmt_adv = 0; 5110 5111 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5112 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5113 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 5114 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5115 bmsr |= BMSR_LSTATUS; 5116 else 5117 bmsr &= ~BMSR_LSTATUS; 5118 } 5119 5120 err |= tg3_readphy(tp, MII_BMCR, &bmcr); 5121 5122 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset && 5123 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5124 /* do nothing, just check for link up at the end */ 5125 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5126 u32 adv, newadv; 5127 5128 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5129 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF | 5130 ADVERTISE_1000XPAUSE | 5131 ADVERTISE_1000XPSE_ASYM | 5132 ADVERTISE_SLCT); 5133 5134 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5135 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising); 5136 5137 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) { 5138 tg3_writephy(tp, MII_ADVERTISE, newadv); 5139 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; 5140 tg3_writephy(tp, MII_BMCR, bmcr); 5141 5142 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5143 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S; 5144 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5145 5146 return err; 5147 } 5148 } else { 5149 u32 new_bmcr; 5150 5151 bmcr &= ~BMCR_SPEED1000; 5152 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX); 5153 5154 if (tp->link_config.duplex == DUPLEX_FULL) 5155 new_bmcr |= BMCR_FULLDPLX; 5156 5157 if (new_bmcr != bmcr) { 5158 /* BMCR_SPEED1000 is a reserved bit that needs 5159 * to be set on write. 5160 */ 5161 new_bmcr |= BMCR_SPEED1000; 5162 5163 /* Force a linkdown */ 5164 if (netif_carrier_ok(tp->dev)) { 5165 u32 adv; 5166 5167 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5168 adv &= ~(ADVERTISE_1000XFULL | 5169 ADVERTISE_1000XHALF | 5170 ADVERTISE_SLCT); 5171 tg3_writephy(tp, MII_ADVERTISE, adv); 5172 tg3_writephy(tp, MII_BMCR, bmcr | 5173 BMCR_ANRESTART | 5174 BMCR_ANENABLE); 5175 udelay(10); 5176 netif_carrier_off(tp->dev); 5177 } 5178 tg3_writephy(tp, MII_BMCR, new_bmcr); 5179 bmcr = new_bmcr; 5180 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5181 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5182 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 5183 ASIC_REV_5714) { 5184 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5185 bmsr |= BMSR_LSTATUS; 5186 else 5187 bmsr &= ~BMSR_LSTATUS; 5188 } 5189 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5190 } 5191 } 5192 5193 if (bmsr & BMSR_LSTATUS) { 5194 current_speed = SPEED_1000; 5195 current_link_up = 1; 5196 if (bmcr & BMCR_FULLDPLX) 5197 current_duplex = DUPLEX_FULL; 5198 else 5199 current_duplex = DUPLEX_HALF; 5200 5201 local_adv = 0; 5202 remote_adv = 0; 5203 5204 if (bmcr & BMCR_ANENABLE) { 5205 u32 common; 5206 5207 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv); 5208 err |= tg3_readphy(tp, MII_LPA, &remote_adv); 5209 common = local_adv & remote_adv; 5210 if (common & (ADVERTISE_1000XHALF | 5211 ADVERTISE_1000XFULL)) { 5212 if (common & ADVERTISE_1000XFULL) 5213 current_duplex = DUPLEX_FULL; 5214 else 5215 current_duplex = DUPLEX_HALF; 5216 5217 tp->link_config.rmt_adv = 5218 mii_adv_to_ethtool_adv_x(remote_adv); 5219 } else if (!tg3_flag(tp, 5780_CLASS)) { 5220 /* Link is up via parallel detect */ 5221 } else { 5222 current_link_up = 0; 5223 } 5224 } 5225 } 5226 5227 if (current_link_up == 1 && current_duplex == DUPLEX_FULL) 5228 tg3_setup_flow_control(tp, local_adv, remote_adv); 5229 5230 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5231 if (tp->link_config.active_duplex == DUPLEX_HALF) 5232 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5233 5234 tw32_f(MAC_MODE, tp->mac_mode); 5235 udelay(40); 5236 5237 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5238 5239 tp->link_config.active_speed = current_speed; 5240 tp->link_config.active_duplex = current_duplex; 5241 5242 if (current_link_up != netif_carrier_ok(tp->dev)) { 5243 if (current_link_up) 5244 netif_carrier_on(tp->dev); 5245 else { 5246 netif_carrier_off(tp->dev); 5247 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5248 } 5249 tg3_link_report(tp); 5250 } 5251 return err; 5252 } 5253 5254 static void tg3_serdes_parallel_detect(struct tg3 *tp) 5255 { 5256 if (tp->serdes_counter) { 5257 /* Give autoneg time to complete. */ 5258 tp->serdes_counter--; 5259 return; 5260 } 5261 5262 if (!netif_carrier_ok(tp->dev) && 5263 (tp->link_config.autoneg == AUTONEG_ENABLE)) { 5264 u32 bmcr; 5265 5266 tg3_readphy(tp, MII_BMCR, &bmcr); 5267 if (bmcr & BMCR_ANENABLE) { 5268 u32 phy1, phy2; 5269 5270 /* Select shadow register 0x1f */ 5271 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00); 5272 tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1); 5273 5274 /* Select expansion interrupt status register */ 5275 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 5276 MII_TG3_DSP_EXP1_INT_STAT); 5277 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 5278 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 5279 5280 if ((phy1 & 0x10) && !(phy2 & 0x20)) { 5281 /* We have signal detect and not receiving 5282 * config code words, link is up by parallel 5283 * detection. 5284 */ 5285 5286 bmcr &= ~BMCR_ANENABLE; 5287 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX; 5288 tg3_writephy(tp, MII_BMCR, bmcr); 5289 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT; 5290 } 5291 } 5292 } else if (netif_carrier_ok(tp->dev) && 5293 (tp->link_config.autoneg == AUTONEG_ENABLE) && 5294 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5295 u32 phy2; 5296 5297 /* Select expansion interrupt status register */ 5298 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 5299 MII_TG3_DSP_EXP1_INT_STAT); 5300 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 5301 if (phy2 & 0x20) { 5302 u32 bmcr; 5303 5304 /* Config code words received, turn on autoneg. */ 5305 tg3_readphy(tp, MII_BMCR, &bmcr); 5306 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE); 5307 5308 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5309 5310 } 5311 } 5312 } 5313 5314 static int tg3_setup_phy(struct tg3 *tp, int force_reset) 5315 { 5316 u32 val; 5317 int err; 5318 5319 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 5320 err = tg3_setup_fiber_phy(tp, force_reset); 5321 else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 5322 err = tg3_setup_fiber_mii_phy(tp, force_reset); 5323 else 5324 err = tg3_setup_copper_phy(tp, force_reset); 5325 5326 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) { 5327 u32 scale; 5328 5329 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK; 5330 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5) 5331 scale = 65; 5332 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25) 5333 scale = 6; 5334 else 5335 scale = 12; 5336 5337 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK; 5338 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT); 5339 tw32(GRC_MISC_CFG, val); 5340 } 5341 5342 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 5343 (6 << TX_LENGTHS_IPG_SHIFT); 5344 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 5345 val |= tr32(MAC_TX_LENGTHS) & 5346 (TX_LENGTHS_JMB_FRM_LEN_MSK | 5347 TX_LENGTHS_CNT_DWN_VAL_MSK); 5348 5349 if (tp->link_config.active_speed == SPEED_1000 && 5350 tp->link_config.active_duplex == DUPLEX_HALF) 5351 tw32(MAC_TX_LENGTHS, val | 5352 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)); 5353 else 5354 tw32(MAC_TX_LENGTHS, val | 5355 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)); 5356 5357 if (!tg3_flag(tp, 5705_PLUS)) { 5358 if (netif_carrier_ok(tp->dev)) { 5359 tw32(HOSTCC_STAT_COAL_TICKS, 5360 tp->coal.stats_block_coalesce_usecs); 5361 } else { 5362 tw32(HOSTCC_STAT_COAL_TICKS, 0); 5363 } 5364 } 5365 5366 if (tg3_flag(tp, ASPM_WORKAROUND)) { 5367 val = tr32(PCIE_PWR_MGMT_THRESH); 5368 if (!netif_carrier_ok(tp->dev)) 5369 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) | 5370 tp->pwrmgmt_thresh; 5371 else 5372 val |= PCIE_PWR_MGMT_L1_THRESH_MSK; 5373 tw32(PCIE_PWR_MGMT_THRESH, val); 5374 } 5375 5376 return err; 5377 } 5378 5379 static inline int tg3_irq_sync(struct tg3 *tp) 5380 { 5381 return tp->irq_sync; 5382 } 5383 5384 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len) 5385 { 5386 int i; 5387 5388 dst = (u32 *)((u8 *)dst + off); 5389 for (i = 0; i < len; i += sizeof(u32)) 5390 *dst++ = tr32(off + i); 5391 } 5392 5393 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs) 5394 { 5395 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0); 5396 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200); 5397 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0); 5398 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0); 5399 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04); 5400 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80); 5401 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48); 5402 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04); 5403 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20); 5404 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c); 5405 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c); 5406 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c); 5407 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44); 5408 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04); 5409 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20); 5410 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14); 5411 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08); 5412 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08); 5413 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100); 5414 5415 if (tg3_flag(tp, SUPPORT_MSIX)) 5416 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180); 5417 5418 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10); 5419 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58); 5420 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08); 5421 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08); 5422 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04); 5423 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04); 5424 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04); 5425 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04); 5426 5427 if (!tg3_flag(tp, 5705_PLUS)) { 5428 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04); 5429 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04); 5430 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04); 5431 } 5432 5433 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110); 5434 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120); 5435 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c); 5436 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04); 5437 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c); 5438 5439 if (tg3_flag(tp, NVRAM)) 5440 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24); 5441 } 5442 5443 static void tg3_dump_state(struct tg3 *tp) 5444 { 5445 int i; 5446 u32 *regs; 5447 5448 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC); 5449 if (!regs) { 5450 netdev_err(tp->dev, "Failed allocating register dump buffer\n"); 5451 return; 5452 } 5453 5454 if (tg3_flag(tp, PCI_EXPRESS)) { 5455 /* Read up to but not including private PCI registers */ 5456 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32)) 5457 regs[i / sizeof(u32)] = tr32(i); 5458 } else 5459 tg3_dump_legacy_regs(tp, regs); 5460 5461 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) { 5462 if (!regs[i + 0] && !regs[i + 1] && 5463 !regs[i + 2] && !regs[i + 3]) 5464 continue; 5465 5466 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", 5467 i * 4, 5468 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]); 5469 } 5470 5471 kfree(regs); 5472 5473 for (i = 0; i < tp->irq_cnt; i++) { 5474 struct tg3_napi *tnapi = &tp->napi[i]; 5475 5476 /* SW status block */ 5477 netdev_err(tp->dev, 5478 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n", 5479 i, 5480 tnapi->hw_status->status, 5481 tnapi->hw_status->status_tag, 5482 tnapi->hw_status->rx_jumbo_consumer, 5483 tnapi->hw_status->rx_consumer, 5484 tnapi->hw_status->rx_mini_consumer, 5485 tnapi->hw_status->idx[0].rx_producer, 5486 tnapi->hw_status->idx[0].tx_consumer); 5487 5488 netdev_err(tp->dev, 5489 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n", 5490 i, 5491 tnapi->last_tag, tnapi->last_irq_tag, 5492 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending, 5493 tnapi->rx_rcb_ptr, 5494 tnapi->prodring.rx_std_prod_idx, 5495 tnapi->prodring.rx_std_cons_idx, 5496 tnapi->prodring.rx_jmb_prod_idx, 5497 tnapi->prodring.rx_jmb_cons_idx); 5498 } 5499 } 5500 5501 /* This is called whenever we suspect that the system chipset is re- 5502 * ordering the sequence of MMIO to the tx send mailbox. The symptom 5503 * is bogus tx completions. We try to recover by setting the 5504 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later 5505 * in the workqueue. 5506 */ 5507 static void tg3_tx_recover(struct tg3 *tp) 5508 { 5509 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) || 5510 tp->write32_tx_mbox == tg3_write_indirect_mbox); 5511 5512 netdev_warn(tp->dev, 5513 "The system may be re-ordering memory-mapped I/O " 5514 "cycles to the network device, attempting to recover. " 5515 "Please report the problem to the driver maintainer " 5516 "and include system chipset information.\n"); 5517 5518 spin_lock(&tp->lock); 5519 tg3_flag_set(tp, TX_RECOVERY_PENDING); 5520 spin_unlock(&tp->lock); 5521 } 5522 5523 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi) 5524 { 5525 /* Tell compiler to fetch tx indices from memory. */ 5526 barrier(); 5527 return tnapi->tx_pending - 5528 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1)); 5529 } 5530 5531 /* Tigon3 never reports partial packet sends. So we do not 5532 * need special logic to handle SKBs that have not had all 5533 * of their frags sent yet, like SunGEM does. 5534 */ 5535 static void tg3_tx(struct tg3_napi *tnapi) 5536 { 5537 struct tg3 *tp = tnapi->tp; 5538 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer; 5539 u32 sw_idx = tnapi->tx_cons; 5540 struct netdev_queue *txq; 5541 int index = tnapi - tp->napi; 5542 unsigned int pkts_compl = 0, bytes_compl = 0; 5543 5544 if (tg3_flag(tp, ENABLE_TSS)) 5545 index--; 5546 5547 txq = netdev_get_tx_queue(tp->dev, index); 5548 5549 while (sw_idx != hw_idx) { 5550 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx]; 5551 struct sk_buff *skb = ri->skb; 5552 int i, tx_bug = 0; 5553 5554 if (unlikely(skb == NULL)) { 5555 tg3_tx_recover(tp); 5556 return; 5557 } 5558 5559 pci_unmap_single(tp->pdev, 5560 dma_unmap_addr(ri, mapping), 5561 skb_headlen(skb), 5562 PCI_DMA_TODEVICE); 5563 5564 ri->skb = NULL; 5565 5566 while (ri->fragmented) { 5567 ri->fragmented = false; 5568 sw_idx = NEXT_TX(sw_idx); 5569 ri = &tnapi->tx_buffers[sw_idx]; 5570 } 5571 5572 sw_idx = NEXT_TX(sw_idx); 5573 5574 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 5575 ri = &tnapi->tx_buffers[sw_idx]; 5576 if (unlikely(ri->skb != NULL || sw_idx == hw_idx)) 5577 tx_bug = 1; 5578 5579 pci_unmap_page(tp->pdev, 5580 dma_unmap_addr(ri, mapping), 5581 skb_frag_size(&skb_shinfo(skb)->frags[i]), 5582 PCI_DMA_TODEVICE); 5583 5584 while (ri->fragmented) { 5585 ri->fragmented = false; 5586 sw_idx = NEXT_TX(sw_idx); 5587 ri = &tnapi->tx_buffers[sw_idx]; 5588 } 5589 5590 sw_idx = NEXT_TX(sw_idx); 5591 } 5592 5593 pkts_compl++; 5594 bytes_compl += skb->len; 5595 5596 dev_kfree_skb(skb); 5597 5598 if (unlikely(tx_bug)) { 5599 tg3_tx_recover(tp); 5600 return; 5601 } 5602 } 5603 5604 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl); 5605 5606 tnapi->tx_cons = sw_idx; 5607 5608 /* Need to make the tx_cons update visible to tg3_start_xmit() 5609 * before checking for netif_queue_stopped(). Without the 5610 * memory barrier, there is a small possibility that tg3_start_xmit() 5611 * will miss it and cause the queue to be stopped forever. 5612 */ 5613 smp_mb(); 5614 5615 if (unlikely(netif_tx_queue_stopped(txq) && 5616 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) { 5617 __netif_tx_lock(txq, smp_processor_id()); 5618 if (netif_tx_queue_stopped(txq) && 5619 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))) 5620 netif_tx_wake_queue(txq); 5621 __netif_tx_unlock(txq); 5622 } 5623 } 5624 5625 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz) 5626 { 5627 if (!ri->data) 5628 return; 5629 5630 pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping), 5631 map_sz, PCI_DMA_FROMDEVICE); 5632 kfree(ri->data); 5633 ri->data = NULL; 5634 } 5635 5636 /* Returns size of skb allocated or < 0 on error. 5637 * 5638 * We only need to fill in the address because the other members 5639 * of the RX descriptor are invariant, see tg3_init_rings. 5640 * 5641 * Note the purposeful assymetry of cpu vs. chip accesses. For 5642 * posting buffers we only dirty the first cache line of the RX 5643 * descriptor (containing the address). Whereas for the RX status 5644 * buffers the cpu only reads the last cacheline of the RX descriptor 5645 * (to fetch the error flags, vlan tag, checksum, and opaque cookie). 5646 */ 5647 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr, 5648 u32 opaque_key, u32 dest_idx_unmasked) 5649 { 5650 struct tg3_rx_buffer_desc *desc; 5651 struct ring_info *map; 5652 u8 *data; 5653 dma_addr_t mapping; 5654 int skb_size, data_size, dest_idx; 5655 5656 switch (opaque_key) { 5657 case RXD_OPAQUE_RING_STD: 5658 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 5659 desc = &tpr->rx_std[dest_idx]; 5660 map = &tpr->rx_std_buffers[dest_idx]; 5661 data_size = tp->rx_pkt_map_sz; 5662 break; 5663 5664 case RXD_OPAQUE_RING_JUMBO: 5665 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 5666 desc = &tpr->rx_jmb[dest_idx].std; 5667 map = &tpr->rx_jmb_buffers[dest_idx]; 5668 data_size = TG3_RX_JMB_MAP_SZ; 5669 break; 5670 5671 default: 5672 return -EINVAL; 5673 } 5674 5675 /* Do not overwrite any of the map or rp information 5676 * until we are sure we can commit to a new buffer. 5677 * 5678 * Callers depend upon this behavior and assume that 5679 * we leave everything unchanged if we fail. 5680 */ 5681 skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) + 5682 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 5683 data = kmalloc(skb_size, GFP_ATOMIC); 5684 if (!data) 5685 return -ENOMEM; 5686 5687 mapping = pci_map_single(tp->pdev, 5688 data + TG3_RX_OFFSET(tp), 5689 data_size, 5690 PCI_DMA_FROMDEVICE); 5691 if (pci_dma_mapping_error(tp->pdev, mapping)) { 5692 kfree(data); 5693 return -EIO; 5694 } 5695 5696 map->data = data; 5697 dma_unmap_addr_set(map, mapping, mapping); 5698 5699 desc->addr_hi = ((u64)mapping >> 32); 5700 desc->addr_lo = ((u64)mapping & 0xffffffff); 5701 5702 return data_size; 5703 } 5704 5705 /* We only need to move over in the address because the other 5706 * members of the RX descriptor are invariant. See notes above 5707 * tg3_alloc_rx_data for full details. 5708 */ 5709 static void tg3_recycle_rx(struct tg3_napi *tnapi, 5710 struct tg3_rx_prodring_set *dpr, 5711 u32 opaque_key, int src_idx, 5712 u32 dest_idx_unmasked) 5713 { 5714 struct tg3 *tp = tnapi->tp; 5715 struct tg3_rx_buffer_desc *src_desc, *dest_desc; 5716 struct ring_info *src_map, *dest_map; 5717 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring; 5718 int dest_idx; 5719 5720 switch (opaque_key) { 5721 case RXD_OPAQUE_RING_STD: 5722 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 5723 dest_desc = &dpr->rx_std[dest_idx]; 5724 dest_map = &dpr->rx_std_buffers[dest_idx]; 5725 src_desc = &spr->rx_std[src_idx]; 5726 src_map = &spr->rx_std_buffers[src_idx]; 5727 break; 5728 5729 case RXD_OPAQUE_RING_JUMBO: 5730 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 5731 dest_desc = &dpr->rx_jmb[dest_idx].std; 5732 dest_map = &dpr->rx_jmb_buffers[dest_idx]; 5733 src_desc = &spr->rx_jmb[src_idx].std; 5734 src_map = &spr->rx_jmb_buffers[src_idx]; 5735 break; 5736 5737 default: 5738 return; 5739 } 5740 5741 dest_map->data = src_map->data; 5742 dma_unmap_addr_set(dest_map, mapping, 5743 dma_unmap_addr(src_map, mapping)); 5744 dest_desc->addr_hi = src_desc->addr_hi; 5745 dest_desc->addr_lo = src_desc->addr_lo; 5746 5747 /* Ensure that the update to the skb happens after the physical 5748 * addresses have been transferred to the new BD location. 5749 */ 5750 smp_wmb(); 5751 5752 src_map->data = NULL; 5753 } 5754 5755 /* The RX ring scheme is composed of multiple rings which post fresh 5756 * buffers to the chip, and one special ring the chip uses to report 5757 * status back to the host. 5758 * 5759 * The special ring reports the status of received packets to the 5760 * host. The chip does not write into the original descriptor the 5761 * RX buffer was obtained from. The chip simply takes the original 5762 * descriptor as provided by the host, updates the status and length 5763 * field, then writes this into the next status ring entry. 5764 * 5765 * Each ring the host uses to post buffers to the chip is described 5766 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives, 5767 * it is first placed into the on-chip ram. When the packet's length 5768 * is known, it walks down the TG3_BDINFO entries to select the ring. 5769 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO 5770 * which is within the range of the new packet's length is chosen. 5771 * 5772 * The "separate ring for rx status" scheme may sound queer, but it makes 5773 * sense from a cache coherency perspective. If only the host writes 5774 * to the buffer post rings, and only the chip writes to the rx status 5775 * rings, then cache lines never move beyond shared-modified state. 5776 * If both the host and chip were to write into the same ring, cache line 5777 * eviction could occur since both entities want it in an exclusive state. 5778 */ 5779 static int tg3_rx(struct tg3_napi *tnapi, int budget) 5780 { 5781 struct tg3 *tp = tnapi->tp; 5782 u32 work_mask, rx_std_posted = 0; 5783 u32 std_prod_idx, jmb_prod_idx; 5784 u32 sw_idx = tnapi->rx_rcb_ptr; 5785 u16 hw_idx; 5786 int received; 5787 struct tg3_rx_prodring_set *tpr = &tnapi->prodring; 5788 5789 hw_idx = *(tnapi->rx_rcb_prod_idx); 5790 /* 5791 * We need to order the read of hw_idx and the read of 5792 * the opaque cookie. 5793 */ 5794 rmb(); 5795 work_mask = 0; 5796 received = 0; 5797 std_prod_idx = tpr->rx_std_prod_idx; 5798 jmb_prod_idx = tpr->rx_jmb_prod_idx; 5799 while (sw_idx != hw_idx && budget > 0) { 5800 struct ring_info *ri; 5801 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx]; 5802 unsigned int len; 5803 struct sk_buff *skb; 5804 dma_addr_t dma_addr; 5805 u32 opaque_key, desc_idx, *post_ptr; 5806 u8 *data; 5807 5808 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 5809 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 5810 if (opaque_key == RXD_OPAQUE_RING_STD) { 5811 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx]; 5812 dma_addr = dma_unmap_addr(ri, mapping); 5813 data = ri->data; 5814 post_ptr = &std_prod_idx; 5815 rx_std_posted++; 5816 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 5817 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx]; 5818 dma_addr = dma_unmap_addr(ri, mapping); 5819 data = ri->data; 5820 post_ptr = &jmb_prod_idx; 5821 } else 5822 goto next_pkt_nopost; 5823 5824 work_mask |= opaque_key; 5825 5826 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 5827 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) { 5828 drop_it: 5829 tg3_recycle_rx(tnapi, tpr, opaque_key, 5830 desc_idx, *post_ptr); 5831 drop_it_no_recycle: 5832 /* Other statistics kept track of by card. */ 5833 tp->rx_dropped++; 5834 goto next_pkt; 5835 } 5836 5837 prefetch(data + TG3_RX_OFFSET(tp)); 5838 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 5839 ETH_FCS_LEN; 5840 5841 if (len > TG3_RX_COPY_THRESH(tp)) { 5842 int skb_size; 5843 5844 skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key, 5845 *post_ptr); 5846 if (skb_size < 0) 5847 goto drop_it; 5848 5849 pci_unmap_single(tp->pdev, dma_addr, skb_size, 5850 PCI_DMA_FROMDEVICE); 5851 5852 skb = build_skb(data); 5853 if (!skb) { 5854 kfree(data); 5855 goto drop_it_no_recycle; 5856 } 5857 skb_reserve(skb, TG3_RX_OFFSET(tp)); 5858 /* Ensure that the update to the data happens 5859 * after the usage of the old DMA mapping. 5860 */ 5861 smp_wmb(); 5862 5863 ri->data = NULL; 5864 5865 } else { 5866 tg3_recycle_rx(tnapi, tpr, opaque_key, 5867 desc_idx, *post_ptr); 5868 5869 skb = netdev_alloc_skb(tp->dev, 5870 len + TG3_RAW_IP_ALIGN); 5871 if (skb == NULL) 5872 goto drop_it_no_recycle; 5873 5874 skb_reserve(skb, TG3_RAW_IP_ALIGN); 5875 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 5876 memcpy(skb->data, 5877 data + TG3_RX_OFFSET(tp), 5878 len); 5879 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 5880 } 5881 5882 skb_put(skb, len); 5883 if ((tp->dev->features & NETIF_F_RXCSUM) && 5884 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 5885 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 5886 >> RXD_TCPCSUM_SHIFT) == 0xffff)) 5887 skb->ip_summed = CHECKSUM_UNNECESSARY; 5888 else 5889 skb_checksum_none_assert(skb); 5890 5891 skb->protocol = eth_type_trans(skb, tp->dev); 5892 5893 if (len > (tp->dev->mtu + ETH_HLEN) && 5894 skb->protocol != htons(ETH_P_8021Q)) { 5895 dev_kfree_skb(skb); 5896 goto drop_it_no_recycle; 5897 } 5898 5899 if (desc->type_flags & RXD_FLAG_VLAN && 5900 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) 5901 __vlan_hwaccel_put_tag(skb, 5902 desc->err_vlan & RXD_VLAN_MASK); 5903 5904 napi_gro_receive(&tnapi->napi, skb); 5905 5906 received++; 5907 budget--; 5908 5909 next_pkt: 5910 (*post_ptr)++; 5911 5912 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 5913 tpr->rx_std_prod_idx = std_prod_idx & 5914 tp->rx_std_ring_mask; 5915 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 5916 tpr->rx_std_prod_idx); 5917 work_mask &= ~RXD_OPAQUE_RING_STD; 5918 rx_std_posted = 0; 5919 } 5920 next_pkt_nopost: 5921 sw_idx++; 5922 sw_idx &= tp->rx_ret_ring_mask; 5923 5924 /* Refresh hw_idx to see if there is new work */ 5925 if (sw_idx == hw_idx) { 5926 hw_idx = *(tnapi->rx_rcb_prod_idx); 5927 rmb(); 5928 } 5929 } 5930 5931 /* ACK the status ring. */ 5932 tnapi->rx_rcb_ptr = sw_idx; 5933 tw32_rx_mbox(tnapi->consmbox, sw_idx); 5934 5935 /* Refill RX ring(s). */ 5936 if (!tg3_flag(tp, ENABLE_RSS)) { 5937 /* Sync BD data before updating mailbox */ 5938 wmb(); 5939 5940 if (work_mask & RXD_OPAQUE_RING_STD) { 5941 tpr->rx_std_prod_idx = std_prod_idx & 5942 tp->rx_std_ring_mask; 5943 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 5944 tpr->rx_std_prod_idx); 5945 } 5946 if (work_mask & RXD_OPAQUE_RING_JUMBO) { 5947 tpr->rx_jmb_prod_idx = jmb_prod_idx & 5948 tp->rx_jmb_ring_mask; 5949 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 5950 tpr->rx_jmb_prod_idx); 5951 } 5952 mmiowb(); 5953 } else if (work_mask) { 5954 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be 5955 * updated before the producer indices can be updated. 5956 */ 5957 smp_wmb(); 5958 5959 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask; 5960 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask; 5961 5962 if (tnapi != &tp->napi[1]) { 5963 tp->rx_refill = true; 5964 napi_schedule(&tp->napi[1].napi); 5965 } 5966 } 5967 5968 return received; 5969 } 5970 5971 static void tg3_poll_link(struct tg3 *tp) 5972 { 5973 /* handle link change and other phy events */ 5974 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 5975 struct tg3_hw_status *sblk = tp->napi[0].hw_status; 5976 5977 if (sblk->status & SD_STATUS_LINK_CHG) { 5978 sblk->status = SD_STATUS_UPDATED | 5979 (sblk->status & ~SD_STATUS_LINK_CHG); 5980 spin_lock(&tp->lock); 5981 if (tg3_flag(tp, USE_PHYLIB)) { 5982 tw32_f(MAC_STATUS, 5983 (MAC_STATUS_SYNC_CHANGED | 5984 MAC_STATUS_CFG_CHANGED | 5985 MAC_STATUS_MI_COMPLETION | 5986 MAC_STATUS_LNKSTATE_CHANGED)); 5987 udelay(40); 5988 } else 5989 tg3_setup_phy(tp, 0); 5990 spin_unlock(&tp->lock); 5991 } 5992 } 5993 } 5994 5995 static int tg3_rx_prodring_xfer(struct tg3 *tp, 5996 struct tg3_rx_prodring_set *dpr, 5997 struct tg3_rx_prodring_set *spr) 5998 { 5999 u32 si, di, cpycnt, src_prod_idx; 6000 int i, err = 0; 6001 6002 while (1) { 6003 src_prod_idx = spr->rx_std_prod_idx; 6004 6005 /* Make sure updates to the rx_std_buffers[] entries and the 6006 * standard producer index are seen in the correct order. 6007 */ 6008 smp_rmb(); 6009 6010 if (spr->rx_std_cons_idx == src_prod_idx) 6011 break; 6012 6013 if (spr->rx_std_cons_idx < src_prod_idx) 6014 cpycnt = src_prod_idx - spr->rx_std_cons_idx; 6015 else 6016 cpycnt = tp->rx_std_ring_mask + 1 - 6017 spr->rx_std_cons_idx; 6018 6019 cpycnt = min(cpycnt, 6020 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx); 6021 6022 si = spr->rx_std_cons_idx; 6023 di = dpr->rx_std_prod_idx; 6024 6025 for (i = di; i < di + cpycnt; i++) { 6026 if (dpr->rx_std_buffers[i].data) { 6027 cpycnt = i - di; 6028 err = -ENOSPC; 6029 break; 6030 } 6031 } 6032 6033 if (!cpycnt) 6034 break; 6035 6036 /* Ensure that updates to the rx_std_buffers ring and the 6037 * shadowed hardware producer ring from tg3_recycle_skb() are 6038 * ordered correctly WRT the skb check above. 6039 */ 6040 smp_rmb(); 6041 6042 memcpy(&dpr->rx_std_buffers[di], 6043 &spr->rx_std_buffers[si], 6044 cpycnt * sizeof(struct ring_info)); 6045 6046 for (i = 0; i < cpycnt; i++, di++, si++) { 6047 struct tg3_rx_buffer_desc *sbd, *dbd; 6048 sbd = &spr->rx_std[si]; 6049 dbd = &dpr->rx_std[di]; 6050 dbd->addr_hi = sbd->addr_hi; 6051 dbd->addr_lo = sbd->addr_lo; 6052 } 6053 6054 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) & 6055 tp->rx_std_ring_mask; 6056 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) & 6057 tp->rx_std_ring_mask; 6058 } 6059 6060 while (1) { 6061 src_prod_idx = spr->rx_jmb_prod_idx; 6062 6063 /* Make sure updates to the rx_jmb_buffers[] entries and 6064 * the jumbo producer index are seen in the correct order. 6065 */ 6066 smp_rmb(); 6067 6068 if (spr->rx_jmb_cons_idx == src_prod_idx) 6069 break; 6070 6071 if (spr->rx_jmb_cons_idx < src_prod_idx) 6072 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx; 6073 else 6074 cpycnt = tp->rx_jmb_ring_mask + 1 - 6075 spr->rx_jmb_cons_idx; 6076 6077 cpycnt = min(cpycnt, 6078 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx); 6079 6080 si = spr->rx_jmb_cons_idx; 6081 di = dpr->rx_jmb_prod_idx; 6082 6083 for (i = di; i < di + cpycnt; i++) { 6084 if (dpr->rx_jmb_buffers[i].data) { 6085 cpycnt = i - di; 6086 err = -ENOSPC; 6087 break; 6088 } 6089 } 6090 6091 if (!cpycnt) 6092 break; 6093 6094 /* Ensure that updates to the rx_jmb_buffers ring and the 6095 * shadowed hardware producer ring from tg3_recycle_skb() are 6096 * ordered correctly WRT the skb check above. 6097 */ 6098 smp_rmb(); 6099 6100 memcpy(&dpr->rx_jmb_buffers[di], 6101 &spr->rx_jmb_buffers[si], 6102 cpycnt * sizeof(struct ring_info)); 6103 6104 for (i = 0; i < cpycnt; i++, di++, si++) { 6105 struct tg3_rx_buffer_desc *sbd, *dbd; 6106 sbd = &spr->rx_jmb[si].std; 6107 dbd = &dpr->rx_jmb[di].std; 6108 dbd->addr_hi = sbd->addr_hi; 6109 dbd->addr_lo = sbd->addr_lo; 6110 } 6111 6112 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) & 6113 tp->rx_jmb_ring_mask; 6114 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) & 6115 tp->rx_jmb_ring_mask; 6116 } 6117 6118 return err; 6119 } 6120 6121 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget) 6122 { 6123 struct tg3 *tp = tnapi->tp; 6124 6125 /* run TX completion thread */ 6126 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) { 6127 tg3_tx(tnapi); 6128 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 6129 return work_done; 6130 } 6131 6132 if (!tnapi->rx_rcb_prod_idx) 6133 return work_done; 6134 6135 /* run RX thread, within the bounds set by NAPI. 6136 * All RX "locking" is done by ensuring outside 6137 * code synchronizes with tg3->napi.poll() 6138 */ 6139 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 6140 work_done += tg3_rx(tnapi, budget - work_done); 6141 6142 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) { 6143 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring; 6144 int i, err = 0; 6145 u32 std_prod_idx = dpr->rx_std_prod_idx; 6146 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx; 6147 6148 tp->rx_refill = false; 6149 for (i = 1; i < tp->irq_cnt; i++) 6150 err |= tg3_rx_prodring_xfer(tp, dpr, 6151 &tp->napi[i].prodring); 6152 6153 wmb(); 6154 6155 if (std_prod_idx != dpr->rx_std_prod_idx) 6156 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6157 dpr->rx_std_prod_idx); 6158 6159 if (jmb_prod_idx != dpr->rx_jmb_prod_idx) 6160 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 6161 dpr->rx_jmb_prod_idx); 6162 6163 mmiowb(); 6164 6165 if (err) 6166 tw32_f(HOSTCC_MODE, tp->coal_now); 6167 } 6168 6169 return work_done; 6170 } 6171 6172 static inline void tg3_reset_task_schedule(struct tg3 *tp) 6173 { 6174 if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 6175 schedule_work(&tp->reset_task); 6176 } 6177 6178 static inline void tg3_reset_task_cancel(struct tg3 *tp) 6179 { 6180 cancel_work_sync(&tp->reset_task); 6181 tg3_flag_clear(tp, RESET_TASK_PENDING); 6182 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 6183 } 6184 6185 static int tg3_poll_msix(struct napi_struct *napi, int budget) 6186 { 6187 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 6188 struct tg3 *tp = tnapi->tp; 6189 int work_done = 0; 6190 struct tg3_hw_status *sblk = tnapi->hw_status; 6191 6192 while (1) { 6193 work_done = tg3_poll_work(tnapi, work_done, budget); 6194 6195 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 6196 goto tx_recovery; 6197 6198 if (unlikely(work_done >= budget)) 6199 break; 6200 6201 /* tp->last_tag is used in tg3_int_reenable() below 6202 * to tell the hw how much work has been processed, 6203 * so we must read it before checking for more work. 6204 */ 6205 tnapi->last_tag = sblk->status_tag; 6206 tnapi->last_irq_tag = tnapi->last_tag; 6207 rmb(); 6208 6209 /* check for RX/TX work to do */ 6210 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons && 6211 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) { 6212 6213 /* This test here is not race free, but will reduce 6214 * the number of interrupts by looping again. 6215 */ 6216 if (tnapi == &tp->napi[1] && tp->rx_refill) 6217 continue; 6218 6219 napi_complete(napi); 6220 /* Reenable interrupts. */ 6221 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 6222 6223 /* This test here is synchronized by napi_schedule() 6224 * and napi_complete() to close the race condition. 6225 */ 6226 if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) { 6227 tw32(HOSTCC_MODE, tp->coalesce_mode | 6228 HOSTCC_MODE_ENABLE | 6229 tnapi->coal_now); 6230 } 6231 mmiowb(); 6232 break; 6233 } 6234 } 6235 6236 return work_done; 6237 6238 tx_recovery: 6239 /* work_done is guaranteed to be less than budget. */ 6240 napi_complete(napi); 6241 tg3_reset_task_schedule(tp); 6242 return work_done; 6243 } 6244 6245 static void tg3_process_error(struct tg3 *tp) 6246 { 6247 u32 val; 6248 bool real_error = false; 6249 6250 if (tg3_flag(tp, ERROR_PROCESSED)) 6251 return; 6252 6253 /* Check Flow Attention register */ 6254 val = tr32(HOSTCC_FLOW_ATTN); 6255 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) { 6256 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n"); 6257 real_error = true; 6258 } 6259 6260 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) { 6261 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n"); 6262 real_error = true; 6263 } 6264 6265 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) { 6266 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n"); 6267 real_error = true; 6268 } 6269 6270 if (!real_error) 6271 return; 6272 6273 tg3_dump_state(tp); 6274 6275 tg3_flag_set(tp, ERROR_PROCESSED); 6276 tg3_reset_task_schedule(tp); 6277 } 6278 6279 static int tg3_poll(struct napi_struct *napi, int budget) 6280 { 6281 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 6282 struct tg3 *tp = tnapi->tp; 6283 int work_done = 0; 6284 struct tg3_hw_status *sblk = tnapi->hw_status; 6285 6286 while (1) { 6287 if (sblk->status & SD_STATUS_ERROR) 6288 tg3_process_error(tp); 6289 6290 tg3_poll_link(tp); 6291 6292 work_done = tg3_poll_work(tnapi, work_done, budget); 6293 6294 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 6295 goto tx_recovery; 6296 6297 if (unlikely(work_done >= budget)) 6298 break; 6299 6300 if (tg3_flag(tp, TAGGED_STATUS)) { 6301 /* tp->last_tag is used in tg3_int_reenable() below 6302 * to tell the hw how much work has been processed, 6303 * so we must read it before checking for more work. 6304 */ 6305 tnapi->last_tag = sblk->status_tag; 6306 tnapi->last_irq_tag = tnapi->last_tag; 6307 rmb(); 6308 } else 6309 sblk->status &= ~SD_STATUS_UPDATED; 6310 6311 if (likely(!tg3_has_work(tnapi))) { 6312 napi_complete(napi); 6313 tg3_int_reenable(tnapi); 6314 break; 6315 } 6316 } 6317 6318 return work_done; 6319 6320 tx_recovery: 6321 /* work_done is guaranteed to be less than budget. */ 6322 napi_complete(napi); 6323 tg3_reset_task_schedule(tp); 6324 return work_done; 6325 } 6326 6327 static void tg3_napi_disable(struct tg3 *tp) 6328 { 6329 int i; 6330 6331 for (i = tp->irq_cnt - 1; i >= 0; i--) 6332 napi_disable(&tp->napi[i].napi); 6333 } 6334 6335 static void tg3_napi_enable(struct tg3 *tp) 6336 { 6337 int i; 6338 6339 for (i = 0; i < tp->irq_cnt; i++) 6340 napi_enable(&tp->napi[i].napi); 6341 } 6342 6343 static void tg3_napi_init(struct tg3 *tp) 6344 { 6345 int i; 6346 6347 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64); 6348 for (i = 1; i < tp->irq_cnt; i++) 6349 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64); 6350 } 6351 6352 static void tg3_napi_fini(struct tg3 *tp) 6353 { 6354 int i; 6355 6356 for (i = 0; i < tp->irq_cnt; i++) 6357 netif_napi_del(&tp->napi[i].napi); 6358 } 6359 6360 static inline void tg3_netif_stop(struct tg3 *tp) 6361 { 6362 tp->dev->trans_start = jiffies; /* prevent tx timeout */ 6363 tg3_napi_disable(tp); 6364 netif_tx_disable(tp->dev); 6365 } 6366 6367 static inline void tg3_netif_start(struct tg3 *tp) 6368 { 6369 /* NOTE: unconditional netif_tx_wake_all_queues is only 6370 * appropriate so long as all callers are assured to 6371 * have free tx slots (such as after tg3_init_hw) 6372 */ 6373 netif_tx_wake_all_queues(tp->dev); 6374 6375 tg3_napi_enable(tp); 6376 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED; 6377 tg3_enable_ints(tp); 6378 } 6379 6380 static void tg3_irq_quiesce(struct tg3 *tp) 6381 { 6382 int i; 6383 6384 BUG_ON(tp->irq_sync); 6385 6386 tp->irq_sync = 1; 6387 smp_mb(); 6388 6389 for (i = 0; i < tp->irq_cnt; i++) 6390 synchronize_irq(tp->napi[i].irq_vec); 6391 } 6392 6393 /* Fully shutdown all tg3 driver activity elsewhere in the system. 6394 * If irq_sync is non-zero, then the IRQ handler must be synchronized 6395 * with as well. Most of the time, this is not necessary except when 6396 * shutting down the device. 6397 */ 6398 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync) 6399 { 6400 spin_lock_bh(&tp->lock); 6401 if (irq_sync) 6402 tg3_irq_quiesce(tp); 6403 } 6404 6405 static inline void tg3_full_unlock(struct tg3 *tp) 6406 { 6407 spin_unlock_bh(&tp->lock); 6408 } 6409 6410 /* One-shot MSI handler - Chip automatically disables interrupt 6411 * after sending MSI so driver doesn't have to do it. 6412 */ 6413 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id) 6414 { 6415 struct tg3_napi *tnapi = dev_id; 6416 struct tg3 *tp = tnapi->tp; 6417 6418 prefetch(tnapi->hw_status); 6419 if (tnapi->rx_rcb) 6420 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6421 6422 if (likely(!tg3_irq_sync(tp))) 6423 napi_schedule(&tnapi->napi); 6424 6425 return IRQ_HANDLED; 6426 } 6427 6428 /* MSI ISR - No need to check for interrupt sharing and no need to 6429 * flush status block and interrupt mailbox. PCI ordering rules 6430 * guarantee that MSI will arrive after the status block. 6431 */ 6432 static irqreturn_t tg3_msi(int irq, void *dev_id) 6433 { 6434 struct tg3_napi *tnapi = dev_id; 6435 struct tg3 *tp = tnapi->tp; 6436 6437 prefetch(tnapi->hw_status); 6438 if (tnapi->rx_rcb) 6439 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6440 /* 6441 * Writing any value to intr-mbox-0 clears PCI INTA# and 6442 * chip-internal interrupt pending events. 6443 * Writing non-zero to intr-mbox-0 additional tells the 6444 * NIC to stop sending us irqs, engaging "in-intr-handler" 6445 * event coalescing. 6446 */ 6447 tw32_mailbox(tnapi->int_mbox, 0x00000001); 6448 if (likely(!tg3_irq_sync(tp))) 6449 napi_schedule(&tnapi->napi); 6450 6451 return IRQ_RETVAL(1); 6452 } 6453 6454 static irqreturn_t tg3_interrupt(int irq, void *dev_id) 6455 { 6456 struct tg3_napi *tnapi = dev_id; 6457 struct tg3 *tp = tnapi->tp; 6458 struct tg3_hw_status *sblk = tnapi->hw_status; 6459 unsigned int handled = 1; 6460 6461 /* In INTx mode, it is possible for the interrupt to arrive at 6462 * the CPU before the status block posted prior to the interrupt. 6463 * Reading the PCI State register will confirm whether the 6464 * interrupt is ours and will flush the status block. 6465 */ 6466 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) { 6467 if (tg3_flag(tp, CHIP_RESETTING) || 6468 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 6469 handled = 0; 6470 goto out; 6471 } 6472 } 6473 6474 /* 6475 * Writing any value to intr-mbox-0 clears PCI INTA# and 6476 * chip-internal interrupt pending events. 6477 * Writing non-zero to intr-mbox-0 additional tells the 6478 * NIC to stop sending us irqs, engaging "in-intr-handler" 6479 * event coalescing. 6480 * 6481 * Flush the mailbox to de-assert the IRQ immediately to prevent 6482 * spurious interrupts. The flush impacts performance but 6483 * excessive spurious interrupts can be worse in some cases. 6484 */ 6485 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 6486 if (tg3_irq_sync(tp)) 6487 goto out; 6488 sblk->status &= ~SD_STATUS_UPDATED; 6489 if (likely(tg3_has_work(tnapi))) { 6490 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6491 napi_schedule(&tnapi->napi); 6492 } else { 6493 /* No work, shared interrupt perhaps? re-enable 6494 * interrupts, and flush that PCI write 6495 */ 6496 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 6497 0x00000000); 6498 } 6499 out: 6500 return IRQ_RETVAL(handled); 6501 } 6502 6503 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id) 6504 { 6505 struct tg3_napi *tnapi = dev_id; 6506 struct tg3 *tp = tnapi->tp; 6507 struct tg3_hw_status *sblk = tnapi->hw_status; 6508 unsigned int handled = 1; 6509 6510 /* In INTx mode, it is possible for the interrupt to arrive at 6511 * the CPU before the status block posted prior to the interrupt. 6512 * Reading the PCI State register will confirm whether the 6513 * interrupt is ours and will flush the status block. 6514 */ 6515 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) { 6516 if (tg3_flag(tp, CHIP_RESETTING) || 6517 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 6518 handled = 0; 6519 goto out; 6520 } 6521 } 6522 6523 /* 6524 * writing any value to intr-mbox-0 clears PCI INTA# and 6525 * chip-internal interrupt pending events. 6526 * writing non-zero to intr-mbox-0 additional tells the 6527 * NIC to stop sending us irqs, engaging "in-intr-handler" 6528 * event coalescing. 6529 * 6530 * Flush the mailbox to de-assert the IRQ immediately to prevent 6531 * spurious interrupts. The flush impacts performance but 6532 * excessive spurious interrupts can be worse in some cases. 6533 */ 6534 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 6535 6536 /* 6537 * In a shared interrupt configuration, sometimes other devices' 6538 * interrupts will scream. We record the current status tag here 6539 * so that the above check can report that the screaming interrupts 6540 * are unhandled. Eventually they will be silenced. 6541 */ 6542 tnapi->last_irq_tag = sblk->status_tag; 6543 6544 if (tg3_irq_sync(tp)) 6545 goto out; 6546 6547 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6548 6549 napi_schedule(&tnapi->napi); 6550 6551 out: 6552 return IRQ_RETVAL(handled); 6553 } 6554 6555 /* ISR for interrupt test */ 6556 static irqreturn_t tg3_test_isr(int irq, void *dev_id) 6557 { 6558 struct tg3_napi *tnapi = dev_id; 6559 struct tg3 *tp = tnapi->tp; 6560 struct tg3_hw_status *sblk = tnapi->hw_status; 6561 6562 if ((sblk->status & SD_STATUS_UPDATED) || 6563 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 6564 tg3_disable_ints(tp); 6565 return IRQ_RETVAL(1); 6566 } 6567 return IRQ_RETVAL(0); 6568 } 6569 6570 #ifdef CONFIG_NET_POLL_CONTROLLER 6571 static void tg3_poll_controller(struct net_device *dev) 6572 { 6573 int i; 6574 struct tg3 *tp = netdev_priv(dev); 6575 6576 for (i = 0; i < tp->irq_cnt; i++) 6577 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); 6578 } 6579 #endif 6580 6581 static void tg3_tx_timeout(struct net_device *dev) 6582 { 6583 struct tg3 *tp = netdev_priv(dev); 6584 6585 if (netif_msg_tx_err(tp)) { 6586 netdev_err(dev, "transmit timed out, resetting\n"); 6587 tg3_dump_state(tp); 6588 } 6589 6590 tg3_reset_task_schedule(tp); 6591 } 6592 6593 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */ 6594 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) 6595 { 6596 u32 base = (u32) mapping & 0xffffffff; 6597 6598 return (base > 0xffffdcc0) && (base + len + 8 < base); 6599 } 6600 6601 /* Test for DMA addresses > 40-bit */ 6602 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, 6603 int len) 6604 { 6605 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 6606 if (tg3_flag(tp, 40BIT_DMA_BUG)) 6607 return ((u64) mapping + len) > DMA_BIT_MASK(40); 6608 return 0; 6609 #else 6610 return 0; 6611 #endif 6612 } 6613 6614 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd, 6615 dma_addr_t mapping, u32 len, u32 flags, 6616 u32 mss, u32 vlan) 6617 { 6618 txbd->addr_hi = ((u64) mapping >> 32); 6619 txbd->addr_lo = ((u64) mapping & 0xffffffff); 6620 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff); 6621 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT); 6622 } 6623 6624 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget, 6625 dma_addr_t map, u32 len, u32 flags, 6626 u32 mss, u32 vlan) 6627 { 6628 struct tg3 *tp = tnapi->tp; 6629 bool hwbug = false; 6630 6631 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8) 6632 hwbug = true; 6633 6634 if (tg3_4g_overflow_test(map, len)) 6635 hwbug = true; 6636 6637 if (tg3_40bit_overflow_test(tp, map, len)) 6638 hwbug = true; 6639 6640 if (tp->dma_limit) { 6641 u32 prvidx = *entry; 6642 u32 tmp_flag = flags & ~TXD_FLAG_END; 6643 while (len > tp->dma_limit && *budget) { 6644 u32 frag_len = tp->dma_limit; 6645 len -= tp->dma_limit; 6646 6647 /* Avoid the 8byte DMA problem */ 6648 if (len <= 8) { 6649 len += tp->dma_limit / 2; 6650 frag_len = tp->dma_limit / 2; 6651 } 6652 6653 tnapi->tx_buffers[*entry].fragmented = true; 6654 6655 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 6656 frag_len, tmp_flag, mss, vlan); 6657 *budget -= 1; 6658 prvidx = *entry; 6659 *entry = NEXT_TX(*entry); 6660 6661 map += frag_len; 6662 } 6663 6664 if (len) { 6665 if (*budget) { 6666 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 6667 len, flags, mss, vlan); 6668 *budget -= 1; 6669 *entry = NEXT_TX(*entry); 6670 } else { 6671 hwbug = true; 6672 tnapi->tx_buffers[prvidx].fragmented = false; 6673 } 6674 } 6675 } else { 6676 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 6677 len, flags, mss, vlan); 6678 *entry = NEXT_TX(*entry); 6679 } 6680 6681 return hwbug; 6682 } 6683 6684 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last) 6685 { 6686 int i; 6687 struct sk_buff *skb; 6688 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry]; 6689 6690 skb = txb->skb; 6691 txb->skb = NULL; 6692 6693 pci_unmap_single(tnapi->tp->pdev, 6694 dma_unmap_addr(txb, mapping), 6695 skb_headlen(skb), 6696 PCI_DMA_TODEVICE); 6697 6698 while (txb->fragmented) { 6699 txb->fragmented = false; 6700 entry = NEXT_TX(entry); 6701 txb = &tnapi->tx_buffers[entry]; 6702 } 6703 6704 for (i = 0; i <= last; i++) { 6705 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 6706 6707 entry = NEXT_TX(entry); 6708 txb = &tnapi->tx_buffers[entry]; 6709 6710 pci_unmap_page(tnapi->tp->pdev, 6711 dma_unmap_addr(txb, mapping), 6712 skb_frag_size(frag), PCI_DMA_TODEVICE); 6713 6714 while (txb->fragmented) { 6715 txb->fragmented = false; 6716 entry = NEXT_TX(entry); 6717 txb = &tnapi->tx_buffers[entry]; 6718 } 6719 } 6720 } 6721 6722 /* Workaround 4GB and 40-bit hardware DMA bugs. */ 6723 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, 6724 struct sk_buff **pskb, 6725 u32 *entry, u32 *budget, 6726 u32 base_flags, u32 mss, u32 vlan) 6727 { 6728 struct tg3 *tp = tnapi->tp; 6729 struct sk_buff *new_skb, *skb = *pskb; 6730 dma_addr_t new_addr = 0; 6731 int ret = 0; 6732 6733 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) 6734 new_skb = skb_copy(skb, GFP_ATOMIC); 6735 else { 6736 int more_headroom = 4 - ((unsigned long)skb->data & 3); 6737 6738 new_skb = skb_copy_expand(skb, 6739 skb_headroom(skb) + more_headroom, 6740 skb_tailroom(skb), GFP_ATOMIC); 6741 } 6742 6743 if (!new_skb) { 6744 ret = -1; 6745 } else { 6746 /* New SKB is guaranteed to be linear. */ 6747 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len, 6748 PCI_DMA_TODEVICE); 6749 /* Make sure the mapping succeeded */ 6750 if (pci_dma_mapping_error(tp->pdev, new_addr)) { 6751 dev_kfree_skb(new_skb); 6752 ret = -1; 6753 } else { 6754 u32 save_entry = *entry; 6755 6756 base_flags |= TXD_FLAG_END; 6757 6758 tnapi->tx_buffers[*entry].skb = new_skb; 6759 dma_unmap_addr_set(&tnapi->tx_buffers[*entry], 6760 mapping, new_addr); 6761 6762 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr, 6763 new_skb->len, base_flags, 6764 mss, vlan)) { 6765 tg3_tx_skb_unmap(tnapi, save_entry, -1); 6766 dev_kfree_skb(new_skb); 6767 ret = -1; 6768 } 6769 } 6770 } 6771 6772 dev_kfree_skb(skb); 6773 *pskb = new_skb; 6774 return ret; 6775 } 6776 6777 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *); 6778 6779 /* Use GSO to workaround a rare TSO bug that may be triggered when the 6780 * TSO header is greater than 80 bytes. 6781 */ 6782 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb) 6783 { 6784 struct sk_buff *segs, *nskb; 6785 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; 6786 6787 /* Estimate the number of fragments in the worst case */ 6788 if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) { 6789 netif_stop_queue(tp->dev); 6790 6791 /* netif_tx_stop_queue() must be done before checking 6792 * checking tx index in tg3_tx_avail() below, because in 6793 * tg3_tx(), we update tx index before checking for 6794 * netif_tx_queue_stopped(). 6795 */ 6796 smp_mb(); 6797 if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est) 6798 return NETDEV_TX_BUSY; 6799 6800 netif_wake_queue(tp->dev); 6801 } 6802 6803 segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO); 6804 if (IS_ERR(segs)) 6805 goto tg3_tso_bug_end; 6806 6807 do { 6808 nskb = segs; 6809 segs = segs->next; 6810 nskb->next = NULL; 6811 tg3_start_xmit(nskb, tp->dev); 6812 } while (segs); 6813 6814 tg3_tso_bug_end: 6815 dev_kfree_skb(skb); 6816 6817 return NETDEV_TX_OK; 6818 } 6819 6820 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and 6821 * support TG3_FLAG_HW_TSO_1 or firmware TSO only. 6822 */ 6823 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) 6824 { 6825 struct tg3 *tp = netdev_priv(dev); 6826 u32 len, entry, base_flags, mss, vlan = 0; 6827 u32 budget; 6828 int i = -1, would_hit_hwbug; 6829 dma_addr_t mapping; 6830 struct tg3_napi *tnapi; 6831 struct netdev_queue *txq; 6832 unsigned int last; 6833 6834 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 6835 tnapi = &tp->napi[skb_get_queue_mapping(skb)]; 6836 if (tg3_flag(tp, ENABLE_TSS)) 6837 tnapi++; 6838 6839 budget = tg3_tx_avail(tnapi); 6840 6841 /* We are running in BH disabled context with netif_tx_lock 6842 * and TX reclaim runs via tp->napi.poll inside of a software 6843 * interrupt. Furthermore, IRQ processing runs lockless so we have 6844 * no IRQ context deadlocks to worry about either. Rejoice! 6845 */ 6846 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) { 6847 if (!netif_tx_queue_stopped(txq)) { 6848 netif_tx_stop_queue(txq); 6849 6850 /* This is a hard error, log it. */ 6851 netdev_err(dev, 6852 "BUG! Tx Ring full when queue awake!\n"); 6853 } 6854 return NETDEV_TX_BUSY; 6855 } 6856 6857 entry = tnapi->tx_prod; 6858 base_flags = 0; 6859 if (skb->ip_summed == CHECKSUM_PARTIAL) 6860 base_flags |= TXD_FLAG_TCPUDP_CSUM; 6861 6862 mss = skb_shinfo(skb)->gso_size; 6863 if (mss) { 6864 struct iphdr *iph; 6865 u32 tcp_opt_len, hdr_len; 6866 6867 if (skb_header_cloned(skb) && 6868 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) 6869 goto drop; 6870 6871 iph = ip_hdr(skb); 6872 tcp_opt_len = tcp_optlen(skb); 6873 6874 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN; 6875 6876 if (!skb_is_gso_v6(skb)) { 6877 iph->check = 0; 6878 iph->tot_len = htons(mss + hdr_len); 6879 } 6880 6881 if (unlikely((ETH_HLEN + hdr_len) > 80) && 6882 tg3_flag(tp, TSO_BUG)) 6883 return tg3_tso_bug(tp, skb); 6884 6885 base_flags |= (TXD_FLAG_CPU_PRE_DMA | 6886 TXD_FLAG_CPU_POST_DMA); 6887 6888 if (tg3_flag(tp, HW_TSO_1) || 6889 tg3_flag(tp, HW_TSO_2) || 6890 tg3_flag(tp, HW_TSO_3)) { 6891 tcp_hdr(skb)->check = 0; 6892 base_flags &= ~TXD_FLAG_TCPUDP_CSUM; 6893 } else 6894 tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr, 6895 iph->daddr, 0, 6896 IPPROTO_TCP, 6897 0); 6898 6899 if (tg3_flag(tp, HW_TSO_3)) { 6900 mss |= (hdr_len & 0xc) << 12; 6901 if (hdr_len & 0x10) 6902 base_flags |= 0x00000010; 6903 base_flags |= (hdr_len & 0x3e0) << 5; 6904 } else if (tg3_flag(tp, HW_TSO_2)) 6905 mss |= hdr_len << 9; 6906 else if (tg3_flag(tp, HW_TSO_1) || 6907 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 6908 if (tcp_opt_len || iph->ihl > 5) { 6909 int tsflags; 6910 6911 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 6912 mss |= (tsflags << 11); 6913 } 6914 } else { 6915 if (tcp_opt_len || iph->ihl > 5) { 6916 int tsflags; 6917 6918 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 6919 base_flags |= tsflags << 12; 6920 } 6921 } 6922 } 6923 6924 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 6925 !mss && skb->len > VLAN_ETH_FRAME_LEN) 6926 base_flags |= TXD_FLAG_JMB_PKT; 6927 6928 if (vlan_tx_tag_present(skb)) { 6929 base_flags |= TXD_FLAG_VLAN; 6930 vlan = vlan_tx_tag_get(skb); 6931 } 6932 6933 len = skb_headlen(skb); 6934 6935 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE); 6936 if (pci_dma_mapping_error(tp->pdev, mapping)) 6937 goto drop; 6938 6939 6940 tnapi->tx_buffers[entry].skb = skb; 6941 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 6942 6943 would_hit_hwbug = 0; 6944 6945 if (tg3_flag(tp, 5701_DMA_BUG)) 6946 would_hit_hwbug = 1; 6947 6948 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags | 6949 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0), 6950 mss, vlan)) { 6951 would_hit_hwbug = 1; 6952 } else if (skb_shinfo(skb)->nr_frags > 0) { 6953 u32 tmp_mss = mss; 6954 6955 if (!tg3_flag(tp, HW_TSO_1) && 6956 !tg3_flag(tp, HW_TSO_2) && 6957 !tg3_flag(tp, HW_TSO_3)) 6958 tmp_mss = 0; 6959 6960 /* Now loop through additional data 6961 * fragments, and queue them. 6962 */ 6963 last = skb_shinfo(skb)->nr_frags - 1; 6964 for (i = 0; i <= last; i++) { 6965 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 6966 6967 len = skb_frag_size(frag); 6968 mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0, 6969 len, DMA_TO_DEVICE); 6970 6971 tnapi->tx_buffers[entry].skb = NULL; 6972 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, 6973 mapping); 6974 if (dma_mapping_error(&tp->pdev->dev, mapping)) 6975 goto dma_error; 6976 6977 if (!budget || 6978 tg3_tx_frag_set(tnapi, &entry, &budget, mapping, 6979 len, base_flags | 6980 ((i == last) ? TXD_FLAG_END : 0), 6981 tmp_mss, vlan)) { 6982 would_hit_hwbug = 1; 6983 break; 6984 } 6985 } 6986 } 6987 6988 if (would_hit_hwbug) { 6989 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 6990 6991 /* If the workaround fails due to memory/mapping 6992 * failure, silently drop this packet. 6993 */ 6994 entry = tnapi->tx_prod; 6995 budget = tg3_tx_avail(tnapi); 6996 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget, 6997 base_flags, mss, vlan)) 6998 goto drop_nofree; 6999 } 7000 7001 skb_tx_timestamp(skb); 7002 netdev_tx_sent_queue(txq, skb->len); 7003 7004 /* Sync BD data before updating mailbox */ 7005 wmb(); 7006 7007 /* Packets are ready, update Tx producer idx local and on card. */ 7008 tw32_tx_mbox(tnapi->prodmbox, entry); 7009 7010 tnapi->tx_prod = entry; 7011 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) { 7012 netif_tx_stop_queue(txq); 7013 7014 /* netif_tx_stop_queue() must be done before checking 7015 * checking tx index in tg3_tx_avail() below, because in 7016 * tg3_tx(), we update tx index before checking for 7017 * netif_tx_queue_stopped(). 7018 */ 7019 smp_mb(); 7020 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)) 7021 netif_tx_wake_queue(txq); 7022 } 7023 7024 mmiowb(); 7025 return NETDEV_TX_OK; 7026 7027 dma_error: 7028 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i); 7029 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 7030 drop: 7031 dev_kfree_skb(skb); 7032 drop_nofree: 7033 tp->tx_dropped++; 7034 return NETDEV_TX_OK; 7035 } 7036 7037 static void tg3_mac_loopback(struct tg3 *tp, bool enable) 7038 { 7039 if (enable) { 7040 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX | 7041 MAC_MODE_PORT_MODE_MASK); 7042 7043 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK; 7044 7045 if (!tg3_flag(tp, 5705_PLUS)) 7046 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 7047 7048 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 7049 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 7050 else 7051 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 7052 } else { 7053 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK; 7054 7055 if (tg3_flag(tp, 5705_PLUS) || 7056 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) || 7057 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 7058 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 7059 } 7060 7061 tw32(MAC_MODE, tp->mac_mode); 7062 udelay(40); 7063 } 7064 7065 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk) 7066 { 7067 u32 val, bmcr, mac_mode, ptest = 0; 7068 7069 tg3_phy_toggle_apd(tp, false); 7070 tg3_phy_toggle_automdix(tp, 0); 7071 7072 if (extlpbk && tg3_phy_set_extloopbk(tp)) 7073 return -EIO; 7074 7075 bmcr = BMCR_FULLDPLX; 7076 switch (speed) { 7077 case SPEED_10: 7078 break; 7079 case SPEED_100: 7080 bmcr |= BMCR_SPEED100; 7081 break; 7082 case SPEED_1000: 7083 default: 7084 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 7085 speed = SPEED_100; 7086 bmcr |= BMCR_SPEED100; 7087 } else { 7088 speed = SPEED_1000; 7089 bmcr |= BMCR_SPEED1000; 7090 } 7091 } 7092 7093 if (extlpbk) { 7094 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 7095 tg3_readphy(tp, MII_CTRL1000, &val); 7096 val |= CTL1000_AS_MASTER | 7097 CTL1000_ENABLE_MASTER; 7098 tg3_writephy(tp, MII_CTRL1000, val); 7099 } else { 7100 ptest = MII_TG3_FET_PTEST_TRIM_SEL | 7101 MII_TG3_FET_PTEST_TRIM_2; 7102 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest); 7103 } 7104 } else 7105 bmcr |= BMCR_LOOPBACK; 7106 7107 tg3_writephy(tp, MII_BMCR, bmcr); 7108 7109 /* The write needs to be flushed for the FETs */ 7110 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 7111 tg3_readphy(tp, MII_BMCR, &bmcr); 7112 7113 udelay(40); 7114 7115 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 7116 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 7117 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest | 7118 MII_TG3_FET_PTEST_FRC_TX_LINK | 7119 MII_TG3_FET_PTEST_FRC_TX_LOCK); 7120 7121 /* The write needs to be flushed for the AC131 */ 7122 tg3_readphy(tp, MII_TG3_FET_PTEST, &val); 7123 } 7124 7125 /* Reset to prevent losing 1st rx packet intermittently */ 7126 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 7127 tg3_flag(tp, 5780_CLASS)) { 7128 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 7129 udelay(10); 7130 tw32_f(MAC_RX_MODE, tp->rx_mode); 7131 } 7132 7133 mac_mode = tp->mac_mode & 7134 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 7135 if (speed == SPEED_1000) 7136 mac_mode |= MAC_MODE_PORT_MODE_GMII; 7137 else 7138 mac_mode |= MAC_MODE_PORT_MODE_MII; 7139 7140 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) { 7141 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK; 7142 7143 if (masked_phy_id == TG3_PHY_ID_BCM5401) 7144 mac_mode &= ~MAC_MODE_LINK_POLARITY; 7145 else if (masked_phy_id == TG3_PHY_ID_BCM5411) 7146 mac_mode |= MAC_MODE_LINK_POLARITY; 7147 7148 tg3_writephy(tp, MII_TG3_EXT_CTRL, 7149 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 7150 } 7151 7152 tw32(MAC_MODE, mac_mode); 7153 udelay(40); 7154 7155 return 0; 7156 } 7157 7158 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features) 7159 { 7160 struct tg3 *tp = netdev_priv(dev); 7161 7162 if (features & NETIF_F_LOOPBACK) { 7163 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK) 7164 return; 7165 7166 spin_lock_bh(&tp->lock); 7167 tg3_mac_loopback(tp, true); 7168 netif_carrier_on(tp->dev); 7169 spin_unlock_bh(&tp->lock); 7170 netdev_info(dev, "Internal MAC loopback mode enabled.\n"); 7171 } else { 7172 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 7173 return; 7174 7175 spin_lock_bh(&tp->lock); 7176 tg3_mac_loopback(tp, false); 7177 /* Force link status check */ 7178 tg3_setup_phy(tp, 1); 7179 spin_unlock_bh(&tp->lock); 7180 netdev_info(dev, "Internal MAC loopback mode disabled.\n"); 7181 } 7182 } 7183 7184 static netdev_features_t tg3_fix_features(struct net_device *dev, 7185 netdev_features_t features) 7186 { 7187 struct tg3 *tp = netdev_priv(dev); 7188 7189 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS)) 7190 features &= ~NETIF_F_ALL_TSO; 7191 7192 return features; 7193 } 7194 7195 static int tg3_set_features(struct net_device *dev, netdev_features_t features) 7196 { 7197 netdev_features_t changed = dev->features ^ features; 7198 7199 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev)) 7200 tg3_set_loopback(dev, features); 7201 7202 return 0; 7203 } 7204 7205 static void tg3_rx_prodring_free(struct tg3 *tp, 7206 struct tg3_rx_prodring_set *tpr) 7207 { 7208 int i; 7209 7210 if (tpr != &tp->napi[0].prodring) { 7211 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx; 7212 i = (i + 1) & tp->rx_std_ring_mask) 7213 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 7214 tp->rx_pkt_map_sz); 7215 7216 if (tg3_flag(tp, JUMBO_CAPABLE)) { 7217 for (i = tpr->rx_jmb_cons_idx; 7218 i != tpr->rx_jmb_prod_idx; 7219 i = (i + 1) & tp->rx_jmb_ring_mask) { 7220 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 7221 TG3_RX_JMB_MAP_SZ); 7222 } 7223 } 7224 7225 return; 7226 } 7227 7228 for (i = 0; i <= tp->rx_std_ring_mask; i++) 7229 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 7230 tp->rx_pkt_map_sz); 7231 7232 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 7233 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) 7234 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 7235 TG3_RX_JMB_MAP_SZ); 7236 } 7237 } 7238 7239 /* Initialize rx rings for packet processing. 7240 * 7241 * The chip has been shut down and the driver detached from 7242 * the networking, so no interrupts or new tx packets will 7243 * end up in the driver. tp->{tx,}lock are held and thus 7244 * we may not sleep. 7245 */ 7246 static int tg3_rx_prodring_alloc(struct tg3 *tp, 7247 struct tg3_rx_prodring_set *tpr) 7248 { 7249 u32 i, rx_pkt_dma_sz; 7250 7251 tpr->rx_std_cons_idx = 0; 7252 tpr->rx_std_prod_idx = 0; 7253 tpr->rx_jmb_cons_idx = 0; 7254 tpr->rx_jmb_prod_idx = 0; 7255 7256 if (tpr != &tp->napi[0].prodring) { 7257 memset(&tpr->rx_std_buffers[0], 0, 7258 TG3_RX_STD_BUFF_RING_SIZE(tp)); 7259 if (tpr->rx_jmb_buffers) 7260 memset(&tpr->rx_jmb_buffers[0], 0, 7261 TG3_RX_JMB_BUFF_RING_SIZE(tp)); 7262 goto done; 7263 } 7264 7265 /* Zero out all descriptors. */ 7266 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp)); 7267 7268 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ; 7269 if (tg3_flag(tp, 5780_CLASS) && 7270 tp->dev->mtu > ETH_DATA_LEN) 7271 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ; 7272 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz); 7273 7274 /* Initialize invariants of the rings, we only set this 7275 * stuff once. This works because the card does not 7276 * write into the rx buffer posting rings. 7277 */ 7278 for (i = 0; i <= tp->rx_std_ring_mask; i++) { 7279 struct tg3_rx_buffer_desc *rxd; 7280 7281 rxd = &tpr->rx_std[i]; 7282 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT; 7283 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); 7284 rxd->opaque = (RXD_OPAQUE_RING_STD | 7285 (i << RXD_OPAQUE_INDEX_SHIFT)); 7286 } 7287 7288 /* Now allocate fresh SKBs for each rx ring. */ 7289 for (i = 0; i < tp->rx_pending; i++) { 7290 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i) < 0) { 7291 netdev_warn(tp->dev, 7292 "Using a smaller RX standard ring. Only " 7293 "%d out of %d buffers were allocated " 7294 "successfully\n", i, tp->rx_pending); 7295 if (i == 0) 7296 goto initfail; 7297 tp->rx_pending = i; 7298 break; 7299 } 7300 } 7301 7302 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 7303 goto done; 7304 7305 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp)); 7306 7307 if (!tg3_flag(tp, JUMBO_RING_ENABLE)) 7308 goto done; 7309 7310 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) { 7311 struct tg3_rx_buffer_desc *rxd; 7312 7313 rxd = &tpr->rx_jmb[i].std; 7314 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT; 7315 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) | 7316 RXD_FLAG_JUMBO; 7317 rxd->opaque = (RXD_OPAQUE_RING_JUMBO | 7318 (i << RXD_OPAQUE_INDEX_SHIFT)); 7319 } 7320 7321 for (i = 0; i < tp->rx_jumbo_pending; i++) { 7322 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i) < 0) { 7323 netdev_warn(tp->dev, 7324 "Using a smaller RX jumbo ring. Only %d " 7325 "out of %d buffers were allocated " 7326 "successfully\n", i, tp->rx_jumbo_pending); 7327 if (i == 0) 7328 goto initfail; 7329 tp->rx_jumbo_pending = i; 7330 break; 7331 } 7332 } 7333 7334 done: 7335 return 0; 7336 7337 initfail: 7338 tg3_rx_prodring_free(tp, tpr); 7339 return -ENOMEM; 7340 } 7341 7342 static void tg3_rx_prodring_fini(struct tg3 *tp, 7343 struct tg3_rx_prodring_set *tpr) 7344 { 7345 kfree(tpr->rx_std_buffers); 7346 tpr->rx_std_buffers = NULL; 7347 kfree(tpr->rx_jmb_buffers); 7348 tpr->rx_jmb_buffers = NULL; 7349 if (tpr->rx_std) { 7350 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp), 7351 tpr->rx_std, tpr->rx_std_mapping); 7352 tpr->rx_std = NULL; 7353 } 7354 if (tpr->rx_jmb) { 7355 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp), 7356 tpr->rx_jmb, tpr->rx_jmb_mapping); 7357 tpr->rx_jmb = NULL; 7358 } 7359 } 7360 7361 static int tg3_rx_prodring_init(struct tg3 *tp, 7362 struct tg3_rx_prodring_set *tpr) 7363 { 7364 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp), 7365 GFP_KERNEL); 7366 if (!tpr->rx_std_buffers) 7367 return -ENOMEM; 7368 7369 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev, 7370 TG3_RX_STD_RING_BYTES(tp), 7371 &tpr->rx_std_mapping, 7372 GFP_KERNEL); 7373 if (!tpr->rx_std) 7374 goto err_out; 7375 7376 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 7377 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp), 7378 GFP_KERNEL); 7379 if (!tpr->rx_jmb_buffers) 7380 goto err_out; 7381 7382 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev, 7383 TG3_RX_JMB_RING_BYTES(tp), 7384 &tpr->rx_jmb_mapping, 7385 GFP_KERNEL); 7386 if (!tpr->rx_jmb) 7387 goto err_out; 7388 } 7389 7390 return 0; 7391 7392 err_out: 7393 tg3_rx_prodring_fini(tp, tpr); 7394 return -ENOMEM; 7395 } 7396 7397 /* Free up pending packets in all rx/tx rings. 7398 * 7399 * The chip has been shut down and the driver detached from 7400 * the networking, so no interrupts or new tx packets will 7401 * end up in the driver. tp->{tx,}lock is not held and we are not 7402 * in an interrupt context and thus may sleep. 7403 */ 7404 static void tg3_free_rings(struct tg3 *tp) 7405 { 7406 int i, j; 7407 7408 for (j = 0; j < tp->irq_cnt; j++) { 7409 struct tg3_napi *tnapi = &tp->napi[j]; 7410 7411 tg3_rx_prodring_free(tp, &tnapi->prodring); 7412 7413 if (!tnapi->tx_buffers) 7414 continue; 7415 7416 for (i = 0; i < TG3_TX_RING_SIZE; i++) { 7417 struct sk_buff *skb = tnapi->tx_buffers[i].skb; 7418 7419 if (!skb) 7420 continue; 7421 7422 tg3_tx_skb_unmap(tnapi, i, 7423 skb_shinfo(skb)->nr_frags - 1); 7424 7425 dev_kfree_skb_any(skb); 7426 } 7427 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j)); 7428 } 7429 } 7430 7431 /* Initialize tx/rx rings for packet processing. 7432 * 7433 * The chip has been shut down and the driver detached from 7434 * the networking, so no interrupts or new tx packets will 7435 * end up in the driver. tp->{tx,}lock are held and thus 7436 * we may not sleep. 7437 */ 7438 static int tg3_init_rings(struct tg3 *tp) 7439 { 7440 int i; 7441 7442 /* Free up all the SKBs. */ 7443 tg3_free_rings(tp); 7444 7445 for (i = 0; i < tp->irq_cnt; i++) { 7446 struct tg3_napi *tnapi = &tp->napi[i]; 7447 7448 tnapi->last_tag = 0; 7449 tnapi->last_irq_tag = 0; 7450 tnapi->hw_status->status = 0; 7451 tnapi->hw_status->status_tag = 0; 7452 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 7453 7454 tnapi->tx_prod = 0; 7455 tnapi->tx_cons = 0; 7456 if (tnapi->tx_ring) 7457 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES); 7458 7459 tnapi->rx_rcb_ptr = 0; 7460 if (tnapi->rx_rcb) 7461 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 7462 7463 if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) { 7464 tg3_free_rings(tp); 7465 return -ENOMEM; 7466 } 7467 } 7468 7469 return 0; 7470 } 7471 7472 /* 7473 * Must not be invoked with interrupt sources disabled and 7474 * the hardware shutdown down. 7475 */ 7476 static void tg3_free_consistent(struct tg3 *tp) 7477 { 7478 int i; 7479 7480 for (i = 0; i < tp->irq_cnt; i++) { 7481 struct tg3_napi *tnapi = &tp->napi[i]; 7482 7483 if (tnapi->tx_ring) { 7484 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES, 7485 tnapi->tx_ring, tnapi->tx_desc_mapping); 7486 tnapi->tx_ring = NULL; 7487 } 7488 7489 kfree(tnapi->tx_buffers); 7490 tnapi->tx_buffers = NULL; 7491 7492 if (tnapi->rx_rcb) { 7493 dma_free_coherent(&tp->pdev->dev, 7494 TG3_RX_RCB_RING_BYTES(tp), 7495 tnapi->rx_rcb, 7496 tnapi->rx_rcb_mapping); 7497 tnapi->rx_rcb = NULL; 7498 } 7499 7500 tg3_rx_prodring_fini(tp, &tnapi->prodring); 7501 7502 if (tnapi->hw_status) { 7503 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE, 7504 tnapi->hw_status, 7505 tnapi->status_mapping); 7506 tnapi->hw_status = NULL; 7507 } 7508 } 7509 7510 if (tp->hw_stats) { 7511 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 7512 tp->hw_stats, tp->stats_mapping); 7513 tp->hw_stats = NULL; 7514 } 7515 } 7516 7517 /* 7518 * Must not be invoked with interrupt sources disabled and 7519 * the hardware shutdown down. Can sleep. 7520 */ 7521 static int tg3_alloc_consistent(struct tg3 *tp) 7522 { 7523 int i; 7524 7525 tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev, 7526 sizeof(struct tg3_hw_stats), 7527 &tp->stats_mapping, 7528 GFP_KERNEL); 7529 if (!tp->hw_stats) 7530 goto err_out; 7531 7532 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 7533 7534 for (i = 0; i < tp->irq_cnt; i++) { 7535 struct tg3_napi *tnapi = &tp->napi[i]; 7536 struct tg3_hw_status *sblk; 7537 7538 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev, 7539 TG3_HW_STATUS_SIZE, 7540 &tnapi->status_mapping, 7541 GFP_KERNEL); 7542 if (!tnapi->hw_status) 7543 goto err_out; 7544 7545 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 7546 sblk = tnapi->hw_status; 7547 7548 if (tg3_rx_prodring_init(tp, &tnapi->prodring)) 7549 goto err_out; 7550 7551 /* If multivector TSS is enabled, vector 0 does not handle 7552 * tx interrupts. Don't allocate any resources for it. 7553 */ 7554 if ((!i && !tg3_flag(tp, ENABLE_TSS)) || 7555 (i && tg3_flag(tp, ENABLE_TSS))) { 7556 tnapi->tx_buffers = kzalloc( 7557 sizeof(struct tg3_tx_ring_info) * 7558 TG3_TX_RING_SIZE, GFP_KERNEL); 7559 if (!tnapi->tx_buffers) 7560 goto err_out; 7561 7562 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev, 7563 TG3_TX_RING_BYTES, 7564 &tnapi->tx_desc_mapping, 7565 GFP_KERNEL); 7566 if (!tnapi->tx_ring) 7567 goto err_out; 7568 } 7569 7570 /* 7571 * When RSS is enabled, the status block format changes 7572 * slightly. The "rx_jumbo_consumer", "reserved", 7573 * and "rx_mini_consumer" members get mapped to the 7574 * other three rx return ring producer indexes. 7575 */ 7576 switch (i) { 7577 default: 7578 if (tg3_flag(tp, ENABLE_RSS)) { 7579 tnapi->rx_rcb_prod_idx = NULL; 7580 break; 7581 } 7582 /* Fall through */ 7583 case 1: 7584 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 7585 break; 7586 case 2: 7587 tnapi->rx_rcb_prod_idx = &sblk->rx_jumbo_consumer; 7588 break; 7589 case 3: 7590 tnapi->rx_rcb_prod_idx = &sblk->reserved; 7591 break; 7592 case 4: 7593 tnapi->rx_rcb_prod_idx = &sblk->rx_mini_consumer; 7594 break; 7595 } 7596 7597 /* 7598 * If multivector RSS is enabled, vector 0 does not handle 7599 * rx or tx interrupts. Don't allocate any resources for it. 7600 */ 7601 if (!i && tg3_flag(tp, ENABLE_RSS)) 7602 continue; 7603 7604 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev, 7605 TG3_RX_RCB_RING_BYTES(tp), 7606 &tnapi->rx_rcb_mapping, 7607 GFP_KERNEL); 7608 if (!tnapi->rx_rcb) 7609 goto err_out; 7610 7611 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 7612 } 7613 7614 return 0; 7615 7616 err_out: 7617 tg3_free_consistent(tp); 7618 return -ENOMEM; 7619 } 7620 7621 #define MAX_WAIT_CNT 1000 7622 7623 /* To stop a block, clear the enable bit and poll till it 7624 * clears. tp->lock is held. 7625 */ 7626 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent) 7627 { 7628 unsigned int i; 7629 u32 val; 7630 7631 if (tg3_flag(tp, 5705_PLUS)) { 7632 switch (ofs) { 7633 case RCVLSC_MODE: 7634 case DMAC_MODE: 7635 case MBFREE_MODE: 7636 case BUFMGR_MODE: 7637 case MEMARB_MODE: 7638 /* We can't enable/disable these bits of the 7639 * 5705/5750, just say success. 7640 */ 7641 return 0; 7642 7643 default: 7644 break; 7645 } 7646 } 7647 7648 val = tr32(ofs); 7649 val &= ~enable_bit; 7650 tw32_f(ofs, val); 7651 7652 for (i = 0; i < MAX_WAIT_CNT; i++) { 7653 udelay(100); 7654 val = tr32(ofs); 7655 if ((val & enable_bit) == 0) 7656 break; 7657 } 7658 7659 if (i == MAX_WAIT_CNT && !silent) { 7660 dev_err(&tp->pdev->dev, 7661 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n", 7662 ofs, enable_bit); 7663 return -ENODEV; 7664 } 7665 7666 return 0; 7667 } 7668 7669 /* tp->lock is held. */ 7670 static int tg3_abort_hw(struct tg3 *tp, int silent) 7671 { 7672 int i, err; 7673 7674 tg3_disable_ints(tp); 7675 7676 tp->rx_mode &= ~RX_MODE_ENABLE; 7677 tw32_f(MAC_RX_MODE, tp->rx_mode); 7678 udelay(10); 7679 7680 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent); 7681 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent); 7682 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent); 7683 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent); 7684 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent); 7685 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent); 7686 7687 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent); 7688 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent); 7689 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent); 7690 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent); 7691 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent); 7692 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent); 7693 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent); 7694 7695 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 7696 tw32_f(MAC_MODE, tp->mac_mode); 7697 udelay(40); 7698 7699 tp->tx_mode &= ~TX_MODE_ENABLE; 7700 tw32_f(MAC_TX_MODE, tp->tx_mode); 7701 7702 for (i = 0; i < MAX_WAIT_CNT; i++) { 7703 udelay(100); 7704 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE)) 7705 break; 7706 } 7707 if (i >= MAX_WAIT_CNT) { 7708 dev_err(&tp->pdev->dev, 7709 "%s timed out, TX_MODE_ENABLE will not clear " 7710 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE)); 7711 err |= -ENODEV; 7712 } 7713 7714 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent); 7715 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent); 7716 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent); 7717 7718 tw32(FTQ_RESET, 0xffffffff); 7719 tw32(FTQ_RESET, 0x00000000); 7720 7721 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent); 7722 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent); 7723 7724 for (i = 0; i < tp->irq_cnt; i++) { 7725 struct tg3_napi *tnapi = &tp->napi[i]; 7726 if (tnapi->hw_status) 7727 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 7728 } 7729 7730 return err; 7731 } 7732 7733 /* Save PCI command register before chip reset */ 7734 static void tg3_save_pci_state(struct tg3 *tp) 7735 { 7736 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd); 7737 } 7738 7739 /* Restore PCI state after chip reset */ 7740 static void tg3_restore_pci_state(struct tg3 *tp) 7741 { 7742 u32 val; 7743 7744 /* Re-enable indirect register accesses. */ 7745 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 7746 tp->misc_host_ctrl); 7747 7748 /* Set MAX PCI retry to zero. */ 7749 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE); 7750 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && 7751 tg3_flag(tp, PCIX_MODE)) 7752 val |= PCISTATE_RETRY_SAME_DMA; 7753 /* Allow reads and writes to the APE register and memory space. */ 7754 if (tg3_flag(tp, ENABLE_APE)) 7755 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 7756 PCISTATE_ALLOW_APE_SHMEM_WR | 7757 PCISTATE_ALLOW_APE_PSPACE_WR; 7758 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val); 7759 7760 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd); 7761 7762 if (!tg3_flag(tp, PCI_EXPRESS)) { 7763 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 7764 tp->pci_cacheline_sz); 7765 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 7766 tp->pci_lat_timer); 7767 } 7768 7769 /* Make sure PCI-X relaxed ordering bit is clear. */ 7770 if (tg3_flag(tp, PCIX_MODE)) { 7771 u16 pcix_cmd; 7772 7773 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 7774 &pcix_cmd); 7775 pcix_cmd &= ~PCI_X_CMD_ERO; 7776 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 7777 pcix_cmd); 7778 } 7779 7780 if (tg3_flag(tp, 5780_CLASS)) { 7781 7782 /* Chip reset on 5780 will reset MSI enable bit, 7783 * so need to restore it. 7784 */ 7785 if (tg3_flag(tp, USING_MSI)) { 7786 u16 ctrl; 7787 7788 pci_read_config_word(tp->pdev, 7789 tp->msi_cap + PCI_MSI_FLAGS, 7790 &ctrl); 7791 pci_write_config_word(tp->pdev, 7792 tp->msi_cap + PCI_MSI_FLAGS, 7793 ctrl | PCI_MSI_FLAGS_ENABLE); 7794 val = tr32(MSGINT_MODE); 7795 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); 7796 } 7797 } 7798 } 7799 7800 /* tp->lock is held. */ 7801 static int tg3_chip_reset(struct tg3 *tp) 7802 { 7803 u32 val; 7804 void (*write_op)(struct tg3 *, u32, u32); 7805 int i, err; 7806 7807 tg3_nvram_lock(tp); 7808 7809 tg3_ape_lock(tp, TG3_APE_LOCK_GRC); 7810 7811 /* No matching tg3_nvram_unlock() after this because 7812 * chip reset below will undo the nvram lock. 7813 */ 7814 tp->nvram_lock_cnt = 0; 7815 7816 /* GRC_MISC_CFG core clock reset will clear the memory 7817 * enable bit in PCI register 4 and the MSI enable bit 7818 * on some chips, so we save relevant registers here. 7819 */ 7820 tg3_save_pci_state(tp); 7821 7822 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 7823 tg3_flag(tp, 5755_PLUS)) 7824 tw32(GRC_FASTBOOT_PC, 0); 7825 7826 /* 7827 * We must avoid the readl() that normally takes place. 7828 * It locks machines, causes machine checks, and other 7829 * fun things. So, temporarily disable the 5701 7830 * hardware workaround, while we do the reset. 7831 */ 7832 write_op = tp->write32; 7833 if (write_op == tg3_write_flush_reg32) 7834 tp->write32 = tg3_write32; 7835 7836 /* Prevent the irq handler from reading or writing PCI registers 7837 * during chip reset when the memory enable bit in the PCI command 7838 * register may be cleared. The chip does not generate interrupt 7839 * at this time, but the irq handler may still be called due to irq 7840 * sharing or irqpoll. 7841 */ 7842 tg3_flag_set(tp, CHIP_RESETTING); 7843 for (i = 0; i < tp->irq_cnt; i++) { 7844 struct tg3_napi *tnapi = &tp->napi[i]; 7845 if (tnapi->hw_status) { 7846 tnapi->hw_status->status = 0; 7847 tnapi->hw_status->status_tag = 0; 7848 } 7849 tnapi->last_tag = 0; 7850 tnapi->last_irq_tag = 0; 7851 } 7852 smp_mb(); 7853 7854 for (i = 0; i < tp->irq_cnt; i++) 7855 synchronize_irq(tp->napi[i].irq_vec); 7856 7857 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 7858 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 7859 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 7860 } 7861 7862 /* do the reset */ 7863 val = GRC_MISC_CFG_CORECLK_RESET; 7864 7865 if (tg3_flag(tp, PCI_EXPRESS)) { 7866 /* Force PCIe 1.0a mode */ 7867 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 7868 !tg3_flag(tp, 57765_PLUS) && 7869 tr32(TG3_PCIE_PHY_TSTCTL) == 7870 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM)) 7871 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM); 7872 7873 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) { 7874 tw32(GRC_MISC_CFG, (1 << 29)); 7875 val |= (1 << 29); 7876 } 7877 } 7878 7879 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 7880 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET); 7881 tw32(GRC_VCPU_EXT_CTRL, 7882 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU); 7883 } 7884 7885 /* Manage gphy power for all CPMU absent PCIe devices. */ 7886 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT)) 7887 val |= GRC_MISC_CFG_KEEP_GPHY_POWER; 7888 7889 tw32(GRC_MISC_CFG, val); 7890 7891 /* restore 5701 hardware bug workaround write method */ 7892 tp->write32 = write_op; 7893 7894 /* Unfortunately, we have to delay before the PCI read back. 7895 * Some 575X chips even will not respond to a PCI cfg access 7896 * when the reset command is given to the chip. 7897 * 7898 * How do these hardware designers expect things to work 7899 * properly if the PCI write is posted for a long period 7900 * of time? It is always necessary to have some method by 7901 * which a register read back can occur to push the write 7902 * out which does the reset. 7903 * 7904 * For most tg3 variants the trick below was working. 7905 * Ho hum... 7906 */ 7907 udelay(120); 7908 7909 /* Flush PCI posted writes. The normal MMIO registers 7910 * are inaccessible at this time so this is the only 7911 * way to make this reliably (actually, this is no longer 7912 * the case, see above). I tried to use indirect 7913 * register read/write but this upset some 5701 variants. 7914 */ 7915 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); 7916 7917 udelay(120); 7918 7919 if (tg3_flag(tp, PCI_EXPRESS) && pci_pcie_cap(tp->pdev)) { 7920 u16 val16; 7921 7922 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) { 7923 int i; 7924 u32 cfg_val; 7925 7926 /* Wait for link training to complete. */ 7927 for (i = 0; i < 5000; i++) 7928 udelay(100); 7929 7930 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); 7931 pci_write_config_dword(tp->pdev, 0xc4, 7932 cfg_val | (1 << 15)); 7933 } 7934 7935 /* Clear the "no snoop" and "relaxed ordering" bits. */ 7936 pci_read_config_word(tp->pdev, 7937 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL, 7938 &val16); 7939 val16 &= ~(PCI_EXP_DEVCTL_RELAX_EN | 7940 PCI_EXP_DEVCTL_NOSNOOP_EN); 7941 /* 7942 * Older PCIe devices only support the 128 byte 7943 * MPS setting. Enforce the restriction. 7944 */ 7945 if (!tg3_flag(tp, CPMU_PRESENT)) 7946 val16 &= ~PCI_EXP_DEVCTL_PAYLOAD; 7947 pci_write_config_word(tp->pdev, 7948 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL, 7949 val16); 7950 7951 /* Clear error status */ 7952 pci_write_config_word(tp->pdev, 7953 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVSTA, 7954 PCI_EXP_DEVSTA_CED | 7955 PCI_EXP_DEVSTA_NFED | 7956 PCI_EXP_DEVSTA_FED | 7957 PCI_EXP_DEVSTA_URD); 7958 } 7959 7960 tg3_restore_pci_state(tp); 7961 7962 tg3_flag_clear(tp, CHIP_RESETTING); 7963 tg3_flag_clear(tp, ERROR_PROCESSED); 7964 7965 val = 0; 7966 if (tg3_flag(tp, 5780_CLASS)) 7967 val = tr32(MEMARB_MODE); 7968 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 7969 7970 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) { 7971 tg3_stop_fw(tp); 7972 tw32(0x5000, 0x400); 7973 } 7974 7975 tw32(GRC_MODE, tp->grc_mode); 7976 7977 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) { 7978 val = tr32(0xc4); 7979 7980 tw32(0xc4, val | (1 << 15)); 7981 } 7982 7983 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && 7984 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 7985 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; 7986 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) 7987 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; 7988 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 7989 } 7990 7991 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 7992 tp->mac_mode = MAC_MODE_PORT_MODE_TBI; 7993 val = tp->mac_mode; 7994 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 7995 tp->mac_mode = MAC_MODE_PORT_MODE_GMII; 7996 val = tp->mac_mode; 7997 } else 7998 val = 0; 7999 8000 tw32_f(MAC_MODE, val); 8001 udelay(40); 8002 8003 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC); 8004 8005 err = tg3_poll_fw(tp); 8006 if (err) 8007 return err; 8008 8009 tg3_mdio_start(tp); 8010 8011 if (tg3_flag(tp, PCI_EXPRESS) && 8012 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && 8013 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 8014 !tg3_flag(tp, 57765_PLUS)) { 8015 val = tr32(0x7c00); 8016 8017 tw32(0x7c00, val | (1 << 25)); 8018 } 8019 8020 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 8021 val = tr32(TG3_CPMU_CLCK_ORIDE); 8022 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 8023 } 8024 8025 /* Reprobe ASF enable state. */ 8026 tg3_flag_clear(tp, ENABLE_ASF); 8027 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE); 8028 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 8029 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 8030 u32 nic_cfg; 8031 8032 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 8033 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 8034 tg3_flag_set(tp, ENABLE_ASF); 8035 tp->last_event_jiffies = jiffies; 8036 if (tg3_flag(tp, 5750_PLUS)) 8037 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 8038 } 8039 } 8040 8041 return 0; 8042 } 8043 8044 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); 8045 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); 8046 8047 /* tp->lock is held. */ 8048 static int tg3_halt(struct tg3 *tp, int kind, int silent) 8049 { 8050 int err; 8051 8052 tg3_stop_fw(tp); 8053 8054 tg3_write_sig_pre_reset(tp, kind); 8055 8056 tg3_abort_hw(tp, silent); 8057 err = tg3_chip_reset(tp); 8058 8059 __tg3_set_mac_addr(tp, 0); 8060 8061 tg3_write_sig_legacy(tp, kind); 8062 tg3_write_sig_post_reset(tp, kind); 8063 8064 if (tp->hw_stats) { 8065 /* Save the stats across chip resets... */ 8066 tg3_get_nstats(tp, &tp->net_stats_prev); 8067 tg3_get_estats(tp, &tp->estats_prev); 8068 8069 /* And make sure the next sample is new data */ 8070 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 8071 } 8072 8073 if (err) 8074 return err; 8075 8076 return 0; 8077 } 8078 8079 static int tg3_set_mac_addr(struct net_device *dev, void *p) 8080 { 8081 struct tg3 *tp = netdev_priv(dev); 8082 struct sockaddr *addr = p; 8083 int err = 0, skip_mac_1 = 0; 8084 8085 if (!is_valid_ether_addr(addr->sa_data)) 8086 return -EADDRNOTAVAIL; 8087 8088 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 8089 8090 if (!netif_running(dev)) 8091 return 0; 8092 8093 if (tg3_flag(tp, ENABLE_ASF)) { 8094 u32 addr0_high, addr0_low, addr1_high, addr1_low; 8095 8096 addr0_high = tr32(MAC_ADDR_0_HIGH); 8097 addr0_low = tr32(MAC_ADDR_0_LOW); 8098 addr1_high = tr32(MAC_ADDR_1_HIGH); 8099 addr1_low = tr32(MAC_ADDR_1_LOW); 8100 8101 /* Skip MAC addr 1 if ASF is using it. */ 8102 if ((addr0_high != addr1_high || addr0_low != addr1_low) && 8103 !(addr1_high == 0 && addr1_low == 0)) 8104 skip_mac_1 = 1; 8105 } 8106 spin_lock_bh(&tp->lock); 8107 __tg3_set_mac_addr(tp, skip_mac_1); 8108 spin_unlock_bh(&tp->lock); 8109 8110 return err; 8111 } 8112 8113 /* tp->lock is held. */ 8114 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr, 8115 dma_addr_t mapping, u32 maxlen_flags, 8116 u32 nic_addr) 8117 { 8118 tg3_write_mem(tp, 8119 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH), 8120 ((u64) mapping >> 32)); 8121 tg3_write_mem(tp, 8122 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW), 8123 ((u64) mapping & 0xffffffff)); 8124 tg3_write_mem(tp, 8125 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS), 8126 maxlen_flags); 8127 8128 if (!tg3_flag(tp, 5705_PLUS)) 8129 tg3_write_mem(tp, 8130 (bdinfo_addr + TG3_BDINFO_NIC_ADDR), 8131 nic_addr); 8132 } 8133 8134 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec) 8135 { 8136 int i; 8137 8138 if (!tg3_flag(tp, ENABLE_TSS)) { 8139 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs); 8140 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames); 8141 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq); 8142 } else { 8143 tw32(HOSTCC_TXCOL_TICKS, 0); 8144 tw32(HOSTCC_TXMAX_FRAMES, 0); 8145 tw32(HOSTCC_TXCOAL_MAXF_INT, 0); 8146 } 8147 8148 if (!tg3_flag(tp, ENABLE_RSS)) { 8149 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs); 8150 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames); 8151 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq); 8152 } else { 8153 tw32(HOSTCC_RXCOL_TICKS, 0); 8154 tw32(HOSTCC_RXMAX_FRAMES, 0); 8155 tw32(HOSTCC_RXCOAL_MAXF_INT, 0); 8156 } 8157 8158 if (!tg3_flag(tp, 5705_PLUS)) { 8159 u32 val = ec->stats_block_coalesce_usecs; 8160 8161 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq); 8162 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq); 8163 8164 if (!netif_carrier_ok(tp->dev)) 8165 val = 0; 8166 8167 tw32(HOSTCC_STAT_COAL_TICKS, val); 8168 } 8169 8170 for (i = 0; i < tp->irq_cnt - 1; i++) { 8171 u32 reg; 8172 8173 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18; 8174 tw32(reg, ec->rx_coalesce_usecs); 8175 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18; 8176 tw32(reg, ec->rx_max_coalesced_frames); 8177 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18; 8178 tw32(reg, ec->rx_max_coalesced_frames_irq); 8179 8180 if (tg3_flag(tp, ENABLE_TSS)) { 8181 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18; 8182 tw32(reg, ec->tx_coalesce_usecs); 8183 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18; 8184 tw32(reg, ec->tx_max_coalesced_frames); 8185 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18; 8186 tw32(reg, ec->tx_max_coalesced_frames_irq); 8187 } 8188 } 8189 8190 for (; i < tp->irq_max - 1; i++) { 8191 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0); 8192 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0); 8193 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 8194 8195 if (tg3_flag(tp, ENABLE_TSS)) { 8196 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0); 8197 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0); 8198 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 8199 } 8200 } 8201 } 8202 8203 /* tp->lock is held. */ 8204 static void tg3_rings_reset(struct tg3 *tp) 8205 { 8206 int i; 8207 u32 stblk, txrcb, rxrcb, limit; 8208 struct tg3_napi *tnapi = &tp->napi[0]; 8209 8210 /* Disable all transmit rings but the first. */ 8211 if (!tg3_flag(tp, 5705_PLUS)) 8212 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; 8213 else if (tg3_flag(tp, 5717_PLUS)) 8214 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; 8215 else if (tg3_flag(tp, 57765_CLASS)) 8216 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; 8217 else 8218 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 8219 8220 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 8221 txrcb < limit; txrcb += TG3_BDINFO_SIZE) 8222 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS, 8223 BDINFO_FLAGS_DISABLED); 8224 8225 8226 /* Disable all receive return rings but the first. */ 8227 if (tg3_flag(tp, 5717_PLUS)) 8228 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; 8229 else if (!tg3_flag(tp, 5705_PLUS)) 8230 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; 8231 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 8232 tg3_flag(tp, 57765_CLASS)) 8233 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; 8234 else 8235 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 8236 8237 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 8238 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE) 8239 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS, 8240 BDINFO_FLAGS_DISABLED); 8241 8242 /* Disable interrupts */ 8243 tw32_mailbox_f(tp->napi[0].int_mbox, 1); 8244 tp->napi[0].chk_msi_cnt = 0; 8245 tp->napi[0].last_rx_cons = 0; 8246 tp->napi[0].last_tx_cons = 0; 8247 8248 /* Zero mailbox registers. */ 8249 if (tg3_flag(tp, SUPPORT_MSIX)) { 8250 for (i = 1; i < tp->irq_max; i++) { 8251 tp->napi[i].tx_prod = 0; 8252 tp->napi[i].tx_cons = 0; 8253 if (tg3_flag(tp, ENABLE_TSS)) 8254 tw32_mailbox(tp->napi[i].prodmbox, 0); 8255 tw32_rx_mbox(tp->napi[i].consmbox, 0); 8256 tw32_mailbox_f(tp->napi[i].int_mbox, 1); 8257 tp->napi[i].chk_msi_cnt = 0; 8258 tp->napi[i].last_rx_cons = 0; 8259 tp->napi[i].last_tx_cons = 0; 8260 } 8261 if (!tg3_flag(tp, ENABLE_TSS)) 8262 tw32_mailbox(tp->napi[0].prodmbox, 0); 8263 } else { 8264 tp->napi[0].tx_prod = 0; 8265 tp->napi[0].tx_cons = 0; 8266 tw32_mailbox(tp->napi[0].prodmbox, 0); 8267 tw32_rx_mbox(tp->napi[0].consmbox, 0); 8268 } 8269 8270 /* Make sure the NIC-based send BD rings are disabled. */ 8271 if (!tg3_flag(tp, 5705_PLUS)) { 8272 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW; 8273 for (i = 0; i < 16; i++) 8274 tw32_tx_mbox(mbox + i * 8, 0); 8275 } 8276 8277 txrcb = NIC_SRAM_SEND_RCB; 8278 rxrcb = NIC_SRAM_RCV_RET_RCB; 8279 8280 /* Clear status block in ram. */ 8281 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8282 8283 /* Set status block DMA address */ 8284 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 8285 ((u64) tnapi->status_mapping >> 32)); 8286 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 8287 ((u64) tnapi->status_mapping & 0xffffffff)); 8288 8289 if (tnapi->tx_ring) { 8290 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 8291 (TG3_TX_RING_SIZE << 8292 BDINFO_FLAGS_MAXLEN_SHIFT), 8293 NIC_SRAM_TX_BUFFER_DESC); 8294 txrcb += TG3_BDINFO_SIZE; 8295 } 8296 8297 if (tnapi->rx_rcb) { 8298 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 8299 (tp->rx_ret_ring_mask + 1) << 8300 BDINFO_FLAGS_MAXLEN_SHIFT, 0); 8301 rxrcb += TG3_BDINFO_SIZE; 8302 } 8303 8304 stblk = HOSTCC_STATBLCK_RING1; 8305 8306 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) { 8307 u64 mapping = (u64)tnapi->status_mapping; 8308 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32); 8309 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff); 8310 8311 /* Clear status block in ram. */ 8312 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8313 8314 if (tnapi->tx_ring) { 8315 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 8316 (TG3_TX_RING_SIZE << 8317 BDINFO_FLAGS_MAXLEN_SHIFT), 8318 NIC_SRAM_TX_BUFFER_DESC); 8319 txrcb += TG3_BDINFO_SIZE; 8320 } 8321 8322 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 8323 ((tp->rx_ret_ring_mask + 1) << 8324 BDINFO_FLAGS_MAXLEN_SHIFT), 0); 8325 8326 stblk += 8; 8327 rxrcb += TG3_BDINFO_SIZE; 8328 } 8329 } 8330 8331 static void tg3_setup_rxbd_thresholds(struct tg3 *tp) 8332 { 8333 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh; 8334 8335 if (!tg3_flag(tp, 5750_PLUS) || 8336 tg3_flag(tp, 5780_CLASS) || 8337 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 8338 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 8339 tg3_flag(tp, 57765_PLUS)) 8340 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700; 8341 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 8342 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) 8343 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755; 8344 else 8345 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906; 8346 8347 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post); 8348 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1); 8349 8350 val = min(nic_rep_thresh, host_rep_thresh); 8351 tw32(RCVBDI_STD_THRESH, val); 8352 8353 if (tg3_flag(tp, 57765_PLUS)) 8354 tw32(STD_REPLENISH_LWM, bdcache_maxcnt); 8355 8356 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 8357 return; 8358 8359 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700; 8360 8361 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1); 8362 8363 val = min(bdcache_maxcnt / 2, host_rep_thresh); 8364 tw32(RCVBDI_JUMBO_THRESH, val); 8365 8366 if (tg3_flag(tp, 57765_PLUS)) 8367 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt); 8368 } 8369 8370 static inline u32 calc_crc(unsigned char *buf, int len) 8371 { 8372 u32 reg; 8373 u32 tmp; 8374 int j, k; 8375 8376 reg = 0xffffffff; 8377 8378 for (j = 0; j < len; j++) { 8379 reg ^= buf[j]; 8380 8381 for (k = 0; k < 8; k++) { 8382 tmp = reg & 0x01; 8383 8384 reg >>= 1; 8385 8386 if (tmp) 8387 reg ^= 0xedb88320; 8388 } 8389 } 8390 8391 return ~reg; 8392 } 8393 8394 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all) 8395 { 8396 /* accept or reject all multicast frames */ 8397 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0); 8398 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0); 8399 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0); 8400 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0); 8401 } 8402 8403 static void __tg3_set_rx_mode(struct net_device *dev) 8404 { 8405 struct tg3 *tp = netdev_priv(dev); 8406 u32 rx_mode; 8407 8408 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | 8409 RX_MODE_KEEP_VLAN_TAG); 8410 8411 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE) 8412 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG 8413 * flag clear. 8414 */ 8415 if (!tg3_flag(tp, ENABLE_ASF)) 8416 rx_mode |= RX_MODE_KEEP_VLAN_TAG; 8417 #endif 8418 8419 if (dev->flags & IFF_PROMISC) { 8420 /* Promiscuous mode. */ 8421 rx_mode |= RX_MODE_PROMISC; 8422 } else if (dev->flags & IFF_ALLMULTI) { 8423 /* Accept all multicast. */ 8424 tg3_set_multi(tp, 1); 8425 } else if (netdev_mc_empty(dev)) { 8426 /* Reject all multicast. */ 8427 tg3_set_multi(tp, 0); 8428 } else { 8429 /* Accept one or more multicast(s). */ 8430 struct netdev_hw_addr *ha; 8431 u32 mc_filter[4] = { 0, }; 8432 u32 regidx; 8433 u32 bit; 8434 u32 crc; 8435 8436 netdev_for_each_mc_addr(ha, dev) { 8437 crc = calc_crc(ha->addr, ETH_ALEN); 8438 bit = ~crc & 0x7f; 8439 regidx = (bit & 0x60) >> 5; 8440 bit &= 0x1f; 8441 mc_filter[regidx] |= (1 << bit); 8442 } 8443 8444 tw32(MAC_HASH_REG_0, mc_filter[0]); 8445 tw32(MAC_HASH_REG_1, mc_filter[1]); 8446 tw32(MAC_HASH_REG_2, mc_filter[2]); 8447 tw32(MAC_HASH_REG_3, mc_filter[3]); 8448 } 8449 8450 if (rx_mode != tp->rx_mode) { 8451 tp->rx_mode = rx_mode; 8452 tw32_f(MAC_RX_MODE, rx_mode); 8453 udelay(10); 8454 } 8455 } 8456 8457 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp) 8458 { 8459 int i; 8460 8461 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 8462 tp->rss_ind_tbl[i] = 8463 ethtool_rxfh_indir_default(i, tp->irq_cnt - 1); 8464 } 8465 8466 static void tg3_rss_check_indir_tbl(struct tg3 *tp) 8467 { 8468 int i; 8469 8470 if (!tg3_flag(tp, SUPPORT_MSIX)) 8471 return; 8472 8473 if (tp->irq_cnt <= 2) { 8474 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl)); 8475 return; 8476 } 8477 8478 /* Validate table against current IRQ count */ 8479 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) { 8480 if (tp->rss_ind_tbl[i] >= tp->irq_cnt - 1) 8481 break; 8482 } 8483 8484 if (i != TG3_RSS_INDIR_TBL_SIZE) 8485 tg3_rss_init_dflt_indir_tbl(tp); 8486 } 8487 8488 static void tg3_rss_write_indir_tbl(struct tg3 *tp) 8489 { 8490 int i = 0; 8491 u32 reg = MAC_RSS_INDIR_TBL_0; 8492 8493 while (i < TG3_RSS_INDIR_TBL_SIZE) { 8494 u32 val = tp->rss_ind_tbl[i]; 8495 i++; 8496 for (; i % 8; i++) { 8497 val <<= 4; 8498 val |= tp->rss_ind_tbl[i]; 8499 } 8500 tw32(reg, val); 8501 reg += 4; 8502 } 8503 } 8504 8505 /* tp->lock is held. */ 8506 static int tg3_reset_hw(struct tg3 *tp, int reset_phy) 8507 { 8508 u32 val, rdmac_mode; 8509 int i, err, limit; 8510 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 8511 8512 tg3_disable_ints(tp); 8513 8514 tg3_stop_fw(tp); 8515 8516 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); 8517 8518 if (tg3_flag(tp, INIT_COMPLETE)) 8519 tg3_abort_hw(tp, 1); 8520 8521 /* Enable MAC control of LPI */ 8522 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) { 8523 tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, 8524 TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | 8525 TG3_CPMU_EEE_LNKIDL_UART_IDL); 8526 8527 tw32_f(TG3_CPMU_EEE_CTRL, 8528 TG3_CPMU_EEE_CTRL_EXIT_20_1_US); 8529 8530 val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET | 8531 TG3_CPMU_EEEMD_LPI_IN_TX | 8532 TG3_CPMU_EEEMD_LPI_IN_RX | 8533 TG3_CPMU_EEEMD_EEE_ENABLE; 8534 8535 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) 8536 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN; 8537 8538 if (tg3_flag(tp, ENABLE_APE)) 8539 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN; 8540 8541 tw32_f(TG3_CPMU_EEE_MODE, val); 8542 8543 tw32_f(TG3_CPMU_EEE_DBTMR1, 8544 TG3_CPMU_DBTMR1_PCIEXIT_2047US | 8545 TG3_CPMU_DBTMR1_LNKIDLE_2047US); 8546 8547 tw32_f(TG3_CPMU_EEE_DBTMR2, 8548 TG3_CPMU_DBTMR2_APE_TX_2047US | 8549 TG3_CPMU_DBTMR2_TXIDXEQ_2047US); 8550 } 8551 8552 if (reset_phy) 8553 tg3_phy_reset(tp); 8554 8555 err = tg3_chip_reset(tp); 8556 if (err) 8557 return err; 8558 8559 tg3_write_sig_legacy(tp, RESET_KIND_INIT); 8560 8561 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) { 8562 val = tr32(TG3_CPMU_CTRL); 8563 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE); 8564 tw32(TG3_CPMU_CTRL, val); 8565 8566 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 8567 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 8568 val |= CPMU_LSPD_10MB_MACCLK_6_25; 8569 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 8570 8571 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD); 8572 val &= ~CPMU_LNK_AWARE_MACCLK_MASK; 8573 val |= CPMU_LNK_AWARE_MACCLK_6_25; 8574 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val); 8575 8576 val = tr32(TG3_CPMU_HST_ACC); 8577 val &= ~CPMU_HST_ACC_MACCLK_MASK; 8578 val |= CPMU_HST_ACC_MACCLK_6_25; 8579 tw32(TG3_CPMU_HST_ACC, val); 8580 } 8581 8582 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 8583 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK; 8584 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN | 8585 PCIE_PWR_MGMT_L1_THRESH_4MS; 8586 tw32(PCIE_PWR_MGMT_THRESH, val); 8587 8588 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK; 8589 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS); 8590 8591 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR); 8592 8593 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 8594 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 8595 } 8596 8597 if (tg3_flag(tp, L1PLLPD_EN)) { 8598 u32 grc_mode = tr32(GRC_MODE); 8599 8600 /* Access the lower 1K of PL PCIE block registers. */ 8601 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 8602 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 8603 8604 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1); 8605 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1, 8606 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN); 8607 8608 tw32(GRC_MODE, grc_mode); 8609 } 8610 8611 if (tg3_flag(tp, 57765_CLASS)) { 8612 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) { 8613 u32 grc_mode = tr32(GRC_MODE); 8614 8615 /* Access the lower 1K of PL PCIE block registers. */ 8616 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 8617 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 8618 8619 val = tr32(TG3_PCIE_TLDLPL_PORT + 8620 TG3_PCIE_PL_LO_PHYCTL5); 8621 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5, 8622 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ); 8623 8624 tw32(GRC_MODE, grc_mode); 8625 } 8626 8627 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) { 8628 u32 grc_mode = tr32(GRC_MODE); 8629 8630 /* Access the lower 1K of DL PCIE block registers. */ 8631 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 8632 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL); 8633 8634 val = tr32(TG3_PCIE_TLDLPL_PORT + 8635 TG3_PCIE_DL_LO_FTSMAX); 8636 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK; 8637 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX, 8638 val | TG3_PCIE_DL_LO_FTSMAX_VAL); 8639 8640 tw32(GRC_MODE, grc_mode); 8641 } 8642 8643 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 8644 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 8645 val |= CPMU_LSPD_10MB_MACCLK_6_25; 8646 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 8647 } 8648 8649 /* This works around an issue with Athlon chipsets on 8650 * B3 tigon3 silicon. This bit has no effect on any 8651 * other revision. But do not set this on PCI Express 8652 * chips and don't even touch the clocks if the CPMU is present. 8653 */ 8654 if (!tg3_flag(tp, CPMU_PRESENT)) { 8655 if (!tg3_flag(tp, PCI_EXPRESS)) 8656 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 8657 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 8658 } 8659 8660 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && 8661 tg3_flag(tp, PCIX_MODE)) { 8662 val = tr32(TG3PCI_PCISTATE); 8663 val |= PCISTATE_RETRY_SAME_DMA; 8664 tw32(TG3PCI_PCISTATE, val); 8665 } 8666 8667 if (tg3_flag(tp, ENABLE_APE)) { 8668 /* Allow reads and writes to the 8669 * APE register and memory space. 8670 */ 8671 val = tr32(TG3PCI_PCISTATE); 8672 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 8673 PCISTATE_ALLOW_APE_SHMEM_WR | 8674 PCISTATE_ALLOW_APE_PSPACE_WR; 8675 tw32(TG3PCI_PCISTATE, val); 8676 } 8677 8678 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) { 8679 /* Enable some hw fixes. */ 8680 val = tr32(TG3PCI_MSI_DATA); 8681 val |= (1 << 26) | (1 << 28) | (1 << 29); 8682 tw32(TG3PCI_MSI_DATA, val); 8683 } 8684 8685 /* Descriptor ring init may make accesses to the 8686 * NIC SRAM area to setup the TX descriptors, so we 8687 * can only do this after the hardware has been 8688 * successfully reset. 8689 */ 8690 err = tg3_init_rings(tp); 8691 if (err) 8692 return err; 8693 8694 if (tg3_flag(tp, 57765_PLUS)) { 8695 val = tr32(TG3PCI_DMA_RW_CTRL) & 8696 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 8697 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) 8698 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; 8699 if (!tg3_flag(tp, 57765_CLASS) && 8700 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) 8701 val |= DMA_RWCTRL_TAGGED_STAT_WA; 8702 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); 8703 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 && 8704 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) { 8705 /* This value is determined during the probe time DMA 8706 * engine test, tg3_test_dma. 8707 */ 8708 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 8709 } 8710 8711 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS | 8712 GRC_MODE_4X_NIC_SEND_RINGS | 8713 GRC_MODE_NO_TX_PHDR_CSUM | 8714 GRC_MODE_NO_RX_PHDR_CSUM); 8715 tp->grc_mode |= GRC_MODE_HOST_SENDBDS; 8716 8717 /* Pseudo-header checksum is done by hardware logic and not 8718 * the offload processers, so make the chip do the pseudo- 8719 * header checksums on receive. For transmit it is more 8720 * convenient to do the pseudo-header checksum in software 8721 * as Linux does that on transmit for us in all cases. 8722 */ 8723 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; 8724 8725 tw32(GRC_MODE, 8726 tp->grc_mode | 8727 (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP)); 8728 8729 /* Setup the timer prescalar register. Clock is always 66Mhz. */ 8730 val = tr32(GRC_MISC_CFG); 8731 val &= ~0xff; 8732 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT); 8733 tw32(GRC_MISC_CFG, val); 8734 8735 /* Initialize MBUF/DESC pool. */ 8736 if (tg3_flag(tp, 5750_PLUS)) { 8737 /* Do nothing. */ 8738 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { 8739 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); 8740 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 8741 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); 8742 else 8743 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96); 8744 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE); 8745 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE); 8746 } else if (tg3_flag(tp, TSO_CAPABLE)) { 8747 int fw_len; 8748 8749 fw_len = tp->fw_len; 8750 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1); 8751 tw32(BUFMGR_MB_POOL_ADDR, 8752 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len); 8753 tw32(BUFMGR_MB_POOL_SIZE, 8754 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00); 8755 } 8756 8757 if (tp->dev->mtu <= ETH_DATA_LEN) { 8758 tw32(BUFMGR_MB_RDMA_LOW_WATER, 8759 tp->bufmgr_config.mbuf_read_dma_low_water); 8760 tw32(BUFMGR_MB_MACRX_LOW_WATER, 8761 tp->bufmgr_config.mbuf_mac_rx_low_water); 8762 tw32(BUFMGR_MB_HIGH_WATER, 8763 tp->bufmgr_config.mbuf_high_water); 8764 } else { 8765 tw32(BUFMGR_MB_RDMA_LOW_WATER, 8766 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo); 8767 tw32(BUFMGR_MB_MACRX_LOW_WATER, 8768 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo); 8769 tw32(BUFMGR_MB_HIGH_WATER, 8770 tp->bufmgr_config.mbuf_high_water_jumbo); 8771 } 8772 tw32(BUFMGR_DMA_LOW_WATER, 8773 tp->bufmgr_config.dma_low_water); 8774 tw32(BUFMGR_DMA_HIGH_WATER, 8775 tp->bufmgr_config.dma_high_water); 8776 8777 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE; 8778 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 8779 val |= BUFMGR_MODE_NO_TX_UNDERRUN; 8780 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 8781 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 8782 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) 8783 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB; 8784 tw32(BUFMGR_MODE, val); 8785 for (i = 0; i < 2000; i++) { 8786 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE) 8787 break; 8788 udelay(10); 8789 } 8790 if (i >= 2000) { 8791 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__); 8792 return -ENODEV; 8793 } 8794 8795 if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1) 8796 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2); 8797 8798 tg3_setup_rxbd_thresholds(tp); 8799 8800 /* Initialize TG3_BDINFO's at: 8801 * RCVDBDI_STD_BD: standard eth size rx ring 8802 * RCVDBDI_JUMBO_BD: jumbo frame rx ring 8803 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work) 8804 * 8805 * like so: 8806 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring 8807 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) | 8808 * ring attribute flags 8809 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM 8810 * 8811 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries. 8812 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries. 8813 * 8814 * The size of each ring is fixed in the firmware, but the location is 8815 * configurable. 8816 */ 8817 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 8818 ((u64) tpr->rx_std_mapping >> 32)); 8819 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 8820 ((u64) tpr->rx_std_mapping & 0xffffffff)); 8821 if (!tg3_flag(tp, 5717_PLUS)) 8822 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 8823 NIC_SRAM_RX_BUFFER_DESC); 8824 8825 /* Disable the mini ring */ 8826 if (!tg3_flag(tp, 5705_PLUS)) 8827 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS, 8828 BDINFO_FLAGS_DISABLED); 8829 8830 /* Program the jumbo buffer descriptor ring control 8831 * blocks on those devices that have them. 8832 */ 8833 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 8834 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) { 8835 8836 if (tg3_flag(tp, JUMBO_RING_ENABLE)) { 8837 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 8838 ((u64) tpr->rx_jmb_mapping >> 32)); 8839 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 8840 ((u64) tpr->rx_jmb_mapping & 0xffffffff)); 8841 val = TG3_RX_JMB_RING_SIZE(tp) << 8842 BDINFO_FLAGS_MAXLEN_SHIFT; 8843 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 8844 val | BDINFO_FLAGS_USE_EXT_RECV); 8845 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || 8846 tg3_flag(tp, 57765_CLASS)) 8847 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, 8848 NIC_SRAM_RX_JUMBO_BUFFER_DESC); 8849 } else { 8850 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 8851 BDINFO_FLAGS_DISABLED); 8852 } 8853 8854 if (tg3_flag(tp, 57765_PLUS)) { 8855 val = TG3_RX_STD_RING_SIZE(tp); 8856 val <<= BDINFO_FLAGS_MAXLEN_SHIFT; 8857 val |= (TG3_RX_STD_DMA_SZ << 2); 8858 } else 8859 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT; 8860 } else 8861 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT; 8862 8863 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val); 8864 8865 tpr->rx_std_prod_idx = tp->rx_pending; 8866 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx); 8867 8868 tpr->rx_jmb_prod_idx = 8869 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0; 8870 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx); 8871 8872 tg3_rings_reset(tp); 8873 8874 /* Initialize MAC address and backoff seed. */ 8875 __tg3_set_mac_addr(tp, 0); 8876 8877 /* MTU + ethernet header + FCS + optional VLAN tag */ 8878 tw32(MAC_RX_MTU_SIZE, 8879 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 8880 8881 /* The slot time is changed by tg3_setup_phy if we 8882 * run at gigabit with half duplex. 8883 */ 8884 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 8885 (6 << TX_LENGTHS_IPG_SHIFT) | 8886 (32 << TX_LENGTHS_SLOT_TIME_SHIFT); 8887 8888 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 8889 val |= tr32(MAC_TX_LENGTHS) & 8890 (TX_LENGTHS_JMB_FRM_LEN_MSK | 8891 TX_LENGTHS_CNT_DWN_VAL_MSK); 8892 8893 tw32(MAC_TX_LENGTHS, val); 8894 8895 /* Receive rules. */ 8896 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS); 8897 tw32(RCVLPC_CONFIG, 0x0181); 8898 8899 /* Calculate RDMAC_MODE setting early, we need it to determine 8900 * the RCVLPC_STATE_ENABLE mask. 8901 */ 8902 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB | 8903 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB | 8904 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB | 8905 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB | 8906 RDMAC_MODE_LNGREAD_ENAB); 8907 8908 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) 8909 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS; 8910 8911 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 8912 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 8913 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 8914 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB | 8915 RDMAC_MODE_MBUF_RBD_CRPT_ENAB | 8916 RDMAC_MODE_MBUF_SBD_CRPT_ENAB; 8917 8918 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 8919 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 8920 if (tg3_flag(tp, TSO_CAPABLE) && 8921 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 8922 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; 8923 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 8924 !tg3_flag(tp, IS_5788)) { 8925 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 8926 } 8927 } 8928 8929 if (tg3_flag(tp, PCI_EXPRESS)) 8930 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 8931 8932 if (tg3_flag(tp, HW_TSO_1) || 8933 tg3_flag(tp, HW_TSO_2) || 8934 tg3_flag(tp, HW_TSO_3)) 8935 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN; 8936 8937 if (tg3_flag(tp, 57765_PLUS) || 8938 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 8939 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 8940 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; 8941 8942 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 8943 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; 8944 8945 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 8946 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 8947 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 8948 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 8949 tg3_flag(tp, 57765_PLUS)) { 8950 val = tr32(TG3_RDMA_RSRVCTRL_REG); 8951 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 8952 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 8953 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | 8954 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | 8955 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); 8956 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B | 8957 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | 8958 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; 8959 } 8960 tw32(TG3_RDMA_RSRVCTRL_REG, 8961 val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); 8962 } 8963 8964 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 8965 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 8966 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 8967 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val | 8968 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | 8969 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); 8970 } 8971 8972 /* Receive/send statistics. */ 8973 if (tg3_flag(tp, 5750_PLUS)) { 8974 val = tr32(RCVLPC_STATS_ENABLE); 8975 val &= ~RCVLPC_STATSENAB_DACK_FIX; 8976 tw32(RCVLPC_STATS_ENABLE, val); 8977 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && 8978 tg3_flag(tp, TSO_CAPABLE)) { 8979 val = tr32(RCVLPC_STATS_ENABLE); 8980 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX; 8981 tw32(RCVLPC_STATS_ENABLE, val); 8982 } else { 8983 tw32(RCVLPC_STATS_ENABLE, 0xffffff); 8984 } 8985 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE); 8986 tw32(SNDDATAI_STATSENAB, 0xffffff); 8987 tw32(SNDDATAI_STATSCTRL, 8988 (SNDDATAI_SCTRL_ENABLE | 8989 SNDDATAI_SCTRL_FASTUPD)); 8990 8991 /* Setup host coalescing engine. */ 8992 tw32(HOSTCC_MODE, 0); 8993 for (i = 0; i < 2000; i++) { 8994 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE)) 8995 break; 8996 udelay(10); 8997 } 8998 8999 __tg3_set_coalesce(tp, &tp->coal); 9000 9001 if (!tg3_flag(tp, 5705_PLUS)) { 9002 /* Status/statistics block address. See tg3_timer, 9003 * the tg3_periodic_fetch_stats call there, and 9004 * tg3_get_stats to see how this works for 5705/5750 chips. 9005 */ 9006 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 9007 ((u64) tp->stats_mapping >> 32)); 9008 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 9009 ((u64) tp->stats_mapping & 0xffffffff)); 9010 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK); 9011 9012 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK); 9013 9014 /* Clear statistics and status block memory areas */ 9015 for (i = NIC_SRAM_STATS_BLK; 9016 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; 9017 i += sizeof(u32)) { 9018 tg3_write_mem(tp, i, 0); 9019 udelay(40); 9020 } 9021 } 9022 9023 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode); 9024 9025 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); 9026 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); 9027 if (!tg3_flag(tp, 5705_PLUS)) 9028 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); 9029 9030 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 9031 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 9032 /* reset to prevent losing 1st rx packet intermittently */ 9033 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 9034 udelay(10); 9035 } 9036 9037 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | 9038 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | 9039 MAC_MODE_FHDE_ENABLE; 9040 if (tg3_flag(tp, ENABLE_APE)) 9041 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 9042 if (!tg3_flag(tp, 5705_PLUS) && 9043 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 9044 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) 9045 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 9046 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); 9047 udelay(40); 9048 9049 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). 9050 * If TG3_FLAG_IS_NIC is zero, we should read the 9051 * register to preserve the GPIO settings for LOMs. The GPIOs, 9052 * whether used as inputs or outputs, are set by boot code after 9053 * reset. 9054 */ 9055 if (!tg3_flag(tp, IS_NIC)) { 9056 u32 gpio_mask; 9057 9058 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | 9059 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | 9060 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; 9061 9062 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 9063 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | 9064 GRC_LCLCTRL_GPIO_OUTPUT3; 9065 9066 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 9067 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL; 9068 9069 tp->grc_local_ctrl &= ~gpio_mask; 9070 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; 9071 9072 /* GPIO1 must be driven high for eeprom write protect */ 9073 if (tg3_flag(tp, EEPROM_WRITE_PROT)) 9074 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 9075 GRC_LCLCTRL_GPIO_OUTPUT1); 9076 } 9077 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 9078 udelay(100); 9079 9080 if (tg3_flag(tp, USING_MSIX)) { 9081 val = tr32(MSGINT_MODE); 9082 val |= MSGINT_MODE_ENABLE; 9083 if (tp->irq_cnt > 1) 9084 val |= MSGINT_MODE_MULTIVEC_EN; 9085 if (!tg3_flag(tp, 1SHOT_MSI)) 9086 val |= MSGINT_MODE_ONE_SHOT_DISABLE; 9087 tw32(MSGINT_MODE, val); 9088 } 9089 9090 if (!tg3_flag(tp, 5705_PLUS)) { 9091 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); 9092 udelay(40); 9093 } 9094 9095 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB | 9096 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB | 9097 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | 9098 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | 9099 WDMAC_MODE_LNGREAD_ENAB); 9100 9101 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 9102 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 9103 if (tg3_flag(tp, TSO_CAPABLE) && 9104 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 || 9105 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) { 9106 /* nothing */ 9107 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 9108 !tg3_flag(tp, IS_5788)) { 9109 val |= WDMAC_MODE_RX_ACCEL; 9110 } 9111 } 9112 9113 /* Enable host coalescing bug fix */ 9114 if (tg3_flag(tp, 5755_PLUS)) 9115 val |= WDMAC_MODE_STATUS_TAG_FIX; 9116 9117 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 9118 val |= WDMAC_MODE_BURST_ALL_DATA; 9119 9120 tw32_f(WDMAC_MODE, val); 9121 udelay(40); 9122 9123 if (tg3_flag(tp, PCIX_MODE)) { 9124 u16 pcix_cmd; 9125 9126 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 9127 &pcix_cmd); 9128 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) { 9129 pcix_cmd &= ~PCI_X_CMD_MAX_READ; 9130 pcix_cmd |= PCI_X_CMD_READ_2K; 9131 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 9132 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ); 9133 pcix_cmd |= PCI_X_CMD_READ_2K; 9134 } 9135 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 9136 pcix_cmd); 9137 } 9138 9139 tw32_f(RDMAC_MODE, rdmac_mode); 9140 udelay(40); 9141 9142 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); 9143 if (!tg3_flag(tp, 5705_PLUS)) 9144 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); 9145 9146 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 9147 tw32(SNDDATAC_MODE, 9148 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY); 9149 else 9150 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); 9151 9152 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); 9153 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); 9154 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ; 9155 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 9156 val |= RCVDBDI_MODE_LRG_RING_SZ; 9157 tw32(RCVDBDI_MODE, val); 9158 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); 9159 if (tg3_flag(tp, HW_TSO_1) || 9160 tg3_flag(tp, HW_TSO_2) || 9161 tg3_flag(tp, HW_TSO_3)) 9162 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); 9163 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE; 9164 if (tg3_flag(tp, ENABLE_TSS)) 9165 val |= SNDBDI_MODE_MULTI_TXQ_EN; 9166 tw32(SNDBDI_MODE, val); 9167 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); 9168 9169 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) { 9170 err = tg3_load_5701_a0_firmware_fix(tp); 9171 if (err) 9172 return err; 9173 } 9174 9175 if (tg3_flag(tp, TSO_CAPABLE)) { 9176 err = tg3_load_tso_firmware(tp); 9177 if (err) 9178 return err; 9179 } 9180 9181 tp->tx_mode = TX_MODE_ENABLE; 9182 9183 if (tg3_flag(tp, 5755_PLUS) || 9184 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 9185 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; 9186 9187 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 9188 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; 9189 tp->tx_mode &= ~val; 9190 tp->tx_mode |= tr32(MAC_TX_MODE) & val; 9191 } 9192 9193 tw32_f(MAC_TX_MODE, tp->tx_mode); 9194 udelay(100); 9195 9196 if (tg3_flag(tp, ENABLE_RSS)) { 9197 tg3_rss_write_indir_tbl(tp); 9198 9199 /* Setup the "secret" hash key. */ 9200 tw32(MAC_RSS_HASH_KEY_0, 0x5f865437); 9201 tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc); 9202 tw32(MAC_RSS_HASH_KEY_2, 0x50103a45); 9203 tw32(MAC_RSS_HASH_KEY_3, 0x36621985); 9204 tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8); 9205 tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e); 9206 tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556); 9207 tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe); 9208 tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7); 9209 tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481); 9210 } 9211 9212 tp->rx_mode = RX_MODE_ENABLE; 9213 if (tg3_flag(tp, 5755_PLUS)) 9214 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE; 9215 9216 if (tg3_flag(tp, ENABLE_RSS)) 9217 tp->rx_mode |= RX_MODE_RSS_ENABLE | 9218 RX_MODE_RSS_ITBL_HASH_BITS_7 | 9219 RX_MODE_RSS_IPV6_HASH_EN | 9220 RX_MODE_RSS_TCP_IPV6_HASH_EN | 9221 RX_MODE_RSS_IPV4_HASH_EN | 9222 RX_MODE_RSS_TCP_IPV4_HASH_EN; 9223 9224 tw32_f(MAC_RX_MODE, tp->rx_mode); 9225 udelay(10); 9226 9227 tw32(MAC_LED_CTRL, tp->led_ctrl); 9228 9229 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 9230 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9231 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 9232 udelay(10); 9233 } 9234 tw32_f(MAC_RX_MODE, tp->rx_mode); 9235 udelay(10); 9236 9237 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9238 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) && 9239 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) { 9240 /* Set drive transmission level to 1.2V */ 9241 /* only if the signal pre-emphasis bit is not set */ 9242 val = tr32(MAC_SERDES_CFG); 9243 val &= 0xfffff000; 9244 val |= 0x880; 9245 tw32(MAC_SERDES_CFG, val); 9246 } 9247 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) 9248 tw32(MAC_SERDES_CFG, 0x616000); 9249 } 9250 9251 /* Prevent chip from dropping frames when flow control 9252 * is enabled. 9253 */ 9254 if (tg3_flag(tp, 57765_CLASS)) 9255 val = 1; 9256 else 9257 val = 2; 9258 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val); 9259 9260 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && 9261 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 9262 /* Use hardware link auto-negotiation */ 9263 tg3_flag_set(tp, HW_AUTONEG); 9264 } 9265 9266 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 9267 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 9268 u32 tmp; 9269 9270 tmp = tr32(SERDES_RX_CTRL); 9271 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); 9272 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; 9273 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; 9274 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 9275 } 9276 9277 if (!tg3_flag(tp, USE_PHYLIB)) { 9278 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 9279 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 9280 9281 err = tg3_setup_phy(tp, 0); 9282 if (err) 9283 return err; 9284 9285 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 9286 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 9287 u32 tmp; 9288 9289 /* Clear CRC stats. */ 9290 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) { 9291 tg3_writephy(tp, MII_TG3_TEST1, 9292 tmp | MII_TG3_TEST1_CRC_EN); 9293 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp); 9294 } 9295 } 9296 } 9297 9298 __tg3_set_rx_mode(tp->dev); 9299 9300 /* Initialize receive rules. */ 9301 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK); 9302 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK); 9303 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); 9304 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); 9305 9306 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) 9307 limit = 8; 9308 else 9309 limit = 16; 9310 if (tg3_flag(tp, ENABLE_ASF)) 9311 limit -= 4; 9312 switch (limit) { 9313 case 16: 9314 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); 9315 case 15: 9316 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); 9317 case 14: 9318 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); 9319 case 13: 9320 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); 9321 case 12: 9322 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); 9323 case 11: 9324 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); 9325 case 10: 9326 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); 9327 case 9: 9328 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); 9329 case 8: 9330 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); 9331 case 7: 9332 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); 9333 case 6: 9334 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); 9335 case 5: 9336 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); 9337 case 4: 9338 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ 9339 case 3: 9340 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */ 9341 case 2: 9342 case 1: 9343 9344 default: 9345 break; 9346 } 9347 9348 if (tg3_flag(tp, ENABLE_APE)) 9349 /* Write our heartbeat update interval to APE. */ 9350 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS, 9351 APE_HOST_HEARTBEAT_INT_DISABLE); 9352 9353 tg3_write_sig_post_reset(tp, RESET_KIND_INIT); 9354 9355 return 0; 9356 } 9357 9358 /* Called at device open time to get the chip ready for 9359 * packet processing. Invoked with tp->lock held. 9360 */ 9361 static int tg3_init_hw(struct tg3 *tp, int reset_phy) 9362 { 9363 tg3_switch_clocks(tp); 9364 9365 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 9366 9367 return tg3_reset_hw(tp, reset_phy); 9368 } 9369 9370 #define TG3_STAT_ADD32(PSTAT, REG) \ 9371 do { u32 __val = tr32(REG); \ 9372 (PSTAT)->low += __val; \ 9373 if ((PSTAT)->low < __val) \ 9374 (PSTAT)->high += 1; \ 9375 } while (0) 9376 9377 static void tg3_periodic_fetch_stats(struct tg3 *tp) 9378 { 9379 struct tg3_hw_stats *sp = tp->hw_stats; 9380 9381 if (!netif_carrier_ok(tp->dev)) 9382 return; 9383 9384 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS); 9385 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS); 9386 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT); 9387 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT); 9388 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS); 9389 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS); 9390 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS); 9391 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED); 9392 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL); 9393 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL); 9394 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); 9395 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); 9396 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); 9397 9398 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); 9399 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS); 9400 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST); 9401 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST); 9402 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST); 9403 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS); 9404 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS); 9405 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD); 9406 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD); 9407 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD); 9408 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED); 9409 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG); 9410 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS); 9411 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE); 9412 9413 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT); 9414 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && 9415 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0 && 9416 tp->pci_chip_rev_id != CHIPREV_ID_5720_A0) { 9417 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT); 9418 } else { 9419 u32 val = tr32(HOSTCC_FLOW_ATTN); 9420 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0; 9421 if (val) { 9422 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM); 9423 sp->rx_discards.low += val; 9424 if (sp->rx_discards.low < val) 9425 sp->rx_discards.high += 1; 9426 } 9427 sp->mbuf_lwm_thresh_hit = sp->rx_discards; 9428 } 9429 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT); 9430 } 9431 9432 static void tg3_chk_missed_msi(struct tg3 *tp) 9433 { 9434 u32 i; 9435 9436 for (i = 0; i < tp->irq_cnt; i++) { 9437 struct tg3_napi *tnapi = &tp->napi[i]; 9438 9439 if (tg3_has_work(tnapi)) { 9440 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr && 9441 tnapi->last_tx_cons == tnapi->tx_cons) { 9442 if (tnapi->chk_msi_cnt < 1) { 9443 tnapi->chk_msi_cnt++; 9444 return; 9445 } 9446 tg3_msi(0, tnapi); 9447 } 9448 } 9449 tnapi->chk_msi_cnt = 0; 9450 tnapi->last_rx_cons = tnapi->rx_rcb_ptr; 9451 tnapi->last_tx_cons = tnapi->tx_cons; 9452 } 9453 } 9454 9455 static void tg3_timer(unsigned long __opaque) 9456 { 9457 struct tg3 *tp = (struct tg3 *) __opaque; 9458 9459 if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) 9460 goto restart_timer; 9461 9462 spin_lock(&tp->lock); 9463 9464 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 9465 tg3_flag(tp, 57765_CLASS)) 9466 tg3_chk_missed_msi(tp); 9467 9468 if (!tg3_flag(tp, TAGGED_STATUS)) { 9469 /* All of this garbage is because when using non-tagged 9470 * IRQ status the mailbox/status_block protocol the chip 9471 * uses with the cpu is race prone. 9472 */ 9473 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) { 9474 tw32(GRC_LOCAL_CTRL, 9475 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 9476 } else { 9477 tw32(HOSTCC_MODE, tp->coalesce_mode | 9478 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW); 9479 } 9480 9481 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 9482 spin_unlock(&tp->lock); 9483 tg3_reset_task_schedule(tp); 9484 goto restart_timer; 9485 } 9486 } 9487 9488 /* This part only runs once per second. */ 9489 if (!--tp->timer_counter) { 9490 if (tg3_flag(tp, 5705_PLUS)) 9491 tg3_periodic_fetch_stats(tp); 9492 9493 if (tp->setlpicnt && !--tp->setlpicnt) 9494 tg3_phy_eee_enable(tp); 9495 9496 if (tg3_flag(tp, USE_LINKCHG_REG)) { 9497 u32 mac_stat; 9498 int phy_event; 9499 9500 mac_stat = tr32(MAC_STATUS); 9501 9502 phy_event = 0; 9503 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) { 9504 if (mac_stat & MAC_STATUS_MI_INTERRUPT) 9505 phy_event = 1; 9506 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) 9507 phy_event = 1; 9508 9509 if (phy_event) 9510 tg3_setup_phy(tp, 0); 9511 } else if (tg3_flag(tp, POLL_SERDES)) { 9512 u32 mac_stat = tr32(MAC_STATUS); 9513 int need_setup = 0; 9514 9515 if (netif_carrier_ok(tp->dev) && 9516 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) { 9517 need_setup = 1; 9518 } 9519 if (!netif_carrier_ok(tp->dev) && 9520 (mac_stat & (MAC_STATUS_PCS_SYNCED | 9521 MAC_STATUS_SIGNAL_DET))) { 9522 need_setup = 1; 9523 } 9524 if (need_setup) { 9525 if (!tp->serdes_counter) { 9526 tw32_f(MAC_MODE, 9527 (tp->mac_mode & 9528 ~MAC_MODE_PORT_MODE_MASK)); 9529 udelay(40); 9530 tw32_f(MAC_MODE, tp->mac_mode); 9531 udelay(40); 9532 } 9533 tg3_setup_phy(tp, 0); 9534 } 9535 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 9536 tg3_flag(tp, 5780_CLASS)) { 9537 tg3_serdes_parallel_detect(tp); 9538 } 9539 9540 tp->timer_counter = tp->timer_multiplier; 9541 } 9542 9543 /* Heartbeat is only sent once every 2 seconds. 9544 * 9545 * The heartbeat is to tell the ASF firmware that the host 9546 * driver is still alive. In the event that the OS crashes, 9547 * ASF needs to reset the hardware to free up the FIFO space 9548 * that may be filled with rx packets destined for the host. 9549 * If the FIFO is full, ASF will no longer function properly. 9550 * 9551 * Unintended resets have been reported on real time kernels 9552 * where the timer doesn't run on time. Netpoll will also have 9553 * same problem. 9554 * 9555 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware 9556 * to check the ring condition when the heartbeat is expiring 9557 * before doing the reset. This will prevent most unintended 9558 * resets. 9559 */ 9560 if (!--tp->asf_counter) { 9561 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 9562 tg3_wait_for_event_ack(tp); 9563 9564 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, 9565 FWCMD_NICDRV_ALIVE3); 9566 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 9567 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 9568 TG3_FW_UPDATE_TIMEOUT_SEC); 9569 9570 tg3_generate_fw_event(tp); 9571 } 9572 tp->asf_counter = tp->asf_multiplier; 9573 } 9574 9575 spin_unlock(&tp->lock); 9576 9577 restart_timer: 9578 tp->timer.expires = jiffies + tp->timer_offset; 9579 add_timer(&tp->timer); 9580 } 9581 9582 static void __devinit tg3_timer_init(struct tg3 *tp) 9583 { 9584 if (tg3_flag(tp, TAGGED_STATUS) && 9585 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && 9586 !tg3_flag(tp, 57765_CLASS)) 9587 tp->timer_offset = HZ; 9588 else 9589 tp->timer_offset = HZ / 10; 9590 9591 BUG_ON(tp->timer_offset > HZ); 9592 9593 tp->timer_multiplier = (HZ / tp->timer_offset); 9594 tp->asf_multiplier = (HZ / tp->timer_offset) * 9595 TG3_FW_UPDATE_FREQ_SEC; 9596 9597 init_timer(&tp->timer); 9598 tp->timer.data = (unsigned long) tp; 9599 tp->timer.function = tg3_timer; 9600 } 9601 9602 static void tg3_timer_start(struct tg3 *tp) 9603 { 9604 tp->asf_counter = tp->asf_multiplier; 9605 tp->timer_counter = tp->timer_multiplier; 9606 9607 tp->timer.expires = jiffies + tp->timer_offset; 9608 add_timer(&tp->timer); 9609 } 9610 9611 static void tg3_timer_stop(struct tg3 *tp) 9612 { 9613 del_timer_sync(&tp->timer); 9614 } 9615 9616 /* Restart hardware after configuration changes, self-test, etc. 9617 * Invoked with tp->lock held. 9618 */ 9619 static int tg3_restart_hw(struct tg3 *tp, int reset_phy) 9620 __releases(tp->lock) 9621 __acquires(tp->lock) 9622 { 9623 int err; 9624 9625 err = tg3_init_hw(tp, reset_phy); 9626 if (err) { 9627 netdev_err(tp->dev, 9628 "Failed to re-initialize device, aborting\n"); 9629 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 9630 tg3_full_unlock(tp); 9631 tg3_timer_stop(tp); 9632 tp->irq_sync = 0; 9633 tg3_napi_enable(tp); 9634 dev_close(tp->dev); 9635 tg3_full_lock(tp, 0); 9636 } 9637 return err; 9638 } 9639 9640 static void tg3_reset_task(struct work_struct *work) 9641 { 9642 struct tg3 *tp = container_of(work, struct tg3, reset_task); 9643 int err; 9644 9645 tg3_full_lock(tp, 0); 9646 9647 if (!netif_running(tp->dev)) { 9648 tg3_flag_clear(tp, RESET_TASK_PENDING); 9649 tg3_full_unlock(tp); 9650 return; 9651 } 9652 9653 tg3_full_unlock(tp); 9654 9655 tg3_phy_stop(tp); 9656 9657 tg3_netif_stop(tp); 9658 9659 tg3_full_lock(tp, 1); 9660 9661 if (tg3_flag(tp, TX_RECOVERY_PENDING)) { 9662 tp->write32_tx_mbox = tg3_write32_tx_mbox; 9663 tp->write32_rx_mbox = tg3_write_flush_reg32; 9664 tg3_flag_set(tp, MBOX_WRITE_REORDER); 9665 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 9666 } 9667 9668 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 9669 err = tg3_init_hw(tp, 1); 9670 if (err) 9671 goto out; 9672 9673 tg3_netif_start(tp); 9674 9675 out: 9676 tg3_full_unlock(tp); 9677 9678 if (!err) 9679 tg3_phy_start(tp); 9680 9681 tg3_flag_clear(tp, RESET_TASK_PENDING); 9682 } 9683 9684 static int tg3_request_irq(struct tg3 *tp, int irq_num) 9685 { 9686 irq_handler_t fn; 9687 unsigned long flags; 9688 char *name; 9689 struct tg3_napi *tnapi = &tp->napi[irq_num]; 9690 9691 if (tp->irq_cnt == 1) 9692 name = tp->dev->name; 9693 else { 9694 name = &tnapi->irq_lbl[0]; 9695 snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num); 9696 name[IFNAMSIZ-1] = 0; 9697 } 9698 9699 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 9700 fn = tg3_msi; 9701 if (tg3_flag(tp, 1SHOT_MSI)) 9702 fn = tg3_msi_1shot; 9703 flags = 0; 9704 } else { 9705 fn = tg3_interrupt; 9706 if (tg3_flag(tp, TAGGED_STATUS)) 9707 fn = tg3_interrupt_tagged; 9708 flags = IRQF_SHARED; 9709 } 9710 9711 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi); 9712 } 9713 9714 static int tg3_test_interrupt(struct tg3 *tp) 9715 { 9716 struct tg3_napi *tnapi = &tp->napi[0]; 9717 struct net_device *dev = tp->dev; 9718 int err, i, intr_ok = 0; 9719 u32 val; 9720 9721 if (!netif_running(dev)) 9722 return -ENODEV; 9723 9724 tg3_disable_ints(tp); 9725 9726 free_irq(tnapi->irq_vec, tnapi); 9727 9728 /* 9729 * Turn off MSI one shot mode. Otherwise this test has no 9730 * observable way to know whether the interrupt was delivered. 9731 */ 9732 if (tg3_flag(tp, 57765_PLUS)) { 9733 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; 9734 tw32(MSGINT_MODE, val); 9735 } 9736 9737 err = request_irq(tnapi->irq_vec, tg3_test_isr, 9738 IRQF_SHARED, dev->name, tnapi); 9739 if (err) 9740 return err; 9741 9742 tnapi->hw_status->status &= ~SD_STATUS_UPDATED; 9743 tg3_enable_ints(tp); 9744 9745 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 9746 tnapi->coal_now); 9747 9748 for (i = 0; i < 5; i++) { 9749 u32 int_mbox, misc_host_ctrl; 9750 9751 int_mbox = tr32_mailbox(tnapi->int_mbox); 9752 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 9753 9754 if ((int_mbox != 0) || 9755 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) { 9756 intr_ok = 1; 9757 break; 9758 } 9759 9760 if (tg3_flag(tp, 57765_PLUS) && 9761 tnapi->hw_status->status_tag != tnapi->last_tag) 9762 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 9763 9764 msleep(10); 9765 } 9766 9767 tg3_disable_ints(tp); 9768 9769 free_irq(tnapi->irq_vec, tnapi); 9770 9771 err = tg3_request_irq(tp, 0); 9772 9773 if (err) 9774 return err; 9775 9776 if (intr_ok) { 9777 /* Reenable MSI one shot mode. */ 9778 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) { 9779 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; 9780 tw32(MSGINT_MODE, val); 9781 } 9782 return 0; 9783 } 9784 9785 return -EIO; 9786 } 9787 9788 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is 9789 * successfully restored 9790 */ 9791 static int tg3_test_msi(struct tg3 *tp) 9792 { 9793 int err; 9794 u16 pci_cmd; 9795 9796 if (!tg3_flag(tp, USING_MSI)) 9797 return 0; 9798 9799 /* Turn off SERR reporting in case MSI terminates with Master 9800 * Abort. 9801 */ 9802 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 9803 pci_write_config_word(tp->pdev, PCI_COMMAND, 9804 pci_cmd & ~PCI_COMMAND_SERR); 9805 9806 err = tg3_test_interrupt(tp); 9807 9808 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 9809 9810 if (!err) 9811 return 0; 9812 9813 /* other failures */ 9814 if (err != -EIO) 9815 return err; 9816 9817 /* MSI test failed, go back to INTx mode */ 9818 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching " 9819 "to INTx mode. Please report this failure to the PCI " 9820 "maintainer and include system chipset information\n"); 9821 9822 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 9823 9824 pci_disable_msi(tp->pdev); 9825 9826 tg3_flag_clear(tp, USING_MSI); 9827 tp->napi[0].irq_vec = tp->pdev->irq; 9828 9829 err = tg3_request_irq(tp, 0); 9830 if (err) 9831 return err; 9832 9833 /* Need to reset the chip because the MSI cycle may have terminated 9834 * with Master Abort. 9835 */ 9836 tg3_full_lock(tp, 1); 9837 9838 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 9839 err = tg3_init_hw(tp, 1); 9840 9841 tg3_full_unlock(tp); 9842 9843 if (err) 9844 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 9845 9846 return err; 9847 } 9848 9849 static int tg3_request_firmware(struct tg3 *tp) 9850 { 9851 const __be32 *fw_data; 9852 9853 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) { 9854 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n", 9855 tp->fw_needed); 9856 return -ENOENT; 9857 } 9858 9859 fw_data = (void *)tp->fw->data; 9860 9861 /* Firmware blob starts with version numbers, followed by 9862 * start address and _full_ length including BSS sections 9863 * (which must be longer than the actual data, of course 9864 */ 9865 9866 tp->fw_len = be32_to_cpu(fw_data[2]); /* includes bss */ 9867 if (tp->fw_len < (tp->fw->size - 12)) { 9868 netdev_err(tp->dev, "bogus length %d in \"%s\"\n", 9869 tp->fw_len, tp->fw_needed); 9870 release_firmware(tp->fw); 9871 tp->fw = NULL; 9872 return -EINVAL; 9873 } 9874 9875 /* We no longer need firmware; we have it. */ 9876 tp->fw_needed = NULL; 9877 return 0; 9878 } 9879 9880 static bool tg3_enable_msix(struct tg3 *tp) 9881 { 9882 int i, rc; 9883 struct msix_entry msix_ent[tp->irq_max]; 9884 9885 tp->irq_cnt = num_online_cpus(); 9886 if (tp->irq_cnt > 1) { 9887 /* We want as many rx rings enabled as there are cpus. 9888 * In multiqueue MSI-X mode, the first MSI-X vector 9889 * only deals with link interrupts, etc, so we add 9890 * one to the number of vectors we are requesting. 9891 */ 9892 tp->irq_cnt = min_t(unsigned, tp->irq_cnt + 1, tp->irq_max); 9893 } 9894 9895 for (i = 0; i < tp->irq_max; i++) { 9896 msix_ent[i].entry = i; 9897 msix_ent[i].vector = 0; 9898 } 9899 9900 rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt); 9901 if (rc < 0) { 9902 return false; 9903 } else if (rc != 0) { 9904 if (pci_enable_msix(tp->pdev, msix_ent, rc)) 9905 return false; 9906 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n", 9907 tp->irq_cnt, rc); 9908 tp->irq_cnt = rc; 9909 } 9910 9911 for (i = 0; i < tp->irq_max; i++) 9912 tp->napi[i].irq_vec = msix_ent[i].vector; 9913 9914 netif_set_real_num_tx_queues(tp->dev, 1); 9915 rc = tp->irq_cnt > 1 ? tp->irq_cnt - 1 : 1; 9916 if (netif_set_real_num_rx_queues(tp->dev, rc)) { 9917 pci_disable_msix(tp->pdev); 9918 return false; 9919 } 9920 9921 if (tp->irq_cnt > 1) { 9922 tg3_flag_set(tp, ENABLE_RSS); 9923 9924 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 9925 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 9926 tg3_flag_set(tp, ENABLE_TSS); 9927 netif_set_real_num_tx_queues(tp->dev, tp->irq_cnt - 1); 9928 } 9929 } 9930 9931 return true; 9932 } 9933 9934 static void tg3_ints_init(struct tg3 *tp) 9935 { 9936 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) && 9937 !tg3_flag(tp, TAGGED_STATUS)) { 9938 /* All MSI supporting chips should support tagged 9939 * status. Assert that this is the case. 9940 */ 9941 netdev_warn(tp->dev, 9942 "MSI without TAGGED_STATUS? Not using MSI\n"); 9943 goto defcfg; 9944 } 9945 9946 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp)) 9947 tg3_flag_set(tp, USING_MSIX); 9948 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0) 9949 tg3_flag_set(tp, USING_MSI); 9950 9951 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 9952 u32 msi_mode = tr32(MSGINT_MODE); 9953 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) 9954 msi_mode |= MSGINT_MODE_MULTIVEC_EN; 9955 if (!tg3_flag(tp, 1SHOT_MSI)) 9956 msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE; 9957 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); 9958 } 9959 defcfg: 9960 if (!tg3_flag(tp, USING_MSIX)) { 9961 tp->irq_cnt = 1; 9962 tp->napi[0].irq_vec = tp->pdev->irq; 9963 netif_set_real_num_tx_queues(tp->dev, 1); 9964 netif_set_real_num_rx_queues(tp->dev, 1); 9965 } 9966 } 9967 9968 static void tg3_ints_fini(struct tg3 *tp) 9969 { 9970 if (tg3_flag(tp, USING_MSIX)) 9971 pci_disable_msix(tp->pdev); 9972 else if (tg3_flag(tp, USING_MSI)) 9973 pci_disable_msi(tp->pdev); 9974 tg3_flag_clear(tp, USING_MSI); 9975 tg3_flag_clear(tp, USING_MSIX); 9976 tg3_flag_clear(tp, ENABLE_RSS); 9977 tg3_flag_clear(tp, ENABLE_TSS); 9978 } 9979 9980 static int tg3_open(struct net_device *dev) 9981 { 9982 struct tg3 *tp = netdev_priv(dev); 9983 int i, err; 9984 9985 if (tp->fw_needed) { 9986 err = tg3_request_firmware(tp); 9987 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) { 9988 if (err) 9989 return err; 9990 } else if (err) { 9991 netdev_warn(tp->dev, "TSO capability disabled\n"); 9992 tg3_flag_clear(tp, TSO_CAPABLE); 9993 } else if (!tg3_flag(tp, TSO_CAPABLE)) { 9994 netdev_notice(tp->dev, "TSO capability restored\n"); 9995 tg3_flag_set(tp, TSO_CAPABLE); 9996 } 9997 } 9998 9999 netif_carrier_off(tp->dev); 10000 10001 err = tg3_power_up(tp); 10002 if (err) 10003 return err; 10004 10005 tg3_full_lock(tp, 0); 10006 10007 tg3_disable_ints(tp); 10008 tg3_flag_clear(tp, INIT_COMPLETE); 10009 10010 tg3_full_unlock(tp); 10011 10012 /* 10013 * Setup interrupts first so we know how 10014 * many NAPI resources to allocate 10015 */ 10016 tg3_ints_init(tp); 10017 10018 tg3_rss_check_indir_tbl(tp); 10019 10020 /* The placement of this call is tied 10021 * to the setup and use of Host TX descriptors. 10022 */ 10023 err = tg3_alloc_consistent(tp); 10024 if (err) 10025 goto err_out1; 10026 10027 tg3_napi_init(tp); 10028 10029 tg3_napi_enable(tp); 10030 10031 for (i = 0; i < tp->irq_cnt; i++) { 10032 struct tg3_napi *tnapi = &tp->napi[i]; 10033 err = tg3_request_irq(tp, i); 10034 if (err) { 10035 for (i--; i >= 0; i--) { 10036 tnapi = &tp->napi[i]; 10037 free_irq(tnapi->irq_vec, tnapi); 10038 } 10039 goto err_out2; 10040 } 10041 } 10042 10043 tg3_full_lock(tp, 0); 10044 10045 err = tg3_init_hw(tp, 1); 10046 if (err) { 10047 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10048 tg3_free_rings(tp); 10049 } 10050 10051 tg3_full_unlock(tp); 10052 10053 if (err) 10054 goto err_out3; 10055 10056 if (tg3_flag(tp, USING_MSI)) { 10057 err = tg3_test_msi(tp); 10058 10059 if (err) { 10060 tg3_full_lock(tp, 0); 10061 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10062 tg3_free_rings(tp); 10063 tg3_full_unlock(tp); 10064 10065 goto err_out2; 10066 } 10067 10068 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { 10069 u32 val = tr32(PCIE_TRANSACTION_CFG); 10070 10071 tw32(PCIE_TRANSACTION_CFG, 10072 val | PCIE_TRANS_CFG_1SHOT_MSI); 10073 } 10074 } 10075 10076 tg3_phy_start(tp); 10077 10078 tg3_full_lock(tp, 0); 10079 10080 tg3_timer_start(tp); 10081 tg3_flag_set(tp, INIT_COMPLETE); 10082 tg3_enable_ints(tp); 10083 10084 tg3_full_unlock(tp); 10085 10086 netif_tx_start_all_queues(dev); 10087 10088 /* 10089 * Reset loopback feature if it was turned on while the device was down 10090 * make sure that it's installed properly now. 10091 */ 10092 if (dev->features & NETIF_F_LOOPBACK) 10093 tg3_set_loopback(dev, dev->features); 10094 10095 return 0; 10096 10097 err_out3: 10098 for (i = tp->irq_cnt - 1; i >= 0; i--) { 10099 struct tg3_napi *tnapi = &tp->napi[i]; 10100 free_irq(tnapi->irq_vec, tnapi); 10101 } 10102 10103 err_out2: 10104 tg3_napi_disable(tp); 10105 tg3_napi_fini(tp); 10106 tg3_free_consistent(tp); 10107 10108 err_out1: 10109 tg3_ints_fini(tp); 10110 tg3_frob_aux_power(tp, false); 10111 pci_set_power_state(tp->pdev, PCI_D3hot); 10112 return err; 10113 } 10114 10115 static int tg3_close(struct net_device *dev) 10116 { 10117 int i; 10118 struct tg3 *tp = netdev_priv(dev); 10119 10120 tg3_napi_disable(tp); 10121 tg3_reset_task_cancel(tp); 10122 10123 netif_tx_stop_all_queues(dev); 10124 10125 tg3_timer_stop(tp); 10126 10127 tg3_phy_stop(tp); 10128 10129 tg3_full_lock(tp, 1); 10130 10131 tg3_disable_ints(tp); 10132 10133 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10134 tg3_free_rings(tp); 10135 tg3_flag_clear(tp, INIT_COMPLETE); 10136 10137 tg3_full_unlock(tp); 10138 10139 for (i = tp->irq_cnt - 1; i >= 0; i--) { 10140 struct tg3_napi *tnapi = &tp->napi[i]; 10141 free_irq(tnapi->irq_vec, tnapi); 10142 } 10143 10144 tg3_ints_fini(tp); 10145 10146 /* Clear stats across close / open calls */ 10147 memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev)); 10148 memset(&tp->estats_prev, 0, sizeof(tp->estats_prev)); 10149 10150 tg3_napi_fini(tp); 10151 10152 tg3_free_consistent(tp); 10153 10154 tg3_power_down(tp); 10155 10156 netif_carrier_off(tp->dev); 10157 10158 return 0; 10159 } 10160 10161 static inline u64 get_stat64(tg3_stat64_t *val) 10162 { 10163 return ((u64)val->high << 32) | ((u64)val->low); 10164 } 10165 10166 static u64 tg3_calc_crc_errors(struct tg3 *tp) 10167 { 10168 struct tg3_hw_stats *hw_stats = tp->hw_stats; 10169 10170 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10171 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 10172 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 10173 u32 val; 10174 10175 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 10176 tg3_writephy(tp, MII_TG3_TEST1, 10177 val | MII_TG3_TEST1_CRC_EN); 10178 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 10179 } else 10180 val = 0; 10181 10182 tp->phy_crc_errors += val; 10183 10184 return tp->phy_crc_errors; 10185 } 10186 10187 return get_stat64(&hw_stats->rx_fcs_errors); 10188 } 10189 10190 #define ESTAT_ADD(member) \ 10191 estats->member = old_estats->member + \ 10192 get_stat64(&hw_stats->member) 10193 10194 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) 10195 { 10196 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 10197 struct tg3_hw_stats *hw_stats = tp->hw_stats; 10198 10199 ESTAT_ADD(rx_octets); 10200 ESTAT_ADD(rx_fragments); 10201 ESTAT_ADD(rx_ucast_packets); 10202 ESTAT_ADD(rx_mcast_packets); 10203 ESTAT_ADD(rx_bcast_packets); 10204 ESTAT_ADD(rx_fcs_errors); 10205 ESTAT_ADD(rx_align_errors); 10206 ESTAT_ADD(rx_xon_pause_rcvd); 10207 ESTAT_ADD(rx_xoff_pause_rcvd); 10208 ESTAT_ADD(rx_mac_ctrl_rcvd); 10209 ESTAT_ADD(rx_xoff_entered); 10210 ESTAT_ADD(rx_frame_too_long_errors); 10211 ESTAT_ADD(rx_jabbers); 10212 ESTAT_ADD(rx_undersize_packets); 10213 ESTAT_ADD(rx_in_length_errors); 10214 ESTAT_ADD(rx_out_length_errors); 10215 ESTAT_ADD(rx_64_or_less_octet_packets); 10216 ESTAT_ADD(rx_65_to_127_octet_packets); 10217 ESTAT_ADD(rx_128_to_255_octet_packets); 10218 ESTAT_ADD(rx_256_to_511_octet_packets); 10219 ESTAT_ADD(rx_512_to_1023_octet_packets); 10220 ESTAT_ADD(rx_1024_to_1522_octet_packets); 10221 ESTAT_ADD(rx_1523_to_2047_octet_packets); 10222 ESTAT_ADD(rx_2048_to_4095_octet_packets); 10223 ESTAT_ADD(rx_4096_to_8191_octet_packets); 10224 ESTAT_ADD(rx_8192_to_9022_octet_packets); 10225 10226 ESTAT_ADD(tx_octets); 10227 ESTAT_ADD(tx_collisions); 10228 ESTAT_ADD(tx_xon_sent); 10229 ESTAT_ADD(tx_xoff_sent); 10230 ESTAT_ADD(tx_flow_control); 10231 ESTAT_ADD(tx_mac_errors); 10232 ESTAT_ADD(tx_single_collisions); 10233 ESTAT_ADD(tx_mult_collisions); 10234 ESTAT_ADD(tx_deferred); 10235 ESTAT_ADD(tx_excessive_collisions); 10236 ESTAT_ADD(tx_late_collisions); 10237 ESTAT_ADD(tx_collide_2times); 10238 ESTAT_ADD(tx_collide_3times); 10239 ESTAT_ADD(tx_collide_4times); 10240 ESTAT_ADD(tx_collide_5times); 10241 ESTAT_ADD(tx_collide_6times); 10242 ESTAT_ADD(tx_collide_7times); 10243 ESTAT_ADD(tx_collide_8times); 10244 ESTAT_ADD(tx_collide_9times); 10245 ESTAT_ADD(tx_collide_10times); 10246 ESTAT_ADD(tx_collide_11times); 10247 ESTAT_ADD(tx_collide_12times); 10248 ESTAT_ADD(tx_collide_13times); 10249 ESTAT_ADD(tx_collide_14times); 10250 ESTAT_ADD(tx_collide_15times); 10251 ESTAT_ADD(tx_ucast_packets); 10252 ESTAT_ADD(tx_mcast_packets); 10253 ESTAT_ADD(tx_bcast_packets); 10254 ESTAT_ADD(tx_carrier_sense_errors); 10255 ESTAT_ADD(tx_discards); 10256 ESTAT_ADD(tx_errors); 10257 10258 ESTAT_ADD(dma_writeq_full); 10259 ESTAT_ADD(dma_write_prioq_full); 10260 ESTAT_ADD(rxbds_empty); 10261 ESTAT_ADD(rx_discards); 10262 ESTAT_ADD(rx_errors); 10263 ESTAT_ADD(rx_threshold_hit); 10264 10265 ESTAT_ADD(dma_readq_full); 10266 ESTAT_ADD(dma_read_prioq_full); 10267 ESTAT_ADD(tx_comp_queue_full); 10268 10269 ESTAT_ADD(ring_set_send_prod_index); 10270 ESTAT_ADD(ring_status_update); 10271 ESTAT_ADD(nic_irqs); 10272 ESTAT_ADD(nic_avoided_irqs); 10273 ESTAT_ADD(nic_tx_threshold_hit); 10274 10275 ESTAT_ADD(mbuf_lwm_thresh_hit); 10276 } 10277 10278 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) 10279 { 10280 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 10281 struct tg3_hw_stats *hw_stats = tp->hw_stats; 10282 10283 stats->rx_packets = old_stats->rx_packets + 10284 get_stat64(&hw_stats->rx_ucast_packets) + 10285 get_stat64(&hw_stats->rx_mcast_packets) + 10286 get_stat64(&hw_stats->rx_bcast_packets); 10287 10288 stats->tx_packets = old_stats->tx_packets + 10289 get_stat64(&hw_stats->tx_ucast_packets) + 10290 get_stat64(&hw_stats->tx_mcast_packets) + 10291 get_stat64(&hw_stats->tx_bcast_packets); 10292 10293 stats->rx_bytes = old_stats->rx_bytes + 10294 get_stat64(&hw_stats->rx_octets); 10295 stats->tx_bytes = old_stats->tx_bytes + 10296 get_stat64(&hw_stats->tx_octets); 10297 10298 stats->rx_errors = old_stats->rx_errors + 10299 get_stat64(&hw_stats->rx_errors); 10300 stats->tx_errors = old_stats->tx_errors + 10301 get_stat64(&hw_stats->tx_errors) + 10302 get_stat64(&hw_stats->tx_mac_errors) + 10303 get_stat64(&hw_stats->tx_carrier_sense_errors) + 10304 get_stat64(&hw_stats->tx_discards); 10305 10306 stats->multicast = old_stats->multicast + 10307 get_stat64(&hw_stats->rx_mcast_packets); 10308 stats->collisions = old_stats->collisions + 10309 get_stat64(&hw_stats->tx_collisions); 10310 10311 stats->rx_length_errors = old_stats->rx_length_errors + 10312 get_stat64(&hw_stats->rx_frame_too_long_errors) + 10313 get_stat64(&hw_stats->rx_undersize_packets); 10314 10315 stats->rx_over_errors = old_stats->rx_over_errors + 10316 get_stat64(&hw_stats->rxbds_empty); 10317 stats->rx_frame_errors = old_stats->rx_frame_errors + 10318 get_stat64(&hw_stats->rx_align_errors); 10319 stats->tx_aborted_errors = old_stats->tx_aborted_errors + 10320 get_stat64(&hw_stats->tx_discards); 10321 stats->tx_carrier_errors = old_stats->tx_carrier_errors + 10322 get_stat64(&hw_stats->tx_carrier_sense_errors); 10323 10324 stats->rx_crc_errors = old_stats->rx_crc_errors + 10325 tg3_calc_crc_errors(tp); 10326 10327 stats->rx_missed_errors = old_stats->rx_missed_errors + 10328 get_stat64(&hw_stats->rx_discards); 10329 10330 stats->rx_dropped = tp->rx_dropped; 10331 stats->tx_dropped = tp->tx_dropped; 10332 } 10333 10334 static int tg3_get_regs_len(struct net_device *dev) 10335 { 10336 return TG3_REG_BLK_SIZE; 10337 } 10338 10339 static void tg3_get_regs(struct net_device *dev, 10340 struct ethtool_regs *regs, void *_p) 10341 { 10342 struct tg3 *tp = netdev_priv(dev); 10343 10344 regs->version = 0; 10345 10346 memset(_p, 0, TG3_REG_BLK_SIZE); 10347 10348 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10349 return; 10350 10351 tg3_full_lock(tp, 0); 10352 10353 tg3_dump_legacy_regs(tp, (u32 *)_p); 10354 10355 tg3_full_unlock(tp); 10356 } 10357 10358 static int tg3_get_eeprom_len(struct net_device *dev) 10359 { 10360 struct tg3 *tp = netdev_priv(dev); 10361 10362 return tp->nvram_size; 10363 } 10364 10365 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 10366 { 10367 struct tg3 *tp = netdev_priv(dev); 10368 int ret; 10369 u8 *pd; 10370 u32 i, offset, len, b_offset, b_count; 10371 __be32 val; 10372 10373 if (tg3_flag(tp, NO_NVRAM)) 10374 return -EINVAL; 10375 10376 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10377 return -EAGAIN; 10378 10379 offset = eeprom->offset; 10380 len = eeprom->len; 10381 eeprom->len = 0; 10382 10383 eeprom->magic = TG3_EEPROM_MAGIC; 10384 10385 if (offset & 3) { 10386 /* adjustments to start on required 4 byte boundary */ 10387 b_offset = offset & 3; 10388 b_count = 4 - b_offset; 10389 if (b_count > len) { 10390 /* i.e. offset=1 len=2 */ 10391 b_count = len; 10392 } 10393 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val); 10394 if (ret) 10395 return ret; 10396 memcpy(data, ((char *)&val) + b_offset, b_count); 10397 len -= b_count; 10398 offset += b_count; 10399 eeprom->len += b_count; 10400 } 10401 10402 /* read bytes up to the last 4 byte boundary */ 10403 pd = &data[eeprom->len]; 10404 for (i = 0; i < (len - (len & 3)); i += 4) { 10405 ret = tg3_nvram_read_be32(tp, offset + i, &val); 10406 if (ret) { 10407 eeprom->len += i; 10408 return ret; 10409 } 10410 memcpy(pd + i, &val, 4); 10411 } 10412 eeprom->len += i; 10413 10414 if (len & 3) { 10415 /* read last bytes not ending on 4 byte boundary */ 10416 pd = &data[eeprom->len]; 10417 b_count = len & 3; 10418 b_offset = offset + len - b_count; 10419 ret = tg3_nvram_read_be32(tp, b_offset, &val); 10420 if (ret) 10421 return ret; 10422 memcpy(pd, &val, b_count); 10423 eeprom->len += b_count; 10424 } 10425 return 0; 10426 } 10427 10428 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 10429 { 10430 struct tg3 *tp = netdev_priv(dev); 10431 int ret; 10432 u32 offset, len, b_offset, odd_len; 10433 u8 *buf; 10434 __be32 start, end; 10435 10436 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10437 return -EAGAIN; 10438 10439 if (tg3_flag(tp, NO_NVRAM) || 10440 eeprom->magic != TG3_EEPROM_MAGIC) 10441 return -EINVAL; 10442 10443 offset = eeprom->offset; 10444 len = eeprom->len; 10445 10446 if ((b_offset = (offset & 3))) { 10447 /* adjustments to start on required 4 byte boundary */ 10448 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start); 10449 if (ret) 10450 return ret; 10451 len += b_offset; 10452 offset &= ~3; 10453 if (len < 4) 10454 len = 4; 10455 } 10456 10457 odd_len = 0; 10458 if (len & 3) { 10459 /* adjustments to end on required 4 byte boundary */ 10460 odd_len = 1; 10461 len = (len + 3) & ~3; 10462 ret = tg3_nvram_read_be32(tp, offset+len-4, &end); 10463 if (ret) 10464 return ret; 10465 } 10466 10467 buf = data; 10468 if (b_offset || odd_len) { 10469 buf = kmalloc(len, GFP_KERNEL); 10470 if (!buf) 10471 return -ENOMEM; 10472 if (b_offset) 10473 memcpy(buf, &start, 4); 10474 if (odd_len) 10475 memcpy(buf+len-4, &end, 4); 10476 memcpy(buf + b_offset, data, eeprom->len); 10477 } 10478 10479 ret = tg3_nvram_write_block(tp, offset, len, buf); 10480 10481 if (buf != data) 10482 kfree(buf); 10483 10484 return ret; 10485 } 10486 10487 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) 10488 { 10489 struct tg3 *tp = netdev_priv(dev); 10490 10491 if (tg3_flag(tp, USE_PHYLIB)) { 10492 struct phy_device *phydev; 10493 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 10494 return -EAGAIN; 10495 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 10496 return phy_ethtool_gset(phydev, cmd); 10497 } 10498 10499 cmd->supported = (SUPPORTED_Autoneg); 10500 10501 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 10502 cmd->supported |= (SUPPORTED_1000baseT_Half | 10503 SUPPORTED_1000baseT_Full); 10504 10505 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 10506 cmd->supported |= (SUPPORTED_100baseT_Half | 10507 SUPPORTED_100baseT_Full | 10508 SUPPORTED_10baseT_Half | 10509 SUPPORTED_10baseT_Full | 10510 SUPPORTED_TP); 10511 cmd->port = PORT_TP; 10512 } else { 10513 cmd->supported |= SUPPORTED_FIBRE; 10514 cmd->port = PORT_FIBRE; 10515 } 10516 10517 cmd->advertising = tp->link_config.advertising; 10518 if (tg3_flag(tp, PAUSE_AUTONEG)) { 10519 if (tp->link_config.flowctrl & FLOW_CTRL_RX) { 10520 if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 10521 cmd->advertising |= ADVERTISED_Pause; 10522 } else { 10523 cmd->advertising |= ADVERTISED_Pause | 10524 ADVERTISED_Asym_Pause; 10525 } 10526 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 10527 cmd->advertising |= ADVERTISED_Asym_Pause; 10528 } 10529 } 10530 if (netif_running(dev) && netif_carrier_ok(dev)) { 10531 ethtool_cmd_speed_set(cmd, tp->link_config.active_speed); 10532 cmd->duplex = tp->link_config.active_duplex; 10533 cmd->lp_advertising = tp->link_config.rmt_adv; 10534 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 10535 if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) 10536 cmd->eth_tp_mdix = ETH_TP_MDI_X; 10537 else 10538 cmd->eth_tp_mdix = ETH_TP_MDI; 10539 } 10540 } else { 10541 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); 10542 cmd->duplex = DUPLEX_UNKNOWN; 10543 cmd->eth_tp_mdix = ETH_TP_MDI_INVALID; 10544 } 10545 cmd->phy_address = tp->phy_addr; 10546 cmd->transceiver = XCVR_INTERNAL; 10547 cmd->autoneg = tp->link_config.autoneg; 10548 cmd->maxtxpkt = 0; 10549 cmd->maxrxpkt = 0; 10550 return 0; 10551 } 10552 10553 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 10554 { 10555 struct tg3 *tp = netdev_priv(dev); 10556 u32 speed = ethtool_cmd_speed(cmd); 10557 10558 if (tg3_flag(tp, USE_PHYLIB)) { 10559 struct phy_device *phydev; 10560 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 10561 return -EAGAIN; 10562 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 10563 return phy_ethtool_sset(phydev, cmd); 10564 } 10565 10566 if (cmd->autoneg != AUTONEG_ENABLE && 10567 cmd->autoneg != AUTONEG_DISABLE) 10568 return -EINVAL; 10569 10570 if (cmd->autoneg == AUTONEG_DISABLE && 10571 cmd->duplex != DUPLEX_FULL && 10572 cmd->duplex != DUPLEX_HALF) 10573 return -EINVAL; 10574 10575 if (cmd->autoneg == AUTONEG_ENABLE) { 10576 u32 mask = ADVERTISED_Autoneg | 10577 ADVERTISED_Pause | 10578 ADVERTISED_Asym_Pause; 10579 10580 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 10581 mask |= ADVERTISED_1000baseT_Half | 10582 ADVERTISED_1000baseT_Full; 10583 10584 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 10585 mask |= ADVERTISED_100baseT_Half | 10586 ADVERTISED_100baseT_Full | 10587 ADVERTISED_10baseT_Half | 10588 ADVERTISED_10baseT_Full | 10589 ADVERTISED_TP; 10590 else 10591 mask |= ADVERTISED_FIBRE; 10592 10593 if (cmd->advertising & ~mask) 10594 return -EINVAL; 10595 10596 mask &= (ADVERTISED_1000baseT_Half | 10597 ADVERTISED_1000baseT_Full | 10598 ADVERTISED_100baseT_Half | 10599 ADVERTISED_100baseT_Full | 10600 ADVERTISED_10baseT_Half | 10601 ADVERTISED_10baseT_Full); 10602 10603 cmd->advertising &= mask; 10604 } else { 10605 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 10606 if (speed != SPEED_1000) 10607 return -EINVAL; 10608 10609 if (cmd->duplex != DUPLEX_FULL) 10610 return -EINVAL; 10611 } else { 10612 if (speed != SPEED_100 && 10613 speed != SPEED_10) 10614 return -EINVAL; 10615 } 10616 } 10617 10618 tg3_full_lock(tp, 0); 10619 10620 tp->link_config.autoneg = cmd->autoneg; 10621 if (cmd->autoneg == AUTONEG_ENABLE) { 10622 tp->link_config.advertising = (cmd->advertising | 10623 ADVERTISED_Autoneg); 10624 tp->link_config.speed = SPEED_UNKNOWN; 10625 tp->link_config.duplex = DUPLEX_UNKNOWN; 10626 } else { 10627 tp->link_config.advertising = 0; 10628 tp->link_config.speed = speed; 10629 tp->link_config.duplex = cmd->duplex; 10630 } 10631 10632 if (netif_running(dev)) 10633 tg3_setup_phy(tp, 1); 10634 10635 tg3_full_unlock(tp); 10636 10637 return 0; 10638 } 10639 10640 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 10641 { 10642 struct tg3 *tp = netdev_priv(dev); 10643 10644 strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); 10645 strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version)); 10646 strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version)); 10647 strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info)); 10648 } 10649 10650 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 10651 { 10652 struct tg3 *tp = netdev_priv(dev); 10653 10654 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev)) 10655 wol->supported = WAKE_MAGIC; 10656 else 10657 wol->supported = 0; 10658 wol->wolopts = 0; 10659 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev)) 10660 wol->wolopts = WAKE_MAGIC; 10661 memset(&wol->sopass, 0, sizeof(wol->sopass)); 10662 } 10663 10664 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 10665 { 10666 struct tg3 *tp = netdev_priv(dev); 10667 struct device *dp = &tp->pdev->dev; 10668 10669 if (wol->wolopts & ~WAKE_MAGIC) 10670 return -EINVAL; 10671 if ((wol->wolopts & WAKE_MAGIC) && 10672 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp))) 10673 return -EINVAL; 10674 10675 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); 10676 10677 spin_lock_bh(&tp->lock); 10678 if (device_may_wakeup(dp)) 10679 tg3_flag_set(tp, WOL_ENABLE); 10680 else 10681 tg3_flag_clear(tp, WOL_ENABLE); 10682 spin_unlock_bh(&tp->lock); 10683 10684 return 0; 10685 } 10686 10687 static u32 tg3_get_msglevel(struct net_device *dev) 10688 { 10689 struct tg3 *tp = netdev_priv(dev); 10690 return tp->msg_enable; 10691 } 10692 10693 static void tg3_set_msglevel(struct net_device *dev, u32 value) 10694 { 10695 struct tg3 *tp = netdev_priv(dev); 10696 tp->msg_enable = value; 10697 } 10698 10699 static int tg3_nway_reset(struct net_device *dev) 10700 { 10701 struct tg3 *tp = netdev_priv(dev); 10702 int r; 10703 10704 if (!netif_running(dev)) 10705 return -EAGAIN; 10706 10707 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 10708 return -EINVAL; 10709 10710 if (tg3_flag(tp, USE_PHYLIB)) { 10711 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 10712 return -EAGAIN; 10713 r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 10714 } else { 10715 u32 bmcr; 10716 10717 spin_lock_bh(&tp->lock); 10718 r = -EINVAL; 10719 tg3_readphy(tp, MII_BMCR, &bmcr); 10720 if (!tg3_readphy(tp, MII_BMCR, &bmcr) && 10721 ((bmcr & BMCR_ANENABLE) || 10722 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) { 10723 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART | 10724 BMCR_ANENABLE); 10725 r = 0; 10726 } 10727 spin_unlock_bh(&tp->lock); 10728 } 10729 10730 return r; 10731 } 10732 10733 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 10734 { 10735 struct tg3 *tp = netdev_priv(dev); 10736 10737 ering->rx_max_pending = tp->rx_std_ring_mask; 10738 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 10739 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask; 10740 else 10741 ering->rx_jumbo_max_pending = 0; 10742 10743 ering->tx_max_pending = TG3_TX_RING_SIZE - 1; 10744 10745 ering->rx_pending = tp->rx_pending; 10746 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 10747 ering->rx_jumbo_pending = tp->rx_jumbo_pending; 10748 else 10749 ering->rx_jumbo_pending = 0; 10750 10751 ering->tx_pending = tp->napi[0].tx_pending; 10752 } 10753 10754 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 10755 { 10756 struct tg3 *tp = netdev_priv(dev); 10757 int i, irq_sync = 0, err = 0; 10758 10759 if ((ering->rx_pending > tp->rx_std_ring_mask) || 10760 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || 10761 (ering->tx_pending > TG3_TX_RING_SIZE - 1) || 10762 (ering->tx_pending <= MAX_SKB_FRAGS) || 10763 (tg3_flag(tp, TSO_BUG) && 10764 (ering->tx_pending <= (MAX_SKB_FRAGS * 3)))) 10765 return -EINVAL; 10766 10767 if (netif_running(dev)) { 10768 tg3_phy_stop(tp); 10769 tg3_netif_stop(tp); 10770 irq_sync = 1; 10771 } 10772 10773 tg3_full_lock(tp, irq_sync); 10774 10775 tp->rx_pending = ering->rx_pending; 10776 10777 if (tg3_flag(tp, MAX_RXPEND_64) && 10778 tp->rx_pending > 63) 10779 tp->rx_pending = 63; 10780 tp->rx_jumbo_pending = ering->rx_jumbo_pending; 10781 10782 for (i = 0; i < tp->irq_max; i++) 10783 tp->napi[i].tx_pending = ering->tx_pending; 10784 10785 if (netif_running(dev)) { 10786 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10787 err = tg3_restart_hw(tp, 1); 10788 if (!err) 10789 tg3_netif_start(tp); 10790 } 10791 10792 tg3_full_unlock(tp); 10793 10794 if (irq_sync && !err) 10795 tg3_phy_start(tp); 10796 10797 return err; 10798 } 10799 10800 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 10801 { 10802 struct tg3 *tp = netdev_priv(dev); 10803 10804 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG); 10805 10806 if (tp->link_config.flowctrl & FLOW_CTRL_RX) 10807 epause->rx_pause = 1; 10808 else 10809 epause->rx_pause = 0; 10810 10811 if (tp->link_config.flowctrl & FLOW_CTRL_TX) 10812 epause->tx_pause = 1; 10813 else 10814 epause->tx_pause = 0; 10815 } 10816 10817 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 10818 { 10819 struct tg3 *tp = netdev_priv(dev); 10820 int err = 0; 10821 10822 if (tg3_flag(tp, USE_PHYLIB)) { 10823 u32 newadv; 10824 struct phy_device *phydev; 10825 10826 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 10827 10828 if (!(phydev->supported & SUPPORTED_Pause) || 10829 (!(phydev->supported & SUPPORTED_Asym_Pause) && 10830 (epause->rx_pause != epause->tx_pause))) 10831 return -EINVAL; 10832 10833 tp->link_config.flowctrl = 0; 10834 if (epause->rx_pause) { 10835 tp->link_config.flowctrl |= FLOW_CTRL_RX; 10836 10837 if (epause->tx_pause) { 10838 tp->link_config.flowctrl |= FLOW_CTRL_TX; 10839 newadv = ADVERTISED_Pause; 10840 } else 10841 newadv = ADVERTISED_Pause | 10842 ADVERTISED_Asym_Pause; 10843 } else if (epause->tx_pause) { 10844 tp->link_config.flowctrl |= FLOW_CTRL_TX; 10845 newadv = ADVERTISED_Asym_Pause; 10846 } else 10847 newadv = 0; 10848 10849 if (epause->autoneg) 10850 tg3_flag_set(tp, PAUSE_AUTONEG); 10851 else 10852 tg3_flag_clear(tp, PAUSE_AUTONEG); 10853 10854 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 10855 u32 oldadv = phydev->advertising & 10856 (ADVERTISED_Pause | ADVERTISED_Asym_Pause); 10857 if (oldadv != newadv) { 10858 phydev->advertising &= 10859 ~(ADVERTISED_Pause | 10860 ADVERTISED_Asym_Pause); 10861 phydev->advertising |= newadv; 10862 if (phydev->autoneg) { 10863 /* 10864 * Always renegotiate the link to 10865 * inform our link partner of our 10866 * flow control settings, even if the 10867 * flow control is forced. Let 10868 * tg3_adjust_link() do the final 10869 * flow control setup. 10870 */ 10871 return phy_start_aneg(phydev); 10872 } 10873 } 10874 10875 if (!epause->autoneg) 10876 tg3_setup_flow_control(tp, 0, 0); 10877 } else { 10878 tp->link_config.advertising &= 10879 ~(ADVERTISED_Pause | 10880 ADVERTISED_Asym_Pause); 10881 tp->link_config.advertising |= newadv; 10882 } 10883 } else { 10884 int irq_sync = 0; 10885 10886 if (netif_running(dev)) { 10887 tg3_netif_stop(tp); 10888 irq_sync = 1; 10889 } 10890 10891 tg3_full_lock(tp, irq_sync); 10892 10893 if (epause->autoneg) 10894 tg3_flag_set(tp, PAUSE_AUTONEG); 10895 else 10896 tg3_flag_clear(tp, PAUSE_AUTONEG); 10897 if (epause->rx_pause) 10898 tp->link_config.flowctrl |= FLOW_CTRL_RX; 10899 else 10900 tp->link_config.flowctrl &= ~FLOW_CTRL_RX; 10901 if (epause->tx_pause) 10902 tp->link_config.flowctrl |= FLOW_CTRL_TX; 10903 else 10904 tp->link_config.flowctrl &= ~FLOW_CTRL_TX; 10905 10906 if (netif_running(dev)) { 10907 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10908 err = tg3_restart_hw(tp, 1); 10909 if (!err) 10910 tg3_netif_start(tp); 10911 } 10912 10913 tg3_full_unlock(tp); 10914 } 10915 10916 return err; 10917 } 10918 10919 static int tg3_get_sset_count(struct net_device *dev, int sset) 10920 { 10921 switch (sset) { 10922 case ETH_SS_TEST: 10923 return TG3_NUM_TEST; 10924 case ETH_SS_STATS: 10925 return TG3_NUM_STATS; 10926 default: 10927 return -EOPNOTSUPP; 10928 } 10929 } 10930 10931 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, 10932 u32 *rules __always_unused) 10933 { 10934 struct tg3 *tp = netdev_priv(dev); 10935 10936 if (!tg3_flag(tp, SUPPORT_MSIX)) 10937 return -EOPNOTSUPP; 10938 10939 switch (info->cmd) { 10940 case ETHTOOL_GRXRINGS: 10941 if (netif_running(tp->dev)) 10942 info->data = tp->irq_cnt; 10943 else { 10944 info->data = num_online_cpus(); 10945 if (info->data > TG3_IRQ_MAX_VECS_RSS) 10946 info->data = TG3_IRQ_MAX_VECS_RSS; 10947 } 10948 10949 /* The first interrupt vector only 10950 * handles link interrupts. 10951 */ 10952 info->data -= 1; 10953 return 0; 10954 10955 default: 10956 return -EOPNOTSUPP; 10957 } 10958 } 10959 10960 static u32 tg3_get_rxfh_indir_size(struct net_device *dev) 10961 { 10962 u32 size = 0; 10963 struct tg3 *tp = netdev_priv(dev); 10964 10965 if (tg3_flag(tp, SUPPORT_MSIX)) 10966 size = TG3_RSS_INDIR_TBL_SIZE; 10967 10968 return size; 10969 } 10970 10971 static int tg3_get_rxfh_indir(struct net_device *dev, u32 *indir) 10972 { 10973 struct tg3 *tp = netdev_priv(dev); 10974 int i; 10975 10976 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 10977 indir[i] = tp->rss_ind_tbl[i]; 10978 10979 return 0; 10980 } 10981 10982 static int tg3_set_rxfh_indir(struct net_device *dev, const u32 *indir) 10983 { 10984 struct tg3 *tp = netdev_priv(dev); 10985 size_t i; 10986 10987 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 10988 tp->rss_ind_tbl[i] = indir[i]; 10989 10990 if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS)) 10991 return 0; 10992 10993 /* It is legal to write the indirection 10994 * table while the device is running. 10995 */ 10996 tg3_full_lock(tp, 0); 10997 tg3_rss_write_indir_tbl(tp); 10998 tg3_full_unlock(tp); 10999 11000 return 0; 11001 } 11002 11003 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 11004 { 11005 switch (stringset) { 11006 case ETH_SS_STATS: 11007 memcpy(buf, ðtool_stats_keys, sizeof(ethtool_stats_keys)); 11008 break; 11009 case ETH_SS_TEST: 11010 memcpy(buf, ðtool_test_keys, sizeof(ethtool_test_keys)); 11011 break; 11012 default: 11013 WARN_ON(1); /* we need a WARN() */ 11014 break; 11015 } 11016 } 11017 11018 static int tg3_set_phys_id(struct net_device *dev, 11019 enum ethtool_phys_id_state state) 11020 { 11021 struct tg3 *tp = netdev_priv(dev); 11022 11023 if (!netif_running(tp->dev)) 11024 return -EAGAIN; 11025 11026 switch (state) { 11027 case ETHTOOL_ID_ACTIVE: 11028 return 1; /* cycle on/off once per second */ 11029 11030 case ETHTOOL_ID_ON: 11031 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 11032 LED_CTRL_1000MBPS_ON | 11033 LED_CTRL_100MBPS_ON | 11034 LED_CTRL_10MBPS_ON | 11035 LED_CTRL_TRAFFIC_OVERRIDE | 11036 LED_CTRL_TRAFFIC_BLINK | 11037 LED_CTRL_TRAFFIC_LED); 11038 break; 11039 11040 case ETHTOOL_ID_OFF: 11041 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 11042 LED_CTRL_TRAFFIC_OVERRIDE); 11043 break; 11044 11045 case ETHTOOL_ID_INACTIVE: 11046 tw32(MAC_LED_CTRL, tp->led_ctrl); 11047 break; 11048 } 11049 11050 return 0; 11051 } 11052 11053 static void tg3_get_ethtool_stats(struct net_device *dev, 11054 struct ethtool_stats *estats, u64 *tmp_stats) 11055 { 11056 struct tg3 *tp = netdev_priv(dev); 11057 11058 if (tp->hw_stats) 11059 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats); 11060 else 11061 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats)); 11062 } 11063 11064 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen) 11065 { 11066 int i; 11067 __be32 *buf; 11068 u32 offset = 0, len = 0; 11069 u32 magic, val; 11070 11071 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic)) 11072 return NULL; 11073 11074 if (magic == TG3_EEPROM_MAGIC) { 11075 for (offset = TG3_NVM_DIR_START; 11076 offset < TG3_NVM_DIR_END; 11077 offset += TG3_NVM_DIRENT_SIZE) { 11078 if (tg3_nvram_read(tp, offset, &val)) 11079 return NULL; 11080 11081 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == 11082 TG3_NVM_DIRTYPE_EXTVPD) 11083 break; 11084 } 11085 11086 if (offset != TG3_NVM_DIR_END) { 11087 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4; 11088 if (tg3_nvram_read(tp, offset + 4, &offset)) 11089 return NULL; 11090 11091 offset = tg3_nvram_logical_addr(tp, offset); 11092 } 11093 } 11094 11095 if (!offset || !len) { 11096 offset = TG3_NVM_VPD_OFF; 11097 len = TG3_NVM_VPD_LEN; 11098 } 11099 11100 buf = kmalloc(len, GFP_KERNEL); 11101 if (buf == NULL) 11102 return NULL; 11103 11104 if (magic == TG3_EEPROM_MAGIC) { 11105 for (i = 0; i < len; i += 4) { 11106 /* The data is in little-endian format in NVRAM. 11107 * Use the big-endian read routines to preserve 11108 * the byte order as it exists in NVRAM. 11109 */ 11110 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4])) 11111 goto error; 11112 } 11113 } else { 11114 u8 *ptr; 11115 ssize_t cnt; 11116 unsigned int pos = 0; 11117 11118 ptr = (u8 *)&buf[0]; 11119 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) { 11120 cnt = pci_read_vpd(tp->pdev, pos, 11121 len - pos, ptr); 11122 if (cnt == -ETIMEDOUT || cnt == -EINTR) 11123 cnt = 0; 11124 else if (cnt < 0) 11125 goto error; 11126 } 11127 if (pos != len) 11128 goto error; 11129 } 11130 11131 *vpdlen = len; 11132 11133 return buf; 11134 11135 error: 11136 kfree(buf); 11137 return NULL; 11138 } 11139 11140 #define NVRAM_TEST_SIZE 0x100 11141 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14 11142 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18 11143 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c 11144 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20 11145 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24 11146 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50 11147 #define NVRAM_SELFBOOT_HW_SIZE 0x20 11148 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c 11149 11150 static int tg3_test_nvram(struct tg3 *tp) 11151 { 11152 u32 csum, magic, len; 11153 __be32 *buf; 11154 int i, j, k, err = 0, size; 11155 11156 if (tg3_flag(tp, NO_NVRAM)) 11157 return 0; 11158 11159 if (tg3_nvram_read(tp, 0, &magic) != 0) 11160 return -EIO; 11161 11162 if (magic == TG3_EEPROM_MAGIC) 11163 size = NVRAM_TEST_SIZE; 11164 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) { 11165 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) == 11166 TG3_EEPROM_SB_FORMAT_1) { 11167 switch (magic & TG3_EEPROM_SB_REVISION_MASK) { 11168 case TG3_EEPROM_SB_REVISION_0: 11169 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE; 11170 break; 11171 case TG3_EEPROM_SB_REVISION_2: 11172 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE; 11173 break; 11174 case TG3_EEPROM_SB_REVISION_3: 11175 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE; 11176 break; 11177 case TG3_EEPROM_SB_REVISION_4: 11178 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE; 11179 break; 11180 case TG3_EEPROM_SB_REVISION_5: 11181 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE; 11182 break; 11183 case TG3_EEPROM_SB_REVISION_6: 11184 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE; 11185 break; 11186 default: 11187 return -EIO; 11188 } 11189 } else 11190 return 0; 11191 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 11192 size = NVRAM_SELFBOOT_HW_SIZE; 11193 else 11194 return -EIO; 11195 11196 buf = kmalloc(size, GFP_KERNEL); 11197 if (buf == NULL) 11198 return -ENOMEM; 11199 11200 err = -EIO; 11201 for (i = 0, j = 0; i < size; i += 4, j++) { 11202 err = tg3_nvram_read_be32(tp, i, &buf[j]); 11203 if (err) 11204 break; 11205 } 11206 if (i < size) 11207 goto out; 11208 11209 /* Selfboot format */ 11210 magic = be32_to_cpu(buf[0]); 11211 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 11212 TG3_EEPROM_MAGIC_FW) { 11213 u8 *buf8 = (u8 *) buf, csum8 = 0; 11214 11215 if ((magic & TG3_EEPROM_SB_REVISION_MASK) == 11216 TG3_EEPROM_SB_REVISION_2) { 11217 /* For rev 2, the csum doesn't include the MBA. */ 11218 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++) 11219 csum8 += buf8[i]; 11220 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++) 11221 csum8 += buf8[i]; 11222 } else { 11223 for (i = 0; i < size; i++) 11224 csum8 += buf8[i]; 11225 } 11226 11227 if (csum8 == 0) { 11228 err = 0; 11229 goto out; 11230 } 11231 11232 err = -EIO; 11233 goto out; 11234 } 11235 11236 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 11237 TG3_EEPROM_MAGIC_HW) { 11238 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 11239 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 11240 u8 *buf8 = (u8 *) buf; 11241 11242 /* Separate the parity bits and the data bytes. */ 11243 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) { 11244 if ((i == 0) || (i == 8)) { 11245 int l; 11246 u8 msk; 11247 11248 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1) 11249 parity[k++] = buf8[i] & msk; 11250 i++; 11251 } else if (i == 16) { 11252 int l; 11253 u8 msk; 11254 11255 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1) 11256 parity[k++] = buf8[i] & msk; 11257 i++; 11258 11259 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1) 11260 parity[k++] = buf8[i] & msk; 11261 i++; 11262 } 11263 data[j++] = buf8[i]; 11264 } 11265 11266 err = -EIO; 11267 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) { 11268 u8 hw8 = hweight8(data[i]); 11269 11270 if ((hw8 & 0x1) && parity[i]) 11271 goto out; 11272 else if (!(hw8 & 0x1) && !parity[i]) 11273 goto out; 11274 } 11275 err = 0; 11276 goto out; 11277 } 11278 11279 err = -EIO; 11280 11281 /* Bootstrap checksum at offset 0x10 */ 11282 csum = calc_crc((unsigned char *) buf, 0x10); 11283 if (csum != le32_to_cpu(buf[0x10/4])) 11284 goto out; 11285 11286 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 11287 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 11288 if (csum != le32_to_cpu(buf[0xfc/4])) 11289 goto out; 11290 11291 kfree(buf); 11292 11293 buf = tg3_vpd_readblock(tp, &len); 11294 if (!buf) 11295 return -ENOMEM; 11296 11297 i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA); 11298 if (i > 0) { 11299 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]); 11300 if (j < 0) 11301 goto out; 11302 11303 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len) 11304 goto out; 11305 11306 i += PCI_VPD_LRDT_TAG_SIZE; 11307 j = pci_vpd_find_info_keyword((u8 *)buf, i, j, 11308 PCI_VPD_RO_KEYWORD_CHKSUM); 11309 if (j > 0) { 11310 u8 csum8 = 0; 11311 11312 j += PCI_VPD_INFO_FLD_HDR_SIZE; 11313 11314 for (i = 0; i <= j; i++) 11315 csum8 += ((u8 *)buf)[i]; 11316 11317 if (csum8) 11318 goto out; 11319 } 11320 } 11321 11322 err = 0; 11323 11324 out: 11325 kfree(buf); 11326 return err; 11327 } 11328 11329 #define TG3_SERDES_TIMEOUT_SEC 2 11330 #define TG3_COPPER_TIMEOUT_SEC 6 11331 11332 static int tg3_test_link(struct tg3 *tp) 11333 { 11334 int i, max; 11335 11336 if (!netif_running(tp->dev)) 11337 return -ENODEV; 11338 11339 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 11340 max = TG3_SERDES_TIMEOUT_SEC; 11341 else 11342 max = TG3_COPPER_TIMEOUT_SEC; 11343 11344 for (i = 0; i < max; i++) { 11345 if (netif_carrier_ok(tp->dev)) 11346 return 0; 11347 11348 if (msleep_interruptible(1000)) 11349 break; 11350 } 11351 11352 return -EIO; 11353 } 11354 11355 /* Only test the commonly used registers */ 11356 static int tg3_test_registers(struct tg3 *tp) 11357 { 11358 int i, is_5705, is_5750; 11359 u32 offset, read_mask, write_mask, val, save_val, read_val; 11360 static struct { 11361 u16 offset; 11362 u16 flags; 11363 #define TG3_FL_5705 0x1 11364 #define TG3_FL_NOT_5705 0x2 11365 #define TG3_FL_NOT_5788 0x4 11366 #define TG3_FL_NOT_5750 0x8 11367 u32 read_mask; 11368 u32 write_mask; 11369 } reg_tbl[] = { 11370 /* MAC Control Registers */ 11371 { MAC_MODE, TG3_FL_NOT_5705, 11372 0x00000000, 0x00ef6f8c }, 11373 { MAC_MODE, TG3_FL_5705, 11374 0x00000000, 0x01ef6b8c }, 11375 { MAC_STATUS, TG3_FL_NOT_5705, 11376 0x03800107, 0x00000000 }, 11377 { MAC_STATUS, TG3_FL_5705, 11378 0x03800100, 0x00000000 }, 11379 { MAC_ADDR_0_HIGH, 0x0000, 11380 0x00000000, 0x0000ffff }, 11381 { MAC_ADDR_0_LOW, 0x0000, 11382 0x00000000, 0xffffffff }, 11383 { MAC_RX_MTU_SIZE, 0x0000, 11384 0x00000000, 0x0000ffff }, 11385 { MAC_TX_MODE, 0x0000, 11386 0x00000000, 0x00000070 }, 11387 { MAC_TX_LENGTHS, 0x0000, 11388 0x00000000, 0x00003fff }, 11389 { MAC_RX_MODE, TG3_FL_NOT_5705, 11390 0x00000000, 0x000007fc }, 11391 { MAC_RX_MODE, TG3_FL_5705, 11392 0x00000000, 0x000007dc }, 11393 { MAC_HASH_REG_0, 0x0000, 11394 0x00000000, 0xffffffff }, 11395 { MAC_HASH_REG_1, 0x0000, 11396 0x00000000, 0xffffffff }, 11397 { MAC_HASH_REG_2, 0x0000, 11398 0x00000000, 0xffffffff }, 11399 { MAC_HASH_REG_3, 0x0000, 11400 0x00000000, 0xffffffff }, 11401 11402 /* Receive Data and Receive BD Initiator Control Registers. */ 11403 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705, 11404 0x00000000, 0xffffffff }, 11405 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705, 11406 0x00000000, 0xffffffff }, 11407 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705, 11408 0x00000000, 0x00000003 }, 11409 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705, 11410 0x00000000, 0xffffffff }, 11411 { RCVDBDI_STD_BD+0, 0x0000, 11412 0x00000000, 0xffffffff }, 11413 { RCVDBDI_STD_BD+4, 0x0000, 11414 0x00000000, 0xffffffff }, 11415 { RCVDBDI_STD_BD+8, 0x0000, 11416 0x00000000, 0xffff0002 }, 11417 { RCVDBDI_STD_BD+0xc, 0x0000, 11418 0x00000000, 0xffffffff }, 11419 11420 /* Receive BD Initiator Control Registers. */ 11421 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705, 11422 0x00000000, 0xffffffff }, 11423 { RCVBDI_STD_THRESH, TG3_FL_5705, 11424 0x00000000, 0x000003ff }, 11425 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705, 11426 0x00000000, 0xffffffff }, 11427 11428 /* Host Coalescing Control Registers. */ 11429 { HOSTCC_MODE, TG3_FL_NOT_5705, 11430 0x00000000, 0x00000004 }, 11431 { HOSTCC_MODE, TG3_FL_5705, 11432 0x00000000, 0x000000f6 }, 11433 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705, 11434 0x00000000, 0xffffffff }, 11435 { HOSTCC_RXCOL_TICKS, TG3_FL_5705, 11436 0x00000000, 0x000003ff }, 11437 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705, 11438 0x00000000, 0xffffffff }, 11439 { HOSTCC_TXCOL_TICKS, TG3_FL_5705, 11440 0x00000000, 0x000003ff }, 11441 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705, 11442 0x00000000, 0xffffffff }, 11443 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 11444 0x00000000, 0x000000ff }, 11445 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705, 11446 0x00000000, 0xffffffff }, 11447 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 11448 0x00000000, 0x000000ff }, 11449 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705, 11450 0x00000000, 0xffffffff }, 11451 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705, 11452 0x00000000, 0xffffffff }, 11453 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705, 11454 0x00000000, 0xffffffff }, 11455 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 11456 0x00000000, 0x000000ff }, 11457 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705, 11458 0x00000000, 0xffffffff }, 11459 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 11460 0x00000000, 0x000000ff }, 11461 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705, 11462 0x00000000, 0xffffffff }, 11463 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705, 11464 0x00000000, 0xffffffff }, 11465 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705, 11466 0x00000000, 0xffffffff }, 11467 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000, 11468 0x00000000, 0xffffffff }, 11469 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000, 11470 0x00000000, 0xffffffff }, 11471 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000, 11472 0xffffffff, 0x00000000 }, 11473 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000, 11474 0xffffffff, 0x00000000 }, 11475 11476 /* Buffer Manager Control Registers. */ 11477 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750, 11478 0x00000000, 0x007fff80 }, 11479 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750, 11480 0x00000000, 0x007fffff }, 11481 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000, 11482 0x00000000, 0x0000003f }, 11483 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000, 11484 0x00000000, 0x000001ff }, 11485 { BUFMGR_MB_HIGH_WATER, 0x0000, 11486 0x00000000, 0x000001ff }, 11487 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705, 11488 0xffffffff, 0x00000000 }, 11489 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705, 11490 0xffffffff, 0x00000000 }, 11491 11492 /* Mailbox Registers */ 11493 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000, 11494 0x00000000, 0x000001ff }, 11495 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705, 11496 0x00000000, 0x000001ff }, 11497 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000, 11498 0x00000000, 0x000007ff }, 11499 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000, 11500 0x00000000, 0x000001ff }, 11501 11502 { 0xffff, 0x0000, 0x00000000, 0x00000000 }, 11503 }; 11504 11505 is_5705 = is_5750 = 0; 11506 if (tg3_flag(tp, 5705_PLUS)) { 11507 is_5705 = 1; 11508 if (tg3_flag(tp, 5750_PLUS)) 11509 is_5750 = 1; 11510 } 11511 11512 for (i = 0; reg_tbl[i].offset != 0xffff; i++) { 11513 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705)) 11514 continue; 11515 11516 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705)) 11517 continue; 11518 11519 if (tg3_flag(tp, IS_5788) && 11520 (reg_tbl[i].flags & TG3_FL_NOT_5788)) 11521 continue; 11522 11523 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750)) 11524 continue; 11525 11526 offset = (u32) reg_tbl[i].offset; 11527 read_mask = reg_tbl[i].read_mask; 11528 write_mask = reg_tbl[i].write_mask; 11529 11530 /* Save the original register content */ 11531 save_val = tr32(offset); 11532 11533 /* Determine the read-only value. */ 11534 read_val = save_val & read_mask; 11535 11536 /* Write zero to the register, then make sure the read-only bits 11537 * are not changed and the read/write bits are all zeros. 11538 */ 11539 tw32(offset, 0); 11540 11541 val = tr32(offset); 11542 11543 /* Test the read-only and read/write bits. */ 11544 if (((val & read_mask) != read_val) || (val & write_mask)) 11545 goto out; 11546 11547 /* Write ones to all the bits defined by RdMask and WrMask, then 11548 * make sure the read-only bits are not changed and the 11549 * read/write bits are all ones. 11550 */ 11551 tw32(offset, read_mask | write_mask); 11552 11553 val = tr32(offset); 11554 11555 /* Test the read-only bits. */ 11556 if ((val & read_mask) != read_val) 11557 goto out; 11558 11559 /* Test the read/write bits. */ 11560 if ((val & write_mask) != write_mask) 11561 goto out; 11562 11563 tw32(offset, save_val); 11564 } 11565 11566 return 0; 11567 11568 out: 11569 if (netif_msg_hw(tp)) 11570 netdev_err(tp->dev, 11571 "Register test failed at offset %x\n", offset); 11572 tw32(offset, save_val); 11573 return -EIO; 11574 } 11575 11576 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len) 11577 { 11578 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a }; 11579 int i; 11580 u32 j; 11581 11582 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) { 11583 for (j = 0; j < len; j += 4) { 11584 u32 val; 11585 11586 tg3_write_mem(tp, offset + j, test_pattern[i]); 11587 tg3_read_mem(tp, offset + j, &val); 11588 if (val != test_pattern[i]) 11589 return -EIO; 11590 } 11591 } 11592 return 0; 11593 } 11594 11595 static int tg3_test_memory(struct tg3 *tp) 11596 { 11597 static struct mem_entry { 11598 u32 offset; 11599 u32 len; 11600 } mem_tbl_570x[] = { 11601 { 0x00000000, 0x00b50}, 11602 { 0x00002000, 0x1c000}, 11603 { 0xffffffff, 0x00000} 11604 }, mem_tbl_5705[] = { 11605 { 0x00000100, 0x0000c}, 11606 { 0x00000200, 0x00008}, 11607 { 0x00004000, 0x00800}, 11608 { 0x00006000, 0x01000}, 11609 { 0x00008000, 0x02000}, 11610 { 0x00010000, 0x0e000}, 11611 { 0xffffffff, 0x00000} 11612 }, mem_tbl_5755[] = { 11613 { 0x00000200, 0x00008}, 11614 { 0x00004000, 0x00800}, 11615 { 0x00006000, 0x00800}, 11616 { 0x00008000, 0x02000}, 11617 { 0x00010000, 0x0c000}, 11618 { 0xffffffff, 0x00000} 11619 }, mem_tbl_5906[] = { 11620 { 0x00000200, 0x00008}, 11621 { 0x00004000, 0x00400}, 11622 { 0x00006000, 0x00400}, 11623 { 0x00008000, 0x01000}, 11624 { 0x00010000, 0x01000}, 11625 { 0xffffffff, 0x00000} 11626 }, mem_tbl_5717[] = { 11627 { 0x00000200, 0x00008}, 11628 { 0x00010000, 0x0a000}, 11629 { 0x00020000, 0x13c00}, 11630 { 0xffffffff, 0x00000} 11631 }, mem_tbl_57765[] = { 11632 { 0x00000200, 0x00008}, 11633 { 0x00004000, 0x00800}, 11634 { 0x00006000, 0x09800}, 11635 { 0x00010000, 0x0a000}, 11636 { 0xffffffff, 0x00000} 11637 }; 11638 struct mem_entry *mem_tbl; 11639 int err = 0; 11640 int i; 11641 11642 if (tg3_flag(tp, 5717_PLUS)) 11643 mem_tbl = mem_tbl_5717; 11644 else if (tg3_flag(tp, 57765_CLASS)) 11645 mem_tbl = mem_tbl_57765; 11646 else if (tg3_flag(tp, 5755_PLUS)) 11647 mem_tbl = mem_tbl_5755; 11648 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 11649 mem_tbl = mem_tbl_5906; 11650 else if (tg3_flag(tp, 5705_PLUS)) 11651 mem_tbl = mem_tbl_5705; 11652 else 11653 mem_tbl = mem_tbl_570x; 11654 11655 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) { 11656 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len); 11657 if (err) 11658 break; 11659 } 11660 11661 return err; 11662 } 11663 11664 #define TG3_TSO_MSS 500 11665 11666 #define TG3_TSO_IP_HDR_LEN 20 11667 #define TG3_TSO_TCP_HDR_LEN 20 11668 #define TG3_TSO_TCP_OPT_LEN 12 11669 11670 static const u8 tg3_tso_header[] = { 11671 0x08, 0x00, 11672 0x45, 0x00, 0x00, 0x00, 11673 0x00, 0x00, 0x40, 0x00, 11674 0x40, 0x06, 0x00, 0x00, 11675 0x0a, 0x00, 0x00, 0x01, 11676 0x0a, 0x00, 0x00, 0x02, 11677 0x0d, 0x00, 0xe0, 0x00, 11678 0x00, 0x00, 0x01, 0x00, 11679 0x00, 0x00, 0x02, 0x00, 11680 0x80, 0x10, 0x10, 0x00, 11681 0x14, 0x09, 0x00, 0x00, 11682 0x01, 0x01, 0x08, 0x0a, 11683 0x11, 0x11, 0x11, 0x11, 11684 0x11, 0x11, 0x11, 0x11, 11685 }; 11686 11687 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback) 11688 { 11689 u32 rx_start_idx, rx_idx, tx_idx, opaque_key; 11690 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val; 11691 u32 budget; 11692 struct sk_buff *skb; 11693 u8 *tx_data, *rx_data; 11694 dma_addr_t map; 11695 int num_pkts, tx_len, rx_len, i, err; 11696 struct tg3_rx_buffer_desc *desc; 11697 struct tg3_napi *tnapi, *rnapi; 11698 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 11699 11700 tnapi = &tp->napi[0]; 11701 rnapi = &tp->napi[0]; 11702 if (tp->irq_cnt > 1) { 11703 if (tg3_flag(tp, ENABLE_RSS)) 11704 rnapi = &tp->napi[1]; 11705 if (tg3_flag(tp, ENABLE_TSS)) 11706 tnapi = &tp->napi[1]; 11707 } 11708 coal_now = tnapi->coal_now | rnapi->coal_now; 11709 11710 err = -EIO; 11711 11712 tx_len = pktsz; 11713 skb = netdev_alloc_skb(tp->dev, tx_len); 11714 if (!skb) 11715 return -ENOMEM; 11716 11717 tx_data = skb_put(skb, tx_len); 11718 memcpy(tx_data, tp->dev->dev_addr, 6); 11719 memset(tx_data + 6, 0x0, 8); 11720 11721 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN); 11722 11723 if (tso_loopback) { 11724 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN]; 11725 11726 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN + 11727 TG3_TSO_TCP_OPT_LEN; 11728 11729 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header, 11730 sizeof(tg3_tso_header)); 11731 mss = TG3_TSO_MSS; 11732 11733 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header); 11734 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS); 11735 11736 /* Set the total length field in the IP header */ 11737 iph->tot_len = htons((u16)(mss + hdr_len)); 11738 11739 base_flags = (TXD_FLAG_CPU_PRE_DMA | 11740 TXD_FLAG_CPU_POST_DMA); 11741 11742 if (tg3_flag(tp, HW_TSO_1) || 11743 tg3_flag(tp, HW_TSO_2) || 11744 tg3_flag(tp, HW_TSO_3)) { 11745 struct tcphdr *th; 11746 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN; 11747 th = (struct tcphdr *)&tx_data[val]; 11748 th->check = 0; 11749 } else 11750 base_flags |= TXD_FLAG_TCPUDP_CSUM; 11751 11752 if (tg3_flag(tp, HW_TSO_3)) { 11753 mss |= (hdr_len & 0xc) << 12; 11754 if (hdr_len & 0x10) 11755 base_flags |= 0x00000010; 11756 base_flags |= (hdr_len & 0x3e0) << 5; 11757 } else if (tg3_flag(tp, HW_TSO_2)) 11758 mss |= hdr_len << 9; 11759 else if (tg3_flag(tp, HW_TSO_1) || 11760 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 11761 mss |= (TG3_TSO_TCP_OPT_LEN << 9); 11762 } else { 11763 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10); 11764 } 11765 11766 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header); 11767 } else { 11768 num_pkts = 1; 11769 data_off = ETH_HLEN; 11770 11771 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 11772 tx_len > VLAN_ETH_FRAME_LEN) 11773 base_flags |= TXD_FLAG_JMB_PKT; 11774 } 11775 11776 for (i = data_off; i < tx_len; i++) 11777 tx_data[i] = (u8) (i & 0xff); 11778 11779 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE); 11780 if (pci_dma_mapping_error(tp->pdev, map)) { 11781 dev_kfree_skb(skb); 11782 return -EIO; 11783 } 11784 11785 val = tnapi->tx_prod; 11786 tnapi->tx_buffers[val].skb = skb; 11787 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map); 11788 11789 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 11790 rnapi->coal_now); 11791 11792 udelay(10); 11793 11794 rx_start_idx = rnapi->hw_status->idx[0].rx_producer; 11795 11796 budget = tg3_tx_avail(tnapi); 11797 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len, 11798 base_flags | TXD_FLAG_END, mss, 0)) { 11799 tnapi->tx_buffers[val].skb = NULL; 11800 dev_kfree_skb(skb); 11801 return -EIO; 11802 } 11803 11804 tnapi->tx_prod++; 11805 11806 /* Sync BD data before updating mailbox */ 11807 wmb(); 11808 11809 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod); 11810 tr32_mailbox(tnapi->prodmbox); 11811 11812 udelay(10); 11813 11814 /* 350 usec to allow enough time on some 10/100 Mbps devices. */ 11815 for (i = 0; i < 35; i++) { 11816 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 11817 coal_now); 11818 11819 udelay(10); 11820 11821 tx_idx = tnapi->hw_status->idx[0].tx_consumer; 11822 rx_idx = rnapi->hw_status->idx[0].rx_producer; 11823 if ((tx_idx == tnapi->tx_prod) && 11824 (rx_idx == (rx_start_idx + num_pkts))) 11825 break; 11826 } 11827 11828 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1); 11829 dev_kfree_skb(skb); 11830 11831 if (tx_idx != tnapi->tx_prod) 11832 goto out; 11833 11834 if (rx_idx != rx_start_idx + num_pkts) 11835 goto out; 11836 11837 val = data_off; 11838 while (rx_idx != rx_start_idx) { 11839 desc = &rnapi->rx_rcb[rx_start_idx++]; 11840 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 11841 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 11842 11843 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 11844 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) 11845 goto out; 11846 11847 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) 11848 - ETH_FCS_LEN; 11849 11850 if (!tso_loopback) { 11851 if (rx_len != tx_len) 11852 goto out; 11853 11854 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) { 11855 if (opaque_key != RXD_OPAQUE_RING_STD) 11856 goto out; 11857 } else { 11858 if (opaque_key != RXD_OPAQUE_RING_JUMBO) 11859 goto out; 11860 } 11861 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 11862 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 11863 >> RXD_TCPCSUM_SHIFT != 0xffff) { 11864 goto out; 11865 } 11866 11867 if (opaque_key == RXD_OPAQUE_RING_STD) { 11868 rx_data = tpr->rx_std_buffers[desc_idx].data; 11869 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx], 11870 mapping); 11871 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 11872 rx_data = tpr->rx_jmb_buffers[desc_idx].data; 11873 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx], 11874 mapping); 11875 } else 11876 goto out; 11877 11878 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, 11879 PCI_DMA_FROMDEVICE); 11880 11881 rx_data += TG3_RX_OFFSET(tp); 11882 for (i = data_off; i < rx_len; i++, val++) { 11883 if (*(rx_data + i) != (u8) (val & 0xff)) 11884 goto out; 11885 } 11886 } 11887 11888 err = 0; 11889 11890 /* tg3_free_rings will unmap and free the rx_data */ 11891 out: 11892 return err; 11893 } 11894 11895 #define TG3_STD_LOOPBACK_FAILED 1 11896 #define TG3_JMB_LOOPBACK_FAILED 2 11897 #define TG3_TSO_LOOPBACK_FAILED 4 11898 #define TG3_LOOPBACK_FAILED \ 11899 (TG3_STD_LOOPBACK_FAILED | \ 11900 TG3_JMB_LOOPBACK_FAILED | \ 11901 TG3_TSO_LOOPBACK_FAILED) 11902 11903 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk) 11904 { 11905 int err = -EIO; 11906 u32 eee_cap; 11907 u32 jmb_pkt_sz = 9000; 11908 11909 if (tp->dma_limit) 11910 jmb_pkt_sz = tp->dma_limit - ETH_HLEN; 11911 11912 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP; 11913 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 11914 11915 if (!netif_running(tp->dev)) { 11916 data[0] = TG3_LOOPBACK_FAILED; 11917 data[1] = TG3_LOOPBACK_FAILED; 11918 if (do_extlpbk) 11919 data[2] = TG3_LOOPBACK_FAILED; 11920 goto done; 11921 } 11922 11923 err = tg3_reset_hw(tp, 1); 11924 if (err) { 11925 data[0] = TG3_LOOPBACK_FAILED; 11926 data[1] = TG3_LOOPBACK_FAILED; 11927 if (do_extlpbk) 11928 data[2] = TG3_LOOPBACK_FAILED; 11929 goto done; 11930 } 11931 11932 if (tg3_flag(tp, ENABLE_RSS)) { 11933 int i; 11934 11935 /* Reroute all rx packets to the 1st queue */ 11936 for (i = MAC_RSS_INDIR_TBL_0; 11937 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4) 11938 tw32(i, 0x0); 11939 } 11940 11941 /* HW errata - mac loopback fails in some cases on 5780. 11942 * Normal traffic and PHY loopback are not affected by 11943 * errata. Also, the MAC loopback test is deprecated for 11944 * all newer ASIC revisions. 11945 */ 11946 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 && 11947 !tg3_flag(tp, CPMU_PRESENT)) { 11948 tg3_mac_loopback(tp, true); 11949 11950 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 11951 data[0] |= TG3_STD_LOOPBACK_FAILED; 11952 11953 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 11954 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 11955 data[0] |= TG3_JMB_LOOPBACK_FAILED; 11956 11957 tg3_mac_loopback(tp, false); 11958 } 11959 11960 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 11961 !tg3_flag(tp, USE_PHYLIB)) { 11962 int i; 11963 11964 tg3_phy_lpbk_set(tp, 0, false); 11965 11966 /* Wait for link */ 11967 for (i = 0; i < 100; i++) { 11968 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 11969 break; 11970 mdelay(1); 11971 } 11972 11973 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 11974 data[1] |= TG3_STD_LOOPBACK_FAILED; 11975 if (tg3_flag(tp, TSO_CAPABLE) && 11976 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 11977 data[1] |= TG3_TSO_LOOPBACK_FAILED; 11978 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 11979 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 11980 data[1] |= TG3_JMB_LOOPBACK_FAILED; 11981 11982 if (do_extlpbk) { 11983 tg3_phy_lpbk_set(tp, 0, true); 11984 11985 /* All link indications report up, but the hardware 11986 * isn't really ready for about 20 msec. Double it 11987 * to be sure. 11988 */ 11989 mdelay(40); 11990 11991 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 11992 data[2] |= TG3_STD_LOOPBACK_FAILED; 11993 if (tg3_flag(tp, TSO_CAPABLE) && 11994 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 11995 data[2] |= TG3_TSO_LOOPBACK_FAILED; 11996 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 11997 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 11998 data[2] |= TG3_JMB_LOOPBACK_FAILED; 11999 } 12000 12001 /* Re-enable gphy autopowerdown. */ 12002 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 12003 tg3_phy_toggle_apd(tp, true); 12004 } 12005 12006 err = (data[0] | data[1] | data[2]) ? -EIO : 0; 12007 12008 done: 12009 tp->phy_flags |= eee_cap; 12010 12011 return err; 12012 } 12013 12014 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, 12015 u64 *data) 12016 { 12017 struct tg3 *tp = netdev_priv(dev); 12018 bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB; 12019 12020 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 12021 tg3_power_up(tp)) { 12022 etest->flags |= ETH_TEST_FL_FAILED; 12023 memset(data, 1, sizeof(u64) * TG3_NUM_TEST); 12024 return; 12025 } 12026 12027 memset(data, 0, sizeof(u64) * TG3_NUM_TEST); 12028 12029 if (tg3_test_nvram(tp) != 0) { 12030 etest->flags |= ETH_TEST_FL_FAILED; 12031 data[0] = 1; 12032 } 12033 if (!doextlpbk && tg3_test_link(tp)) { 12034 etest->flags |= ETH_TEST_FL_FAILED; 12035 data[1] = 1; 12036 } 12037 if (etest->flags & ETH_TEST_FL_OFFLINE) { 12038 int err, err2 = 0, irq_sync = 0; 12039 12040 if (netif_running(dev)) { 12041 tg3_phy_stop(tp); 12042 tg3_netif_stop(tp); 12043 irq_sync = 1; 12044 } 12045 12046 tg3_full_lock(tp, irq_sync); 12047 12048 tg3_halt(tp, RESET_KIND_SUSPEND, 1); 12049 err = tg3_nvram_lock(tp); 12050 tg3_halt_cpu(tp, RX_CPU_BASE); 12051 if (!tg3_flag(tp, 5705_PLUS)) 12052 tg3_halt_cpu(tp, TX_CPU_BASE); 12053 if (!err) 12054 tg3_nvram_unlock(tp); 12055 12056 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 12057 tg3_phy_reset(tp); 12058 12059 if (tg3_test_registers(tp) != 0) { 12060 etest->flags |= ETH_TEST_FL_FAILED; 12061 data[2] = 1; 12062 } 12063 12064 if (tg3_test_memory(tp) != 0) { 12065 etest->flags |= ETH_TEST_FL_FAILED; 12066 data[3] = 1; 12067 } 12068 12069 if (doextlpbk) 12070 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; 12071 12072 if (tg3_test_loopback(tp, &data[4], doextlpbk)) 12073 etest->flags |= ETH_TEST_FL_FAILED; 12074 12075 tg3_full_unlock(tp); 12076 12077 if (tg3_test_interrupt(tp) != 0) { 12078 etest->flags |= ETH_TEST_FL_FAILED; 12079 data[7] = 1; 12080 } 12081 12082 tg3_full_lock(tp, 0); 12083 12084 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12085 if (netif_running(dev)) { 12086 tg3_flag_set(tp, INIT_COMPLETE); 12087 err2 = tg3_restart_hw(tp, 1); 12088 if (!err2) 12089 tg3_netif_start(tp); 12090 } 12091 12092 tg3_full_unlock(tp); 12093 12094 if (irq_sync && !err2) 12095 tg3_phy_start(tp); 12096 } 12097 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 12098 tg3_power_down(tp); 12099 12100 } 12101 12102 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 12103 { 12104 struct mii_ioctl_data *data = if_mii(ifr); 12105 struct tg3 *tp = netdev_priv(dev); 12106 int err; 12107 12108 if (tg3_flag(tp, USE_PHYLIB)) { 12109 struct phy_device *phydev; 12110 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12111 return -EAGAIN; 12112 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 12113 return phy_mii_ioctl(phydev, ifr, cmd); 12114 } 12115 12116 switch (cmd) { 12117 case SIOCGMIIPHY: 12118 data->phy_id = tp->phy_addr; 12119 12120 /* fallthru */ 12121 case SIOCGMIIREG: { 12122 u32 mii_regval; 12123 12124 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12125 break; /* We have no PHY */ 12126 12127 if (!netif_running(dev)) 12128 return -EAGAIN; 12129 12130 spin_lock_bh(&tp->lock); 12131 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval); 12132 spin_unlock_bh(&tp->lock); 12133 12134 data->val_out = mii_regval; 12135 12136 return err; 12137 } 12138 12139 case SIOCSMIIREG: 12140 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12141 break; /* We have no PHY */ 12142 12143 if (!netif_running(dev)) 12144 return -EAGAIN; 12145 12146 spin_lock_bh(&tp->lock); 12147 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in); 12148 spin_unlock_bh(&tp->lock); 12149 12150 return err; 12151 12152 default: 12153 /* do nothing */ 12154 break; 12155 } 12156 return -EOPNOTSUPP; 12157 } 12158 12159 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 12160 { 12161 struct tg3 *tp = netdev_priv(dev); 12162 12163 memcpy(ec, &tp->coal, sizeof(*ec)); 12164 return 0; 12165 } 12166 12167 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 12168 { 12169 struct tg3 *tp = netdev_priv(dev); 12170 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0; 12171 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0; 12172 12173 if (!tg3_flag(tp, 5705_PLUS)) { 12174 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT; 12175 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT; 12176 max_stat_coal_ticks = MAX_STAT_COAL_TICKS; 12177 min_stat_coal_ticks = MIN_STAT_COAL_TICKS; 12178 } 12179 12180 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) || 12181 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) || 12182 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) || 12183 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) || 12184 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) || 12185 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) || 12186 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) || 12187 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) || 12188 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) || 12189 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks)) 12190 return -EINVAL; 12191 12192 /* No rx interrupts will be generated if both are zero */ 12193 if ((ec->rx_coalesce_usecs == 0) && 12194 (ec->rx_max_coalesced_frames == 0)) 12195 return -EINVAL; 12196 12197 /* No tx interrupts will be generated if both are zero */ 12198 if ((ec->tx_coalesce_usecs == 0) && 12199 (ec->tx_max_coalesced_frames == 0)) 12200 return -EINVAL; 12201 12202 /* Only copy relevant parameters, ignore all others. */ 12203 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs; 12204 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs; 12205 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames; 12206 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; 12207 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq; 12208 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq; 12209 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq; 12210 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq; 12211 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs; 12212 12213 if (netif_running(dev)) { 12214 tg3_full_lock(tp, 0); 12215 __tg3_set_coalesce(tp, &tp->coal); 12216 tg3_full_unlock(tp); 12217 } 12218 return 0; 12219 } 12220 12221 static const struct ethtool_ops tg3_ethtool_ops = { 12222 .get_settings = tg3_get_settings, 12223 .set_settings = tg3_set_settings, 12224 .get_drvinfo = tg3_get_drvinfo, 12225 .get_regs_len = tg3_get_regs_len, 12226 .get_regs = tg3_get_regs, 12227 .get_wol = tg3_get_wol, 12228 .set_wol = tg3_set_wol, 12229 .get_msglevel = tg3_get_msglevel, 12230 .set_msglevel = tg3_set_msglevel, 12231 .nway_reset = tg3_nway_reset, 12232 .get_link = ethtool_op_get_link, 12233 .get_eeprom_len = tg3_get_eeprom_len, 12234 .get_eeprom = tg3_get_eeprom, 12235 .set_eeprom = tg3_set_eeprom, 12236 .get_ringparam = tg3_get_ringparam, 12237 .set_ringparam = tg3_set_ringparam, 12238 .get_pauseparam = tg3_get_pauseparam, 12239 .set_pauseparam = tg3_set_pauseparam, 12240 .self_test = tg3_self_test, 12241 .get_strings = tg3_get_strings, 12242 .set_phys_id = tg3_set_phys_id, 12243 .get_ethtool_stats = tg3_get_ethtool_stats, 12244 .get_coalesce = tg3_get_coalesce, 12245 .set_coalesce = tg3_set_coalesce, 12246 .get_sset_count = tg3_get_sset_count, 12247 .get_rxnfc = tg3_get_rxnfc, 12248 .get_rxfh_indir_size = tg3_get_rxfh_indir_size, 12249 .get_rxfh_indir = tg3_get_rxfh_indir, 12250 .set_rxfh_indir = tg3_set_rxfh_indir, 12251 }; 12252 12253 static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, 12254 struct rtnl_link_stats64 *stats) 12255 { 12256 struct tg3 *tp = netdev_priv(dev); 12257 12258 if (!tp->hw_stats) 12259 return &tp->net_stats_prev; 12260 12261 spin_lock_bh(&tp->lock); 12262 tg3_get_nstats(tp, stats); 12263 spin_unlock_bh(&tp->lock); 12264 12265 return stats; 12266 } 12267 12268 static void tg3_set_rx_mode(struct net_device *dev) 12269 { 12270 struct tg3 *tp = netdev_priv(dev); 12271 12272 if (!netif_running(dev)) 12273 return; 12274 12275 tg3_full_lock(tp, 0); 12276 __tg3_set_rx_mode(dev); 12277 tg3_full_unlock(tp); 12278 } 12279 12280 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, 12281 int new_mtu) 12282 { 12283 dev->mtu = new_mtu; 12284 12285 if (new_mtu > ETH_DATA_LEN) { 12286 if (tg3_flag(tp, 5780_CLASS)) { 12287 netdev_update_features(dev); 12288 tg3_flag_clear(tp, TSO_CAPABLE); 12289 } else { 12290 tg3_flag_set(tp, JUMBO_RING_ENABLE); 12291 } 12292 } else { 12293 if (tg3_flag(tp, 5780_CLASS)) { 12294 tg3_flag_set(tp, TSO_CAPABLE); 12295 netdev_update_features(dev); 12296 } 12297 tg3_flag_clear(tp, JUMBO_RING_ENABLE); 12298 } 12299 } 12300 12301 static int tg3_change_mtu(struct net_device *dev, int new_mtu) 12302 { 12303 struct tg3 *tp = netdev_priv(dev); 12304 int err, reset_phy = 0; 12305 12306 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp)) 12307 return -EINVAL; 12308 12309 if (!netif_running(dev)) { 12310 /* We'll just catch it later when the 12311 * device is up'd. 12312 */ 12313 tg3_set_mtu(dev, tp, new_mtu); 12314 return 0; 12315 } 12316 12317 tg3_phy_stop(tp); 12318 12319 tg3_netif_stop(tp); 12320 12321 tg3_full_lock(tp, 1); 12322 12323 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12324 12325 tg3_set_mtu(dev, tp, new_mtu); 12326 12327 /* Reset PHY, otherwise the read DMA engine will be in a mode that 12328 * breaks all requests to 256 bytes. 12329 */ 12330 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) 12331 reset_phy = 1; 12332 12333 err = tg3_restart_hw(tp, reset_phy); 12334 12335 if (!err) 12336 tg3_netif_start(tp); 12337 12338 tg3_full_unlock(tp); 12339 12340 if (!err) 12341 tg3_phy_start(tp); 12342 12343 return err; 12344 } 12345 12346 static const struct net_device_ops tg3_netdev_ops = { 12347 .ndo_open = tg3_open, 12348 .ndo_stop = tg3_close, 12349 .ndo_start_xmit = tg3_start_xmit, 12350 .ndo_get_stats64 = tg3_get_stats64, 12351 .ndo_validate_addr = eth_validate_addr, 12352 .ndo_set_rx_mode = tg3_set_rx_mode, 12353 .ndo_set_mac_address = tg3_set_mac_addr, 12354 .ndo_do_ioctl = tg3_ioctl, 12355 .ndo_tx_timeout = tg3_tx_timeout, 12356 .ndo_change_mtu = tg3_change_mtu, 12357 .ndo_fix_features = tg3_fix_features, 12358 .ndo_set_features = tg3_set_features, 12359 #ifdef CONFIG_NET_POLL_CONTROLLER 12360 .ndo_poll_controller = tg3_poll_controller, 12361 #endif 12362 }; 12363 12364 static void __devinit tg3_get_eeprom_size(struct tg3 *tp) 12365 { 12366 u32 cursize, val, magic; 12367 12368 tp->nvram_size = EEPROM_CHIP_SIZE; 12369 12370 if (tg3_nvram_read(tp, 0, &magic) != 0) 12371 return; 12372 12373 if ((magic != TG3_EEPROM_MAGIC) && 12374 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) && 12375 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW)) 12376 return; 12377 12378 /* 12379 * Size the chip by reading offsets at increasing powers of two. 12380 * When we encounter our validation signature, we know the addressing 12381 * has wrapped around, and thus have our chip size. 12382 */ 12383 cursize = 0x10; 12384 12385 while (cursize < tp->nvram_size) { 12386 if (tg3_nvram_read(tp, cursize, &val) != 0) 12387 return; 12388 12389 if (val == magic) 12390 break; 12391 12392 cursize <<= 1; 12393 } 12394 12395 tp->nvram_size = cursize; 12396 } 12397 12398 static void __devinit tg3_get_nvram_size(struct tg3 *tp) 12399 { 12400 u32 val; 12401 12402 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0) 12403 return; 12404 12405 /* Selfboot format */ 12406 if (val != TG3_EEPROM_MAGIC) { 12407 tg3_get_eeprom_size(tp); 12408 return; 12409 } 12410 12411 if (tg3_nvram_read(tp, 0xf0, &val) == 0) { 12412 if (val != 0) { 12413 /* This is confusing. We want to operate on the 12414 * 16-bit value at offset 0xf2. The tg3_nvram_read() 12415 * call will read from NVRAM and byteswap the data 12416 * according to the byteswapping settings for all 12417 * other register accesses. This ensures the data we 12418 * want will always reside in the lower 16-bits. 12419 * However, the data in NVRAM is in LE format, which 12420 * means the data from the NVRAM read will always be 12421 * opposite the endianness of the CPU. The 16-bit 12422 * byteswap then brings the data to CPU endianness. 12423 */ 12424 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024; 12425 return; 12426 } 12427 } 12428 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12429 } 12430 12431 static void __devinit tg3_get_nvram_info(struct tg3 *tp) 12432 { 12433 u32 nvcfg1; 12434 12435 nvcfg1 = tr32(NVRAM_CFG1); 12436 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { 12437 tg3_flag_set(tp, FLASH); 12438 } else { 12439 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12440 tw32(NVRAM_CFG1, nvcfg1); 12441 } 12442 12443 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 12444 tg3_flag(tp, 5780_CLASS)) { 12445 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { 12446 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: 12447 tp->nvram_jedecnum = JEDEC_ATMEL; 12448 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 12449 tg3_flag_set(tp, NVRAM_BUFFERED); 12450 break; 12451 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED: 12452 tp->nvram_jedecnum = JEDEC_ATMEL; 12453 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE; 12454 break; 12455 case FLASH_VENDOR_ATMEL_EEPROM: 12456 tp->nvram_jedecnum = JEDEC_ATMEL; 12457 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12458 tg3_flag_set(tp, NVRAM_BUFFERED); 12459 break; 12460 case FLASH_VENDOR_ST: 12461 tp->nvram_jedecnum = JEDEC_ST; 12462 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE; 12463 tg3_flag_set(tp, NVRAM_BUFFERED); 12464 break; 12465 case FLASH_VENDOR_SAIFUN: 12466 tp->nvram_jedecnum = JEDEC_SAIFUN; 12467 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE; 12468 break; 12469 case FLASH_VENDOR_SST_SMALL: 12470 case FLASH_VENDOR_SST_LARGE: 12471 tp->nvram_jedecnum = JEDEC_SST; 12472 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE; 12473 break; 12474 } 12475 } else { 12476 tp->nvram_jedecnum = JEDEC_ATMEL; 12477 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 12478 tg3_flag_set(tp, NVRAM_BUFFERED); 12479 } 12480 } 12481 12482 static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) 12483 { 12484 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { 12485 case FLASH_5752PAGE_SIZE_256: 12486 tp->nvram_pagesize = 256; 12487 break; 12488 case FLASH_5752PAGE_SIZE_512: 12489 tp->nvram_pagesize = 512; 12490 break; 12491 case FLASH_5752PAGE_SIZE_1K: 12492 tp->nvram_pagesize = 1024; 12493 break; 12494 case FLASH_5752PAGE_SIZE_2K: 12495 tp->nvram_pagesize = 2048; 12496 break; 12497 case FLASH_5752PAGE_SIZE_4K: 12498 tp->nvram_pagesize = 4096; 12499 break; 12500 case FLASH_5752PAGE_SIZE_264: 12501 tp->nvram_pagesize = 264; 12502 break; 12503 case FLASH_5752PAGE_SIZE_528: 12504 tp->nvram_pagesize = 528; 12505 break; 12506 } 12507 } 12508 12509 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp) 12510 { 12511 u32 nvcfg1; 12512 12513 nvcfg1 = tr32(NVRAM_CFG1); 12514 12515 /* NVRAM protection for TPM */ 12516 if (nvcfg1 & (1 << 27)) 12517 tg3_flag_set(tp, PROTECTED_NVRAM); 12518 12519 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12520 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ: 12521 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ: 12522 tp->nvram_jedecnum = JEDEC_ATMEL; 12523 tg3_flag_set(tp, NVRAM_BUFFERED); 12524 break; 12525 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12526 tp->nvram_jedecnum = JEDEC_ATMEL; 12527 tg3_flag_set(tp, NVRAM_BUFFERED); 12528 tg3_flag_set(tp, FLASH); 12529 break; 12530 case FLASH_5752VENDOR_ST_M45PE10: 12531 case FLASH_5752VENDOR_ST_M45PE20: 12532 case FLASH_5752VENDOR_ST_M45PE40: 12533 tp->nvram_jedecnum = JEDEC_ST; 12534 tg3_flag_set(tp, NVRAM_BUFFERED); 12535 tg3_flag_set(tp, FLASH); 12536 break; 12537 } 12538 12539 if (tg3_flag(tp, FLASH)) { 12540 tg3_nvram_get_pagesize(tp, nvcfg1); 12541 } else { 12542 /* For eeprom, set pagesize to maximum eeprom size */ 12543 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12544 12545 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12546 tw32(NVRAM_CFG1, nvcfg1); 12547 } 12548 } 12549 12550 static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp) 12551 { 12552 u32 nvcfg1, protect = 0; 12553 12554 nvcfg1 = tr32(NVRAM_CFG1); 12555 12556 /* NVRAM protection for TPM */ 12557 if (nvcfg1 & (1 << 27)) { 12558 tg3_flag_set(tp, PROTECTED_NVRAM); 12559 protect = 1; 12560 } 12561 12562 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 12563 switch (nvcfg1) { 12564 case FLASH_5755VENDOR_ATMEL_FLASH_1: 12565 case FLASH_5755VENDOR_ATMEL_FLASH_2: 12566 case FLASH_5755VENDOR_ATMEL_FLASH_3: 12567 case FLASH_5755VENDOR_ATMEL_FLASH_5: 12568 tp->nvram_jedecnum = JEDEC_ATMEL; 12569 tg3_flag_set(tp, NVRAM_BUFFERED); 12570 tg3_flag_set(tp, FLASH); 12571 tp->nvram_pagesize = 264; 12572 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 || 12573 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5) 12574 tp->nvram_size = (protect ? 0x3e200 : 12575 TG3_NVRAM_SIZE_512KB); 12576 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2) 12577 tp->nvram_size = (protect ? 0x1f200 : 12578 TG3_NVRAM_SIZE_256KB); 12579 else 12580 tp->nvram_size = (protect ? 0x1f200 : 12581 TG3_NVRAM_SIZE_128KB); 12582 break; 12583 case FLASH_5752VENDOR_ST_M45PE10: 12584 case FLASH_5752VENDOR_ST_M45PE20: 12585 case FLASH_5752VENDOR_ST_M45PE40: 12586 tp->nvram_jedecnum = JEDEC_ST; 12587 tg3_flag_set(tp, NVRAM_BUFFERED); 12588 tg3_flag_set(tp, FLASH); 12589 tp->nvram_pagesize = 256; 12590 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10) 12591 tp->nvram_size = (protect ? 12592 TG3_NVRAM_SIZE_64KB : 12593 TG3_NVRAM_SIZE_128KB); 12594 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20) 12595 tp->nvram_size = (protect ? 12596 TG3_NVRAM_SIZE_64KB : 12597 TG3_NVRAM_SIZE_256KB); 12598 else 12599 tp->nvram_size = (protect ? 12600 TG3_NVRAM_SIZE_128KB : 12601 TG3_NVRAM_SIZE_512KB); 12602 break; 12603 } 12604 } 12605 12606 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp) 12607 { 12608 u32 nvcfg1; 12609 12610 nvcfg1 = tr32(NVRAM_CFG1); 12611 12612 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12613 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ: 12614 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 12615 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ: 12616 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 12617 tp->nvram_jedecnum = JEDEC_ATMEL; 12618 tg3_flag_set(tp, NVRAM_BUFFERED); 12619 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12620 12621 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12622 tw32(NVRAM_CFG1, nvcfg1); 12623 break; 12624 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12625 case FLASH_5755VENDOR_ATMEL_FLASH_1: 12626 case FLASH_5755VENDOR_ATMEL_FLASH_2: 12627 case FLASH_5755VENDOR_ATMEL_FLASH_3: 12628 tp->nvram_jedecnum = JEDEC_ATMEL; 12629 tg3_flag_set(tp, NVRAM_BUFFERED); 12630 tg3_flag_set(tp, FLASH); 12631 tp->nvram_pagesize = 264; 12632 break; 12633 case FLASH_5752VENDOR_ST_M45PE10: 12634 case FLASH_5752VENDOR_ST_M45PE20: 12635 case FLASH_5752VENDOR_ST_M45PE40: 12636 tp->nvram_jedecnum = JEDEC_ST; 12637 tg3_flag_set(tp, NVRAM_BUFFERED); 12638 tg3_flag_set(tp, FLASH); 12639 tp->nvram_pagesize = 256; 12640 break; 12641 } 12642 } 12643 12644 static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp) 12645 { 12646 u32 nvcfg1, protect = 0; 12647 12648 nvcfg1 = tr32(NVRAM_CFG1); 12649 12650 /* NVRAM protection for TPM */ 12651 if (nvcfg1 & (1 << 27)) { 12652 tg3_flag_set(tp, PROTECTED_NVRAM); 12653 protect = 1; 12654 } 12655 12656 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 12657 switch (nvcfg1) { 12658 case FLASH_5761VENDOR_ATMEL_ADB021D: 12659 case FLASH_5761VENDOR_ATMEL_ADB041D: 12660 case FLASH_5761VENDOR_ATMEL_ADB081D: 12661 case FLASH_5761VENDOR_ATMEL_ADB161D: 12662 case FLASH_5761VENDOR_ATMEL_MDB021D: 12663 case FLASH_5761VENDOR_ATMEL_MDB041D: 12664 case FLASH_5761VENDOR_ATMEL_MDB081D: 12665 case FLASH_5761VENDOR_ATMEL_MDB161D: 12666 tp->nvram_jedecnum = JEDEC_ATMEL; 12667 tg3_flag_set(tp, NVRAM_BUFFERED); 12668 tg3_flag_set(tp, FLASH); 12669 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 12670 tp->nvram_pagesize = 256; 12671 break; 12672 case FLASH_5761VENDOR_ST_A_M45PE20: 12673 case FLASH_5761VENDOR_ST_A_M45PE40: 12674 case FLASH_5761VENDOR_ST_A_M45PE80: 12675 case FLASH_5761VENDOR_ST_A_M45PE16: 12676 case FLASH_5761VENDOR_ST_M_M45PE20: 12677 case FLASH_5761VENDOR_ST_M_M45PE40: 12678 case FLASH_5761VENDOR_ST_M_M45PE80: 12679 case FLASH_5761VENDOR_ST_M_M45PE16: 12680 tp->nvram_jedecnum = JEDEC_ST; 12681 tg3_flag_set(tp, NVRAM_BUFFERED); 12682 tg3_flag_set(tp, FLASH); 12683 tp->nvram_pagesize = 256; 12684 break; 12685 } 12686 12687 if (protect) { 12688 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT); 12689 } else { 12690 switch (nvcfg1) { 12691 case FLASH_5761VENDOR_ATMEL_ADB161D: 12692 case FLASH_5761VENDOR_ATMEL_MDB161D: 12693 case FLASH_5761VENDOR_ST_A_M45PE16: 12694 case FLASH_5761VENDOR_ST_M_M45PE16: 12695 tp->nvram_size = TG3_NVRAM_SIZE_2MB; 12696 break; 12697 case FLASH_5761VENDOR_ATMEL_ADB081D: 12698 case FLASH_5761VENDOR_ATMEL_MDB081D: 12699 case FLASH_5761VENDOR_ST_A_M45PE80: 12700 case FLASH_5761VENDOR_ST_M_M45PE80: 12701 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 12702 break; 12703 case FLASH_5761VENDOR_ATMEL_ADB041D: 12704 case FLASH_5761VENDOR_ATMEL_MDB041D: 12705 case FLASH_5761VENDOR_ST_A_M45PE40: 12706 case FLASH_5761VENDOR_ST_M_M45PE40: 12707 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12708 break; 12709 case FLASH_5761VENDOR_ATMEL_ADB021D: 12710 case FLASH_5761VENDOR_ATMEL_MDB021D: 12711 case FLASH_5761VENDOR_ST_A_M45PE20: 12712 case FLASH_5761VENDOR_ST_M_M45PE20: 12713 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12714 break; 12715 } 12716 } 12717 } 12718 12719 static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp) 12720 { 12721 tp->nvram_jedecnum = JEDEC_ATMEL; 12722 tg3_flag_set(tp, NVRAM_BUFFERED); 12723 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12724 } 12725 12726 static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp) 12727 { 12728 u32 nvcfg1; 12729 12730 nvcfg1 = tr32(NVRAM_CFG1); 12731 12732 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12733 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 12734 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 12735 tp->nvram_jedecnum = JEDEC_ATMEL; 12736 tg3_flag_set(tp, NVRAM_BUFFERED); 12737 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12738 12739 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12740 tw32(NVRAM_CFG1, nvcfg1); 12741 return; 12742 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12743 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 12744 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 12745 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 12746 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 12747 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 12748 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 12749 tp->nvram_jedecnum = JEDEC_ATMEL; 12750 tg3_flag_set(tp, NVRAM_BUFFERED); 12751 tg3_flag_set(tp, FLASH); 12752 12753 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12754 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12755 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 12756 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 12757 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12758 break; 12759 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 12760 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 12761 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12762 break; 12763 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 12764 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 12765 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12766 break; 12767 } 12768 break; 12769 case FLASH_5752VENDOR_ST_M45PE10: 12770 case FLASH_5752VENDOR_ST_M45PE20: 12771 case FLASH_5752VENDOR_ST_M45PE40: 12772 tp->nvram_jedecnum = JEDEC_ST; 12773 tg3_flag_set(tp, NVRAM_BUFFERED); 12774 tg3_flag_set(tp, FLASH); 12775 12776 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12777 case FLASH_5752VENDOR_ST_M45PE10: 12778 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12779 break; 12780 case FLASH_5752VENDOR_ST_M45PE20: 12781 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12782 break; 12783 case FLASH_5752VENDOR_ST_M45PE40: 12784 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12785 break; 12786 } 12787 break; 12788 default: 12789 tg3_flag_set(tp, NO_NVRAM); 12790 return; 12791 } 12792 12793 tg3_nvram_get_pagesize(tp, nvcfg1); 12794 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 12795 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 12796 } 12797 12798 12799 static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp) 12800 { 12801 u32 nvcfg1; 12802 12803 nvcfg1 = tr32(NVRAM_CFG1); 12804 12805 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12806 case FLASH_5717VENDOR_ATMEL_EEPROM: 12807 case FLASH_5717VENDOR_MICRO_EEPROM: 12808 tp->nvram_jedecnum = JEDEC_ATMEL; 12809 tg3_flag_set(tp, NVRAM_BUFFERED); 12810 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12811 12812 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12813 tw32(NVRAM_CFG1, nvcfg1); 12814 return; 12815 case FLASH_5717VENDOR_ATMEL_MDB011D: 12816 case FLASH_5717VENDOR_ATMEL_ADB011B: 12817 case FLASH_5717VENDOR_ATMEL_ADB011D: 12818 case FLASH_5717VENDOR_ATMEL_MDB021D: 12819 case FLASH_5717VENDOR_ATMEL_ADB021B: 12820 case FLASH_5717VENDOR_ATMEL_ADB021D: 12821 case FLASH_5717VENDOR_ATMEL_45USPT: 12822 tp->nvram_jedecnum = JEDEC_ATMEL; 12823 tg3_flag_set(tp, NVRAM_BUFFERED); 12824 tg3_flag_set(tp, FLASH); 12825 12826 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12827 case FLASH_5717VENDOR_ATMEL_MDB021D: 12828 /* Detect size with tg3_nvram_get_size() */ 12829 break; 12830 case FLASH_5717VENDOR_ATMEL_ADB021B: 12831 case FLASH_5717VENDOR_ATMEL_ADB021D: 12832 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12833 break; 12834 default: 12835 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12836 break; 12837 } 12838 break; 12839 case FLASH_5717VENDOR_ST_M_M25PE10: 12840 case FLASH_5717VENDOR_ST_A_M25PE10: 12841 case FLASH_5717VENDOR_ST_M_M45PE10: 12842 case FLASH_5717VENDOR_ST_A_M45PE10: 12843 case FLASH_5717VENDOR_ST_M_M25PE20: 12844 case FLASH_5717VENDOR_ST_A_M25PE20: 12845 case FLASH_5717VENDOR_ST_M_M45PE20: 12846 case FLASH_5717VENDOR_ST_A_M45PE20: 12847 case FLASH_5717VENDOR_ST_25USPT: 12848 case FLASH_5717VENDOR_ST_45USPT: 12849 tp->nvram_jedecnum = JEDEC_ST; 12850 tg3_flag_set(tp, NVRAM_BUFFERED); 12851 tg3_flag_set(tp, FLASH); 12852 12853 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12854 case FLASH_5717VENDOR_ST_M_M25PE20: 12855 case FLASH_5717VENDOR_ST_M_M45PE20: 12856 /* Detect size with tg3_nvram_get_size() */ 12857 break; 12858 case FLASH_5717VENDOR_ST_A_M25PE20: 12859 case FLASH_5717VENDOR_ST_A_M45PE20: 12860 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12861 break; 12862 default: 12863 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12864 break; 12865 } 12866 break; 12867 default: 12868 tg3_flag_set(tp, NO_NVRAM); 12869 return; 12870 } 12871 12872 tg3_nvram_get_pagesize(tp, nvcfg1); 12873 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 12874 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 12875 } 12876 12877 static void __devinit tg3_get_5720_nvram_info(struct tg3 *tp) 12878 { 12879 u32 nvcfg1, nvmpinstrp; 12880 12881 nvcfg1 = tr32(NVRAM_CFG1); 12882 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; 12883 12884 switch (nvmpinstrp) { 12885 case FLASH_5720_EEPROM_HD: 12886 case FLASH_5720_EEPROM_LD: 12887 tp->nvram_jedecnum = JEDEC_ATMEL; 12888 tg3_flag_set(tp, NVRAM_BUFFERED); 12889 12890 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12891 tw32(NVRAM_CFG1, nvcfg1); 12892 if (nvmpinstrp == FLASH_5720_EEPROM_HD) 12893 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12894 else 12895 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE; 12896 return; 12897 case FLASH_5720VENDOR_M_ATMEL_DB011D: 12898 case FLASH_5720VENDOR_A_ATMEL_DB011B: 12899 case FLASH_5720VENDOR_A_ATMEL_DB011D: 12900 case FLASH_5720VENDOR_M_ATMEL_DB021D: 12901 case FLASH_5720VENDOR_A_ATMEL_DB021B: 12902 case FLASH_5720VENDOR_A_ATMEL_DB021D: 12903 case FLASH_5720VENDOR_M_ATMEL_DB041D: 12904 case FLASH_5720VENDOR_A_ATMEL_DB041B: 12905 case FLASH_5720VENDOR_A_ATMEL_DB041D: 12906 case FLASH_5720VENDOR_M_ATMEL_DB081D: 12907 case FLASH_5720VENDOR_A_ATMEL_DB081D: 12908 case FLASH_5720VENDOR_ATMEL_45USPT: 12909 tp->nvram_jedecnum = JEDEC_ATMEL; 12910 tg3_flag_set(tp, NVRAM_BUFFERED); 12911 tg3_flag_set(tp, FLASH); 12912 12913 switch (nvmpinstrp) { 12914 case FLASH_5720VENDOR_M_ATMEL_DB021D: 12915 case FLASH_5720VENDOR_A_ATMEL_DB021B: 12916 case FLASH_5720VENDOR_A_ATMEL_DB021D: 12917 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12918 break; 12919 case FLASH_5720VENDOR_M_ATMEL_DB041D: 12920 case FLASH_5720VENDOR_A_ATMEL_DB041B: 12921 case FLASH_5720VENDOR_A_ATMEL_DB041D: 12922 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12923 break; 12924 case FLASH_5720VENDOR_M_ATMEL_DB081D: 12925 case FLASH_5720VENDOR_A_ATMEL_DB081D: 12926 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 12927 break; 12928 default: 12929 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12930 break; 12931 } 12932 break; 12933 case FLASH_5720VENDOR_M_ST_M25PE10: 12934 case FLASH_5720VENDOR_M_ST_M45PE10: 12935 case FLASH_5720VENDOR_A_ST_M25PE10: 12936 case FLASH_5720VENDOR_A_ST_M45PE10: 12937 case FLASH_5720VENDOR_M_ST_M25PE20: 12938 case FLASH_5720VENDOR_M_ST_M45PE20: 12939 case FLASH_5720VENDOR_A_ST_M25PE20: 12940 case FLASH_5720VENDOR_A_ST_M45PE20: 12941 case FLASH_5720VENDOR_M_ST_M25PE40: 12942 case FLASH_5720VENDOR_M_ST_M45PE40: 12943 case FLASH_5720VENDOR_A_ST_M25PE40: 12944 case FLASH_5720VENDOR_A_ST_M45PE40: 12945 case FLASH_5720VENDOR_M_ST_M25PE80: 12946 case FLASH_5720VENDOR_M_ST_M45PE80: 12947 case FLASH_5720VENDOR_A_ST_M25PE80: 12948 case FLASH_5720VENDOR_A_ST_M45PE80: 12949 case FLASH_5720VENDOR_ST_25USPT: 12950 case FLASH_5720VENDOR_ST_45USPT: 12951 tp->nvram_jedecnum = JEDEC_ST; 12952 tg3_flag_set(tp, NVRAM_BUFFERED); 12953 tg3_flag_set(tp, FLASH); 12954 12955 switch (nvmpinstrp) { 12956 case FLASH_5720VENDOR_M_ST_M25PE20: 12957 case FLASH_5720VENDOR_M_ST_M45PE20: 12958 case FLASH_5720VENDOR_A_ST_M25PE20: 12959 case FLASH_5720VENDOR_A_ST_M45PE20: 12960 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12961 break; 12962 case FLASH_5720VENDOR_M_ST_M25PE40: 12963 case FLASH_5720VENDOR_M_ST_M45PE40: 12964 case FLASH_5720VENDOR_A_ST_M25PE40: 12965 case FLASH_5720VENDOR_A_ST_M45PE40: 12966 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12967 break; 12968 case FLASH_5720VENDOR_M_ST_M25PE80: 12969 case FLASH_5720VENDOR_M_ST_M45PE80: 12970 case FLASH_5720VENDOR_A_ST_M25PE80: 12971 case FLASH_5720VENDOR_A_ST_M45PE80: 12972 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 12973 break; 12974 default: 12975 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12976 break; 12977 } 12978 break; 12979 default: 12980 tg3_flag_set(tp, NO_NVRAM); 12981 return; 12982 } 12983 12984 tg3_nvram_get_pagesize(tp, nvcfg1); 12985 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 12986 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 12987 } 12988 12989 /* Chips other than 5700/5701 use the NVRAM for fetching info. */ 12990 static void __devinit tg3_nvram_init(struct tg3 *tp) 12991 { 12992 tw32_f(GRC_EEPROM_ADDR, 12993 (EEPROM_ADDR_FSM_RESET | 12994 (EEPROM_DEFAULT_CLOCK_PERIOD << 12995 EEPROM_ADDR_CLKPERD_SHIFT))); 12996 12997 msleep(1); 12998 12999 /* Enable seeprom accesses. */ 13000 tw32_f(GRC_LOCAL_CTRL, 13001 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM); 13002 udelay(100); 13003 13004 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 13005 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) { 13006 tg3_flag_set(tp, NVRAM); 13007 13008 if (tg3_nvram_lock(tp)) { 13009 netdev_warn(tp->dev, 13010 "Cannot get nvram lock, %s failed\n", 13011 __func__); 13012 return; 13013 } 13014 tg3_enable_nvram_access(tp); 13015 13016 tp->nvram_size = 0; 13017 13018 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 13019 tg3_get_5752_nvram_info(tp); 13020 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 13021 tg3_get_5755_nvram_info(tp); 13022 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 13023 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 13024 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 13025 tg3_get_5787_nvram_info(tp); 13026 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 13027 tg3_get_5761_nvram_info(tp); 13028 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 13029 tg3_get_5906_nvram_info(tp); 13030 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 13031 tg3_flag(tp, 57765_CLASS)) 13032 tg3_get_57780_nvram_info(tp); 13033 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 13034 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 13035 tg3_get_5717_nvram_info(tp); 13036 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 13037 tg3_get_5720_nvram_info(tp); 13038 else 13039 tg3_get_nvram_info(tp); 13040 13041 if (tp->nvram_size == 0) 13042 tg3_get_nvram_size(tp); 13043 13044 tg3_disable_nvram_access(tp); 13045 tg3_nvram_unlock(tp); 13046 13047 } else { 13048 tg3_flag_clear(tp, NVRAM); 13049 tg3_flag_clear(tp, NVRAM_BUFFERED); 13050 13051 tg3_get_eeprom_size(tp); 13052 } 13053 } 13054 13055 struct subsys_tbl_ent { 13056 u16 subsys_vendor, subsys_devid; 13057 u32 phy_id; 13058 }; 13059 13060 static struct subsys_tbl_ent subsys_id_to_phy_id[] __devinitdata = { 13061 /* Broadcom boards. */ 13062 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13063 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, 13064 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13065 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 }, 13066 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13067 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 }, 13068 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13069 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 }, 13070 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13071 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 }, 13072 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13073 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 }, 13074 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13075 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 }, 13076 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13077 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 }, 13078 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13079 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 }, 13080 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13081 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 }, 13082 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13083 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 }, 13084 13085 /* 3com boards. */ 13086 { TG3PCI_SUBVENDOR_ID_3COM, 13087 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 }, 13088 { TG3PCI_SUBVENDOR_ID_3COM, 13089 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 }, 13090 { TG3PCI_SUBVENDOR_ID_3COM, 13091 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 }, 13092 { TG3PCI_SUBVENDOR_ID_3COM, 13093 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 }, 13094 { TG3PCI_SUBVENDOR_ID_3COM, 13095 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 }, 13096 13097 /* DELL boards. */ 13098 { TG3PCI_SUBVENDOR_ID_DELL, 13099 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 }, 13100 { TG3PCI_SUBVENDOR_ID_DELL, 13101 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 }, 13102 { TG3PCI_SUBVENDOR_ID_DELL, 13103 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 }, 13104 { TG3PCI_SUBVENDOR_ID_DELL, 13105 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 }, 13106 13107 /* Compaq boards. */ 13108 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13109 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 }, 13110 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13111 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 }, 13112 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13113 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 }, 13114 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13115 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 }, 13116 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13117 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 }, 13118 13119 /* IBM boards. */ 13120 { TG3PCI_SUBVENDOR_ID_IBM, 13121 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } 13122 }; 13123 13124 static struct subsys_tbl_ent * __devinit tg3_lookup_by_subsys(struct tg3 *tp) 13125 { 13126 int i; 13127 13128 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) { 13129 if ((subsys_id_to_phy_id[i].subsys_vendor == 13130 tp->pdev->subsystem_vendor) && 13131 (subsys_id_to_phy_id[i].subsys_devid == 13132 tp->pdev->subsystem_device)) 13133 return &subsys_id_to_phy_id[i]; 13134 } 13135 return NULL; 13136 } 13137 13138 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) 13139 { 13140 u32 val; 13141 13142 tp->phy_id = TG3_PHY_ID_INVALID; 13143 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 13144 13145 /* Assume an onboard device and WOL capable by default. */ 13146 tg3_flag_set(tp, EEPROM_WRITE_PROT); 13147 tg3_flag_set(tp, WOL_CAP); 13148 13149 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 13150 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { 13151 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 13152 tg3_flag_set(tp, IS_NIC); 13153 } 13154 val = tr32(VCPU_CFGSHDW); 13155 if (val & VCPU_CFGSHDW_ASPM_DBNC) 13156 tg3_flag_set(tp, ASPM_WORKAROUND); 13157 if ((val & VCPU_CFGSHDW_WOL_ENABLE) && 13158 (val & VCPU_CFGSHDW_WOL_MAGPKT)) { 13159 tg3_flag_set(tp, WOL_ENABLE); 13160 device_set_wakeup_enable(&tp->pdev->dev, true); 13161 } 13162 goto done; 13163 } 13164 13165 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 13166 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 13167 u32 nic_cfg, led_cfg; 13168 u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id; 13169 int eeprom_phy_serdes = 0; 13170 13171 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 13172 tp->nic_sram_data_cfg = nic_cfg; 13173 13174 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver); 13175 ver >>= NIC_SRAM_DATA_VER_SHIFT; 13176 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 13177 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 13178 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703 && 13179 (ver > 0) && (ver < 0x100)) 13180 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2); 13181 13182 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 13183 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4); 13184 13185 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) == 13186 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) 13187 eeprom_phy_serdes = 1; 13188 13189 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id); 13190 if (nic_phy_id != 0) { 13191 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK; 13192 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK; 13193 13194 eeprom_phy_id = (id1 >> 16) << 10; 13195 eeprom_phy_id |= (id2 & 0xfc00) << 16; 13196 eeprom_phy_id |= (id2 & 0x03ff) << 0; 13197 } else 13198 eeprom_phy_id = 0; 13199 13200 tp->phy_id = eeprom_phy_id; 13201 if (eeprom_phy_serdes) { 13202 if (!tg3_flag(tp, 5705_PLUS)) 13203 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 13204 else 13205 tp->phy_flags |= TG3_PHYFLG_MII_SERDES; 13206 } 13207 13208 if (tg3_flag(tp, 5750_PLUS)) 13209 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | 13210 SHASTA_EXT_LED_MODE_MASK); 13211 else 13212 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; 13213 13214 switch (led_cfg) { 13215 default: 13216 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: 13217 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 13218 break; 13219 13220 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: 13221 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 13222 break; 13223 13224 case NIC_SRAM_DATA_CFG_LED_MODE_MAC: 13225 tp->led_ctrl = LED_CTRL_MODE_MAC; 13226 13227 /* Default to PHY_1_MODE if 0 (MAC_MODE) is 13228 * read on some older 5700/5701 bootcode. 13229 */ 13230 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 13231 ASIC_REV_5700 || 13232 GET_ASIC_REV(tp->pci_chip_rev_id) == 13233 ASIC_REV_5701) 13234 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 13235 13236 break; 13237 13238 case SHASTA_EXT_LED_SHARED: 13239 tp->led_ctrl = LED_CTRL_MODE_SHARED; 13240 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && 13241 tp->pci_chip_rev_id != CHIPREV_ID_5750_A1) 13242 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 13243 LED_CTRL_MODE_PHY_2); 13244 break; 13245 13246 case SHASTA_EXT_LED_MAC: 13247 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; 13248 break; 13249 13250 case SHASTA_EXT_LED_COMBO: 13251 tp->led_ctrl = LED_CTRL_MODE_COMBO; 13252 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) 13253 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 13254 LED_CTRL_MODE_PHY_2); 13255 break; 13256 13257 } 13258 13259 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 13260 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) && 13261 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) 13262 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 13263 13264 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) 13265 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 13266 13267 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { 13268 tg3_flag_set(tp, EEPROM_WRITE_PROT); 13269 if ((tp->pdev->subsystem_vendor == 13270 PCI_VENDOR_ID_ARIMA) && 13271 (tp->pdev->subsystem_device == 0x205a || 13272 tp->pdev->subsystem_device == 0x2063)) 13273 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 13274 } else { 13275 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 13276 tg3_flag_set(tp, IS_NIC); 13277 } 13278 13279 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 13280 tg3_flag_set(tp, ENABLE_ASF); 13281 if (tg3_flag(tp, 5750_PLUS)) 13282 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 13283 } 13284 13285 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) && 13286 tg3_flag(tp, 5750_PLUS)) 13287 tg3_flag_set(tp, ENABLE_APE); 13288 13289 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES && 13290 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)) 13291 tg3_flag_clear(tp, WOL_CAP); 13292 13293 if (tg3_flag(tp, WOL_CAP) && 13294 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { 13295 tg3_flag_set(tp, WOL_ENABLE); 13296 device_set_wakeup_enable(&tp->pdev->dev, true); 13297 } 13298 13299 if (cfg2 & (1 << 17)) 13300 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; 13301 13302 /* serdes signal pre-emphasis in register 0x590 set by */ 13303 /* bootcode if bit 18 is set */ 13304 if (cfg2 & (1 << 18)) 13305 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS; 13306 13307 if ((tg3_flag(tp, 57765_PLUS) || 13308 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 13309 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX)) && 13310 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN)) 13311 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD; 13312 13313 if (tg3_flag(tp, PCI_EXPRESS) && 13314 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 13315 !tg3_flag(tp, 57765_PLUS)) { 13316 u32 cfg3; 13317 13318 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3); 13319 if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE) 13320 tg3_flag_set(tp, ASPM_WORKAROUND); 13321 } 13322 13323 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE) 13324 tg3_flag_set(tp, RGMII_INBAND_DISABLE); 13325 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN) 13326 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN); 13327 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN) 13328 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN); 13329 } 13330 done: 13331 if (tg3_flag(tp, WOL_CAP)) 13332 device_set_wakeup_enable(&tp->pdev->dev, 13333 tg3_flag(tp, WOL_ENABLE)); 13334 else 13335 device_set_wakeup_capable(&tp->pdev->dev, false); 13336 } 13337 13338 static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd) 13339 { 13340 int i; 13341 u32 val; 13342 13343 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START); 13344 tw32(OTP_CTRL, cmd); 13345 13346 /* Wait for up to 1 ms for command to execute. */ 13347 for (i = 0; i < 100; i++) { 13348 val = tr32(OTP_STATUS); 13349 if (val & OTP_STATUS_CMD_DONE) 13350 break; 13351 udelay(10); 13352 } 13353 13354 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY; 13355 } 13356 13357 /* Read the gphy configuration from the OTP region of the chip. The gphy 13358 * configuration is a 32-bit value that straddles the alignment boundary. 13359 * We do two 32-bit reads and then shift and merge the results. 13360 */ 13361 static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp) 13362 { 13363 u32 bhalf_otp, thalf_otp; 13364 13365 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC); 13366 13367 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT)) 13368 return 0; 13369 13370 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1); 13371 13372 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 13373 return 0; 13374 13375 thalf_otp = tr32(OTP_READ_DATA); 13376 13377 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2); 13378 13379 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 13380 return 0; 13381 13382 bhalf_otp = tr32(OTP_READ_DATA); 13383 13384 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); 13385 } 13386 13387 static void __devinit tg3_phy_init_link_config(struct tg3 *tp) 13388 { 13389 u32 adv = ADVERTISED_Autoneg; 13390 13391 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 13392 adv |= ADVERTISED_1000baseT_Half | 13393 ADVERTISED_1000baseT_Full; 13394 13395 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 13396 adv |= ADVERTISED_100baseT_Half | 13397 ADVERTISED_100baseT_Full | 13398 ADVERTISED_10baseT_Half | 13399 ADVERTISED_10baseT_Full | 13400 ADVERTISED_TP; 13401 else 13402 adv |= ADVERTISED_FIBRE; 13403 13404 tp->link_config.advertising = adv; 13405 tp->link_config.speed = SPEED_UNKNOWN; 13406 tp->link_config.duplex = DUPLEX_UNKNOWN; 13407 tp->link_config.autoneg = AUTONEG_ENABLE; 13408 tp->link_config.active_speed = SPEED_UNKNOWN; 13409 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 13410 13411 tp->old_link = -1; 13412 } 13413 13414 static int __devinit tg3_phy_probe(struct tg3 *tp) 13415 { 13416 u32 hw_phy_id_1, hw_phy_id_2; 13417 u32 hw_phy_id, hw_phy_id_masked; 13418 int err; 13419 13420 /* flow control autonegotiation is default behavior */ 13421 tg3_flag_set(tp, PAUSE_AUTONEG); 13422 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX; 13423 13424 if (tg3_flag(tp, USE_PHYLIB)) 13425 return tg3_phy_init(tp); 13426 13427 /* Reading the PHY ID register can conflict with ASF 13428 * firmware access to the PHY hardware. 13429 */ 13430 err = 0; 13431 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) { 13432 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID; 13433 } else { 13434 /* Now read the physical PHY_ID from the chip and verify 13435 * that it is sane. If it doesn't look good, we fall back 13436 * to either the hard-coded table based PHY_ID and failing 13437 * that the value found in the eeprom area. 13438 */ 13439 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1); 13440 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2); 13441 13442 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10; 13443 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16; 13444 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0; 13445 13446 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK; 13447 } 13448 13449 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) { 13450 tp->phy_id = hw_phy_id; 13451 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002) 13452 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 13453 else 13454 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES; 13455 } else { 13456 if (tp->phy_id != TG3_PHY_ID_INVALID) { 13457 /* Do nothing, phy ID already set up in 13458 * tg3_get_eeprom_hw_cfg(). 13459 */ 13460 } else { 13461 struct subsys_tbl_ent *p; 13462 13463 /* No eeprom signature? Try the hardcoded 13464 * subsys device table. 13465 */ 13466 p = tg3_lookup_by_subsys(tp); 13467 if (!p) 13468 return -ENODEV; 13469 13470 tp->phy_id = p->phy_id; 13471 if (!tp->phy_id || 13472 tp->phy_id == TG3_PHY_ID_BCM8002) 13473 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 13474 } 13475 } 13476 13477 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 13478 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 13479 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || 13480 (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 && 13481 tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) || 13482 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 && 13483 tp->pci_chip_rev_id != CHIPREV_ID_57765_A0))) 13484 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 13485 13486 tg3_phy_init_link_config(tp); 13487 13488 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 13489 !tg3_flag(tp, ENABLE_APE) && 13490 !tg3_flag(tp, ENABLE_ASF)) { 13491 u32 bmsr, dummy; 13492 13493 tg3_readphy(tp, MII_BMSR, &bmsr); 13494 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 13495 (bmsr & BMSR_LSTATUS)) 13496 goto skip_phy_reset; 13497 13498 err = tg3_phy_reset(tp); 13499 if (err) 13500 return err; 13501 13502 tg3_phy_set_wirespeed(tp); 13503 13504 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) { 13505 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 13506 tp->link_config.flowctrl); 13507 13508 tg3_writephy(tp, MII_BMCR, 13509 BMCR_ANENABLE | BMCR_ANRESTART); 13510 } 13511 } 13512 13513 skip_phy_reset: 13514 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 13515 err = tg3_init_5401phy_dsp(tp); 13516 if (err) 13517 return err; 13518 13519 err = tg3_init_5401phy_dsp(tp); 13520 } 13521 13522 return err; 13523 } 13524 13525 static void __devinit tg3_read_vpd(struct tg3 *tp) 13526 { 13527 u8 *vpd_data; 13528 unsigned int block_end, rosize, len; 13529 u32 vpdlen; 13530 int j, i = 0; 13531 13532 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen); 13533 if (!vpd_data) 13534 goto out_no_vpd; 13535 13536 i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA); 13537 if (i < 0) 13538 goto out_not_found; 13539 13540 rosize = pci_vpd_lrdt_size(&vpd_data[i]); 13541 block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize; 13542 i += PCI_VPD_LRDT_TAG_SIZE; 13543 13544 if (block_end > vpdlen) 13545 goto out_not_found; 13546 13547 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 13548 PCI_VPD_RO_KEYWORD_MFR_ID); 13549 if (j > 0) { 13550 len = pci_vpd_info_field_size(&vpd_data[j]); 13551 13552 j += PCI_VPD_INFO_FLD_HDR_SIZE; 13553 if (j + len > block_end || len != 4 || 13554 memcmp(&vpd_data[j], "1028", 4)) 13555 goto partno; 13556 13557 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 13558 PCI_VPD_RO_KEYWORD_VENDOR0); 13559 if (j < 0) 13560 goto partno; 13561 13562 len = pci_vpd_info_field_size(&vpd_data[j]); 13563 13564 j += PCI_VPD_INFO_FLD_HDR_SIZE; 13565 if (j + len > block_end) 13566 goto partno; 13567 13568 memcpy(tp->fw_ver, &vpd_data[j], len); 13569 strncat(tp->fw_ver, " bc ", vpdlen - len - 1); 13570 } 13571 13572 partno: 13573 i = pci_vpd_find_info_keyword(vpd_data, i, rosize, 13574 PCI_VPD_RO_KEYWORD_PARTNO); 13575 if (i < 0) 13576 goto out_not_found; 13577 13578 len = pci_vpd_info_field_size(&vpd_data[i]); 13579 13580 i += PCI_VPD_INFO_FLD_HDR_SIZE; 13581 if (len > TG3_BPN_SIZE || 13582 (len + i) > vpdlen) 13583 goto out_not_found; 13584 13585 memcpy(tp->board_part_number, &vpd_data[i], len); 13586 13587 out_not_found: 13588 kfree(vpd_data); 13589 if (tp->board_part_number[0]) 13590 return; 13591 13592 out_no_vpd: 13593 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { 13594 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717) 13595 strcpy(tp->board_part_number, "BCM5717"); 13596 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718) 13597 strcpy(tp->board_part_number, "BCM5718"); 13598 else 13599 goto nomatch; 13600 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 13601 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780) 13602 strcpy(tp->board_part_number, "BCM57780"); 13603 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760) 13604 strcpy(tp->board_part_number, "BCM57760"); 13605 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790) 13606 strcpy(tp->board_part_number, "BCM57790"); 13607 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788) 13608 strcpy(tp->board_part_number, "BCM57788"); 13609 else 13610 goto nomatch; 13611 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) { 13612 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761) 13613 strcpy(tp->board_part_number, "BCM57761"); 13614 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765) 13615 strcpy(tp->board_part_number, "BCM57765"); 13616 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781) 13617 strcpy(tp->board_part_number, "BCM57781"); 13618 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785) 13619 strcpy(tp->board_part_number, "BCM57785"); 13620 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791) 13621 strcpy(tp->board_part_number, "BCM57791"); 13622 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 13623 strcpy(tp->board_part_number, "BCM57795"); 13624 else 13625 goto nomatch; 13626 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) { 13627 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762) 13628 strcpy(tp->board_part_number, "BCM57762"); 13629 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766) 13630 strcpy(tp->board_part_number, "BCM57766"); 13631 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782) 13632 strcpy(tp->board_part_number, "BCM57782"); 13633 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 13634 strcpy(tp->board_part_number, "BCM57786"); 13635 else 13636 goto nomatch; 13637 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 13638 strcpy(tp->board_part_number, "BCM95906"); 13639 } else { 13640 nomatch: 13641 strcpy(tp->board_part_number, "none"); 13642 } 13643 } 13644 13645 static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) 13646 { 13647 u32 val; 13648 13649 if (tg3_nvram_read(tp, offset, &val) || 13650 (val & 0xfc000000) != 0x0c000000 || 13651 tg3_nvram_read(tp, offset + 4, &val) || 13652 val != 0) 13653 return 0; 13654 13655 return 1; 13656 } 13657 13658 static void __devinit tg3_read_bc_ver(struct tg3 *tp) 13659 { 13660 u32 val, offset, start, ver_offset; 13661 int i, dst_off; 13662 bool newver = false; 13663 13664 if (tg3_nvram_read(tp, 0xc, &offset) || 13665 tg3_nvram_read(tp, 0x4, &start)) 13666 return; 13667 13668 offset = tg3_nvram_logical_addr(tp, offset); 13669 13670 if (tg3_nvram_read(tp, offset, &val)) 13671 return; 13672 13673 if ((val & 0xfc000000) == 0x0c000000) { 13674 if (tg3_nvram_read(tp, offset + 4, &val)) 13675 return; 13676 13677 if (val == 0) 13678 newver = true; 13679 } 13680 13681 dst_off = strlen(tp->fw_ver); 13682 13683 if (newver) { 13684 if (TG3_VER_SIZE - dst_off < 16 || 13685 tg3_nvram_read(tp, offset + 8, &ver_offset)) 13686 return; 13687 13688 offset = offset + ver_offset - start; 13689 for (i = 0; i < 16; i += 4) { 13690 __be32 v; 13691 if (tg3_nvram_read_be32(tp, offset + i, &v)) 13692 return; 13693 13694 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v)); 13695 } 13696 } else { 13697 u32 major, minor; 13698 13699 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset)) 13700 return; 13701 13702 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >> 13703 TG3_NVM_BCVER_MAJSFT; 13704 minor = ver_offset & TG3_NVM_BCVER_MINMSK; 13705 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off, 13706 "v%d.%02d", major, minor); 13707 } 13708 } 13709 13710 static void __devinit tg3_read_hwsb_ver(struct tg3 *tp) 13711 { 13712 u32 val, major, minor; 13713 13714 /* Use native endian representation */ 13715 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val)) 13716 return; 13717 13718 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >> 13719 TG3_NVM_HWSB_CFG1_MAJSFT; 13720 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >> 13721 TG3_NVM_HWSB_CFG1_MINSFT; 13722 13723 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); 13724 } 13725 13726 static void __devinit tg3_read_sb_ver(struct tg3 *tp, u32 val) 13727 { 13728 u32 offset, major, minor, build; 13729 13730 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1); 13731 13732 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1) 13733 return; 13734 13735 switch (val & TG3_EEPROM_SB_REVISION_MASK) { 13736 case TG3_EEPROM_SB_REVISION_0: 13737 offset = TG3_EEPROM_SB_F1R0_EDH_OFF; 13738 break; 13739 case TG3_EEPROM_SB_REVISION_2: 13740 offset = TG3_EEPROM_SB_F1R2_EDH_OFF; 13741 break; 13742 case TG3_EEPROM_SB_REVISION_3: 13743 offset = TG3_EEPROM_SB_F1R3_EDH_OFF; 13744 break; 13745 case TG3_EEPROM_SB_REVISION_4: 13746 offset = TG3_EEPROM_SB_F1R4_EDH_OFF; 13747 break; 13748 case TG3_EEPROM_SB_REVISION_5: 13749 offset = TG3_EEPROM_SB_F1R5_EDH_OFF; 13750 break; 13751 case TG3_EEPROM_SB_REVISION_6: 13752 offset = TG3_EEPROM_SB_F1R6_EDH_OFF; 13753 break; 13754 default: 13755 return; 13756 } 13757 13758 if (tg3_nvram_read(tp, offset, &val)) 13759 return; 13760 13761 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >> 13762 TG3_EEPROM_SB_EDH_BLD_SHFT; 13763 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >> 13764 TG3_EEPROM_SB_EDH_MAJ_SHFT; 13765 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK; 13766 13767 if (minor > 99 || build > 26) 13768 return; 13769 13770 offset = strlen(tp->fw_ver); 13771 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset, 13772 " v%d.%02d", major, minor); 13773 13774 if (build > 0) { 13775 offset = strlen(tp->fw_ver); 13776 if (offset < TG3_VER_SIZE - 1) 13777 tp->fw_ver[offset] = 'a' + build - 1; 13778 } 13779 } 13780 13781 static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp) 13782 { 13783 u32 val, offset, start; 13784 int i, vlen; 13785 13786 for (offset = TG3_NVM_DIR_START; 13787 offset < TG3_NVM_DIR_END; 13788 offset += TG3_NVM_DIRENT_SIZE) { 13789 if (tg3_nvram_read(tp, offset, &val)) 13790 return; 13791 13792 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI) 13793 break; 13794 } 13795 13796 if (offset == TG3_NVM_DIR_END) 13797 return; 13798 13799 if (!tg3_flag(tp, 5705_PLUS)) 13800 start = 0x08000000; 13801 else if (tg3_nvram_read(tp, offset - 4, &start)) 13802 return; 13803 13804 if (tg3_nvram_read(tp, offset + 4, &offset) || 13805 !tg3_fw_img_is_valid(tp, offset) || 13806 tg3_nvram_read(tp, offset + 8, &val)) 13807 return; 13808 13809 offset += val - start; 13810 13811 vlen = strlen(tp->fw_ver); 13812 13813 tp->fw_ver[vlen++] = ','; 13814 tp->fw_ver[vlen++] = ' '; 13815 13816 for (i = 0; i < 4; i++) { 13817 __be32 v; 13818 if (tg3_nvram_read_be32(tp, offset, &v)) 13819 return; 13820 13821 offset += sizeof(v); 13822 13823 if (vlen > TG3_VER_SIZE - sizeof(v)) { 13824 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen); 13825 break; 13826 } 13827 13828 memcpy(&tp->fw_ver[vlen], &v, sizeof(v)); 13829 vlen += sizeof(v); 13830 } 13831 } 13832 13833 static void __devinit tg3_read_dash_ver(struct tg3 *tp) 13834 { 13835 int vlen; 13836 u32 apedata; 13837 char *fwtype; 13838 13839 if (!tg3_flag(tp, ENABLE_APE) || !tg3_flag(tp, ENABLE_ASF)) 13840 return; 13841 13842 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 13843 if (apedata != APE_SEG_SIG_MAGIC) 13844 return; 13845 13846 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 13847 if (!(apedata & APE_FW_STATUS_READY)) 13848 return; 13849 13850 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 13851 13852 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) { 13853 tg3_flag_set(tp, APE_HAS_NCSI); 13854 fwtype = "NCSI"; 13855 } else { 13856 fwtype = "DASH"; 13857 } 13858 13859 vlen = strlen(tp->fw_ver); 13860 13861 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d", 13862 fwtype, 13863 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT, 13864 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT, 13865 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT, 13866 (apedata & APE_FW_VERSION_BLDMSK)); 13867 } 13868 13869 static void __devinit tg3_read_fw_ver(struct tg3 *tp) 13870 { 13871 u32 val; 13872 bool vpd_vers = false; 13873 13874 if (tp->fw_ver[0] != 0) 13875 vpd_vers = true; 13876 13877 if (tg3_flag(tp, NO_NVRAM)) { 13878 strcat(tp->fw_ver, "sb"); 13879 return; 13880 } 13881 13882 if (tg3_nvram_read(tp, 0, &val)) 13883 return; 13884 13885 if (val == TG3_EEPROM_MAGIC) 13886 tg3_read_bc_ver(tp); 13887 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) 13888 tg3_read_sb_ver(tp, val); 13889 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 13890 tg3_read_hwsb_ver(tp); 13891 else 13892 return; 13893 13894 if (vpd_vers) 13895 goto done; 13896 13897 if (tg3_flag(tp, ENABLE_APE)) { 13898 if (tg3_flag(tp, ENABLE_ASF)) 13899 tg3_read_dash_ver(tp); 13900 } else if (tg3_flag(tp, ENABLE_ASF)) { 13901 tg3_read_mgmtfw_ver(tp); 13902 } 13903 13904 done: 13905 tp->fw_ver[TG3_VER_SIZE - 1] = 0; 13906 } 13907 13908 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp) 13909 { 13910 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 13911 return TG3_RX_RET_MAX_SIZE_5717; 13912 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) 13913 return TG3_RX_RET_MAX_SIZE_5700; 13914 else 13915 return TG3_RX_RET_MAX_SIZE_5705; 13916 } 13917 13918 static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = { 13919 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) }, 13920 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) }, 13921 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) }, 13922 { }, 13923 }; 13924 13925 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp) 13926 { 13927 struct pci_dev *peer; 13928 unsigned int func, devnr = tp->pdev->devfn & ~7; 13929 13930 for (func = 0; func < 8; func++) { 13931 peer = pci_get_slot(tp->pdev->bus, devnr | func); 13932 if (peer && peer != tp->pdev) 13933 break; 13934 pci_dev_put(peer); 13935 } 13936 /* 5704 can be configured in single-port mode, set peer to 13937 * tp->pdev in that case. 13938 */ 13939 if (!peer) { 13940 peer = tp->pdev; 13941 return peer; 13942 } 13943 13944 /* 13945 * We don't need to keep the refcount elevated; there's no way 13946 * to remove one half of this device without removing the other 13947 */ 13948 pci_dev_put(peer); 13949 13950 return peer; 13951 } 13952 13953 static void __devinit tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) 13954 { 13955 tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT; 13956 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) { 13957 u32 reg; 13958 13959 /* All devices that use the alternate 13960 * ASIC REV location have a CPMU. 13961 */ 13962 tg3_flag_set(tp, CPMU_PRESENT); 13963 13964 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 13965 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 13966 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 13967 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) 13968 reg = TG3PCI_GEN2_PRODID_ASICREV; 13969 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || 13970 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || 13971 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 || 13972 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 || 13973 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 13974 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 13975 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 || 13976 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 || 13977 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 || 13978 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 13979 reg = TG3PCI_GEN15_PRODID_ASICREV; 13980 else 13981 reg = TG3PCI_PRODID_ASICREV; 13982 13983 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id); 13984 } 13985 13986 /* Wrong chip ID in 5752 A0. This code can be removed later 13987 * as A0 is not in production. 13988 */ 13989 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW) 13990 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; 13991 13992 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 13993 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 13994 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 13995 tg3_flag_set(tp, 5717_PLUS); 13996 13997 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 || 13998 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) 13999 tg3_flag_set(tp, 57765_CLASS); 14000 14001 if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS)) 14002 tg3_flag_set(tp, 57765_PLUS); 14003 14004 /* Intentionally exclude ASIC_REV_5906 */ 14005 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 14006 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 14007 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 14008 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 14009 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 14010 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 14011 tg3_flag(tp, 57765_PLUS)) 14012 tg3_flag_set(tp, 5755_PLUS); 14013 14014 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 || 14015 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) 14016 tg3_flag_set(tp, 5780_CLASS); 14017 14018 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 14019 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 14020 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 || 14021 tg3_flag(tp, 5755_PLUS) || 14022 tg3_flag(tp, 5780_CLASS)) 14023 tg3_flag_set(tp, 5750_PLUS); 14024 14025 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || 14026 tg3_flag(tp, 5750_PLUS)) 14027 tg3_flag_set(tp, 5705_PLUS); 14028 } 14029 14030 static int __devinit tg3_get_invariants(struct tg3 *tp) 14031 { 14032 u32 misc_ctrl_reg; 14033 u32 pci_state_reg, grc_misc_cfg; 14034 u32 val; 14035 u16 pci_cmd; 14036 int err; 14037 14038 /* Force memory write invalidate off. If we leave it on, 14039 * then on 5700_BX chips we have to enable a workaround. 14040 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary 14041 * to match the cacheline size. The Broadcom driver have this 14042 * workaround but turns MWI off all the times so never uses 14043 * it. This seems to suggest that the workaround is insufficient. 14044 */ 14045 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 14046 pci_cmd &= ~PCI_COMMAND_INVALIDATE; 14047 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 14048 14049 /* Important! -- Make sure register accesses are byteswapped 14050 * correctly. Also, for those chips that require it, make 14051 * sure that indirect register accesses are enabled before 14052 * the first operation. 14053 */ 14054 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 14055 &misc_ctrl_reg); 14056 tp->misc_host_ctrl |= (misc_ctrl_reg & 14057 MISC_HOST_CTRL_CHIPREV); 14058 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 14059 tp->misc_host_ctrl); 14060 14061 tg3_detect_asic_rev(tp, misc_ctrl_reg); 14062 14063 /* If we have 5702/03 A1 or A2 on certain ICH chipsets, 14064 * we need to disable memory and use config. cycles 14065 * only to access all registers. The 5702/03 chips 14066 * can mistakenly decode the special cycles from the 14067 * ICH chipsets as memory write cycles, causing corruption 14068 * of register and memory space. Only certain ICH bridges 14069 * will drive special cycles with non-zero data during the 14070 * address phase which can fall within the 5703's address 14071 * range. This is not an ICH bug as the PCI spec allows 14072 * non-zero address during special cycles. However, only 14073 * these ICH bridges are known to drive non-zero addresses 14074 * during special cycles. 14075 * 14076 * Since special cycles do not cross PCI bridges, we only 14077 * enable this workaround if the 5703 is on the secondary 14078 * bus of these ICH bridges. 14079 */ 14080 if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) || 14081 (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) { 14082 static struct tg3_dev_id { 14083 u32 vendor; 14084 u32 device; 14085 u32 rev; 14086 } ich_chipsets[] = { 14087 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8, 14088 PCI_ANY_ID }, 14089 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8, 14090 PCI_ANY_ID }, 14091 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11, 14092 0xa }, 14093 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6, 14094 PCI_ANY_ID }, 14095 { }, 14096 }; 14097 struct tg3_dev_id *pci_id = &ich_chipsets[0]; 14098 struct pci_dev *bridge = NULL; 14099 14100 while (pci_id->vendor != 0) { 14101 bridge = pci_get_device(pci_id->vendor, pci_id->device, 14102 bridge); 14103 if (!bridge) { 14104 pci_id++; 14105 continue; 14106 } 14107 if (pci_id->rev != PCI_ANY_ID) { 14108 if (bridge->revision > pci_id->rev) 14109 continue; 14110 } 14111 if (bridge->subordinate && 14112 (bridge->subordinate->number == 14113 tp->pdev->bus->number)) { 14114 tg3_flag_set(tp, ICH_WORKAROUND); 14115 pci_dev_put(bridge); 14116 break; 14117 } 14118 } 14119 } 14120 14121 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 14122 static struct tg3_dev_id { 14123 u32 vendor; 14124 u32 device; 14125 } bridge_chipsets[] = { 14126 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, 14127 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, 14128 { }, 14129 }; 14130 struct tg3_dev_id *pci_id = &bridge_chipsets[0]; 14131 struct pci_dev *bridge = NULL; 14132 14133 while (pci_id->vendor != 0) { 14134 bridge = pci_get_device(pci_id->vendor, 14135 pci_id->device, 14136 bridge); 14137 if (!bridge) { 14138 pci_id++; 14139 continue; 14140 } 14141 if (bridge->subordinate && 14142 (bridge->subordinate->number <= 14143 tp->pdev->bus->number) && 14144 (bridge->subordinate->subordinate >= 14145 tp->pdev->bus->number)) { 14146 tg3_flag_set(tp, 5701_DMA_BUG); 14147 pci_dev_put(bridge); 14148 break; 14149 } 14150 } 14151 } 14152 14153 /* The EPB bridge inside 5714, 5715, and 5780 cannot support 14154 * DMA addresses > 40-bit. This bridge may have other additional 14155 * 57xx devices behind it in some 4-port NIC designs for example. 14156 * Any tg3 device found behind the bridge will also need the 40-bit 14157 * DMA workaround. 14158 */ 14159 if (tg3_flag(tp, 5780_CLASS)) { 14160 tg3_flag_set(tp, 40BIT_DMA_BUG); 14161 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI); 14162 } else { 14163 struct pci_dev *bridge = NULL; 14164 14165 do { 14166 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS, 14167 PCI_DEVICE_ID_SERVERWORKS_EPB, 14168 bridge); 14169 if (bridge && bridge->subordinate && 14170 (bridge->subordinate->number <= 14171 tp->pdev->bus->number) && 14172 (bridge->subordinate->subordinate >= 14173 tp->pdev->bus->number)) { 14174 tg3_flag_set(tp, 40BIT_DMA_BUG); 14175 pci_dev_put(bridge); 14176 break; 14177 } 14178 } while (bridge); 14179 } 14180 14181 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 14182 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) 14183 tp->pdev_peer = tg3_find_peer(tp); 14184 14185 /* Determine TSO capabilities */ 14186 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) 14187 ; /* Do nothing. HW bug. */ 14188 else if (tg3_flag(tp, 57765_PLUS)) 14189 tg3_flag_set(tp, HW_TSO_3); 14190 else if (tg3_flag(tp, 5755_PLUS) || 14191 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 14192 tg3_flag_set(tp, HW_TSO_2); 14193 else if (tg3_flag(tp, 5750_PLUS)) { 14194 tg3_flag_set(tp, HW_TSO_1); 14195 tg3_flag_set(tp, TSO_BUG); 14196 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 && 14197 tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2) 14198 tg3_flag_clear(tp, TSO_BUG); 14199 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 14200 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 14201 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 14202 tg3_flag_set(tp, TSO_BUG); 14203 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) 14204 tp->fw_needed = FIRMWARE_TG3TSO5; 14205 else 14206 tp->fw_needed = FIRMWARE_TG3TSO; 14207 } 14208 14209 /* Selectively allow TSO based on operating conditions */ 14210 if (tg3_flag(tp, HW_TSO_1) || 14211 tg3_flag(tp, HW_TSO_2) || 14212 tg3_flag(tp, HW_TSO_3) || 14213 tp->fw_needed) { 14214 /* For firmware TSO, assume ASF is disabled. 14215 * We'll disable TSO later if we discover ASF 14216 * is enabled in tg3_get_eeprom_hw_cfg(). 14217 */ 14218 tg3_flag_set(tp, TSO_CAPABLE); 14219 } else { 14220 tg3_flag_clear(tp, TSO_CAPABLE); 14221 tg3_flag_clear(tp, TSO_BUG); 14222 tp->fw_needed = NULL; 14223 } 14224 14225 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) 14226 tp->fw_needed = FIRMWARE_TG3; 14227 14228 tp->irq_max = 1; 14229 14230 if (tg3_flag(tp, 5750_PLUS)) { 14231 tg3_flag_set(tp, SUPPORT_MSI); 14232 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX || 14233 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX || 14234 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 && 14235 tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 && 14236 tp->pdev_peer == tp->pdev)) 14237 tg3_flag_clear(tp, SUPPORT_MSI); 14238 14239 if (tg3_flag(tp, 5755_PLUS) || 14240 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 14241 tg3_flag_set(tp, 1SHOT_MSI); 14242 } 14243 14244 if (tg3_flag(tp, 57765_PLUS)) { 14245 tg3_flag_set(tp, SUPPORT_MSIX); 14246 tp->irq_max = TG3_IRQ_MAX_VECS; 14247 tg3_rss_init_dflt_indir_tbl(tp); 14248 } 14249 } 14250 14251 if (tg3_flag(tp, 5755_PLUS)) 14252 tg3_flag_set(tp, SHORT_DMA_BUG); 14253 14254 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 14255 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K; 14256 14257 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 14258 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 14259 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 14260 tg3_flag_set(tp, LRG_PROD_RING_CAP); 14261 14262 if (tg3_flag(tp, 57765_PLUS) && 14263 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0) 14264 tg3_flag_set(tp, USE_JUMBO_BDFLAG); 14265 14266 if (!tg3_flag(tp, 5705_PLUS) || 14267 tg3_flag(tp, 5780_CLASS) || 14268 tg3_flag(tp, USE_JUMBO_BDFLAG)) 14269 tg3_flag_set(tp, JUMBO_CAPABLE); 14270 14271 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 14272 &pci_state_reg); 14273 14274 if (pci_is_pcie(tp->pdev)) { 14275 u16 lnkctl; 14276 14277 tg3_flag_set(tp, PCI_EXPRESS); 14278 14279 pci_read_config_word(tp->pdev, 14280 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 14281 &lnkctl); 14282 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) { 14283 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 14284 ASIC_REV_5906) { 14285 tg3_flag_clear(tp, HW_TSO_2); 14286 tg3_flag_clear(tp, TSO_CAPABLE); 14287 } 14288 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 14289 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 14290 tp->pci_chip_rev_id == CHIPREV_ID_57780_A0 || 14291 tp->pci_chip_rev_id == CHIPREV_ID_57780_A1) 14292 tg3_flag_set(tp, CLKREQ_BUG); 14293 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) { 14294 tg3_flag_set(tp, L1PLLPD_EN); 14295 } 14296 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 14297 /* BCM5785 devices are effectively PCIe devices, and should 14298 * follow PCIe codepaths, but do not have a PCIe capabilities 14299 * section. 14300 */ 14301 tg3_flag_set(tp, PCI_EXPRESS); 14302 } else if (!tg3_flag(tp, 5705_PLUS) || 14303 tg3_flag(tp, 5780_CLASS)) { 14304 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX); 14305 if (!tp->pcix_cap) { 14306 dev_err(&tp->pdev->dev, 14307 "Cannot find PCI-X capability, aborting\n"); 14308 return -EIO; 14309 } 14310 14311 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE)) 14312 tg3_flag_set(tp, PCIX_MODE); 14313 } 14314 14315 /* If we have an AMD 762 or VIA K8T800 chipset, write 14316 * reordering to the mailbox registers done by the host 14317 * controller can cause major troubles. We read back from 14318 * every mailbox register write to force the writes to be 14319 * posted to the chip in order. 14320 */ 14321 if (pci_dev_present(tg3_write_reorder_chipsets) && 14322 !tg3_flag(tp, PCI_EXPRESS)) 14323 tg3_flag_set(tp, MBOX_WRITE_REORDER); 14324 14325 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 14326 &tp->pci_cacheline_sz); 14327 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, 14328 &tp->pci_lat_timer); 14329 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 && 14330 tp->pci_lat_timer < 64) { 14331 tp->pci_lat_timer = 64; 14332 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 14333 tp->pci_lat_timer); 14334 } 14335 14336 /* Important! -- It is critical that the PCI-X hw workaround 14337 * situation is decided before the first MMIO register access. 14338 */ 14339 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) { 14340 /* 5700 BX chips need to have their TX producer index 14341 * mailboxes written twice to workaround a bug. 14342 */ 14343 tg3_flag_set(tp, TXD_MBOX_HWBUG); 14344 14345 /* If we are in PCI-X mode, enable register write workaround. 14346 * 14347 * The workaround is to use indirect register accesses 14348 * for all chip writes not to mailbox registers. 14349 */ 14350 if (tg3_flag(tp, PCIX_MODE)) { 14351 u32 pm_reg; 14352 14353 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 14354 14355 /* The chip can have it's power management PCI config 14356 * space registers clobbered due to this bug. 14357 * So explicitly force the chip into D0 here. 14358 */ 14359 pci_read_config_dword(tp->pdev, 14360 tp->pm_cap + PCI_PM_CTRL, 14361 &pm_reg); 14362 pm_reg &= ~PCI_PM_CTRL_STATE_MASK; 14363 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */; 14364 pci_write_config_dword(tp->pdev, 14365 tp->pm_cap + PCI_PM_CTRL, 14366 pm_reg); 14367 14368 /* Also, force SERR#/PERR# in PCI command. */ 14369 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 14370 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; 14371 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 14372 } 14373 } 14374 14375 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) 14376 tg3_flag_set(tp, PCI_HIGH_SPEED); 14377 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0) 14378 tg3_flag_set(tp, PCI_32BIT); 14379 14380 /* Chip-specific fixup from Broadcom driver */ 14381 if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) && 14382 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) { 14383 pci_state_reg |= PCISTATE_RETRY_SAME_DMA; 14384 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg); 14385 } 14386 14387 /* Default fast path register access methods */ 14388 tp->read32 = tg3_read32; 14389 tp->write32 = tg3_write32; 14390 tp->read32_mbox = tg3_read32; 14391 tp->write32_mbox = tg3_write32; 14392 tp->write32_tx_mbox = tg3_write32; 14393 tp->write32_rx_mbox = tg3_write32; 14394 14395 /* Various workaround register access methods */ 14396 if (tg3_flag(tp, PCIX_TARGET_HWBUG)) 14397 tp->write32 = tg3_write_indirect_reg32; 14398 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 || 14399 (tg3_flag(tp, PCI_EXPRESS) && 14400 tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) { 14401 /* 14402 * Back to back register writes can cause problems on these 14403 * chips, the workaround is to read back all reg writes 14404 * except those to mailbox regs. 14405 * 14406 * See tg3_write_indirect_reg32(). 14407 */ 14408 tp->write32 = tg3_write_flush_reg32; 14409 } 14410 14411 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) { 14412 tp->write32_tx_mbox = tg3_write32_tx_mbox; 14413 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 14414 tp->write32_rx_mbox = tg3_write_flush_reg32; 14415 } 14416 14417 if (tg3_flag(tp, ICH_WORKAROUND)) { 14418 tp->read32 = tg3_read_indirect_reg32; 14419 tp->write32 = tg3_write_indirect_reg32; 14420 tp->read32_mbox = tg3_read_indirect_mbox; 14421 tp->write32_mbox = tg3_write_indirect_mbox; 14422 tp->write32_tx_mbox = tg3_write_indirect_mbox; 14423 tp->write32_rx_mbox = tg3_write_indirect_mbox; 14424 14425 iounmap(tp->regs); 14426 tp->regs = NULL; 14427 14428 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 14429 pci_cmd &= ~PCI_COMMAND_MEMORY; 14430 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 14431 } 14432 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 14433 tp->read32_mbox = tg3_read32_mbox_5906; 14434 tp->write32_mbox = tg3_write32_mbox_5906; 14435 tp->write32_tx_mbox = tg3_write32_mbox_5906; 14436 tp->write32_rx_mbox = tg3_write32_mbox_5906; 14437 } 14438 14439 if (tp->write32 == tg3_write_indirect_reg32 || 14440 (tg3_flag(tp, PCIX_MODE) && 14441 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14442 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701))) 14443 tg3_flag_set(tp, SRAM_USE_CONFIG); 14444 14445 /* The memory arbiter has to be enabled in order for SRAM accesses 14446 * to succeed. Normally on powerup the tg3 chip firmware will make 14447 * sure it is enabled, but other entities such as system netboot 14448 * code might disable it. 14449 */ 14450 val = tr32(MEMARB_MODE); 14451 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 14452 14453 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; 14454 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 14455 tg3_flag(tp, 5780_CLASS)) { 14456 if (tg3_flag(tp, PCIX_MODE)) { 14457 pci_read_config_dword(tp->pdev, 14458 tp->pcix_cap + PCI_X_STATUS, 14459 &val); 14460 tp->pci_fn = val & 0x7; 14461 } 14462 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { 14463 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 14464 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) == 14465 NIC_SRAM_CPMUSTAT_SIG) { 14466 tp->pci_fn = val & TG3_CPMU_STATUS_FMSK_5717; 14467 tp->pci_fn = tp->pci_fn ? 1 : 0; 14468 } 14469 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 14470 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 14471 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 14472 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) == 14473 NIC_SRAM_CPMUSTAT_SIG) { 14474 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >> 14475 TG3_CPMU_STATUS_FSHFT_5719; 14476 } 14477 } 14478 14479 /* Get eeprom hw config before calling tg3_set_power_state(). 14480 * In particular, the TG3_FLAG_IS_NIC flag must be 14481 * determined before calling tg3_set_power_state() so that 14482 * we know whether or not to switch out of Vaux power. 14483 * When the flag is set, it means that GPIO1 is used for eeprom 14484 * write protect and also implies that it is a LOM where GPIOs 14485 * are not used to switch power. 14486 */ 14487 tg3_get_eeprom_hw_cfg(tp); 14488 14489 if (tp->fw_needed && tg3_flag(tp, ENABLE_ASF)) { 14490 tg3_flag_clear(tp, TSO_CAPABLE); 14491 tg3_flag_clear(tp, TSO_BUG); 14492 tp->fw_needed = NULL; 14493 } 14494 14495 if (tg3_flag(tp, ENABLE_APE)) { 14496 /* Allow reads and writes to the 14497 * APE register and memory space. 14498 */ 14499 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR | 14500 PCISTATE_ALLOW_APE_SHMEM_WR | 14501 PCISTATE_ALLOW_APE_PSPACE_WR; 14502 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, 14503 pci_state_reg); 14504 14505 tg3_ape_lock_init(tp); 14506 } 14507 14508 /* Set up tp->grc_local_ctrl before calling 14509 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high 14510 * will bring 5700's external PHY out of reset. 14511 * It is also used as eeprom write protect on LOMs. 14512 */ 14513 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM; 14514 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14515 tg3_flag(tp, EEPROM_WRITE_PROT)) 14516 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 14517 GRC_LCLCTRL_GPIO_OUTPUT1); 14518 /* Unused GPIO3 must be driven as output on 5752 because there 14519 * are no pull-up resistors on unused GPIO pins. 14520 */ 14521 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 14522 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 14523 14524 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 14525 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 14526 tg3_flag(tp, 57765_CLASS)) 14527 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 14528 14529 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 14530 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 14531 /* Turn off the debug UART. */ 14532 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 14533 if (tg3_flag(tp, IS_NIC)) 14534 /* Keep VMain power. */ 14535 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 14536 GRC_LCLCTRL_GPIO_OUTPUT0; 14537 } 14538 14539 /* Switch out of Vaux if it is a NIC */ 14540 tg3_pwrsrc_switch_to_vmain(tp); 14541 14542 /* Derive initial jumbo mode from MTU assigned in 14543 * ether_setup() via the alloc_etherdev() call 14544 */ 14545 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS)) 14546 tg3_flag_set(tp, JUMBO_RING_ENABLE); 14547 14548 /* Determine WakeOnLan speed to use. */ 14549 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14550 tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 14551 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 || 14552 tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) { 14553 tg3_flag_clear(tp, WOL_SPEED_100MB); 14554 } else { 14555 tg3_flag_set(tp, WOL_SPEED_100MB); 14556 } 14557 14558 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 14559 tp->phy_flags |= TG3_PHYFLG_IS_FET; 14560 14561 /* A few boards don't want Ethernet@WireSpeed phy feature */ 14562 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14563 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 14564 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) && 14565 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) || 14566 (tp->phy_flags & TG3_PHYFLG_IS_FET) || 14567 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 14568 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED; 14569 14570 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX || 14571 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX) 14572 tp->phy_flags |= TG3_PHYFLG_ADC_BUG; 14573 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) 14574 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG; 14575 14576 if (tg3_flag(tp, 5705_PLUS) && 14577 !(tp->phy_flags & TG3_PHYFLG_IS_FET) && 14578 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 14579 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 && 14580 !tg3_flag(tp, 57765_PLUS)) { 14581 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 14582 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 14583 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 14584 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) { 14585 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 && 14586 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722) 14587 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG; 14588 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M) 14589 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM; 14590 } else 14591 tp->phy_flags |= TG3_PHYFLG_BER_BUG; 14592 } 14593 14594 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 14595 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) { 14596 tp->phy_otp = tg3_read_otp_phycfg(tp); 14597 if (tp->phy_otp == 0) 14598 tp->phy_otp = TG3_OTP_DEFAULT; 14599 } 14600 14601 if (tg3_flag(tp, CPMU_PRESENT)) 14602 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST; 14603 else 14604 tp->mi_mode = MAC_MI_MODE_BASE; 14605 14606 tp->coalesce_mode = 0; 14607 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX && 14608 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX) 14609 tp->coalesce_mode |= HOSTCC_MODE_32BYTE; 14610 14611 /* Set these bits to enable statistics workaround. */ 14612 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 14613 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 14614 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) { 14615 tp->coalesce_mode |= HOSTCC_MODE_ATTN; 14616 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN; 14617 } 14618 14619 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 14620 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 14621 tg3_flag_set(tp, USE_PHYLIB); 14622 14623 err = tg3_mdio_init(tp); 14624 if (err) 14625 return err; 14626 14627 /* Initialize data/descriptor byte/word swapping. */ 14628 val = tr32(GRC_MODE); 14629 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 14630 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | 14631 GRC_MODE_WORD_SWAP_B2HRX_DATA | 14632 GRC_MODE_B2HRX_ENABLE | 14633 GRC_MODE_HTX2B_ENABLE | 14634 GRC_MODE_HOST_STACKUP); 14635 else 14636 val &= GRC_MODE_HOST_STACKUP; 14637 14638 tw32(GRC_MODE, val | tp->grc_mode); 14639 14640 tg3_switch_clocks(tp); 14641 14642 /* Clear this out for sanity. */ 14643 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 14644 14645 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 14646 &pci_state_reg); 14647 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && 14648 !tg3_flag(tp, PCIX_TARGET_HWBUG)) { 14649 u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl); 14650 14651 if (chiprevid == CHIPREV_ID_5701_A0 || 14652 chiprevid == CHIPREV_ID_5701_B0 || 14653 chiprevid == CHIPREV_ID_5701_B2 || 14654 chiprevid == CHIPREV_ID_5701_B5) { 14655 void __iomem *sram_base; 14656 14657 /* Write some dummy words into the SRAM status block 14658 * area, see if it reads back correctly. If the return 14659 * value is bad, force enable the PCIX workaround. 14660 */ 14661 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK; 14662 14663 writel(0x00000000, sram_base); 14664 writel(0x00000000, sram_base + 4); 14665 writel(0xffffffff, sram_base + 4); 14666 if (readl(sram_base) != 0x00000000) 14667 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 14668 } 14669 } 14670 14671 udelay(50); 14672 tg3_nvram_init(tp); 14673 14674 grc_misc_cfg = tr32(GRC_MISC_CFG); 14675 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; 14676 14677 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 14678 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 || 14679 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M)) 14680 tg3_flag_set(tp, IS_5788); 14681 14682 if (!tg3_flag(tp, IS_5788) && 14683 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) 14684 tg3_flag_set(tp, TAGGED_STATUS); 14685 if (tg3_flag(tp, TAGGED_STATUS)) { 14686 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD | 14687 HOSTCC_MODE_CLRTICK_TXBD); 14688 14689 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS; 14690 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 14691 tp->misc_host_ctrl); 14692 } 14693 14694 /* Preserve the APE MAC_MODE bits */ 14695 if (tg3_flag(tp, ENABLE_APE)) 14696 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 14697 else 14698 tp->mac_mode = 0; 14699 14700 /* these are limited to 10/100 only */ 14701 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 && 14702 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) || 14703 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 14704 tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM && 14705 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 || 14706 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 || 14707 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) || 14708 (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM && 14709 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F || 14710 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F || 14711 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) || 14712 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790 || 14713 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 14714 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 14715 (tp->phy_flags & TG3_PHYFLG_IS_FET)) 14716 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY; 14717 14718 err = tg3_phy_probe(tp); 14719 if (err) { 14720 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err); 14721 /* ... but do not return immediately ... */ 14722 tg3_mdio_fini(tp); 14723 } 14724 14725 tg3_read_vpd(tp); 14726 tg3_read_fw_ver(tp); 14727 14728 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 14729 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 14730 } else { 14731 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 14732 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 14733 else 14734 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 14735 } 14736 14737 /* 5700 {AX,BX} chips have a broken status block link 14738 * change bit implementation, so we must use the 14739 * status register in those cases. 14740 */ 14741 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 14742 tg3_flag_set(tp, USE_LINKCHG_REG); 14743 else 14744 tg3_flag_clear(tp, USE_LINKCHG_REG); 14745 14746 /* The led_ctrl is set during tg3_phy_probe, here we might 14747 * have to force the link status polling mechanism based 14748 * upon subsystem IDs. 14749 */ 14750 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 14751 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 && 14752 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 14753 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 14754 tg3_flag_set(tp, USE_LINKCHG_REG); 14755 } 14756 14757 /* For all SERDES we poll the MAC status register. */ 14758 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 14759 tg3_flag_set(tp, POLL_SERDES); 14760 else 14761 tg3_flag_clear(tp, POLL_SERDES); 14762 14763 tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN; 14764 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD; 14765 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 && 14766 tg3_flag(tp, PCIX_MODE)) { 14767 tp->rx_offset = NET_SKB_PAD; 14768 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 14769 tp->rx_copy_thresh = ~(u16)0; 14770 #endif 14771 } 14772 14773 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1; 14774 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1; 14775 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1; 14776 14777 tp->rx_std_max_post = tp->rx_std_ring_mask + 1; 14778 14779 /* Increment the rx prod index on the rx std ring by at most 14780 * 8 for these chips to workaround hw errata. 14781 */ 14782 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 14783 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 14784 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 14785 tp->rx_std_max_post = 8; 14786 14787 if (tg3_flag(tp, ASPM_WORKAROUND)) 14788 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) & 14789 PCIE_PWR_MGMT_L1_THRESH_MSK; 14790 14791 return err; 14792 } 14793 14794 #ifdef CONFIG_SPARC 14795 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp) 14796 { 14797 struct net_device *dev = tp->dev; 14798 struct pci_dev *pdev = tp->pdev; 14799 struct device_node *dp = pci_device_to_OF_node(pdev); 14800 const unsigned char *addr; 14801 int len; 14802 14803 addr = of_get_property(dp, "local-mac-address", &len); 14804 if (addr && len == 6) { 14805 memcpy(dev->dev_addr, addr, 6); 14806 memcpy(dev->perm_addr, dev->dev_addr, 6); 14807 return 0; 14808 } 14809 return -ENODEV; 14810 } 14811 14812 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp) 14813 { 14814 struct net_device *dev = tp->dev; 14815 14816 memcpy(dev->dev_addr, idprom->id_ethaddr, 6); 14817 memcpy(dev->perm_addr, idprom->id_ethaddr, 6); 14818 return 0; 14819 } 14820 #endif 14821 14822 static int __devinit tg3_get_device_address(struct tg3 *tp) 14823 { 14824 struct net_device *dev = tp->dev; 14825 u32 hi, lo, mac_offset; 14826 int addr_ok = 0; 14827 14828 #ifdef CONFIG_SPARC 14829 if (!tg3_get_macaddr_sparc(tp)) 14830 return 0; 14831 #endif 14832 14833 mac_offset = 0x7c; 14834 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 14835 tg3_flag(tp, 5780_CLASS)) { 14836 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 14837 mac_offset = 0xcc; 14838 if (tg3_nvram_lock(tp)) 14839 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); 14840 else 14841 tg3_nvram_unlock(tp); 14842 } else if (tg3_flag(tp, 5717_PLUS)) { 14843 if (tp->pci_fn & 1) 14844 mac_offset = 0xcc; 14845 if (tp->pci_fn > 1) 14846 mac_offset += 0x18c; 14847 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 14848 mac_offset = 0x10; 14849 14850 /* First try to get it from MAC address mailbox. */ 14851 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); 14852 if ((hi >> 16) == 0x484b) { 14853 dev->dev_addr[0] = (hi >> 8) & 0xff; 14854 dev->dev_addr[1] = (hi >> 0) & 0xff; 14855 14856 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo); 14857 dev->dev_addr[2] = (lo >> 24) & 0xff; 14858 dev->dev_addr[3] = (lo >> 16) & 0xff; 14859 dev->dev_addr[4] = (lo >> 8) & 0xff; 14860 dev->dev_addr[5] = (lo >> 0) & 0xff; 14861 14862 /* Some old bootcode may report a 0 MAC address in SRAM */ 14863 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]); 14864 } 14865 if (!addr_ok) { 14866 /* Next, try NVRAM. */ 14867 if (!tg3_flag(tp, NO_NVRAM) && 14868 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) && 14869 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) { 14870 memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2); 14871 memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo)); 14872 } 14873 /* Finally just fetch it out of the MAC control regs. */ 14874 else { 14875 hi = tr32(MAC_ADDR_0_HIGH); 14876 lo = tr32(MAC_ADDR_0_LOW); 14877 14878 dev->dev_addr[5] = lo & 0xff; 14879 dev->dev_addr[4] = (lo >> 8) & 0xff; 14880 dev->dev_addr[3] = (lo >> 16) & 0xff; 14881 dev->dev_addr[2] = (lo >> 24) & 0xff; 14882 dev->dev_addr[1] = hi & 0xff; 14883 dev->dev_addr[0] = (hi >> 8) & 0xff; 14884 } 14885 } 14886 14887 if (!is_valid_ether_addr(&dev->dev_addr[0])) { 14888 #ifdef CONFIG_SPARC 14889 if (!tg3_get_default_macaddr_sparc(tp)) 14890 return 0; 14891 #endif 14892 return -EINVAL; 14893 } 14894 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); 14895 return 0; 14896 } 14897 14898 #define BOUNDARY_SINGLE_CACHELINE 1 14899 #define BOUNDARY_MULTI_CACHELINE 2 14900 14901 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val) 14902 { 14903 int cacheline_size; 14904 u8 byte; 14905 int goal; 14906 14907 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte); 14908 if (byte == 0) 14909 cacheline_size = 1024; 14910 else 14911 cacheline_size = (int) byte * 4; 14912 14913 /* On 5703 and later chips, the boundary bits have no 14914 * effect. 14915 */ 14916 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 14917 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 14918 !tg3_flag(tp, PCI_EXPRESS)) 14919 goto out; 14920 14921 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) 14922 goal = BOUNDARY_MULTI_CACHELINE; 14923 #else 14924 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA) 14925 goal = BOUNDARY_SINGLE_CACHELINE; 14926 #else 14927 goal = 0; 14928 #endif 14929 #endif 14930 14931 if (tg3_flag(tp, 57765_PLUS)) { 14932 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 14933 goto out; 14934 } 14935 14936 if (!goal) 14937 goto out; 14938 14939 /* PCI controllers on most RISC systems tend to disconnect 14940 * when a device tries to burst across a cache-line boundary. 14941 * Therefore, letting tg3 do so just wastes PCI bandwidth. 14942 * 14943 * Unfortunately, for PCI-E there are only limited 14944 * write-side controls for this, and thus for reads 14945 * we will still get the disconnects. We'll also waste 14946 * these PCI cycles for both read and write for chips 14947 * other than 5700 and 5701 which do not implement the 14948 * boundary bits. 14949 */ 14950 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) { 14951 switch (cacheline_size) { 14952 case 16: 14953 case 32: 14954 case 64: 14955 case 128: 14956 if (goal == BOUNDARY_SINGLE_CACHELINE) { 14957 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX | 14958 DMA_RWCTRL_WRITE_BNDRY_128_PCIX); 14959 } else { 14960 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 14961 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 14962 } 14963 break; 14964 14965 case 256: 14966 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX | 14967 DMA_RWCTRL_WRITE_BNDRY_256_PCIX); 14968 break; 14969 14970 default: 14971 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 14972 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 14973 break; 14974 } 14975 } else if (tg3_flag(tp, PCI_EXPRESS)) { 14976 switch (cacheline_size) { 14977 case 16: 14978 case 32: 14979 case 64: 14980 if (goal == BOUNDARY_SINGLE_CACHELINE) { 14981 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 14982 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; 14983 break; 14984 } 14985 /* fallthrough */ 14986 case 128: 14987 default: 14988 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 14989 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE; 14990 break; 14991 } 14992 } else { 14993 switch (cacheline_size) { 14994 case 16: 14995 if (goal == BOUNDARY_SINGLE_CACHELINE) { 14996 val |= (DMA_RWCTRL_READ_BNDRY_16 | 14997 DMA_RWCTRL_WRITE_BNDRY_16); 14998 break; 14999 } 15000 /* fallthrough */ 15001 case 32: 15002 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15003 val |= (DMA_RWCTRL_READ_BNDRY_32 | 15004 DMA_RWCTRL_WRITE_BNDRY_32); 15005 break; 15006 } 15007 /* fallthrough */ 15008 case 64: 15009 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15010 val |= (DMA_RWCTRL_READ_BNDRY_64 | 15011 DMA_RWCTRL_WRITE_BNDRY_64); 15012 break; 15013 } 15014 /* fallthrough */ 15015 case 128: 15016 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15017 val |= (DMA_RWCTRL_READ_BNDRY_128 | 15018 DMA_RWCTRL_WRITE_BNDRY_128); 15019 break; 15020 } 15021 /* fallthrough */ 15022 case 256: 15023 val |= (DMA_RWCTRL_READ_BNDRY_256 | 15024 DMA_RWCTRL_WRITE_BNDRY_256); 15025 break; 15026 case 512: 15027 val |= (DMA_RWCTRL_READ_BNDRY_512 | 15028 DMA_RWCTRL_WRITE_BNDRY_512); 15029 break; 15030 case 1024: 15031 default: 15032 val |= (DMA_RWCTRL_READ_BNDRY_1024 | 15033 DMA_RWCTRL_WRITE_BNDRY_1024); 15034 break; 15035 } 15036 } 15037 15038 out: 15039 return val; 15040 } 15041 15042 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device) 15043 { 15044 struct tg3_internal_buffer_desc test_desc; 15045 u32 sram_dma_descs; 15046 int i, ret; 15047 15048 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE; 15049 15050 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0); 15051 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0); 15052 tw32(RDMAC_STATUS, 0); 15053 tw32(WDMAC_STATUS, 0); 15054 15055 tw32(BUFMGR_MODE, 0); 15056 tw32(FTQ_RESET, 0); 15057 15058 test_desc.addr_hi = ((u64) buf_dma) >> 32; 15059 test_desc.addr_lo = buf_dma & 0xffffffff; 15060 test_desc.nic_mbuf = 0x00002100; 15061 test_desc.len = size; 15062 15063 /* 15064 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz 15065 * the *second* time the tg3 driver was getting loaded after an 15066 * initial scan. 15067 * 15068 * Broadcom tells me: 15069 * ...the DMA engine is connected to the GRC block and a DMA 15070 * reset may affect the GRC block in some unpredictable way... 15071 * The behavior of resets to individual blocks has not been tested. 15072 * 15073 * Broadcom noted the GRC reset will also reset all sub-components. 15074 */ 15075 if (to_device) { 15076 test_desc.cqid_sqid = (13 << 8) | 2; 15077 15078 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE); 15079 udelay(40); 15080 } else { 15081 test_desc.cqid_sqid = (16 << 8) | 7; 15082 15083 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE); 15084 udelay(40); 15085 } 15086 test_desc.flags = 0x00000005; 15087 15088 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) { 15089 u32 val; 15090 15091 val = *(((u32 *)&test_desc) + i); 15092 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 15093 sram_dma_descs + (i * sizeof(u32))); 15094 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 15095 } 15096 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 15097 15098 if (to_device) 15099 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs); 15100 else 15101 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs); 15102 15103 ret = -ENODEV; 15104 for (i = 0; i < 40; i++) { 15105 u32 val; 15106 15107 if (to_device) 15108 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ); 15109 else 15110 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ); 15111 if ((val & 0xffff) == sram_dma_descs) { 15112 ret = 0; 15113 break; 15114 } 15115 15116 udelay(100); 15117 } 15118 15119 return ret; 15120 } 15121 15122 #define TEST_BUFFER_SIZE 0x2000 15123 15124 static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = { 15125 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) }, 15126 { }, 15127 }; 15128 15129 static int __devinit tg3_test_dma(struct tg3 *tp) 15130 { 15131 dma_addr_t buf_dma; 15132 u32 *buf, saved_dma_rwctrl; 15133 int ret = 0; 15134 15135 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, 15136 &buf_dma, GFP_KERNEL); 15137 if (!buf) { 15138 ret = -ENOMEM; 15139 goto out_nofree; 15140 } 15141 15142 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | 15143 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); 15144 15145 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl); 15146 15147 if (tg3_flag(tp, 57765_PLUS)) 15148 goto out; 15149 15150 if (tg3_flag(tp, PCI_EXPRESS)) { 15151 /* DMA read watermark not used on PCIE */ 15152 tp->dma_rwctrl |= 0x00180000; 15153 } else if (!tg3_flag(tp, PCIX_MODE)) { 15154 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || 15155 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) 15156 tp->dma_rwctrl |= 0x003f0000; 15157 else 15158 tp->dma_rwctrl |= 0x003f000f; 15159 } else { 15160 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 15161 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 15162 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); 15163 u32 read_water = 0x7; 15164 15165 /* If the 5704 is behind the EPB bridge, we can 15166 * do the less restrictive ONE_DMA workaround for 15167 * better performance. 15168 */ 15169 if (tg3_flag(tp, 40BIT_DMA_BUG) && 15170 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 15171 tp->dma_rwctrl |= 0x8000; 15172 else if (ccval == 0x6 || ccval == 0x7) 15173 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 15174 15175 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) 15176 read_water = 4; 15177 /* Set bit 23 to enable PCIX hw bug fix */ 15178 tp->dma_rwctrl |= 15179 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) | 15180 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | 15181 (1 << 23); 15182 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { 15183 /* 5780 always in PCIX mode */ 15184 tp->dma_rwctrl |= 0x00144000; 15185 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 15186 /* 5714 always in PCIX mode */ 15187 tp->dma_rwctrl |= 0x00148000; 15188 } else { 15189 tp->dma_rwctrl |= 0x001b000f; 15190 } 15191 } 15192 15193 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 15194 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 15195 tp->dma_rwctrl &= 0xfffffff0; 15196 15197 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 15198 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 15199 /* Remove this if it causes problems for some boards. */ 15200 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT; 15201 15202 /* On 5700/5701 chips, we need to set this bit. 15203 * Otherwise the chip will issue cacheline transactions 15204 * to streamable DMA memory with not all the byte 15205 * enables turned on. This is an error on several 15206 * RISC PCI controllers, in particular sparc64. 15207 * 15208 * On 5703/5704 chips, this bit has been reassigned 15209 * a different meaning. In particular, it is used 15210 * on those chips to enable a PCI-X workaround. 15211 */ 15212 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE; 15213 } 15214 15215 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 15216 15217 #if 0 15218 /* Unneeded, already done by tg3_get_invariants. */ 15219 tg3_switch_clocks(tp); 15220 #endif 15221 15222 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 15223 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) 15224 goto out; 15225 15226 /* It is best to perform DMA test with maximum write burst size 15227 * to expose the 5700/5701 write DMA bug. 15228 */ 15229 saved_dma_rwctrl = tp->dma_rwctrl; 15230 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 15231 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 15232 15233 while (1) { 15234 u32 *p = buf, i; 15235 15236 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) 15237 p[i] = i; 15238 15239 /* Send the buffer to the chip. */ 15240 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1); 15241 if (ret) { 15242 dev_err(&tp->pdev->dev, 15243 "%s: Buffer write failed. err = %d\n", 15244 __func__, ret); 15245 break; 15246 } 15247 15248 #if 0 15249 /* validate data reached card RAM correctly. */ 15250 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 15251 u32 val; 15252 tg3_read_mem(tp, 0x2100 + (i*4), &val); 15253 if (le32_to_cpu(val) != p[i]) { 15254 dev_err(&tp->pdev->dev, 15255 "%s: Buffer corrupted on device! " 15256 "(%d != %d)\n", __func__, val, i); 15257 /* ret = -ENODEV here? */ 15258 } 15259 p[i] = 0; 15260 } 15261 #endif 15262 /* Now read it back. */ 15263 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0); 15264 if (ret) { 15265 dev_err(&tp->pdev->dev, "%s: Buffer read failed. " 15266 "err = %d\n", __func__, ret); 15267 break; 15268 } 15269 15270 /* Verify it. */ 15271 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 15272 if (p[i] == i) 15273 continue; 15274 15275 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 15276 DMA_RWCTRL_WRITE_BNDRY_16) { 15277 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 15278 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 15279 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 15280 break; 15281 } else { 15282 dev_err(&tp->pdev->dev, 15283 "%s: Buffer corrupted on read back! " 15284 "(%d != %d)\n", __func__, p[i], i); 15285 ret = -ENODEV; 15286 goto out; 15287 } 15288 } 15289 15290 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) { 15291 /* Success. */ 15292 ret = 0; 15293 break; 15294 } 15295 } 15296 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 15297 DMA_RWCTRL_WRITE_BNDRY_16) { 15298 /* DMA test passed without adjusting DMA boundary, 15299 * now look for chipsets that are known to expose the 15300 * DMA bug without failing the test. 15301 */ 15302 if (pci_dev_present(tg3_dma_wait_state_chipsets)) { 15303 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 15304 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 15305 } else { 15306 /* Safe to use the calculated DMA boundary. */ 15307 tp->dma_rwctrl = saved_dma_rwctrl; 15308 } 15309 15310 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 15311 } 15312 15313 out: 15314 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma); 15315 out_nofree: 15316 return ret; 15317 } 15318 15319 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp) 15320 { 15321 if (tg3_flag(tp, 57765_PLUS)) { 15322 tp->bufmgr_config.mbuf_read_dma_low_water = 15323 DEFAULT_MB_RDMA_LOW_WATER_5705; 15324 tp->bufmgr_config.mbuf_mac_rx_low_water = 15325 DEFAULT_MB_MACRX_LOW_WATER_57765; 15326 tp->bufmgr_config.mbuf_high_water = 15327 DEFAULT_MB_HIGH_WATER_57765; 15328 15329 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 15330 DEFAULT_MB_RDMA_LOW_WATER_5705; 15331 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 15332 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765; 15333 tp->bufmgr_config.mbuf_high_water_jumbo = 15334 DEFAULT_MB_HIGH_WATER_JUMBO_57765; 15335 } else if (tg3_flag(tp, 5705_PLUS)) { 15336 tp->bufmgr_config.mbuf_read_dma_low_water = 15337 DEFAULT_MB_RDMA_LOW_WATER_5705; 15338 tp->bufmgr_config.mbuf_mac_rx_low_water = 15339 DEFAULT_MB_MACRX_LOW_WATER_5705; 15340 tp->bufmgr_config.mbuf_high_water = 15341 DEFAULT_MB_HIGH_WATER_5705; 15342 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 15343 tp->bufmgr_config.mbuf_mac_rx_low_water = 15344 DEFAULT_MB_MACRX_LOW_WATER_5906; 15345 tp->bufmgr_config.mbuf_high_water = 15346 DEFAULT_MB_HIGH_WATER_5906; 15347 } 15348 15349 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 15350 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; 15351 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 15352 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; 15353 tp->bufmgr_config.mbuf_high_water_jumbo = 15354 DEFAULT_MB_HIGH_WATER_JUMBO_5780; 15355 } else { 15356 tp->bufmgr_config.mbuf_read_dma_low_water = 15357 DEFAULT_MB_RDMA_LOW_WATER; 15358 tp->bufmgr_config.mbuf_mac_rx_low_water = 15359 DEFAULT_MB_MACRX_LOW_WATER; 15360 tp->bufmgr_config.mbuf_high_water = 15361 DEFAULT_MB_HIGH_WATER; 15362 15363 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 15364 DEFAULT_MB_RDMA_LOW_WATER_JUMBO; 15365 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 15366 DEFAULT_MB_MACRX_LOW_WATER_JUMBO; 15367 tp->bufmgr_config.mbuf_high_water_jumbo = 15368 DEFAULT_MB_HIGH_WATER_JUMBO; 15369 } 15370 15371 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; 15372 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; 15373 } 15374 15375 static char * __devinit tg3_phy_string(struct tg3 *tp) 15376 { 15377 switch (tp->phy_id & TG3_PHY_ID_MASK) { 15378 case TG3_PHY_ID_BCM5400: return "5400"; 15379 case TG3_PHY_ID_BCM5401: return "5401"; 15380 case TG3_PHY_ID_BCM5411: return "5411"; 15381 case TG3_PHY_ID_BCM5701: return "5701"; 15382 case TG3_PHY_ID_BCM5703: return "5703"; 15383 case TG3_PHY_ID_BCM5704: return "5704"; 15384 case TG3_PHY_ID_BCM5705: return "5705"; 15385 case TG3_PHY_ID_BCM5750: return "5750"; 15386 case TG3_PHY_ID_BCM5752: return "5752"; 15387 case TG3_PHY_ID_BCM5714: return "5714"; 15388 case TG3_PHY_ID_BCM5780: return "5780"; 15389 case TG3_PHY_ID_BCM5755: return "5755"; 15390 case TG3_PHY_ID_BCM5787: return "5787"; 15391 case TG3_PHY_ID_BCM5784: return "5784"; 15392 case TG3_PHY_ID_BCM5756: return "5722/5756"; 15393 case TG3_PHY_ID_BCM5906: return "5906"; 15394 case TG3_PHY_ID_BCM5761: return "5761"; 15395 case TG3_PHY_ID_BCM5718C: return "5718C"; 15396 case TG3_PHY_ID_BCM5718S: return "5718S"; 15397 case TG3_PHY_ID_BCM57765: return "57765"; 15398 case TG3_PHY_ID_BCM5719C: return "5719C"; 15399 case TG3_PHY_ID_BCM5720C: return "5720C"; 15400 case TG3_PHY_ID_BCM8002: return "8002/serdes"; 15401 case 0: return "serdes"; 15402 default: return "unknown"; 15403 } 15404 } 15405 15406 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str) 15407 { 15408 if (tg3_flag(tp, PCI_EXPRESS)) { 15409 strcpy(str, "PCI Express"); 15410 return str; 15411 } else if (tg3_flag(tp, PCIX_MODE)) { 15412 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f; 15413 15414 strcpy(str, "PCIX:"); 15415 15416 if ((clock_ctrl == 7) || 15417 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) == 15418 GRC_MISC_CFG_BOARD_ID_5704CIOBE)) 15419 strcat(str, "133MHz"); 15420 else if (clock_ctrl == 0) 15421 strcat(str, "33MHz"); 15422 else if (clock_ctrl == 2) 15423 strcat(str, "50MHz"); 15424 else if (clock_ctrl == 4) 15425 strcat(str, "66MHz"); 15426 else if (clock_ctrl == 6) 15427 strcat(str, "100MHz"); 15428 } else { 15429 strcpy(str, "PCI:"); 15430 if (tg3_flag(tp, PCI_HIGH_SPEED)) 15431 strcat(str, "66MHz"); 15432 else 15433 strcat(str, "33MHz"); 15434 } 15435 if (tg3_flag(tp, PCI_32BIT)) 15436 strcat(str, ":32-bit"); 15437 else 15438 strcat(str, ":64-bit"); 15439 return str; 15440 } 15441 15442 static void __devinit tg3_init_coal(struct tg3 *tp) 15443 { 15444 struct ethtool_coalesce *ec = &tp->coal; 15445 15446 memset(ec, 0, sizeof(*ec)); 15447 ec->cmd = ETHTOOL_GCOALESCE; 15448 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS; 15449 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS; 15450 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES; 15451 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES; 15452 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT; 15453 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT; 15454 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT; 15455 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT; 15456 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS; 15457 15458 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD | 15459 HOSTCC_MODE_CLRTICK_TXBD)) { 15460 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS; 15461 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS; 15462 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS; 15463 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS; 15464 } 15465 15466 if (tg3_flag(tp, 5705_PLUS)) { 15467 ec->rx_coalesce_usecs_irq = 0; 15468 ec->tx_coalesce_usecs_irq = 0; 15469 ec->stats_block_coalesce_usecs = 0; 15470 } 15471 } 15472 15473 static int __devinit tg3_init_one(struct pci_dev *pdev, 15474 const struct pci_device_id *ent) 15475 { 15476 struct net_device *dev; 15477 struct tg3 *tp; 15478 int i, err, pm_cap; 15479 u32 sndmbx, rcvmbx, intmbx; 15480 char str[40]; 15481 u64 dma_mask, persist_dma_mask; 15482 netdev_features_t features = 0; 15483 15484 printk_once(KERN_INFO "%s\n", version); 15485 15486 err = pci_enable_device(pdev); 15487 if (err) { 15488 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); 15489 return err; 15490 } 15491 15492 err = pci_request_regions(pdev, DRV_MODULE_NAME); 15493 if (err) { 15494 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n"); 15495 goto err_out_disable_pdev; 15496 } 15497 15498 pci_set_master(pdev); 15499 15500 /* Find power-management capability. */ 15501 pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); 15502 if (pm_cap == 0) { 15503 dev_err(&pdev->dev, 15504 "Cannot find Power Management capability, aborting\n"); 15505 err = -EIO; 15506 goto err_out_free_res; 15507 } 15508 15509 err = pci_set_power_state(pdev, PCI_D0); 15510 if (err) { 15511 dev_err(&pdev->dev, "Transition to D0 failed, aborting\n"); 15512 goto err_out_free_res; 15513 } 15514 15515 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS); 15516 if (!dev) { 15517 err = -ENOMEM; 15518 goto err_out_power_down; 15519 } 15520 15521 SET_NETDEV_DEV(dev, &pdev->dev); 15522 15523 tp = netdev_priv(dev); 15524 tp->pdev = pdev; 15525 tp->dev = dev; 15526 tp->pm_cap = pm_cap; 15527 tp->rx_mode = TG3_DEF_RX_MODE; 15528 tp->tx_mode = TG3_DEF_TX_MODE; 15529 15530 if (tg3_debug > 0) 15531 tp->msg_enable = tg3_debug; 15532 else 15533 tp->msg_enable = TG3_DEF_MSG_ENABLE; 15534 15535 /* The word/byte swap controls here control register access byte 15536 * swapping. DMA data byte swapping is controlled in the GRC_MODE 15537 * setting below. 15538 */ 15539 tp->misc_host_ctrl = 15540 MISC_HOST_CTRL_MASK_PCI_INT | 15541 MISC_HOST_CTRL_WORD_SWAP | 15542 MISC_HOST_CTRL_INDIR_ACCESS | 15543 MISC_HOST_CTRL_PCISTATE_RW; 15544 15545 /* The NONFRM (non-frame) byte/word swap controls take effect 15546 * on descriptor entries, anything which isn't packet data. 15547 * 15548 * The StrongARM chips on the board (one for tx, one for rx) 15549 * are running in big-endian mode. 15550 */ 15551 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA | 15552 GRC_MODE_WSWAP_NONFRM_DATA); 15553 #ifdef __BIG_ENDIAN 15554 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; 15555 #endif 15556 spin_lock_init(&tp->lock); 15557 spin_lock_init(&tp->indirect_lock); 15558 INIT_WORK(&tp->reset_task, tg3_reset_task); 15559 15560 tp->regs = pci_ioremap_bar(pdev, BAR_0); 15561 if (!tp->regs) { 15562 dev_err(&pdev->dev, "Cannot map device registers, aborting\n"); 15563 err = -ENOMEM; 15564 goto err_out_free_dev; 15565 } 15566 15567 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 15568 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E || 15569 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S || 15570 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE || 15571 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 15572 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 15573 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 15574 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) { 15575 tg3_flag_set(tp, ENABLE_APE); 15576 tp->aperegs = pci_ioremap_bar(pdev, BAR_2); 15577 if (!tp->aperegs) { 15578 dev_err(&pdev->dev, 15579 "Cannot map APE registers, aborting\n"); 15580 err = -ENOMEM; 15581 goto err_out_iounmap; 15582 } 15583 } 15584 15585 tp->rx_pending = TG3_DEF_RX_RING_PENDING; 15586 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; 15587 15588 dev->ethtool_ops = &tg3_ethtool_ops; 15589 dev->watchdog_timeo = TG3_TX_TIMEOUT; 15590 dev->netdev_ops = &tg3_netdev_ops; 15591 dev->irq = pdev->irq; 15592 15593 err = tg3_get_invariants(tp); 15594 if (err) { 15595 dev_err(&pdev->dev, 15596 "Problem fetching invariants of chip, aborting\n"); 15597 goto err_out_apeunmap; 15598 } 15599 15600 /* The EPB bridge inside 5714, 5715, and 5780 and any 15601 * device behind the EPB cannot support DMA addresses > 40-bit. 15602 * On 64-bit systems with IOMMU, use 40-bit dma_mask. 15603 * On 64-bit systems without IOMMU, use 64-bit dma_mask and 15604 * do DMA address check in tg3_start_xmit(). 15605 */ 15606 if (tg3_flag(tp, IS_5788)) 15607 persist_dma_mask = dma_mask = DMA_BIT_MASK(32); 15608 else if (tg3_flag(tp, 40BIT_DMA_BUG)) { 15609 persist_dma_mask = dma_mask = DMA_BIT_MASK(40); 15610 #ifdef CONFIG_HIGHMEM 15611 dma_mask = DMA_BIT_MASK(64); 15612 #endif 15613 } else 15614 persist_dma_mask = dma_mask = DMA_BIT_MASK(64); 15615 15616 /* Configure DMA attributes. */ 15617 if (dma_mask > DMA_BIT_MASK(32)) { 15618 err = pci_set_dma_mask(pdev, dma_mask); 15619 if (!err) { 15620 features |= NETIF_F_HIGHDMA; 15621 err = pci_set_consistent_dma_mask(pdev, 15622 persist_dma_mask); 15623 if (err < 0) { 15624 dev_err(&pdev->dev, "Unable to obtain 64 bit " 15625 "DMA for consistent allocations\n"); 15626 goto err_out_apeunmap; 15627 } 15628 } 15629 } 15630 if (err || dma_mask == DMA_BIT_MASK(32)) { 15631 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 15632 if (err) { 15633 dev_err(&pdev->dev, 15634 "No usable DMA configuration, aborting\n"); 15635 goto err_out_apeunmap; 15636 } 15637 } 15638 15639 tg3_init_bufmgr_config(tp); 15640 15641 features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 15642 15643 /* 5700 B0 chips do not support checksumming correctly due 15644 * to hardware bugs. 15645 */ 15646 if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) { 15647 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM; 15648 15649 if (tg3_flag(tp, 5755_PLUS)) 15650 features |= NETIF_F_IPV6_CSUM; 15651 } 15652 15653 /* TSO is on by default on chips that support hardware TSO. 15654 * Firmware TSO on older chips gives lower performance, so it 15655 * is off by default, but can be enabled using ethtool. 15656 */ 15657 if ((tg3_flag(tp, HW_TSO_1) || 15658 tg3_flag(tp, HW_TSO_2) || 15659 tg3_flag(tp, HW_TSO_3)) && 15660 (features & NETIF_F_IP_CSUM)) 15661 features |= NETIF_F_TSO; 15662 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) { 15663 if (features & NETIF_F_IPV6_CSUM) 15664 features |= NETIF_F_TSO6; 15665 if (tg3_flag(tp, HW_TSO_3) || 15666 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 15667 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 15668 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) || 15669 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 15670 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 15671 features |= NETIF_F_TSO_ECN; 15672 } 15673 15674 dev->features |= features; 15675 dev->vlan_features |= features; 15676 15677 /* 15678 * Add loopback capability only for a subset of devices that support 15679 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY 15680 * loopback for the remaining devices. 15681 */ 15682 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 && 15683 !tg3_flag(tp, CPMU_PRESENT)) 15684 /* Add the loopback capability */ 15685 features |= NETIF_F_LOOPBACK; 15686 15687 dev->hw_features |= features; 15688 15689 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 && 15690 !tg3_flag(tp, TSO_CAPABLE) && 15691 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) { 15692 tg3_flag_set(tp, MAX_RXPEND_64); 15693 tp->rx_pending = 63; 15694 } 15695 15696 err = tg3_get_device_address(tp); 15697 if (err) { 15698 dev_err(&pdev->dev, 15699 "Could not obtain valid ethernet address, aborting\n"); 15700 goto err_out_apeunmap; 15701 } 15702 15703 /* 15704 * Reset chip in case UNDI or EFI driver did not shutdown 15705 * DMA self test will enable WDMAC and we'll see (spurious) 15706 * pending DMA on the PCI bus at that point. 15707 */ 15708 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) || 15709 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 15710 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); 15711 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 15712 } 15713 15714 err = tg3_test_dma(tp); 15715 if (err) { 15716 dev_err(&pdev->dev, "DMA engine test failed, aborting\n"); 15717 goto err_out_apeunmap; 15718 } 15719 15720 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW; 15721 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW; 15722 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW; 15723 for (i = 0; i < tp->irq_max; i++) { 15724 struct tg3_napi *tnapi = &tp->napi[i]; 15725 15726 tnapi->tp = tp; 15727 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING; 15728 15729 tnapi->int_mbox = intmbx; 15730 if (i <= 4) 15731 intmbx += 0x8; 15732 else 15733 intmbx += 0x4; 15734 15735 tnapi->consmbox = rcvmbx; 15736 tnapi->prodmbox = sndmbx; 15737 15738 if (i) 15739 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1); 15740 else 15741 tnapi->coal_now = HOSTCC_MODE_NOW; 15742 15743 if (!tg3_flag(tp, SUPPORT_MSIX)) 15744 break; 15745 15746 /* 15747 * If we support MSIX, we'll be using RSS. If we're using 15748 * RSS, the first vector only handles link interrupts and the 15749 * remaining vectors handle rx and tx interrupts. Reuse the 15750 * mailbox values for the next iteration. The values we setup 15751 * above are still useful for the single vectored mode. 15752 */ 15753 if (!i) 15754 continue; 15755 15756 rcvmbx += 0x8; 15757 15758 if (sndmbx & 0x4) 15759 sndmbx -= 0x4; 15760 else 15761 sndmbx += 0xc; 15762 } 15763 15764 tg3_init_coal(tp); 15765 15766 pci_set_drvdata(pdev, dev); 15767 15768 if (tg3_flag(tp, 5717_PLUS)) { 15769 /* Resume a low-power mode */ 15770 tg3_frob_aux_power(tp, false); 15771 } 15772 15773 tg3_timer_init(tp); 15774 15775 err = register_netdev(dev); 15776 if (err) { 15777 dev_err(&pdev->dev, "Cannot register net device, aborting\n"); 15778 goto err_out_apeunmap; 15779 } 15780 15781 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", 15782 tp->board_part_number, 15783 tp->pci_chip_rev_id, 15784 tg3_bus_string(tp, str), 15785 dev->dev_addr); 15786 15787 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 15788 struct phy_device *phydev; 15789 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 15790 netdev_info(dev, 15791 "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n", 15792 phydev->drv->name, dev_name(&phydev->dev)); 15793 } else { 15794 char *ethtype; 15795 15796 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 15797 ethtype = "10/100Base-TX"; 15798 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 15799 ethtype = "1000Base-SX"; 15800 else 15801 ethtype = "10/100/1000Base-T"; 15802 15803 netdev_info(dev, "attached PHY is %s (%s Ethernet) " 15804 "(WireSpeed[%d], EEE[%d])\n", 15805 tg3_phy_string(tp), ethtype, 15806 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0, 15807 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0); 15808 } 15809 15810 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n", 15811 (dev->features & NETIF_F_RXCSUM) != 0, 15812 tg3_flag(tp, USE_LINKCHG_REG) != 0, 15813 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0, 15814 tg3_flag(tp, ENABLE_ASF) != 0, 15815 tg3_flag(tp, TSO_CAPABLE) != 0); 15816 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n", 15817 tp->dma_rwctrl, 15818 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 : 15819 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64); 15820 15821 pci_save_state(pdev); 15822 15823 return 0; 15824 15825 err_out_apeunmap: 15826 if (tp->aperegs) { 15827 iounmap(tp->aperegs); 15828 tp->aperegs = NULL; 15829 } 15830 15831 err_out_iounmap: 15832 if (tp->regs) { 15833 iounmap(tp->regs); 15834 tp->regs = NULL; 15835 } 15836 15837 err_out_free_dev: 15838 free_netdev(dev); 15839 15840 err_out_power_down: 15841 pci_set_power_state(pdev, PCI_D3hot); 15842 15843 err_out_free_res: 15844 pci_release_regions(pdev); 15845 15846 err_out_disable_pdev: 15847 pci_disable_device(pdev); 15848 pci_set_drvdata(pdev, NULL); 15849 return err; 15850 } 15851 15852 static void __devexit tg3_remove_one(struct pci_dev *pdev) 15853 { 15854 struct net_device *dev = pci_get_drvdata(pdev); 15855 15856 if (dev) { 15857 struct tg3 *tp = netdev_priv(dev); 15858 15859 if (tp->fw) 15860 release_firmware(tp->fw); 15861 15862 tg3_reset_task_cancel(tp); 15863 15864 if (tg3_flag(tp, USE_PHYLIB)) { 15865 tg3_phy_fini(tp); 15866 tg3_mdio_fini(tp); 15867 } 15868 15869 unregister_netdev(dev); 15870 if (tp->aperegs) { 15871 iounmap(tp->aperegs); 15872 tp->aperegs = NULL; 15873 } 15874 if (tp->regs) { 15875 iounmap(tp->regs); 15876 tp->regs = NULL; 15877 } 15878 free_netdev(dev); 15879 pci_release_regions(pdev); 15880 pci_disable_device(pdev); 15881 pci_set_drvdata(pdev, NULL); 15882 } 15883 } 15884 15885 #ifdef CONFIG_PM_SLEEP 15886 static int tg3_suspend(struct device *device) 15887 { 15888 struct pci_dev *pdev = to_pci_dev(device); 15889 struct net_device *dev = pci_get_drvdata(pdev); 15890 struct tg3 *tp = netdev_priv(dev); 15891 int err; 15892 15893 if (!netif_running(dev)) 15894 return 0; 15895 15896 tg3_reset_task_cancel(tp); 15897 tg3_phy_stop(tp); 15898 tg3_netif_stop(tp); 15899 15900 tg3_timer_stop(tp); 15901 15902 tg3_full_lock(tp, 1); 15903 tg3_disable_ints(tp); 15904 tg3_full_unlock(tp); 15905 15906 netif_device_detach(dev); 15907 15908 tg3_full_lock(tp, 0); 15909 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 15910 tg3_flag_clear(tp, INIT_COMPLETE); 15911 tg3_full_unlock(tp); 15912 15913 err = tg3_power_down_prepare(tp); 15914 if (err) { 15915 int err2; 15916 15917 tg3_full_lock(tp, 0); 15918 15919 tg3_flag_set(tp, INIT_COMPLETE); 15920 err2 = tg3_restart_hw(tp, 1); 15921 if (err2) 15922 goto out; 15923 15924 tg3_timer_start(tp); 15925 15926 netif_device_attach(dev); 15927 tg3_netif_start(tp); 15928 15929 out: 15930 tg3_full_unlock(tp); 15931 15932 if (!err2) 15933 tg3_phy_start(tp); 15934 } 15935 15936 return err; 15937 } 15938 15939 static int tg3_resume(struct device *device) 15940 { 15941 struct pci_dev *pdev = to_pci_dev(device); 15942 struct net_device *dev = pci_get_drvdata(pdev); 15943 struct tg3 *tp = netdev_priv(dev); 15944 int err; 15945 15946 if (!netif_running(dev)) 15947 return 0; 15948 15949 netif_device_attach(dev); 15950 15951 tg3_full_lock(tp, 0); 15952 15953 tg3_flag_set(tp, INIT_COMPLETE); 15954 err = tg3_restart_hw(tp, 1); 15955 if (err) 15956 goto out; 15957 15958 tg3_timer_start(tp); 15959 15960 tg3_netif_start(tp); 15961 15962 out: 15963 tg3_full_unlock(tp); 15964 15965 if (!err) 15966 tg3_phy_start(tp); 15967 15968 return err; 15969 } 15970 15971 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume); 15972 #define TG3_PM_OPS (&tg3_pm_ops) 15973 15974 #else 15975 15976 #define TG3_PM_OPS NULL 15977 15978 #endif /* CONFIG_PM_SLEEP */ 15979 15980 /** 15981 * tg3_io_error_detected - called when PCI error is detected 15982 * @pdev: Pointer to PCI device 15983 * @state: The current pci connection state 15984 * 15985 * This function is called after a PCI bus error affecting 15986 * this device has been detected. 15987 */ 15988 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, 15989 pci_channel_state_t state) 15990 { 15991 struct net_device *netdev = pci_get_drvdata(pdev); 15992 struct tg3 *tp = netdev_priv(netdev); 15993 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET; 15994 15995 netdev_info(netdev, "PCI I/O error detected\n"); 15996 15997 rtnl_lock(); 15998 15999 if (!netif_running(netdev)) 16000 goto done; 16001 16002 tg3_phy_stop(tp); 16003 16004 tg3_netif_stop(tp); 16005 16006 tg3_timer_stop(tp); 16007 16008 /* Want to make sure that the reset task doesn't run */ 16009 tg3_reset_task_cancel(tp); 16010 16011 netif_device_detach(netdev); 16012 16013 /* Clean up software state, even if MMIO is blocked */ 16014 tg3_full_lock(tp, 0); 16015 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 16016 tg3_full_unlock(tp); 16017 16018 done: 16019 if (state == pci_channel_io_perm_failure) 16020 err = PCI_ERS_RESULT_DISCONNECT; 16021 else 16022 pci_disable_device(pdev); 16023 16024 rtnl_unlock(); 16025 16026 return err; 16027 } 16028 16029 /** 16030 * tg3_io_slot_reset - called after the pci bus has been reset. 16031 * @pdev: Pointer to PCI device 16032 * 16033 * Restart the card from scratch, as if from a cold-boot. 16034 * At this point, the card has exprienced a hard reset, 16035 * followed by fixups by BIOS, and has its config space 16036 * set up identically to what it was at cold boot. 16037 */ 16038 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev) 16039 { 16040 struct net_device *netdev = pci_get_drvdata(pdev); 16041 struct tg3 *tp = netdev_priv(netdev); 16042 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; 16043 int err; 16044 16045 rtnl_lock(); 16046 16047 if (pci_enable_device(pdev)) { 16048 netdev_err(netdev, "Cannot re-enable PCI device after reset.\n"); 16049 goto done; 16050 } 16051 16052 pci_set_master(pdev); 16053 pci_restore_state(pdev); 16054 pci_save_state(pdev); 16055 16056 if (!netif_running(netdev)) { 16057 rc = PCI_ERS_RESULT_RECOVERED; 16058 goto done; 16059 } 16060 16061 err = tg3_power_up(tp); 16062 if (err) 16063 goto done; 16064 16065 rc = PCI_ERS_RESULT_RECOVERED; 16066 16067 done: 16068 rtnl_unlock(); 16069 16070 return rc; 16071 } 16072 16073 /** 16074 * tg3_io_resume - called when traffic can start flowing again. 16075 * @pdev: Pointer to PCI device 16076 * 16077 * This callback is called when the error recovery driver tells 16078 * us that its OK to resume normal operation. 16079 */ 16080 static void tg3_io_resume(struct pci_dev *pdev) 16081 { 16082 struct net_device *netdev = pci_get_drvdata(pdev); 16083 struct tg3 *tp = netdev_priv(netdev); 16084 int err; 16085 16086 rtnl_lock(); 16087 16088 if (!netif_running(netdev)) 16089 goto done; 16090 16091 tg3_full_lock(tp, 0); 16092 tg3_flag_set(tp, INIT_COMPLETE); 16093 err = tg3_restart_hw(tp, 1); 16094 tg3_full_unlock(tp); 16095 if (err) { 16096 netdev_err(netdev, "Cannot restart hardware after reset.\n"); 16097 goto done; 16098 } 16099 16100 netif_device_attach(netdev); 16101 16102 tg3_timer_start(tp); 16103 16104 tg3_netif_start(tp); 16105 16106 tg3_phy_start(tp); 16107 16108 done: 16109 rtnl_unlock(); 16110 } 16111 16112 static struct pci_error_handlers tg3_err_handler = { 16113 .error_detected = tg3_io_error_detected, 16114 .slot_reset = tg3_io_slot_reset, 16115 .resume = tg3_io_resume 16116 }; 16117 16118 static struct pci_driver tg3_driver = { 16119 .name = DRV_MODULE_NAME, 16120 .id_table = tg3_pci_tbl, 16121 .probe = tg3_init_one, 16122 .remove = __devexit_p(tg3_remove_one), 16123 .err_handler = &tg3_err_handler, 16124 .driver.pm = TG3_PM_OPS, 16125 }; 16126 16127 static int __init tg3_init(void) 16128 { 16129 return pci_register_driver(&tg3_driver); 16130 } 16131 16132 static void __exit tg3_cleanup(void) 16133 { 16134 pci_unregister_driver(&tg3_driver); 16135 } 16136 16137 module_init(tg3_init); 16138 module_exit(tg3_cleanup); 16139