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 #if IS_ENABLED(CONFIG_HWMON) 48 #include <linux/hwmon.h> 49 #include <linux/hwmon-sysfs.h> 50 #endif 51 52 #include <net/checksum.h> 53 #include <net/ip.h> 54 55 #include <linux/io.h> 56 #include <asm/byteorder.h> 57 #include <linux/uaccess.h> 58 59 #ifdef CONFIG_SPARC 60 #include <asm/idprom.h> 61 #include <asm/prom.h> 62 #endif 63 64 #define BAR_0 0 65 #define BAR_2 2 66 67 #include "tg3.h" 68 69 /* Functions & macros to verify TG3_FLAGS types */ 70 71 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits) 72 { 73 return test_bit(flag, bits); 74 } 75 76 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits) 77 { 78 set_bit(flag, bits); 79 } 80 81 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits) 82 { 83 clear_bit(flag, bits); 84 } 85 86 #define tg3_flag(tp, flag) \ 87 _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags) 88 #define tg3_flag_set(tp, flag) \ 89 _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags) 90 #define tg3_flag_clear(tp, flag) \ 91 _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags) 92 93 #define DRV_MODULE_NAME "tg3" 94 #define TG3_MAJ_NUM 3 95 #define TG3_MIN_NUM 123 96 #define DRV_MODULE_VERSION \ 97 __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM) 98 #define DRV_MODULE_RELDATE "March 21, 2012" 99 100 #define RESET_KIND_SHUTDOWN 0 101 #define RESET_KIND_INIT 1 102 #define RESET_KIND_SUSPEND 2 103 104 #define TG3_DEF_RX_MODE 0 105 #define TG3_DEF_TX_MODE 0 106 #define TG3_DEF_MSG_ENABLE \ 107 (NETIF_MSG_DRV | \ 108 NETIF_MSG_PROBE | \ 109 NETIF_MSG_LINK | \ 110 NETIF_MSG_TIMER | \ 111 NETIF_MSG_IFDOWN | \ 112 NETIF_MSG_IFUP | \ 113 NETIF_MSG_RX_ERR | \ 114 NETIF_MSG_TX_ERR) 115 116 #define TG3_GRC_LCLCTL_PWRSW_DELAY 100 117 118 /* length of time before we decide the hardware is borked, 119 * and dev->tx_timeout() should be called to fix the problem 120 */ 121 122 #define TG3_TX_TIMEOUT (5 * HZ) 123 124 /* hardware minimum and maximum for a single frame's data payload */ 125 #define TG3_MIN_MTU 60 126 #define TG3_MAX_MTU(tp) \ 127 (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500) 128 129 /* These numbers seem to be hard coded in the NIC firmware somehow. 130 * You can't change the ring sizes, but you can change where you place 131 * them in the NIC onboard memory. 132 */ 133 #define TG3_RX_STD_RING_SIZE(tp) \ 134 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 135 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700) 136 #define TG3_DEF_RX_RING_PENDING 200 137 #define TG3_RX_JMB_RING_SIZE(tp) \ 138 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 139 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700) 140 #define TG3_DEF_RX_JUMBO_RING_PENDING 100 141 142 /* Do not place this n-ring entries value into the tp struct itself, 143 * we really want to expose these constants to GCC so that modulo et 144 * al. operations are done with shifts and masks instead of with 145 * hw multiply/modulo instructions. Another solution would be to 146 * replace things like '% foo' with '& (foo - 1)'. 147 */ 148 149 #define TG3_TX_RING_SIZE 512 150 #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1) 151 152 #define TG3_RX_STD_RING_BYTES(tp) \ 153 (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp)) 154 #define TG3_RX_JMB_RING_BYTES(tp) \ 155 (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp)) 156 #define TG3_RX_RCB_RING_BYTES(tp) \ 157 (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1)) 158 #define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \ 159 TG3_TX_RING_SIZE) 160 #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) 161 162 #define TG3_DMA_BYTE_ENAB 64 163 164 #define TG3_RX_STD_DMA_SZ 1536 165 #define TG3_RX_JMB_DMA_SZ 9046 166 167 #define TG3_RX_DMA_TO_MAP_SZ(x) ((x) + TG3_DMA_BYTE_ENAB) 168 169 #define TG3_RX_STD_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ) 170 #define TG3_RX_JMB_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ) 171 172 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \ 173 (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp)) 174 175 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \ 176 (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp)) 177 178 /* Due to a hardware bug, the 5701 can only DMA to memory addresses 179 * that are at least dword aligned when used in PCIX mode. The driver 180 * works around this bug by double copying the packet. This workaround 181 * is built into the normal double copy length check for efficiency. 182 * 183 * However, the double copy is only necessary on those architectures 184 * where unaligned memory accesses are inefficient. For those architectures 185 * where unaligned memory accesses incur little penalty, we can reintegrate 186 * the 5701 in the normal rx path. Doing so saves a device structure 187 * dereference by hardcoding the double copy threshold in place. 188 */ 189 #define TG3_RX_COPY_THRESHOLD 256 190 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) 191 #define TG3_RX_COPY_THRESH(tp) TG3_RX_COPY_THRESHOLD 192 #else 193 #define TG3_RX_COPY_THRESH(tp) ((tp)->rx_copy_thresh) 194 #endif 195 196 #if (NET_IP_ALIGN != 0) 197 #define TG3_RX_OFFSET(tp) ((tp)->rx_offset) 198 #else 199 #define TG3_RX_OFFSET(tp) (NET_SKB_PAD) 200 #endif 201 202 /* minimum number of free TX descriptors required to wake up TX process */ 203 #define TG3_TX_WAKEUP_THRESH(tnapi) ((tnapi)->tx_pending / 4) 204 #define TG3_TX_BD_DMA_MAX_2K 2048 205 #define TG3_TX_BD_DMA_MAX_4K 4096 206 207 #define TG3_RAW_IP_ALIGN 2 208 209 #define TG3_FW_UPDATE_TIMEOUT_SEC 5 210 #define TG3_FW_UPDATE_FREQ_SEC (TG3_FW_UPDATE_TIMEOUT_SEC / 2) 211 212 #define FIRMWARE_TG3 "tigon/tg3.bin" 213 #define FIRMWARE_TG3TSO "tigon/tg3_tso.bin" 214 #define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin" 215 216 static char version[] __devinitdata = 217 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")"; 218 219 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)"); 220 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver"); 221 MODULE_LICENSE("GPL"); 222 MODULE_VERSION(DRV_MODULE_VERSION); 223 MODULE_FIRMWARE(FIRMWARE_TG3); 224 MODULE_FIRMWARE(FIRMWARE_TG3TSO); 225 MODULE_FIRMWARE(FIRMWARE_TG3TSO5); 226 227 static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */ 228 module_param(tg3_debug, int, 0); 229 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value"); 230 231 static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = { 232 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)}, 233 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)}, 234 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)}, 235 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)}, 236 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)}, 237 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)}, 238 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)}, 239 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)}, 240 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)}, 241 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)}, 242 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)}, 243 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)}, 244 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)}, 245 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)}, 246 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)}, 247 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)}, 248 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)}, 249 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)}, 250 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)}, 251 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)}, 252 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)}, 253 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)}, 254 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)}, 255 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)}, 256 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)}, 257 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)}, 258 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)}, 259 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)}, 260 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)}, 261 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)}, 262 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)}, 263 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)}, 264 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)}, 265 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)}, 266 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)}, 267 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)}, 268 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)}, 269 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)}, 270 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)}, 271 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)}, 272 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)}, 273 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)}, 274 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)}, 275 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)}, 276 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)}, 277 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)}, 278 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)}, 279 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)}, 280 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)}, 281 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)}, 282 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)}, 283 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)}, 284 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)}, 285 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)}, 286 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)}, 287 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)}, 288 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)}, 289 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)}, 290 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)}, 291 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)}, 292 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)}, 293 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790)}, 294 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)}, 295 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)}, 296 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)}, 297 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)}, 298 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)}, 299 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)}, 300 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)}, 301 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791)}, 302 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795)}, 303 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)}, 304 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)}, 305 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)}, 306 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)}, 307 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)}, 308 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)}, 309 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)}, 310 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)}, 311 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)}, 312 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)}, 313 {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */ 314 {} 315 }; 316 317 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl); 318 319 static const struct { 320 const char string[ETH_GSTRING_LEN]; 321 } ethtool_stats_keys[] = { 322 { "rx_octets" }, 323 { "rx_fragments" }, 324 { "rx_ucast_packets" }, 325 { "rx_mcast_packets" }, 326 { "rx_bcast_packets" }, 327 { "rx_fcs_errors" }, 328 { "rx_align_errors" }, 329 { "rx_xon_pause_rcvd" }, 330 { "rx_xoff_pause_rcvd" }, 331 { "rx_mac_ctrl_rcvd" }, 332 { "rx_xoff_entered" }, 333 { "rx_frame_too_long_errors" }, 334 { "rx_jabbers" }, 335 { "rx_undersize_packets" }, 336 { "rx_in_length_errors" }, 337 { "rx_out_length_errors" }, 338 { "rx_64_or_less_octet_packets" }, 339 { "rx_65_to_127_octet_packets" }, 340 { "rx_128_to_255_octet_packets" }, 341 { "rx_256_to_511_octet_packets" }, 342 { "rx_512_to_1023_octet_packets" }, 343 { "rx_1024_to_1522_octet_packets" }, 344 { "rx_1523_to_2047_octet_packets" }, 345 { "rx_2048_to_4095_octet_packets" }, 346 { "rx_4096_to_8191_octet_packets" }, 347 { "rx_8192_to_9022_octet_packets" }, 348 349 { "tx_octets" }, 350 { "tx_collisions" }, 351 352 { "tx_xon_sent" }, 353 { "tx_xoff_sent" }, 354 { "tx_flow_control" }, 355 { "tx_mac_errors" }, 356 { "tx_single_collisions" }, 357 { "tx_mult_collisions" }, 358 { "tx_deferred" }, 359 { "tx_excessive_collisions" }, 360 { "tx_late_collisions" }, 361 { "tx_collide_2times" }, 362 { "tx_collide_3times" }, 363 { "tx_collide_4times" }, 364 { "tx_collide_5times" }, 365 { "tx_collide_6times" }, 366 { "tx_collide_7times" }, 367 { "tx_collide_8times" }, 368 { "tx_collide_9times" }, 369 { "tx_collide_10times" }, 370 { "tx_collide_11times" }, 371 { "tx_collide_12times" }, 372 { "tx_collide_13times" }, 373 { "tx_collide_14times" }, 374 { "tx_collide_15times" }, 375 { "tx_ucast_packets" }, 376 { "tx_mcast_packets" }, 377 { "tx_bcast_packets" }, 378 { "tx_carrier_sense_errors" }, 379 { "tx_discards" }, 380 { "tx_errors" }, 381 382 { "dma_writeq_full" }, 383 { "dma_write_prioq_full" }, 384 { "rxbds_empty" }, 385 { "rx_discards" }, 386 { "rx_errors" }, 387 { "rx_threshold_hit" }, 388 389 { "dma_readq_full" }, 390 { "dma_read_prioq_full" }, 391 { "tx_comp_queue_full" }, 392 393 { "ring_set_send_prod_index" }, 394 { "ring_status_update" }, 395 { "nic_irqs" }, 396 { "nic_avoided_irqs" }, 397 { "nic_tx_threshold_hit" }, 398 399 { "mbuf_lwm_thresh_hit" }, 400 }; 401 402 #define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys) 403 404 405 static const struct { 406 const char string[ETH_GSTRING_LEN]; 407 } ethtool_test_keys[] = { 408 { "nvram test (online) " }, 409 { "link test (online) " }, 410 { "register test (offline)" }, 411 { "memory test (offline)" }, 412 { "mac loopback test (offline)" }, 413 { "phy loopback test (offline)" }, 414 { "ext loopback test (offline)" }, 415 { "interrupt test (offline)" }, 416 }; 417 418 #define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys) 419 420 421 static void tg3_write32(struct tg3 *tp, u32 off, u32 val) 422 { 423 writel(val, tp->regs + off); 424 } 425 426 static u32 tg3_read32(struct tg3 *tp, u32 off) 427 { 428 return readl(tp->regs + off); 429 } 430 431 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val) 432 { 433 writel(val, tp->aperegs + off); 434 } 435 436 static u32 tg3_ape_read32(struct tg3 *tp, u32 off) 437 { 438 return readl(tp->aperegs + off); 439 } 440 441 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) 442 { 443 unsigned long flags; 444 445 spin_lock_irqsave(&tp->indirect_lock, flags); 446 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 447 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 448 spin_unlock_irqrestore(&tp->indirect_lock, flags); 449 } 450 451 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val) 452 { 453 writel(val, tp->regs + off); 454 readl(tp->regs + off); 455 } 456 457 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off) 458 { 459 unsigned long flags; 460 u32 val; 461 462 spin_lock_irqsave(&tp->indirect_lock, flags); 463 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 464 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 465 spin_unlock_irqrestore(&tp->indirect_lock, flags); 466 return val; 467 } 468 469 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val) 470 { 471 unsigned long flags; 472 473 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) { 474 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX + 475 TG3_64BIT_REG_LOW, val); 476 return; 477 } 478 if (off == TG3_RX_STD_PROD_IDX_REG) { 479 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX + 480 TG3_64BIT_REG_LOW, val); 481 return; 482 } 483 484 spin_lock_irqsave(&tp->indirect_lock, flags); 485 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 486 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 487 spin_unlock_irqrestore(&tp->indirect_lock, flags); 488 489 /* In indirect mode when disabling interrupts, we also need 490 * to clear the interrupt bit in the GRC local ctrl register. 491 */ 492 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) && 493 (val == 0x1)) { 494 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL, 495 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT); 496 } 497 } 498 499 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off) 500 { 501 unsigned long flags; 502 u32 val; 503 504 spin_lock_irqsave(&tp->indirect_lock, flags); 505 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 506 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 507 spin_unlock_irqrestore(&tp->indirect_lock, flags); 508 return val; 509 } 510 511 /* usec_wait specifies the wait time in usec when writing to certain registers 512 * where it is unsafe to read back the register without some delay. 513 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power. 514 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed. 515 */ 516 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait) 517 { 518 if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND)) 519 /* Non-posted methods */ 520 tp->write32(tp, off, val); 521 else { 522 /* Posted method */ 523 tg3_write32(tp, off, val); 524 if (usec_wait) 525 udelay(usec_wait); 526 tp->read32(tp, off); 527 } 528 /* Wait again after the read for the posted method to guarantee that 529 * the wait time is met. 530 */ 531 if (usec_wait) 532 udelay(usec_wait); 533 } 534 535 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) 536 { 537 tp->write32_mbox(tp, off, val); 538 if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND)) 539 tp->read32_mbox(tp, off); 540 } 541 542 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val) 543 { 544 void __iomem *mbox = tp->regs + off; 545 writel(val, mbox); 546 if (tg3_flag(tp, TXD_MBOX_HWBUG)) 547 writel(val, mbox); 548 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 549 readl(mbox); 550 } 551 552 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off) 553 { 554 return readl(tp->regs + off + GRCMBOX_BASE); 555 } 556 557 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val) 558 { 559 writel(val, tp->regs + off + GRCMBOX_BASE); 560 } 561 562 #define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val) 563 #define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val)) 564 #define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val) 565 #define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val) 566 #define tr32_mailbox(reg) tp->read32_mbox(tp, reg) 567 568 #define tw32(reg, val) tp->write32(tp, reg, val) 569 #define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0) 570 #define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us)) 571 #define tr32(reg) tp->read32(tp, reg) 572 573 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) 574 { 575 unsigned long flags; 576 577 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 && 578 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) 579 return; 580 581 spin_lock_irqsave(&tp->indirect_lock, flags); 582 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 583 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 584 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 585 586 /* Always leave this as zero. */ 587 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 588 } else { 589 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 590 tw32_f(TG3PCI_MEM_WIN_DATA, val); 591 592 /* Always leave this as zero. */ 593 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 594 } 595 spin_unlock_irqrestore(&tp->indirect_lock, flags); 596 } 597 598 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) 599 { 600 unsigned long flags; 601 602 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 && 603 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) { 604 *val = 0; 605 return; 606 } 607 608 spin_lock_irqsave(&tp->indirect_lock, flags); 609 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 610 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 611 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 612 613 /* Always leave this as zero. */ 614 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 615 } else { 616 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 617 *val = tr32(TG3PCI_MEM_WIN_DATA); 618 619 /* Always leave this as zero. */ 620 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 621 } 622 spin_unlock_irqrestore(&tp->indirect_lock, flags); 623 } 624 625 static void tg3_ape_lock_init(struct tg3 *tp) 626 { 627 int i; 628 u32 regbase, bit; 629 630 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 631 regbase = TG3_APE_LOCK_GRANT; 632 else 633 regbase = TG3_APE_PER_LOCK_GRANT; 634 635 /* Make sure the driver hasn't any stale locks. */ 636 for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) { 637 switch (i) { 638 case TG3_APE_LOCK_PHY0: 639 case TG3_APE_LOCK_PHY1: 640 case TG3_APE_LOCK_PHY2: 641 case TG3_APE_LOCK_PHY3: 642 bit = APE_LOCK_GRANT_DRIVER; 643 break; 644 default: 645 if (!tp->pci_fn) 646 bit = APE_LOCK_GRANT_DRIVER; 647 else 648 bit = 1 << tp->pci_fn; 649 } 650 tg3_ape_write32(tp, regbase + 4 * i, bit); 651 } 652 653 } 654 655 static int tg3_ape_lock(struct tg3 *tp, int locknum) 656 { 657 int i, off; 658 int ret = 0; 659 u32 status, req, gnt, bit; 660 661 if (!tg3_flag(tp, ENABLE_APE)) 662 return 0; 663 664 switch (locknum) { 665 case TG3_APE_LOCK_GPIO: 666 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 667 return 0; 668 case TG3_APE_LOCK_GRC: 669 case TG3_APE_LOCK_MEM: 670 if (!tp->pci_fn) 671 bit = APE_LOCK_REQ_DRIVER; 672 else 673 bit = 1 << tp->pci_fn; 674 break; 675 default: 676 return -EINVAL; 677 } 678 679 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) { 680 req = TG3_APE_LOCK_REQ; 681 gnt = TG3_APE_LOCK_GRANT; 682 } else { 683 req = TG3_APE_PER_LOCK_REQ; 684 gnt = TG3_APE_PER_LOCK_GRANT; 685 } 686 687 off = 4 * locknum; 688 689 tg3_ape_write32(tp, req + off, bit); 690 691 /* Wait for up to 1 millisecond to acquire lock. */ 692 for (i = 0; i < 100; i++) { 693 status = tg3_ape_read32(tp, gnt + off); 694 if (status == bit) 695 break; 696 udelay(10); 697 } 698 699 if (status != bit) { 700 /* Revoke the lock request. */ 701 tg3_ape_write32(tp, gnt + off, bit); 702 ret = -EBUSY; 703 } 704 705 return ret; 706 } 707 708 static void tg3_ape_unlock(struct tg3 *tp, int locknum) 709 { 710 u32 gnt, bit; 711 712 if (!tg3_flag(tp, ENABLE_APE)) 713 return; 714 715 switch (locknum) { 716 case TG3_APE_LOCK_GPIO: 717 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 718 return; 719 case TG3_APE_LOCK_GRC: 720 case TG3_APE_LOCK_MEM: 721 if (!tp->pci_fn) 722 bit = APE_LOCK_GRANT_DRIVER; 723 else 724 bit = 1 << tp->pci_fn; 725 break; 726 default: 727 return; 728 } 729 730 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 731 gnt = TG3_APE_LOCK_GRANT; 732 else 733 gnt = TG3_APE_PER_LOCK_GRANT; 734 735 tg3_ape_write32(tp, gnt + 4 * locknum, bit); 736 } 737 738 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us) 739 { 740 u32 apedata; 741 742 while (timeout_us) { 743 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM)) 744 return -EBUSY; 745 746 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 747 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 748 break; 749 750 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 751 752 udelay(10); 753 timeout_us -= (timeout_us > 10) ? 10 : timeout_us; 754 } 755 756 return timeout_us ? 0 : -EBUSY; 757 } 758 759 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us) 760 { 761 u32 i, apedata; 762 763 for (i = 0; i < timeout_us / 10; i++) { 764 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 765 766 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 767 break; 768 769 udelay(10); 770 } 771 772 return i == timeout_us / 10; 773 } 774 775 int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off, u32 len) 776 { 777 int err; 778 u32 i, bufoff, msgoff, maxlen, apedata; 779 780 if (!tg3_flag(tp, APE_HAS_NCSI)) 781 return 0; 782 783 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 784 if (apedata != APE_SEG_SIG_MAGIC) 785 return -ENODEV; 786 787 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 788 if (!(apedata & APE_FW_STATUS_READY)) 789 return -EAGAIN; 790 791 bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) + 792 TG3_APE_SHMEM_BASE; 793 msgoff = bufoff + 2 * sizeof(u32); 794 maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN); 795 796 while (len) { 797 u32 length; 798 799 /* Cap xfer sizes to scratchpad limits. */ 800 length = (len > maxlen) ? maxlen : len; 801 len -= length; 802 803 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 804 if (!(apedata & APE_FW_STATUS_READY)) 805 return -EAGAIN; 806 807 /* Wait for up to 1 msec for APE to service previous event. */ 808 err = tg3_ape_event_lock(tp, 1000); 809 if (err) 810 return err; 811 812 apedata = APE_EVENT_STATUS_DRIVER_EVNT | 813 APE_EVENT_STATUS_SCRTCHPD_READ | 814 APE_EVENT_STATUS_EVENT_PENDING; 815 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata); 816 817 tg3_ape_write32(tp, bufoff, base_off); 818 tg3_ape_write32(tp, bufoff + sizeof(u32), length); 819 820 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 821 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 822 823 base_off += length; 824 825 if (tg3_ape_wait_for_event(tp, 30000)) 826 return -EAGAIN; 827 828 for (i = 0; length; i += 4, length -= 4) { 829 u32 val = tg3_ape_read32(tp, msgoff + i); 830 memcpy(data, &val, sizeof(u32)); 831 data++; 832 } 833 } 834 835 return 0; 836 } 837 838 static int tg3_ape_send_event(struct tg3 *tp, u32 event) 839 { 840 int err; 841 u32 apedata; 842 843 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 844 if (apedata != APE_SEG_SIG_MAGIC) 845 return -EAGAIN; 846 847 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 848 if (!(apedata & APE_FW_STATUS_READY)) 849 return -EAGAIN; 850 851 /* Wait for up to 1 millisecond for APE to service previous event. */ 852 err = tg3_ape_event_lock(tp, 1000); 853 if (err) 854 return err; 855 856 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, 857 event | APE_EVENT_STATUS_EVENT_PENDING); 858 859 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 860 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 861 862 return 0; 863 } 864 865 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind) 866 { 867 u32 event; 868 u32 apedata; 869 870 if (!tg3_flag(tp, ENABLE_APE)) 871 return; 872 873 switch (kind) { 874 case RESET_KIND_INIT: 875 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 876 APE_HOST_SEG_SIG_MAGIC); 877 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN, 878 APE_HOST_SEG_LEN_MAGIC); 879 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT); 880 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata); 881 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID, 882 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM)); 883 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR, 884 APE_HOST_BEHAV_NO_PHYLOCK); 885 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, 886 TG3_APE_HOST_DRVR_STATE_START); 887 888 event = APE_EVENT_STATUS_STATE_START; 889 break; 890 case RESET_KIND_SHUTDOWN: 891 /* With the interface we are currently using, 892 * APE does not track driver state. Wiping 893 * out the HOST SEGMENT SIGNATURE forces 894 * the APE to assume OS absent status. 895 */ 896 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0); 897 898 if (device_may_wakeup(&tp->pdev->dev) && 899 tg3_flag(tp, WOL_ENABLE)) { 900 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED, 901 TG3_APE_HOST_WOL_SPEED_AUTO); 902 apedata = TG3_APE_HOST_DRVR_STATE_WOL; 903 } else 904 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD; 905 906 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata); 907 908 event = APE_EVENT_STATUS_STATE_UNLOAD; 909 break; 910 case RESET_KIND_SUSPEND: 911 event = APE_EVENT_STATUS_STATE_SUSPEND; 912 break; 913 default: 914 return; 915 } 916 917 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE; 918 919 tg3_ape_send_event(tp, event); 920 } 921 922 static void tg3_disable_ints(struct tg3 *tp) 923 { 924 int i; 925 926 tw32(TG3PCI_MISC_HOST_CTRL, 927 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT)); 928 for (i = 0; i < tp->irq_max; i++) 929 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001); 930 } 931 932 static void tg3_enable_ints(struct tg3 *tp) 933 { 934 int i; 935 936 tp->irq_sync = 0; 937 wmb(); 938 939 tw32(TG3PCI_MISC_HOST_CTRL, 940 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT)); 941 942 tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE; 943 for (i = 0; i < tp->irq_cnt; i++) { 944 struct tg3_napi *tnapi = &tp->napi[i]; 945 946 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 947 if (tg3_flag(tp, 1SHOT_MSI)) 948 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 949 950 tp->coal_now |= tnapi->coal_now; 951 } 952 953 /* Force an initial interrupt */ 954 if (!tg3_flag(tp, TAGGED_STATUS) && 955 (tp->napi[0].hw_status->status & SD_STATUS_UPDATED)) 956 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 957 else 958 tw32(HOSTCC_MODE, tp->coal_now); 959 960 tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now); 961 } 962 963 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi) 964 { 965 struct tg3 *tp = tnapi->tp; 966 struct tg3_hw_status *sblk = tnapi->hw_status; 967 unsigned int work_exists = 0; 968 969 /* check for phy events */ 970 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 971 if (sblk->status & SD_STATUS_LINK_CHG) 972 work_exists = 1; 973 } 974 975 /* check for TX work to do */ 976 if (sblk->idx[0].tx_consumer != tnapi->tx_cons) 977 work_exists = 1; 978 979 /* check for RX work to do */ 980 if (tnapi->rx_rcb_prod_idx && 981 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 982 work_exists = 1; 983 984 return work_exists; 985 } 986 987 /* tg3_int_reenable 988 * similar to tg3_enable_ints, but it accurately determines whether there 989 * is new work pending and can return without flushing the PIO write 990 * which reenables interrupts 991 */ 992 static void tg3_int_reenable(struct tg3_napi *tnapi) 993 { 994 struct tg3 *tp = tnapi->tp; 995 996 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 997 mmiowb(); 998 999 /* When doing tagged status, this work check is unnecessary. 1000 * The last_tag we write above tells the chip which piece of 1001 * work we've completed. 1002 */ 1003 if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi)) 1004 tw32(HOSTCC_MODE, tp->coalesce_mode | 1005 HOSTCC_MODE_ENABLE | tnapi->coal_now); 1006 } 1007 1008 static void tg3_switch_clocks(struct tg3 *tp) 1009 { 1010 u32 clock_ctrl; 1011 u32 orig_clock_ctrl; 1012 1013 if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS)) 1014 return; 1015 1016 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); 1017 1018 orig_clock_ctrl = clock_ctrl; 1019 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | 1020 CLOCK_CTRL_CLKRUN_OENABLE | 1021 0x1f); 1022 tp->pci_clock_ctrl = clock_ctrl; 1023 1024 if (tg3_flag(tp, 5705_PLUS)) { 1025 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) { 1026 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1027 clock_ctrl | CLOCK_CTRL_625_CORE, 40); 1028 } 1029 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { 1030 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1031 clock_ctrl | 1032 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK), 1033 40); 1034 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1035 clock_ctrl | (CLOCK_CTRL_ALTCLK), 1036 40); 1037 } 1038 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40); 1039 } 1040 1041 #define PHY_BUSY_LOOPS 5000 1042 1043 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val) 1044 { 1045 u32 frame_val; 1046 unsigned int loops; 1047 int ret; 1048 1049 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1050 tw32_f(MAC_MI_MODE, 1051 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1052 udelay(80); 1053 } 1054 1055 *val = 0x0; 1056 1057 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1058 MI_COM_PHY_ADDR_MASK); 1059 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1060 MI_COM_REG_ADDR_MASK); 1061 frame_val |= (MI_COM_CMD_READ | MI_COM_START); 1062 1063 tw32_f(MAC_MI_COM, frame_val); 1064 1065 loops = PHY_BUSY_LOOPS; 1066 while (loops != 0) { 1067 udelay(10); 1068 frame_val = tr32(MAC_MI_COM); 1069 1070 if ((frame_val & MI_COM_BUSY) == 0) { 1071 udelay(5); 1072 frame_val = tr32(MAC_MI_COM); 1073 break; 1074 } 1075 loops -= 1; 1076 } 1077 1078 ret = -EBUSY; 1079 if (loops != 0) { 1080 *val = frame_val & MI_COM_DATA_MASK; 1081 ret = 0; 1082 } 1083 1084 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1085 tw32_f(MAC_MI_MODE, tp->mi_mode); 1086 udelay(80); 1087 } 1088 1089 return ret; 1090 } 1091 1092 static int tg3_writephy(struct tg3 *tp, int reg, u32 val) 1093 { 1094 u32 frame_val; 1095 unsigned int loops; 1096 int ret; 1097 1098 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 1099 (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL)) 1100 return 0; 1101 1102 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1103 tw32_f(MAC_MI_MODE, 1104 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1105 udelay(80); 1106 } 1107 1108 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1109 MI_COM_PHY_ADDR_MASK); 1110 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1111 MI_COM_REG_ADDR_MASK); 1112 frame_val |= (val & MI_COM_DATA_MASK); 1113 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START); 1114 1115 tw32_f(MAC_MI_COM, frame_val); 1116 1117 loops = PHY_BUSY_LOOPS; 1118 while (loops != 0) { 1119 udelay(10); 1120 frame_val = tr32(MAC_MI_COM); 1121 if ((frame_val & MI_COM_BUSY) == 0) { 1122 udelay(5); 1123 frame_val = tr32(MAC_MI_COM); 1124 break; 1125 } 1126 loops -= 1; 1127 } 1128 1129 ret = -EBUSY; 1130 if (loops != 0) 1131 ret = 0; 1132 1133 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1134 tw32_f(MAC_MI_MODE, tp->mi_mode); 1135 udelay(80); 1136 } 1137 1138 return ret; 1139 } 1140 1141 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val) 1142 { 1143 int err; 1144 1145 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1146 if (err) 1147 goto done; 1148 1149 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1150 if (err) 1151 goto done; 1152 1153 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1154 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1155 if (err) 1156 goto done; 1157 1158 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val); 1159 1160 done: 1161 return err; 1162 } 1163 1164 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val) 1165 { 1166 int err; 1167 1168 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1169 if (err) 1170 goto done; 1171 1172 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1173 if (err) 1174 goto done; 1175 1176 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1177 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1178 if (err) 1179 goto done; 1180 1181 err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val); 1182 1183 done: 1184 return err; 1185 } 1186 1187 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val) 1188 { 1189 int err; 1190 1191 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1192 if (!err) 1193 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val); 1194 1195 return err; 1196 } 1197 1198 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val) 1199 { 1200 int err; 1201 1202 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1203 if (!err) 1204 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val); 1205 1206 return err; 1207 } 1208 1209 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val) 1210 { 1211 int err; 1212 1213 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 1214 (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) | 1215 MII_TG3_AUXCTL_SHDWSEL_MISC); 1216 if (!err) 1217 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val); 1218 1219 return err; 1220 } 1221 1222 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set) 1223 { 1224 if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC) 1225 set |= MII_TG3_AUXCTL_MISC_WREN; 1226 1227 return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg); 1228 } 1229 1230 #define TG3_PHY_AUXCTL_SMDSP_ENABLE(tp) \ 1231 tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \ 1232 MII_TG3_AUXCTL_ACTL_SMDSP_ENA | \ 1233 MII_TG3_AUXCTL_ACTL_TX_6DB) 1234 1235 #define TG3_PHY_AUXCTL_SMDSP_DISABLE(tp) \ 1236 tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, \ 1237 MII_TG3_AUXCTL_ACTL_TX_6DB); 1238 1239 static int tg3_bmcr_reset(struct tg3 *tp) 1240 { 1241 u32 phy_control; 1242 int limit, err; 1243 1244 /* OK, reset it, and poll the BMCR_RESET bit until it 1245 * clears or we time out. 1246 */ 1247 phy_control = BMCR_RESET; 1248 err = tg3_writephy(tp, MII_BMCR, phy_control); 1249 if (err != 0) 1250 return -EBUSY; 1251 1252 limit = 5000; 1253 while (limit--) { 1254 err = tg3_readphy(tp, MII_BMCR, &phy_control); 1255 if (err != 0) 1256 return -EBUSY; 1257 1258 if ((phy_control & BMCR_RESET) == 0) { 1259 udelay(40); 1260 break; 1261 } 1262 udelay(10); 1263 } 1264 if (limit < 0) 1265 return -EBUSY; 1266 1267 return 0; 1268 } 1269 1270 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg) 1271 { 1272 struct tg3 *tp = bp->priv; 1273 u32 val; 1274 1275 spin_lock_bh(&tp->lock); 1276 1277 if (tg3_readphy(tp, reg, &val)) 1278 val = -EIO; 1279 1280 spin_unlock_bh(&tp->lock); 1281 1282 return val; 1283 } 1284 1285 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val) 1286 { 1287 struct tg3 *tp = bp->priv; 1288 u32 ret = 0; 1289 1290 spin_lock_bh(&tp->lock); 1291 1292 if (tg3_writephy(tp, reg, val)) 1293 ret = -EIO; 1294 1295 spin_unlock_bh(&tp->lock); 1296 1297 return ret; 1298 } 1299 1300 static int tg3_mdio_reset(struct mii_bus *bp) 1301 { 1302 return 0; 1303 } 1304 1305 static void tg3_mdio_config_5785(struct tg3 *tp) 1306 { 1307 u32 val; 1308 struct phy_device *phydev; 1309 1310 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1311 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1312 case PHY_ID_BCM50610: 1313 case PHY_ID_BCM50610M: 1314 val = MAC_PHYCFG2_50610_LED_MODES; 1315 break; 1316 case PHY_ID_BCMAC131: 1317 val = MAC_PHYCFG2_AC131_LED_MODES; 1318 break; 1319 case PHY_ID_RTL8211C: 1320 val = MAC_PHYCFG2_RTL8211C_LED_MODES; 1321 break; 1322 case PHY_ID_RTL8201E: 1323 val = MAC_PHYCFG2_RTL8201E_LED_MODES; 1324 break; 1325 default: 1326 return; 1327 } 1328 1329 if (phydev->interface != PHY_INTERFACE_MODE_RGMII) { 1330 tw32(MAC_PHYCFG2, val); 1331 1332 val = tr32(MAC_PHYCFG1); 1333 val &= ~(MAC_PHYCFG1_RGMII_INT | 1334 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK); 1335 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT; 1336 tw32(MAC_PHYCFG1, val); 1337 1338 return; 1339 } 1340 1341 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) 1342 val |= MAC_PHYCFG2_EMODE_MASK_MASK | 1343 MAC_PHYCFG2_FMODE_MASK_MASK | 1344 MAC_PHYCFG2_GMODE_MASK_MASK | 1345 MAC_PHYCFG2_ACT_MASK_MASK | 1346 MAC_PHYCFG2_QUAL_MASK_MASK | 1347 MAC_PHYCFG2_INBAND_ENABLE; 1348 1349 tw32(MAC_PHYCFG2, val); 1350 1351 val = tr32(MAC_PHYCFG1); 1352 val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK | 1353 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN); 1354 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1355 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1356 val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC; 1357 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1358 val |= MAC_PHYCFG1_RGMII_SND_STAT_EN; 1359 } 1360 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT | 1361 MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV; 1362 tw32(MAC_PHYCFG1, val); 1363 1364 val = tr32(MAC_EXT_RGMII_MODE); 1365 val &= ~(MAC_RGMII_MODE_RX_INT_B | 1366 MAC_RGMII_MODE_RX_QUALITY | 1367 MAC_RGMII_MODE_RX_ACTIVITY | 1368 MAC_RGMII_MODE_RX_ENG_DET | 1369 MAC_RGMII_MODE_TX_ENABLE | 1370 MAC_RGMII_MODE_TX_LOWPWR | 1371 MAC_RGMII_MODE_TX_RESET); 1372 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1373 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1374 val |= MAC_RGMII_MODE_RX_INT_B | 1375 MAC_RGMII_MODE_RX_QUALITY | 1376 MAC_RGMII_MODE_RX_ACTIVITY | 1377 MAC_RGMII_MODE_RX_ENG_DET; 1378 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1379 val |= MAC_RGMII_MODE_TX_ENABLE | 1380 MAC_RGMII_MODE_TX_LOWPWR | 1381 MAC_RGMII_MODE_TX_RESET; 1382 } 1383 tw32(MAC_EXT_RGMII_MODE, val); 1384 } 1385 1386 static void tg3_mdio_start(struct tg3 *tp) 1387 { 1388 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL; 1389 tw32_f(MAC_MI_MODE, tp->mi_mode); 1390 udelay(80); 1391 1392 if (tg3_flag(tp, MDIOBUS_INITED) && 1393 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 1394 tg3_mdio_config_5785(tp); 1395 } 1396 1397 static int tg3_mdio_init(struct tg3 *tp) 1398 { 1399 int i; 1400 u32 reg; 1401 struct phy_device *phydev; 1402 1403 if (tg3_flag(tp, 5717_PLUS)) { 1404 u32 is_serdes; 1405 1406 tp->phy_addr = tp->pci_fn + 1; 1407 1408 if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) 1409 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; 1410 else 1411 is_serdes = tr32(TG3_CPMU_PHY_STRAP) & 1412 TG3_CPMU_PHY_STRAP_IS_SERDES; 1413 if (is_serdes) 1414 tp->phy_addr += 7; 1415 } else 1416 tp->phy_addr = TG3_PHY_MII_ADDR; 1417 1418 tg3_mdio_start(tp); 1419 1420 if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED)) 1421 return 0; 1422 1423 tp->mdio_bus = mdiobus_alloc(); 1424 if (tp->mdio_bus == NULL) 1425 return -ENOMEM; 1426 1427 tp->mdio_bus->name = "tg3 mdio bus"; 1428 snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x", 1429 (tp->pdev->bus->number << 8) | tp->pdev->devfn); 1430 tp->mdio_bus->priv = tp; 1431 tp->mdio_bus->parent = &tp->pdev->dev; 1432 tp->mdio_bus->read = &tg3_mdio_read; 1433 tp->mdio_bus->write = &tg3_mdio_write; 1434 tp->mdio_bus->reset = &tg3_mdio_reset; 1435 tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR); 1436 tp->mdio_bus->irq = &tp->mdio_irq[0]; 1437 1438 for (i = 0; i < PHY_MAX_ADDR; i++) 1439 tp->mdio_bus->irq[i] = PHY_POLL; 1440 1441 /* The bus registration will look for all the PHYs on the mdio bus. 1442 * Unfortunately, it does not ensure the PHY is powered up before 1443 * accessing the PHY ID registers. A chip reset is the 1444 * quickest way to bring the device back to an operational state.. 1445 */ 1446 if (tg3_readphy(tp, MII_BMCR, ®) || (reg & BMCR_PDOWN)) 1447 tg3_bmcr_reset(tp); 1448 1449 i = mdiobus_register(tp->mdio_bus); 1450 if (i) { 1451 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i); 1452 mdiobus_free(tp->mdio_bus); 1453 return i; 1454 } 1455 1456 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1457 1458 if (!phydev || !phydev->drv) { 1459 dev_warn(&tp->pdev->dev, "No PHY devices\n"); 1460 mdiobus_unregister(tp->mdio_bus); 1461 mdiobus_free(tp->mdio_bus); 1462 return -ENODEV; 1463 } 1464 1465 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1466 case PHY_ID_BCM57780: 1467 phydev->interface = PHY_INTERFACE_MODE_GMII; 1468 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1469 break; 1470 case PHY_ID_BCM50610: 1471 case PHY_ID_BCM50610M: 1472 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE | 1473 PHY_BRCM_RX_REFCLK_UNUSED | 1474 PHY_BRCM_DIS_TXCRXC_NOENRGY | 1475 PHY_BRCM_AUTO_PWRDWN_ENABLE; 1476 if (tg3_flag(tp, RGMII_INBAND_DISABLE)) 1477 phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE; 1478 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1479 phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE; 1480 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1481 phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE; 1482 /* fallthru */ 1483 case PHY_ID_RTL8211C: 1484 phydev->interface = PHY_INTERFACE_MODE_RGMII; 1485 break; 1486 case PHY_ID_RTL8201E: 1487 case PHY_ID_BCMAC131: 1488 phydev->interface = PHY_INTERFACE_MODE_MII; 1489 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1490 tp->phy_flags |= TG3_PHYFLG_IS_FET; 1491 break; 1492 } 1493 1494 tg3_flag_set(tp, MDIOBUS_INITED); 1495 1496 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 1497 tg3_mdio_config_5785(tp); 1498 1499 return 0; 1500 } 1501 1502 static void tg3_mdio_fini(struct tg3 *tp) 1503 { 1504 if (tg3_flag(tp, MDIOBUS_INITED)) { 1505 tg3_flag_clear(tp, MDIOBUS_INITED); 1506 mdiobus_unregister(tp->mdio_bus); 1507 mdiobus_free(tp->mdio_bus); 1508 } 1509 } 1510 1511 /* tp->lock is held. */ 1512 static inline void tg3_generate_fw_event(struct tg3 *tp) 1513 { 1514 u32 val; 1515 1516 val = tr32(GRC_RX_CPU_EVENT); 1517 val |= GRC_RX_CPU_DRIVER_EVENT; 1518 tw32_f(GRC_RX_CPU_EVENT, val); 1519 1520 tp->last_event_jiffies = jiffies; 1521 } 1522 1523 #define TG3_FW_EVENT_TIMEOUT_USEC 2500 1524 1525 /* tp->lock is held. */ 1526 static void tg3_wait_for_event_ack(struct tg3 *tp) 1527 { 1528 int i; 1529 unsigned int delay_cnt; 1530 long time_remain; 1531 1532 /* If enough time has passed, no wait is necessary. */ 1533 time_remain = (long)(tp->last_event_jiffies + 1 + 1534 usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) - 1535 (long)jiffies; 1536 if (time_remain < 0) 1537 return; 1538 1539 /* Check if we can shorten the wait time. */ 1540 delay_cnt = jiffies_to_usecs(time_remain); 1541 if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC) 1542 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC; 1543 delay_cnt = (delay_cnt >> 3) + 1; 1544 1545 for (i = 0; i < delay_cnt; i++) { 1546 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT)) 1547 break; 1548 udelay(8); 1549 } 1550 } 1551 1552 /* tp->lock is held. */ 1553 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data) 1554 { 1555 u32 reg, val; 1556 1557 val = 0; 1558 if (!tg3_readphy(tp, MII_BMCR, ®)) 1559 val = reg << 16; 1560 if (!tg3_readphy(tp, MII_BMSR, ®)) 1561 val |= (reg & 0xffff); 1562 *data++ = val; 1563 1564 val = 0; 1565 if (!tg3_readphy(tp, MII_ADVERTISE, ®)) 1566 val = reg << 16; 1567 if (!tg3_readphy(tp, MII_LPA, ®)) 1568 val |= (reg & 0xffff); 1569 *data++ = val; 1570 1571 val = 0; 1572 if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) { 1573 if (!tg3_readphy(tp, MII_CTRL1000, ®)) 1574 val = reg << 16; 1575 if (!tg3_readphy(tp, MII_STAT1000, ®)) 1576 val |= (reg & 0xffff); 1577 } 1578 *data++ = val; 1579 1580 if (!tg3_readphy(tp, MII_PHYADDR, ®)) 1581 val = reg << 16; 1582 else 1583 val = 0; 1584 *data++ = val; 1585 } 1586 1587 /* tp->lock is held. */ 1588 static void tg3_ump_link_report(struct tg3 *tp) 1589 { 1590 u32 data[4]; 1591 1592 if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF)) 1593 return; 1594 1595 tg3_phy_gather_ump_data(tp, data); 1596 1597 tg3_wait_for_event_ack(tp); 1598 1599 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE); 1600 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14); 1601 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]); 1602 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]); 1603 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]); 1604 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]); 1605 1606 tg3_generate_fw_event(tp); 1607 } 1608 1609 /* tp->lock is held. */ 1610 static void tg3_stop_fw(struct tg3 *tp) 1611 { 1612 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 1613 /* Wait for RX cpu to ACK the previous event. */ 1614 tg3_wait_for_event_ack(tp); 1615 1616 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW); 1617 1618 tg3_generate_fw_event(tp); 1619 1620 /* Wait for RX cpu to ACK this event. */ 1621 tg3_wait_for_event_ack(tp); 1622 } 1623 } 1624 1625 /* tp->lock is held. */ 1626 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) 1627 { 1628 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, 1629 NIC_SRAM_FIRMWARE_MBOX_MAGIC1); 1630 1631 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1632 switch (kind) { 1633 case RESET_KIND_INIT: 1634 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1635 DRV_STATE_START); 1636 break; 1637 1638 case RESET_KIND_SHUTDOWN: 1639 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1640 DRV_STATE_UNLOAD); 1641 break; 1642 1643 case RESET_KIND_SUSPEND: 1644 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1645 DRV_STATE_SUSPEND); 1646 break; 1647 1648 default: 1649 break; 1650 } 1651 } 1652 1653 if (kind == RESET_KIND_INIT || 1654 kind == RESET_KIND_SUSPEND) 1655 tg3_ape_driver_state_change(tp, kind); 1656 } 1657 1658 /* tp->lock is held. */ 1659 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) 1660 { 1661 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1662 switch (kind) { 1663 case RESET_KIND_INIT: 1664 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1665 DRV_STATE_START_DONE); 1666 break; 1667 1668 case RESET_KIND_SHUTDOWN: 1669 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1670 DRV_STATE_UNLOAD_DONE); 1671 break; 1672 1673 default: 1674 break; 1675 } 1676 } 1677 1678 if (kind == RESET_KIND_SHUTDOWN) 1679 tg3_ape_driver_state_change(tp, kind); 1680 } 1681 1682 /* tp->lock is held. */ 1683 static void tg3_write_sig_legacy(struct tg3 *tp, int kind) 1684 { 1685 if (tg3_flag(tp, ENABLE_ASF)) { 1686 switch (kind) { 1687 case RESET_KIND_INIT: 1688 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1689 DRV_STATE_START); 1690 break; 1691 1692 case RESET_KIND_SHUTDOWN: 1693 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1694 DRV_STATE_UNLOAD); 1695 break; 1696 1697 case RESET_KIND_SUSPEND: 1698 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1699 DRV_STATE_SUSPEND); 1700 break; 1701 1702 default: 1703 break; 1704 } 1705 } 1706 } 1707 1708 static int tg3_poll_fw(struct tg3 *tp) 1709 { 1710 int i; 1711 u32 val; 1712 1713 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 1714 /* Wait up to 20ms for init done. */ 1715 for (i = 0; i < 200; i++) { 1716 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE) 1717 return 0; 1718 udelay(100); 1719 } 1720 return -ENODEV; 1721 } 1722 1723 /* Wait for firmware initialization to complete. */ 1724 for (i = 0; i < 100000; i++) { 1725 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); 1726 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 1727 break; 1728 udelay(10); 1729 } 1730 1731 /* Chip might not be fitted with firmware. Some Sun onboard 1732 * parts are configured like that. So don't signal the timeout 1733 * of the above loop as an error, but do report the lack of 1734 * running firmware once. 1735 */ 1736 if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) { 1737 tg3_flag_set(tp, NO_FWARE_REPORTED); 1738 1739 netdev_info(tp->dev, "No firmware running\n"); 1740 } 1741 1742 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) { 1743 /* The 57765 A0 needs a little more 1744 * time to do some important work. 1745 */ 1746 mdelay(10); 1747 } 1748 1749 return 0; 1750 } 1751 1752 static void tg3_link_report(struct tg3 *tp) 1753 { 1754 if (!netif_carrier_ok(tp->dev)) { 1755 netif_info(tp, link, tp->dev, "Link is down\n"); 1756 tg3_ump_link_report(tp); 1757 } else if (netif_msg_link(tp)) { 1758 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n", 1759 (tp->link_config.active_speed == SPEED_1000 ? 1760 1000 : 1761 (tp->link_config.active_speed == SPEED_100 ? 1762 100 : 10)), 1763 (tp->link_config.active_duplex == DUPLEX_FULL ? 1764 "full" : "half")); 1765 1766 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n", 1767 (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ? 1768 "on" : "off", 1769 (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ? 1770 "on" : "off"); 1771 1772 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 1773 netdev_info(tp->dev, "EEE is %s\n", 1774 tp->setlpicnt ? "enabled" : "disabled"); 1775 1776 tg3_ump_link_report(tp); 1777 } 1778 } 1779 1780 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl) 1781 { 1782 u16 miireg; 1783 1784 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX)) 1785 miireg = ADVERTISE_1000XPAUSE; 1786 else if (flow_ctrl & FLOW_CTRL_TX) 1787 miireg = ADVERTISE_1000XPSE_ASYM; 1788 else if (flow_ctrl & FLOW_CTRL_RX) 1789 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM; 1790 else 1791 miireg = 0; 1792 1793 return miireg; 1794 } 1795 1796 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv) 1797 { 1798 u8 cap = 0; 1799 1800 if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) { 1801 cap = FLOW_CTRL_TX | FLOW_CTRL_RX; 1802 } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) { 1803 if (lcladv & ADVERTISE_1000XPAUSE) 1804 cap = FLOW_CTRL_RX; 1805 if (rmtadv & ADVERTISE_1000XPAUSE) 1806 cap = FLOW_CTRL_TX; 1807 } 1808 1809 return cap; 1810 } 1811 1812 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv) 1813 { 1814 u8 autoneg; 1815 u8 flowctrl = 0; 1816 u32 old_rx_mode = tp->rx_mode; 1817 u32 old_tx_mode = tp->tx_mode; 1818 1819 if (tg3_flag(tp, USE_PHYLIB)) 1820 autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg; 1821 else 1822 autoneg = tp->link_config.autoneg; 1823 1824 if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) { 1825 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 1826 flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv); 1827 else 1828 flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 1829 } else 1830 flowctrl = tp->link_config.flowctrl; 1831 1832 tp->link_config.active_flowctrl = flowctrl; 1833 1834 if (flowctrl & FLOW_CTRL_RX) 1835 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE; 1836 else 1837 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE; 1838 1839 if (old_rx_mode != tp->rx_mode) 1840 tw32_f(MAC_RX_MODE, tp->rx_mode); 1841 1842 if (flowctrl & FLOW_CTRL_TX) 1843 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE; 1844 else 1845 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE; 1846 1847 if (old_tx_mode != tp->tx_mode) 1848 tw32_f(MAC_TX_MODE, tp->tx_mode); 1849 } 1850 1851 static void tg3_adjust_link(struct net_device *dev) 1852 { 1853 u8 oldflowctrl, linkmesg = 0; 1854 u32 mac_mode, lcl_adv, rmt_adv; 1855 struct tg3 *tp = netdev_priv(dev); 1856 struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1857 1858 spin_lock_bh(&tp->lock); 1859 1860 mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK | 1861 MAC_MODE_HALF_DUPLEX); 1862 1863 oldflowctrl = tp->link_config.active_flowctrl; 1864 1865 if (phydev->link) { 1866 lcl_adv = 0; 1867 rmt_adv = 0; 1868 1869 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10) 1870 mac_mode |= MAC_MODE_PORT_MODE_MII; 1871 else if (phydev->speed == SPEED_1000 || 1872 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785) 1873 mac_mode |= MAC_MODE_PORT_MODE_GMII; 1874 else 1875 mac_mode |= MAC_MODE_PORT_MODE_MII; 1876 1877 if (phydev->duplex == DUPLEX_HALF) 1878 mac_mode |= MAC_MODE_HALF_DUPLEX; 1879 else { 1880 lcl_adv = mii_advertise_flowctrl( 1881 tp->link_config.flowctrl); 1882 1883 if (phydev->pause) 1884 rmt_adv = LPA_PAUSE_CAP; 1885 if (phydev->asym_pause) 1886 rmt_adv |= LPA_PAUSE_ASYM; 1887 } 1888 1889 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 1890 } else 1891 mac_mode |= MAC_MODE_PORT_MODE_GMII; 1892 1893 if (mac_mode != tp->mac_mode) { 1894 tp->mac_mode = mac_mode; 1895 tw32_f(MAC_MODE, tp->mac_mode); 1896 udelay(40); 1897 } 1898 1899 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 1900 if (phydev->speed == SPEED_10) 1901 tw32(MAC_MI_STAT, 1902 MAC_MI_STAT_10MBPS_MODE | 1903 MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 1904 else 1905 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 1906 } 1907 1908 if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF) 1909 tw32(MAC_TX_LENGTHS, 1910 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 1911 (6 << TX_LENGTHS_IPG_SHIFT) | 1912 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT))); 1913 else 1914 tw32(MAC_TX_LENGTHS, 1915 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 1916 (6 << TX_LENGTHS_IPG_SHIFT) | 1917 (32 << TX_LENGTHS_SLOT_TIME_SHIFT))); 1918 1919 if (phydev->link != tp->old_link || 1920 phydev->speed != tp->link_config.active_speed || 1921 phydev->duplex != tp->link_config.active_duplex || 1922 oldflowctrl != tp->link_config.active_flowctrl) 1923 linkmesg = 1; 1924 1925 tp->old_link = phydev->link; 1926 tp->link_config.active_speed = phydev->speed; 1927 tp->link_config.active_duplex = phydev->duplex; 1928 1929 spin_unlock_bh(&tp->lock); 1930 1931 if (linkmesg) 1932 tg3_link_report(tp); 1933 } 1934 1935 static int tg3_phy_init(struct tg3 *tp) 1936 { 1937 struct phy_device *phydev; 1938 1939 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) 1940 return 0; 1941 1942 /* Bring the PHY back to a known state. */ 1943 tg3_bmcr_reset(tp); 1944 1945 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1946 1947 /* Attach the MAC to the PHY. */ 1948 phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link, 1949 phydev->dev_flags, phydev->interface); 1950 if (IS_ERR(phydev)) { 1951 dev_err(&tp->pdev->dev, "Could not attach to PHY\n"); 1952 return PTR_ERR(phydev); 1953 } 1954 1955 /* Mask with MAC supported features. */ 1956 switch (phydev->interface) { 1957 case PHY_INTERFACE_MODE_GMII: 1958 case PHY_INTERFACE_MODE_RGMII: 1959 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 1960 phydev->supported &= (PHY_GBIT_FEATURES | 1961 SUPPORTED_Pause | 1962 SUPPORTED_Asym_Pause); 1963 break; 1964 } 1965 /* fallthru */ 1966 case PHY_INTERFACE_MODE_MII: 1967 phydev->supported &= (PHY_BASIC_FEATURES | 1968 SUPPORTED_Pause | 1969 SUPPORTED_Asym_Pause); 1970 break; 1971 default: 1972 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 1973 return -EINVAL; 1974 } 1975 1976 tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; 1977 1978 phydev->advertising = phydev->supported; 1979 1980 return 0; 1981 } 1982 1983 static void tg3_phy_start(struct tg3 *tp) 1984 { 1985 struct phy_device *phydev; 1986 1987 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 1988 return; 1989 1990 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1991 1992 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 1993 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 1994 phydev->speed = tp->link_config.speed; 1995 phydev->duplex = tp->link_config.duplex; 1996 phydev->autoneg = tp->link_config.autoneg; 1997 phydev->advertising = tp->link_config.advertising; 1998 } 1999 2000 phy_start(phydev); 2001 2002 phy_start_aneg(phydev); 2003 } 2004 2005 static void tg3_phy_stop(struct tg3 *tp) 2006 { 2007 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2008 return; 2009 2010 phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 2011 } 2012 2013 static void tg3_phy_fini(struct tg3 *tp) 2014 { 2015 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 2016 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 2017 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED; 2018 } 2019 } 2020 2021 static int tg3_phy_set_extloopbk(struct tg3 *tp) 2022 { 2023 int err; 2024 u32 val; 2025 2026 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 2027 return 0; 2028 2029 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2030 /* Cannot do read-modify-write on 5401 */ 2031 err = tg3_phy_auxctl_write(tp, 2032 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2033 MII_TG3_AUXCTL_ACTL_EXTLOOPBK | 2034 0x4c20); 2035 goto done; 2036 } 2037 2038 err = tg3_phy_auxctl_read(tp, 2039 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2040 if (err) 2041 return err; 2042 2043 val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK; 2044 err = tg3_phy_auxctl_write(tp, 2045 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val); 2046 2047 done: 2048 return err; 2049 } 2050 2051 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable) 2052 { 2053 u32 phytest; 2054 2055 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2056 u32 phy; 2057 2058 tg3_writephy(tp, MII_TG3_FET_TEST, 2059 phytest | MII_TG3_FET_SHADOW_EN); 2060 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) { 2061 if (enable) 2062 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD; 2063 else 2064 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD; 2065 tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy); 2066 } 2067 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2068 } 2069 } 2070 2071 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable) 2072 { 2073 u32 reg; 2074 2075 if (!tg3_flag(tp, 5705_PLUS) || 2076 (tg3_flag(tp, 5717_PLUS) && 2077 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) 2078 return; 2079 2080 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2081 tg3_phy_fet_toggle_apd(tp, enable); 2082 return; 2083 } 2084 2085 reg = MII_TG3_MISC_SHDW_WREN | 2086 MII_TG3_MISC_SHDW_SCR5_SEL | 2087 MII_TG3_MISC_SHDW_SCR5_LPED | 2088 MII_TG3_MISC_SHDW_SCR5_DLPTLM | 2089 MII_TG3_MISC_SHDW_SCR5_SDTL | 2090 MII_TG3_MISC_SHDW_SCR5_C125OE; 2091 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable) 2092 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD; 2093 2094 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg); 2095 2096 2097 reg = MII_TG3_MISC_SHDW_WREN | 2098 MII_TG3_MISC_SHDW_APD_SEL | 2099 MII_TG3_MISC_SHDW_APD_WKTM_84MS; 2100 if (enable) 2101 reg |= MII_TG3_MISC_SHDW_APD_ENABLE; 2102 2103 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg); 2104 } 2105 2106 static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable) 2107 { 2108 u32 phy; 2109 2110 if (!tg3_flag(tp, 5705_PLUS) || 2111 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 2112 return; 2113 2114 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2115 u32 ephy; 2116 2117 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) { 2118 u32 reg = MII_TG3_FET_SHDW_MISCCTRL; 2119 2120 tg3_writephy(tp, MII_TG3_FET_TEST, 2121 ephy | MII_TG3_FET_SHADOW_EN); 2122 if (!tg3_readphy(tp, reg, &phy)) { 2123 if (enable) 2124 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2125 else 2126 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2127 tg3_writephy(tp, reg, phy); 2128 } 2129 tg3_writephy(tp, MII_TG3_FET_TEST, ephy); 2130 } 2131 } else { 2132 int ret; 2133 2134 ret = tg3_phy_auxctl_read(tp, 2135 MII_TG3_AUXCTL_SHDWSEL_MISC, &phy); 2136 if (!ret) { 2137 if (enable) 2138 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2139 else 2140 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2141 tg3_phy_auxctl_write(tp, 2142 MII_TG3_AUXCTL_SHDWSEL_MISC, phy); 2143 } 2144 } 2145 } 2146 2147 static void tg3_phy_set_wirespeed(struct tg3 *tp) 2148 { 2149 int ret; 2150 u32 val; 2151 2152 if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) 2153 return; 2154 2155 ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val); 2156 if (!ret) 2157 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, 2158 val | MII_TG3_AUXCTL_MISC_WIRESPD_EN); 2159 } 2160 2161 static void tg3_phy_apply_otp(struct tg3 *tp) 2162 { 2163 u32 otp, phy; 2164 2165 if (!tp->phy_otp) 2166 return; 2167 2168 otp = tp->phy_otp; 2169 2170 if (TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) 2171 return; 2172 2173 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT); 2174 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT; 2175 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy); 2176 2177 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) | 2178 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT); 2179 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy); 2180 2181 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT); 2182 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ; 2183 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy); 2184 2185 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT); 2186 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy); 2187 2188 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT); 2189 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy); 2190 2191 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) | 2192 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT); 2193 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy); 2194 2195 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2196 } 2197 2198 static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up) 2199 { 2200 u32 val; 2201 2202 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2203 return; 2204 2205 tp->setlpicnt = 0; 2206 2207 if (tp->link_config.autoneg == AUTONEG_ENABLE && 2208 current_link_up == 1 && 2209 tp->link_config.active_duplex == DUPLEX_FULL && 2210 (tp->link_config.active_speed == SPEED_100 || 2211 tp->link_config.active_speed == SPEED_1000)) { 2212 u32 eeectl; 2213 2214 if (tp->link_config.active_speed == SPEED_1000) 2215 eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US; 2216 else 2217 eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US; 2218 2219 tw32(TG3_CPMU_EEE_CTRL, eeectl); 2220 2221 tg3_phy_cl45_read(tp, MDIO_MMD_AN, 2222 TG3_CL45_D7_EEERES_STAT, &val); 2223 2224 if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || 2225 val == TG3_CL45_D7_EEERES_STAT_LP_100TX) 2226 tp->setlpicnt = 2; 2227 } 2228 2229 if (!tp->setlpicnt) { 2230 if (current_link_up == 1 && 2231 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2232 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000); 2233 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2234 } 2235 2236 val = tr32(TG3_CPMU_EEE_MODE); 2237 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE); 2238 } 2239 } 2240 2241 static void tg3_phy_eee_enable(struct tg3 *tp) 2242 { 2243 u32 val; 2244 2245 if (tp->link_config.active_speed == SPEED_1000 && 2246 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2247 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2248 tg3_flag(tp, 57765_CLASS)) && 2249 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2250 val = MII_TG3_DSP_TAP26_ALNOKO | 2251 MII_TG3_DSP_TAP26_RMRXSTO; 2252 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 2253 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2254 } 2255 2256 val = tr32(TG3_CPMU_EEE_MODE); 2257 tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE); 2258 } 2259 2260 static int tg3_wait_macro_done(struct tg3 *tp) 2261 { 2262 int limit = 100; 2263 2264 while (limit--) { 2265 u32 tmp32; 2266 2267 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) { 2268 if ((tmp32 & 0x1000) == 0) 2269 break; 2270 } 2271 } 2272 if (limit < 0) 2273 return -EBUSY; 2274 2275 return 0; 2276 } 2277 2278 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp) 2279 { 2280 static const u32 test_pat[4][6] = { 2281 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 }, 2282 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 }, 2283 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 }, 2284 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 } 2285 }; 2286 int chan; 2287 2288 for (chan = 0; chan < 4; chan++) { 2289 int i; 2290 2291 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2292 (chan * 0x2000) | 0x0200); 2293 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2294 2295 for (i = 0; i < 6; i++) 2296 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 2297 test_pat[chan][i]); 2298 2299 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2300 if (tg3_wait_macro_done(tp)) { 2301 *resetp = 1; 2302 return -EBUSY; 2303 } 2304 2305 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2306 (chan * 0x2000) | 0x0200); 2307 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082); 2308 if (tg3_wait_macro_done(tp)) { 2309 *resetp = 1; 2310 return -EBUSY; 2311 } 2312 2313 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802); 2314 if (tg3_wait_macro_done(tp)) { 2315 *resetp = 1; 2316 return -EBUSY; 2317 } 2318 2319 for (i = 0; i < 6; i += 2) { 2320 u32 low, high; 2321 2322 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) || 2323 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) || 2324 tg3_wait_macro_done(tp)) { 2325 *resetp = 1; 2326 return -EBUSY; 2327 } 2328 low &= 0x7fff; 2329 high &= 0x000f; 2330 if (low != test_pat[chan][i] || 2331 high != test_pat[chan][i+1]) { 2332 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b); 2333 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001); 2334 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005); 2335 2336 return -EBUSY; 2337 } 2338 } 2339 } 2340 2341 return 0; 2342 } 2343 2344 static int tg3_phy_reset_chanpat(struct tg3 *tp) 2345 { 2346 int chan; 2347 2348 for (chan = 0; chan < 4; chan++) { 2349 int i; 2350 2351 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2352 (chan * 0x2000) | 0x0200); 2353 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2354 for (i = 0; i < 6; i++) 2355 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000); 2356 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2357 if (tg3_wait_macro_done(tp)) 2358 return -EBUSY; 2359 } 2360 2361 return 0; 2362 } 2363 2364 static int tg3_phy_reset_5703_4_5(struct tg3 *tp) 2365 { 2366 u32 reg32, phy9_orig; 2367 int retries, do_phy_reset, err; 2368 2369 retries = 10; 2370 do_phy_reset = 1; 2371 do { 2372 if (do_phy_reset) { 2373 err = tg3_bmcr_reset(tp); 2374 if (err) 2375 return err; 2376 do_phy_reset = 0; 2377 } 2378 2379 /* Disable transmitter and interrupt. */ 2380 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) 2381 continue; 2382 2383 reg32 |= 0x3000; 2384 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2385 2386 /* Set full-duplex, 1000 mbps. */ 2387 tg3_writephy(tp, MII_BMCR, 2388 BMCR_FULLDPLX | BMCR_SPEED1000); 2389 2390 /* Set to master mode. */ 2391 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig)) 2392 continue; 2393 2394 tg3_writephy(tp, MII_CTRL1000, 2395 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 2396 2397 err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp); 2398 if (err) 2399 return err; 2400 2401 /* Block the PHY control access. */ 2402 tg3_phydsp_write(tp, 0x8005, 0x0800); 2403 2404 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset); 2405 if (!err) 2406 break; 2407 } while (--retries); 2408 2409 err = tg3_phy_reset_chanpat(tp); 2410 if (err) 2411 return err; 2412 2413 tg3_phydsp_write(tp, 0x8005, 0x0000); 2414 2415 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200); 2416 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000); 2417 2418 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2419 2420 tg3_writephy(tp, MII_CTRL1000, phy9_orig); 2421 2422 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) { 2423 reg32 &= ~0x3000; 2424 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2425 } else if (!err) 2426 err = -EBUSY; 2427 2428 return err; 2429 } 2430 2431 /* This will reset the tigon3 PHY if there is no valid 2432 * link unless the FORCE argument is non-zero. 2433 */ 2434 static int tg3_phy_reset(struct tg3 *tp) 2435 { 2436 u32 val, cpmuctrl; 2437 int err; 2438 2439 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2440 val = tr32(GRC_MISC_CFG); 2441 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ); 2442 udelay(40); 2443 } 2444 err = tg3_readphy(tp, MII_BMSR, &val); 2445 err |= tg3_readphy(tp, MII_BMSR, &val); 2446 if (err != 0) 2447 return -EBUSY; 2448 2449 if (netif_running(tp->dev) && netif_carrier_ok(tp->dev)) { 2450 netif_carrier_off(tp->dev); 2451 tg3_link_report(tp); 2452 } 2453 2454 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 2455 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 2456 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 2457 err = tg3_phy_reset_5703_4_5(tp); 2458 if (err) 2459 return err; 2460 goto out; 2461 } 2462 2463 cpmuctrl = 0; 2464 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 2465 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) { 2466 cpmuctrl = tr32(TG3_CPMU_CTRL); 2467 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) 2468 tw32(TG3_CPMU_CTRL, 2469 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY); 2470 } 2471 2472 err = tg3_bmcr_reset(tp); 2473 if (err) 2474 return err; 2475 2476 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) { 2477 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz; 2478 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val); 2479 2480 tw32(TG3_CPMU_CTRL, cpmuctrl); 2481 } 2482 2483 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || 2484 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) { 2485 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2486 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) == 2487 CPMU_LSPD_1000MB_MACCLK_12_5) { 2488 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2489 udelay(40); 2490 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2491 } 2492 } 2493 2494 if (tg3_flag(tp, 5717_PLUS) && 2495 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) 2496 return 0; 2497 2498 tg3_phy_apply_otp(tp); 2499 2500 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 2501 tg3_phy_toggle_apd(tp, true); 2502 else 2503 tg3_phy_toggle_apd(tp, false); 2504 2505 out: 2506 if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) && 2507 !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2508 tg3_phydsp_write(tp, 0x201f, 0x2aaa); 2509 tg3_phydsp_write(tp, 0x000a, 0x0323); 2510 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2511 } 2512 2513 if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) { 2514 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2515 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2516 } 2517 2518 if (tp->phy_flags & TG3_PHYFLG_BER_BUG) { 2519 if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2520 tg3_phydsp_write(tp, 0x000a, 0x310b); 2521 tg3_phydsp_write(tp, 0x201f, 0x9506); 2522 tg3_phydsp_write(tp, 0x401f, 0x14e2); 2523 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2524 } 2525 } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) { 2526 if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { 2527 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a); 2528 if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) { 2529 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b); 2530 tg3_writephy(tp, MII_TG3_TEST1, 2531 MII_TG3_TEST1_TRIM_EN | 0x4); 2532 } else 2533 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b); 2534 2535 TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 2536 } 2537 } 2538 2539 /* Set Extended packet length bit (bit 14) on all chips that */ 2540 /* support jumbo frames */ 2541 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2542 /* Cannot do read-modify-write on 5401 */ 2543 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 2544 } else if (tg3_flag(tp, JUMBO_CAPABLE)) { 2545 /* Set bit 14 with read-modify-write to preserve other bits */ 2546 err = tg3_phy_auxctl_read(tp, 2547 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2548 if (!err) 2549 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2550 val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN); 2551 } 2552 2553 /* Set phy register 0x10 bit 0 to high fifo elasticity to support 2554 * jumbo frames transmission. 2555 */ 2556 if (tg3_flag(tp, JUMBO_CAPABLE)) { 2557 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val)) 2558 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2559 val | MII_TG3_EXT_CTRL_FIFO_ELASTIC); 2560 } 2561 2562 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2563 /* adjust output voltage */ 2564 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); 2565 } 2566 2567 tg3_phy_toggle_automdix(tp, 1); 2568 tg3_phy_set_wirespeed(tp); 2569 return 0; 2570 } 2571 2572 #define TG3_GPIO_MSG_DRVR_PRES 0x00000001 2573 #define TG3_GPIO_MSG_NEED_VAUX 0x00000002 2574 #define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \ 2575 TG3_GPIO_MSG_NEED_VAUX) 2576 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \ 2577 ((TG3_GPIO_MSG_DRVR_PRES << 0) | \ 2578 (TG3_GPIO_MSG_DRVR_PRES << 4) | \ 2579 (TG3_GPIO_MSG_DRVR_PRES << 8) | \ 2580 (TG3_GPIO_MSG_DRVR_PRES << 12)) 2581 2582 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \ 2583 ((TG3_GPIO_MSG_NEED_VAUX << 0) | \ 2584 (TG3_GPIO_MSG_NEED_VAUX << 4) | \ 2585 (TG3_GPIO_MSG_NEED_VAUX << 8) | \ 2586 (TG3_GPIO_MSG_NEED_VAUX << 12)) 2587 2588 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat) 2589 { 2590 u32 status, shift; 2591 2592 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2593 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 2594 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG); 2595 else 2596 status = tr32(TG3_CPMU_DRV_STATUS); 2597 2598 shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn; 2599 status &= ~(TG3_GPIO_MSG_MASK << shift); 2600 status |= (newstat << shift); 2601 2602 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2603 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 2604 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status); 2605 else 2606 tw32(TG3_CPMU_DRV_STATUS, status); 2607 2608 return status >> TG3_APE_GPIO_MSG_SHIFT; 2609 } 2610 2611 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp) 2612 { 2613 if (!tg3_flag(tp, IS_NIC)) 2614 return 0; 2615 2616 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2617 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2618 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 2619 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2620 return -EIO; 2621 2622 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES); 2623 2624 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2625 TG3_GRC_LCLCTL_PWRSW_DELAY); 2626 2627 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2628 } else { 2629 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2630 TG3_GRC_LCLCTL_PWRSW_DELAY); 2631 } 2632 2633 return 0; 2634 } 2635 2636 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp) 2637 { 2638 u32 grc_local_ctrl; 2639 2640 if (!tg3_flag(tp, IS_NIC) || 2641 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2642 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) 2643 return; 2644 2645 grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1; 2646 2647 tw32_wait_f(GRC_LOCAL_CTRL, 2648 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2649 TG3_GRC_LCLCTL_PWRSW_DELAY); 2650 2651 tw32_wait_f(GRC_LOCAL_CTRL, 2652 grc_local_ctrl, 2653 TG3_GRC_LCLCTL_PWRSW_DELAY); 2654 2655 tw32_wait_f(GRC_LOCAL_CTRL, 2656 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2657 TG3_GRC_LCLCTL_PWRSW_DELAY); 2658 } 2659 2660 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp) 2661 { 2662 if (!tg3_flag(tp, IS_NIC)) 2663 return; 2664 2665 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2666 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 2667 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2668 (GRC_LCLCTRL_GPIO_OE0 | 2669 GRC_LCLCTRL_GPIO_OE1 | 2670 GRC_LCLCTRL_GPIO_OE2 | 2671 GRC_LCLCTRL_GPIO_OUTPUT0 | 2672 GRC_LCLCTRL_GPIO_OUTPUT1), 2673 TG3_GRC_LCLCTL_PWRSW_DELAY); 2674 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 2675 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 2676 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */ 2677 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | 2678 GRC_LCLCTRL_GPIO_OE1 | 2679 GRC_LCLCTRL_GPIO_OE2 | 2680 GRC_LCLCTRL_GPIO_OUTPUT0 | 2681 GRC_LCLCTRL_GPIO_OUTPUT1 | 2682 tp->grc_local_ctrl; 2683 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2684 TG3_GRC_LCLCTL_PWRSW_DELAY); 2685 2686 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2; 2687 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2688 TG3_GRC_LCLCTL_PWRSW_DELAY); 2689 2690 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0; 2691 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2692 TG3_GRC_LCLCTL_PWRSW_DELAY); 2693 } else { 2694 u32 no_gpio2; 2695 u32 grc_local_ctrl = 0; 2696 2697 /* Workaround to prevent overdrawing Amps. */ 2698 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 2699 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 2700 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2701 grc_local_ctrl, 2702 TG3_GRC_LCLCTL_PWRSW_DELAY); 2703 } 2704 2705 /* On 5753 and variants, GPIO2 cannot be used. */ 2706 no_gpio2 = tp->nic_sram_data_cfg & 2707 NIC_SRAM_DATA_CFG_NO_GPIO2; 2708 2709 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 2710 GRC_LCLCTRL_GPIO_OE1 | 2711 GRC_LCLCTRL_GPIO_OE2 | 2712 GRC_LCLCTRL_GPIO_OUTPUT1 | 2713 GRC_LCLCTRL_GPIO_OUTPUT2; 2714 if (no_gpio2) { 2715 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 | 2716 GRC_LCLCTRL_GPIO_OUTPUT2); 2717 } 2718 tw32_wait_f(GRC_LOCAL_CTRL, 2719 tp->grc_local_ctrl | grc_local_ctrl, 2720 TG3_GRC_LCLCTL_PWRSW_DELAY); 2721 2722 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0; 2723 2724 tw32_wait_f(GRC_LOCAL_CTRL, 2725 tp->grc_local_ctrl | grc_local_ctrl, 2726 TG3_GRC_LCLCTL_PWRSW_DELAY); 2727 2728 if (!no_gpio2) { 2729 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2; 2730 tw32_wait_f(GRC_LOCAL_CTRL, 2731 tp->grc_local_ctrl | grc_local_ctrl, 2732 TG3_GRC_LCLCTL_PWRSW_DELAY); 2733 } 2734 } 2735 } 2736 2737 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable) 2738 { 2739 u32 msg = 0; 2740 2741 /* Serialize power state transitions */ 2742 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2743 return; 2744 2745 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable) 2746 msg = TG3_GPIO_MSG_NEED_VAUX; 2747 2748 msg = tg3_set_function_status(tp, msg); 2749 2750 if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK) 2751 goto done; 2752 2753 if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK) 2754 tg3_pwrsrc_switch_to_vaux(tp); 2755 else 2756 tg3_pwrsrc_die_with_vmain(tp); 2757 2758 done: 2759 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2760 } 2761 2762 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol) 2763 { 2764 bool need_vaux = false; 2765 2766 /* The GPIOs do something completely different on 57765. */ 2767 if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS)) 2768 return; 2769 2770 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2771 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2772 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 2773 tg3_frob_aux_power_5717(tp, include_wol ? 2774 tg3_flag(tp, WOL_ENABLE) != 0 : 0); 2775 return; 2776 } 2777 2778 if (tp->pdev_peer && tp->pdev_peer != tp->pdev) { 2779 struct net_device *dev_peer; 2780 2781 dev_peer = pci_get_drvdata(tp->pdev_peer); 2782 2783 /* remove_one() may have been run on the peer. */ 2784 if (dev_peer) { 2785 struct tg3 *tp_peer = netdev_priv(dev_peer); 2786 2787 if (tg3_flag(tp_peer, INIT_COMPLETE)) 2788 return; 2789 2790 if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) || 2791 tg3_flag(tp_peer, ENABLE_ASF)) 2792 need_vaux = true; 2793 } 2794 } 2795 2796 if ((include_wol && tg3_flag(tp, WOL_ENABLE)) || 2797 tg3_flag(tp, ENABLE_ASF)) 2798 need_vaux = true; 2799 2800 if (need_vaux) 2801 tg3_pwrsrc_switch_to_vaux(tp); 2802 else 2803 tg3_pwrsrc_die_with_vmain(tp); 2804 } 2805 2806 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed) 2807 { 2808 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2) 2809 return 1; 2810 else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) { 2811 if (speed != SPEED_10) 2812 return 1; 2813 } else if (speed == SPEED_10) 2814 return 1; 2815 2816 return 0; 2817 } 2818 2819 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) 2820 { 2821 u32 val; 2822 2823 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 2824 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 2825 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL); 2826 u32 serdes_cfg = tr32(MAC_SERDES_CFG); 2827 2828 sg_dig_ctrl |= 2829 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET; 2830 tw32(SG_DIG_CTRL, sg_dig_ctrl); 2831 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15)); 2832 } 2833 return; 2834 } 2835 2836 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2837 tg3_bmcr_reset(tp); 2838 val = tr32(GRC_MISC_CFG); 2839 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ); 2840 udelay(40); 2841 return; 2842 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2843 u32 phytest; 2844 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2845 u32 phy; 2846 2847 tg3_writephy(tp, MII_ADVERTISE, 0); 2848 tg3_writephy(tp, MII_BMCR, 2849 BMCR_ANENABLE | BMCR_ANRESTART); 2850 2851 tg3_writephy(tp, MII_TG3_FET_TEST, 2852 phytest | MII_TG3_FET_SHADOW_EN); 2853 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) { 2854 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD; 2855 tg3_writephy(tp, 2856 MII_TG3_FET_SHDW_AUXMODE4, 2857 phy); 2858 } 2859 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2860 } 2861 return; 2862 } else if (do_low_power) { 2863 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2864 MII_TG3_EXT_CTRL_FORCE_LED_OFF); 2865 2866 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR | 2867 MII_TG3_AUXCTL_PCTL_SPR_ISOLATE | 2868 MII_TG3_AUXCTL_PCTL_VREG_11V; 2869 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val); 2870 } 2871 2872 /* The PHY should not be powered down on some chips because 2873 * of bugs. 2874 */ 2875 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2876 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 2877 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 && 2878 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) || 2879 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 && 2880 !tp->pci_fn)) 2881 return; 2882 2883 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || 2884 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) { 2885 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2886 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2887 val |= CPMU_LSPD_1000MB_MACCLK_12_5; 2888 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2889 } 2890 2891 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN); 2892 } 2893 2894 /* tp->lock is held. */ 2895 static int tg3_nvram_lock(struct tg3 *tp) 2896 { 2897 if (tg3_flag(tp, NVRAM)) { 2898 int i; 2899 2900 if (tp->nvram_lock_cnt == 0) { 2901 tw32(NVRAM_SWARB, SWARB_REQ_SET1); 2902 for (i = 0; i < 8000; i++) { 2903 if (tr32(NVRAM_SWARB) & SWARB_GNT1) 2904 break; 2905 udelay(20); 2906 } 2907 if (i == 8000) { 2908 tw32(NVRAM_SWARB, SWARB_REQ_CLR1); 2909 return -ENODEV; 2910 } 2911 } 2912 tp->nvram_lock_cnt++; 2913 } 2914 return 0; 2915 } 2916 2917 /* tp->lock is held. */ 2918 static void tg3_nvram_unlock(struct tg3 *tp) 2919 { 2920 if (tg3_flag(tp, NVRAM)) { 2921 if (tp->nvram_lock_cnt > 0) 2922 tp->nvram_lock_cnt--; 2923 if (tp->nvram_lock_cnt == 0) 2924 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1); 2925 } 2926 } 2927 2928 /* tp->lock is held. */ 2929 static void tg3_enable_nvram_access(struct tg3 *tp) 2930 { 2931 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 2932 u32 nvaccess = tr32(NVRAM_ACCESS); 2933 2934 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); 2935 } 2936 } 2937 2938 /* tp->lock is held. */ 2939 static void tg3_disable_nvram_access(struct tg3 *tp) 2940 { 2941 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 2942 u32 nvaccess = tr32(NVRAM_ACCESS); 2943 2944 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); 2945 } 2946 } 2947 2948 static int tg3_nvram_read_using_eeprom(struct tg3 *tp, 2949 u32 offset, u32 *val) 2950 { 2951 u32 tmp; 2952 int i; 2953 2954 if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0) 2955 return -EINVAL; 2956 2957 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK | 2958 EEPROM_ADDR_DEVID_MASK | 2959 EEPROM_ADDR_READ); 2960 tw32(GRC_EEPROM_ADDR, 2961 tmp | 2962 (0 << EEPROM_ADDR_DEVID_SHIFT) | 2963 ((offset << EEPROM_ADDR_ADDR_SHIFT) & 2964 EEPROM_ADDR_ADDR_MASK) | 2965 EEPROM_ADDR_READ | EEPROM_ADDR_START); 2966 2967 for (i = 0; i < 1000; i++) { 2968 tmp = tr32(GRC_EEPROM_ADDR); 2969 2970 if (tmp & EEPROM_ADDR_COMPLETE) 2971 break; 2972 msleep(1); 2973 } 2974 if (!(tmp & EEPROM_ADDR_COMPLETE)) 2975 return -EBUSY; 2976 2977 tmp = tr32(GRC_EEPROM_DATA); 2978 2979 /* 2980 * The data will always be opposite the native endian 2981 * format. Perform a blind byteswap to compensate. 2982 */ 2983 *val = swab32(tmp); 2984 2985 return 0; 2986 } 2987 2988 #define NVRAM_CMD_TIMEOUT 10000 2989 2990 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd) 2991 { 2992 int i; 2993 2994 tw32(NVRAM_CMD, nvram_cmd); 2995 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) { 2996 udelay(10); 2997 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) { 2998 udelay(10); 2999 break; 3000 } 3001 } 3002 3003 if (i == NVRAM_CMD_TIMEOUT) 3004 return -EBUSY; 3005 3006 return 0; 3007 } 3008 3009 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr) 3010 { 3011 if (tg3_flag(tp, NVRAM) && 3012 tg3_flag(tp, NVRAM_BUFFERED) && 3013 tg3_flag(tp, FLASH) && 3014 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3015 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3016 3017 addr = ((addr / tp->nvram_pagesize) << 3018 ATMEL_AT45DB0X1B_PAGE_POS) + 3019 (addr % tp->nvram_pagesize); 3020 3021 return addr; 3022 } 3023 3024 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr) 3025 { 3026 if (tg3_flag(tp, NVRAM) && 3027 tg3_flag(tp, NVRAM_BUFFERED) && 3028 tg3_flag(tp, FLASH) && 3029 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3030 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3031 3032 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) * 3033 tp->nvram_pagesize) + 3034 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1)); 3035 3036 return addr; 3037 } 3038 3039 /* NOTE: Data read in from NVRAM is byteswapped according to 3040 * the byteswapping settings for all other register accesses. 3041 * tg3 devices are BE devices, so on a BE machine, the data 3042 * returned will be exactly as it is seen in NVRAM. On a LE 3043 * machine, the 32-bit value will be byteswapped. 3044 */ 3045 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) 3046 { 3047 int ret; 3048 3049 if (!tg3_flag(tp, NVRAM)) 3050 return tg3_nvram_read_using_eeprom(tp, offset, val); 3051 3052 offset = tg3_nvram_phys_addr(tp, offset); 3053 3054 if (offset > NVRAM_ADDR_MSK) 3055 return -EINVAL; 3056 3057 ret = tg3_nvram_lock(tp); 3058 if (ret) 3059 return ret; 3060 3061 tg3_enable_nvram_access(tp); 3062 3063 tw32(NVRAM_ADDR, offset); 3064 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO | 3065 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE); 3066 3067 if (ret == 0) 3068 *val = tr32(NVRAM_RDDATA); 3069 3070 tg3_disable_nvram_access(tp); 3071 3072 tg3_nvram_unlock(tp); 3073 3074 return ret; 3075 } 3076 3077 /* Ensures NVRAM data is in bytestream format. */ 3078 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val) 3079 { 3080 u32 v; 3081 int res = tg3_nvram_read(tp, offset, &v); 3082 if (!res) 3083 *val = cpu_to_be32(v); 3084 return res; 3085 } 3086 3087 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp, 3088 u32 offset, u32 len, u8 *buf) 3089 { 3090 int i, j, rc = 0; 3091 u32 val; 3092 3093 for (i = 0; i < len; i += 4) { 3094 u32 addr; 3095 __be32 data; 3096 3097 addr = offset + i; 3098 3099 memcpy(&data, buf + i, 4); 3100 3101 /* 3102 * The SEEPROM interface expects the data to always be opposite 3103 * the native endian format. We accomplish this by reversing 3104 * all the operations that would have been performed on the 3105 * data from a call to tg3_nvram_read_be32(). 3106 */ 3107 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data))); 3108 3109 val = tr32(GRC_EEPROM_ADDR); 3110 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE); 3111 3112 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK | 3113 EEPROM_ADDR_READ); 3114 tw32(GRC_EEPROM_ADDR, val | 3115 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3116 (addr & EEPROM_ADDR_ADDR_MASK) | 3117 EEPROM_ADDR_START | 3118 EEPROM_ADDR_WRITE); 3119 3120 for (j = 0; j < 1000; j++) { 3121 val = tr32(GRC_EEPROM_ADDR); 3122 3123 if (val & EEPROM_ADDR_COMPLETE) 3124 break; 3125 msleep(1); 3126 } 3127 if (!(val & EEPROM_ADDR_COMPLETE)) { 3128 rc = -EBUSY; 3129 break; 3130 } 3131 } 3132 3133 return rc; 3134 } 3135 3136 /* offset and length are dword aligned */ 3137 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len, 3138 u8 *buf) 3139 { 3140 int ret = 0; 3141 u32 pagesize = tp->nvram_pagesize; 3142 u32 pagemask = pagesize - 1; 3143 u32 nvram_cmd; 3144 u8 *tmp; 3145 3146 tmp = kmalloc(pagesize, GFP_KERNEL); 3147 if (tmp == NULL) 3148 return -ENOMEM; 3149 3150 while (len) { 3151 int j; 3152 u32 phy_addr, page_off, size; 3153 3154 phy_addr = offset & ~pagemask; 3155 3156 for (j = 0; j < pagesize; j += 4) { 3157 ret = tg3_nvram_read_be32(tp, phy_addr + j, 3158 (__be32 *) (tmp + j)); 3159 if (ret) 3160 break; 3161 } 3162 if (ret) 3163 break; 3164 3165 page_off = offset & pagemask; 3166 size = pagesize; 3167 if (len < size) 3168 size = len; 3169 3170 len -= size; 3171 3172 memcpy(tmp + page_off, buf, size); 3173 3174 offset = offset + (pagesize - page_off); 3175 3176 tg3_enable_nvram_access(tp); 3177 3178 /* 3179 * Before we can erase the flash page, we need 3180 * to issue a special "write enable" command. 3181 */ 3182 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3183 3184 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3185 break; 3186 3187 /* Erase the target page */ 3188 tw32(NVRAM_ADDR, phy_addr); 3189 3190 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR | 3191 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE; 3192 3193 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3194 break; 3195 3196 /* Issue another write enable to start the write. */ 3197 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3198 3199 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3200 break; 3201 3202 for (j = 0; j < pagesize; j += 4) { 3203 __be32 data; 3204 3205 data = *((__be32 *) (tmp + j)); 3206 3207 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3208 3209 tw32(NVRAM_ADDR, phy_addr + j); 3210 3211 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | 3212 NVRAM_CMD_WR; 3213 3214 if (j == 0) 3215 nvram_cmd |= NVRAM_CMD_FIRST; 3216 else if (j == (pagesize - 4)) 3217 nvram_cmd |= NVRAM_CMD_LAST; 3218 3219 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3220 if (ret) 3221 break; 3222 } 3223 if (ret) 3224 break; 3225 } 3226 3227 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3228 tg3_nvram_exec_cmd(tp, nvram_cmd); 3229 3230 kfree(tmp); 3231 3232 return ret; 3233 } 3234 3235 /* offset and length are dword aligned */ 3236 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len, 3237 u8 *buf) 3238 { 3239 int i, ret = 0; 3240 3241 for (i = 0; i < len; i += 4, offset += 4) { 3242 u32 page_off, phy_addr, nvram_cmd; 3243 __be32 data; 3244 3245 memcpy(&data, buf + i, 4); 3246 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3247 3248 page_off = offset % tp->nvram_pagesize; 3249 3250 phy_addr = tg3_nvram_phys_addr(tp, offset); 3251 3252 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR; 3253 3254 if (page_off == 0 || i == 0) 3255 nvram_cmd |= NVRAM_CMD_FIRST; 3256 if (page_off == (tp->nvram_pagesize - 4)) 3257 nvram_cmd |= NVRAM_CMD_LAST; 3258 3259 if (i == (len - 4)) 3260 nvram_cmd |= NVRAM_CMD_LAST; 3261 3262 if ((nvram_cmd & NVRAM_CMD_FIRST) || 3263 !tg3_flag(tp, FLASH) || 3264 !tg3_flag(tp, 57765_PLUS)) 3265 tw32(NVRAM_ADDR, phy_addr); 3266 3267 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 && 3268 !tg3_flag(tp, 5755_PLUS) && 3269 (tp->nvram_jedecnum == JEDEC_ST) && 3270 (nvram_cmd & NVRAM_CMD_FIRST)) { 3271 u32 cmd; 3272 3273 cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3274 ret = tg3_nvram_exec_cmd(tp, cmd); 3275 if (ret) 3276 break; 3277 } 3278 if (!tg3_flag(tp, FLASH)) { 3279 /* We always do complete word writes to eeprom. */ 3280 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST); 3281 } 3282 3283 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3284 if (ret) 3285 break; 3286 } 3287 return ret; 3288 } 3289 3290 /* offset and length are dword aligned */ 3291 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf) 3292 { 3293 int ret; 3294 3295 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3296 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & 3297 ~GRC_LCLCTRL_GPIO_OUTPUT1); 3298 udelay(40); 3299 } 3300 3301 if (!tg3_flag(tp, NVRAM)) { 3302 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf); 3303 } else { 3304 u32 grc_mode; 3305 3306 ret = tg3_nvram_lock(tp); 3307 if (ret) 3308 return ret; 3309 3310 tg3_enable_nvram_access(tp); 3311 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) 3312 tw32(NVRAM_WRITE1, 0x406); 3313 3314 grc_mode = tr32(GRC_MODE); 3315 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE); 3316 3317 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) { 3318 ret = tg3_nvram_write_block_buffered(tp, offset, len, 3319 buf); 3320 } else { 3321 ret = tg3_nvram_write_block_unbuffered(tp, offset, len, 3322 buf); 3323 } 3324 3325 grc_mode = tr32(GRC_MODE); 3326 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE); 3327 3328 tg3_disable_nvram_access(tp); 3329 tg3_nvram_unlock(tp); 3330 } 3331 3332 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3333 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 3334 udelay(40); 3335 } 3336 3337 return ret; 3338 } 3339 3340 #define RX_CPU_SCRATCH_BASE 0x30000 3341 #define RX_CPU_SCRATCH_SIZE 0x04000 3342 #define TX_CPU_SCRATCH_BASE 0x34000 3343 #define TX_CPU_SCRATCH_SIZE 0x04000 3344 3345 /* tp->lock is held. */ 3346 static int tg3_halt_cpu(struct tg3 *tp, u32 offset) 3347 { 3348 int i; 3349 3350 BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)); 3351 3352 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 3353 u32 val = tr32(GRC_VCPU_EXT_CTRL); 3354 3355 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU); 3356 return 0; 3357 } 3358 if (offset == RX_CPU_BASE) { 3359 for (i = 0; i < 10000; i++) { 3360 tw32(offset + CPU_STATE, 0xffffffff); 3361 tw32(offset + CPU_MODE, CPU_MODE_HALT); 3362 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT) 3363 break; 3364 } 3365 3366 tw32(offset + CPU_STATE, 0xffffffff); 3367 tw32_f(offset + CPU_MODE, CPU_MODE_HALT); 3368 udelay(10); 3369 } else { 3370 for (i = 0; i < 10000; i++) { 3371 tw32(offset + CPU_STATE, 0xffffffff); 3372 tw32(offset + CPU_MODE, CPU_MODE_HALT); 3373 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT) 3374 break; 3375 } 3376 } 3377 3378 if (i >= 10000) { 3379 netdev_err(tp->dev, "%s timed out, %s CPU\n", 3380 __func__, offset == RX_CPU_BASE ? "RX" : "TX"); 3381 return -ENODEV; 3382 } 3383 3384 /* Clear firmware's nvram arbitration. */ 3385 if (tg3_flag(tp, NVRAM)) 3386 tw32(NVRAM_SWARB, SWARB_REQ_CLR0); 3387 return 0; 3388 } 3389 3390 struct fw_info { 3391 unsigned int fw_base; 3392 unsigned int fw_len; 3393 const __be32 *fw_data; 3394 }; 3395 3396 /* tp->lock is held. */ 3397 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, 3398 u32 cpu_scratch_base, int cpu_scratch_size, 3399 struct fw_info *info) 3400 { 3401 int err, lock_err, i; 3402 void (*write_op)(struct tg3 *, u32, u32); 3403 3404 if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) { 3405 netdev_err(tp->dev, 3406 "%s: Trying to load TX cpu firmware which is 5705\n", 3407 __func__); 3408 return -EINVAL; 3409 } 3410 3411 if (tg3_flag(tp, 5705_PLUS)) 3412 write_op = tg3_write_mem; 3413 else 3414 write_op = tg3_write_indirect_reg32; 3415 3416 /* It is possible that bootcode is still loading at this point. 3417 * Get the nvram lock first before halting the cpu. 3418 */ 3419 lock_err = tg3_nvram_lock(tp); 3420 err = tg3_halt_cpu(tp, cpu_base); 3421 if (!lock_err) 3422 tg3_nvram_unlock(tp); 3423 if (err) 3424 goto out; 3425 3426 for (i = 0; i < cpu_scratch_size; i += sizeof(u32)) 3427 write_op(tp, cpu_scratch_base + i, 0); 3428 tw32(cpu_base + CPU_STATE, 0xffffffff); 3429 tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT); 3430 for (i = 0; i < (info->fw_len / sizeof(u32)); i++) 3431 write_op(tp, (cpu_scratch_base + 3432 (info->fw_base & 0xffff) + 3433 (i * sizeof(u32))), 3434 be32_to_cpu(info->fw_data[i])); 3435 3436 err = 0; 3437 3438 out: 3439 return err; 3440 } 3441 3442 /* tp->lock is held. */ 3443 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp) 3444 { 3445 struct fw_info info; 3446 const __be32 *fw_data; 3447 int err, i; 3448 3449 fw_data = (void *)tp->fw->data; 3450 3451 /* Firmware blob starts with version numbers, followed by 3452 start address and length. We are setting complete length. 3453 length = end_address_of_bss - start_address_of_text. 3454 Remainder is the blob to be loaded contiguously 3455 from start address. */ 3456 3457 info.fw_base = be32_to_cpu(fw_data[1]); 3458 info.fw_len = tp->fw->size - 12; 3459 info.fw_data = &fw_data[3]; 3460 3461 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE, 3462 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE, 3463 &info); 3464 if (err) 3465 return err; 3466 3467 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE, 3468 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE, 3469 &info); 3470 if (err) 3471 return err; 3472 3473 /* Now startup only the RX cpu. */ 3474 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3475 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base); 3476 3477 for (i = 0; i < 5; i++) { 3478 if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base) 3479 break; 3480 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3481 tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT); 3482 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base); 3483 udelay(1000); 3484 } 3485 if (i >= 5) { 3486 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x " 3487 "should be %08x\n", __func__, 3488 tr32(RX_CPU_BASE + CPU_PC), info.fw_base); 3489 return -ENODEV; 3490 } 3491 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3492 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000); 3493 3494 return 0; 3495 } 3496 3497 /* tp->lock is held. */ 3498 static int tg3_load_tso_firmware(struct tg3 *tp) 3499 { 3500 struct fw_info info; 3501 const __be32 *fw_data; 3502 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size; 3503 int err, i; 3504 3505 if (tg3_flag(tp, HW_TSO_1) || 3506 tg3_flag(tp, HW_TSO_2) || 3507 tg3_flag(tp, HW_TSO_3)) 3508 return 0; 3509 3510 fw_data = (void *)tp->fw->data; 3511 3512 /* Firmware blob starts with version numbers, followed by 3513 start address and length. We are setting complete length. 3514 length = end_address_of_bss - start_address_of_text. 3515 Remainder is the blob to be loaded contiguously 3516 from start address. */ 3517 3518 info.fw_base = be32_to_cpu(fw_data[1]); 3519 cpu_scratch_size = tp->fw_len; 3520 info.fw_len = tp->fw->size - 12; 3521 info.fw_data = &fw_data[3]; 3522 3523 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 3524 cpu_base = RX_CPU_BASE; 3525 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705; 3526 } else { 3527 cpu_base = TX_CPU_BASE; 3528 cpu_scratch_base = TX_CPU_SCRATCH_BASE; 3529 cpu_scratch_size = TX_CPU_SCRATCH_SIZE; 3530 } 3531 3532 err = tg3_load_firmware_cpu(tp, cpu_base, 3533 cpu_scratch_base, cpu_scratch_size, 3534 &info); 3535 if (err) 3536 return err; 3537 3538 /* Now startup the cpu. */ 3539 tw32(cpu_base + CPU_STATE, 0xffffffff); 3540 tw32_f(cpu_base + CPU_PC, info.fw_base); 3541 3542 for (i = 0; i < 5; i++) { 3543 if (tr32(cpu_base + CPU_PC) == info.fw_base) 3544 break; 3545 tw32(cpu_base + CPU_STATE, 0xffffffff); 3546 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3547 tw32_f(cpu_base + CPU_PC, info.fw_base); 3548 udelay(1000); 3549 } 3550 if (i >= 5) { 3551 netdev_err(tp->dev, 3552 "%s fails to set CPU PC, is %08x should be %08x\n", 3553 __func__, tr32(cpu_base + CPU_PC), info.fw_base); 3554 return -ENODEV; 3555 } 3556 tw32(cpu_base + CPU_STATE, 0xffffffff); 3557 tw32_f(cpu_base + CPU_MODE, 0x00000000); 3558 return 0; 3559 } 3560 3561 3562 /* tp->lock is held. */ 3563 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1) 3564 { 3565 u32 addr_high, addr_low; 3566 int i; 3567 3568 addr_high = ((tp->dev->dev_addr[0] << 8) | 3569 tp->dev->dev_addr[1]); 3570 addr_low = ((tp->dev->dev_addr[2] << 24) | 3571 (tp->dev->dev_addr[3] << 16) | 3572 (tp->dev->dev_addr[4] << 8) | 3573 (tp->dev->dev_addr[5] << 0)); 3574 for (i = 0; i < 4; i++) { 3575 if (i == 1 && skip_mac_1) 3576 continue; 3577 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high); 3578 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low); 3579 } 3580 3581 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 3582 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 3583 for (i = 0; i < 12; i++) { 3584 tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high); 3585 tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low); 3586 } 3587 } 3588 3589 addr_high = (tp->dev->dev_addr[0] + 3590 tp->dev->dev_addr[1] + 3591 tp->dev->dev_addr[2] + 3592 tp->dev->dev_addr[3] + 3593 tp->dev->dev_addr[4] + 3594 tp->dev->dev_addr[5]) & 3595 TX_BACKOFF_SEED_MASK; 3596 tw32(MAC_TX_BACKOFF_SEED, addr_high); 3597 } 3598 3599 static void tg3_enable_register_access(struct tg3 *tp) 3600 { 3601 /* 3602 * Make sure register accesses (indirect or otherwise) will function 3603 * correctly. 3604 */ 3605 pci_write_config_dword(tp->pdev, 3606 TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl); 3607 } 3608 3609 static int tg3_power_up(struct tg3 *tp) 3610 { 3611 int err; 3612 3613 tg3_enable_register_access(tp); 3614 3615 err = pci_set_power_state(tp->pdev, PCI_D0); 3616 if (!err) { 3617 /* Switch out of Vaux if it is a NIC */ 3618 tg3_pwrsrc_switch_to_vmain(tp); 3619 } else { 3620 netdev_err(tp->dev, "Transition to D0 failed\n"); 3621 } 3622 3623 return err; 3624 } 3625 3626 static int tg3_setup_phy(struct tg3 *, int); 3627 3628 static int tg3_power_down_prepare(struct tg3 *tp) 3629 { 3630 u32 misc_host_ctrl; 3631 bool device_should_wake, do_low_power; 3632 3633 tg3_enable_register_access(tp); 3634 3635 /* Restore the CLKREQ setting. */ 3636 if (tg3_flag(tp, CLKREQ_BUG)) { 3637 u16 lnkctl; 3638 3639 pci_read_config_word(tp->pdev, 3640 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 3641 &lnkctl); 3642 lnkctl |= PCI_EXP_LNKCTL_CLKREQ_EN; 3643 pci_write_config_word(tp->pdev, 3644 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 3645 lnkctl); 3646 } 3647 3648 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 3649 tw32(TG3PCI_MISC_HOST_CTRL, 3650 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT); 3651 3652 device_should_wake = device_may_wakeup(&tp->pdev->dev) && 3653 tg3_flag(tp, WOL_ENABLE); 3654 3655 if (tg3_flag(tp, USE_PHYLIB)) { 3656 do_low_power = false; 3657 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) && 3658 !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 3659 struct phy_device *phydev; 3660 u32 phyid, advertising; 3661 3662 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 3663 3664 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 3665 3666 tp->link_config.speed = phydev->speed; 3667 tp->link_config.duplex = phydev->duplex; 3668 tp->link_config.autoneg = phydev->autoneg; 3669 tp->link_config.advertising = phydev->advertising; 3670 3671 advertising = ADVERTISED_TP | 3672 ADVERTISED_Pause | 3673 ADVERTISED_Autoneg | 3674 ADVERTISED_10baseT_Half; 3675 3676 if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) { 3677 if (tg3_flag(tp, WOL_SPEED_100MB)) 3678 advertising |= 3679 ADVERTISED_100baseT_Half | 3680 ADVERTISED_100baseT_Full | 3681 ADVERTISED_10baseT_Full; 3682 else 3683 advertising |= ADVERTISED_10baseT_Full; 3684 } 3685 3686 phydev->advertising = advertising; 3687 3688 phy_start_aneg(phydev); 3689 3690 phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; 3691 if (phyid != PHY_ID_BCMAC131) { 3692 phyid &= PHY_BCM_OUI_MASK; 3693 if (phyid == PHY_BCM_OUI_1 || 3694 phyid == PHY_BCM_OUI_2 || 3695 phyid == PHY_BCM_OUI_3) 3696 do_low_power = true; 3697 } 3698 } 3699 } else { 3700 do_low_power = true; 3701 3702 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) 3703 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 3704 3705 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 3706 tg3_setup_phy(tp, 0); 3707 } 3708 3709 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 3710 u32 val; 3711 3712 val = tr32(GRC_VCPU_EXT_CTRL); 3713 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL); 3714 } else if (!tg3_flag(tp, ENABLE_ASF)) { 3715 int i; 3716 u32 val; 3717 3718 for (i = 0; i < 200; i++) { 3719 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val); 3720 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 3721 break; 3722 msleep(1); 3723 } 3724 } 3725 if (tg3_flag(tp, WOL_CAP)) 3726 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE | 3727 WOL_DRV_STATE_SHUTDOWN | 3728 WOL_DRV_WOL | 3729 WOL_SET_MAGIC_PKT); 3730 3731 if (device_should_wake) { 3732 u32 mac_mode; 3733 3734 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 3735 if (do_low_power && 3736 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 3737 tg3_phy_auxctl_write(tp, 3738 MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 3739 MII_TG3_AUXCTL_PCTL_WOL_EN | 3740 MII_TG3_AUXCTL_PCTL_100TX_LPWR | 3741 MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC); 3742 udelay(40); 3743 } 3744 3745 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 3746 mac_mode = MAC_MODE_PORT_MODE_GMII; 3747 else 3748 mac_mode = MAC_MODE_PORT_MODE_MII; 3749 3750 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY; 3751 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 3752 ASIC_REV_5700) { 3753 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ? 3754 SPEED_100 : SPEED_10; 3755 if (tg3_5700_link_polarity(tp, speed)) 3756 mac_mode |= MAC_MODE_LINK_POLARITY; 3757 else 3758 mac_mode &= ~MAC_MODE_LINK_POLARITY; 3759 } 3760 } else { 3761 mac_mode = MAC_MODE_PORT_MODE_TBI; 3762 } 3763 3764 if (!tg3_flag(tp, 5750_PLUS)) 3765 tw32(MAC_LED_CTRL, tp->led_ctrl); 3766 3767 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE; 3768 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) && 3769 (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE))) 3770 mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL; 3771 3772 if (tg3_flag(tp, ENABLE_APE)) 3773 mac_mode |= MAC_MODE_APE_TX_EN | 3774 MAC_MODE_APE_RX_EN | 3775 MAC_MODE_TDE_ENABLE; 3776 3777 tw32_f(MAC_MODE, mac_mode); 3778 udelay(100); 3779 3780 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE); 3781 udelay(10); 3782 } 3783 3784 if (!tg3_flag(tp, WOL_SPEED_100MB) && 3785 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3786 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 3787 u32 base_val; 3788 3789 base_val = tp->pci_clock_ctrl; 3790 base_val |= (CLOCK_CTRL_RXCLK_DISABLE | 3791 CLOCK_CTRL_TXCLK_DISABLE); 3792 3793 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK | 3794 CLOCK_CTRL_PWRDOWN_PLL133, 40); 3795 } else if (tg3_flag(tp, 5780_CLASS) || 3796 tg3_flag(tp, CPMU_PRESENT) || 3797 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 3798 /* do nothing */ 3799 } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) { 3800 u32 newbits1, newbits2; 3801 3802 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3803 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 3804 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE | 3805 CLOCK_CTRL_TXCLK_DISABLE | 3806 CLOCK_CTRL_ALTCLK); 3807 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 3808 } else if (tg3_flag(tp, 5705_PLUS)) { 3809 newbits1 = CLOCK_CTRL_625_CORE; 3810 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK; 3811 } else { 3812 newbits1 = CLOCK_CTRL_ALTCLK; 3813 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 3814 } 3815 3816 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1, 3817 40); 3818 3819 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2, 3820 40); 3821 3822 if (!tg3_flag(tp, 5705_PLUS)) { 3823 u32 newbits3; 3824 3825 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3826 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 3827 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE | 3828 CLOCK_CTRL_TXCLK_DISABLE | 3829 CLOCK_CTRL_44MHZ_CORE); 3830 } else { 3831 newbits3 = CLOCK_CTRL_44MHZ_CORE; 3832 } 3833 3834 tw32_wait_f(TG3PCI_CLOCK_CTRL, 3835 tp->pci_clock_ctrl | newbits3, 40); 3836 } 3837 } 3838 3839 if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF)) 3840 tg3_power_down_phy(tp, do_low_power); 3841 3842 tg3_frob_aux_power(tp, true); 3843 3844 /* Workaround for unstable PLL clock */ 3845 if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) || 3846 (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) { 3847 u32 val = tr32(0x7d00); 3848 3849 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1); 3850 tw32(0x7d00, val); 3851 if (!tg3_flag(tp, ENABLE_ASF)) { 3852 int err; 3853 3854 err = tg3_nvram_lock(tp); 3855 tg3_halt_cpu(tp, RX_CPU_BASE); 3856 if (!err) 3857 tg3_nvram_unlock(tp); 3858 } 3859 } 3860 3861 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); 3862 3863 return 0; 3864 } 3865 3866 static void tg3_power_down(struct tg3 *tp) 3867 { 3868 tg3_power_down_prepare(tp); 3869 3870 pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE)); 3871 pci_set_power_state(tp->pdev, PCI_D3hot); 3872 } 3873 3874 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex) 3875 { 3876 switch (val & MII_TG3_AUX_STAT_SPDMASK) { 3877 case MII_TG3_AUX_STAT_10HALF: 3878 *speed = SPEED_10; 3879 *duplex = DUPLEX_HALF; 3880 break; 3881 3882 case MII_TG3_AUX_STAT_10FULL: 3883 *speed = SPEED_10; 3884 *duplex = DUPLEX_FULL; 3885 break; 3886 3887 case MII_TG3_AUX_STAT_100HALF: 3888 *speed = SPEED_100; 3889 *duplex = DUPLEX_HALF; 3890 break; 3891 3892 case MII_TG3_AUX_STAT_100FULL: 3893 *speed = SPEED_100; 3894 *duplex = DUPLEX_FULL; 3895 break; 3896 3897 case MII_TG3_AUX_STAT_1000HALF: 3898 *speed = SPEED_1000; 3899 *duplex = DUPLEX_HALF; 3900 break; 3901 3902 case MII_TG3_AUX_STAT_1000FULL: 3903 *speed = SPEED_1000; 3904 *duplex = DUPLEX_FULL; 3905 break; 3906 3907 default: 3908 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 3909 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 : 3910 SPEED_10; 3911 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL : 3912 DUPLEX_HALF; 3913 break; 3914 } 3915 *speed = SPEED_UNKNOWN; 3916 *duplex = DUPLEX_UNKNOWN; 3917 break; 3918 } 3919 } 3920 3921 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) 3922 { 3923 int err = 0; 3924 u32 val, new_adv; 3925 3926 new_adv = ADVERTISE_CSMA; 3927 new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL; 3928 new_adv |= mii_advertise_flowctrl(flowctrl); 3929 3930 err = tg3_writephy(tp, MII_ADVERTISE, new_adv); 3931 if (err) 3932 goto done; 3933 3934 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 3935 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise); 3936 3937 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 3938 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) 3939 new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 3940 3941 err = tg3_writephy(tp, MII_CTRL1000, new_adv); 3942 if (err) 3943 goto done; 3944 } 3945 3946 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 3947 goto done; 3948 3949 tw32(TG3_CPMU_EEE_MODE, 3950 tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE); 3951 3952 err = TG3_PHY_AUXCTL_SMDSP_ENABLE(tp); 3953 if (!err) { 3954 u32 err2; 3955 3956 val = 0; 3957 /* Advertise 100-BaseTX EEE ability */ 3958 if (advertise & ADVERTISED_100baseT_Full) 3959 val |= MDIO_AN_EEE_ADV_100TX; 3960 /* Advertise 1000-BaseT EEE ability */ 3961 if (advertise & ADVERTISED_1000baseT_Full) 3962 val |= MDIO_AN_EEE_ADV_1000T; 3963 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); 3964 if (err) 3965 val = 0; 3966 3967 switch (GET_ASIC_REV(tp->pci_chip_rev_id)) { 3968 case ASIC_REV_5717: 3969 case ASIC_REV_57765: 3970 case ASIC_REV_57766: 3971 case ASIC_REV_5719: 3972 /* If we advertised any eee advertisements above... */ 3973 if (val) 3974 val = MII_TG3_DSP_TAP26_ALNOKO | 3975 MII_TG3_DSP_TAP26_RMRXSTO | 3976 MII_TG3_DSP_TAP26_OPCSINPT; 3977 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 3978 /* Fall through */ 3979 case ASIC_REV_5720: 3980 if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) 3981 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | 3982 MII_TG3_DSP_CH34TP2_HIBW01); 3983 } 3984 3985 err2 = TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); 3986 if (!err) 3987 err = err2; 3988 } 3989 3990 done: 3991 return err; 3992 } 3993 3994 static void tg3_phy_copper_begin(struct tg3 *tp) 3995 { 3996 if (tp->link_config.autoneg == AUTONEG_ENABLE || 3997 (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 3998 u32 adv, fc; 3999 4000 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 4001 adv = ADVERTISED_10baseT_Half | 4002 ADVERTISED_10baseT_Full; 4003 if (tg3_flag(tp, WOL_SPEED_100MB)) 4004 adv |= ADVERTISED_100baseT_Half | 4005 ADVERTISED_100baseT_Full; 4006 4007 fc = FLOW_CTRL_TX | FLOW_CTRL_RX; 4008 } else { 4009 adv = tp->link_config.advertising; 4010 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 4011 adv &= ~(ADVERTISED_1000baseT_Half | 4012 ADVERTISED_1000baseT_Full); 4013 4014 fc = tp->link_config.flowctrl; 4015 } 4016 4017 tg3_phy_autoneg_cfg(tp, adv, fc); 4018 4019 tg3_writephy(tp, MII_BMCR, 4020 BMCR_ANENABLE | BMCR_ANRESTART); 4021 } else { 4022 int i; 4023 u32 bmcr, orig_bmcr; 4024 4025 tp->link_config.active_speed = tp->link_config.speed; 4026 tp->link_config.active_duplex = tp->link_config.duplex; 4027 4028 bmcr = 0; 4029 switch (tp->link_config.speed) { 4030 default: 4031 case SPEED_10: 4032 break; 4033 4034 case SPEED_100: 4035 bmcr |= BMCR_SPEED100; 4036 break; 4037 4038 case SPEED_1000: 4039 bmcr |= BMCR_SPEED1000; 4040 break; 4041 } 4042 4043 if (tp->link_config.duplex == DUPLEX_FULL) 4044 bmcr |= BMCR_FULLDPLX; 4045 4046 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) && 4047 (bmcr != orig_bmcr)) { 4048 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK); 4049 for (i = 0; i < 1500; i++) { 4050 u32 tmp; 4051 4052 udelay(10); 4053 if (tg3_readphy(tp, MII_BMSR, &tmp) || 4054 tg3_readphy(tp, MII_BMSR, &tmp)) 4055 continue; 4056 if (!(tmp & BMSR_LSTATUS)) { 4057 udelay(40); 4058 break; 4059 } 4060 } 4061 tg3_writephy(tp, MII_BMCR, bmcr); 4062 udelay(40); 4063 } 4064 } 4065 } 4066 4067 static int tg3_init_5401phy_dsp(struct tg3 *tp) 4068 { 4069 int err; 4070 4071 /* Turn off tap power management. */ 4072 /* Set Extended packet length bit */ 4073 err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 4074 4075 err |= tg3_phydsp_write(tp, 0x0012, 0x1804); 4076 err |= tg3_phydsp_write(tp, 0x0013, 0x1204); 4077 err |= tg3_phydsp_write(tp, 0x8006, 0x0132); 4078 err |= tg3_phydsp_write(tp, 0x8006, 0x0232); 4079 err |= tg3_phydsp_write(tp, 0x201f, 0x0a20); 4080 4081 udelay(40); 4082 4083 return err; 4084 } 4085 4086 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv) 4087 { 4088 u32 advmsk, tgtadv, advertising; 4089 4090 advertising = tp->link_config.advertising; 4091 tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL; 4092 4093 advmsk = ADVERTISE_ALL; 4094 if (tp->link_config.active_duplex == DUPLEX_FULL) { 4095 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl); 4096 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; 4097 } 4098 4099 if (tg3_readphy(tp, MII_ADVERTISE, lcladv)) 4100 return false; 4101 4102 if ((*lcladv & advmsk) != tgtadv) 4103 return false; 4104 4105 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4106 u32 tg3_ctrl; 4107 4108 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising); 4109 4110 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl)) 4111 return false; 4112 4113 if (tgtadv && 4114 (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 4115 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)) { 4116 tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4117 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL | 4118 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 4119 } else { 4120 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL); 4121 } 4122 4123 if (tg3_ctrl != tgtadv) 4124 return false; 4125 } 4126 4127 return true; 4128 } 4129 4130 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv) 4131 { 4132 u32 lpeth = 0; 4133 4134 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4135 u32 val; 4136 4137 if (tg3_readphy(tp, MII_STAT1000, &val)) 4138 return false; 4139 4140 lpeth = mii_stat1000_to_ethtool_lpa_t(val); 4141 } 4142 4143 if (tg3_readphy(tp, MII_LPA, rmtadv)) 4144 return false; 4145 4146 lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv); 4147 tp->link_config.rmt_adv = lpeth; 4148 4149 return true; 4150 } 4151 4152 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset) 4153 { 4154 int current_link_up; 4155 u32 bmsr, val; 4156 u32 lcl_adv, rmt_adv; 4157 u16 current_speed; 4158 u8 current_duplex; 4159 int i, err; 4160 4161 tw32(MAC_EVENT, 0); 4162 4163 tw32_f(MAC_STATUS, 4164 (MAC_STATUS_SYNC_CHANGED | 4165 MAC_STATUS_CFG_CHANGED | 4166 MAC_STATUS_MI_COMPLETION | 4167 MAC_STATUS_LNKSTATE_CHANGED)); 4168 udelay(40); 4169 4170 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 4171 tw32_f(MAC_MI_MODE, 4172 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 4173 udelay(80); 4174 } 4175 4176 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0); 4177 4178 /* Some third-party PHYs need to be reset on link going 4179 * down. 4180 */ 4181 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 4182 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 4183 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) && 4184 netif_carrier_ok(tp->dev)) { 4185 tg3_readphy(tp, MII_BMSR, &bmsr); 4186 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4187 !(bmsr & BMSR_LSTATUS)) 4188 force_reset = 1; 4189 } 4190 if (force_reset) 4191 tg3_phy_reset(tp); 4192 4193 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 4194 tg3_readphy(tp, MII_BMSR, &bmsr); 4195 if (tg3_readphy(tp, MII_BMSR, &bmsr) || 4196 !tg3_flag(tp, INIT_COMPLETE)) 4197 bmsr = 0; 4198 4199 if (!(bmsr & BMSR_LSTATUS)) { 4200 err = tg3_init_5401phy_dsp(tp); 4201 if (err) 4202 return err; 4203 4204 tg3_readphy(tp, MII_BMSR, &bmsr); 4205 for (i = 0; i < 1000; i++) { 4206 udelay(10); 4207 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4208 (bmsr & BMSR_LSTATUS)) { 4209 udelay(40); 4210 break; 4211 } 4212 } 4213 4214 if ((tp->phy_id & TG3_PHY_ID_REV_MASK) == 4215 TG3_PHY_REV_BCM5401_B0 && 4216 !(bmsr & BMSR_LSTATUS) && 4217 tp->link_config.active_speed == SPEED_1000) { 4218 err = tg3_phy_reset(tp); 4219 if (!err) 4220 err = tg3_init_5401phy_dsp(tp); 4221 if (err) 4222 return err; 4223 } 4224 } 4225 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 4226 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) { 4227 /* 5701 {A0,B0} CRC bug workaround */ 4228 tg3_writephy(tp, 0x15, 0x0a75); 4229 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4230 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 4231 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4232 } 4233 4234 /* Clear pending interrupts... */ 4235 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4236 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4237 4238 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) 4239 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); 4240 else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) 4241 tg3_writephy(tp, MII_TG3_IMASK, ~0); 4242 4243 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 4244 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 4245 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1) 4246 tg3_writephy(tp, MII_TG3_EXT_CTRL, 4247 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 4248 else 4249 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); 4250 } 4251 4252 current_link_up = 0; 4253 current_speed = SPEED_UNKNOWN; 4254 current_duplex = DUPLEX_UNKNOWN; 4255 tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE; 4256 tp->link_config.rmt_adv = 0; 4257 4258 if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) { 4259 err = tg3_phy_auxctl_read(tp, 4260 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4261 &val); 4262 if (!err && !(val & (1 << 10))) { 4263 tg3_phy_auxctl_write(tp, 4264 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4265 val | (1 << 10)); 4266 goto relink; 4267 } 4268 } 4269 4270 bmsr = 0; 4271 for (i = 0; i < 100; i++) { 4272 tg3_readphy(tp, MII_BMSR, &bmsr); 4273 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4274 (bmsr & BMSR_LSTATUS)) 4275 break; 4276 udelay(40); 4277 } 4278 4279 if (bmsr & BMSR_LSTATUS) { 4280 u32 aux_stat, bmcr; 4281 4282 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat); 4283 for (i = 0; i < 2000; i++) { 4284 udelay(10); 4285 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) && 4286 aux_stat) 4287 break; 4288 } 4289 4290 tg3_aux_stat_to_speed_duplex(tp, aux_stat, 4291 ¤t_speed, 4292 ¤t_duplex); 4293 4294 bmcr = 0; 4295 for (i = 0; i < 200; i++) { 4296 tg3_readphy(tp, MII_BMCR, &bmcr); 4297 if (tg3_readphy(tp, MII_BMCR, &bmcr)) 4298 continue; 4299 if (bmcr && bmcr != 0x7fff) 4300 break; 4301 udelay(10); 4302 } 4303 4304 lcl_adv = 0; 4305 rmt_adv = 0; 4306 4307 tp->link_config.active_speed = current_speed; 4308 tp->link_config.active_duplex = current_duplex; 4309 4310 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4311 if ((bmcr & BMCR_ANENABLE) && 4312 tg3_phy_copper_an_config_ok(tp, &lcl_adv) && 4313 tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv)) 4314 current_link_up = 1; 4315 } else { 4316 if (!(bmcr & BMCR_ANENABLE) && 4317 tp->link_config.speed == current_speed && 4318 tp->link_config.duplex == current_duplex && 4319 tp->link_config.flowctrl == 4320 tp->link_config.active_flowctrl) { 4321 current_link_up = 1; 4322 } 4323 } 4324 4325 if (current_link_up == 1 && 4326 tp->link_config.active_duplex == DUPLEX_FULL) { 4327 u32 reg, bit; 4328 4329 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4330 reg = MII_TG3_FET_GEN_STAT; 4331 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT; 4332 } else { 4333 reg = MII_TG3_EXT_STAT; 4334 bit = MII_TG3_EXT_STAT_MDIX; 4335 } 4336 4337 if (!tg3_readphy(tp, reg, &val) && (val & bit)) 4338 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE; 4339 4340 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 4341 } 4342 } 4343 4344 relink: 4345 if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4346 tg3_phy_copper_begin(tp); 4347 4348 tg3_readphy(tp, MII_BMSR, &bmsr); 4349 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) || 4350 (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 4351 current_link_up = 1; 4352 } 4353 4354 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 4355 if (current_link_up == 1) { 4356 if (tp->link_config.active_speed == SPEED_100 || 4357 tp->link_config.active_speed == SPEED_10) 4358 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4359 else 4360 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 4361 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) 4362 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4363 else 4364 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 4365 4366 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 4367 if (tp->link_config.active_duplex == DUPLEX_HALF) 4368 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 4369 4370 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) { 4371 if (current_link_up == 1 && 4372 tg3_5700_link_polarity(tp, tp->link_config.active_speed)) 4373 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 4374 else 4375 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 4376 } 4377 4378 /* ??? Without this setting Netgear GA302T PHY does not 4379 * ??? send/receive packets... 4380 */ 4381 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 && 4382 tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) { 4383 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL; 4384 tw32_f(MAC_MI_MODE, tp->mi_mode); 4385 udelay(80); 4386 } 4387 4388 tw32_f(MAC_MODE, tp->mac_mode); 4389 udelay(40); 4390 4391 tg3_phy_eee_adjust(tp, current_link_up); 4392 4393 if (tg3_flag(tp, USE_LINKCHG_REG)) { 4394 /* Polled via timer. */ 4395 tw32_f(MAC_EVENT, 0); 4396 } else { 4397 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 4398 } 4399 udelay(40); 4400 4401 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 && 4402 current_link_up == 1 && 4403 tp->link_config.active_speed == SPEED_1000 && 4404 (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) { 4405 udelay(120); 4406 tw32_f(MAC_STATUS, 4407 (MAC_STATUS_SYNC_CHANGED | 4408 MAC_STATUS_CFG_CHANGED)); 4409 udelay(40); 4410 tg3_write_mem(tp, 4411 NIC_SRAM_FIRMWARE_MBOX, 4412 NIC_SRAM_FIRMWARE_MBOX_MAGIC2); 4413 } 4414 4415 /* Prevent send BD corruption. */ 4416 if (tg3_flag(tp, CLKREQ_BUG)) { 4417 u16 oldlnkctl, newlnkctl; 4418 4419 pci_read_config_word(tp->pdev, 4420 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 4421 &oldlnkctl); 4422 if (tp->link_config.active_speed == SPEED_100 || 4423 tp->link_config.active_speed == SPEED_10) 4424 newlnkctl = oldlnkctl & ~PCI_EXP_LNKCTL_CLKREQ_EN; 4425 else 4426 newlnkctl = oldlnkctl | PCI_EXP_LNKCTL_CLKREQ_EN; 4427 if (newlnkctl != oldlnkctl) 4428 pci_write_config_word(tp->pdev, 4429 pci_pcie_cap(tp->pdev) + 4430 PCI_EXP_LNKCTL, newlnkctl); 4431 } 4432 4433 if (current_link_up != netif_carrier_ok(tp->dev)) { 4434 if (current_link_up) 4435 netif_carrier_on(tp->dev); 4436 else 4437 netif_carrier_off(tp->dev); 4438 tg3_link_report(tp); 4439 } 4440 4441 return 0; 4442 } 4443 4444 struct tg3_fiber_aneginfo { 4445 int state; 4446 #define ANEG_STATE_UNKNOWN 0 4447 #define ANEG_STATE_AN_ENABLE 1 4448 #define ANEG_STATE_RESTART_INIT 2 4449 #define ANEG_STATE_RESTART 3 4450 #define ANEG_STATE_DISABLE_LINK_OK 4 4451 #define ANEG_STATE_ABILITY_DETECT_INIT 5 4452 #define ANEG_STATE_ABILITY_DETECT 6 4453 #define ANEG_STATE_ACK_DETECT_INIT 7 4454 #define ANEG_STATE_ACK_DETECT 8 4455 #define ANEG_STATE_COMPLETE_ACK_INIT 9 4456 #define ANEG_STATE_COMPLETE_ACK 10 4457 #define ANEG_STATE_IDLE_DETECT_INIT 11 4458 #define ANEG_STATE_IDLE_DETECT 12 4459 #define ANEG_STATE_LINK_OK 13 4460 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14 4461 #define ANEG_STATE_NEXT_PAGE_WAIT 15 4462 4463 u32 flags; 4464 #define MR_AN_ENABLE 0x00000001 4465 #define MR_RESTART_AN 0x00000002 4466 #define MR_AN_COMPLETE 0x00000004 4467 #define MR_PAGE_RX 0x00000008 4468 #define MR_NP_LOADED 0x00000010 4469 #define MR_TOGGLE_TX 0x00000020 4470 #define MR_LP_ADV_FULL_DUPLEX 0x00000040 4471 #define MR_LP_ADV_HALF_DUPLEX 0x00000080 4472 #define MR_LP_ADV_SYM_PAUSE 0x00000100 4473 #define MR_LP_ADV_ASYM_PAUSE 0x00000200 4474 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400 4475 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800 4476 #define MR_LP_ADV_NEXT_PAGE 0x00001000 4477 #define MR_TOGGLE_RX 0x00002000 4478 #define MR_NP_RX 0x00004000 4479 4480 #define MR_LINK_OK 0x80000000 4481 4482 unsigned long link_time, cur_time; 4483 4484 u32 ability_match_cfg; 4485 int ability_match_count; 4486 4487 char ability_match, idle_match, ack_match; 4488 4489 u32 txconfig, rxconfig; 4490 #define ANEG_CFG_NP 0x00000080 4491 #define ANEG_CFG_ACK 0x00000040 4492 #define ANEG_CFG_RF2 0x00000020 4493 #define ANEG_CFG_RF1 0x00000010 4494 #define ANEG_CFG_PS2 0x00000001 4495 #define ANEG_CFG_PS1 0x00008000 4496 #define ANEG_CFG_HD 0x00004000 4497 #define ANEG_CFG_FD 0x00002000 4498 #define ANEG_CFG_INVAL 0x00001f06 4499 4500 }; 4501 #define ANEG_OK 0 4502 #define ANEG_DONE 1 4503 #define ANEG_TIMER_ENAB 2 4504 #define ANEG_FAILED -1 4505 4506 #define ANEG_STATE_SETTLE_TIME 10000 4507 4508 static int tg3_fiber_aneg_smachine(struct tg3 *tp, 4509 struct tg3_fiber_aneginfo *ap) 4510 { 4511 u16 flowctrl; 4512 unsigned long delta; 4513 u32 rx_cfg_reg; 4514 int ret; 4515 4516 if (ap->state == ANEG_STATE_UNKNOWN) { 4517 ap->rxconfig = 0; 4518 ap->link_time = 0; 4519 ap->cur_time = 0; 4520 ap->ability_match_cfg = 0; 4521 ap->ability_match_count = 0; 4522 ap->ability_match = 0; 4523 ap->idle_match = 0; 4524 ap->ack_match = 0; 4525 } 4526 ap->cur_time++; 4527 4528 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) { 4529 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG); 4530 4531 if (rx_cfg_reg != ap->ability_match_cfg) { 4532 ap->ability_match_cfg = rx_cfg_reg; 4533 ap->ability_match = 0; 4534 ap->ability_match_count = 0; 4535 } else { 4536 if (++ap->ability_match_count > 1) { 4537 ap->ability_match = 1; 4538 ap->ability_match_cfg = rx_cfg_reg; 4539 } 4540 } 4541 if (rx_cfg_reg & ANEG_CFG_ACK) 4542 ap->ack_match = 1; 4543 else 4544 ap->ack_match = 0; 4545 4546 ap->idle_match = 0; 4547 } else { 4548 ap->idle_match = 1; 4549 ap->ability_match_cfg = 0; 4550 ap->ability_match_count = 0; 4551 ap->ability_match = 0; 4552 ap->ack_match = 0; 4553 4554 rx_cfg_reg = 0; 4555 } 4556 4557 ap->rxconfig = rx_cfg_reg; 4558 ret = ANEG_OK; 4559 4560 switch (ap->state) { 4561 case ANEG_STATE_UNKNOWN: 4562 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) 4563 ap->state = ANEG_STATE_AN_ENABLE; 4564 4565 /* fallthru */ 4566 case ANEG_STATE_AN_ENABLE: 4567 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); 4568 if (ap->flags & MR_AN_ENABLE) { 4569 ap->link_time = 0; 4570 ap->cur_time = 0; 4571 ap->ability_match_cfg = 0; 4572 ap->ability_match_count = 0; 4573 ap->ability_match = 0; 4574 ap->idle_match = 0; 4575 ap->ack_match = 0; 4576 4577 ap->state = ANEG_STATE_RESTART_INIT; 4578 } else { 4579 ap->state = ANEG_STATE_DISABLE_LINK_OK; 4580 } 4581 break; 4582 4583 case ANEG_STATE_RESTART_INIT: 4584 ap->link_time = ap->cur_time; 4585 ap->flags &= ~(MR_NP_LOADED); 4586 ap->txconfig = 0; 4587 tw32(MAC_TX_AUTO_NEG, 0); 4588 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 4589 tw32_f(MAC_MODE, tp->mac_mode); 4590 udelay(40); 4591 4592 ret = ANEG_TIMER_ENAB; 4593 ap->state = ANEG_STATE_RESTART; 4594 4595 /* fallthru */ 4596 case ANEG_STATE_RESTART: 4597 delta = ap->cur_time - ap->link_time; 4598 if (delta > ANEG_STATE_SETTLE_TIME) 4599 ap->state = ANEG_STATE_ABILITY_DETECT_INIT; 4600 else 4601 ret = ANEG_TIMER_ENAB; 4602 break; 4603 4604 case ANEG_STATE_DISABLE_LINK_OK: 4605 ret = ANEG_DONE; 4606 break; 4607 4608 case ANEG_STATE_ABILITY_DETECT_INIT: 4609 ap->flags &= ~(MR_TOGGLE_TX); 4610 ap->txconfig = ANEG_CFG_FD; 4611 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 4612 if (flowctrl & ADVERTISE_1000XPAUSE) 4613 ap->txconfig |= ANEG_CFG_PS1; 4614 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 4615 ap->txconfig |= ANEG_CFG_PS2; 4616 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 4617 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 4618 tw32_f(MAC_MODE, tp->mac_mode); 4619 udelay(40); 4620 4621 ap->state = ANEG_STATE_ABILITY_DETECT; 4622 break; 4623 4624 case ANEG_STATE_ABILITY_DETECT: 4625 if (ap->ability_match != 0 && ap->rxconfig != 0) 4626 ap->state = ANEG_STATE_ACK_DETECT_INIT; 4627 break; 4628 4629 case ANEG_STATE_ACK_DETECT_INIT: 4630 ap->txconfig |= ANEG_CFG_ACK; 4631 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 4632 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 4633 tw32_f(MAC_MODE, tp->mac_mode); 4634 udelay(40); 4635 4636 ap->state = ANEG_STATE_ACK_DETECT; 4637 4638 /* fallthru */ 4639 case ANEG_STATE_ACK_DETECT: 4640 if (ap->ack_match != 0) { 4641 if ((ap->rxconfig & ~ANEG_CFG_ACK) == 4642 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) { 4643 ap->state = ANEG_STATE_COMPLETE_ACK_INIT; 4644 } else { 4645 ap->state = ANEG_STATE_AN_ENABLE; 4646 } 4647 } else if (ap->ability_match != 0 && 4648 ap->rxconfig == 0) { 4649 ap->state = ANEG_STATE_AN_ENABLE; 4650 } 4651 break; 4652 4653 case ANEG_STATE_COMPLETE_ACK_INIT: 4654 if (ap->rxconfig & ANEG_CFG_INVAL) { 4655 ret = ANEG_FAILED; 4656 break; 4657 } 4658 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX | 4659 MR_LP_ADV_HALF_DUPLEX | 4660 MR_LP_ADV_SYM_PAUSE | 4661 MR_LP_ADV_ASYM_PAUSE | 4662 MR_LP_ADV_REMOTE_FAULT1 | 4663 MR_LP_ADV_REMOTE_FAULT2 | 4664 MR_LP_ADV_NEXT_PAGE | 4665 MR_TOGGLE_RX | 4666 MR_NP_RX); 4667 if (ap->rxconfig & ANEG_CFG_FD) 4668 ap->flags |= MR_LP_ADV_FULL_DUPLEX; 4669 if (ap->rxconfig & ANEG_CFG_HD) 4670 ap->flags |= MR_LP_ADV_HALF_DUPLEX; 4671 if (ap->rxconfig & ANEG_CFG_PS1) 4672 ap->flags |= MR_LP_ADV_SYM_PAUSE; 4673 if (ap->rxconfig & ANEG_CFG_PS2) 4674 ap->flags |= MR_LP_ADV_ASYM_PAUSE; 4675 if (ap->rxconfig & ANEG_CFG_RF1) 4676 ap->flags |= MR_LP_ADV_REMOTE_FAULT1; 4677 if (ap->rxconfig & ANEG_CFG_RF2) 4678 ap->flags |= MR_LP_ADV_REMOTE_FAULT2; 4679 if (ap->rxconfig & ANEG_CFG_NP) 4680 ap->flags |= MR_LP_ADV_NEXT_PAGE; 4681 4682 ap->link_time = ap->cur_time; 4683 4684 ap->flags ^= (MR_TOGGLE_TX); 4685 if (ap->rxconfig & 0x0008) 4686 ap->flags |= MR_TOGGLE_RX; 4687 if (ap->rxconfig & ANEG_CFG_NP) 4688 ap->flags |= MR_NP_RX; 4689 ap->flags |= MR_PAGE_RX; 4690 4691 ap->state = ANEG_STATE_COMPLETE_ACK; 4692 ret = ANEG_TIMER_ENAB; 4693 break; 4694 4695 case ANEG_STATE_COMPLETE_ACK: 4696 if (ap->ability_match != 0 && 4697 ap->rxconfig == 0) { 4698 ap->state = ANEG_STATE_AN_ENABLE; 4699 break; 4700 } 4701 delta = ap->cur_time - ap->link_time; 4702 if (delta > ANEG_STATE_SETTLE_TIME) { 4703 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) { 4704 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 4705 } else { 4706 if ((ap->txconfig & ANEG_CFG_NP) == 0 && 4707 !(ap->flags & MR_NP_RX)) { 4708 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 4709 } else { 4710 ret = ANEG_FAILED; 4711 } 4712 } 4713 } 4714 break; 4715 4716 case ANEG_STATE_IDLE_DETECT_INIT: 4717 ap->link_time = ap->cur_time; 4718 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 4719 tw32_f(MAC_MODE, tp->mac_mode); 4720 udelay(40); 4721 4722 ap->state = ANEG_STATE_IDLE_DETECT; 4723 ret = ANEG_TIMER_ENAB; 4724 break; 4725 4726 case ANEG_STATE_IDLE_DETECT: 4727 if (ap->ability_match != 0 && 4728 ap->rxconfig == 0) { 4729 ap->state = ANEG_STATE_AN_ENABLE; 4730 break; 4731 } 4732 delta = ap->cur_time - ap->link_time; 4733 if (delta > ANEG_STATE_SETTLE_TIME) { 4734 /* XXX another gem from the Broadcom driver :( */ 4735 ap->state = ANEG_STATE_LINK_OK; 4736 } 4737 break; 4738 4739 case ANEG_STATE_LINK_OK: 4740 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK); 4741 ret = ANEG_DONE; 4742 break; 4743 4744 case ANEG_STATE_NEXT_PAGE_WAIT_INIT: 4745 /* ??? unimplemented */ 4746 break; 4747 4748 case ANEG_STATE_NEXT_PAGE_WAIT: 4749 /* ??? unimplemented */ 4750 break; 4751 4752 default: 4753 ret = ANEG_FAILED; 4754 break; 4755 } 4756 4757 return ret; 4758 } 4759 4760 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags) 4761 { 4762 int res = 0; 4763 struct tg3_fiber_aneginfo aninfo; 4764 int status = ANEG_FAILED; 4765 unsigned int tick; 4766 u32 tmp; 4767 4768 tw32_f(MAC_TX_AUTO_NEG, 0); 4769 4770 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK; 4771 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII); 4772 udelay(40); 4773 4774 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS); 4775 udelay(40); 4776 4777 memset(&aninfo, 0, sizeof(aninfo)); 4778 aninfo.flags |= MR_AN_ENABLE; 4779 aninfo.state = ANEG_STATE_UNKNOWN; 4780 aninfo.cur_time = 0; 4781 tick = 0; 4782 while (++tick < 195000) { 4783 status = tg3_fiber_aneg_smachine(tp, &aninfo); 4784 if (status == ANEG_DONE || status == ANEG_FAILED) 4785 break; 4786 4787 udelay(1); 4788 } 4789 4790 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 4791 tw32_f(MAC_MODE, tp->mac_mode); 4792 udelay(40); 4793 4794 *txflags = aninfo.txconfig; 4795 *rxflags = aninfo.flags; 4796 4797 if (status == ANEG_DONE && 4798 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK | 4799 MR_LP_ADV_FULL_DUPLEX))) 4800 res = 1; 4801 4802 return res; 4803 } 4804 4805 static void tg3_init_bcm8002(struct tg3 *tp) 4806 { 4807 u32 mac_status = tr32(MAC_STATUS); 4808 int i; 4809 4810 /* Reset when initting first time or we have a link. */ 4811 if (tg3_flag(tp, INIT_COMPLETE) && 4812 !(mac_status & MAC_STATUS_PCS_SYNCED)) 4813 return; 4814 4815 /* Set PLL lock range. */ 4816 tg3_writephy(tp, 0x16, 0x8007); 4817 4818 /* SW reset */ 4819 tg3_writephy(tp, MII_BMCR, BMCR_RESET); 4820 4821 /* Wait for reset to complete. */ 4822 /* XXX schedule_timeout() ... */ 4823 for (i = 0; i < 500; i++) 4824 udelay(10); 4825 4826 /* Config mode; select PMA/Ch 1 regs. */ 4827 tg3_writephy(tp, 0x10, 0x8411); 4828 4829 /* Enable auto-lock and comdet, select txclk for tx. */ 4830 tg3_writephy(tp, 0x11, 0x0a10); 4831 4832 tg3_writephy(tp, 0x18, 0x00a0); 4833 tg3_writephy(tp, 0x16, 0x41ff); 4834 4835 /* Assert and deassert POR. */ 4836 tg3_writephy(tp, 0x13, 0x0400); 4837 udelay(40); 4838 tg3_writephy(tp, 0x13, 0x0000); 4839 4840 tg3_writephy(tp, 0x11, 0x0a50); 4841 udelay(40); 4842 tg3_writephy(tp, 0x11, 0x0a10); 4843 4844 /* Wait for signal to stabilize */ 4845 /* XXX schedule_timeout() ... */ 4846 for (i = 0; i < 15000; i++) 4847 udelay(10); 4848 4849 /* Deselect the channel register so we can read the PHYID 4850 * later. 4851 */ 4852 tg3_writephy(tp, 0x10, 0x8011); 4853 } 4854 4855 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) 4856 { 4857 u16 flowctrl; 4858 u32 sg_dig_ctrl, sg_dig_status; 4859 u32 serdes_cfg, expected_sg_dig_ctrl; 4860 int workaround, port_a; 4861 int current_link_up; 4862 4863 serdes_cfg = 0; 4864 expected_sg_dig_ctrl = 0; 4865 workaround = 0; 4866 port_a = 1; 4867 current_link_up = 0; 4868 4869 if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 && 4870 tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) { 4871 workaround = 1; 4872 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 4873 port_a = 0; 4874 4875 /* preserve bits 0-11,13,14 for signal pre-emphasis */ 4876 /* preserve bits 20-23 for voltage regulator */ 4877 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff; 4878 } 4879 4880 sg_dig_ctrl = tr32(SG_DIG_CTRL); 4881 4882 if (tp->link_config.autoneg != AUTONEG_ENABLE) { 4883 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) { 4884 if (workaround) { 4885 u32 val = serdes_cfg; 4886 4887 if (port_a) 4888 val |= 0xc010000; 4889 else 4890 val |= 0x4010000; 4891 tw32_f(MAC_SERDES_CFG, val); 4892 } 4893 4894 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 4895 } 4896 if (mac_status & MAC_STATUS_PCS_SYNCED) { 4897 tg3_setup_flow_control(tp, 0, 0); 4898 current_link_up = 1; 4899 } 4900 goto out; 4901 } 4902 4903 /* Want auto-negotiation. */ 4904 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP; 4905 4906 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 4907 if (flowctrl & ADVERTISE_1000XPAUSE) 4908 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP; 4909 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 4910 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE; 4911 4912 if (sg_dig_ctrl != expected_sg_dig_ctrl) { 4913 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) && 4914 tp->serdes_counter && 4915 ((mac_status & (MAC_STATUS_PCS_SYNCED | 4916 MAC_STATUS_RCVD_CFG)) == 4917 MAC_STATUS_PCS_SYNCED)) { 4918 tp->serdes_counter--; 4919 current_link_up = 1; 4920 goto out; 4921 } 4922 restart_autoneg: 4923 if (workaround) 4924 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000); 4925 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET); 4926 udelay(5); 4927 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl); 4928 4929 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 4930 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4931 } else if (mac_status & (MAC_STATUS_PCS_SYNCED | 4932 MAC_STATUS_SIGNAL_DET)) { 4933 sg_dig_status = tr32(SG_DIG_STATUS); 4934 mac_status = tr32(MAC_STATUS); 4935 4936 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) && 4937 (mac_status & MAC_STATUS_PCS_SYNCED)) { 4938 u32 local_adv = 0, remote_adv = 0; 4939 4940 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP) 4941 local_adv |= ADVERTISE_1000XPAUSE; 4942 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE) 4943 local_adv |= ADVERTISE_1000XPSE_ASYM; 4944 4945 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE) 4946 remote_adv |= LPA_1000XPAUSE; 4947 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE) 4948 remote_adv |= LPA_1000XPAUSE_ASYM; 4949 4950 tp->link_config.rmt_adv = 4951 mii_adv_to_ethtool_adv_x(remote_adv); 4952 4953 tg3_setup_flow_control(tp, local_adv, remote_adv); 4954 current_link_up = 1; 4955 tp->serdes_counter = 0; 4956 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4957 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) { 4958 if (tp->serdes_counter) 4959 tp->serdes_counter--; 4960 else { 4961 if (workaround) { 4962 u32 val = serdes_cfg; 4963 4964 if (port_a) 4965 val |= 0xc010000; 4966 else 4967 val |= 0x4010000; 4968 4969 tw32_f(MAC_SERDES_CFG, val); 4970 } 4971 4972 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 4973 udelay(40); 4974 4975 /* Link parallel detection - link is up */ 4976 /* only if we have PCS_SYNC and not */ 4977 /* receiving config code words */ 4978 mac_status = tr32(MAC_STATUS); 4979 if ((mac_status & MAC_STATUS_PCS_SYNCED) && 4980 !(mac_status & MAC_STATUS_RCVD_CFG)) { 4981 tg3_setup_flow_control(tp, 0, 0); 4982 current_link_up = 1; 4983 tp->phy_flags |= 4984 TG3_PHYFLG_PARALLEL_DETECT; 4985 tp->serdes_counter = 4986 SERDES_PARALLEL_DET_TIMEOUT; 4987 } else 4988 goto restart_autoneg; 4989 } 4990 } 4991 } else { 4992 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 4993 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4994 } 4995 4996 out: 4997 return current_link_up; 4998 } 4999 5000 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status) 5001 { 5002 int current_link_up = 0; 5003 5004 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) 5005 goto out; 5006 5007 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5008 u32 txflags, rxflags; 5009 int i; 5010 5011 if (fiber_autoneg(tp, &txflags, &rxflags)) { 5012 u32 local_adv = 0, remote_adv = 0; 5013 5014 if (txflags & ANEG_CFG_PS1) 5015 local_adv |= ADVERTISE_1000XPAUSE; 5016 if (txflags & ANEG_CFG_PS2) 5017 local_adv |= ADVERTISE_1000XPSE_ASYM; 5018 5019 if (rxflags & MR_LP_ADV_SYM_PAUSE) 5020 remote_adv |= LPA_1000XPAUSE; 5021 if (rxflags & MR_LP_ADV_ASYM_PAUSE) 5022 remote_adv |= LPA_1000XPAUSE_ASYM; 5023 5024 tp->link_config.rmt_adv = 5025 mii_adv_to_ethtool_adv_x(remote_adv); 5026 5027 tg3_setup_flow_control(tp, local_adv, remote_adv); 5028 5029 current_link_up = 1; 5030 } 5031 for (i = 0; i < 30; i++) { 5032 udelay(20); 5033 tw32_f(MAC_STATUS, 5034 (MAC_STATUS_SYNC_CHANGED | 5035 MAC_STATUS_CFG_CHANGED)); 5036 udelay(40); 5037 if ((tr32(MAC_STATUS) & 5038 (MAC_STATUS_SYNC_CHANGED | 5039 MAC_STATUS_CFG_CHANGED)) == 0) 5040 break; 5041 } 5042 5043 mac_status = tr32(MAC_STATUS); 5044 if (current_link_up == 0 && 5045 (mac_status & MAC_STATUS_PCS_SYNCED) && 5046 !(mac_status & MAC_STATUS_RCVD_CFG)) 5047 current_link_up = 1; 5048 } else { 5049 tg3_setup_flow_control(tp, 0, 0); 5050 5051 /* Forcing 1000FD link up. */ 5052 current_link_up = 1; 5053 5054 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS)); 5055 udelay(40); 5056 5057 tw32_f(MAC_MODE, tp->mac_mode); 5058 udelay(40); 5059 } 5060 5061 out: 5062 return current_link_up; 5063 } 5064 5065 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset) 5066 { 5067 u32 orig_pause_cfg; 5068 u16 orig_active_speed; 5069 u8 orig_active_duplex; 5070 u32 mac_status; 5071 int current_link_up; 5072 int i; 5073 5074 orig_pause_cfg = tp->link_config.active_flowctrl; 5075 orig_active_speed = tp->link_config.active_speed; 5076 orig_active_duplex = tp->link_config.active_duplex; 5077 5078 if (!tg3_flag(tp, HW_AUTONEG) && 5079 netif_carrier_ok(tp->dev) && 5080 tg3_flag(tp, INIT_COMPLETE)) { 5081 mac_status = tr32(MAC_STATUS); 5082 mac_status &= (MAC_STATUS_PCS_SYNCED | 5083 MAC_STATUS_SIGNAL_DET | 5084 MAC_STATUS_CFG_CHANGED | 5085 MAC_STATUS_RCVD_CFG); 5086 if (mac_status == (MAC_STATUS_PCS_SYNCED | 5087 MAC_STATUS_SIGNAL_DET)) { 5088 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5089 MAC_STATUS_CFG_CHANGED)); 5090 return 0; 5091 } 5092 } 5093 5094 tw32_f(MAC_TX_AUTO_NEG, 0); 5095 5096 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 5097 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI; 5098 tw32_f(MAC_MODE, tp->mac_mode); 5099 udelay(40); 5100 5101 if (tp->phy_id == TG3_PHY_ID_BCM8002) 5102 tg3_init_bcm8002(tp); 5103 5104 /* Enable link change event even when serdes polling. */ 5105 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5106 udelay(40); 5107 5108 current_link_up = 0; 5109 tp->link_config.rmt_adv = 0; 5110 mac_status = tr32(MAC_STATUS); 5111 5112 if (tg3_flag(tp, HW_AUTONEG)) 5113 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status); 5114 else 5115 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status); 5116 5117 tp->napi[0].hw_status->status = 5118 (SD_STATUS_UPDATED | 5119 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG)); 5120 5121 for (i = 0; i < 100; i++) { 5122 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5123 MAC_STATUS_CFG_CHANGED)); 5124 udelay(5); 5125 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED | 5126 MAC_STATUS_CFG_CHANGED | 5127 MAC_STATUS_LNKSTATE_CHANGED)) == 0) 5128 break; 5129 } 5130 5131 mac_status = tr32(MAC_STATUS); 5132 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) { 5133 current_link_up = 0; 5134 if (tp->link_config.autoneg == AUTONEG_ENABLE && 5135 tp->serdes_counter == 0) { 5136 tw32_f(MAC_MODE, (tp->mac_mode | 5137 MAC_MODE_SEND_CONFIGS)); 5138 udelay(1); 5139 tw32_f(MAC_MODE, tp->mac_mode); 5140 } 5141 } 5142 5143 if (current_link_up == 1) { 5144 tp->link_config.active_speed = SPEED_1000; 5145 tp->link_config.active_duplex = DUPLEX_FULL; 5146 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5147 LED_CTRL_LNKLED_OVERRIDE | 5148 LED_CTRL_1000MBPS_ON)); 5149 } else { 5150 tp->link_config.active_speed = SPEED_UNKNOWN; 5151 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 5152 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5153 LED_CTRL_LNKLED_OVERRIDE | 5154 LED_CTRL_TRAFFIC_OVERRIDE)); 5155 } 5156 5157 if (current_link_up != netif_carrier_ok(tp->dev)) { 5158 if (current_link_up) 5159 netif_carrier_on(tp->dev); 5160 else 5161 netif_carrier_off(tp->dev); 5162 tg3_link_report(tp); 5163 } else { 5164 u32 now_pause_cfg = tp->link_config.active_flowctrl; 5165 if (orig_pause_cfg != now_pause_cfg || 5166 orig_active_speed != tp->link_config.active_speed || 5167 orig_active_duplex != tp->link_config.active_duplex) 5168 tg3_link_report(tp); 5169 } 5170 5171 return 0; 5172 } 5173 5174 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset) 5175 { 5176 int current_link_up, err = 0; 5177 u32 bmsr, bmcr; 5178 u16 current_speed; 5179 u8 current_duplex; 5180 u32 local_adv, remote_adv; 5181 5182 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5183 tw32_f(MAC_MODE, tp->mac_mode); 5184 udelay(40); 5185 5186 tw32(MAC_EVENT, 0); 5187 5188 tw32_f(MAC_STATUS, 5189 (MAC_STATUS_SYNC_CHANGED | 5190 MAC_STATUS_CFG_CHANGED | 5191 MAC_STATUS_MI_COMPLETION | 5192 MAC_STATUS_LNKSTATE_CHANGED)); 5193 udelay(40); 5194 5195 if (force_reset) 5196 tg3_phy_reset(tp); 5197 5198 current_link_up = 0; 5199 current_speed = SPEED_UNKNOWN; 5200 current_duplex = DUPLEX_UNKNOWN; 5201 tp->link_config.rmt_adv = 0; 5202 5203 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5204 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5205 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 5206 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5207 bmsr |= BMSR_LSTATUS; 5208 else 5209 bmsr &= ~BMSR_LSTATUS; 5210 } 5211 5212 err |= tg3_readphy(tp, MII_BMCR, &bmcr); 5213 5214 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset && 5215 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5216 /* do nothing, just check for link up at the end */ 5217 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5218 u32 adv, newadv; 5219 5220 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5221 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF | 5222 ADVERTISE_1000XPAUSE | 5223 ADVERTISE_1000XPSE_ASYM | 5224 ADVERTISE_SLCT); 5225 5226 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5227 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising); 5228 5229 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) { 5230 tg3_writephy(tp, MII_ADVERTISE, newadv); 5231 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; 5232 tg3_writephy(tp, MII_BMCR, bmcr); 5233 5234 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5235 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S; 5236 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5237 5238 return err; 5239 } 5240 } else { 5241 u32 new_bmcr; 5242 5243 bmcr &= ~BMCR_SPEED1000; 5244 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX); 5245 5246 if (tp->link_config.duplex == DUPLEX_FULL) 5247 new_bmcr |= BMCR_FULLDPLX; 5248 5249 if (new_bmcr != bmcr) { 5250 /* BMCR_SPEED1000 is a reserved bit that needs 5251 * to be set on write. 5252 */ 5253 new_bmcr |= BMCR_SPEED1000; 5254 5255 /* Force a linkdown */ 5256 if (netif_carrier_ok(tp->dev)) { 5257 u32 adv; 5258 5259 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5260 adv &= ~(ADVERTISE_1000XFULL | 5261 ADVERTISE_1000XHALF | 5262 ADVERTISE_SLCT); 5263 tg3_writephy(tp, MII_ADVERTISE, adv); 5264 tg3_writephy(tp, MII_BMCR, bmcr | 5265 BMCR_ANRESTART | 5266 BMCR_ANENABLE); 5267 udelay(10); 5268 netif_carrier_off(tp->dev); 5269 } 5270 tg3_writephy(tp, MII_BMCR, new_bmcr); 5271 bmcr = new_bmcr; 5272 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5273 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5274 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 5275 ASIC_REV_5714) { 5276 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5277 bmsr |= BMSR_LSTATUS; 5278 else 5279 bmsr &= ~BMSR_LSTATUS; 5280 } 5281 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5282 } 5283 } 5284 5285 if (bmsr & BMSR_LSTATUS) { 5286 current_speed = SPEED_1000; 5287 current_link_up = 1; 5288 if (bmcr & BMCR_FULLDPLX) 5289 current_duplex = DUPLEX_FULL; 5290 else 5291 current_duplex = DUPLEX_HALF; 5292 5293 local_adv = 0; 5294 remote_adv = 0; 5295 5296 if (bmcr & BMCR_ANENABLE) { 5297 u32 common; 5298 5299 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv); 5300 err |= tg3_readphy(tp, MII_LPA, &remote_adv); 5301 common = local_adv & remote_adv; 5302 if (common & (ADVERTISE_1000XHALF | 5303 ADVERTISE_1000XFULL)) { 5304 if (common & ADVERTISE_1000XFULL) 5305 current_duplex = DUPLEX_FULL; 5306 else 5307 current_duplex = DUPLEX_HALF; 5308 5309 tp->link_config.rmt_adv = 5310 mii_adv_to_ethtool_adv_x(remote_adv); 5311 } else if (!tg3_flag(tp, 5780_CLASS)) { 5312 /* Link is up via parallel detect */ 5313 } else { 5314 current_link_up = 0; 5315 } 5316 } 5317 } 5318 5319 if (current_link_up == 1 && current_duplex == DUPLEX_FULL) 5320 tg3_setup_flow_control(tp, local_adv, remote_adv); 5321 5322 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5323 if (tp->link_config.active_duplex == DUPLEX_HALF) 5324 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5325 5326 tw32_f(MAC_MODE, tp->mac_mode); 5327 udelay(40); 5328 5329 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5330 5331 tp->link_config.active_speed = current_speed; 5332 tp->link_config.active_duplex = current_duplex; 5333 5334 if (current_link_up != netif_carrier_ok(tp->dev)) { 5335 if (current_link_up) 5336 netif_carrier_on(tp->dev); 5337 else { 5338 netif_carrier_off(tp->dev); 5339 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5340 } 5341 tg3_link_report(tp); 5342 } 5343 return err; 5344 } 5345 5346 static void tg3_serdes_parallel_detect(struct tg3 *tp) 5347 { 5348 if (tp->serdes_counter) { 5349 /* Give autoneg time to complete. */ 5350 tp->serdes_counter--; 5351 return; 5352 } 5353 5354 if (!netif_carrier_ok(tp->dev) && 5355 (tp->link_config.autoneg == AUTONEG_ENABLE)) { 5356 u32 bmcr; 5357 5358 tg3_readphy(tp, MII_BMCR, &bmcr); 5359 if (bmcr & BMCR_ANENABLE) { 5360 u32 phy1, phy2; 5361 5362 /* Select shadow register 0x1f */ 5363 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00); 5364 tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1); 5365 5366 /* Select expansion interrupt status register */ 5367 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 5368 MII_TG3_DSP_EXP1_INT_STAT); 5369 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 5370 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 5371 5372 if ((phy1 & 0x10) && !(phy2 & 0x20)) { 5373 /* We have signal detect and not receiving 5374 * config code words, link is up by parallel 5375 * detection. 5376 */ 5377 5378 bmcr &= ~BMCR_ANENABLE; 5379 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX; 5380 tg3_writephy(tp, MII_BMCR, bmcr); 5381 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT; 5382 } 5383 } 5384 } else if (netif_carrier_ok(tp->dev) && 5385 (tp->link_config.autoneg == AUTONEG_ENABLE) && 5386 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5387 u32 phy2; 5388 5389 /* Select expansion interrupt status register */ 5390 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 5391 MII_TG3_DSP_EXP1_INT_STAT); 5392 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 5393 if (phy2 & 0x20) { 5394 u32 bmcr; 5395 5396 /* Config code words received, turn on autoneg. */ 5397 tg3_readphy(tp, MII_BMCR, &bmcr); 5398 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE); 5399 5400 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5401 5402 } 5403 } 5404 } 5405 5406 static int tg3_setup_phy(struct tg3 *tp, int force_reset) 5407 { 5408 u32 val; 5409 int err; 5410 5411 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 5412 err = tg3_setup_fiber_phy(tp, force_reset); 5413 else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 5414 err = tg3_setup_fiber_mii_phy(tp, force_reset); 5415 else 5416 err = tg3_setup_copper_phy(tp, force_reset); 5417 5418 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) { 5419 u32 scale; 5420 5421 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK; 5422 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5) 5423 scale = 65; 5424 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25) 5425 scale = 6; 5426 else 5427 scale = 12; 5428 5429 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK; 5430 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT); 5431 tw32(GRC_MISC_CFG, val); 5432 } 5433 5434 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 5435 (6 << TX_LENGTHS_IPG_SHIFT); 5436 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 5437 val |= tr32(MAC_TX_LENGTHS) & 5438 (TX_LENGTHS_JMB_FRM_LEN_MSK | 5439 TX_LENGTHS_CNT_DWN_VAL_MSK); 5440 5441 if (tp->link_config.active_speed == SPEED_1000 && 5442 tp->link_config.active_duplex == DUPLEX_HALF) 5443 tw32(MAC_TX_LENGTHS, val | 5444 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)); 5445 else 5446 tw32(MAC_TX_LENGTHS, val | 5447 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)); 5448 5449 if (!tg3_flag(tp, 5705_PLUS)) { 5450 if (netif_carrier_ok(tp->dev)) { 5451 tw32(HOSTCC_STAT_COAL_TICKS, 5452 tp->coal.stats_block_coalesce_usecs); 5453 } else { 5454 tw32(HOSTCC_STAT_COAL_TICKS, 0); 5455 } 5456 } 5457 5458 if (tg3_flag(tp, ASPM_WORKAROUND)) { 5459 val = tr32(PCIE_PWR_MGMT_THRESH); 5460 if (!netif_carrier_ok(tp->dev)) 5461 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) | 5462 tp->pwrmgmt_thresh; 5463 else 5464 val |= PCIE_PWR_MGMT_L1_THRESH_MSK; 5465 tw32(PCIE_PWR_MGMT_THRESH, val); 5466 } 5467 5468 return err; 5469 } 5470 5471 static inline int tg3_irq_sync(struct tg3 *tp) 5472 { 5473 return tp->irq_sync; 5474 } 5475 5476 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len) 5477 { 5478 int i; 5479 5480 dst = (u32 *)((u8 *)dst + off); 5481 for (i = 0; i < len; i += sizeof(u32)) 5482 *dst++ = tr32(off + i); 5483 } 5484 5485 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs) 5486 { 5487 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0); 5488 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200); 5489 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0); 5490 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0); 5491 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04); 5492 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80); 5493 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48); 5494 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04); 5495 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20); 5496 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c); 5497 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c); 5498 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c); 5499 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44); 5500 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04); 5501 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20); 5502 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14); 5503 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08); 5504 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08); 5505 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100); 5506 5507 if (tg3_flag(tp, SUPPORT_MSIX)) 5508 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180); 5509 5510 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10); 5511 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58); 5512 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08); 5513 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08); 5514 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04); 5515 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04); 5516 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04); 5517 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04); 5518 5519 if (!tg3_flag(tp, 5705_PLUS)) { 5520 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04); 5521 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04); 5522 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04); 5523 } 5524 5525 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110); 5526 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120); 5527 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c); 5528 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04); 5529 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c); 5530 5531 if (tg3_flag(tp, NVRAM)) 5532 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24); 5533 } 5534 5535 static void tg3_dump_state(struct tg3 *tp) 5536 { 5537 int i; 5538 u32 *regs; 5539 5540 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC); 5541 if (!regs) { 5542 netdev_err(tp->dev, "Failed allocating register dump buffer\n"); 5543 return; 5544 } 5545 5546 if (tg3_flag(tp, PCI_EXPRESS)) { 5547 /* Read up to but not including private PCI registers */ 5548 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32)) 5549 regs[i / sizeof(u32)] = tr32(i); 5550 } else 5551 tg3_dump_legacy_regs(tp, regs); 5552 5553 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) { 5554 if (!regs[i + 0] && !regs[i + 1] && 5555 !regs[i + 2] && !regs[i + 3]) 5556 continue; 5557 5558 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", 5559 i * 4, 5560 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]); 5561 } 5562 5563 kfree(regs); 5564 5565 for (i = 0; i < tp->irq_cnt; i++) { 5566 struct tg3_napi *tnapi = &tp->napi[i]; 5567 5568 /* SW status block */ 5569 netdev_err(tp->dev, 5570 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n", 5571 i, 5572 tnapi->hw_status->status, 5573 tnapi->hw_status->status_tag, 5574 tnapi->hw_status->rx_jumbo_consumer, 5575 tnapi->hw_status->rx_consumer, 5576 tnapi->hw_status->rx_mini_consumer, 5577 tnapi->hw_status->idx[0].rx_producer, 5578 tnapi->hw_status->idx[0].tx_consumer); 5579 5580 netdev_err(tp->dev, 5581 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n", 5582 i, 5583 tnapi->last_tag, tnapi->last_irq_tag, 5584 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending, 5585 tnapi->rx_rcb_ptr, 5586 tnapi->prodring.rx_std_prod_idx, 5587 tnapi->prodring.rx_std_cons_idx, 5588 tnapi->prodring.rx_jmb_prod_idx, 5589 tnapi->prodring.rx_jmb_cons_idx); 5590 } 5591 } 5592 5593 /* This is called whenever we suspect that the system chipset is re- 5594 * ordering the sequence of MMIO to the tx send mailbox. The symptom 5595 * is bogus tx completions. We try to recover by setting the 5596 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later 5597 * in the workqueue. 5598 */ 5599 static void tg3_tx_recover(struct tg3 *tp) 5600 { 5601 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) || 5602 tp->write32_tx_mbox == tg3_write_indirect_mbox); 5603 5604 netdev_warn(tp->dev, 5605 "The system may be re-ordering memory-mapped I/O " 5606 "cycles to the network device, attempting to recover. " 5607 "Please report the problem to the driver maintainer " 5608 "and include system chipset information.\n"); 5609 5610 spin_lock(&tp->lock); 5611 tg3_flag_set(tp, TX_RECOVERY_PENDING); 5612 spin_unlock(&tp->lock); 5613 } 5614 5615 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi) 5616 { 5617 /* Tell compiler to fetch tx indices from memory. */ 5618 barrier(); 5619 return tnapi->tx_pending - 5620 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1)); 5621 } 5622 5623 /* Tigon3 never reports partial packet sends. So we do not 5624 * need special logic to handle SKBs that have not had all 5625 * of their frags sent yet, like SunGEM does. 5626 */ 5627 static void tg3_tx(struct tg3_napi *tnapi) 5628 { 5629 struct tg3 *tp = tnapi->tp; 5630 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer; 5631 u32 sw_idx = tnapi->tx_cons; 5632 struct netdev_queue *txq; 5633 int index = tnapi - tp->napi; 5634 unsigned int pkts_compl = 0, bytes_compl = 0; 5635 5636 if (tg3_flag(tp, ENABLE_TSS)) 5637 index--; 5638 5639 txq = netdev_get_tx_queue(tp->dev, index); 5640 5641 while (sw_idx != hw_idx) { 5642 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx]; 5643 struct sk_buff *skb = ri->skb; 5644 int i, tx_bug = 0; 5645 5646 if (unlikely(skb == NULL)) { 5647 tg3_tx_recover(tp); 5648 return; 5649 } 5650 5651 pci_unmap_single(tp->pdev, 5652 dma_unmap_addr(ri, mapping), 5653 skb_headlen(skb), 5654 PCI_DMA_TODEVICE); 5655 5656 ri->skb = NULL; 5657 5658 while (ri->fragmented) { 5659 ri->fragmented = false; 5660 sw_idx = NEXT_TX(sw_idx); 5661 ri = &tnapi->tx_buffers[sw_idx]; 5662 } 5663 5664 sw_idx = NEXT_TX(sw_idx); 5665 5666 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 5667 ri = &tnapi->tx_buffers[sw_idx]; 5668 if (unlikely(ri->skb != NULL || sw_idx == hw_idx)) 5669 tx_bug = 1; 5670 5671 pci_unmap_page(tp->pdev, 5672 dma_unmap_addr(ri, mapping), 5673 skb_frag_size(&skb_shinfo(skb)->frags[i]), 5674 PCI_DMA_TODEVICE); 5675 5676 while (ri->fragmented) { 5677 ri->fragmented = false; 5678 sw_idx = NEXT_TX(sw_idx); 5679 ri = &tnapi->tx_buffers[sw_idx]; 5680 } 5681 5682 sw_idx = NEXT_TX(sw_idx); 5683 } 5684 5685 pkts_compl++; 5686 bytes_compl += skb->len; 5687 5688 dev_kfree_skb(skb); 5689 5690 if (unlikely(tx_bug)) { 5691 tg3_tx_recover(tp); 5692 return; 5693 } 5694 } 5695 5696 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl); 5697 5698 tnapi->tx_cons = sw_idx; 5699 5700 /* Need to make the tx_cons update visible to tg3_start_xmit() 5701 * before checking for netif_queue_stopped(). Without the 5702 * memory barrier, there is a small possibility that tg3_start_xmit() 5703 * will miss it and cause the queue to be stopped forever. 5704 */ 5705 smp_mb(); 5706 5707 if (unlikely(netif_tx_queue_stopped(txq) && 5708 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) { 5709 __netif_tx_lock(txq, smp_processor_id()); 5710 if (netif_tx_queue_stopped(txq) && 5711 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))) 5712 netif_tx_wake_queue(txq); 5713 __netif_tx_unlock(txq); 5714 } 5715 } 5716 5717 static void tg3_frag_free(bool is_frag, void *data) 5718 { 5719 if (is_frag) 5720 put_page(virt_to_head_page(data)); 5721 else 5722 kfree(data); 5723 } 5724 5725 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz) 5726 { 5727 unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) + 5728 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 5729 5730 if (!ri->data) 5731 return; 5732 5733 pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping), 5734 map_sz, PCI_DMA_FROMDEVICE); 5735 tg3_frag_free(skb_size <= PAGE_SIZE, ri->data); 5736 ri->data = NULL; 5737 } 5738 5739 5740 /* Returns size of skb allocated or < 0 on error. 5741 * 5742 * We only need to fill in the address because the other members 5743 * of the RX descriptor are invariant, see tg3_init_rings. 5744 * 5745 * Note the purposeful assymetry of cpu vs. chip accesses. For 5746 * posting buffers we only dirty the first cache line of the RX 5747 * descriptor (containing the address). Whereas for the RX status 5748 * buffers the cpu only reads the last cacheline of the RX descriptor 5749 * (to fetch the error flags, vlan tag, checksum, and opaque cookie). 5750 */ 5751 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr, 5752 u32 opaque_key, u32 dest_idx_unmasked, 5753 unsigned int *frag_size) 5754 { 5755 struct tg3_rx_buffer_desc *desc; 5756 struct ring_info *map; 5757 u8 *data; 5758 dma_addr_t mapping; 5759 int skb_size, data_size, dest_idx; 5760 5761 switch (opaque_key) { 5762 case RXD_OPAQUE_RING_STD: 5763 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 5764 desc = &tpr->rx_std[dest_idx]; 5765 map = &tpr->rx_std_buffers[dest_idx]; 5766 data_size = tp->rx_pkt_map_sz; 5767 break; 5768 5769 case RXD_OPAQUE_RING_JUMBO: 5770 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 5771 desc = &tpr->rx_jmb[dest_idx].std; 5772 map = &tpr->rx_jmb_buffers[dest_idx]; 5773 data_size = TG3_RX_JMB_MAP_SZ; 5774 break; 5775 5776 default: 5777 return -EINVAL; 5778 } 5779 5780 /* Do not overwrite any of the map or rp information 5781 * until we are sure we can commit to a new buffer. 5782 * 5783 * Callers depend upon this behavior and assume that 5784 * we leave everything unchanged if we fail. 5785 */ 5786 skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) + 5787 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 5788 if (skb_size <= PAGE_SIZE) { 5789 data = netdev_alloc_frag(skb_size); 5790 *frag_size = skb_size; 5791 } else { 5792 data = kmalloc(skb_size, GFP_ATOMIC); 5793 *frag_size = 0; 5794 } 5795 if (!data) 5796 return -ENOMEM; 5797 5798 mapping = pci_map_single(tp->pdev, 5799 data + TG3_RX_OFFSET(tp), 5800 data_size, 5801 PCI_DMA_FROMDEVICE); 5802 if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) { 5803 tg3_frag_free(skb_size <= PAGE_SIZE, data); 5804 return -EIO; 5805 } 5806 5807 map->data = data; 5808 dma_unmap_addr_set(map, mapping, mapping); 5809 5810 desc->addr_hi = ((u64)mapping >> 32); 5811 desc->addr_lo = ((u64)mapping & 0xffffffff); 5812 5813 return data_size; 5814 } 5815 5816 /* We only need to move over in the address because the other 5817 * members of the RX descriptor are invariant. See notes above 5818 * tg3_alloc_rx_data for full details. 5819 */ 5820 static void tg3_recycle_rx(struct tg3_napi *tnapi, 5821 struct tg3_rx_prodring_set *dpr, 5822 u32 opaque_key, int src_idx, 5823 u32 dest_idx_unmasked) 5824 { 5825 struct tg3 *tp = tnapi->tp; 5826 struct tg3_rx_buffer_desc *src_desc, *dest_desc; 5827 struct ring_info *src_map, *dest_map; 5828 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring; 5829 int dest_idx; 5830 5831 switch (opaque_key) { 5832 case RXD_OPAQUE_RING_STD: 5833 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 5834 dest_desc = &dpr->rx_std[dest_idx]; 5835 dest_map = &dpr->rx_std_buffers[dest_idx]; 5836 src_desc = &spr->rx_std[src_idx]; 5837 src_map = &spr->rx_std_buffers[src_idx]; 5838 break; 5839 5840 case RXD_OPAQUE_RING_JUMBO: 5841 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 5842 dest_desc = &dpr->rx_jmb[dest_idx].std; 5843 dest_map = &dpr->rx_jmb_buffers[dest_idx]; 5844 src_desc = &spr->rx_jmb[src_idx].std; 5845 src_map = &spr->rx_jmb_buffers[src_idx]; 5846 break; 5847 5848 default: 5849 return; 5850 } 5851 5852 dest_map->data = src_map->data; 5853 dma_unmap_addr_set(dest_map, mapping, 5854 dma_unmap_addr(src_map, mapping)); 5855 dest_desc->addr_hi = src_desc->addr_hi; 5856 dest_desc->addr_lo = src_desc->addr_lo; 5857 5858 /* Ensure that the update to the skb happens after the physical 5859 * addresses have been transferred to the new BD location. 5860 */ 5861 smp_wmb(); 5862 5863 src_map->data = NULL; 5864 } 5865 5866 /* The RX ring scheme is composed of multiple rings which post fresh 5867 * buffers to the chip, and one special ring the chip uses to report 5868 * status back to the host. 5869 * 5870 * The special ring reports the status of received packets to the 5871 * host. The chip does not write into the original descriptor the 5872 * RX buffer was obtained from. The chip simply takes the original 5873 * descriptor as provided by the host, updates the status and length 5874 * field, then writes this into the next status ring entry. 5875 * 5876 * Each ring the host uses to post buffers to the chip is described 5877 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives, 5878 * it is first placed into the on-chip ram. When the packet's length 5879 * is known, it walks down the TG3_BDINFO entries to select the ring. 5880 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO 5881 * which is within the range of the new packet's length is chosen. 5882 * 5883 * The "separate ring for rx status" scheme may sound queer, but it makes 5884 * sense from a cache coherency perspective. If only the host writes 5885 * to the buffer post rings, and only the chip writes to the rx status 5886 * rings, then cache lines never move beyond shared-modified state. 5887 * If both the host and chip were to write into the same ring, cache line 5888 * eviction could occur since both entities want it in an exclusive state. 5889 */ 5890 static int tg3_rx(struct tg3_napi *tnapi, int budget) 5891 { 5892 struct tg3 *tp = tnapi->tp; 5893 u32 work_mask, rx_std_posted = 0; 5894 u32 std_prod_idx, jmb_prod_idx; 5895 u32 sw_idx = tnapi->rx_rcb_ptr; 5896 u16 hw_idx; 5897 int received; 5898 struct tg3_rx_prodring_set *tpr = &tnapi->prodring; 5899 5900 hw_idx = *(tnapi->rx_rcb_prod_idx); 5901 /* 5902 * We need to order the read of hw_idx and the read of 5903 * the opaque cookie. 5904 */ 5905 rmb(); 5906 work_mask = 0; 5907 received = 0; 5908 std_prod_idx = tpr->rx_std_prod_idx; 5909 jmb_prod_idx = tpr->rx_jmb_prod_idx; 5910 while (sw_idx != hw_idx && budget > 0) { 5911 struct ring_info *ri; 5912 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx]; 5913 unsigned int len; 5914 struct sk_buff *skb; 5915 dma_addr_t dma_addr; 5916 u32 opaque_key, desc_idx, *post_ptr; 5917 u8 *data; 5918 5919 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 5920 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 5921 if (opaque_key == RXD_OPAQUE_RING_STD) { 5922 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx]; 5923 dma_addr = dma_unmap_addr(ri, mapping); 5924 data = ri->data; 5925 post_ptr = &std_prod_idx; 5926 rx_std_posted++; 5927 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 5928 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx]; 5929 dma_addr = dma_unmap_addr(ri, mapping); 5930 data = ri->data; 5931 post_ptr = &jmb_prod_idx; 5932 } else 5933 goto next_pkt_nopost; 5934 5935 work_mask |= opaque_key; 5936 5937 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 5938 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) { 5939 drop_it: 5940 tg3_recycle_rx(tnapi, tpr, opaque_key, 5941 desc_idx, *post_ptr); 5942 drop_it_no_recycle: 5943 /* Other statistics kept track of by card. */ 5944 tp->rx_dropped++; 5945 goto next_pkt; 5946 } 5947 5948 prefetch(data + TG3_RX_OFFSET(tp)); 5949 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 5950 ETH_FCS_LEN; 5951 5952 if (len > TG3_RX_COPY_THRESH(tp)) { 5953 int skb_size; 5954 unsigned int frag_size; 5955 5956 skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key, 5957 *post_ptr, &frag_size); 5958 if (skb_size < 0) 5959 goto drop_it; 5960 5961 pci_unmap_single(tp->pdev, dma_addr, skb_size, 5962 PCI_DMA_FROMDEVICE); 5963 5964 skb = build_skb(data, frag_size); 5965 if (!skb) { 5966 tg3_frag_free(frag_size != 0, data); 5967 goto drop_it_no_recycle; 5968 } 5969 skb_reserve(skb, TG3_RX_OFFSET(tp)); 5970 /* Ensure that the update to the data happens 5971 * after the usage of the old DMA mapping. 5972 */ 5973 smp_wmb(); 5974 5975 ri->data = NULL; 5976 5977 } else { 5978 tg3_recycle_rx(tnapi, tpr, opaque_key, 5979 desc_idx, *post_ptr); 5980 5981 skb = netdev_alloc_skb(tp->dev, 5982 len + TG3_RAW_IP_ALIGN); 5983 if (skb == NULL) 5984 goto drop_it_no_recycle; 5985 5986 skb_reserve(skb, TG3_RAW_IP_ALIGN); 5987 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 5988 memcpy(skb->data, 5989 data + TG3_RX_OFFSET(tp), 5990 len); 5991 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 5992 } 5993 5994 skb_put(skb, len); 5995 if ((tp->dev->features & NETIF_F_RXCSUM) && 5996 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 5997 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 5998 >> RXD_TCPCSUM_SHIFT) == 0xffff)) 5999 skb->ip_summed = CHECKSUM_UNNECESSARY; 6000 else 6001 skb_checksum_none_assert(skb); 6002 6003 skb->protocol = eth_type_trans(skb, tp->dev); 6004 6005 if (len > (tp->dev->mtu + ETH_HLEN) && 6006 skb->protocol != htons(ETH_P_8021Q)) { 6007 dev_kfree_skb(skb); 6008 goto drop_it_no_recycle; 6009 } 6010 6011 if (desc->type_flags & RXD_FLAG_VLAN && 6012 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) 6013 __vlan_hwaccel_put_tag(skb, 6014 desc->err_vlan & RXD_VLAN_MASK); 6015 6016 napi_gro_receive(&tnapi->napi, skb); 6017 6018 received++; 6019 budget--; 6020 6021 next_pkt: 6022 (*post_ptr)++; 6023 6024 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 6025 tpr->rx_std_prod_idx = std_prod_idx & 6026 tp->rx_std_ring_mask; 6027 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6028 tpr->rx_std_prod_idx); 6029 work_mask &= ~RXD_OPAQUE_RING_STD; 6030 rx_std_posted = 0; 6031 } 6032 next_pkt_nopost: 6033 sw_idx++; 6034 sw_idx &= tp->rx_ret_ring_mask; 6035 6036 /* Refresh hw_idx to see if there is new work */ 6037 if (sw_idx == hw_idx) { 6038 hw_idx = *(tnapi->rx_rcb_prod_idx); 6039 rmb(); 6040 } 6041 } 6042 6043 /* ACK the status ring. */ 6044 tnapi->rx_rcb_ptr = sw_idx; 6045 tw32_rx_mbox(tnapi->consmbox, sw_idx); 6046 6047 /* Refill RX ring(s). */ 6048 if (!tg3_flag(tp, ENABLE_RSS)) { 6049 /* Sync BD data before updating mailbox */ 6050 wmb(); 6051 6052 if (work_mask & RXD_OPAQUE_RING_STD) { 6053 tpr->rx_std_prod_idx = std_prod_idx & 6054 tp->rx_std_ring_mask; 6055 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6056 tpr->rx_std_prod_idx); 6057 } 6058 if (work_mask & RXD_OPAQUE_RING_JUMBO) { 6059 tpr->rx_jmb_prod_idx = jmb_prod_idx & 6060 tp->rx_jmb_ring_mask; 6061 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 6062 tpr->rx_jmb_prod_idx); 6063 } 6064 mmiowb(); 6065 } else if (work_mask) { 6066 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be 6067 * updated before the producer indices can be updated. 6068 */ 6069 smp_wmb(); 6070 6071 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask; 6072 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask; 6073 6074 if (tnapi != &tp->napi[1]) { 6075 tp->rx_refill = true; 6076 napi_schedule(&tp->napi[1].napi); 6077 } 6078 } 6079 6080 return received; 6081 } 6082 6083 static void tg3_poll_link(struct tg3 *tp) 6084 { 6085 /* handle link change and other phy events */ 6086 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 6087 struct tg3_hw_status *sblk = tp->napi[0].hw_status; 6088 6089 if (sblk->status & SD_STATUS_LINK_CHG) { 6090 sblk->status = SD_STATUS_UPDATED | 6091 (sblk->status & ~SD_STATUS_LINK_CHG); 6092 spin_lock(&tp->lock); 6093 if (tg3_flag(tp, USE_PHYLIB)) { 6094 tw32_f(MAC_STATUS, 6095 (MAC_STATUS_SYNC_CHANGED | 6096 MAC_STATUS_CFG_CHANGED | 6097 MAC_STATUS_MI_COMPLETION | 6098 MAC_STATUS_LNKSTATE_CHANGED)); 6099 udelay(40); 6100 } else 6101 tg3_setup_phy(tp, 0); 6102 spin_unlock(&tp->lock); 6103 } 6104 } 6105 } 6106 6107 static int tg3_rx_prodring_xfer(struct tg3 *tp, 6108 struct tg3_rx_prodring_set *dpr, 6109 struct tg3_rx_prodring_set *spr) 6110 { 6111 u32 si, di, cpycnt, src_prod_idx; 6112 int i, err = 0; 6113 6114 while (1) { 6115 src_prod_idx = spr->rx_std_prod_idx; 6116 6117 /* Make sure updates to the rx_std_buffers[] entries and the 6118 * standard producer index are seen in the correct order. 6119 */ 6120 smp_rmb(); 6121 6122 if (spr->rx_std_cons_idx == src_prod_idx) 6123 break; 6124 6125 if (spr->rx_std_cons_idx < src_prod_idx) 6126 cpycnt = src_prod_idx - spr->rx_std_cons_idx; 6127 else 6128 cpycnt = tp->rx_std_ring_mask + 1 - 6129 spr->rx_std_cons_idx; 6130 6131 cpycnt = min(cpycnt, 6132 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx); 6133 6134 si = spr->rx_std_cons_idx; 6135 di = dpr->rx_std_prod_idx; 6136 6137 for (i = di; i < di + cpycnt; i++) { 6138 if (dpr->rx_std_buffers[i].data) { 6139 cpycnt = i - di; 6140 err = -ENOSPC; 6141 break; 6142 } 6143 } 6144 6145 if (!cpycnt) 6146 break; 6147 6148 /* Ensure that updates to the rx_std_buffers ring and the 6149 * shadowed hardware producer ring from tg3_recycle_skb() are 6150 * ordered correctly WRT the skb check above. 6151 */ 6152 smp_rmb(); 6153 6154 memcpy(&dpr->rx_std_buffers[di], 6155 &spr->rx_std_buffers[si], 6156 cpycnt * sizeof(struct ring_info)); 6157 6158 for (i = 0; i < cpycnt; i++, di++, si++) { 6159 struct tg3_rx_buffer_desc *sbd, *dbd; 6160 sbd = &spr->rx_std[si]; 6161 dbd = &dpr->rx_std[di]; 6162 dbd->addr_hi = sbd->addr_hi; 6163 dbd->addr_lo = sbd->addr_lo; 6164 } 6165 6166 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) & 6167 tp->rx_std_ring_mask; 6168 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) & 6169 tp->rx_std_ring_mask; 6170 } 6171 6172 while (1) { 6173 src_prod_idx = spr->rx_jmb_prod_idx; 6174 6175 /* Make sure updates to the rx_jmb_buffers[] entries and 6176 * the jumbo producer index are seen in the correct order. 6177 */ 6178 smp_rmb(); 6179 6180 if (spr->rx_jmb_cons_idx == src_prod_idx) 6181 break; 6182 6183 if (spr->rx_jmb_cons_idx < src_prod_idx) 6184 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx; 6185 else 6186 cpycnt = tp->rx_jmb_ring_mask + 1 - 6187 spr->rx_jmb_cons_idx; 6188 6189 cpycnt = min(cpycnt, 6190 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx); 6191 6192 si = spr->rx_jmb_cons_idx; 6193 di = dpr->rx_jmb_prod_idx; 6194 6195 for (i = di; i < di + cpycnt; i++) { 6196 if (dpr->rx_jmb_buffers[i].data) { 6197 cpycnt = i - di; 6198 err = -ENOSPC; 6199 break; 6200 } 6201 } 6202 6203 if (!cpycnt) 6204 break; 6205 6206 /* Ensure that updates to the rx_jmb_buffers ring and the 6207 * shadowed hardware producer ring from tg3_recycle_skb() are 6208 * ordered correctly WRT the skb check above. 6209 */ 6210 smp_rmb(); 6211 6212 memcpy(&dpr->rx_jmb_buffers[di], 6213 &spr->rx_jmb_buffers[si], 6214 cpycnt * sizeof(struct ring_info)); 6215 6216 for (i = 0; i < cpycnt; i++, di++, si++) { 6217 struct tg3_rx_buffer_desc *sbd, *dbd; 6218 sbd = &spr->rx_jmb[si].std; 6219 dbd = &dpr->rx_jmb[di].std; 6220 dbd->addr_hi = sbd->addr_hi; 6221 dbd->addr_lo = sbd->addr_lo; 6222 } 6223 6224 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) & 6225 tp->rx_jmb_ring_mask; 6226 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) & 6227 tp->rx_jmb_ring_mask; 6228 } 6229 6230 return err; 6231 } 6232 6233 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget) 6234 { 6235 struct tg3 *tp = tnapi->tp; 6236 6237 /* run TX completion thread */ 6238 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) { 6239 tg3_tx(tnapi); 6240 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 6241 return work_done; 6242 } 6243 6244 if (!tnapi->rx_rcb_prod_idx) 6245 return work_done; 6246 6247 /* run RX thread, within the bounds set by NAPI. 6248 * All RX "locking" is done by ensuring outside 6249 * code synchronizes with tg3->napi.poll() 6250 */ 6251 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 6252 work_done += tg3_rx(tnapi, budget - work_done); 6253 6254 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) { 6255 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring; 6256 int i, err = 0; 6257 u32 std_prod_idx = dpr->rx_std_prod_idx; 6258 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx; 6259 6260 tp->rx_refill = false; 6261 for (i = 1; i < tp->irq_cnt; i++) 6262 err |= tg3_rx_prodring_xfer(tp, dpr, 6263 &tp->napi[i].prodring); 6264 6265 wmb(); 6266 6267 if (std_prod_idx != dpr->rx_std_prod_idx) 6268 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6269 dpr->rx_std_prod_idx); 6270 6271 if (jmb_prod_idx != dpr->rx_jmb_prod_idx) 6272 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 6273 dpr->rx_jmb_prod_idx); 6274 6275 mmiowb(); 6276 6277 if (err) 6278 tw32_f(HOSTCC_MODE, tp->coal_now); 6279 } 6280 6281 return work_done; 6282 } 6283 6284 static inline void tg3_reset_task_schedule(struct tg3 *tp) 6285 { 6286 if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 6287 schedule_work(&tp->reset_task); 6288 } 6289 6290 static inline void tg3_reset_task_cancel(struct tg3 *tp) 6291 { 6292 cancel_work_sync(&tp->reset_task); 6293 tg3_flag_clear(tp, RESET_TASK_PENDING); 6294 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 6295 } 6296 6297 static int tg3_poll_msix(struct napi_struct *napi, int budget) 6298 { 6299 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 6300 struct tg3 *tp = tnapi->tp; 6301 int work_done = 0; 6302 struct tg3_hw_status *sblk = tnapi->hw_status; 6303 6304 while (1) { 6305 work_done = tg3_poll_work(tnapi, work_done, budget); 6306 6307 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 6308 goto tx_recovery; 6309 6310 if (unlikely(work_done >= budget)) 6311 break; 6312 6313 /* tp->last_tag is used in tg3_int_reenable() below 6314 * to tell the hw how much work has been processed, 6315 * so we must read it before checking for more work. 6316 */ 6317 tnapi->last_tag = sblk->status_tag; 6318 tnapi->last_irq_tag = tnapi->last_tag; 6319 rmb(); 6320 6321 /* check for RX/TX work to do */ 6322 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons && 6323 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) { 6324 6325 /* This test here is not race free, but will reduce 6326 * the number of interrupts by looping again. 6327 */ 6328 if (tnapi == &tp->napi[1] && tp->rx_refill) 6329 continue; 6330 6331 napi_complete(napi); 6332 /* Reenable interrupts. */ 6333 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 6334 6335 /* This test here is synchronized by napi_schedule() 6336 * and napi_complete() to close the race condition. 6337 */ 6338 if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) { 6339 tw32(HOSTCC_MODE, tp->coalesce_mode | 6340 HOSTCC_MODE_ENABLE | 6341 tnapi->coal_now); 6342 } 6343 mmiowb(); 6344 break; 6345 } 6346 } 6347 6348 return work_done; 6349 6350 tx_recovery: 6351 /* work_done is guaranteed to be less than budget. */ 6352 napi_complete(napi); 6353 tg3_reset_task_schedule(tp); 6354 return work_done; 6355 } 6356 6357 static void tg3_process_error(struct tg3 *tp) 6358 { 6359 u32 val; 6360 bool real_error = false; 6361 6362 if (tg3_flag(tp, ERROR_PROCESSED)) 6363 return; 6364 6365 /* Check Flow Attention register */ 6366 val = tr32(HOSTCC_FLOW_ATTN); 6367 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) { 6368 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n"); 6369 real_error = true; 6370 } 6371 6372 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) { 6373 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n"); 6374 real_error = true; 6375 } 6376 6377 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) { 6378 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n"); 6379 real_error = true; 6380 } 6381 6382 if (!real_error) 6383 return; 6384 6385 tg3_dump_state(tp); 6386 6387 tg3_flag_set(tp, ERROR_PROCESSED); 6388 tg3_reset_task_schedule(tp); 6389 } 6390 6391 static int tg3_poll(struct napi_struct *napi, int budget) 6392 { 6393 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 6394 struct tg3 *tp = tnapi->tp; 6395 int work_done = 0; 6396 struct tg3_hw_status *sblk = tnapi->hw_status; 6397 6398 while (1) { 6399 if (sblk->status & SD_STATUS_ERROR) 6400 tg3_process_error(tp); 6401 6402 tg3_poll_link(tp); 6403 6404 work_done = tg3_poll_work(tnapi, work_done, budget); 6405 6406 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 6407 goto tx_recovery; 6408 6409 if (unlikely(work_done >= budget)) 6410 break; 6411 6412 if (tg3_flag(tp, TAGGED_STATUS)) { 6413 /* tp->last_tag is used in tg3_int_reenable() below 6414 * to tell the hw how much work has been processed, 6415 * so we must read it before checking for more work. 6416 */ 6417 tnapi->last_tag = sblk->status_tag; 6418 tnapi->last_irq_tag = tnapi->last_tag; 6419 rmb(); 6420 } else 6421 sblk->status &= ~SD_STATUS_UPDATED; 6422 6423 if (likely(!tg3_has_work(tnapi))) { 6424 napi_complete(napi); 6425 tg3_int_reenable(tnapi); 6426 break; 6427 } 6428 } 6429 6430 return work_done; 6431 6432 tx_recovery: 6433 /* work_done is guaranteed to be less than budget. */ 6434 napi_complete(napi); 6435 tg3_reset_task_schedule(tp); 6436 return work_done; 6437 } 6438 6439 static void tg3_napi_disable(struct tg3 *tp) 6440 { 6441 int i; 6442 6443 for (i = tp->irq_cnt - 1; i >= 0; i--) 6444 napi_disable(&tp->napi[i].napi); 6445 } 6446 6447 static void tg3_napi_enable(struct tg3 *tp) 6448 { 6449 int i; 6450 6451 for (i = 0; i < tp->irq_cnt; i++) 6452 napi_enable(&tp->napi[i].napi); 6453 } 6454 6455 static void tg3_napi_init(struct tg3 *tp) 6456 { 6457 int i; 6458 6459 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64); 6460 for (i = 1; i < tp->irq_cnt; i++) 6461 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64); 6462 } 6463 6464 static void tg3_napi_fini(struct tg3 *tp) 6465 { 6466 int i; 6467 6468 for (i = 0; i < tp->irq_cnt; i++) 6469 netif_napi_del(&tp->napi[i].napi); 6470 } 6471 6472 static inline void tg3_netif_stop(struct tg3 *tp) 6473 { 6474 tp->dev->trans_start = jiffies; /* prevent tx timeout */ 6475 tg3_napi_disable(tp); 6476 netif_tx_disable(tp->dev); 6477 } 6478 6479 static inline void tg3_netif_start(struct tg3 *tp) 6480 { 6481 /* NOTE: unconditional netif_tx_wake_all_queues is only 6482 * appropriate so long as all callers are assured to 6483 * have free tx slots (such as after tg3_init_hw) 6484 */ 6485 netif_tx_wake_all_queues(tp->dev); 6486 6487 tg3_napi_enable(tp); 6488 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED; 6489 tg3_enable_ints(tp); 6490 } 6491 6492 static void tg3_irq_quiesce(struct tg3 *tp) 6493 { 6494 int i; 6495 6496 BUG_ON(tp->irq_sync); 6497 6498 tp->irq_sync = 1; 6499 smp_mb(); 6500 6501 for (i = 0; i < tp->irq_cnt; i++) 6502 synchronize_irq(tp->napi[i].irq_vec); 6503 } 6504 6505 /* Fully shutdown all tg3 driver activity elsewhere in the system. 6506 * If irq_sync is non-zero, then the IRQ handler must be synchronized 6507 * with as well. Most of the time, this is not necessary except when 6508 * shutting down the device. 6509 */ 6510 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync) 6511 { 6512 spin_lock_bh(&tp->lock); 6513 if (irq_sync) 6514 tg3_irq_quiesce(tp); 6515 } 6516 6517 static inline void tg3_full_unlock(struct tg3 *tp) 6518 { 6519 spin_unlock_bh(&tp->lock); 6520 } 6521 6522 /* One-shot MSI handler - Chip automatically disables interrupt 6523 * after sending MSI so driver doesn't have to do it. 6524 */ 6525 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id) 6526 { 6527 struct tg3_napi *tnapi = dev_id; 6528 struct tg3 *tp = tnapi->tp; 6529 6530 prefetch(tnapi->hw_status); 6531 if (tnapi->rx_rcb) 6532 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6533 6534 if (likely(!tg3_irq_sync(tp))) 6535 napi_schedule(&tnapi->napi); 6536 6537 return IRQ_HANDLED; 6538 } 6539 6540 /* MSI ISR - No need to check for interrupt sharing and no need to 6541 * flush status block and interrupt mailbox. PCI ordering rules 6542 * guarantee that MSI will arrive after the status block. 6543 */ 6544 static irqreturn_t tg3_msi(int irq, void *dev_id) 6545 { 6546 struct tg3_napi *tnapi = dev_id; 6547 struct tg3 *tp = tnapi->tp; 6548 6549 prefetch(tnapi->hw_status); 6550 if (tnapi->rx_rcb) 6551 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6552 /* 6553 * Writing any value to intr-mbox-0 clears PCI INTA# and 6554 * chip-internal interrupt pending events. 6555 * Writing non-zero to intr-mbox-0 additional tells the 6556 * NIC to stop sending us irqs, engaging "in-intr-handler" 6557 * event coalescing. 6558 */ 6559 tw32_mailbox(tnapi->int_mbox, 0x00000001); 6560 if (likely(!tg3_irq_sync(tp))) 6561 napi_schedule(&tnapi->napi); 6562 6563 return IRQ_RETVAL(1); 6564 } 6565 6566 static irqreturn_t tg3_interrupt(int irq, void *dev_id) 6567 { 6568 struct tg3_napi *tnapi = dev_id; 6569 struct tg3 *tp = tnapi->tp; 6570 struct tg3_hw_status *sblk = tnapi->hw_status; 6571 unsigned int handled = 1; 6572 6573 /* In INTx mode, it is possible for the interrupt to arrive at 6574 * the CPU before the status block posted prior to the interrupt. 6575 * Reading the PCI State register will confirm whether the 6576 * interrupt is ours and will flush the status block. 6577 */ 6578 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) { 6579 if (tg3_flag(tp, CHIP_RESETTING) || 6580 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 6581 handled = 0; 6582 goto out; 6583 } 6584 } 6585 6586 /* 6587 * Writing any value to intr-mbox-0 clears PCI INTA# and 6588 * chip-internal interrupt pending events. 6589 * Writing non-zero to intr-mbox-0 additional tells the 6590 * NIC to stop sending us irqs, engaging "in-intr-handler" 6591 * event coalescing. 6592 * 6593 * Flush the mailbox to de-assert the IRQ immediately to prevent 6594 * spurious interrupts. The flush impacts performance but 6595 * excessive spurious interrupts can be worse in some cases. 6596 */ 6597 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 6598 if (tg3_irq_sync(tp)) 6599 goto out; 6600 sblk->status &= ~SD_STATUS_UPDATED; 6601 if (likely(tg3_has_work(tnapi))) { 6602 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6603 napi_schedule(&tnapi->napi); 6604 } else { 6605 /* No work, shared interrupt perhaps? re-enable 6606 * interrupts, and flush that PCI write 6607 */ 6608 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 6609 0x00000000); 6610 } 6611 out: 6612 return IRQ_RETVAL(handled); 6613 } 6614 6615 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id) 6616 { 6617 struct tg3_napi *tnapi = dev_id; 6618 struct tg3 *tp = tnapi->tp; 6619 struct tg3_hw_status *sblk = tnapi->hw_status; 6620 unsigned int handled = 1; 6621 6622 /* In INTx mode, it is possible for the interrupt to arrive at 6623 * the CPU before the status block posted prior to the interrupt. 6624 * Reading the PCI State register will confirm whether the 6625 * interrupt is ours and will flush the status block. 6626 */ 6627 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) { 6628 if (tg3_flag(tp, CHIP_RESETTING) || 6629 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 6630 handled = 0; 6631 goto out; 6632 } 6633 } 6634 6635 /* 6636 * writing any value to intr-mbox-0 clears PCI INTA# and 6637 * chip-internal interrupt pending events. 6638 * writing non-zero to intr-mbox-0 additional tells the 6639 * NIC to stop sending us irqs, engaging "in-intr-handler" 6640 * event coalescing. 6641 * 6642 * Flush the mailbox to de-assert the IRQ immediately to prevent 6643 * spurious interrupts. The flush impacts performance but 6644 * excessive spurious interrupts can be worse in some cases. 6645 */ 6646 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 6647 6648 /* 6649 * In a shared interrupt configuration, sometimes other devices' 6650 * interrupts will scream. We record the current status tag here 6651 * so that the above check can report that the screaming interrupts 6652 * are unhandled. Eventually they will be silenced. 6653 */ 6654 tnapi->last_irq_tag = sblk->status_tag; 6655 6656 if (tg3_irq_sync(tp)) 6657 goto out; 6658 6659 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6660 6661 napi_schedule(&tnapi->napi); 6662 6663 out: 6664 return IRQ_RETVAL(handled); 6665 } 6666 6667 /* ISR for interrupt test */ 6668 static irqreturn_t tg3_test_isr(int irq, void *dev_id) 6669 { 6670 struct tg3_napi *tnapi = dev_id; 6671 struct tg3 *tp = tnapi->tp; 6672 struct tg3_hw_status *sblk = tnapi->hw_status; 6673 6674 if ((sblk->status & SD_STATUS_UPDATED) || 6675 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 6676 tg3_disable_ints(tp); 6677 return IRQ_RETVAL(1); 6678 } 6679 return IRQ_RETVAL(0); 6680 } 6681 6682 #ifdef CONFIG_NET_POLL_CONTROLLER 6683 static void tg3_poll_controller(struct net_device *dev) 6684 { 6685 int i; 6686 struct tg3 *tp = netdev_priv(dev); 6687 6688 for (i = 0; i < tp->irq_cnt; i++) 6689 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); 6690 } 6691 #endif 6692 6693 static void tg3_tx_timeout(struct net_device *dev) 6694 { 6695 struct tg3 *tp = netdev_priv(dev); 6696 6697 if (netif_msg_tx_err(tp)) { 6698 netdev_err(dev, "transmit timed out, resetting\n"); 6699 tg3_dump_state(tp); 6700 } 6701 6702 tg3_reset_task_schedule(tp); 6703 } 6704 6705 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */ 6706 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) 6707 { 6708 u32 base = (u32) mapping & 0xffffffff; 6709 6710 return (base > 0xffffdcc0) && (base + len + 8 < base); 6711 } 6712 6713 /* Test for DMA addresses > 40-bit */ 6714 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, 6715 int len) 6716 { 6717 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 6718 if (tg3_flag(tp, 40BIT_DMA_BUG)) 6719 return ((u64) mapping + len) > DMA_BIT_MASK(40); 6720 return 0; 6721 #else 6722 return 0; 6723 #endif 6724 } 6725 6726 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd, 6727 dma_addr_t mapping, u32 len, u32 flags, 6728 u32 mss, u32 vlan) 6729 { 6730 txbd->addr_hi = ((u64) mapping >> 32); 6731 txbd->addr_lo = ((u64) mapping & 0xffffffff); 6732 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff); 6733 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT); 6734 } 6735 6736 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget, 6737 dma_addr_t map, u32 len, u32 flags, 6738 u32 mss, u32 vlan) 6739 { 6740 struct tg3 *tp = tnapi->tp; 6741 bool hwbug = false; 6742 6743 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8) 6744 hwbug = true; 6745 6746 if (tg3_4g_overflow_test(map, len)) 6747 hwbug = true; 6748 6749 if (tg3_40bit_overflow_test(tp, map, len)) 6750 hwbug = true; 6751 6752 if (tp->dma_limit) { 6753 u32 prvidx = *entry; 6754 u32 tmp_flag = flags & ~TXD_FLAG_END; 6755 while (len > tp->dma_limit && *budget) { 6756 u32 frag_len = tp->dma_limit; 6757 len -= tp->dma_limit; 6758 6759 /* Avoid the 8byte DMA problem */ 6760 if (len <= 8) { 6761 len += tp->dma_limit / 2; 6762 frag_len = tp->dma_limit / 2; 6763 } 6764 6765 tnapi->tx_buffers[*entry].fragmented = true; 6766 6767 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 6768 frag_len, tmp_flag, mss, vlan); 6769 *budget -= 1; 6770 prvidx = *entry; 6771 *entry = NEXT_TX(*entry); 6772 6773 map += frag_len; 6774 } 6775 6776 if (len) { 6777 if (*budget) { 6778 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 6779 len, flags, mss, vlan); 6780 *budget -= 1; 6781 *entry = NEXT_TX(*entry); 6782 } else { 6783 hwbug = true; 6784 tnapi->tx_buffers[prvidx].fragmented = false; 6785 } 6786 } 6787 } else { 6788 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 6789 len, flags, mss, vlan); 6790 *entry = NEXT_TX(*entry); 6791 } 6792 6793 return hwbug; 6794 } 6795 6796 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last) 6797 { 6798 int i; 6799 struct sk_buff *skb; 6800 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry]; 6801 6802 skb = txb->skb; 6803 txb->skb = NULL; 6804 6805 pci_unmap_single(tnapi->tp->pdev, 6806 dma_unmap_addr(txb, mapping), 6807 skb_headlen(skb), 6808 PCI_DMA_TODEVICE); 6809 6810 while (txb->fragmented) { 6811 txb->fragmented = false; 6812 entry = NEXT_TX(entry); 6813 txb = &tnapi->tx_buffers[entry]; 6814 } 6815 6816 for (i = 0; i <= last; i++) { 6817 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 6818 6819 entry = NEXT_TX(entry); 6820 txb = &tnapi->tx_buffers[entry]; 6821 6822 pci_unmap_page(tnapi->tp->pdev, 6823 dma_unmap_addr(txb, mapping), 6824 skb_frag_size(frag), PCI_DMA_TODEVICE); 6825 6826 while (txb->fragmented) { 6827 txb->fragmented = false; 6828 entry = NEXT_TX(entry); 6829 txb = &tnapi->tx_buffers[entry]; 6830 } 6831 } 6832 } 6833 6834 /* Workaround 4GB and 40-bit hardware DMA bugs. */ 6835 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, 6836 struct sk_buff **pskb, 6837 u32 *entry, u32 *budget, 6838 u32 base_flags, u32 mss, u32 vlan) 6839 { 6840 struct tg3 *tp = tnapi->tp; 6841 struct sk_buff *new_skb, *skb = *pskb; 6842 dma_addr_t new_addr = 0; 6843 int ret = 0; 6844 6845 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) 6846 new_skb = skb_copy(skb, GFP_ATOMIC); 6847 else { 6848 int more_headroom = 4 - ((unsigned long)skb->data & 3); 6849 6850 new_skb = skb_copy_expand(skb, 6851 skb_headroom(skb) + more_headroom, 6852 skb_tailroom(skb), GFP_ATOMIC); 6853 } 6854 6855 if (!new_skb) { 6856 ret = -1; 6857 } else { 6858 /* New SKB is guaranteed to be linear. */ 6859 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len, 6860 PCI_DMA_TODEVICE); 6861 /* Make sure the mapping succeeded */ 6862 if (pci_dma_mapping_error(tp->pdev, new_addr)) { 6863 dev_kfree_skb(new_skb); 6864 ret = -1; 6865 } else { 6866 u32 save_entry = *entry; 6867 6868 base_flags |= TXD_FLAG_END; 6869 6870 tnapi->tx_buffers[*entry].skb = new_skb; 6871 dma_unmap_addr_set(&tnapi->tx_buffers[*entry], 6872 mapping, new_addr); 6873 6874 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr, 6875 new_skb->len, base_flags, 6876 mss, vlan)) { 6877 tg3_tx_skb_unmap(tnapi, save_entry, -1); 6878 dev_kfree_skb(new_skb); 6879 ret = -1; 6880 } 6881 } 6882 } 6883 6884 dev_kfree_skb(skb); 6885 *pskb = new_skb; 6886 return ret; 6887 } 6888 6889 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *); 6890 6891 /* Use GSO to workaround a rare TSO bug that may be triggered when the 6892 * TSO header is greater than 80 bytes. 6893 */ 6894 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb) 6895 { 6896 struct sk_buff *segs, *nskb; 6897 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; 6898 6899 /* Estimate the number of fragments in the worst case */ 6900 if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) { 6901 netif_stop_queue(tp->dev); 6902 6903 /* netif_tx_stop_queue() must be done before checking 6904 * checking tx index in tg3_tx_avail() below, because in 6905 * tg3_tx(), we update tx index before checking for 6906 * netif_tx_queue_stopped(). 6907 */ 6908 smp_mb(); 6909 if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est) 6910 return NETDEV_TX_BUSY; 6911 6912 netif_wake_queue(tp->dev); 6913 } 6914 6915 segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO); 6916 if (IS_ERR(segs)) 6917 goto tg3_tso_bug_end; 6918 6919 do { 6920 nskb = segs; 6921 segs = segs->next; 6922 nskb->next = NULL; 6923 tg3_start_xmit(nskb, tp->dev); 6924 } while (segs); 6925 6926 tg3_tso_bug_end: 6927 dev_kfree_skb(skb); 6928 6929 return NETDEV_TX_OK; 6930 } 6931 6932 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and 6933 * support TG3_FLAG_HW_TSO_1 or firmware TSO only. 6934 */ 6935 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) 6936 { 6937 struct tg3 *tp = netdev_priv(dev); 6938 u32 len, entry, base_flags, mss, vlan = 0; 6939 u32 budget; 6940 int i = -1, would_hit_hwbug; 6941 dma_addr_t mapping; 6942 struct tg3_napi *tnapi; 6943 struct netdev_queue *txq; 6944 unsigned int last; 6945 6946 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 6947 tnapi = &tp->napi[skb_get_queue_mapping(skb)]; 6948 if (tg3_flag(tp, ENABLE_TSS)) 6949 tnapi++; 6950 6951 budget = tg3_tx_avail(tnapi); 6952 6953 /* We are running in BH disabled context with netif_tx_lock 6954 * and TX reclaim runs via tp->napi.poll inside of a software 6955 * interrupt. Furthermore, IRQ processing runs lockless so we have 6956 * no IRQ context deadlocks to worry about either. Rejoice! 6957 */ 6958 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) { 6959 if (!netif_tx_queue_stopped(txq)) { 6960 netif_tx_stop_queue(txq); 6961 6962 /* This is a hard error, log it. */ 6963 netdev_err(dev, 6964 "BUG! Tx Ring full when queue awake!\n"); 6965 } 6966 return NETDEV_TX_BUSY; 6967 } 6968 6969 entry = tnapi->tx_prod; 6970 base_flags = 0; 6971 if (skb->ip_summed == CHECKSUM_PARTIAL) 6972 base_flags |= TXD_FLAG_TCPUDP_CSUM; 6973 6974 mss = skb_shinfo(skb)->gso_size; 6975 if (mss) { 6976 struct iphdr *iph; 6977 u32 tcp_opt_len, hdr_len; 6978 6979 if (skb_header_cloned(skb) && 6980 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) 6981 goto drop; 6982 6983 iph = ip_hdr(skb); 6984 tcp_opt_len = tcp_optlen(skb); 6985 6986 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN; 6987 6988 if (!skb_is_gso_v6(skb)) { 6989 iph->check = 0; 6990 iph->tot_len = htons(mss + hdr_len); 6991 } 6992 6993 if (unlikely((ETH_HLEN + hdr_len) > 80) && 6994 tg3_flag(tp, TSO_BUG)) 6995 return tg3_tso_bug(tp, skb); 6996 6997 base_flags |= (TXD_FLAG_CPU_PRE_DMA | 6998 TXD_FLAG_CPU_POST_DMA); 6999 7000 if (tg3_flag(tp, HW_TSO_1) || 7001 tg3_flag(tp, HW_TSO_2) || 7002 tg3_flag(tp, HW_TSO_3)) { 7003 tcp_hdr(skb)->check = 0; 7004 base_flags &= ~TXD_FLAG_TCPUDP_CSUM; 7005 } else 7006 tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr, 7007 iph->daddr, 0, 7008 IPPROTO_TCP, 7009 0); 7010 7011 if (tg3_flag(tp, HW_TSO_3)) { 7012 mss |= (hdr_len & 0xc) << 12; 7013 if (hdr_len & 0x10) 7014 base_flags |= 0x00000010; 7015 base_flags |= (hdr_len & 0x3e0) << 5; 7016 } else if (tg3_flag(tp, HW_TSO_2)) 7017 mss |= hdr_len << 9; 7018 else if (tg3_flag(tp, HW_TSO_1) || 7019 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 7020 if (tcp_opt_len || iph->ihl > 5) { 7021 int tsflags; 7022 7023 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 7024 mss |= (tsflags << 11); 7025 } 7026 } else { 7027 if (tcp_opt_len || iph->ihl > 5) { 7028 int tsflags; 7029 7030 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 7031 base_flags |= tsflags << 12; 7032 } 7033 } 7034 } 7035 7036 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 7037 !mss && skb->len > VLAN_ETH_FRAME_LEN) 7038 base_flags |= TXD_FLAG_JMB_PKT; 7039 7040 if (vlan_tx_tag_present(skb)) { 7041 base_flags |= TXD_FLAG_VLAN; 7042 vlan = vlan_tx_tag_get(skb); 7043 } 7044 7045 len = skb_headlen(skb); 7046 7047 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE); 7048 if (pci_dma_mapping_error(tp->pdev, mapping)) 7049 goto drop; 7050 7051 7052 tnapi->tx_buffers[entry].skb = skb; 7053 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 7054 7055 would_hit_hwbug = 0; 7056 7057 if (tg3_flag(tp, 5701_DMA_BUG)) 7058 would_hit_hwbug = 1; 7059 7060 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags | 7061 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0), 7062 mss, vlan)) { 7063 would_hit_hwbug = 1; 7064 } else if (skb_shinfo(skb)->nr_frags > 0) { 7065 u32 tmp_mss = mss; 7066 7067 if (!tg3_flag(tp, HW_TSO_1) && 7068 !tg3_flag(tp, HW_TSO_2) && 7069 !tg3_flag(tp, HW_TSO_3)) 7070 tmp_mss = 0; 7071 7072 /* Now loop through additional data 7073 * fragments, and queue them. 7074 */ 7075 last = skb_shinfo(skb)->nr_frags - 1; 7076 for (i = 0; i <= last; i++) { 7077 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 7078 7079 len = skb_frag_size(frag); 7080 mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0, 7081 len, DMA_TO_DEVICE); 7082 7083 tnapi->tx_buffers[entry].skb = NULL; 7084 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, 7085 mapping); 7086 if (dma_mapping_error(&tp->pdev->dev, mapping)) 7087 goto dma_error; 7088 7089 if (!budget || 7090 tg3_tx_frag_set(tnapi, &entry, &budget, mapping, 7091 len, base_flags | 7092 ((i == last) ? TXD_FLAG_END : 0), 7093 tmp_mss, vlan)) { 7094 would_hit_hwbug = 1; 7095 break; 7096 } 7097 } 7098 } 7099 7100 if (would_hit_hwbug) { 7101 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 7102 7103 /* If the workaround fails due to memory/mapping 7104 * failure, silently drop this packet. 7105 */ 7106 entry = tnapi->tx_prod; 7107 budget = tg3_tx_avail(tnapi); 7108 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget, 7109 base_flags, mss, vlan)) 7110 goto drop_nofree; 7111 } 7112 7113 skb_tx_timestamp(skb); 7114 netdev_tx_sent_queue(txq, skb->len); 7115 7116 /* Sync BD data before updating mailbox */ 7117 wmb(); 7118 7119 /* Packets are ready, update Tx producer idx local and on card. */ 7120 tw32_tx_mbox(tnapi->prodmbox, entry); 7121 7122 tnapi->tx_prod = entry; 7123 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) { 7124 netif_tx_stop_queue(txq); 7125 7126 /* netif_tx_stop_queue() must be done before checking 7127 * checking tx index in tg3_tx_avail() below, because in 7128 * tg3_tx(), we update tx index before checking for 7129 * netif_tx_queue_stopped(). 7130 */ 7131 smp_mb(); 7132 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)) 7133 netif_tx_wake_queue(txq); 7134 } 7135 7136 mmiowb(); 7137 return NETDEV_TX_OK; 7138 7139 dma_error: 7140 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i); 7141 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 7142 drop: 7143 dev_kfree_skb(skb); 7144 drop_nofree: 7145 tp->tx_dropped++; 7146 return NETDEV_TX_OK; 7147 } 7148 7149 static void tg3_mac_loopback(struct tg3 *tp, bool enable) 7150 { 7151 if (enable) { 7152 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX | 7153 MAC_MODE_PORT_MODE_MASK); 7154 7155 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK; 7156 7157 if (!tg3_flag(tp, 5705_PLUS)) 7158 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 7159 7160 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 7161 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 7162 else 7163 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 7164 } else { 7165 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK; 7166 7167 if (tg3_flag(tp, 5705_PLUS) || 7168 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) || 7169 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 7170 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 7171 } 7172 7173 tw32(MAC_MODE, tp->mac_mode); 7174 udelay(40); 7175 } 7176 7177 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk) 7178 { 7179 u32 val, bmcr, mac_mode, ptest = 0; 7180 7181 tg3_phy_toggle_apd(tp, false); 7182 tg3_phy_toggle_automdix(tp, 0); 7183 7184 if (extlpbk && tg3_phy_set_extloopbk(tp)) 7185 return -EIO; 7186 7187 bmcr = BMCR_FULLDPLX; 7188 switch (speed) { 7189 case SPEED_10: 7190 break; 7191 case SPEED_100: 7192 bmcr |= BMCR_SPEED100; 7193 break; 7194 case SPEED_1000: 7195 default: 7196 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 7197 speed = SPEED_100; 7198 bmcr |= BMCR_SPEED100; 7199 } else { 7200 speed = SPEED_1000; 7201 bmcr |= BMCR_SPEED1000; 7202 } 7203 } 7204 7205 if (extlpbk) { 7206 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 7207 tg3_readphy(tp, MII_CTRL1000, &val); 7208 val |= CTL1000_AS_MASTER | 7209 CTL1000_ENABLE_MASTER; 7210 tg3_writephy(tp, MII_CTRL1000, val); 7211 } else { 7212 ptest = MII_TG3_FET_PTEST_TRIM_SEL | 7213 MII_TG3_FET_PTEST_TRIM_2; 7214 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest); 7215 } 7216 } else 7217 bmcr |= BMCR_LOOPBACK; 7218 7219 tg3_writephy(tp, MII_BMCR, bmcr); 7220 7221 /* The write needs to be flushed for the FETs */ 7222 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 7223 tg3_readphy(tp, MII_BMCR, &bmcr); 7224 7225 udelay(40); 7226 7227 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 7228 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 7229 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest | 7230 MII_TG3_FET_PTEST_FRC_TX_LINK | 7231 MII_TG3_FET_PTEST_FRC_TX_LOCK); 7232 7233 /* The write needs to be flushed for the AC131 */ 7234 tg3_readphy(tp, MII_TG3_FET_PTEST, &val); 7235 } 7236 7237 /* Reset to prevent losing 1st rx packet intermittently */ 7238 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 7239 tg3_flag(tp, 5780_CLASS)) { 7240 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 7241 udelay(10); 7242 tw32_f(MAC_RX_MODE, tp->rx_mode); 7243 } 7244 7245 mac_mode = tp->mac_mode & 7246 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 7247 if (speed == SPEED_1000) 7248 mac_mode |= MAC_MODE_PORT_MODE_GMII; 7249 else 7250 mac_mode |= MAC_MODE_PORT_MODE_MII; 7251 7252 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) { 7253 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK; 7254 7255 if (masked_phy_id == TG3_PHY_ID_BCM5401) 7256 mac_mode &= ~MAC_MODE_LINK_POLARITY; 7257 else if (masked_phy_id == TG3_PHY_ID_BCM5411) 7258 mac_mode |= MAC_MODE_LINK_POLARITY; 7259 7260 tg3_writephy(tp, MII_TG3_EXT_CTRL, 7261 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 7262 } 7263 7264 tw32(MAC_MODE, mac_mode); 7265 udelay(40); 7266 7267 return 0; 7268 } 7269 7270 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features) 7271 { 7272 struct tg3 *tp = netdev_priv(dev); 7273 7274 if (features & NETIF_F_LOOPBACK) { 7275 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK) 7276 return; 7277 7278 spin_lock_bh(&tp->lock); 7279 tg3_mac_loopback(tp, true); 7280 netif_carrier_on(tp->dev); 7281 spin_unlock_bh(&tp->lock); 7282 netdev_info(dev, "Internal MAC loopback mode enabled.\n"); 7283 } else { 7284 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 7285 return; 7286 7287 spin_lock_bh(&tp->lock); 7288 tg3_mac_loopback(tp, false); 7289 /* Force link status check */ 7290 tg3_setup_phy(tp, 1); 7291 spin_unlock_bh(&tp->lock); 7292 netdev_info(dev, "Internal MAC loopback mode disabled.\n"); 7293 } 7294 } 7295 7296 static netdev_features_t tg3_fix_features(struct net_device *dev, 7297 netdev_features_t features) 7298 { 7299 struct tg3 *tp = netdev_priv(dev); 7300 7301 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS)) 7302 features &= ~NETIF_F_ALL_TSO; 7303 7304 return features; 7305 } 7306 7307 static int tg3_set_features(struct net_device *dev, netdev_features_t features) 7308 { 7309 netdev_features_t changed = dev->features ^ features; 7310 7311 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev)) 7312 tg3_set_loopback(dev, features); 7313 7314 return 0; 7315 } 7316 7317 static void tg3_rx_prodring_free(struct tg3 *tp, 7318 struct tg3_rx_prodring_set *tpr) 7319 { 7320 int i; 7321 7322 if (tpr != &tp->napi[0].prodring) { 7323 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx; 7324 i = (i + 1) & tp->rx_std_ring_mask) 7325 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 7326 tp->rx_pkt_map_sz); 7327 7328 if (tg3_flag(tp, JUMBO_CAPABLE)) { 7329 for (i = tpr->rx_jmb_cons_idx; 7330 i != tpr->rx_jmb_prod_idx; 7331 i = (i + 1) & tp->rx_jmb_ring_mask) { 7332 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 7333 TG3_RX_JMB_MAP_SZ); 7334 } 7335 } 7336 7337 return; 7338 } 7339 7340 for (i = 0; i <= tp->rx_std_ring_mask; i++) 7341 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 7342 tp->rx_pkt_map_sz); 7343 7344 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 7345 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) 7346 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 7347 TG3_RX_JMB_MAP_SZ); 7348 } 7349 } 7350 7351 /* Initialize rx rings for packet processing. 7352 * 7353 * The chip has been shut down and the driver detached from 7354 * the networking, so no interrupts or new tx packets will 7355 * end up in the driver. tp->{tx,}lock are held and thus 7356 * we may not sleep. 7357 */ 7358 static int tg3_rx_prodring_alloc(struct tg3 *tp, 7359 struct tg3_rx_prodring_set *tpr) 7360 { 7361 u32 i, rx_pkt_dma_sz; 7362 7363 tpr->rx_std_cons_idx = 0; 7364 tpr->rx_std_prod_idx = 0; 7365 tpr->rx_jmb_cons_idx = 0; 7366 tpr->rx_jmb_prod_idx = 0; 7367 7368 if (tpr != &tp->napi[0].prodring) { 7369 memset(&tpr->rx_std_buffers[0], 0, 7370 TG3_RX_STD_BUFF_RING_SIZE(tp)); 7371 if (tpr->rx_jmb_buffers) 7372 memset(&tpr->rx_jmb_buffers[0], 0, 7373 TG3_RX_JMB_BUFF_RING_SIZE(tp)); 7374 goto done; 7375 } 7376 7377 /* Zero out all descriptors. */ 7378 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp)); 7379 7380 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ; 7381 if (tg3_flag(tp, 5780_CLASS) && 7382 tp->dev->mtu > ETH_DATA_LEN) 7383 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ; 7384 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz); 7385 7386 /* Initialize invariants of the rings, we only set this 7387 * stuff once. This works because the card does not 7388 * write into the rx buffer posting rings. 7389 */ 7390 for (i = 0; i <= tp->rx_std_ring_mask; i++) { 7391 struct tg3_rx_buffer_desc *rxd; 7392 7393 rxd = &tpr->rx_std[i]; 7394 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT; 7395 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); 7396 rxd->opaque = (RXD_OPAQUE_RING_STD | 7397 (i << RXD_OPAQUE_INDEX_SHIFT)); 7398 } 7399 7400 /* Now allocate fresh SKBs for each rx ring. */ 7401 for (i = 0; i < tp->rx_pending; i++) { 7402 unsigned int frag_size; 7403 7404 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i, 7405 &frag_size) < 0) { 7406 netdev_warn(tp->dev, 7407 "Using a smaller RX standard ring. Only " 7408 "%d out of %d buffers were allocated " 7409 "successfully\n", i, tp->rx_pending); 7410 if (i == 0) 7411 goto initfail; 7412 tp->rx_pending = i; 7413 break; 7414 } 7415 } 7416 7417 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 7418 goto done; 7419 7420 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp)); 7421 7422 if (!tg3_flag(tp, JUMBO_RING_ENABLE)) 7423 goto done; 7424 7425 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) { 7426 struct tg3_rx_buffer_desc *rxd; 7427 7428 rxd = &tpr->rx_jmb[i].std; 7429 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT; 7430 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) | 7431 RXD_FLAG_JUMBO; 7432 rxd->opaque = (RXD_OPAQUE_RING_JUMBO | 7433 (i << RXD_OPAQUE_INDEX_SHIFT)); 7434 } 7435 7436 for (i = 0; i < tp->rx_jumbo_pending; i++) { 7437 unsigned int frag_size; 7438 7439 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i, 7440 &frag_size) < 0) { 7441 netdev_warn(tp->dev, 7442 "Using a smaller RX jumbo ring. Only %d " 7443 "out of %d buffers were allocated " 7444 "successfully\n", i, tp->rx_jumbo_pending); 7445 if (i == 0) 7446 goto initfail; 7447 tp->rx_jumbo_pending = i; 7448 break; 7449 } 7450 } 7451 7452 done: 7453 return 0; 7454 7455 initfail: 7456 tg3_rx_prodring_free(tp, tpr); 7457 return -ENOMEM; 7458 } 7459 7460 static void tg3_rx_prodring_fini(struct tg3 *tp, 7461 struct tg3_rx_prodring_set *tpr) 7462 { 7463 kfree(tpr->rx_std_buffers); 7464 tpr->rx_std_buffers = NULL; 7465 kfree(tpr->rx_jmb_buffers); 7466 tpr->rx_jmb_buffers = NULL; 7467 if (tpr->rx_std) { 7468 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp), 7469 tpr->rx_std, tpr->rx_std_mapping); 7470 tpr->rx_std = NULL; 7471 } 7472 if (tpr->rx_jmb) { 7473 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp), 7474 tpr->rx_jmb, tpr->rx_jmb_mapping); 7475 tpr->rx_jmb = NULL; 7476 } 7477 } 7478 7479 static int tg3_rx_prodring_init(struct tg3 *tp, 7480 struct tg3_rx_prodring_set *tpr) 7481 { 7482 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp), 7483 GFP_KERNEL); 7484 if (!tpr->rx_std_buffers) 7485 return -ENOMEM; 7486 7487 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev, 7488 TG3_RX_STD_RING_BYTES(tp), 7489 &tpr->rx_std_mapping, 7490 GFP_KERNEL); 7491 if (!tpr->rx_std) 7492 goto err_out; 7493 7494 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 7495 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp), 7496 GFP_KERNEL); 7497 if (!tpr->rx_jmb_buffers) 7498 goto err_out; 7499 7500 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev, 7501 TG3_RX_JMB_RING_BYTES(tp), 7502 &tpr->rx_jmb_mapping, 7503 GFP_KERNEL); 7504 if (!tpr->rx_jmb) 7505 goto err_out; 7506 } 7507 7508 return 0; 7509 7510 err_out: 7511 tg3_rx_prodring_fini(tp, tpr); 7512 return -ENOMEM; 7513 } 7514 7515 /* Free up pending packets in all rx/tx rings. 7516 * 7517 * The chip has been shut down and the driver detached from 7518 * the networking, so no interrupts or new tx packets will 7519 * end up in the driver. tp->{tx,}lock is not held and we are not 7520 * in an interrupt context and thus may sleep. 7521 */ 7522 static void tg3_free_rings(struct tg3 *tp) 7523 { 7524 int i, j; 7525 7526 for (j = 0; j < tp->irq_cnt; j++) { 7527 struct tg3_napi *tnapi = &tp->napi[j]; 7528 7529 tg3_rx_prodring_free(tp, &tnapi->prodring); 7530 7531 if (!tnapi->tx_buffers) 7532 continue; 7533 7534 for (i = 0; i < TG3_TX_RING_SIZE; i++) { 7535 struct sk_buff *skb = tnapi->tx_buffers[i].skb; 7536 7537 if (!skb) 7538 continue; 7539 7540 tg3_tx_skb_unmap(tnapi, i, 7541 skb_shinfo(skb)->nr_frags - 1); 7542 7543 dev_kfree_skb_any(skb); 7544 } 7545 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j)); 7546 } 7547 } 7548 7549 /* Initialize tx/rx rings for packet processing. 7550 * 7551 * The chip has been shut down and the driver detached from 7552 * the networking, so no interrupts or new tx packets will 7553 * end up in the driver. tp->{tx,}lock are held and thus 7554 * we may not sleep. 7555 */ 7556 static int tg3_init_rings(struct tg3 *tp) 7557 { 7558 int i; 7559 7560 /* Free up all the SKBs. */ 7561 tg3_free_rings(tp); 7562 7563 for (i = 0; i < tp->irq_cnt; i++) { 7564 struct tg3_napi *tnapi = &tp->napi[i]; 7565 7566 tnapi->last_tag = 0; 7567 tnapi->last_irq_tag = 0; 7568 tnapi->hw_status->status = 0; 7569 tnapi->hw_status->status_tag = 0; 7570 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 7571 7572 tnapi->tx_prod = 0; 7573 tnapi->tx_cons = 0; 7574 if (tnapi->tx_ring) 7575 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES); 7576 7577 tnapi->rx_rcb_ptr = 0; 7578 if (tnapi->rx_rcb) 7579 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 7580 7581 if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) { 7582 tg3_free_rings(tp); 7583 return -ENOMEM; 7584 } 7585 } 7586 7587 return 0; 7588 } 7589 7590 /* 7591 * Must not be invoked with interrupt sources disabled and 7592 * the hardware shutdown down. 7593 */ 7594 static void tg3_free_consistent(struct tg3 *tp) 7595 { 7596 int i; 7597 7598 for (i = 0; i < tp->irq_cnt; i++) { 7599 struct tg3_napi *tnapi = &tp->napi[i]; 7600 7601 if (tnapi->tx_ring) { 7602 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES, 7603 tnapi->tx_ring, tnapi->tx_desc_mapping); 7604 tnapi->tx_ring = NULL; 7605 } 7606 7607 kfree(tnapi->tx_buffers); 7608 tnapi->tx_buffers = NULL; 7609 7610 if (tnapi->rx_rcb) { 7611 dma_free_coherent(&tp->pdev->dev, 7612 TG3_RX_RCB_RING_BYTES(tp), 7613 tnapi->rx_rcb, 7614 tnapi->rx_rcb_mapping); 7615 tnapi->rx_rcb = NULL; 7616 } 7617 7618 tg3_rx_prodring_fini(tp, &tnapi->prodring); 7619 7620 if (tnapi->hw_status) { 7621 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE, 7622 tnapi->hw_status, 7623 tnapi->status_mapping); 7624 tnapi->hw_status = NULL; 7625 } 7626 } 7627 7628 if (tp->hw_stats) { 7629 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 7630 tp->hw_stats, tp->stats_mapping); 7631 tp->hw_stats = NULL; 7632 } 7633 } 7634 7635 /* 7636 * Must not be invoked with interrupt sources disabled and 7637 * the hardware shutdown down. Can sleep. 7638 */ 7639 static int tg3_alloc_consistent(struct tg3 *tp) 7640 { 7641 int i; 7642 7643 tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev, 7644 sizeof(struct tg3_hw_stats), 7645 &tp->stats_mapping, 7646 GFP_KERNEL); 7647 if (!tp->hw_stats) 7648 goto err_out; 7649 7650 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 7651 7652 for (i = 0; i < tp->irq_cnt; i++) { 7653 struct tg3_napi *tnapi = &tp->napi[i]; 7654 struct tg3_hw_status *sblk; 7655 7656 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev, 7657 TG3_HW_STATUS_SIZE, 7658 &tnapi->status_mapping, 7659 GFP_KERNEL); 7660 if (!tnapi->hw_status) 7661 goto err_out; 7662 7663 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 7664 sblk = tnapi->hw_status; 7665 7666 if (tg3_rx_prodring_init(tp, &tnapi->prodring)) 7667 goto err_out; 7668 7669 /* If multivector TSS is enabled, vector 0 does not handle 7670 * tx interrupts. Don't allocate any resources for it. 7671 */ 7672 if ((!i && !tg3_flag(tp, ENABLE_TSS)) || 7673 (i && tg3_flag(tp, ENABLE_TSS))) { 7674 tnapi->tx_buffers = kzalloc( 7675 sizeof(struct tg3_tx_ring_info) * 7676 TG3_TX_RING_SIZE, GFP_KERNEL); 7677 if (!tnapi->tx_buffers) 7678 goto err_out; 7679 7680 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev, 7681 TG3_TX_RING_BYTES, 7682 &tnapi->tx_desc_mapping, 7683 GFP_KERNEL); 7684 if (!tnapi->tx_ring) 7685 goto err_out; 7686 } 7687 7688 /* 7689 * When RSS is enabled, the status block format changes 7690 * slightly. The "rx_jumbo_consumer", "reserved", 7691 * and "rx_mini_consumer" members get mapped to the 7692 * other three rx return ring producer indexes. 7693 */ 7694 switch (i) { 7695 default: 7696 if (tg3_flag(tp, ENABLE_RSS)) { 7697 tnapi->rx_rcb_prod_idx = NULL; 7698 break; 7699 } 7700 /* Fall through */ 7701 case 1: 7702 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 7703 break; 7704 case 2: 7705 tnapi->rx_rcb_prod_idx = &sblk->rx_jumbo_consumer; 7706 break; 7707 case 3: 7708 tnapi->rx_rcb_prod_idx = &sblk->reserved; 7709 break; 7710 case 4: 7711 tnapi->rx_rcb_prod_idx = &sblk->rx_mini_consumer; 7712 break; 7713 } 7714 7715 /* 7716 * If multivector RSS is enabled, vector 0 does not handle 7717 * rx or tx interrupts. Don't allocate any resources for it. 7718 */ 7719 if (!i && tg3_flag(tp, ENABLE_RSS)) 7720 continue; 7721 7722 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev, 7723 TG3_RX_RCB_RING_BYTES(tp), 7724 &tnapi->rx_rcb_mapping, 7725 GFP_KERNEL); 7726 if (!tnapi->rx_rcb) 7727 goto err_out; 7728 7729 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 7730 } 7731 7732 return 0; 7733 7734 err_out: 7735 tg3_free_consistent(tp); 7736 return -ENOMEM; 7737 } 7738 7739 #define MAX_WAIT_CNT 1000 7740 7741 /* To stop a block, clear the enable bit and poll till it 7742 * clears. tp->lock is held. 7743 */ 7744 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent) 7745 { 7746 unsigned int i; 7747 u32 val; 7748 7749 if (tg3_flag(tp, 5705_PLUS)) { 7750 switch (ofs) { 7751 case RCVLSC_MODE: 7752 case DMAC_MODE: 7753 case MBFREE_MODE: 7754 case BUFMGR_MODE: 7755 case MEMARB_MODE: 7756 /* We can't enable/disable these bits of the 7757 * 5705/5750, just say success. 7758 */ 7759 return 0; 7760 7761 default: 7762 break; 7763 } 7764 } 7765 7766 val = tr32(ofs); 7767 val &= ~enable_bit; 7768 tw32_f(ofs, val); 7769 7770 for (i = 0; i < MAX_WAIT_CNT; i++) { 7771 udelay(100); 7772 val = tr32(ofs); 7773 if ((val & enable_bit) == 0) 7774 break; 7775 } 7776 7777 if (i == MAX_WAIT_CNT && !silent) { 7778 dev_err(&tp->pdev->dev, 7779 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n", 7780 ofs, enable_bit); 7781 return -ENODEV; 7782 } 7783 7784 return 0; 7785 } 7786 7787 /* tp->lock is held. */ 7788 static int tg3_abort_hw(struct tg3 *tp, int silent) 7789 { 7790 int i, err; 7791 7792 tg3_disable_ints(tp); 7793 7794 tp->rx_mode &= ~RX_MODE_ENABLE; 7795 tw32_f(MAC_RX_MODE, tp->rx_mode); 7796 udelay(10); 7797 7798 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent); 7799 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent); 7800 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent); 7801 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent); 7802 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent); 7803 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent); 7804 7805 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent); 7806 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent); 7807 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent); 7808 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent); 7809 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent); 7810 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent); 7811 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent); 7812 7813 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 7814 tw32_f(MAC_MODE, tp->mac_mode); 7815 udelay(40); 7816 7817 tp->tx_mode &= ~TX_MODE_ENABLE; 7818 tw32_f(MAC_TX_MODE, tp->tx_mode); 7819 7820 for (i = 0; i < MAX_WAIT_CNT; i++) { 7821 udelay(100); 7822 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE)) 7823 break; 7824 } 7825 if (i >= MAX_WAIT_CNT) { 7826 dev_err(&tp->pdev->dev, 7827 "%s timed out, TX_MODE_ENABLE will not clear " 7828 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE)); 7829 err |= -ENODEV; 7830 } 7831 7832 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent); 7833 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent); 7834 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent); 7835 7836 tw32(FTQ_RESET, 0xffffffff); 7837 tw32(FTQ_RESET, 0x00000000); 7838 7839 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent); 7840 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent); 7841 7842 for (i = 0; i < tp->irq_cnt; i++) { 7843 struct tg3_napi *tnapi = &tp->napi[i]; 7844 if (tnapi->hw_status) 7845 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 7846 } 7847 7848 return err; 7849 } 7850 7851 /* Save PCI command register before chip reset */ 7852 static void tg3_save_pci_state(struct tg3 *tp) 7853 { 7854 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd); 7855 } 7856 7857 /* Restore PCI state after chip reset */ 7858 static void tg3_restore_pci_state(struct tg3 *tp) 7859 { 7860 u32 val; 7861 7862 /* Re-enable indirect register accesses. */ 7863 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 7864 tp->misc_host_ctrl); 7865 7866 /* Set MAX PCI retry to zero. */ 7867 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE); 7868 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && 7869 tg3_flag(tp, PCIX_MODE)) 7870 val |= PCISTATE_RETRY_SAME_DMA; 7871 /* Allow reads and writes to the APE register and memory space. */ 7872 if (tg3_flag(tp, ENABLE_APE)) 7873 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 7874 PCISTATE_ALLOW_APE_SHMEM_WR | 7875 PCISTATE_ALLOW_APE_PSPACE_WR; 7876 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val); 7877 7878 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd); 7879 7880 if (!tg3_flag(tp, PCI_EXPRESS)) { 7881 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 7882 tp->pci_cacheline_sz); 7883 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 7884 tp->pci_lat_timer); 7885 } 7886 7887 /* Make sure PCI-X relaxed ordering bit is clear. */ 7888 if (tg3_flag(tp, PCIX_MODE)) { 7889 u16 pcix_cmd; 7890 7891 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 7892 &pcix_cmd); 7893 pcix_cmd &= ~PCI_X_CMD_ERO; 7894 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 7895 pcix_cmd); 7896 } 7897 7898 if (tg3_flag(tp, 5780_CLASS)) { 7899 7900 /* Chip reset on 5780 will reset MSI enable bit, 7901 * so need to restore it. 7902 */ 7903 if (tg3_flag(tp, USING_MSI)) { 7904 u16 ctrl; 7905 7906 pci_read_config_word(tp->pdev, 7907 tp->msi_cap + PCI_MSI_FLAGS, 7908 &ctrl); 7909 pci_write_config_word(tp->pdev, 7910 tp->msi_cap + PCI_MSI_FLAGS, 7911 ctrl | PCI_MSI_FLAGS_ENABLE); 7912 val = tr32(MSGINT_MODE); 7913 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); 7914 } 7915 } 7916 } 7917 7918 /* tp->lock is held. */ 7919 static int tg3_chip_reset(struct tg3 *tp) 7920 { 7921 u32 val; 7922 void (*write_op)(struct tg3 *, u32, u32); 7923 int i, err; 7924 7925 tg3_nvram_lock(tp); 7926 7927 tg3_ape_lock(tp, TG3_APE_LOCK_GRC); 7928 7929 /* No matching tg3_nvram_unlock() after this because 7930 * chip reset below will undo the nvram lock. 7931 */ 7932 tp->nvram_lock_cnt = 0; 7933 7934 /* GRC_MISC_CFG core clock reset will clear the memory 7935 * enable bit in PCI register 4 and the MSI enable bit 7936 * on some chips, so we save relevant registers here. 7937 */ 7938 tg3_save_pci_state(tp); 7939 7940 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 7941 tg3_flag(tp, 5755_PLUS)) 7942 tw32(GRC_FASTBOOT_PC, 0); 7943 7944 /* 7945 * We must avoid the readl() that normally takes place. 7946 * It locks machines, causes machine checks, and other 7947 * fun things. So, temporarily disable the 5701 7948 * hardware workaround, while we do the reset. 7949 */ 7950 write_op = tp->write32; 7951 if (write_op == tg3_write_flush_reg32) 7952 tp->write32 = tg3_write32; 7953 7954 /* Prevent the irq handler from reading or writing PCI registers 7955 * during chip reset when the memory enable bit in the PCI command 7956 * register may be cleared. The chip does not generate interrupt 7957 * at this time, but the irq handler may still be called due to irq 7958 * sharing or irqpoll. 7959 */ 7960 tg3_flag_set(tp, CHIP_RESETTING); 7961 for (i = 0; i < tp->irq_cnt; i++) { 7962 struct tg3_napi *tnapi = &tp->napi[i]; 7963 if (tnapi->hw_status) { 7964 tnapi->hw_status->status = 0; 7965 tnapi->hw_status->status_tag = 0; 7966 } 7967 tnapi->last_tag = 0; 7968 tnapi->last_irq_tag = 0; 7969 } 7970 smp_mb(); 7971 7972 for (i = 0; i < tp->irq_cnt; i++) 7973 synchronize_irq(tp->napi[i].irq_vec); 7974 7975 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 7976 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 7977 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 7978 } 7979 7980 /* do the reset */ 7981 val = GRC_MISC_CFG_CORECLK_RESET; 7982 7983 if (tg3_flag(tp, PCI_EXPRESS)) { 7984 /* Force PCIe 1.0a mode */ 7985 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 7986 !tg3_flag(tp, 57765_PLUS) && 7987 tr32(TG3_PCIE_PHY_TSTCTL) == 7988 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM)) 7989 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM); 7990 7991 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) { 7992 tw32(GRC_MISC_CFG, (1 << 29)); 7993 val |= (1 << 29); 7994 } 7995 } 7996 7997 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 7998 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET); 7999 tw32(GRC_VCPU_EXT_CTRL, 8000 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU); 8001 } 8002 8003 /* Manage gphy power for all CPMU absent PCIe devices. */ 8004 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT)) 8005 val |= GRC_MISC_CFG_KEEP_GPHY_POWER; 8006 8007 tw32(GRC_MISC_CFG, val); 8008 8009 /* restore 5701 hardware bug workaround write method */ 8010 tp->write32 = write_op; 8011 8012 /* Unfortunately, we have to delay before the PCI read back. 8013 * Some 575X chips even will not respond to a PCI cfg access 8014 * when the reset command is given to the chip. 8015 * 8016 * How do these hardware designers expect things to work 8017 * properly if the PCI write is posted for a long period 8018 * of time? It is always necessary to have some method by 8019 * which a register read back can occur to push the write 8020 * out which does the reset. 8021 * 8022 * For most tg3 variants the trick below was working. 8023 * Ho hum... 8024 */ 8025 udelay(120); 8026 8027 /* Flush PCI posted writes. The normal MMIO registers 8028 * are inaccessible at this time so this is the only 8029 * way to make this reliably (actually, this is no longer 8030 * the case, see above). I tried to use indirect 8031 * register read/write but this upset some 5701 variants. 8032 */ 8033 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); 8034 8035 udelay(120); 8036 8037 if (tg3_flag(tp, PCI_EXPRESS) && pci_pcie_cap(tp->pdev)) { 8038 u16 val16; 8039 8040 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) { 8041 int i; 8042 u32 cfg_val; 8043 8044 /* Wait for link training to complete. */ 8045 for (i = 0; i < 5000; i++) 8046 udelay(100); 8047 8048 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); 8049 pci_write_config_dword(tp->pdev, 0xc4, 8050 cfg_val | (1 << 15)); 8051 } 8052 8053 /* Clear the "no snoop" and "relaxed ordering" bits. */ 8054 pci_read_config_word(tp->pdev, 8055 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL, 8056 &val16); 8057 val16 &= ~(PCI_EXP_DEVCTL_RELAX_EN | 8058 PCI_EXP_DEVCTL_NOSNOOP_EN); 8059 /* 8060 * Older PCIe devices only support the 128 byte 8061 * MPS setting. Enforce the restriction. 8062 */ 8063 if (!tg3_flag(tp, CPMU_PRESENT)) 8064 val16 &= ~PCI_EXP_DEVCTL_PAYLOAD; 8065 pci_write_config_word(tp->pdev, 8066 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVCTL, 8067 val16); 8068 8069 /* Clear error status */ 8070 pci_write_config_word(tp->pdev, 8071 pci_pcie_cap(tp->pdev) + PCI_EXP_DEVSTA, 8072 PCI_EXP_DEVSTA_CED | 8073 PCI_EXP_DEVSTA_NFED | 8074 PCI_EXP_DEVSTA_FED | 8075 PCI_EXP_DEVSTA_URD); 8076 } 8077 8078 tg3_restore_pci_state(tp); 8079 8080 tg3_flag_clear(tp, CHIP_RESETTING); 8081 tg3_flag_clear(tp, ERROR_PROCESSED); 8082 8083 val = 0; 8084 if (tg3_flag(tp, 5780_CLASS)) 8085 val = tr32(MEMARB_MODE); 8086 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 8087 8088 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) { 8089 tg3_stop_fw(tp); 8090 tw32(0x5000, 0x400); 8091 } 8092 8093 tw32(GRC_MODE, tp->grc_mode); 8094 8095 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) { 8096 val = tr32(0xc4); 8097 8098 tw32(0xc4, val | (1 << 15)); 8099 } 8100 8101 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && 8102 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 8103 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; 8104 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) 8105 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; 8106 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 8107 } 8108 8109 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 8110 tp->mac_mode = MAC_MODE_PORT_MODE_TBI; 8111 val = tp->mac_mode; 8112 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 8113 tp->mac_mode = MAC_MODE_PORT_MODE_GMII; 8114 val = tp->mac_mode; 8115 } else 8116 val = 0; 8117 8118 tw32_f(MAC_MODE, val); 8119 udelay(40); 8120 8121 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC); 8122 8123 err = tg3_poll_fw(tp); 8124 if (err) 8125 return err; 8126 8127 tg3_mdio_start(tp); 8128 8129 if (tg3_flag(tp, PCI_EXPRESS) && 8130 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && 8131 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 8132 !tg3_flag(tp, 57765_PLUS)) { 8133 val = tr32(0x7c00); 8134 8135 tw32(0x7c00, val | (1 << 25)); 8136 } 8137 8138 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 8139 val = tr32(TG3_CPMU_CLCK_ORIDE); 8140 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 8141 } 8142 8143 /* Reprobe ASF enable state. */ 8144 tg3_flag_clear(tp, ENABLE_ASF); 8145 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE); 8146 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 8147 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 8148 u32 nic_cfg; 8149 8150 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 8151 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 8152 tg3_flag_set(tp, ENABLE_ASF); 8153 tp->last_event_jiffies = jiffies; 8154 if (tg3_flag(tp, 5750_PLUS)) 8155 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 8156 } 8157 } 8158 8159 return 0; 8160 } 8161 8162 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); 8163 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); 8164 8165 /* tp->lock is held. */ 8166 static int tg3_halt(struct tg3 *tp, int kind, int silent) 8167 { 8168 int err; 8169 8170 tg3_stop_fw(tp); 8171 8172 tg3_write_sig_pre_reset(tp, kind); 8173 8174 tg3_abort_hw(tp, silent); 8175 err = tg3_chip_reset(tp); 8176 8177 __tg3_set_mac_addr(tp, 0); 8178 8179 tg3_write_sig_legacy(tp, kind); 8180 tg3_write_sig_post_reset(tp, kind); 8181 8182 if (tp->hw_stats) { 8183 /* Save the stats across chip resets... */ 8184 tg3_get_nstats(tp, &tp->net_stats_prev); 8185 tg3_get_estats(tp, &tp->estats_prev); 8186 8187 /* And make sure the next sample is new data */ 8188 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 8189 } 8190 8191 if (err) 8192 return err; 8193 8194 return 0; 8195 } 8196 8197 static int tg3_set_mac_addr(struct net_device *dev, void *p) 8198 { 8199 struct tg3 *tp = netdev_priv(dev); 8200 struct sockaddr *addr = p; 8201 int err = 0, skip_mac_1 = 0; 8202 8203 if (!is_valid_ether_addr(addr->sa_data)) 8204 return -EADDRNOTAVAIL; 8205 8206 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 8207 8208 if (!netif_running(dev)) 8209 return 0; 8210 8211 if (tg3_flag(tp, ENABLE_ASF)) { 8212 u32 addr0_high, addr0_low, addr1_high, addr1_low; 8213 8214 addr0_high = tr32(MAC_ADDR_0_HIGH); 8215 addr0_low = tr32(MAC_ADDR_0_LOW); 8216 addr1_high = tr32(MAC_ADDR_1_HIGH); 8217 addr1_low = tr32(MAC_ADDR_1_LOW); 8218 8219 /* Skip MAC addr 1 if ASF is using it. */ 8220 if ((addr0_high != addr1_high || addr0_low != addr1_low) && 8221 !(addr1_high == 0 && addr1_low == 0)) 8222 skip_mac_1 = 1; 8223 } 8224 spin_lock_bh(&tp->lock); 8225 __tg3_set_mac_addr(tp, skip_mac_1); 8226 spin_unlock_bh(&tp->lock); 8227 8228 return err; 8229 } 8230 8231 /* tp->lock is held. */ 8232 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr, 8233 dma_addr_t mapping, u32 maxlen_flags, 8234 u32 nic_addr) 8235 { 8236 tg3_write_mem(tp, 8237 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH), 8238 ((u64) mapping >> 32)); 8239 tg3_write_mem(tp, 8240 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW), 8241 ((u64) mapping & 0xffffffff)); 8242 tg3_write_mem(tp, 8243 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS), 8244 maxlen_flags); 8245 8246 if (!tg3_flag(tp, 5705_PLUS)) 8247 tg3_write_mem(tp, 8248 (bdinfo_addr + TG3_BDINFO_NIC_ADDR), 8249 nic_addr); 8250 } 8251 8252 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec) 8253 { 8254 int i; 8255 8256 if (!tg3_flag(tp, ENABLE_TSS)) { 8257 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs); 8258 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames); 8259 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq); 8260 } else { 8261 tw32(HOSTCC_TXCOL_TICKS, 0); 8262 tw32(HOSTCC_TXMAX_FRAMES, 0); 8263 tw32(HOSTCC_TXCOAL_MAXF_INT, 0); 8264 } 8265 8266 if (!tg3_flag(tp, ENABLE_RSS)) { 8267 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs); 8268 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames); 8269 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq); 8270 } else { 8271 tw32(HOSTCC_RXCOL_TICKS, 0); 8272 tw32(HOSTCC_RXMAX_FRAMES, 0); 8273 tw32(HOSTCC_RXCOAL_MAXF_INT, 0); 8274 } 8275 8276 if (!tg3_flag(tp, 5705_PLUS)) { 8277 u32 val = ec->stats_block_coalesce_usecs; 8278 8279 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq); 8280 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq); 8281 8282 if (!netif_carrier_ok(tp->dev)) 8283 val = 0; 8284 8285 tw32(HOSTCC_STAT_COAL_TICKS, val); 8286 } 8287 8288 for (i = 0; i < tp->irq_cnt - 1; i++) { 8289 u32 reg; 8290 8291 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18; 8292 tw32(reg, ec->rx_coalesce_usecs); 8293 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18; 8294 tw32(reg, ec->rx_max_coalesced_frames); 8295 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18; 8296 tw32(reg, ec->rx_max_coalesced_frames_irq); 8297 8298 if (tg3_flag(tp, ENABLE_TSS)) { 8299 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18; 8300 tw32(reg, ec->tx_coalesce_usecs); 8301 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18; 8302 tw32(reg, ec->tx_max_coalesced_frames); 8303 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18; 8304 tw32(reg, ec->tx_max_coalesced_frames_irq); 8305 } 8306 } 8307 8308 for (; i < tp->irq_max - 1; i++) { 8309 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0); 8310 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0); 8311 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 8312 8313 if (tg3_flag(tp, ENABLE_TSS)) { 8314 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0); 8315 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0); 8316 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 8317 } 8318 } 8319 } 8320 8321 /* tp->lock is held. */ 8322 static void tg3_rings_reset(struct tg3 *tp) 8323 { 8324 int i; 8325 u32 stblk, txrcb, rxrcb, limit; 8326 struct tg3_napi *tnapi = &tp->napi[0]; 8327 8328 /* Disable all transmit rings but the first. */ 8329 if (!tg3_flag(tp, 5705_PLUS)) 8330 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; 8331 else if (tg3_flag(tp, 5717_PLUS)) 8332 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; 8333 else if (tg3_flag(tp, 57765_CLASS)) 8334 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; 8335 else 8336 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 8337 8338 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 8339 txrcb < limit; txrcb += TG3_BDINFO_SIZE) 8340 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS, 8341 BDINFO_FLAGS_DISABLED); 8342 8343 8344 /* Disable all receive return rings but the first. */ 8345 if (tg3_flag(tp, 5717_PLUS)) 8346 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; 8347 else if (!tg3_flag(tp, 5705_PLUS)) 8348 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; 8349 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 8350 tg3_flag(tp, 57765_CLASS)) 8351 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; 8352 else 8353 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 8354 8355 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 8356 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE) 8357 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS, 8358 BDINFO_FLAGS_DISABLED); 8359 8360 /* Disable interrupts */ 8361 tw32_mailbox_f(tp->napi[0].int_mbox, 1); 8362 tp->napi[0].chk_msi_cnt = 0; 8363 tp->napi[0].last_rx_cons = 0; 8364 tp->napi[0].last_tx_cons = 0; 8365 8366 /* Zero mailbox registers. */ 8367 if (tg3_flag(tp, SUPPORT_MSIX)) { 8368 for (i = 1; i < tp->irq_max; i++) { 8369 tp->napi[i].tx_prod = 0; 8370 tp->napi[i].tx_cons = 0; 8371 if (tg3_flag(tp, ENABLE_TSS)) 8372 tw32_mailbox(tp->napi[i].prodmbox, 0); 8373 tw32_rx_mbox(tp->napi[i].consmbox, 0); 8374 tw32_mailbox_f(tp->napi[i].int_mbox, 1); 8375 tp->napi[i].chk_msi_cnt = 0; 8376 tp->napi[i].last_rx_cons = 0; 8377 tp->napi[i].last_tx_cons = 0; 8378 } 8379 if (!tg3_flag(tp, ENABLE_TSS)) 8380 tw32_mailbox(tp->napi[0].prodmbox, 0); 8381 } else { 8382 tp->napi[0].tx_prod = 0; 8383 tp->napi[0].tx_cons = 0; 8384 tw32_mailbox(tp->napi[0].prodmbox, 0); 8385 tw32_rx_mbox(tp->napi[0].consmbox, 0); 8386 } 8387 8388 /* Make sure the NIC-based send BD rings are disabled. */ 8389 if (!tg3_flag(tp, 5705_PLUS)) { 8390 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW; 8391 for (i = 0; i < 16; i++) 8392 tw32_tx_mbox(mbox + i * 8, 0); 8393 } 8394 8395 txrcb = NIC_SRAM_SEND_RCB; 8396 rxrcb = NIC_SRAM_RCV_RET_RCB; 8397 8398 /* Clear status block in ram. */ 8399 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8400 8401 /* Set status block DMA address */ 8402 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 8403 ((u64) tnapi->status_mapping >> 32)); 8404 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 8405 ((u64) tnapi->status_mapping & 0xffffffff)); 8406 8407 if (tnapi->tx_ring) { 8408 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 8409 (TG3_TX_RING_SIZE << 8410 BDINFO_FLAGS_MAXLEN_SHIFT), 8411 NIC_SRAM_TX_BUFFER_DESC); 8412 txrcb += TG3_BDINFO_SIZE; 8413 } 8414 8415 if (tnapi->rx_rcb) { 8416 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 8417 (tp->rx_ret_ring_mask + 1) << 8418 BDINFO_FLAGS_MAXLEN_SHIFT, 0); 8419 rxrcb += TG3_BDINFO_SIZE; 8420 } 8421 8422 stblk = HOSTCC_STATBLCK_RING1; 8423 8424 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) { 8425 u64 mapping = (u64)tnapi->status_mapping; 8426 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32); 8427 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff); 8428 8429 /* Clear status block in ram. */ 8430 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8431 8432 if (tnapi->tx_ring) { 8433 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 8434 (TG3_TX_RING_SIZE << 8435 BDINFO_FLAGS_MAXLEN_SHIFT), 8436 NIC_SRAM_TX_BUFFER_DESC); 8437 txrcb += TG3_BDINFO_SIZE; 8438 } 8439 8440 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 8441 ((tp->rx_ret_ring_mask + 1) << 8442 BDINFO_FLAGS_MAXLEN_SHIFT), 0); 8443 8444 stblk += 8; 8445 rxrcb += TG3_BDINFO_SIZE; 8446 } 8447 } 8448 8449 static void tg3_setup_rxbd_thresholds(struct tg3 *tp) 8450 { 8451 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh; 8452 8453 if (!tg3_flag(tp, 5750_PLUS) || 8454 tg3_flag(tp, 5780_CLASS) || 8455 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 8456 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 8457 tg3_flag(tp, 57765_PLUS)) 8458 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700; 8459 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 8460 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) 8461 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755; 8462 else 8463 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906; 8464 8465 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post); 8466 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1); 8467 8468 val = min(nic_rep_thresh, host_rep_thresh); 8469 tw32(RCVBDI_STD_THRESH, val); 8470 8471 if (tg3_flag(tp, 57765_PLUS)) 8472 tw32(STD_REPLENISH_LWM, bdcache_maxcnt); 8473 8474 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 8475 return; 8476 8477 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700; 8478 8479 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1); 8480 8481 val = min(bdcache_maxcnt / 2, host_rep_thresh); 8482 tw32(RCVBDI_JUMBO_THRESH, val); 8483 8484 if (tg3_flag(tp, 57765_PLUS)) 8485 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt); 8486 } 8487 8488 static inline u32 calc_crc(unsigned char *buf, int len) 8489 { 8490 u32 reg; 8491 u32 tmp; 8492 int j, k; 8493 8494 reg = 0xffffffff; 8495 8496 for (j = 0; j < len; j++) { 8497 reg ^= buf[j]; 8498 8499 for (k = 0; k < 8; k++) { 8500 tmp = reg & 0x01; 8501 8502 reg >>= 1; 8503 8504 if (tmp) 8505 reg ^= 0xedb88320; 8506 } 8507 } 8508 8509 return ~reg; 8510 } 8511 8512 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all) 8513 { 8514 /* accept or reject all multicast frames */ 8515 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0); 8516 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0); 8517 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0); 8518 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0); 8519 } 8520 8521 static void __tg3_set_rx_mode(struct net_device *dev) 8522 { 8523 struct tg3 *tp = netdev_priv(dev); 8524 u32 rx_mode; 8525 8526 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | 8527 RX_MODE_KEEP_VLAN_TAG); 8528 8529 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE) 8530 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG 8531 * flag clear. 8532 */ 8533 if (!tg3_flag(tp, ENABLE_ASF)) 8534 rx_mode |= RX_MODE_KEEP_VLAN_TAG; 8535 #endif 8536 8537 if (dev->flags & IFF_PROMISC) { 8538 /* Promiscuous mode. */ 8539 rx_mode |= RX_MODE_PROMISC; 8540 } else if (dev->flags & IFF_ALLMULTI) { 8541 /* Accept all multicast. */ 8542 tg3_set_multi(tp, 1); 8543 } else if (netdev_mc_empty(dev)) { 8544 /* Reject all multicast. */ 8545 tg3_set_multi(tp, 0); 8546 } else { 8547 /* Accept one or more multicast(s). */ 8548 struct netdev_hw_addr *ha; 8549 u32 mc_filter[4] = { 0, }; 8550 u32 regidx; 8551 u32 bit; 8552 u32 crc; 8553 8554 netdev_for_each_mc_addr(ha, dev) { 8555 crc = calc_crc(ha->addr, ETH_ALEN); 8556 bit = ~crc & 0x7f; 8557 regidx = (bit & 0x60) >> 5; 8558 bit &= 0x1f; 8559 mc_filter[regidx] |= (1 << bit); 8560 } 8561 8562 tw32(MAC_HASH_REG_0, mc_filter[0]); 8563 tw32(MAC_HASH_REG_1, mc_filter[1]); 8564 tw32(MAC_HASH_REG_2, mc_filter[2]); 8565 tw32(MAC_HASH_REG_3, mc_filter[3]); 8566 } 8567 8568 if (rx_mode != tp->rx_mode) { 8569 tp->rx_mode = rx_mode; 8570 tw32_f(MAC_RX_MODE, rx_mode); 8571 udelay(10); 8572 } 8573 } 8574 8575 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp) 8576 { 8577 int i; 8578 8579 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 8580 tp->rss_ind_tbl[i] = 8581 ethtool_rxfh_indir_default(i, tp->irq_cnt - 1); 8582 } 8583 8584 static void tg3_rss_check_indir_tbl(struct tg3 *tp) 8585 { 8586 int i; 8587 8588 if (!tg3_flag(tp, SUPPORT_MSIX)) 8589 return; 8590 8591 if (tp->irq_cnt <= 2) { 8592 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl)); 8593 return; 8594 } 8595 8596 /* Validate table against current IRQ count */ 8597 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) { 8598 if (tp->rss_ind_tbl[i] >= tp->irq_cnt - 1) 8599 break; 8600 } 8601 8602 if (i != TG3_RSS_INDIR_TBL_SIZE) 8603 tg3_rss_init_dflt_indir_tbl(tp); 8604 } 8605 8606 static void tg3_rss_write_indir_tbl(struct tg3 *tp) 8607 { 8608 int i = 0; 8609 u32 reg = MAC_RSS_INDIR_TBL_0; 8610 8611 while (i < TG3_RSS_INDIR_TBL_SIZE) { 8612 u32 val = tp->rss_ind_tbl[i]; 8613 i++; 8614 for (; i % 8; i++) { 8615 val <<= 4; 8616 val |= tp->rss_ind_tbl[i]; 8617 } 8618 tw32(reg, val); 8619 reg += 4; 8620 } 8621 } 8622 8623 /* tp->lock is held. */ 8624 static int tg3_reset_hw(struct tg3 *tp, int reset_phy) 8625 { 8626 u32 val, rdmac_mode; 8627 int i, err, limit; 8628 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 8629 8630 tg3_disable_ints(tp); 8631 8632 tg3_stop_fw(tp); 8633 8634 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); 8635 8636 if (tg3_flag(tp, INIT_COMPLETE)) 8637 tg3_abort_hw(tp, 1); 8638 8639 /* Enable MAC control of LPI */ 8640 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) { 8641 tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, 8642 TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | 8643 TG3_CPMU_EEE_LNKIDL_UART_IDL); 8644 8645 tw32_f(TG3_CPMU_EEE_CTRL, 8646 TG3_CPMU_EEE_CTRL_EXIT_20_1_US); 8647 8648 val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET | 8649 TG3_CPMU_EEEMD_LPI_IN_TX | 8650 TG3_CPMU_EEEMD_LPI_IN_RX | 8651 TG3_CPMU_EEEMD_EEE_ENABLE; 8652 8653 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) 8654 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN; 8655 8656 if (tg3_flag(tp, ENABLE_APE)) 8657 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN; 8658 8659 tw32_f(TG3_CPMU_EEE_MODE, val); 8660 8661 tw32_f(TG3_CPMU_EEE_DBTMR1, 8662 TG3_CPMU_DBTMR1_PCIEXIT_2047US | 8663 TG3_CPMU_DBTMR1_LNKIDLE_2047US); 8664 8665 tw32_f(TG3_CPMU_EEE_DBTMR2, 8666 TG3_CPMU_DBTMR2_APE_TX_2047US | 8667 TG3_CPMU_DBTMR2_TXIDXEQ_2047US); 8668 } 8669 8670 if (reset_phy) 8671 tg3_phy_reset(tp); 8672 8673 err = tg3_chip_reset(tp); 8674 if (err) 8675 return err; 8676 8677 tg3_write_sig_legacy(tp, RESET_KIND_INIT); 8678 8679 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) { 8680 val = tr32(TG3_CPMU_CTRL); 8681 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE); 8682 tw32(TG3_CPMU_CTRL, val); 8683 8684 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 8685 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 8686 val |= CPMU_LSPD_10MB_MACCLK_6_25; 8687 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 8688 8689 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD); 8690 val &= ~CPMU_LNK_AWARE_MACCLK_MASK; 8691 val |= CPMU_LNK_AWARE_MACCLK_6_25; 8692 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val); 8693 8694 val = tr32(TG3_CPMU_HST_ACC); 8695 val &= ~CPMU_HST_ACC_MACCLK_MASK; 8696 val |= CPMU_HST_ACC_MACCLK_6_25; 8697 tw32(TG3_CPMU_HST_ACC, val); 8698 } 8699 8700 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 8701 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK; 8702 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN | 8703 PCIE_PWR_MGMT_L1_THRESH_4MS; 8704 tw32(PCIE_PWR_MGMT_THRESH, val); 8705 8706 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK; 8707 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS); 8708 8709 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR); 8710 8711 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 8712 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 8713 } 8714 8715 if (tg3_flag(tp, L1PLLPD_EN)) { 8716 u32 grc_mode = tr32(GRC_MODE); 8717 8718 /* Access the lower 1K of PL PCIE block registers. */ 8719 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 8720 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 8721 8722 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1); 8723 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1, 8724 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN); 8725 8726 tw32(GRC_MODE, grc_mode); 8727 } 8728 8729 if (tg3_flag(tp, 57765_CLASS)) { 8730 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) { 8731 u32 grc_mode = tr32(GRC_MODE); 8732 8733 /* Access the lower 1K of PL PCIE block registers. */ 8734 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 8735 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 8736 8737 val = tr32(TG3_PCIE_TLDLPL_PORT + 8738 TG3_PCIE_PL_LO_PHYCTL5); 8739 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5, 8740 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ); 8741 8742 tw32(GRC_MODE, grc_mode); 8743 } 8744 8745 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) { 8746 u32 grc_mode = tr32(GRC_MODE); 8747 8748 /* Access the lower 1K of DL PCIE block registers. */ 8749 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 8750 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL); 8751 8752 val = tr32(TG3_PCIE_TLDLPL_PORT + 8753 TG3_PCIE_DL_LO_FTSMAX); 8754 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK; 8755 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX, 8756 val | TG3_PCIE_DL_LO_FTSMAX_VAL); 8757 8758 tw32(GRC_MODE, grc_mode); 8759 } 8760 8761 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 8762 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 8763 val |= CPMU_LSPD_10MB_MACCLK_6_25; 8764 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 8765 } 8766 8767 /* This works around an issue with Athlon chipsets on 8768 * B3 tigon3 silicon. This bit has no effect on any 8769 * other revision. But do not set this on PCI Express 8770 * chips and don't even touch the clocks if the CPMU is present. 8771 */ 8772 if (!tg3_flag(tp, CPMU_PRESENT)) { 8773 if (!tg3_flag(tp, PCI_EXPRESS)) 8774 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 8775 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 8776 } 8777 8778 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && 8779 tg3_flag(tp, PCIX_MODE)) { 8780 val = tr32(TG3PCI_PCISTATE); 8781 val |= PCISTATE_RETRY_SAME_DMA; 8782 tw32(TG3PCI_PCISTATE, val); 8783 } 8784 8785 if (tg3_flag(tp, ENABLE_APE)) { 8786 /* Allow reads and writes to the 8787 * APE register and memory space. 8788 */ 8789 val = tr32(TG3PCI_PCISTATE); 8790 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 8791 PCISTATE_ALLOW_APE_SHMEM_WR | 8792 PCISTATE_ALLOW_APE_PSPACE_WR; 8793 tw32(TG3PCI_PCISTATE, val); 8794 } 8795 8796 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) { 8797 /* Enable some hw fixes. */ 8798 val = tr32(TG3PCI_MSI_DATA); 8799 val |= (1 << 26) | (1 << 28) | (1 << 29); 8800 tw32(TG3PCI_MSI_DATA, val); 8801 } 8802 8803 /* Descriptor ring init may make accesses to the 8804 * NIC SRAM area to setup the TX descriptors, so we 8805 * can only do this after the hardware has been 8806 * successfully reset. 8807 */ 8808 err = tg3_init_rings(tp); 8809 if (err) 8810 return err; 8811 8812 if (tg3_flag(tp, 57765_PLUS)) { 8813 val = tr32(TG3PCI_DMA_RW_CTRL) & 8814 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 8815 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) 8816 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; 8817 if (!tg3_flag(tp, 57765_CLASS) && 8818 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) 8819 val |= DMA_RWCTRL_TAGGED_STAT_WA; 8820 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); 8821 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 && 8822 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) { 8823 /* This value is determined during the probe time DMA 8824 * engine test, tg3_test_dma. 8825 */ 8826 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 8827 } 8828 8829 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS | 8830 GRC_MODE_4X_NIC_SEND_RINGS | 8831 GRC_MODE_NO_TX_PHDR_CSUM | 8832 GRC_MODE_NO_RX_PHDR_CSUM); 8833 tp->grc_mode |= GRC_MODE_HOST_SENDBDS; 8834 8835 /* Pseudo-header checksum is done by hardware logic and not 8836 * the offload processers, so make the chip do the pseudo- 8837 * header checksums on receive. For transmit it is more 8838 * convenient to do the pseudo-header checksum in software 8839 * as Linux does that on transmit for us in all cases. 8840 */ 8841 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; 8842 8843 tw32(GRC_MODE, 8844 tp->grc_mode | 8845 (GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP)); 8846 8847 /* Setup the timer prescalar register. Clock is always 66Mhz. */ 8848 val = tr32(GRC_MISC_CFG); 8849 val &= ~0xff; 8850 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT); 8851 tw32(GRC_MISC_CFG, val); 8852 8853 /* Initialize MBUF/DESC pool. */ 8854 if (tg3_flag(tp, 5750_PLUS)) { 8855 /* Do nothing. */ 8856 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { 8857 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); 8858 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 8859 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); 8860 else 8861 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96); 8862 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE); 8863 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE); 8864 } else if (tg3_flag(tp, TSO_CAPABLE)) { 8865 int fw_len; 8866 8867 fw_len = tp->fw_len; 8868 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1); 8869 tw32(BUFMGR_MB_POOL_ADDR, 8870 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len); 8871 tw32(BUFMGR_MB_POOL_SIZE, 8872 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00); 8873 } 8874 8875 if (tp->dev->mtu <= ETH_DATA_LEN) { 8876 tw32(BUFMGR_MB_RDMA_LOW_WATER, 8877 tp->bufmgr_config.mbuf_read_dma_low_water); 8878 tw32(BUFMGR_MB_MACRX_LOW_WATER, 8879 tp->bufmgr_config.mbuf_mac_rx_low_water); 8880 tw32(BUFMGR_MB_HIGH_WATER, 8881 tp->bufmgr_config.mbuf_high_water); 8882 } else { 8883 tw32(BUFMGR_MB_RDMA_LOW_WATER, 8884 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo); 8885 tw32(BUFMGR_MB_MACRX_LOW_WATER, 8886 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo); 8887 tw32(BUFMGR_MB_HIGH_WATER, 8888 tp->bufmgr_config.mbuf_high_water_jumbo); 8889 } 8890 tw32(BUFMGR_DMA_LOW_WATER, 8891 tp->bufmgr_config.dma_low_water); 8892 tw32(BUFMGR_DMA_HIGH_WATER, 8893 tp->bufmgr_config.dma_high_water); 8894 8895 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE; 8896 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 8897 val |= BUFMGR_MODE_NO_TX_UNDERRUN; 8898 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 8899 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 8900 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) 8901 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB; 8902 tw32(BUFMGR_MODE, val); 8903 for (i = 0; i < 2000; i++) { 8904 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE) 8905 break; 8906 udelay(10); 8907 } 8908 if (i >= 2000) { 8909 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__); 8910 return -ENODEV; 8911 } 8912 8913 if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1) 8914 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2); 8915 8916 tg3_setup_rxbd_thresholds(tp); 8917 8918 /* Initialize TG3_BDINFO's at: 8919 * RCVDBDI_STD_BD: standard eth size rx ring 8920 * RCVDBDI_JUMBO_BD: jumbo frame rx ring 8921 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work) 8922 * 8923 * like so: 8924 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring 8925 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) | 8926 * ring attribute flags 8927 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM 8928 * 8929 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries. 8930 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries. 8931 * 8932 * The size of each ring is fixed in the firmware, but the location is 8933 * configurable. 8934 */ 8935 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 8936 ((u64) tpr->rx_std_mapping >> 32)); 8937 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 8938 ((u64) tpr->rx_std_mapping & 0xffffffff)); 8939 if (!tg3_flag(tp, 5717_PLUS)) 8940 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 8941 NIC_SRAM_RX_BUFFER_DESC); 8942 8943 /* Disable the mini ring */ 8944 if (!tg3_flag(tp, 5705_PLUS)) 8945 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS, 8946 BDINFO_FLAGS_DISABLED); 8947 8948 /* Program the jumbo buffer descriptor ring control 8949 * blocks on those devices that have them. 8950 */ 8951 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 8952 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) { 8953 8954 if (tg3_flag(tp, JUMBO_RING_ENABLE)) { 8955 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 8956 ((u64) tpr->rx_jmb_mapping >> 32)); 8957 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 8958 ((u64) tpr->rx_jmb_mapping & 0xffffffff)); 8959 val = TG3_RX_JMB_RING_SIZE(tp) << 8960 BDINFO_FLAGS_MAXLEN_SHIFT; 8961 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 8962 val | BDINFO_FLAGS_USE_EXT_RECV); 8963 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || 8964 tg3_flag(tp, 57765_CLASS)) 8965 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, 8966 NIC_SRAM_RX_JUMBO_BUFFER_DESC); 8967 } else { 8968 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 8969 BDINFO_FLAGS_DISABLED); 8970 } 8971 8972 if (tg3_flag(tp, 57765_PLUS)) { 8973 val = TG3_RX_STD_RING_SIZE(tp); 8974 val <<= BDINFO_FLAGS_MAXLEN_SHIFT; 8975 val |= (TG3_RX_STD_DMA_SZ << 2); 8976 } else 8977 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT; 8978 } else 8979 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT; 8980 8981 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val); 8982 8983 tpr->rx_std_prod_idx = tp->rx_pending; 8984 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx); 8985 8986 tpr->rx_jmb_prod_idx = 8987 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0; 8988 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx); 8989 8990 tg3_rings_reset(tp); 8991 8992 /* Initialize MAC address and backoff seed. */ 8993 __tg3_set_mac_addr(tp, 0); 8994 8995 /* MTU + ethernet header + FCS + optional VLAN tag */ 8996 tw32(MAC_RX_MTU_SIZE, 8997 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 8998 8999 /* The slot time is changed by tg3_setup_phy if we 9000 * run at gigabit with half duplex. 9001 */ 9002 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 9003 (6 << TX_LENGTHS_IPG_SHIFT) | 9004 (32 << TX_LENGTHS_SLOT_TIME_SHIFT); 9005 9006 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 9007 val |= tr32(MAC_TX_LENGTHS) & 9008 (TX_LENGTHS_JMB_FRM_LEN_MSK | 9009 TX_LENGTHS_CNT_DWN_VAL_MSK); 9010 9011 tw32(MAC_TX_LENGTHS, val); 9012 9013 /* Receive rules. */ 9014 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS); 9015 tw32(RCVLPC_CONFIG, 0x0181); 9016 9017 /* Calculate RDMAC_MODE setting early, we need it to determine 9018 * the RCVLPC_STATE_ENABLE mask. 9019 */ 9020 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB | 9021 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB | 9022 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB | 9023 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB | 9024 RDMAC_MODE_LNGREAD_ENAB); 9025 9026 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) 9027 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS; 9028 9029 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 9030 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 9031 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 9032 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB | 9033 RDMAC_MODE_MBUF_RBD_CRPT_ENAB | 9034 RDMAC_MODE_MBUF_SBD_CRPT_ENAB; 9035 9036 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 9037 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 9038 if (tg3_flag(tp, TSO_CAPABLE) && 9039 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 9040 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; 9041 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 9042 !tg3_flag(tp, IS_5788)) { 9043 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 9044 } 9045 } 9046 9047 if (tg3_flag(tp, PCI_EXPRESS)) 9048 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 9049 9050 if (tg3_flag(tp, HW_TSO_1) || 9051 tg3_flag(tp, HW_TSO_2) || 9052 tg3_flag(tp, HW_TSO_3)) 9053 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN; 9054 9055 if (tg3_flag(tp, 57765_PLUS) || 9056 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 9057 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 9058 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; 9059 9060 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 9061 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; 9062 9063 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 9064 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 9065 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 9066 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 9067 tg3_flag(tp, 57765_PLUS)) { 9068 val = tr32(TG3_RDMA_RSRVCTRL_REG); 9069 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 9070 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 9071 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | 9072 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | 9073 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); 9074 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B | 9075 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | 9076 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; 9077 } 9078 tw32(TG3_RDMA_RSRVCTRL_REG, 9079 val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); 9080 } 9081 9082 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 9083 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 9084 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 9085 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val | 9086 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | 9087 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); 9088 } 9089 9090 /* Receive/send statistics. */ 9091 if (tg3_flag(tp, 5750_PLUS)) { 9092 val = tr32(RCVLPC_STATS_ENABLE); 9093 val &= ~RCVLPC_STATSENAB_DACK_FIX; 9094 tw32(RCVLPC_STATS_ENABLE, val); 9095 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && 9096 tg3_flag(tp, TSO_CAPABLE)) { 9097 val = tr32(RCVLPC_STATS_ENABLE); 9098 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX; 9099 tw32(RCVLPC_STATS_ENABLE, val); 9100 } else { 9101 tw32(RCVLPC_STATS_ENABLE, 0xffffff); 9102 } 9103 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE); 9104 tw32(SNDDATAI_STATSENAB, 0xffffff); 9105 tw32(SNDDATAI_STATSCTRL, 9106 (SNDDATAI_SCTRL_ENABLE | 9107 SNDDATAI_SCTRL_FASTUPD)); 9108 9109 /* Setup host coalescing engine. */ 9110 tw32(HOSTCC_MODE, 0); 9111 for (i = 0; i < 2000; i++) { 9112 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE)) 9113 break; 9114 udelay(10); 9115 } 9116 9117 __tg3_set_coalesce(tp, &tp->coal); 9118 9119 if (!tg3_flag(tp, 5705_PLUS)) { 9120 /* Status/statistics block address. See tg3_timer, 9121 * the tg3_periodic_fetch_stats call there, and 9122 * tg3_get_stats to see how this works for 5705/5750 chips. 9123 */ 9124 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 9125 ((u64) tp->stats_mapping >> 32)); 9126 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 9127 ((u64) tp->stats_mapping & 0xffffffff)); 9128 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK); 9129 9130 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK); 9131 9132 /* Clear statistics and status block memory areas */ 9133 for (i = NIC_SRAM_STATS_BLK; 9134 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; 9135 i += sizeof(u32)) { 9136 tg3_write_mem(tp, i, 0); 9137 udelay(40); 9138 } 9139 } 9140 9141 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode); 9142 9143 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); 9144 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); 9145 if (!tg3_flag(tp, 5705_PLUS)) 9146 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); 9147 9148 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 9149 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 9150 /* reset to prevent losing 1st rx packet intermittently */ 9151 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 9152 udelay(10); 9153 } 9154 9155 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | 9156 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | 9157 MAC_MODE_FHDE_ENABLE; 9158 if (tg3_flag(tp, ENABLE_APE)) 9159 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 9160 if (!tg3_flag(tp, 5705_PLUS) && 9161 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 9162 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) 9163 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 9164 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); 9165 udelay(40); 9166 9167 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). 9168 * If TG3_FLAG_IS_NIC is zero, we should read the 9169 * register to preserve the GPIO settings for LOMs. The GPIOs, 9170 * whether used as inputs or outputs, are set by boot code after 9171 * reset. 9172 */ 9173 if (!tg3_flag(tp, IS_NIC)) { 9174 u32 gpio_mask; 9175 9176 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | 9177 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | 9178 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; 9179 9180 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 9181 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | 9182 GRC_LCLCTRL_GPIO_OUTPUT3; 9183 9184 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 9185 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL; 9186 9187 tp->grc_local_ctrl &= ~gpio_mask; 9188 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; 9189 9190 /* GPIO1 must be driven high for eeprom write protect */ 9191 if (tg3_flag(tp, EEPROM_WRITE_PROT)) 9192 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 9193 GRC_LCLCTRL_GPIO_OUTPUT1); 9194 } 9195 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 9196 udelay(100); 9197 9198 if (tg3_flag(tp, USING_MSIX)) { 9199 val = tr32(MSGINT_MODE); 9200 val |= MSGINT_MODE_ENABLE; 9201 if (tp->irq_cnt > 1) 9202 val |= MSGINT_MODE_MULTIVEC_EN; 9203 if (!tg3_flag(tp, 1SHOT_MSI)) 9204 val |= MSGINT_MODE_ONE_SHOT_DISABLE; 9205 tw32(MSGINT_MODE, val); 9206 } 9207 9208 if (!tg3_flag(tp, 5705_PLUS)) { 9209 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); 9210 udelay(40); 9211 } 9212 9213 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB | 9214 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB | 9215 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | 9216 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | 9217 WDMAC_MODE_LNGREAD_ENAB); 9218 9219 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 9220 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 9221 if (tg3_flag(tp, TSO_CAPABLE) && 9222 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 || 9223 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) { 9224 /* nothing */ 9225 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 9226 !tg3_flag(tp, IS_5788)) { 9227 val |= WDMAC_MODE_RX_ACCEL; 9228 } 9229 } 9230 9231 /* Enable host coalescing bug fix */ 9232 if (tg3_flag(tp, 5755_PLUS)) 9233 val |= WDMAC_MODE_STATUS_TAG_FIX; 9234 9235 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 9236 val |= WDMAC_MODE_BURST_ALL_DATA; 9237 9238 tw32_f(WDMAC_MODE, val); 9239 udelay(40); 9240 9241 if (tg3_flag(tp, PCIX_MODE)) { 9242 u16 pcix_cmd; 9243 9244 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 9245 &pcix_cmd); 9246 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) { 9247 pcix_cmd &= ~PCI_X_CMD_MAX_READ; 9248 pcix_cmd |= PCI_X_CMD_READ_2K; 9249 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 9250 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ); 9251 pcix_cmd |= PCI_X_CMD_READ_2K; 9252 } 9253 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 9254 pcix_cmd); 9255 } 9256 9257 tw32_f(RDMAC_MODE, rdmac_mode); 9258 udelay(40); 9259 9260 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); 9261 if (!tg3_flag(tp, 5705_PLUS)) 9262 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); 9263 9264 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 9265 tw32(SNDDATAC_MODE, 9266 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY); 9267 else 9268 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); 9269 9270 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); 9271 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); 9272 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ; 9273 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 9274 val |= RCVDBDI_MODE_LRG_RING_SZ; 9275 tw32(RCVDBDI_MODE, val); 9276 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); 9277 if (tg3_flag(tp, HW_TSO_1) || 9278 tg3_flag(tp, HW_TSO_2) || 9279 tg3_flag(tp, HW_TSO_3)) 9280 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); 9281 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE; 9282 if (tg3_flag(tp, ENABLE_TSS)) 9283 val |= SNDBDI_MODE_MULTI_TXQ_EN; 9284 tw32(SNDBDI_MODE, val); 9285 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); 9286 9287 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) { 9288 err = tg3_load_5701_a0_firmware_fix(tp); 9289 if (err) 9290 return err; 9291 } 9292 9293 if (tg3_flag(tp, TSO_CAPABLE)) { 9294 err = tg3_load_tso_firmware(tp); 9295 if (err) 9296 return err; 9297 } 9298 9299 tp->tx_mode = TX_MODE_ENABLE; 9300 9301 if (tg3_flag(tp, 5755_PLUS) || 9302 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 9303 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; 9304 9305 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 9306 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; 9307 tp->tx_mode &= ~val; 9308 tp->tx_mode |= tr32(MAC_TX_MODE) & val; 9309 } 9310 9311 tw32_f(MAC_TX_MODE, tp->tx_mode); 9312 udelay(100); 9313 9314 if (tg3_flag(tp, ENABLE_RSS)) { 9315 tg3_rss_write_indir_tbl(tp); 9316 9317 /* Setup the "secret" hash key. */ 9318 tw32(MAC_RSS_HASH_KEY_0, 0x5f865437); 9319 tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc); 9320 tw32(MAC_RSS_HASH_KEY_2, 0x50103a45); 9321 tw32(MAC_RSS_HASH_KEY_3, 0x36621985); 9322 tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8); 9323 tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e); 9324 tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556); 9325 tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe); 9326 tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7); 9327 tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481); 9328 } 9329 9330 tp->rx_mode = RX_MODE_ENABLE; 9331 if (tg3_flag(tp, 5755_PLUS)) 9332 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE; 9333 9334 if (tg3_flag(tp, ENABLE_RSS)) 9335 tp->rx_mode |= RX_MODE_RSS_ENABLE | 9336 RX_MODE_RSS_ITBL_HASH_BITS_7 | 9337 RX_MODE_RSS_IPV6_HASH_EN | 9338 RX_MODE_RSS_TCP_IPV6_HASH_EN | 9339 RX_MODE_RSS_IPV4_HASH_EN | 9340 RX_MODE_RSS_TCP_IPV4_HASH_EN; 9341 9342 tw32_f(MAC_RX_MODE, tp->rx_mode); 9343 udelay(10); 9344 9345 tw32(MAC_LED_CTRL, tp->led_ctrl); 9346 9347 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 9348 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9349 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 9350 udelay(10); 9351 } 9352 tw32_f(MAC_RX_MODE, tp->rx_mode); 9353 udelay(10); 9354 9355 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9356 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) && 9357 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) { 9358 /* Set drive transmission level to 1.2V */ 9359 /* only if the signal pre-emphasis bit is not set */ 9360 val = tr32(MAC_SERDES_CFG); 9361 val &= 0xfffff000; 9362 val |= 0x880; 9363 tw32(MAC_SERDES_CFG, val); 9364 } 9365 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) 9366 tw32(MAC_SERDES_CFG, 0x616000); 9367 } 9368 9369 /* Prevent chip from dropping frames when flow control 9370 * is enabled. 9371 */ 9372 if (tg3_flag(tp, 57765_CLASS)) 9373 val = 1; 9374 else 9375 val = 2; 9376 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val); 9377 9378 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && 9379 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 9380 /* Use hardware link auto-negotiation */ 9381 tg3_flag_set(tp, HW_AUTONEG); 9382 } 9383 9384 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 9385 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 9386 u32 tmp; 9387 9388 tmp = tr32(SERDES_RX_CTRL); 9389 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); 9390 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; 9391 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; 9392 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 9393 } 9394 9395 if (!tg3_flag(tp, USE_PHYLIB)) { 9396 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 9397 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 9398 9399 err = tg3_setup_phy(tp, 0); 9400 if (err) 9401 return err; 9402 9403 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 9404 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 9405 u32 tmp; 9406 9407 /* Clear CRC stats. */ 9408 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) { 9409 tg3_writephy(tp, MII_TG3_TEST1, 9410 tmp | MII_TG3_TEST1_CRC_EN); 9411 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp); 9412 } 9413 } 9414 } 9415 9416 __tg3_set_rx_mode(tp->dev); 9417 9418 /* Initialize receive rules. */ 9419 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK); 9420 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK); 9421 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); 9422 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); 9423 9424 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) 9425 limit = 8; 9426 else 9427 limit = 16; 9428 if (tg3_flag(tp, ENABLE_ASF)) 9429 limit -= 4; 9430 switch (limit) { 9431 case 16: 9432 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); 9433 case 15: 9434 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); 9435 case 14: 9436 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); 9437 case 13: 9438 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); 9439 case 12: 9440 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); 9441 case 11: 9442 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); 9443 case 10: 9444 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); 9445 case 9: 9446 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); 9447 case 8: 9448 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); 9449 case 7: 9450 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); 9451 case 6: 9452 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); 9453 case 5: 9454 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); 9455 case 4: 9456 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ 9457 case 3: 9458 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */ 9459 case 2: 9460 case 1: 9461 9462 default: 9463 break; 9464 } 9465 9466 if (tg3_flag(tp, ENABLE_APE)) 9467 /* Write our heartbeat update interval to APE. */ 9468 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS, 9469 APE_HOST_HEARTBEAT_INT_DISABLE); 9470 9471 tg3_write_sig_post_reset(tp, RESET_KIND_INIT); 9472 9473 return 0; 9474 } 9475 9476 /* Called at device open time to get the chip ready for 9477 * packet processing. Invoked with tp->lock held. 9478 */ 9479 static int tg3_init_hw(struct tg3 *tp, int reset_phy) 9480 { 9481 tg3_switch_clocks(tp); 9482 9483 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 9484 9485 return tg3_reset_hw(tp, reset_phy); 9486 } 9487 9488 #if IS_ENABLED(CONFIG_HWMON) 9489 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir) 9490 { 9491 int i; 9492 9493 for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) { 9494 u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN; 9495 9496 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len); 9497 off += len; 9498 9499 if (ocir->signature != TG3_OCIR_SIG_MAGIC || 9500 !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE)) 9501 memset(ocir, 0, TG3_OCIR_LEN); 9502 } 9503 } 9504 9505 /* sysfs attributes for hwmon */ 9506 static ssize_t tg3_show_temp(struct device *dev, 9507 struct device_attribute *devattr, char *buf) 9508 { 9509 struct pci_dev *pdev = to_pci_dev(dev); 9510 struct net_device *netdev = pci_get_drvdata(pdev); 9511 struct tg3 *tp = netdev_priv(netdev); 9512 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 9513 u32 temperature; 9514 9515 spin_lock_bh(&tp->lock); 9516 tg3_ape_scratchpad_read(tp, &temperature, attr->index, 9517 sizeof(temperature)); 9518 spin_unlock_bh(&tp->lock); 9519 return sprintf(buf, "%u\n", temperature); 9520 } 9521 9522 9523 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tg3_show_temp, NULL, 9524 TG3_TEMP_SENSOR_OFFSET); 9525 static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL, 9526 TG3_TEMP_CAUTION_OFFSET); 9527 static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL, 9528 TG3_TEMP_MAX_OFFSET); 9529 9530 static struct attribute *tg3_attributes[] = { 9531 &sensor_dev_attr_temp1_input.dev_attr.attr, 9532 &sensor_dev_attr_temp1_crit.dev_attr.attr, 9533 &sensor_dev_attr_temp1_max.dev_attr.attr, 9534 NULL 9535 }; 9536 9537 static const struct attribute_group tg3_group = { 9538 .attrs = tg3_attributes, 9539 }; 9540 9541 #endif 9542 9543 static void tg3_hwmon_close(struct tg3 *tp) 9544 { 9545 #if IS_ENABLED(CONFIG_HWMON) 9546 if (tp->hwmon_dev) { 9547 hwmon_device_unregister(tp->hwmon_dev); 9548 tp->hwmon_dev = NULL; 9549 sysfs_remove_group(&tp->pdev->dev.kobj, &tg3_group); 9550 } 9551 #endif 9552 } 9553 9554 static void tg3_hwmon_open(struct tg3 *tp) 9555 { 9556 #if IS_ENABLED(CONFIG_HWMON) 9557 int i, err; 9558 u32 size = 0; 9559 struct pci_dev *pdev = tp->pdev; 9560 struct tg3_ocir ocirs[TG3_SD_NUM_RECS]; 9561 9562 tg3_sd_scan_scratchpad(tp, ocirs); 9563 9564 for (i = 0; i < TG3_SD_NUM_RECS; i++) { 9565 if (!ocirs[i].src_data_length) 9566 continue; 9567 9568 size += ocirs[i].src_hdr_length; 9569 size += ocirs[i].src_data_length; 9570 } 9571 9572 if (!size) 9573 return; 9574 9575 /* Register hwmon sysfs hooks */ 9576 err = sysfs_create_group(&pdev->dev.kobj, &tg3_group); 9577 if (err) { 9578 dev_err(&pdev->dev, "Cannot create sysfs group, aborting\n"); 9579 return; 9580 } 9581 9582 tp->hwmon_dev = hwmon_device_register(&pdev->dev); 9583 if (IS_ERR(tp->hwmon_dev)) { 9584 tp->hwmon_dev = NULL; 9585 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n"); 9586 sysfs_remove_group(&pdev->dev.kobj, &tg3_group); 9587 } 9588 #endif 9589 } 9590 9591 9592 #define TG3_STAT_ADD32(PSTAT, REG) \ 9593 do { u32 __val = tr32(REG); \ 9594 (PSTAT)->low += __val; \ 9595 if ((PSTAT)->low < __val) \ 9596 (PSTAT)->high += 1; \ 9597 } while (0) 9598 9599 static void tg3_periodic_fetch_stats(struct tg3 *tp) 9600 { 9601 struct tg3_hw_stats *sp = tp->hw_stats; 9602 9603 if (!netif_carrier_ok(tp->dev)) 9604 return; 9605 9606 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS); 9607 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS); 9608 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT); 9609 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT); 9610 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS); 9611 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS); 9612 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS); 9613 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED); 9614 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL); 9615 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL); 9616 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); 9617 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); 9618 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); 9619 9620 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); 9621 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS); 9622 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST); 9623 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST); 9624 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST); 9625 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS); 9626 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS); 9627 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD); 9628 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD); 9629 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD); 9630 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED); 9631 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG); 9632 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS); 9633 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE); 9634 9635 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT); 9636 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && 9637 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0 && 9638 tp->pci_chip_rev_id != CHIPREV_ID_5720_A0) { 9639 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT); 9640 } else { 9641 u32 val = tr32(HOSTCC_FLOW_ATTN); 9642 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0; 9643 if (val) { 9644 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM); 9645 sp->rx_discards.low += val; 9646 if (sp->rx_discards.low < val) 9647 sp->rx_discards.high += 1; 9648 } 9649 sp->mbuf_lwm_thresh_hit = sp->rx_discards; 9650 } 9651 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT); 9652 } 9653 9654 static void tg3_chk_missed_msi(struct tg3 *tp) 9655 { 9656 u32 i; 9657 9658 for (i = 0; i < tp->irq_cnt; i++) { 9659 struct tg3_napi *tnapi = &tp->napi[i]; 9660 9661 if (tg3_has_work(tnapi)) { 9662 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr && 9663 tnapi->last_tx_cons == tnapi->tx_cons) { 9664 if (tnapi->chk_msi_cnt < 1) { 9665 tnapi->chk_msi_cnt++; 9666 return; 9667 } 9668 tg3_msi(0, tnapi); 9669 } 9670 } 9671 tnapi->chk_msi_cnt = 0; 9672 tnapi->last_rx_cons = tnapi->rx_rcb_ptr; 9673 tnapi->last_tx_cons = tnapi->tx_cons; 9674 } 9675 } 9676 9677 static void tg3_timer(unsigned long __opaque) 9678 { 9679 struct tg3 *tp = (struct tg3 *) __opaque; 9680 9681 if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) 9682 goto restart_timer; 9683 9684 spin_lock(&tp->lock); 9685 9686 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 9687 tg3_flag(tp, 57765_CLASS)) 9688 tg3_chk_missed_msi(tp); 9689 9690 if (!tg3_flag(tp, TAGGED_STATUS)) { 9691 /* All of this garbage is because when using non-tagged 9692 * IRQ status the mailbox/status_block protocol the chip 9693 * uses with the cpu is race prone. 9694 */ 9695 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) { 9696 tw32(GRC_LOCAL_CTRL, 9697 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 9698 } else { 9699 tw32(HOSTCC_MODE, tp->coalesce_mode | 9700 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW); 9701 } 9702 9703 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 9704 spin_unlock(&tp->lock); 9705 tg3_reset_task_schedule(tp); 9706 goto restart_timer; 9707 } 9708 } 9709 9710 /* This part only runs once per second. */ 9711 if (!--tp->timer_counter) { 9712 if (tg3_flag(tp, 5705_PLUS)) 9713 tg3_periodic_fetch_stats(tp); 9714 9715 if (tp->setlpicnt && !--tp->setlpicnt) 9716 tg3_phy_eee_enable(tp); 9717 9718 if (tg3_flag(tp, USE_LINKCHG_REG)) { 9719 u32 mac_stat; 9720 int phy_event; 9721 9722 mac_stat = tr32(MAC_STATUS); 9723 9724 phy_event = 0; 9725 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) { 9726 if (mac_stat & MAC_STATUS_MI_INTERRUPT) 9727 phy_event = 1; 9728 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) 9729 phy_event = 1; 9730 9731 if (phy_event) 9732 tg3_setup_phy(tp, 0); 9733 } else if (tg3_flag(tp, POLL_SERDES)) { 9734 u32 mac_stat = tr32(MAC_STATUS); 9735 int need_setup = 0; 9736 9737 if (netif_carrier_ok(tp->dev) && 9738 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) { 9739 need_setup = 1; 9740 } 9741 if (!netif_carrier_ok(tp->dev) && 9742 (mac_stat & (MAC_STATUS_PCS_SYNCED | 9743 MAC_STATUS_SIGNAL_DET))) { 9744 need_setup = 1; 9745 } 9746 if (need_setup) { 9747 if (!tp->serdes_counter) { 9748 tw32_f(MAC_MODE, 9749 (tp->mac_mode & 9750 ~MAC_MODE_PORT_MODE_MASK)); 9751 udelay(40); 9752 tw32_f(MAC_MODE, tp->mac_mode); 9753 udelay(40); 9754 } 9755 tg3_setup_phy(tp, 0); 9756 } 9757 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 9758 tg3_flag(tp, 5780_CLASS)) { 9759 tg3_serdes_parallel_detect(tp); 9760 } 9761 9762 tp->timer_counter = tp->timer_multiplier; 9763 } 9764 9765 /* Heartbeat is only sent once every 2 seconds. 9766 * 9767 * The heartbeat is to tell the ASF firmware that the host 9768 * driver is still alive. In the event that the OS crashes, 9769 * ASF needs to reset the hardware to free up the FIFO space 9770 * that may be filled with rx packets destined for the host. 9771 * If the FIFO is full, ASF will no longer function properly. 9772 * 9773 * Unintended resets have been reported on real time kernels 9774 * where the timer doesn't run on time. Netpoll will also have 9775 * same problem. 9776 * 9777 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware 9778 * to check the ring condition when the heartbeat is expiring 9779 * before doing the reset. This will prevent most unintended 9780 * resets. 9781 */ 9782 if (!--tp->asf_counter) { 9783 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 9784 tg3_wait_for_event_ack(tp); 9785 9786 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, 9787 FWCMD_NICDRV_ALIVE3); 9788 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 9789 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 9790 TG3_FW_UPDATE_TIMEOUT_SEC); 9791 9792 tg3_generate_fw_event(tp); 9793 } 9794 tp->asf_counter = tp->asf_multiplier; 9795 } 9796 9797 spin_unlock(&tp->lock); 9798 9799 restart_timer: 9800 tp->timer.expires = jiffies + tp->timer_offset; 9801 add_timer(&tp->timer); 9802 } 9803 9804 static void __devinit tg3_timer_init(struct tg3 *tp) 9805 { 9806 if (tg3_flag(tp, TAGGED_STATUS) && 9807 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && 9808 !tg3_flag(tp, 57765_CLASS)) 9809 tp->timer_offset = HZ; 9810 else 9811 tp->timer_offset = HZ / 10; 9812 9813 BUG_ON(tp->timer_offset > HZ); 9814 9815 tp->timer_multiplier = (HZ / tp->timer_offset); 9816 tp->asf_multiplier = (HZ / tp->timer_offset) * 9817 TG3_FW_UPDATE_FREQ_SEC; 9818 9819 init_timer(&tp->timer); 9820 tp->timer.data = (unsigned long) tp; 9821 tp->timer.function = tg3_timer; 9822 } 9823 9824 static void tg3_timer_start(struct tg3 *tp) 9825 { 9826 tp->asf_counter = tp->asf_multiplier; 9827 tp->timer_counter = tp->timer_multiplier; 9828 9829 tp->timer.expires = jiffies + tp->timer_offset; 9830 add_timer(&tp->timer); 9831 } 9832 9833 static void tg3_timer_stop(struct tg3 *tp) 9834 { 9835 del_timer_sync(&tp->timer); 9836 } 9837 9838 /* Restart hardware after configuration changes, self-test, etc. 9839 * Invoked with tp->lock held. 9840 */ 9841 static int tg3_restart_hw(struct tg3 *tp, int reset_phy) 9842 __releases(tp->lock) 9843 __acquires(tp->lock) 9844 { 9845 int err; 9846 9847 err = tg3_init_hw(tp, reset_phy); 9848 if (err) { 9849 netdev_err(tp->dev, 9850 "Failed to re-initialize device, aborting\n"); 9851 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 9852 tg3_full_unlock(tp); 9853 tg3_timer_stop(tp); 9854 tp->irq_sync = 0; 9855 tg3_napi_enable(tp); 9856 dev_close(tp->dev); 9857 tg3_full_lock(tp, 0); 9858 } 9859 return err; 9860 } 9861 9862 static void tg3_reset_task(struct work_struct *work) 9863 { 9864 struct tg3 *tp = container_of(work, struct tg3, reset_task); 9865 int err; 9866 9867 tg3_full_lock(tp, 0); 9868 9869 if (!netif_running(tp->dev)) { 9870 tg3_flag_clear(tp, RESET_TASK_PENDING); 9871 tg3_full_unlock(tp); 9872 return; 9873 } 9874 9875 tg3_full_unlock(tp); 9876 9877 tg3_phy_stop(tp); 9878 9879 tg3_netif_stop(tp); 9880 9881 tg3_full_lock(tp, 1); 9882 9883 if (tg3_flag(tp, TX_RECOVERY_PENDING)) { 9884 tp->write32_tx_mbox = tg3_write32_tx_mbox; 9885 tp->write32_rx_mbox = tg3_write_flush_reg32; 9886 tg3_flag_set(tp, MBOX_WRITE_REORDER); 9887 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 9888 } 9889 9890 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 9891 err = tg3_init_hw(tp, 1); 9892 if (err) 9893 goto out; 9894 9895 tg3_netif_start(tp); 9896 9897 out: 9898 tg3_full_unlock(tp); 9899 9900 if (!err) 9901 tg3_phy_start(tp); 9902 9903 tg3_flag_clear(tp, RESET_TASK_PENDING); 9904 } 9905 9906 static int tg3_request_irq(struct tg3 *tp, int irq_num) 9907 { 9908 irq_handler_t fn; 9909 unsigned long flags; 9910 char *name; 9911 struct tg3_napi *tnapi = &tp->napi[irq_num]; 9912 9913 if (tp->irq_cnt == 1) 9914 name = tp->dev->name; 9915 else { 9916 name = &tnapi->irq_lbl[0]; 9917 snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num); 9918 name[IFNAMSIZ-1] = 0; 9919 } 9920 9921 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 9922 fn = tg3_msi; 9923 if (tg3_flag(tp, 1SHOT_MSI)) 9924 fn = tg3_msi_1shot; 9925 flags = 0; 9926 } else { 9927 fn = tg3_interrupt; 9928 if (tg3_flag(tp, TAGGED_STATUS)) 9929 fn = tg3_interrupt_tagged; 9930 flags = IRQF_SHARED; 9931 } 9932 9933 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi); 9934 } 9935 9936 static int tg3_test_interrupt(struct tg3 *tp) 9937 { 9938 struct tg3_napi *tnapi = &tp->napi[0]; 9939 struct net_device *dev = tp->dev; 9940 int err, i, intr_ok = 0; 9941 u32 val; 9942 9943 if (!netif_running(dev)) 9944 return -ENODEV; 9945 9946 tg3_disable_ints(tp); 9947 9948 free_irq(tnapi->irq_vec, tnapi); 9949 9950 /* 9951 * Turn off MSI one shot mode. Otherwise this test has no 9952 * observable way to know whether the interrupt was delivered. 9953 */ 9954 if (tg3_flag(tp, 57765_PLUS)) { 9955 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; 9956 tw32(MSGINT_MODE, val); 9957 } 9958 9959 err = request_irq(tnapi->irq_vec, tg3_test_isr, 9960 IRQF_SHARED, dev->name, tnapi); 9961 if (err) 9962 return err; 9963 9964 tnapi->hw_status->status &= ~SD_STATUS_UPDATED; 9965 tg3_enable_ints(tp); 9966 9967 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 9968 tnapi->coal_now); 9969 9970 for (i = 0; i < 5; i++) { 9971 u32 int_mbox, misc_host_ctrl; 9972 9973 int_mbox = tr32_mailbox(tnapi->int_mbox); 9974 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 9975 9976 if ((int_mbox != 0) || 9977 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) { 9978 intr_ok = 1; 9979 break; 9980 } 9981 9982 if (tg3_flag(tp, 57765_PLUS) && 9983 tnapi->hw_status->status_tag != tnapi->last_tag) 9984 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 9985 9986 msleep(10); 9987 } 9988 9989 tg3_disable_ints(tp); 9990 9991 free_irq(tnapi->irq_vec, tnapi); 9992 9993 err = tg3_request_irq(tp, 0); 9994 9995 if (err) 9996 return err; 9997 9998 if (intr_ok) { 9999 /* Reenable MSI one shot mode. */ 10000 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) { 10001 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; 10002 tw32(MSGINT_MODE, val); 10003 } 10004 return 0; 10005 } 10006 10007 return -EIO; 10008 } 10009 10010 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is 10011 * successfully restored 10012 */ 10013 static int tg3_test_msi(struct tg3 *tp) 10014 { 10015 int err; 10016 u16 pci_cmd; 10017 10018 if (!tg3_flag(tp, USING_MSI)) 10019 return 0; 10020 10021 /* Turn off SERR reporting in case MSI terminates with Master 10022 * Abort. 10023 */ 10024 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 10025 pci_write_config_word(tp->pdev, PCI_COMMAND, 10026 pci_cmd & ~PCI_COMMAND_SERR); 10027 10028 err = tg3_test_interrupt(tp); 10029 10030 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 10031 10032 if (!err) 10033 return 0; 10034 10035 /* other failures */ 10036 if (err != -EIO) 10037 return err; 10038 10039 /* MSI test failed, go back to INTx mode */ 10040 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching " 10041 "to INTx mode. Please report this failure to the PCI " 10042 "maintainer and include system chipset information\n"); 10043 10044 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 10045 10046 pci_disable_msi(tp->pdev); 10047 10048 tg3_flag_clear(tp, USING_MSI); 10049 tp->napi[0].irq_vec = tp->pdev->irq; 10050 10051 err = tg3_request_irq(tp, 0); 10052 if (err) 10053 return err; 10054 10055 /* Need to reset the chip because the MSI cycle may have terminated 10056 * with Master Abort. 10057 */ 10058 tg3_full_lock(tp, 1); 10059 10060 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10061 err = tg3_init_hw(tp, 1); 10062 10063 tg3_full_unlock(tp); 10064 10065 if (err) 10066 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 10067 10068 return err; 10069 } 10070 10071 static int tg3_request_firmware(struct tg3 *tp) 10072 { 10073 const __be32 *fw_data; 10074 10075 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) { 10076 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n", 10077 tp->fw_needed); 10078 return -ENOENT; 10079 } 10080 10081 fw_data = (void *)tp->fw->data; 10082 10083 /* Firmware blob starts with version numbers, followed by 10084 * start address and _full_ length including BSS sections 10085 * (which must be longer than the actual data, of course 10086 */ 10087 10088 tp->fw_len = be32_to_cpu(fw_data[2]); /* includes bss */ 10089 if (tp->fw_len < (tp->fw->size - 12)) { 10090 netdev_err(tp->dev, "bogus length %d in \"%s\"\n", 10091 tp->fw_len, tp->fw_needed); 10092 release_firmware(tp->fw); 10093 tp->fw = NULL; 10094 return -EINVAL; 10095 } 10096 10097 /* We no longer need firmware; we have it. */ 10098 tp->fw_needed = NULL; 10099 return 0; 10100 } 10101 10102 static bool tg3_enable_msix(struct tg3 *tp) 10103 { 10104 int i, rc; 10105 struct msix_entry msix_ent[tp->irq_max]; 10106 10107 tp->irq_cnt = netif_get_num_default_rss_queues(); 10108 if (tp->irq_cnt > 1) { 10109 /* We want as many rx rings enabled as there are cpus. 10110 * In multiqueue MSI-X mode, the first MSI-X vector 10111 * only deals with link interrupts, etc, so we add 10112 * one to the number of vectors we are requesting. 10113 */ 10114 tp->irq_cnt = min_t(unsigned, tp->irq_cnt + 1, tp->irq_max); 10115 } 10116 10117 for (i = 0; i < tp->irq_max; i++) { 10118 msix_ent[i].entry = i; 10119 msix_ent[i].vector = 0; 10120 } 10121 10122 rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt); 10123 if (rc < 0) { 10124 return false; 10125 } else if (rc != 0) { 10126 if (pci_enable_msix(tp->pdev, msix_ent, rc)) 10127 return false; 10128 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n", 10129 tp->irq_cnt, rc); 10130 tp->irq_cnt = rc; 10131 } 10132 10133 for (i = 0; i < tp->irq_max; i++) 10134 tp->napi[i].irq_vec = msix_ent[i].vector; 10135 10136 netif_set_real_num_tx_queues(tp->dev, 1); 10137 rc = tp->irq_cnt > 1 ? tp->irq_cnt - 1 : 1; 10138 if (netif_set_real_num_rx_queues(tp->dev, rc)) { 10139 pci_disable_msix(tp->pdev); 10140 return false; 10141 } 10142 10143 if (tp->irq_cnt > 1) { 10144 tg3_flag_set(tp, ENABLE_RSS); 10145 10146 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 10147 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 10148 tg3_flag_set(tp, ENABLE_TSS); 10149 netif_set_real_num_tx_queues(tp->dev, tp->irq_cnt - 1); 10150 } 10151 } 10152 10153 return true; 10154 } 10155 10156 static void tg3_ints_init(struct tg3 *tp) 10157 { 10158 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) && 10159 !tg3_flag(tp, TAGGED_STATUS)) { 10160 /* All MSI supporting chips should support tagged 10161 * status. Assert that this is the case. 10162 */ 10163 netdev_warn(tp->dev, 10164 "MSI without TAGGED_STATUS? Not using MSI\n"); 10165 goto defcfg; 10166 } 10167 10168 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp)) 10169 tg3_flag_set(tp, USING_MSIX); 10170 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0) 10171 tg3_flag_set(tp, USING_MSI); 10172 10173 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 10174 u32 msi_mode = tr32(MSGINT_MODE); 10175 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) 10176 msi_mode |= MSGINT_MODE_MULTIVEC_EN; 10177 if (!tg3_flag(tp, 1SHOT_MSI)) 10178 msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE; 10179 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); 10180 } 10181 defcfg: 10182 if (!tg3_flag(tp, USING_MSIX)) { 10183 tp->irq_cnt = 1; 10184 tp->napi[0].irq_vec = tp->pdev->irq; 10185 netif_set_real_num_tx_queues(tp->dev, 1); 10186 netif_set_real_num_rx_queues(tp->dev, 1); 10187 } 10188 } 10189 10190 static void tg3_ints_fini(struct tg3 *tp) 10191 { 10192 if (tg3_flag(tp, USING_MSIX)) 10193 pci_disable_msix(tp->pdev); 10194 else if (tg3_flag(tp, USING_MSI)) 10195 pci_disable_msi(tp->pdev); 10196 tg3_flag_clear(tp, USING_MSI); 10197 tg3_flag_clear(tp, USING_MSIX); 10198 tg3_flag_clear(tp, ENABLE_RSS); 10199 tg3_flag_clear(tp, ENABLE_TSS); 10200 } 10201 10202 static int tg3_open(struct net_device *dev) 10203 { 10204 struct tg3 *tp = netdev_priv(dev); 10205 int i, err; 10206 10207 if (tp->fw_needed) { 10208 err = tg3_request_firmware(tp); 10209 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) { 10210 if (err) 10211 return err; 10212 } else if (err) { 10213 netdev_warn(tp->dev, "TSO capability disabled\n"); 10214 tg3_flag_clear(tp, TSO_CAPABLE); 10215 } else if (!tg3_flag(tp, TSO_CAPABLE)) { 10216 netdev_notice(tp->dev, "TSO capability restored\n"); 10217 tg3_flag_set(tp, TSO_CAPABLE); 10218 } 10219 } 10220 10221 netif_carrier_off(tp->dev); 10222 10223 err = tg3_power_up(tp); 10224 if (err) 10225 return err; 10226 10227 tg3_full_lock(tp, 0); 10228 10229 tg3_disable_ints(tp); 10230 tg3_flag_clear(tp, INIT_COMPLETE); 10231 10232 tg3_full_unlock(tp); 10233 10234 /* 10235 * Setup interrupts first so we know how 10236 * many NAPI resources to allocate 10237 */ 10238 tg3_ints_init(tp); 10239 10240 tg3_rss_check_indir_tbl(tp); 10241 10242 /* The placement of this call is tied 10243 * to the setup and use of Host TX descriptors. 10244 */ 10245 err = tg3_alloc_consistent(tp); 10246 if (err) 10247 goto err_out1; 10248 10249 tg3_napi_init(tp); 10250 10251 tg3_napi_enable(tp); 10252 10253 for (i = 0; i < tp->irq_cnt; i++) { 10254 struct tg3_napi *tnapi = &tp->napi[i]; 10255 err = tg3_request_irq(tp, i); 10256 if (err) { 10257 for (i--; i >= 0; i--) { 10258 tnapi = &tp->napi[i]; 10259 free_irq(tnapi->irq_vec, tnapi); 10260 } 10261 goto err_out2; 10262 } 10263 } 10264 10265 tg3_full_lock(tp, 0); 10266 10267 err = tg3_init_hw(tp, 1); 10268 if (err) { 10269 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10270 tg3_free_rings(tp); 10271 } 10272 10273 tg3_full_unlock(tp); 10274 10275 if (err) 10276 goto err_out3; 10277 10278 if (tg3_flag(tp, USING_MSI)) { 10279 err = tg3_test_msi(tp); 10280 10281 if (err) { 10282 tg3_full_lock(tp, 0); 10283 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10284 tg3_free_rings(tp); 10285 tg3_full_unlock(tp); 10286 10287 goto err_out2; 10288 } 10289 10290 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { 10291 u32 val = tr32(PCIE_TRANSACTION_CFG); 10292 10293 tw32(PCIE_TRANSACTION_CFG, 10294 val | PCIE_TRANS_CFG_1SHOT_MSI); 10295 } 10296 } 10297 10298 tg3_phy_start(tp); 10299 10300 tg3_hwmon_open(tp); 10301 10302 tg3_full_lock(tp, 0); 10303 10304 tg3_timer_start(tp); 10305 tg3_flag_set(tp, INIT_COMPLETE); 10306 tg3_enable_ints(tp); 10307 10308 tg3_full_unlock(tp); 10309 10310 netif_tx_start_all_queues(dev); 10311 10312 /* 10313 * Reset loopback feature if it was turned on while the device was down 10314 * make sure that it's installed properly now. 10315 */ 10316 if (dev->features & NETIF_F_LOOPBACK) 10317 tg3_set_loopback(dev, dev->features); 10318 10319 return 0; 10320 10321 err_out3: 10322 for (i = tp->irq_cnt - 1; i >= 0; i--) { 10323 struct tg3_napi *tnapi = &tp->napi[i]; 10324 free_irq(tnapi->irq_vec, tnapi); 10325 } 10326 10327 err_out2: 10328 tg3_napi_disable(tp); 10329 tg3_napi_fini(tp); 10330 tg3_free_consistent(tp); 10331 10332 err_out1: 10333 tg3_ints_fini(tp); 10334 tg3_frob_aux_power(tp, false); 10335 pci_set_power_state(tp->pdev, PCI_D3hot); 10336 return err; 10337 } 10338 10339 static int tg3_close(struct net_device *dev) 10340 { 10341 int i; 10342 struct tg3 *tp = netdev_priv(dev); 10343 10344 tg3_napi_disable(tp); 10345 tg3_reset_task_cancel(tp); 10346 10347 netif_tx_stop_all_queues(dev); 10348 10349 tg3_timer_stop(tp); 10350 10351 tg3_hwmon_close(tp); 10352 10353 tg3_phy_stop(tp); 10354 10355 tg3_full_lock(tp, 1); 10356 10357 tg3_disable_ints(tp); 10358 10359 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10360 tg3_free_rings(tp); 10361 tg3_flag_clear(tp, INIT_COMPLETE); 10362 10363 tg3_full_unlock(tp); 10364 10365 for (i = tp->irq_cnt - 1; i >= 0; i--) { 10366 struct tg3_napi *tnapi = &tp->napi[i]; 10367 free_irq(tnapi->irq_vec, tnapi); 10368 } 10369 10370 tg3_ints_fini(tp); 10371 10372 /* Clear stats across close / open calls */ 10373 memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev)); 10374 memset(&tp->estats_prev, 0, sizeof(tp->estats_prev)); 10375 10376 tg3_napi_fini(tp); 10377 10378 tg3_free_consistent(tp); 10379 10380 tg3_power_down(tp); 10381 10382 netif_carrier_off(tp->dev); 10383 10384 return 0; 10385 } 10386 10387 static inline u64 get_stat64(tg3_stat64_t *val) 10388 { 10389 return ((u64)val->high << 32) | ((u64)val->low); 10390 } 10391 10392 static u64 tg3_calc_crc_errors(struct tg3 *tp) 10393 { 10394 struct tg3_hw_stats *hw_stats = tp->hw_stats; 10395 10396 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10397 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 10398 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 10399 u32 val; 10400 10401 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 10402 tg3_writephy(tp, MII_TG3_TEST1, 10403 val | MII_TG3_TEST1_CRC_EN); 10404 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 10405 } else 10406 val = 0; 10407 10408 tp->phy_crc_errors += val; 10409 10410 return tp->phy_crc_errors; 10411 } 10412 10413 return get_stat64(&hw_stats->rx_fcs_errors); 10414 } 10415 10416 #define ESTAT_ADD(member) \ 10417 estats->member = old_estats->member + \ 10418 get_stat64(&hw_stats->member) 10419 10420 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) 10421 { 10422 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 10423 struct tg3_hw_stats *hw_stats = tp->hw_stats; 10424 10425 ESTAT_ADD(rx_octets); 10426 ESTAT_ADD(rx_fragments); 10427 ESTAT_ADD(rx_ucast_packets); 10428 ESTAT_ADD(rx_mcast_packets); 10429 ESTAT_ADD(rx_bcast_packets); 10430 ESTAT_ADD(rx_fcs_errors); 10431 ESTAT_ADD(rx_align_errors); 10432 ESTAT_ADD(rx_xon_pause_rcvd); 10433 ESTAT_ADD(rx_xoff_pause_rcvd); 10434 ESTAT_ADD(rx_mac_ctrl_rcvd); 10435 ESTAT_ADD(rx_xoff_entered); 10436 ESTAT_ADD(rx_frame_too_long_errors); 10437 ESTAT_ADD(rx_jabbers); 10438 ESTAT_ADD(rx_undersize_packets); 10439 ESTAT_ADD(rx_in_length_errors); 10440 ESTAT_ADD(rx_out_length_errors); 10441 ESTAT_ADD(rx_64_or_less_octet_packets); 10442 ESTAT_ADD(rx_65_to_127_octet_packets); 10443 ESTAT_ADD(rx_128_to_255_octet_packets); 10444 ESTAT_ADD(rx_256_to_511_octet_packets); 10445 ESTAT_ADD(rx_512_to_1023_octet_packets); 10446 ESTAT_ADD(rx_1024_to_1522_octet_packets); 10447 ESTAT_ADD(rx_1523_to_2047_octet_packets); 10448 ESTAT_ADD(rx_2048_to_4095_octet_packets); 10449 ESTAT_ADD(rx_4096_to_8191_octet_packets); 10450 ESTAT_ADD(rx_8192_to_9022_octet_packets); 10451 10452 ESTAT_ADD(tx_octets); 10453 ESTAT_ADD(tx_collisions); 10454 ESTAT_ADD(tx_xon_sent); 10455 ESTAT_ADD(tx_xoff_sent); 10456 ESTAT_ADD(tx_flow_control); 10457 ESTAT_ADD(tx_mac_errors); 10458 ESTAT_ADD(tx_single_collisions); 10459 ESTAT_ADD(tx_mult_collisions); 10460 ESTAT_ADD(tx_deferred); 10461 ESTAT_ADD(tx_excessive_collisions); 10462 ESTAT_ADD(tx_late_collisions); 10463 ESTAT_ADD(tx_collide_2times); 10464 ESTAT_ADD(tx_collide_3times); 10465 ESTAT_ADD(tx_collide_4times); 10466 ESTAT_ADD(tx_collide_5times); 10467 ESTAT_ADD(tx_collide_6times); 10468 ESTAT_ADD(tx_collide_7times); 10469 ESTAT_ADD(tx_collide_8times); 10470 ESTAT_ADD(tx_collide_9times); 10471 ESTAT_ADD(tx_collide_10times); 10472 ESTAT_ADD(tx_collide_11times); 10473 ESTAT_ADD(tx_collide_12times); 10474 ESTAT_ADD(tx_collide_13times); 10475 ESTAT_ADD(tx_collide_14times); 10476 ESTAT_ADD(tx_collide_15times); 10477 ESTAT_ADD(tx_ucast_packets); 10478 ESTAT_ADD(tx_mcast_packets); 10479 ESTAT_ADD(tx_bcast_packets); 10480 ESTAT_ADD(tx_carrier_sense_errors); 10481 ESTAT_ADD(tx_discards); 10482 ESTAT_ADD(tx_errors); 10483 10484 ESTAT_ADD(dma_writeq_full); 10485 ESTAT_ADD(dma_write_prioq_full); 10486 ESTAT_ADD(rxbds_empty); 10487 ESTAT_ADD(rx_discards); 10488 ESTAT_ADD(rx_errors); 10489 ESTAT_ADD(rx_threshold_hit); 10490 10491 ESTAT_ADD(dma_readq_full); 10492 ESTAT_ADD(dma_read_prioq_full); 10493 ESTAT_ADD(tx_comp_queue_full); 10494 10495 ESTAT_ADD(ring_set_send_prod_index); 10496 ESTAT_ADD(ring_status_update); 10497 ESTAT_ADD(nic_irqs); 10498 ESTAT_ADD(nic_avoided_irqs); 10499 ESTAT_ADD(nic_tx_threshold_hit); 10500 10501 ESTAT_ADD(mbuf_lwm_thresh_hit); 10502 } 10503 10504 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) 10505 { 10506 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 10507 struct tg3_hw_stats *hw_stats = tp->hw_stats; 10508 10509 stats->rx_packets = old_stats->rx_packets + 10510 get_stat64(&hw_stats->rx_ucast_packets) + 10511 get_stat64(&hw_stats->rx_mcast_packets) + 10512 get_stat64(&hw_stats->rx_bcast_packets); 10513 10514 stats->tx_packets = old_stats->tx_packets + 10515 get_stat64(&hw_stats->tx_ucast_packets) + 10516 get_stat64(&hw_stats->tx_mcast_packets) + 10517 get_stat64(&hw_stats->tx_bcast_packets); 10518 10519 stats->rx_bytes = old_stats->rx_bytes + 10520 get_stat64(&hw_stats->rx_octets); 10521 stats->tx_bytes = old_stats->tx_bytes + 10522 get_stat64(&hw_stats->tx_octets); 10523 10524 stats->rx_errors = old_stats->rx_errors + 10525 get_stat64(&hw_stats->rx_errors); 10526 stats->tx_errors = old_stats->tx_errors + 10527 get_stat64(&hw_stats->tx_errors) + 10528 get_stat64(&hw_stats->tx_mac_errors) + 10529 get_stat64(&hw_stats->tx_carrier_sense_errors) + 10530 get_stat64(&hw_stats->tx_discards); 10531 10532 stats->multicast = old_stats->multicast + 10533 get_stat64(&hw_stats->rx_mcast_packets); 10534 stats->collisions = old_stats->collisions + 10535 get_stat64(&hw_stats->tx_collisions); 10536 10537 stats->rx_length_errors = old_stats->rx_length_errors + 10538 get_stat64(&hw_stats->rx_frame_too_long_errors) + 10539 get_stat64(&hw_stats->rx_undersize_packets); 10540 10541 stats->rx_over_errors = old_stats->rx_over_errors + 10542 get_stat64(&hw_stats->rxbds_empty); 10543 stats->rx_frame_errors = old_stats->rx_frame_errors + 10544 get_stat64(&hw_stats->rx_align_errors); 10545 stats->tx_aborted_errors = old_stats->tx_aborted_errors + 10546 get_stat64(&hw_stats->tx_discards); 10547 stats->tx_carrier_errors = old_stats->tx_carrier_errors + 10548 get_stat64(&hw_stats->tx_carrier_sense_errors); 10549 10550 stats->rx_crc_errors = old_stats->rx_crc_errors + 10551 tg3_calc_crc_errors(tp); 10552 10553 stats->rx_missed_errors = old_stats->rx_missed_errors + 10554 get_stat64(&hw_stats->rx_discards); 10555 10556 stats->rx_dropped = tp->rx_dropped; 10557 stats->tx_dropped = tp->tx_dropped; 10558 } 10559 10560 static int tg3_get_regs_len(struct net_device *dev) 10561 { 10562 return TG3_REG_BLK_SIZE; 10563 } 10564 10565 static void tg3_get_regs(struct net_device *dev, 10566 struct ethtool_regs *regs, void *_p) 10567 { 10568 struct tg3 *tp = netdev_priv(dev); 10569 10570 regs->version = 0; 10571 10572 memset(_p, 0, TG3_REG_BLK_SIZE); 10573 10574 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10575 return; 10576 10577 tg3_full_lock(tp, 0); 10578 10579 tg3_dump_legacy_regs(tp, (u32 *)_p); 10580 10581 tg3_full_unlock(tp); 10582 } 10583 10584 static int tg3_get_eeprom_len(struct net_device *dev) 10585 { 10586 struct tg3 *tp = netdev_priv(dev); 10587 10588 return tp->nvram_size; 10589 } 10590 10591 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 10592 { 10593 struct tg3 *tp = netdev_priv(dev); 10594 int ret; 10595 u8 *pd; 10596 u32 i, offset, len, b_offset, b_count; 10597 __be32 val; 10598 10599 if (tg3_flag(tp, NO_NVRAM)) 10600 return -EINVAL; 10601 10602 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10603 return -EAGAIN; 10604 10605 offset = eeprom->offset; 10606 len = eeprom->len; 10607 eeprom->len = 0; 10608 10609 eeprom->magic = TG3_EEPROM_MAGIC; 10610 10611 if (offset & 3) { 10612 /* adjustments to start on required 4 byte boundary */ 10613 b_offset = offset & 3; 10614 b_count = 4 - b_offset; 10615 if (b_count > len) { 10616 /* i.e. offset=1 len=2 */ 10617 b_count = len; 10618 } 10619 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val); 10620 if (ret) 10621 return ret; 10622 memcpy(data, ((char *)&val) + b_offset, b_count); 10623 len -= b_count; 10624 offset += b_count; 10625 eeprom->len += b_count; 10626 } 10627 10628 /* read bytes up to the last 4 byte boundary */ 10629 pd = &data[eeprom->len]; 10630 for (i = 0; i < (len - (len & 3)); i += 4) { 10631 ret = tg3_nvram_read_be32(tp, offset + i, &val); 10632 if (ret) { 10633 eeprom->len += i; 10634 return ret; 10635 } 10636 memcpy(pd + i, &val, 4); 10637 } 10638 eeprom->len += i; 10639 10640 if (len & 3) { 10641 /* read last bytes not ending on 4 byte boundary */ 10642 pd = &data[eeprom->len]; 10643 b_count = len & 3; 10644 b_offset = offset + len - b_count; 10645 ret = tg3_nvram_read_be32(tp, b_offset, &val); 10646 if (ret) 10647 return ret; 10648 memcpy(pd, &val, b_count); 10649 eeprom->len += b_count; 10650 } 10651 return 0; 10652 } 10653 10654 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 10655 { 10656 struct tg3 *tp = netdev_priv(dev); 10657 int ret; 10658 u32 offset, len, b_offset, odd_len; 10659 u8 *buf; 10660 __be32 start, end; 10661 10662 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 10663 return -EAGAIN; 10664 10665 if (tg3_flag(tp, NO_NVRAM) || 10666 eeprom->magic != TG3_EEPROM_MAGIC) 10667 return -EINVAL; 10668 10669 offset = eeprom->offset; 10670 len = eeprom->len; 10671 10672 if ((b_offset = (offset & 3))) { 10673 /* adjustments to start on required 4 byte boundary */ 10674 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start); 10675 if (ret) 10676 return ret; 10677 len += b_offset; 10678 offset &= ~3; 10679 if (len < 4) 10680 len = 4; 10681 } 10682 10683 odd_len = 0; 10684 if (len & 3) { 10685 /* adjustments to end on required 4 byte boundary */ 10686 odd_len = 1; 10687 len = (len + 3) & ~3; 10688 ret = tg3_nvram_read_be32(tp, offset+len-4, &end); 10689 if (ret) 10690 return ret; 10691 } 10692 10693 buf = data; 10694 if (b_offset || odd_len) { 10695 buf = kmalloc(len, GFP_KERNEL); 10696 if (!buf) 10697 return -ENOMEM; 10698 if (b_offset) 10699 memcpy(buf, &start, 4); 10700 if (odd_len) 10701 memcpy(buf+len-4, &end, 4); 10702 memcpy(buf + b_offset, data, eeprom->len); 10703 } 10704 10705 ret = tg3_nvram_write_block(tp, offset, len, buf); 10706 10707 if (buf != data) 10708 kfree(buf); 10709 10710 return ret; 10711 } 10712 10713 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) 10714 { 10715 struct tg3 *tp = netdev_priv(dev); 10716 10717 if (tg3_flag(tp, USE_PHYLIB)) { 10718 struct phy_device *phydev; 10719 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 10720 return -EAGAIN; 10721 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 10722 return phy_ethtool_gset(phydev, cmd); 10723 } 10724 10725 cmd->supported = (SUPPORTED_Autoneg); 10726 10727 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 10728 cmd->supported |= (SUPPORTED_1000baseT_Half | 10729 SUPPORTED_1000baseT_Full); 10730 10731 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 10732 cmd->supported |= (SUPPORTED_100baseT_Half | 10733 SUPPORTED_100baseT_Full | 10734 SUPPORTED_10baseT_Half | 10735 SUPPORTED_10baseT_Full | 10736 SUPPORTED_TP); 10737 cmd->port = PORT_TP; 10738 } else { 10739 cmd->supported |= SUPPORTED_FIBRE; 10740 cmd->port = PORT_FIBRE; 10741 } 10742 10743 cmd->advertising = tp->link_config.advertising; 10744 if (tg3_flag(tp, PAUSE_AUTONEG)) { 10745 if (tp->link_config.flowctrl & FLOW_CTRL_RX) { 10746 if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 10747 cmd->advertising |= ADVERTISED_Pause; 10748 } else { 10749 cmd->advertising |= ADVERTISED_Pause | 10750 ADVERTISED_Asym_Pause; 10751 } 10752 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 10753 cmd->advertising |= ADVERTISED_Asym_Pause; 10754 } 10755 } 10756 if (netif_running(dev) && netif_carrier_ok(dev)) { 10757 ethtool_cmd_speed_set(cmd, tp->link_config.active_speed); 10758 cmd->duplex = tp->link_config.active_duplex; 10759 cmd->lp_advertising = tp->link_config.rmt_adv; 10760 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 10761 if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) 10762 cmd->eth_tp_mdix = ETH_TP_MDI_X; 10763 else 10764 cmd->eth_tp_mdix = ETH_TP_MDI; 10765 } 10766 } else { 10767 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); 10768 cmd->duplex = DUPLEX_UNKNOWN; 10769 cmd->eth_tp_mdix = ETH_TP_MDI_INVALID; 10770 } 10771 cmd->phy_address = tp->phy_addr; 10772 cmd->transceiver = XCVR_INTERNAL; 10773 cmd->autoneg = tp->link_config.autoneg; 10774 cmd->maxtxpkt = 0; 10775 cmd->maxrxpkt = 0; 10776 return 0; 10777 } 10778 10779 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 10780 { 10781 struct tg3 *tp = netdev_priv(dev); 10782 u32 speed = ethtool_cmd_speed(cmd); 10783 10784 if (tg3_flag(tp, USE_PHYLIB)) { 10785 struct phy_device *phydev; 10786 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 10787 return -EAGAIN; 10788 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 10789 return phy_ethtool_sset(phydev, cmd); 10790 } 10791 10792 if (cmd->autoneg != AUTONEG_ENABLE && 10793 cmd->autoneg != AUTONEG_DISABLE) 10794 return -EINVAL; 10795 10796 if (cmd->autoneg == AUTONEG_DISABLE && 10797 cmd->duplex != DUPLEX_FULL && 10798 cmd->duplex != DUPLEX_HALF) 10799 return -EINVAL; 10800 10801 if (cmd->autoneg == AUTONEG_ENABLE) { 10802 u32 mask = ADVERTISED_Autoneg | 10803 ADVERTISED_Pause | 10804 ADVERTISED_Asym_Pause; 10805 10806 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 10807 mask |= ADVERTISED_1000baseT_Half | 10808 ADVERTISED_1000baseT_Full; 10809 10810 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 10811 mask |= ADVERTISED_100baseT_Half | 10812 ADVERTISED_100baseT_Full | 10813 ADVERTISED_10baseT_Half | 10814 ADVERTISED_10baseT_Full | 10815 ADVERTISED_TP; 10816 else 10817 mask |= ADVERTISED_FIBRE; 10818 10819 if (cmd->advertising & ~mask) 10820 return -EINVAL; 10821 10822 mask &= (ADVERTISED_1000baseT_Half | 10823 ADVERTISED_1000baseT_Full | 10824 ADVERTISED_100baseT_Half | 10825 ADVERTISED_100baseT_Full | 10826 ADVERTISED_10baseT_Half | 10827 ADVERTISED_10baseT_Full); 10828 10829 cmd->advertising &= mask; 10830 } else { 10831 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 10832 if (speed != SPEED_1000) 10833 return -EINVAL; 10834 10835 if (cmd->duplex != DUPLEX_FULL) 10836 return -EINVAL; 10837 } else { 10838 if (speed != SPEED_100 && 10839 speed != SPEED_10) 10840 return -EINVAL; 10841 } 10842 } 10843 10844 tg3_full_lock(tp, 0); 10845 10846 tp->link_config.autoneg = cmd->autoneg; 10847 if (cmd->autoneg == AUTONEG_ENABLE) { 10848 tp->link_config.advertising = (cmd->advertising | 10849 ADVERTISED_Autoneg); 10850 tp->link_config.speed = SPEED_UNKNOWN; 10851 tp->link_config.duplex = DUPLEX_UNKNOWN; 10852 } else { 10853 tp->link_config.advertising = 0; 10854 tp->link_config.speed = speed; 10855 tp->link_config.duplex = cmd->duplex; 10856 } 10857 10858 if (netif_running(dev)) 10859 tg3_setup_phy(tp, 1); 10860 10861 tg3_full_unlock(tp); 10862 10863 return 0; 10864 } 10865 10866 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 10867 { 10868 struct tg3 *tp = netdev_priv(dev); 10869 10870 strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); 10871 strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version)); 10872 strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version)); 10873 strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info)); 10874 } 10875 10876 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 10877 { 10878 struct tg3 *tp = netdev_priv(dev); 10879 10880 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev)) 10881 wol->supported = WAKE_MAGIC; 10882 else 10883 wol->supported = 0; 10884 wol->wolopts = 0; 10885 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev)) 10886 wol->wolopts = WAKE_MAGIC; 10887 memset(&wol->sopass, 0, sizeof(wol->sopass)); 10888 } 10889 10890 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 10891 { 10892 struct tg3 *tp = netdev_priv(dev); 10893 struct device *dp = &tp->pdev->dev; 10894 10895 if (wol->wolopts & ~WAKE_MAGIC) 10896 return -EINVAL; 10897 if ((wol->wolopts & WAKE_MAGIC) && 10898 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp))) 10899 return -EINVAL; 10900 10901 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); 10902 10903 spin_lock_bh(&tp->lock); 10904 if (device_may_wakeup(dp)) 10905 tg3_flag_set(tp, WOL_ENABLE); 10906 else 10907 tg3_flag_clear(tp, WOL_ENABLE); 10908 spin_unlock_bh(&tp->lock); 10909 10910 return 0; 10911 } 10912 10913 static u32 tg3_get_msglevel(struct net_device *dev) 10914 { 10915 struct tg3 *tp = netdev_priv(dev); 10916 return tp->msg_enable; 10917 } 10918 10919 static void tg3_set_msglevel(struct net_device *dev, u32 value) 10920 { 10921 struct tg3 *tp = netdev_priv(dev); 10922 tp->msg_enable = value; 10923 } 10924 10925 static int tg3_nway_reset(struct net_device *dev) 10926 { 10927 struct tg3 *tp = netdev_priv(dev); 10928 int r; 10929 10930 if (!netif_running(dev)) 10931 return -EAGAIN; 10932 10933 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 10934 return -EINVAL; 10935 10936 if (tg3_flag(tp, USE_PHYLIB)) { 10937 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 10938 return -EAGAIN; 10939 r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 10940 } else { 10941 u32 bmcr; 10942 10943 spin_lock_bh(&tp->lock); 10944 r = -EINVAL; 10945 tg3_readphy(tp, MII_BMCR, &bmcr); 10946 if (!tg3_readphy(tp, MII_BMCR, &bmcr) && 10947 ((bmcr & BMCR_ANENABLE) || 10948 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) { 10949 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART | 10950 BMCR_ANENABLE); 10951 r = 0; 10952 } 10953 spin_unlock_bh(&tp->lock); 10954 } 10955 10956 return r; 10957 } 10958 10959 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 10960 { 10961 struct tg3 *tp = netdev_priv(dev); 10962 10963 ering->rx_max_pending = tp->rx_std_ring_mask; 10964 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 10965 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask; 10966 else 10967 ering->rx_jumbo_max_pending = 0; 10968 10969 ering->tx_max_pending = TG3_TX_RING_SIZE - 1; 10970 10971 ering->rx_pending = tp->rx_pending; 10972 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 10973 ering->rx_jumbo_pending = tp->rx_jumbo_pending; 10974 else 10975 ering->rx_jumbo_pending = 0; 10976 10977 ering->tx_pending = tp->napi[0].tx_pending; 10978 } 10979 10980 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 10981 { 10982 struct tg3 *tp = netdev_priv(dev); 10983 int i, irq_sync = 0, err = 0; 10984 10985 if ((ering->rx_pending > tp->rx_std_ring_mask) || 10986 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || 10987 (ering->tx_pending > TG3_TX_RING_SIZE - 1) || 10988 (ering->tx_pending <= MAX_SKB_FRAGS) || 10989 (tg3_flag(tp, TSO_BUG) && 10990 (ering->tx_pending <= (MAX_SKB_FRAGS * 3)))) 10991 return -EINVAL; 10992 10993 if (netif_running(dev)) { 10994 tg3_phy_stop(tp); 10995 tg3_netif_stop(tp); 10996 irq_sync = 1; 10997 } 10998 10999 tg3_full_lock(tp, irq_sync); 11000 11001 tp->rx_pending = ering->rx_pending; 11002 11003 if (tg3_flag(tp, MAX_RXPEND_64) && 11004 tp->rx_pending > 63) 11005 tp->rx_pending = 63; 11006 tp->rx_jumbo_pending = ering->rx_jumbo_pending; 11007 11008 for (i = 0; i < tp->irq_max; i++) 11009 tp->napi[i].tx_pending = ering->tx_pending; 11010 11011 if (netif_running(dev)) { 11012 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11013 err = tg3_restart_hw(tp, 1); 11014 if (!err) 11015 tg3_netif_start(tp); 11016 } 11017 11018 tg3_full_unlock(tp); 11019 11020 if (irq_sync && !err) 11021 tg3_phy_start(tp); 11022 11023 return err; 11024 } 11025 11026 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 11027 { 11028 struct tg3 *tp = netdev_priv(dev); 11029 11030 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG); 11031 11032 if (tp->link_config.flowctrl & FLOW_CTRL_RX) 11033 epause->rx_pause = 1; 11034 else 11035 epause->rx_pause = 0; 11036 11037 if (tp->link_config.flowctrl & FLOW_CTRL_TX) 11038 epause->tx_pause = 1; 11039 else 11040 epause->tx_pause = 0; 11041 } 11042 11043 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 11044 { 11045 struct tg3 *tp = netdev_priv(dev); 11046 int err = 0; 11047 11048 if (tg3_flag(tp, USE_PHYLIB)) { 11049 u32 newadv; 11050 struct phy_device *phydev; 11051 11052 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 11053 11054 if (!(phydev->supported & SUPPORTED_Pause) || 11055 (!(phydev->supported & SUPPORTED_Asym_Pause) && 11056 (epause->rx_pause != epause->tx_pause))) 11057 return -EINVAL; 11058 11059 tp->link_config.flowctrl = 0; 11060 if (epause->rx_pause) { 11061 tp->link_config.flowctrl |= FLOW_CTRL_RX; 11062 11063 if (epause->tx_pause) { 11064 tp->link_config.flowctrl |= FLOW_CTRL_TX; 11065 newadv = ADVERTISED_Pause; 11066 } else 11067 newadv = ADVERTISED_Pause | 11068 ADVERTISED_Asym_Pause; 11069 } else if (epause->tx_pause) { 11070 tp->link_config.flowctrl |= FLOW_CTRL_TX; 11071 newadv = ADVERTISED_Asym_Pause; 11072 } else 11073 newadv = 0; 11074 11075 if (epause->autoneg) 11076 tg3_flag_set(tp, PAUSE_AUTONEG); 11077 else 11078 tg3_flag_clear(tp, PAUSE_AUTONEG); 11079 11080 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 11081 u32 oldadv = phydev->advertising & 11082 (ADVERTISED_Pause | ADVERTISED_Asym_Pause); 11083 if (oldadv != newadv) { 11084 phydev->advertising &= 11085 ~(ADVERTISED_Pause | 11086 ADVERTISED_Asym_Pause); 11087 phydev->advertising |= newadv; 11088 if (phydev->autoneg) { 11089 /* 11090 * Always renegotiate the link to 11091 * inform our link partner of our 11092 * flow control settings, even if the 11093 * flow control is forced. Let 11094 * tg3_adjust_link() do the final 11095 * flow control setup. 11096 */ 11097 return phy_start_aneg(phydev); 11098 } 11099 } 11100 11101 if (!epause->autoneg) 11102 tg3_setup_flow_control(tp, 0, 0); 11103 } else { 11104 tp->link_config.advertising &= 11105 ~(ADVERTISED_Pause | 11106 ADVERTISED_Asym_Pause); 11107 tp->link_config.advertising |= newadv; 11108 } 11109 } else { 11110 int irq_sync = 0; 11111 11112 if (netif_running(dev)) { 11113 tg3_netif_stop(tp); 11114 irq_sync = 1; 11115 } 11116 11117 tg3_full_lock(tp, irq_sync); 11118 11119 if (epause->autoneg) 11120 tg3_flag_set(tp, PAUSE_AUTONEG); 11121 else 11122 tg3_flag_clear(tp, PAUSE_AUTONEG); 11123 if (epause->rx_pause) 11124 tp->link_config.flowctrl |= FLOW_CTRL_RX; 11125 else 11126 tp->link_config.flowctrl &= ~FLOW_CTRL_RX; 11127 if (epause->tx_pause) 11128 tp->link_config.flowctrl |= FLOW_CTRL_TX; 11129 else 11130 tp->link_config.flowctrl &= ~FLOW_CTRL_TX; 11131 11132 if (netif_running(dev)) { 11133 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11134 err = tg3_restart_hw(tp, 1); 11135 if (!err) 11136 tg3_netif_start(tp); 11137 } 11138 11139 tg3_full_unlock(tp); 11140 } 11141 11142 return err; 11143 } 11144 11145 static int tg3_get_sset_count(struct net_device *dev, int sset) 11146 { 11147 switch (sset) { 11148 case ETH_SS_TEST: 11149 return TG3_NUM_TEST; 11150 case ETH_SS_STATS: 11151 return TG3_NUM_STATS; 11152 default: 11153 return -EOPNOTSUPP; 11154 } 11155 } 11156 11157 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, 11158 u32 *rules __always_unused) 11159 { 11160 struct tg3 *tp = netdev_priv(dev); 11161 11162 if (!tg3_flag(tp, SUPPORT_MSIX)) 11163 return -EOPNOTSUPP; 11164 11165 switch (info->cmd) { 11166 case ETHTOOL_GRXRINGS: 11167 if (netif_running(tp->dev)) 11168 info->data = tp->irq_cnt; 11169 else { 11170 info->data = num_online_cpus(); 11171 if (info->data > TG3_IRQ_MAX_VECS_RSS) 11172 info->data = TG3_IRQ_MAX_VECS_RSS; 11173 } 11174 11175 /* The first interrupt vector only 11176 * handles link interrupts. 11177 */ 11178 info->data -= 1; 11179 return 0; 11180 11181 default: 11182 return -EOPNOTSUPP; 11183 } 11184 } 11185 11186 static u32 tg3_get_rxfh_indir_size(struct net_device *dev) 11187 { 11188 u32 size = 0; 11189 struct tg3 *tp = netdev_priv(dev); 11190 11191 if (tg3_flag(tp, SUPPORT_MSIX)) 11192 size = TG3_RSS_INDIR_TBL_SIZE; 11193 11194 return size; 11195 } 11196 11197 static int tg3_get_rxfh_indir(struct net_device *dev, u32 *indir) 11198 { 11199 struct tg3 *tp = netdev_priv(dev); 11200 int i; 11201 11202 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 11203 indir[i] = tp->rss_ind_tbl[i]; 11204 11205 return 0; 11206 } 11207 11208 static int tg3_set_rxfh_indir(struct net_device *dev, const u32 *indir) 11209 { 11210 struct tg3 *tp = netdev_priv(dev); 11211 size_t i; 11212 11213 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 11214 tp->rss_ind_tbl[i] = indir[i]; 11215 11216 if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS)) 11217 return 0; 11218 11219 /* It is legal to write the indirection 11220 * table while the device is running. 11221 */ 11222 tg3_full_lock(tp, 0); 11223 tg3_rss_write_indir_tbl(tp); 11224 tg3_full_unlock(tp); 11225 11226 return 0; 11227 } 11228 11229 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 11230 { 11231 switch (stringset) { 11232 case ETH_SS_STATS: 11233 memcpy(buf, ðtool_stats_keys, sizeof(ethtool_stats_keys)); 11234 break; 11235 case ETH_SS_TEST: 11236 memcpy(buf, ðtool_test_keys, sizeof(ethtool_test_keys)); 11237 break; 11238 default: 11239 WARN_ON(1); /* we need a WARN() */ 11240 break; 11241 } 11242 } 11243 11244 static int tg3_set_phys_id(struct net_device *dev, 11245 enum ethtool_phys_id_state state) 11246 { 11247 struct tg3 *tp = netdev_priv(dev); 11248 11249 if (!netif_running(tp->dev)) 11250 return -EAGAIN; 11251 11252 switch (state) { 11253 case ETHTOOL_ID_ACTIVE: 11254 return 1; /* cycle on/off once per second */ 11255 11256 case ETHTOOL_ID_ON: 11257 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 11258 LED_CTRL_1000MBPS_ON | 11259 LED_CTRL_100MBPS_ON | 11260 LED_CTRL_10MBPS_ON | 11261 LED_CTRL_TRAFFIC_OVERRIDE | 11262 LED_CTRL_TRAFFIC_BLINK | 11263 LED_CTRL_TRAFFIC_LED); 11264 break; 11265 11266 case ETHTOOL_ID_OFF: 11267 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 11268 LED_CTRL_TRAFFIC_OVERRIDE); 11269 break; 11270 11271 case ETHTOOL_ID_INACTIVE: 11272 tw32(MAC_LED_CTRL, tp->led_ctrl); 11273 break; 11274 } 11275 11276 return 0; 11277 } 11278 11279 static void tg3_get_ethtool_stats(struct net_device *dev, 11280 struct ethtool_stats *estats, u64 *tmp_stats) 11281 { 11282 struct tg3 *tp = netdev_priv(dev); 11283 11284 if (tp->hw_stats) 11285 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats); 11286 else 11287 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats)); 11288 } 11289 11290 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen) 11291 { 11292 int i; 11293 __be32 *buf; 11294 u32 offset = 0, len = 0; 11295 u32 magic, val; 11296 11297 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic)) 11298 return NULL; 11299 11300 if (magic == TG3_EEPROM_MAGIC) { 11301 for (offset = TG3_NVM_DIR_START; 11302 offset < TG3_NVM_DIR_END; 11303 offset += TG3_NVM_DIRENT_SIZE) { 11304 if (tg3_nvram_read(tp, offset, &val)) 11305 return NULL; 11306 11307 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == 11308 TG3_NVM_DIRTYPE_EXTVPD) 11309 break; 11310 } 11311 11312 if (offset != TG3_NVM_DIR_END) { 11313 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4; 11314 if (tg3_nvram_read(tp, offset + 4, &offset)) 11315 return NULL; 11316 11317 offset = tg3_nvram_logical_addr(tp, offset); 11318 } 11319 } 11320 11321 if (!offset || !len) { 11322 offset = TG3_NVM_VPD_OFF; 11323 len = TG3_NVM_VPD_LEN; 11324 } 11325 11326 buf = kmalloc(len, GFP_KERNEL); 11327 if (buf == NULL) 11328 return NULL; 11329 11330 if (magic == TG3_EEPROM_MAGIC) { 11331 for (i = 0; i < len; i += 4) { 11332 /* The data is in little-endian format in NVRAM. 11333 * Use the big-endian read routines to preserve 11334 * the byte order as it exists in NVRAM. 11335 */ 11336 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4])) 11337 goto error; 11338 } 11339 } else { 11340 u8 *ptr; 11341 ssize_t cnt; 11342 unsigned int pos = 0; 11343 11344 ptr = (u8 *)&buf[0]; 11345 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) { 11346 cnt = pci_read_vpd(tp->pdev, pos, 11347 len - pos, ptr); 11348 if (cnt == -ETIMEDOUT || cnt == -EINTR) 11349 cnt = 0; 11350 else if (cnt < 0) 11351 goto error; 11352 } 11353 if (pos != len) 11354 goto error; 11355 } 11356 11357 *vpdlen = len; 11358 11359 return buf; 11360 11361 error: 11362 kfree(buf); 11363 return NULL; 11364 } 11365 11366 #define NVRAM_TEST_SIZE 0x100 11367 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14 11368 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18 11369 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c 11370 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20 11371 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24 11372 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50 11373 #define NVRAM_SELFBOOT_HW_SIZE 0x20 11374 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c 11375 11376 static int tg3_test_nvram(struct tg3 *tp) 11377 { 11378 u32 csum, magic, len; 11379 __be32 *buf; 11380 int i, j, k, err = 0, size; 11381 11382 if (tg3_flag(tp, NO_NVRAM)) 11383 return 0; 11384 11385 if (tg3_nvram_read(tp, 0, &magic) != 0) 11386 return -EIO; 11387 11388 if (magic == TG3_EEPROM_MAGIC) 11389 size = NVRAM_TEST_SIZE; 11390 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) { 11391 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) == 11392 TG3_EEPROM_SB_FORMAT_1) { 11393 switch (magic & TG3_EEPROM_SB_REVISION_MASK) { 11394 case TG3_EEPROM_SB_REVISION_0: 11395 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE; 11396 break; 11397 case TG3_EEPROM_SB_REVISION_2: 11398 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE; 11399 break; 11400 case TG3_EEPROM_SB_REVISION_3: 11401 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE; 11402 break; 11403 case TG3_EEPROM_SB_REVISION_4: 11404 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE; 11405 break; 11406 case TG3_EEPROM_SB_REVISION_5: 11407 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE; 11408 break; 11409 case TG3_EEPROM_SB_REVISION_6: 11410 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE; 11411 break; 11412 default: 11413 return -EIO; 11414 } 11415 } else 11416 return 0; 11417 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 11418 size = NVRAM_SELFBOOT_HW_SIZE; 11419 else 11420 return -EIO; 11421 11422 buf = kmalloc(size, GFP_KERNEL); 11423 if (buf == NULL) 11424 return -ENOMEM; 11425 11426 err = -EIO; 11427 for (i = 0, j = 0; i < size; i += 4, j++) { 11428 err = tg3_nvram_read_be32(tp, i, &buf[j]); 11429 if (err) 11430 break; 11431 } 11432 if (i < size) 11433 goto out; 11434 11435 /* Selfboot format */ 11436 magic = be32_to_cpu(buf[0]); 11437 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 11438 TG3_EEPROM_MAGIC_FW) { 11439 u8 *buf8 = (u8 *) buf, csum8 = 0; 11440 11441 if ((magic & TG3_EEPROM_SB_REVISION_MASK) == 11442 TG3_EEPROM_SB_REVISION_2) { 11443 /* For rev 2, the csum doesn't include the MBA. */ 11444 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++) 11445 csum8 += buf8[i]; 11446 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++) 11447 csum8 += buf8[i]; 11448 } else { 11449 for (i = 0; i < size; i++) 11450 csum8 += buf8[i]; 11451 } 11452 11453 if (csum8 == 0) { 11454 err = 0; 11455 goto out; 11456 } 11457 11458 err = -EIO; 11459 goto out; 11460 } 11461 11462 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 11463 TG3_EEPROM_MAGIC_HW) { 11464 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 11465 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 11466 u8 *buf8 = (u8 *) buf; 11467 11468 /* Separate the parity bits and the data bytes. */ 11469 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) { 11470 if ((i == 0) || (i == 8)) { 11471 int l; 11472 u8 msk; 11473 11474 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1) 11475 parity[k++] = buf8[i] & msk; 11476 i++; 11477 } else if (i == 16) { 11478 int l; 11479 u8 msk; 11480 11481 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1) 11482 parity[k++] = buf8[i] & msk; 11483 i++; 11484 11485 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1) 11486 parity[k++] = buf8[i] & msk; 11487 i++; 11488 } 11489 data[j++] = buf8[i]; 11490 } 11491 11492 err = -EIO; 11493 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) { 11494 u8 hw8 = hweight8(data[i]); 11495 11496 if ((hw8 & 0x1) && parity[i]) 11497 goto out; 11498 else if (!(hw8 & 0x1) && !parity[i]) 11499 goto out; 11500 } 11501 err = 0; 11502 goto out; 11503 } 11504 11505 err = -EIO; 11506 11507 /* Bootstrap checksum at offset 0x10 */ 11508 csum = calc_crc((unsigned char *) buf, 0x10); 11509 if (csum != le32_to_cpu(buf[0x10/4])) 11510 goto out; 11511 11512 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 11513 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 11514 if (csum != le32_to_cpu(buf[0xfc/4])) 11515 goto out; 11516 11517 kfree(buf); 11518 11519 buf = tg3_vpd_readblock(tp, &len); 11520 if (!buf) 11521 return -ENOMEM; 11522 11523 i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA); 11524 if (i > 0) { 11525 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]); 11526 if (j < 0) 11527 goto out; 11528 11529 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len) 11530 goto out; 11531 11532 i += PCI_VPD_LRDT_TAG_SIZE; 11533 j = pci_vpd_find_info_keyword((u8 *)buf, i, j, 11534 PCI_VPD_RO_KEYWORD_CHKSUM); 11535 if (j > 0) { 11536 u8 csum8 = 0; 11537 11538 j += PCI_VPD_INFO_FLD_HDR_SIZE; 11539 11540 for (i = 0; i <= j; i++) 11541 csum8 += ((u8 *)buf)[i]; 11542 11543 if (csum8) 11544 goto out; 11545 } 11546 } 11547 11548 err = 0; 11549 11550 out: 11551 kfree(buf); 11552 return err; 11553 } 11554 11555 #define TG3_SERDES_TIMEOUT_SEC 2 11556 #define TG3_COPPER_TIMEOUT_SEC 6 11557 11558 static int tg3_test_link(struct tg3 *tp) 11559 { 11560 int i, max; 11561 11562 if (!netif_running(tp->dev)) 11563 return -ENODEV; 11564 11565 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 11566 max = TG3_SERDES_TIMEOUT_SEC; 11567 else 11568 max = TG3_COPPER_TIMEOUT_SEC; 11569 11570 for (i = 0; i < max; i++) { 11571 if (netif_carrier_ok(tp->dev)) 11572 return 0; 11573 11574 if (msleep_interruptible(1000)) 11575 break; 11576 } 11577 11578 return -EIO; 11579 } 11580 11581 /* Only test the commonly used registers */ 11582 static int tg3_test_registers(struct tg3 *tp) 11583 { 11584 int i, is_5705, is_5750; 11585 u32 offset, read_mask, write_mask, val, save_val, read_val; 11586 static struct { 11587 u16 offset; 11588 u16 flags; 11589 #define TG3_FL_5705 0x1 11590 #define TG3_FL_NOT_5705 0x2 11591 #define TG3_FL_NOT_5788 0x4 11592 #define TG3_FL_NOT_5750 0x8 11593 u32 read_mask; 11594 u32 write_mask; 11595 } reg_tbl[] = { 11596 /* MAC Control Registers */ 11597 { MAC_MODE, TG3_FL_NOT_5705, 11598 0x00000000, 0x00ef6f8c }, 11599 { MAC_MODE, TG3_FL_5705, 11600 0x00000000, 0x01ef6b8c }, 11601 { MAC_STATUS, TG3_FL_NOT_5705, 11602 0x03800107, 0x00000000 }, 11603 { MAC_STATUS, TG3_FL_5705, 11604 0x03800100, 0x00000000 }, 11605 { MAC_ADDR_0_HIGH, 0x0000, 11606 0x00000000, 0x0000ffff }, 11607 { MAC_ADDR_0_LOW, 0x0000, 11608 0x00000000, 0xffffffff }, 11609 { MAC_RX_MTU_SIZE, 0x0000, 11610 0x00000000, 0x0000ffff }, 11611 { MAC_TX_MODE, 0x0000, 11612 0x00000000, 0x00000070 }, 11613 { MAC_TX_LENGTHS, 0x0000, 11614 0x00000000, 0x00003fff }, 11615 { MAC_RX_MODE, TG3_FL_NOT_5705, 11616 0x00000000, 0x000007fc }, 11617 { MAC_RX_MODE, TG3_FL_5705, 11618 0x00000000, 0x000007dc }, 11619 { MAC_HASH_REG_0, 0x0000, 11620 0x00000000, 0xffffffff }, 11621 { MAC_HASH_REG_1, 0x0000, 11622 0x00000000, 0xffffffff }, 11623 { MAC_HASH_REG_2, 0x0000, 11624 0x00000000, 0xffffffff }, 11625 { MAC_HASH_REG_3, 0x0000, 11626 0x00000000, 0xffffffff }, 11627 11628 /* Receive Data and Receive BD Initiator Control Registers. */ 11629 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705, 11630 0x00000000, 0xffffffff }, 11631 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705, 11632 0x00000000, 0xffffffff }, 11633 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705, 11634 0x00000000, 0x00000003 }, 11635 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705, 11636 0x00000000, 0xffffffff }, 11637 { RCVDBDI_STD_BD+0, 0x0000, 11638 0x00000000, 0xffffffff }, 11639 { RCVDBDI_STD_BD+4, 0x0000, 11640 0x00000000, 0xffffffff }, 11641 { RCVDBDI_STD_BD+8, 0x0000, 11642 0x00000000, 0xffff0002 }, 11643 { RCVDBDI_STD_BD+0xc, 0x0000, 11644 0x00000000, 0xffffffff }, 11645 11646 /* Receive BD Initiator Control Registers. */ 11647 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705, 11648 0x00000000, 0xffffffff }, 11649 { RCVBDI_STD_THRESH, TG3_FL_5705, 11650 0x00000000, 0x000003ff }, 11651 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705, 11652 0x00000000, 0xffffffff }, 11653 11654 /* Host Coalescing Control Registers. */ 11655 { HOSTCC_MODE, TG3_FL_NOT_5705, 11656 0x00000000, 0x00000004 }, 11657 { HOSTCC_MODE, TG3_FL_5705, 11658 0x00000000, 0x000000f6 }, 11659 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705, 11660 0x00000000, 0xffffffff }, 11661 { HOSTCC_RXCOL_TICKS, TG3_FL_5705, 11662 0x00000000, 0x000003ff }, 11663 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705, 11664 0x00000000, 0xffffffff }, 11665 { HOSTCC_TXCOL_TICKS, TG3_FL_5705, 11666 0x00000000, 0x000003ff }, 11667 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705, 11668 0x00000000, 0xffffffff }, 11669 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 11670 0x00000000, 0x000000ff }, 11671 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705, 11672 0x00000000, 0xffffffff }, 11673 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 11674 0x00000000, 0x000000ff }, 11675 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705, 11676 0x00000000, 0xffffffff }, 11677 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705, 11678 0x00000000, 0xffffffff }, 11679 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705, 11680 0x00000000, 0xffffffff }, 11681 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 11682 0x00000000, 0x000000ff }, 11683 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705, 11684 0x00000000, 0xffffffff }, 11685 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 11686 0x00000000, 0x000000ff }, 11687 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705, 11688 0x00000000, 0xffffffff }, 11689 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705, 11690 0x00000000, 0xffffffff }, 11691 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705, 11692 0x00000000, 0xffffffff }, 11693 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000, 11694 0x00000000, 0xffffffff }, 11695 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000, 11696 0x00000000, 0xffffffff }, 11697 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000, 11698 0xffffffff, 0x00000000 }, 11699 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000, 11700 0xffffffff, 0x00000000 }, 11701 11702 /* Buffer Manager Control Registers. */ 11703 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750, 11704 0x00000000, 0x007fff80 }, 11705 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750, 11706 0x00000000, 0x007fffff }, 11707 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000, 11708 0x00000000, 0x0000003f }, 11709 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000, 11710 0x00000000, 0x000001ff }, 11711 { BUFMGR_MB_HIGH_WATER, 0x0000, 11712 0x00000000, 0x000001ff }, 11713 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705, 11714 0xffffffff, 0x00000000 }, 11715 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705, 11716 0xffffffff, 0x00000000 }, 11717 11718 /* Mailbox Registers */ 11719 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000, 11720 0x00000000, 0x000001ff }, 11721 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705, 11722 0x00000000, 0x000001ff }, 11723 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000, 11724 0x00000000, 0x000007ff }, 11725 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000, 11726 0x00000000, 0x000001ff }, 11727 11728 { 0xffff, 0x0000, 0x00000000, 0x00000000 }, 11729 }; 11730 11731 is_5705 = is_5750 = 0; 11732 if (tg3_flag(tp, 5705_PLUS)) { 11733 is_5705 = 1; 11734 if (tg3_flag(tp, 5750_PLUS)) 11735 is_5750 = 1; 11736 } 11737 11738 for (i = 0; reg_tbl[i].offset != 0xffff; i++) { 11739 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705)) 11740 continue; 11741 11742 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705)) 11743 continue; 11744 11745 if (tg3_flag(tp, IS_5788) && 11746 (reg_tbl[i].flags & TG3_FL_NOT_5788)) 11747 continue; 11748 11749 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750)) 11750 continue; 11751 11752 offset = (u32) reg_tbl[i].offset; 11753 read_mask = reg_tbl[i].read_mask; 11754 write_mask = reg_tbl[i].write_mask; 11755 11756 /* Save the original register content */ 11757 save_val = tr32(offset); 11758 11759 /* Determine the read-only value. */ 11760 read_val = save_val & read_mask; 11761 11762 /* Write zero to the register, then make sure the read-only bits 11763 * are not changed and the read/write bits are all zeros. 11764 */ 11765 tw32(offset, 0); 11766 11767 val = tr32(offset); 11768 11769 /* Test the read-only and read/write bits. */ 11770 if (((val & read_mask) != read_val) || (val & write_mask)) 11771 goto out; 11772 11773 /* Write ones to all the bits defined by RdMask and WrMask, then 11774 * make sure the read-only bits are not changed and the 11775 * read/write bits are all ones. 11776 */ 11777 tw32(offset, read_mask | write_mask); 11778 11779 val = tr32(offset); 11780 11781 /* Test the read-only bits. */ 11782 if ((val & read_mask) != read_val) 11783 goto out; 11784 11785 /* Test the read/write bits. */ 11786 if ((val & write_mask) != write_mask) 11787 goto out; 11788 11789 tw32(offset, save_val); 11790 } 11791 11792 return 0; 11793 11794 out: 11795 if (netif_msg_hw(tp)) 11796 netdev_err(tp->dev, 11797 "Register test failed at offset %x\n", offset); 11798 tw32(offset, save_val); 11799 return -EIO; 11800 } 11801 11802 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len) 11803 { 11804 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a }; 11805 int i; 11806 u32 j; 11807 11808 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) { 11809 for (j = 0; j < len; j += 4) { 11810 u32 val; 11811 11812 tg3_write_mem(tp, offset + j, test_pattern[i]); 11813 tg3_read_mem(tp, offset + j, &val); 11814 if (val != test_pattern[i]) 11815 return -EIO; 11816 } 11817 } 11818 return 0; 11819 } 11820 11821 static int tg3_test_memory(struct tg3 *tp) 11822 { 11823 static struct mem_entry { 11824 u32 offset; 11825 u32 len; 11826 } mem_tbl_570x[] = { 11827 { 0x00000000, 0x00b50}, 11828 { 0x00002000, 0x1c000}, 11829 { 0xffffffff, 0x00000} 11830 }, mem_tbl_5705[] = { 11831 { 0x00000100, 0x0000c}, 11832 { 0x00000200, 0x00008}, 11833 { 0x00004000, 0x00800}, 11834 { 0x00006000, 0x01000}, 11835 { 0x00008000, 0x02000}, 11836 { 0x00010000, 0x0e000}, 11837 { 0xffffffff, 0x00000} 11838 }, mem_tbl_5755[] = { 11839 { 0x00000200, 0x00008}, 11840 { 0x00004000, 0x00800}, 11841 { 0x00006000, 0x00800}, 11842 { 0x00008000, 0x02000}, 11843 { 0x00010000, 0x0c000}, 11844 { 0xffffffff, 0x00000} 11845 }, mem_tbl_5906[] = { 11846 { 0x00000200, 0x00008}, 11847 { 0x00004000, 0x00400}, 11848 { 0x00006000, 0x00400}, 11849 { 0x00008000, 0x01000}, 11850 { 0x00010000, 0x01000}, 11851 { 0xffffffff, 0x00000} 11852 }, mem_tbl_5717[] = { 11853 { 0x00000200, 0x00008}, 11854 { 0x00010000, 0x0a000}, 11855 { 0x00020000, 0x13c00}, 11856 { 0xffffffff, 0x00000} 11857 }, mem_tbl_57765[] = { 11858 { 0x00000200, 0x00008}, 11859 { 0x00004000, 0x00800}, 11860 { 0x00006000, 0x09800}, 11861 { 0x00010000, 0x0a000}, 11862 { 0xffffffff, 0x00000} 11863 }; 11864 struct mem_entry *mem_tbl; 11865 int err = 0; 11866 int i; 11867 11868 if (tg3_flag(tp, 5717_PLUS)) 11869 mem_tbl = mem_tbl_5717; 11870 else if (tg3_flag(tp, 57765_CLASS)) 11871 mem_tbl = mem_tbl_57765; 11872 else if (tg3_flag(tp, 5755_PLUS)) 11873 mem_tbl = mem_tbl_5755; 11874 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 11875 mem_tbl = mem_tbl_5906; 11876 else if (tg3_flag(tp, 5705_PLUS)) 11877 mem_tbl = mem_tbl_5705; 11878 else 11879 mem_tbl = mem_tbl_570x; 11880 11881 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) { 11882 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len); 11883 if (err) 11884 break; 11885 } 11886 11887 return err; 11888 } 11889 11890 #define TG3_TSO_MSS 500 11891 11892 #define TG3_TSO_IP_HDR_LEN 20 11893 #define TG3_TSO_TCP_HDR_LEN 20 11894 #define TG3_TSO_TCP_OPT_LEN 12 11895 11896 static const u8 tg3_tso_header[] = { 11897 0x08, 0x00, 11898 0x45, 0x00, 0x00, 0x00, 11899 0x00, 0x00, 0x40, 0x00, 11900 0x40, 0x06, 0x00, 0x00, 11901 0x0a, 0x00, 0x00, 0x01, 11902 0x0a, 0x00, 0x00, 0x02, 11903 0x0d, 0x00, 0xe0, 0x00, 11904 0x00, 0x00, 0x01, 0x00, 11905 0x00, 0x00, 0x02, 0x00, 11906 0x80, 0x10, 0x10, 0x00, 11907 0x14, 0x09, 0x00, 0x00, 11908 0x01, 0x01, 0x08, 0x0a, 11909 0x11, 0x11, 0x11, 0x11, 11910 0x11, 0x11, 0x11, 0x11, 11911 }; 11912 11913 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback) 11914 { 11915 u32 rx_start_idx, rx_idx, tx_idx, opaque_key; 11916 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val; 11917 u32 budget; 11918 struct sk_buff *skb; 11919 u8 *tx_data, *rx_data; 11920 dma_addr_t map; 11921 int num_pkts, tx_len, rx_len, i, err; 11922 struct tg3_rx_buffer_desc *desc; 11923 struct tg3_napi *tnapi, *rnapi; 11924 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 11925 11926 tnapi = &tp->napi[0]; 11927 rnapi = &tp->napi[0]; 11928 if (tp->irq_cnt > 1) { 11929 if (tg3_flag(tp, ENABLE_RSS)) 11930 rnapi = &tp->napi[1]; 11931 if (tg3_flag(tp, ENABLE_TSS)) 11932 tnapi = &tp->napi[1]; 11933 } 11934 coal_now = tnapi->coal_now | rnapi->coal_now; 11935 11936 err = -EIO; 11937 11938 tx_len = pktsz; 11939 skb = netdev_alloc_skb(tp->dev, tx_len); 11940 if (!skb) 11941 return -ENOMEM; 11942 11943 tx_data = skb_put(skb, tx_len); 11944 memcpy(tx_data, tp->dev->dev_addr, 6); 11945 memset(tx_data + 6, 0x0, 8); 11946 11947 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN); 11948 11949 if (tso_loopback) { 11950 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN]; 11951 11952 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN + 11953 TG3_TSO_TCP_OPT_LEN; 11954 11955 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header, 11956 sizeof(tg3_tso_header)); 11957 mss = TG3_TSO_MSS; 11958 11959 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header); 11960 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS); 11961 11962 /* Set the total length field in the IP header */ 11963 iph->tot_len = htons((u16)(mss + hdr_len)); 11964 11965 base_flags = (TXD_FLAG_CPU_PRE_DMA | 11966 TXD_FLAG_CPU_POST_DMA); 11967 11968 if (tg3_flag(tp, HW_TSO_1) || 11969 tg3_flag(tp, HW_TSO_2) || 11970 tg3_flag(tp, HW_TSO_3)) { 11971 struct tcphdr *th; 11972 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN; 11973 th = (struct tcphdr *)&tx_data[val]; 11974 th->check = 0; 11975 } else 11976 base_flags |= TXD_FLAG_TCPUDP_CSUM; 11977 11978 if (tg3_flag(tp, HW_TSO_3)) { 11979 mss |= (hdr_len & 0xc) << 12; 11980 if (hdr_len & 0x10) 11981 base_flags |= 0x00000010; 11982 base_flags |= (hdr_len & 0x3e0) << 5; 11983 } else if (tg3_flag(tp, HW_TSO_2)) 11984 mss |= hdr_len << 9; 11985 else if (tg3_flag(tp, HW_TSO_1) || 11986 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 11987 mss |= (TG3_TSO_TCP_OPT_LEN << 9); 11988 } else { 11989 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10); 11990 } 11991 11992 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header); 11993 } else { 11994 num_pkts = 1; 11995 data_off = ETH_HLEN; 11996 11997 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 11998 tx_len > VLAN_ETH_FRAME_LEN) 11999 base_flags |= TXD_FLAG_JMB_PKT; 12000 } 12001 12002 for (i = data_off; i < tx_len; i++) 12003 tx_data[i] = (u8) (i & 0xff); 12004 12005 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE); 12006 if (pci_dma_mapping_error(tp->pdev, map)) { 12007 dev_kfree_skb(skb); 12008 return -EIO; 12009 } 12010 12011 val = tnapi->tx_prod; 12012 tnapi->tx_buffers[val].skb = skb; 12013 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map); 12014 12015 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 12016 rnapi->coal_now); 12017 12018 udelay(10); 12019 12020 rx_start_idx = rnapi->hw_status->idx[0].rx_producer; 12021 12022 budget = tg3_tx_avail(tnapi); 12023 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len, 12024 base_flags | TXD_FLAG_END, mss, 0)) { 12025 tnapi->tx_buffers[val].skb = NULL; 12026 dev_kfree_skb(skb); 12027 return -EIO; 12028 } 12029 12030 tnapi->tx_prod++; 12031 12032 /* Sync BD data before updating mailbox */ 12033 wmb(); 12034 12035 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod); 12036 tr32_mailbox(tnapi->prodmbox); 12037 12038 udelay(10); 12039 12040 /* 350 usec to allow enough time on some 10/100 Mbps devices. */ 12041 for (i = 0; i < 35; i++) { 12042 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 12043 coal_now); 12044 12045 udelay(10); 12046 12047 tx_idx = tnapi->hw_status->idx[0].tx_consumer; 12048 rx_idx = rnapi->hw_status->idx[0].rx_producer; 12049 if ((tx_idx == tnapi->tx_prod) && 12050 (rx_idx == (rx_start_idx + num_pkts))) 12051 break; 12052 } 12053 12054 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1); 12055 dev_kfree_skb(skb); 12056 12057 if (tx_idx != tnapi->tx_prod) 12058 goto out; 12059 12060 if (rx_idx != rx_start_idx + num_pkts) 12061 goto out; 12062 12063 val = data_off; 12064 while (rx_idx != rx_start_idx) { 12065 desc = &rnapi->rx_rcb[rx_start_idx++]; 12066 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 12067 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 12068 12069 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 12070 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) 12071 goto out; 12072 12073 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) 12074 - ETH_FCS_LEN; 12075 12076 if (!tso_loopback) { 12077 if (rx_len != tx_len) 12078 goto out; 12079 12080 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) { 12081 if (opaque_key != RXD_OPAQUE_RING_STD) 12082 goto out; 12083 } else { 12084 if (opaque_key != RXD_OPAQUE_RING_JUMBO) 12085 goto out; 12086 } 12087 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 12088 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 12089 >> RXD_TCPCSUM_SHIFT != 0xffff) { 12090 goto out; 12091 } 12092 12093 if (opaque_key == RXD_OPAQUE_RING_STD) { 12094 rx_data = tpr->rx_std_buffers[desc_idx].data; 12095 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx], 12096 mapping); 12097 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 12098 rx_data = tpr->rx_jmb_buffers[desc_idx].data; 12099 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx], 12100 mapping); 12101 } else 12102 goto out; 12103 12104 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, 12105 PCI_DMA_FROMDEVICE); 12106 12107 rx_data += TG3_RX_OFFSET(tp); 12108 for (i = data_off; i < rx_len; i++, val++) { 12109 if (*(rx_data + i) != (u8) (val & 0xff)) 12110 goto out; 12111 } 12112 } 12113 12114 err = 0; 12115 12116 /* tg3_free_rings will unmap and free the rx_data */ 12117 out: 12118 return err; 12119 } 12120 12121 #define TG3_STD_LOOPBACK_FAILED 1 12122 #define TG3_JMB_LOOPBACK_FAILED 2 12123 #define TG3_TSO_LOOPBACK_FAILED 4 12124 #define TG3_LOOPBACK_FAILED \ 12125 (TG3_STD_LOOPBACK_FAILED | \ 12126 TG3_JMB_LOOPBACK_FAILED | \ 12127 TG3_TSO_LOOPBACK_FAILED) 12128 12129 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk) 12130 { 12131 int err = -EIO; 12132 u32 eee_cap; 12133 u32 jmb_pkt_sz = 9000; 12134 12135 if (tp->dma_limit) 12136 jmb_pkt_sz = tp->dma_limit - ETH_HLEN; 12137 12138 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP; 12139 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 12140 12141 if (!netif_running(tp->dev)) { 12142 data[0] = TG3_LOOPBACK_FAILED; 12143 data[1] = TG3_LOOPBACK_FAILED; 12144 if (do_extlpbk) 12145 data[2] = TG3_LOOPBACK_FAILED; 12146 goto done; 12147 } 12148 12149 err = tg3_reset_hw(tp, 1); 12150 if (err) { 12151 data[0] = TG3_LOOPBACK_FAILED; 12152 data[1] = TG3_LOOPBACK_FAILED; 12153 if (do_extlpbk) 12154 data[2] = TG3_LOOPBACK_FAILED; 12155 goto done; 12156 } 12157 12158 if (tg3_flag(tp, ENABLE_RSS)) { 12159 int i; 12160 12161 /* Reroute all rx packets to the 1st queue */ 12162 for (i = MAC_RSS_INDIR_TBL_0; 12163 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4) 12164 tw32(i, 0x0); 12165 } 12166 12167 /* HW errata - mac loopback fails in some cases on 5780. 12168 * Normal traffic and PHY loopback are not affected by 12169 * errata. Also, the MAC loopback test is deprecated for 12170 * all newer ASIC revisions. 12171 */ 12172 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 && 12173 !tg3_flag(tp, CPMU_PRESENT)) { 12174 tg3_mac_loopback(tp, true); 12175 12176 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 12177 data[0] |= TG3_STD_LOOPBACK_FAILED; 12178 12179 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 12180 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 12181 data[0] |= TG3_JMB_LOOPBACK_FAILED; 12182 12183 tg3_mac_loopback(tp, false); 12184 } 12185 12186 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 12187 !tg3_flag(tp, USE_PHYLIB)) { 12188 int i; 12189 12190 tg3_phy_lpbk_set(tp, 0, false); 12191 12192 /* Wait for link */ 12193 for (i = 0; i < 100; i++) { 12194 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 12195 break; 12196 mdelay(1); 12197 } 12198 12199 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 12200 data[1] |= TG3_STD_LOOPBACK_FAILED; 12201 if (tg3_flag(tp, TSO_CAPABLE) && 12202 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 12203 data[1] |= TG3_TSO_LOOPBACK_FAILED; 12204 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 12205 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 12206 data[1] |= TG3_JMB_LOOPBACK_FAILED; 12207 12208 if (do_extlpbk) { 12209 tg3_phy_lpbk_set(tp, 0, true); 12210 12211 /* All link indications report up, but the hardware 12212 * isn't really ready for about 20 msec. Double it 12213 * to be sure. 12214 */ 12215 mdelay(40); 12216 12217 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 12218 data[2] |= TG3_STD_LOOPBACK_FAILED; 12219 if (tg3_flag(tp, TSO_CAPABLE) && 12220 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 12221 data[2] |= TG3_TSO_LOOPBACK_FAILED; 12222 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 12223 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 12224 data[2] |= TG3_JMB_LOOPBACK_FAILED; 12225 } 12226 12227 /* Re-enable gphy autopowerdown. */ 12228 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 12229 tg3_phy_toggle_apd(tp, true); 12230 } 12231 12232 err = (data[0] | data[1] | data[2]) ? -EIO : 0; 12233 12234 done: 12235 tp->phy_flags |= eee_cap; 12236 12237 return err; 12238 } 12239 12240 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, 12241 u64 *data) 12242 { 12243 struct tg3 *tp = netdev_priv(dev); 12244 bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB; 12245 12246 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 12247 tg3_power_up(tp)) { 12248 etest->flags |= ETH_TEST_FL_FAILED; 12249 memset(data, 1, sizeof(u64) * TG3_NUM_TEST); 12250 return; 12251 } 12252 12253 memset(data, 0, sizeof(u64) * TG3_NUM_TEST); 12254 12255 if (tg3_test_nvram(tp) != 0) { 12256 etest->flags |= ETH_TEST_FL_FAILED; 12257 data[0] = 1; 12258 } 12259 if (!doextlpbk && tg3_test_link(tp)) { 12260 etest->flags |= ETH_TEST_FL_FAILED; 12261 data[1] = 1; 12262 } 12263 if (etest->flags & ETH_TEST_FL_OFFLINE) { 12264 int err, err2 = 0, irq_sync = 0; 12265 12266 if (netif_running(dev)) { 12267 tg3_phy_stop(tp); 12268 tg3_netif_stop(tp); 12269 irq_sync = 1; 12270 } 12271 12272 tg3_full_lock(tp, irq_sync); 12273 12274 tg3_halt(tp, RESET_KIND_SUSPEND, 1); 12275 err = tg3_nvram_lock(tp); 12276 tg3_halt_cpu(tp, RX_CPU_BASE); 12277 if (!tg3_flag(tp, 5705_PLUS)) 12278 tg3_halt_cpu(tp, TX_CPU_BASE); 12279 if (!err) 12280 tg3_nvram_unlock(tp); 12281 12282 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 12283 tg3_phy_reset(tp); 12284 12285 if (tg3_test_registers(tp) != 0) { 12286 etest->flags |= ETH_TEST_FL_FAILED; 12287 data[2] = 1; 12288 } 12289 12290 if (tg3_test_memory(tp) != 0) { 12291 etest->flags |= ETH_TEST_FL_FAILED; 12292 data[3] = 1; 12293 } 12294 12295 if (doextlpbk) 12296 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; 12297 12298 if (tg3_test_loopback(tp, &data[4], doextlpbk)) 12299 etest->flags |= ETH_TEST_FL_FAILED; 12300 12301 tg3_full_unlock(tp); 12302 12303 if (tg3_test_interrupt(tp) != 0) { 12304 etest->flags |= ETH_TEST_FL_FAILED; 12305 data[7] = 1; 12306 } 12307 12308 tg3_full_lock(tp, 0); 12309 12310 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12311 if (netif_running(dev)) { 12312 tg3_flag_set(tp, INIT_COMPLETE); 12313 err2 = tg3_restart_hw(tp, 1); 12314 if (!err2) 12315 tg3_netif_start(tp); 12316 } 12317 12318 tg3_full_unlock(tp); 12319 12320 if (irq_sync && !err2) 12321 tg3_phy_start(tp); 12322 } 12323 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 12324 tg3_power_down(tp); 12325 12326 } 12327 12328 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 12329 { 12330 struct mii_ioctl_data *data = if_mii(ifr); 12331 struct tg3 *tp = netdev_priv(dev); 12332 int err; 12333 12334 if (tg3_flag(tp, USE_PHYLIB)) { 12335 struct phy_device *phydev; 12336 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12337 return -EAGAIN; 12338 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 12339 return phy_mii_ioctl(phydev, ifr, cmd); 12340 } 12341 12342 switch (cmd) { 12343 case SIOCGMIIPHY: 12344 data->phy_id = tp->phy_addr; 12345 12346 /* fallthru */ 12347 case SIOCGMIIREG: { 12348 u32 mii_regval; 12349 12350 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12351 break; /* We have no PHY */ 12352 12353 if (!netif_running(dev)) 12354 return -EAGAIN; 12355 12356 spin_lock_bh(&tp->lock); 12357 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval); 12358 spin_unlock_bh(&tp->lock); 12359 12360 data->val_out = mii_regval; 12361 12362 return err; 12363 } 12364 12365 case SIOCSMIIREG: 12366 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12367 break; /* We have no PHY */ 12368 12369 if (!netif_running(dev)) 12370 return -EAGAIN; 12371 12372 spin_lock_bh(&tp->lock); 12373 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in); 12374 spin_unlock_bh(&tp->lock); 12375 12376 return err; 12377 12378 default: 12379 /* do nothing */ 12380 break; 12381 } 12382 return -EOPNOTSUPP; 12383 } 12384 12385 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 12386 { 12387 struct tg3 *tp = netdev_priv(dev); 12388 12389 memcpy(ec, &tp->coal, sizeof(*ec)); 12390 return 0; 12391 } 12392 12393 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 12394 { 12395 struct tg3 *tp = netdev_priv(dev); 12396 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0; 12397 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0; 12398 12399 if (!tg3_flag(tp, 5705_PLUS)) { 12400 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT; 12401 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT; 12402 max_stat_coal_ticks = MAX_STAT_COAL_TICKS; 12403 min_stat_coal_ticks = MIN_STAT_COAL_TICKS; 12404 } 12405 12406 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) || 12407 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) || 12408 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) || 12409 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) || 12410 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) || 12411 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) || 12412 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) || 12413 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) || 12414 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) || 12415 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks)) 12416 return -EINVAL; 12417 12418 /* No rx interrupts will be generated if both are zero */ 12419 if ((ec->rx_coalesce_usecs == 0) && 12420 (ec->rx_max_coalesced_frames == 0)) 12421 return -EINVAL; 12422 12423 /* No tx interrupts will be generated if both are zero */ 12424 if ((ec->tx_coalesce_usecs == 0) && 12425 (ec->tx_max_coalesced_frames == 0)) 12426 return -EINVAL; 12427 12428 /* Only copy relevant parameters, ignore all others. */ 12429 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs; 12430 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs; 12431 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames; 12432 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; 12433 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq; 12434 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq; 12435 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq; 12436 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq; 12437 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs; 12438 12439 if (netif_running(dev)) { 12440 tg3_full_lock(tp, 0); 12441 __tg3_set_coalesce(tp, &tp->coal); 12442 tg3_full_unlock(tp); 12443 } 12444 return 0; 12445 } 12446 12447 static const struct ethtool_ops tg3_ethtool_ops = { 12448 .get_settings = tg3_get_settings, 12449 .set_settings = tg3_set_settings, 12450 .get_drvinfo = tg3_get_drvinfo, 12451 .get_regs_len = tg3_get_regs_len, 12452 .get_regs = tg3_get_regs, 12453 .get_wol = tg3_get_wol, 12454 .set_wol = tg3_set_wol, 12455 .get_msglevel = tg3_get_msglevel, 12456 .set_msglevel = tg3_set_msglevel, 12457 .nway_reset = tg3_nway_reset, 12458 .get_link = ethtool_op_get_link, 12459 .get_eeprom_len = tg3_get_eeprom_len, 12460 .get_eeprom = tg3_get_eeprom, 12461 .set_eeprom = tg3_set_eeprom, 12462 .get_ringparam = tg3_get_ringparam, 12463 .set_ringparam = tg3_set_ringparam, 12464 .get_pauseparam = tg3_get_pauseparam, 12465 .set_pauseparam = tg3_set_pauseparam, 12466 .self_test = tg3_self_test, 12467 .get_strings = tg3_get_strings, 12468 .set_phys_id = tg3_set_phys_id, 12469 .get_ethtool_stats = tg3_get_ethtool_stats, 12470 .get_coalesce = tg3_get_coalesce, 12471 .set_coalesce = tg3_set_coalesce, 12472 .get_sset_count = tg3_get_sset_count, 12473 .get_rxnfc = tg3_get_rxnfc, 12474 .get_rxfh_indir_size = tg3_get_rxfh_indir_size, 12475 .get_rxfh_indir = tg3_get_rxfh_indir, 12476 .set_rxfh_indir = tg3_set_rxfh_indir, 12477 .get_ts_info = ethtool_op_get_ts_info, 12478 }; 12479 12480 static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, 12481 struct rtnl_link_stats64 *stats) 12482 { 12483 struct tg3 *tp = netdev_priv(dev); 12484 12485 if (!tp->hw_stats) 12486 return &tp->net_stats_prev; 12487 12488 spin_lock_bh(&tp->lock); 12489 tg3_get_nstats(tp, stats); 12490 spin_unlock_bh(&tp->lock); 12491 12492 return stats; 12493 } 12494 12495 static void tg3_set_rx_mode(struct net_device *dev) 12496 { 12497 struct tg3 *tp = netdev_priv(dev); 12498 12499 if (!netif_running(dev)) 12500 return; 12501 12502 tg3_full_lock(tp, 0); 12503 __tg3_set_rx_mode(dev); 12504 tg3_full_unlock(tp); 12505 } 12506 12507 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, 12508 int new_mtu) 12509 { 12510 dev->mtu = new_mtu; 12511 12512 if (new_mtu > ETH_DATA_LEN) { 12513 if (tg3_flag(tp, 5780_CLASS)) { 12514 netdev_update_features(dev); 12515 tg3_flag_clear(tp, TSO_CAPABLE); 12516 } else { 12517 tg3_flag_set(tp, JUMBO_RING_ENABLE); 12518 } 12519 } else { 12520 if (tg3_flag(tp, 5780_CLASS)) { 12521 tg3_flag_set(tp, TSO_CAPABLE); 12522 netdev_update_features(dev); 12523 } 12524 tg3_flag_clear(tp, JUMBO_RING_ENABLE); 12525 } 12526 } 12527 12528 static int tg3_change_mtu(struct net_device *dev, int new_mtu) 12529 { 12530 struct tg3 *tp = netdev_priv(dev); 12531 int err, reset_phy = 0; 12532 12533 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp)) 12534 return -EINVAL; 12535 12536 if (!netif_running(dev)) { 12537 /* We'll just catch it later when the 12538 * device is up'd. 12539 */ 12540 tg3_set_mtu(dev, tp, new_mtu); 12541 return 0; 12542 } 12543 12544 tg3_phy_stop(tp); 12545 12546 tg3_netif_stop(tp); 12547 12548 tg3_full_lock(tp, 1); 12549 12550 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12551 12552 tg3_set_mtu(dev, tp, new_mtu); 12553 12554 /* Reset PHY, otherwise the read DMA engine will be in a mode that 12555 * breaks all requests to 256 bytes. 12556 */ 12557 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) 12558 reset_phy = 1; 12559 12560 err = tg3_restart_hw(tp, reset_phy); 12561 12562 if (!err) 12563 tg3_netif_start(tp); 12564 12565 tg3_full_unlock(tp); 12566 12567 if (!err) 12568 tg3_phy_start(tp); 12569 12570 return err; 12571 } 12572 12573 static const struct net_device_ops tg3_netdev_ops = { 12574 .ndo_open = tg3_open, 12575 .ndo_stop = tg3_close, 12576 .ndo_start_xmit = tg3_start_xmit, 12577 .ndo_get_stats64 = tg3_get_stats64, 12578 .ndo_validate_addr = eth_validate_addr, 12579 .ndo_set_rx_mode = tg3_set_rx_mode, 12580 .ndo_set_mac_address = tg3_set_mac_addr, 12581 .ndo_do_ioctl = tg3_ioctl, 12582 .ndo_tx_timeout = tg3_tx_timeout, 12583 .ndo_change_mtu = tg3_change_mtu, 12584 .ndo_fix_features = tg3_fix_features, 12585 .ndo_set_features = tg3_set_features, 12586 #ifdef CONFIG_NET_POLL_CONTROLLER 12587 .ndo_poll_controller = tg3_poll_controller, 12588 #endif 12589 }; 12590 12591 static void __devinit tg3_get_eeprom_size(struct tg3 *tp) 12592 { 12593 u32 cursize, val, magic; 12594 12595 tp->nvram_size = EEPROM_CHIP_SIZE; 12596 12597 if (tg3_nvram_read(tp, 0, &magic) != 0) 12598 return; 12599 12600 if ((magic != TG3_EEPROM_MAGIC) && 12601 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) && 12602 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW)) 12603 return; 12604 12605 /* 12606 * Size the chip by reading offsets at increasing powers of two. 12607 * When we encounter our validation signature, we know the addressing 12608 * has wrapped around, and thus have our chip size. 12609 */ 12610 cursize = 0x10; 12611 12612 while (cursize < tp->nvram_size) { 12613 if (tg3_nvram_read(tp, cursize, &val) != 0) 12614 return; 12615 12616 if (val == magic) 12617 break; 12618 12619 cursize <<= 1; 12620 } 12621 12622 tp->nvram_size = cursize; 12623 } 12624 12625 static void __devinit tg3_get_nvram_size(struct tg3 *tp) 12626 { 12627 u32 val; 12628 12629 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0) 12630 return; 12631 12632 /* Selfboot format */ 12633 if (val != TG3_EEPROM_MAGIC) { 12634 tg3_get_eeprom_size(tp); 12635 return; 12636 } 12637 12638 if (tg3_nvram_read(tp, 0xf0, &val) == 0) { 12639 if (val != 0) { 12640 /* This is confusing. We want to operate on the 12641 * 16-bit value at offset 0xf2. The tg3_nvram_read() 12642 * call will read from NVRAM and byteswap the data 12643 * according to the byteswapping settings for all 12644 * other register accesses. This ensures the data we 12645 * want will always reside in the lower 16-bits. 12646 * However, the data in NVRAM is in LE format, which 12647 * means the data from the NVRAM read will always be 12648 * opposite the endianness of the CPU. The 16-bit 12649 * byteswap then brings the data to CPU endianness. 12650 */ 12651 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024; 12652 return; 12653 } 12654 } 12655 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12656 } 12657 12658 static void __devinit tg3_get_nvram_info(struct tg3 *tp) 12659 { 12660 u32 nvcfg1; 12661 12662 nvcfg1 = tr32(NVRAM_CFG1); 12663 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { 12664 tg3_flag_set(tp, FLASH); 12665 } else { 12666 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12667 tw32(NVRAM_CFG1, nvcfg1); 12668 } 12669 12670 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 12671 tg3_flag(tp, 5780_CLASS)) { 12672 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { 12673 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: 12674 tp->nvram_jedecnum = JEDEC_ATMEL; 12675 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 12676 tg3_flag_set(tp, NVRAM_BUFFERED); 12677 break; 12678 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED: 12679 tp->nvram_jedecnum = JEDEC_ATMEL; 12680 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE; 12681 break; 12682 case FLASH_VENDOR_ATMEL_EEPROM: 12683 tp->nvram_jedecnum = JEDEC_ATMEL; 12684 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12685 tg3_flag_set(tp, NVRAM_BUFFERED); 12686 break; 12687 case FLASH_VENDOR_ST: 12688 tp->nvram_jedecnum = JEDEC_ST; 12689 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE; 12690 tg3_flag_set(tp, NVRAM_BUFFERED); 12691 break; 12692 case FLASH_VENDOR_SAIFUN: 12693 tp->nvram_jedecnum = JEDEC_SAIFUN; 12694 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE; 12695 break; 12696 case FLASH_VENDOR_SST_SMALL: 12697 case FLASH_VENDOR_SST_LARGE: 12698 tp->nvram_jedecnum = JEDEC_SST; 12699 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE; 12700 break; 12701 } 12702 } else { 12703 tp->nvram_jedecnum = JEDEC_ATMEL; 12704 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 12705 tg3_flag_set(tp, NVRAM_BUFFERED); 12706 } 12707 } 12708 12709 static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) 12710 { 12711 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { 12712 case FLASH_5752PAGE_SIZE_256: 12713 tp->nvram_pagesize = 256; 12714 break; 12715 case FLASH_5752PAGE_SIZE_512: 12716 tp->nvram_pagesize = 512; 12717 break; 12718 case FLASH_5752PAGE_SIZE_1K: 12719 tp->nvram_pagesize = 1024; 12720 break; 12721 case FLASH_5752PAGE_SIZE_2K: 12722 tp->nvram_pagesize = 2048; 12723 break; 12724 case FLASH_5752PAGE_SIZE_4K: 12725 tp->nvram_pagesize = 4096; 12726 break; 12727 case FLASH_5752PAGE_SIZE_264: 12728 tp->nvram_pagesize = 264; 12729 break; 12730 case FLASH_5752PAGE_SIZE_528: 12731 tp->nvram_pagesize = 528; 12732 break; 12733 } 12734 } 12735 12736 static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp) 12737 { 12738 u32 nvcfg1; 12739 12740 nvcfg1 = tr32(NVRAM_CFG1); 12741 12742 /* NVRAM protection for TPM */ 12743 if (nvcfg1 & (1 << 27)) 12744 tg3_flag_set(tp, PROTECTED_NVRAM); 12745 12746 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12747 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ: 12748 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ: 12749 tp->nvram_jedecnum = JEDEC_ATMEL; 12750 tg3_flag_set(tp, NVRAM_BUFFERED); 12751 break; 12752 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12753 tp->nvram_jedecnum = JEDEC_ATMEL; 12754 tg3_flag_set(tp, NVRAM_BUFFERED); 12755 tg3_flag_set(tp, FLASH); 12756 break; 12757 case FLASH_5752VENDOR_ST_M45PE10: 12758 case FLASH_5752VENDOR_ST_M45PE20: 12759 case FLASH_5752VENDOR_ST_M45PE40: 12760 tp->nvram_jedecnum = JEDEC_ST; 12761 tg3_flag_set(tp, NVRAM_BUFFERED); 12762 tg3_flag_set(tp, FLASH); 12763 break; 12764 } 12765 12766 if (tg3_flag(tp, FLASH)) { 12767 tg3_nvram_get_pagesize(tp, nvcfg1); 12768 } else { 12769 /* For eeprom, set pagesize to maximum eeprom size */ 12770 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12771 12772 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12773 tw32(NVRAM_CFG1, nvcfg1); 12774 } 12775 } 12776 12777 static void __devinit tg3_get_5755_nvram_info(struct tg3 *tp) 12778 { 12779 u32 nvcfg1, protect = 0; 12780 12781 nvcfg1 = tr32(NVRAM_CFG1); 12782 12783 /* NVRAM protection for TPM */ 12784 if (nvcfg1 & (1 << 27)) { 12785 tg3_flag_set(tp, PROTECTED_NVRAM); 12786 protect = 1; 12787 } 12788 12789 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 12790 switch (nvcfg1) { 12791 case FLASH_5755VENDOR_ATMEL_FLASH_1: 12792 case FLASH_5755VENDOR_ATMEL_FLASH_2: 12793 case FLASH_5755VENDOR_ATMEL_FLASH_3: 12794 case FLASH_5755VENDOR_ATMEL_FLASH_5: 12795 tp->nvram_jedecnum = JEDEC_ATMEL; 12796 tg3_flag_set(tp, NVRAM_BUFFERED); 12797 tg3_flag_set(tp, FLASH); 12798 tp->nvram_pagesize = 264; 12799 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 || 12800 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5) 12801 tp->nvram_size = (protect ? 0x3e200 : 12802 TG3_NVRAM_SIZE_512KB); 12803 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2) 12804 tp->nvram_size = (protect ? 0x1f200 : 12805 TG3_NVRAM_SIZE_256KB); 12806 else 12807 tp->nvram_size = (protect ? 0x1f200 : 12808 TG3_NVRAM_SIZE_128KB); 12809 break; 12810 case FLASH_5752VENDOR_ST_M45PE10: 12811 case FLASH_5752VENDOR_ST_M45PE20: 12812 case FLASH_5752VENDOR_ST_M45PE40: 12813 tp->nvram_jedecnum = JEDEC_ST; 12814 tg3_flag_set(tp, NVRAM_BUFFERED); 12815 tg3_flag_set(tp, FLASH); 12816 tp->nvram_pagesize = 256; 12817 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10) 12818 tp->nvram_size = (protect ? 12819 TG3_NVRAM_SIZE_64KB : 12820 TG3_NVRAM_SIZE_128KB); 12821 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20) 12822 tp->nvram_size = (protect ? 12823 TG3_NVRAM_SIZE_64KB : 12824 TG3_NVRAM_SIZE_256KB); 12825 else 12826 tp->nvram_size = (protect ? 12827 TG3_NVRAM_SIZE_128KB : 12828 TG3_NVRAM_SIZE_512KB); 12829 break; 12830 } 12831 } 12832 12833 static void __devinit tg3_get_5787_nvram_info(struct tg3 *tp) 12834 { 12835 u32 nvcfg1; 12836 12837 nvcfg1 = tr32(NVRAM_CFG1); 12838 12839 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12840 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ: 12841 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 12842 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ: 12843 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 12844 tp->nvram_jedecnum = JEDEC_ATMEL; 12845 tg3_flag_set(tp, NVRAM_BUFFERED); 12846 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12847 12848 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12849 tw32(NVRAM_CFG1, nvcfg1); 12850 break; 12851 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12852 case FLASH_5755VENDOR_ATMEL_FLASH_1: 12853 case FLASH_5755VENDOR_ATMEL_FLASH_2: 12854 case FLASH_5755VENDOR_ATMEL_FLASH_3: 12855 tp->nvram_jedecnum = JEDEC_ATMEL; 12856 tg3_flag_set(tp, NVRAM_BUFFERED); 12857 tg3_flag_set(tp, FLASH); 12858 tp->nvram_pagesize = 264; 12859 break; 12860 case FLASH_5752VENDOR_ST_M45PE10: 12861 case FLASH_5752VENDOR_ST_M45PE20: 12862 case FLASH_5752VENDOR_ST_M45PE40: 12863 tp->nvram_jedecnum = JEDEC_ST; 12864 tg3_flag_set(tp, NVRAM_BUFFERED); 12865 tg3_flag_set(tp, FLASH); 12866 tp->nvram_pagesize = 256; 12867 break; 12868 } 12869 } 12870 12871 static void __devinit tg3_get_5761_nvram_info(struct tg3 *tp) 12872 { 12873 u32 nvcfg1, protect = 0; 12874 12875 nvcfg1 = tr32(NVRAM_CFG1); 12876 12877 /* NVRAM protection for TPM */ 12878 if (nvcfg1 & (1 << 27)) { 12879 tg3_flag_set(tp, PROTECTED_NVRAM); 12880 protect = 1; 12881 } 12882 12883 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 12884 switch (nvcfg1) { 12885 case FLASH_5761VENDOR_ATMEL_ADB021D: 12886 case FLASH_5761VENDOR_ATMEL_ADB041D: 12887 case FLASH_5761VENDOR_ATMEL_ADB081D: 12888 case FLASH_5761VENDOR_ATMEL_ADB161D: 12889 case FLASH_5761VENDOR_ATMEL_MDB021D: 12890 case FLASH_5761VENDOR_ATMEL_MDB041D: 12891 case FLASH_5761VENDOR_ATMEL_MDB081D: 12892 case FLASH_5761VENDOR_ATMEL_MDB161D: 12893 tp->nvram_jedecnum = JEDEC_ATMEL; 12894 tg3_flag_set(tp, NVRAM_BUFFERED); 12895 tg3_flag_set(tp, FLASH); 12896 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 12897 tp->nvram_pagesize = 256; 12898 break; 12899 case FLASH_5761VENDOR_ST_A_M45PE20: 12900 case FLASH_5761VENDOR_ST_A_M45PE40: 12901 case FLASH_5761VENDOR_ST_A_M45PE80: 12902 case FLASH_5761VENDOR_ST_A_M45PE16: 12903 case FLASH_5761VENDOR_ST_M_M45PE20: 12904 case FLASH_5761VENDOR_ST_M_M45PE40: 12905 case FLASH_5761VENDOR_ST_M_M45PE80: 12906 case FLASH_5761VENDOR_ST_M_M45PE16: 12907 tp->nvram_jedecnum = JEDEC_ST; 12908 tg3_flag_set(tp, NVRAM_BUFFERED); 12909 tg3_flag_set(tp, FLASH); 12910 tp->nvram_pagesize = 256; 12911 break; 12912 } 12913 12914 if (protect) { 12915 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT); 12916 } else { 12917 switch (nvcfg1) { 12918 case FLASH_5761VENDOR_ATMEL_ADB161D: 12919 case FLASH_5761VENDOR_ATMEL_MDB161D: 12920 case FLASH_5761VENDOR_ST_A_M45PE16: 12921 case FLASH_5761VENDOR_ST_M_M45PE16: 12922 tp->nvram_size = TG3_NVRAM_SIZE_2MB; 12923 break; 12924 case FLASH_5761VENDOR_ATMEL_ADB081D: 12925 case FLASH_5761VENDOR_ATMEL_MDB081D: 12926 case FLASH_5761VENDOR_ST_A_M45PE80: 12927 case FLASH_5761VENDOR_ST_M_M45PE80: 12928 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 12929 break; 12930 case FLASH_5761VENDOR_ATMEL_ADB041D: 12931 case FLASH_5761VENDOR_ATMEL_MDB041D: 12932 case FLASH_5761VENDOR_ST_A_M45PE40: 12933 case FLASH_5761VENDOR_ST_M_M45PE40: 12934 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12935 break; 12936 case FLASH_5761VENDOR_ATMEL_ADB021D: 12937 case FLASH_5761VENDOR_ATMEL_MDB021D: 12938 case FLASH_5761VENDOR_ST_A_M45PE20: 12939 case FLASH_5761VENDOR_ST_M_M45PE20: 12940 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12941 break; 12942 } 12943 } 12944 } 12945 12946 static void __devinit tg3_get_5906_nvram_info(struct tg3 *tp) 12947 { 12948 tp->nvram_jedecnum = JEDEC_ATMEL; 12949 tg3_flag_set(tp, NVRAM_BUFFERED); 12950 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12951 } 12952 12953 static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp) 12954 { 12955 u32 nvcfg1; 12956 12957 nvcfg1 = tr32(NVRAM_CFG1); 12958 12959 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12960 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 12961 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 12962 tp->nvram_jedecnum = JEDEC_ATMEL; 12963 tg3_flag_set(tp, NVRAM_BUFFERED); 12964 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 12965 12966 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 12967 tw32(NVRAM_CFG1, nvcfg1); 12968 return; 12969 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12970 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 12971 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 12972 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 12973 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 12974 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 12975 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 12976 tp->nvram_jedecnum = JEDEC_ATMEL; 12977 tg3_flag_set(tp, NVRAM_BUFFERED); 12978 tg3_flag_set(tp, FLASH); 12979 12980 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 12981 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 12982 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 12983 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 12984 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 12985 break; 12986 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 12987 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 12988 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 12989 break; 12990 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 12991 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 12992 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 12993 break; 12994 } 12995 break; 12996 case FLASH_5752VENDOR_ST_M45PE10: 12997 case FLASH_5752VENDOR_ST_M45PE20: 12998 case FLASH_5752VENDOR_ST_M45PE40: 12999 tp->nvram_jedecnum = JEDEC_ST; 13000 tg3_flag_set(tp, NVRAM_BUFFERED); 13001 tg3_flag_set(tp, FLASH); 13002 13003 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13004 case FLASH_5752VENDOR_ST_M45PE10: 13005 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13006 break; 13007 case FLASH_5752VENDOR_ST_M45PE20: 13008 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13009 break; 13010 case FLASH_5752VENDOR_ST_M45PE40: 13011 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 13012 break; 13013 } 13014 break; 13015 default: 13016 tg3_flag_set(tp, NO_NVRAM); 13017 return; 13018 } 13019 13020 tg3_nvram_get_pagesize(tp, nvcfg1); 13021 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 13022 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 13023 } 13024 13025 13026 static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp) 13027 { 13028 u32 nvcfg1; 13029 13030 nvcfg1 = tr32(NVRAM_CFG1); 13031 13032 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13033 case FLASH_5717VENDOR_ATMEL_EEPROM: 13034 case FLASH_5717VENDOR_MICRO_EEPROM: 13035 tp->nvram_jedecnum = JEDEC_ATMEL; 13036 tg3_flag_set(tp, NVRAM_BUFFERED); 13037 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 13038 13039 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 13040 tw32(NVRAM_CFG1, nvcfg1); 13041 return; 13042 case FLASH_5717VENDOR_ATMEL_MDB011D: 13043 case FLASH_5717VENDOR_ATMEL_ADB011B: 13044 case FLASH_5717VENDOR_ATMEL_ADB011D: 13045 case FLASH_5717VENDOR_ATMEL_MDB021D: 13046 case FLASH_5717VENDOR_ATMEL_ADB021B: 13047 case FLASH_5717VENDOR_ATMEL_ADB021D: 13048 case FLASH_5717VENDOR_ATMEL_45USPT: 13049 tp->nvram_jedecnum = JEDEC_ATMEL; 13050 tg3_flag_set(tp, NVRAM_BUFFERED); 13051 tg3_flag_set(tp, FLASH); 13052 13053 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13054 case FLASH_5717VENDOR_ATMEL_MDB021D: 13055 /* Detect size with tg3_nvram_get_size() */ 13056 break; 13057 case FLASH_5717VENDOR_ATMEL_ADB021B: 13058 case FLASH_5717VENDOR_ATMEL_ADB021D: 13059 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13060 break; 13061 default: 13062 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13063 break; 13064 } 13065 break; 13066 case FLASH_5717VENDOR_ST_M_M25PE10: 13067 case FLASH_5717VENDOR_ST_A_M25PE10: 13068 case FLASH_5717VENDOR_ST_M_M45PE10: 13069 case FLASH_5717VENDOR_ST_A_M45PE10: 13070 case FLASH_5717VENDOR_ST_M_M25PE20: 13071 case FLASH_5717VENDOR_ST_A_M25PE20: 13072 case FLASH_5717VENDOR_ST_M_M45PE20: 13073 case FLASH_5717VENDOR_ST_A_M45PE20: 13074 case FLASH_5717VENDOR_ST_25USPT: 13075 case FLASH_5717VENDOR_ST_45USPT: 13076 tp->nvram_jedecnum = JEDEC_ST; 13077 tg3_flag_set(tp, NVRAM_BUFFERED); 13078 tg3_flag_set(tp, FLASH); 13079 13080 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13081 case FLASH_5717VENDOR_ST_M_M25PE20: 13082 case FLASH_5717VENDOR_ST_M_M45PE20: 13083 /* Detect size with tg3_nvram_get_size() */ 13084 break; 13085 case FLASH_5717VENDOR_ST_A_M25PE20: 13086 case FLASH_5717VENDOR_ST_A_M45PE20: 13087 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13088 break; 13089 default: 13090 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13091 break; 13092 } 13093 break; 13094 default: 13095 tg3_flag_set(tp, NO_NVRAM); 13096 return; 13097 } 13098 13099 tg3_nvram_get_pagesize(tp, nvcfg1); 13100 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 13101 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 13102 } 13103 13104 static void __devinit tg3_get_5720_nvram_info(struct tg3 *tp) 13105 { 13106 u32 nvcfg1, nvmpinstrp; 13107 13108 nvcfg1 = tr32(NVRAM_CFG1); 13109 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; 13110 13111 switch (nvmpinstrp) { 13112 case FLASH_5720_EEPROM_HD: 13113 case FLASH_5720_EEPROM_LD: 13114 tp->nvram_jedecnum = JEDEC_ATMEL; 13115 tg3_flag_set(tp, NVRAM_BUFFERED); 13116 13117 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 13118 tw32(NVRAM_CFG1, nvcfg1); 13119 if (nvmpinstrp == FLASH_5720_EEPROM_HD) 13120 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 13121 else 13122 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE; 13123 return; 13124 case FLASH_5720VENDOR_M_ATMEL_DB011D: 13125 case FLASH_5720VENDOR_A_ATMEL_DB011B: 13126 case FLASH_5720VENDOR_A_ATMEL_DB011D: 13127 case FLASH_5720VENDOR_M_ATMEL_DB021D: 13128 case FLASH_5720VENDOR_A_ATMEL_DB021B: 13129 case FLASH_5720VENDOR_A_ATMEL_DB021D: 13130 case FLASH_5720VENDOR_M_ATMEL_DB041D: 13131 case FLASH_5720VENDOR_A_ATMEL_DB041B: 13132 case FLASH_5720VENDOR_A_ATMEL_DB041D: 13133 case FLASH_5720VENDOR_M_ATMEL_DB081D: 13134 case FLASH_5720VENDOR_A_ATMEL_DB081D: 13135 case FLASH_5720VENDOR_ATMEL_45USPT: 13136 tp->nvram_jedecnum = JEDEC_ATMEL; 13137 tg3_flag_set(tp, NVRAM_BUFFERED); 13138 tg3_flag_set(tp, FLASH); 13139 13140 switch (nvmpinstrp) { 13141 case FLASH_5720VENDOR_M_ATMEL_DB021D: 13142 case FLASH_5720VENDOR_A_ATMEL_DB021B: 13143 case FLASH_5720VENDOR_A_ATMEL_DB021D: 13144 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13145 break; 13146 case FLASH_5720VENDOR_M_ATMEL_DB041D: 13147 case FLASH_5720VENDOR_A_ATMEL_DB041B: 13148 case FLASH_5720VENDOR_A_ATMEL_DB041D: 13149 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 13150 break; 13151 case FLASH_5720VENDOR_M_ATMEL_DB081D: 13152 case FLASH_5720VENDOR_A_ATMEL_DB081D: 13153 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 13154 break; 13155 default: 13156 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13157 break; 13158 } 13159 break; 13160 case FLASH_5720VENDOR_M_ST_M25PE10: 13161 case FLASH_5720VENDOR_M_ST_M45PE10: 13162 case FLASH_5720VENDOR_A_ST_M25PE10: 13163 case FLASH_5720VENDOR_A_ST_M45PE10: 13164 case FLASH_5720VENDOR_M_ST_M25PE20: 13165 case FLASH_5720VENDOR_M_ST_M45PE20: 13166 case FLASH_5720VENDOR_A_ST_M25PE20: 13167 case FLASH_5720VENDOR_A_ST_M45PE20: 13168 case FLASH_5720VENDOR_M_ST_M25PE40: 13169 case FLASH_5720VENDOR_M_ST_M45PE40: 13170 case FLASH_5720VENDOR_A_ST_M25PE40: 13171 case FLASH_5720VENDOR_A_ST_M45PE40: 13172 case FLASH_5720VENDOR_M_ST_M25PE80: 13173 case FLASH_5720VENDOR_M_ST_M45PE80: 13174 case FLASH_5720VENDOR_A_ST_M25PE80: 13175 case FLASH_5720VENDOR_A_ST_M45PE80: 13176 case FLASH_5720VENDOR_ST_25USPT: 13177 case FLASH_5720VENDOR_ST_45USPT: 13178 tp->nvram_jedecnum = JEDEC_ST; 13179 tg3_flag_set(tp, NVRAM_BUFFERED); 13180 tg3_flag_set(tp, FLASH); 13181 13182 switch (nvmpinstrp) { 13183 case FLASH_5720VENDOR_M_ST_M25PE20: 13184 case FLASH_5720VENDOR_M_ST_M45PE20: 13185 case FLASH_5720VENDOR_A_ST_M25PE20: 13186 case FLASH_5720VENDOR_A_ST_M45PE20: 13187 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13188 break; 13189 case FLASH_5720VENDOR_M_ST_M25PE40: 13190 case FLASH_5720VENDOR_M_ST_M45PE40: 13191 case FLASH_5720VENDOR_A_ST_M25PE40: 13192 case FLASH_5720VENDOR_A_ST_M45PE40: 13193 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 13194 break; 13195 case FLASH_5720VENDOR_M_ST_M25PE80: 13196 case FLASH_5720VENDOR_M_ST_M45PE80: 13197 case FLASH_5720VENDOR_A_ST_M25PE80: 13198 case FLASH_5720VENDOR_A_ST_M45PE80: 13199 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 13200 break; 13201 default: 13202 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13203 break; 13204 } 13205 break; 13206 default: 13207 tg3_flag_set(tp, NO_NVRAM); 13208 return; 13209 } 13210 13211 tg3_nvram_get_pagesize(tp, nvcfg1); 13212 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 13213 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 13214 } 13215 13216 /* Chips other than 5700/5701 use the NVRAM for fetching info. */ 13217 static void __devinit tg3_nvram_init(struct tg3 *tp) 13218 { 13219 tw32_f(GRC_EEPROM_ADDR, 13220 (EEPROM_ADDR_FSM_RESET | 13221 (EEPROM_DEFAULT_CLOCK_PERIOD << 13222 EEPROM_ADDR_CLKPERD_SHIFT))); 13223 13224 msleep(1); 13225 13226 /* Enable seeprom accesses. */ 13227 tw32_f(GRC_LOCAL_CTRL, 13228 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM); 13229 udelay(100); 13230 13231 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 13232 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) { 13233 tg3_flag_set(tp, NVRAM); 13234 13235 if (tg3_nvram_lock(tp)) { 13236 netdev_warn(tp->dev, 13237 "Cannot get nvram lock, %s failed\n", 13238 __func__); 13239 return; 13240 } 13241 tg3_enable_nvram_access(tp); 13242 13243 tp->nvram_size = 0; 13244 13245 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 13246 tg3_get_5752_nvram_info(tp); 13247 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 13248 tg3_get_5755_nvram_info(tp); 13249 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 13250 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 13251 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 13252 tg3_get_5787_nvram_info(tp); 13253 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 13254 tg3_get_5761_nvram_info(tp); 13255 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 13256 tg3_get_5906_nvram_info(tp); 13257 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 13258 tg3_flag(tp, 57765_CLASS)) 13259 tg3_get_57780_nvram_info(tp); 13260 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 13261 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 13262 tg3_get_5717_nvram_info(tp); 13263 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 13264 tg3_get_5720_nvram_info(tp); 13265 else 13266 tg3_get_nvram_info(tp); 13267 13268 if (tp->nvram_size == 0) 13269 tg3_get_nvram_size(tp); 13270 13271 tg3_disable_nvram_access(tp); 13272 tg3_nvram_unlock(tp); 13273 13274 } else { 13275 tg3_flag_clear(tp, NVRAM); 13276 tg3_flag_clear(tp, NVRAM_BUFFERED); 13277 13278 tg3_get_eeprom_size(tp); 13279 } 13280 } 13281 13282 struct subsys_tbl_ent { 13283 u16 subsys_vendor, subsys_devid; 13284 u32 phy_id; 13285 }; 13286 13287 static struct subsys_tbl_ent subsys_id_to_phy_id[] __devinitdata = { 13288 /* Broadcom boards. */ 13289 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13290 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, 13291 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13292 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 }, 13293 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13294 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 }, 13295 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13296 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 }, 13297 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13298 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 }, 13299 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13300 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 }, 13301 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13302 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 }, 13303 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13304 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 }, 13305 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13306 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 }, 13307 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13308 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 }, 13309 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13310 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 }, 13311 13312 /* 3com boards. */ 13313 { TG3PCI_SUBVENDOR_ID_3COM, 13314 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 }, 13315 { TG3PCI_SUBVENDOR_ID_3COM, 13316 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 }, 13317 { TG3PCI_SUBVENDOR_ID_3COM, 13318 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 }, 13319 { TG3PCI_SUBVENDOR_ID_3COM, 13320 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 }, 13321 { TG3PCI_SUBVENDOR_ID_3COM, 13322 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 }, 13323 13324 /* DELL boards. */ 13325 { TG3PCI_SUBVENDOR_ID_DELL, 13326 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 }, 13327 { TG3PCI_SUBVENDOR_ID_DELL, 13328 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 }, 13329 { TG3PCI_SUBVENDOR_ID_DELL, 13330 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 }, 13331 { TG3PCI_SUBVENDOR_ID_DELL, 13332 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 }, 13333 13334 /* Compaq boards. */ 13335 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13336 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 }, 13337 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13338 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 }, 13339 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13340 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 }, 13341 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13342 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 }, 13343 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13344 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 }, 13345 13346 /* IBM boards. */ 13347 { TG3PCI_SUBVENDOR_ID_IBM, 13348 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } 13349 }; 13350 13351 static struct subsys_tbl_ent * __devinit tg3_lookup_by_subsys(struct tg3 *tp) 13352 { 13353 int i; 13354 13355 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) { 13356 if ((subsys_id_to_phy_id[i].subsys_vendor == 13357 tp->pdev->subsystem_vendor) && 13358 (subsys_id_to_phy_id[i].subsys_devid == 13359 tp->pdev->subsystem_device)) 13360 return &subsys_id_to_phy_id[i]; 13361 } 13362 return NULL; 13363 } 13364 13365 static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) 13366 { 13367 u32 val; 13368 13369 tp->phy_id = TG3_PHY_ID_INVALID; 13370 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 13371 13372 /* Assume an onboard device and WOL capable by default. */ 13373 tg3_flag_set(tp, EEPROM_WRITE_PROT); 13374 tg3_flag_set(tp, WOL_CAP); 13375 13376 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 13377 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { 13378 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 13379 tg3_flag_set(tp, IS_NIC); 13380 } 13381 val = tr32(VCPU_CFGSHDW); 13382 if (val & VCPU_CFGSHDW_ASPM_DBNC) 13383 tg3_flag_set(tp, ASPM_WORKAROUND); 13384 if ((val & VCPU_CFGSHDW_WOL_ENABLE) && 13385 (val & VCPU_CFGSHDW_WOL_MAGPKT)) { 13386 tg3_flag_set(tp, WOL_ENABLE); 13387 device_set_wakeup_enable(&tp->pdev->dev, true); 13388 } 13389 goto done; 13390 } 13391 13392 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 13393 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 13394 u32 nic_cfg, led_cfg; 13395 u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id; 13396 int eeprom_phy_serdes = 0; 13397 13398 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 13399 tp->nic_sram_data_cfg = nic_cfg; 13400 13401 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver); 13402 ver >>= NIC_SRAM_DATA_VER_SHIFT; 13403 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 13404 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 13405 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703 && 13406 (ver > 0) && (ver < 0x100)) 13407 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2); 13408 13409 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 13410 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4); 13411 13412 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) == 13413 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) 13414 eeprom_phy_serdes = 1; 13415 13416 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id); 13417 if (nic_phy_id != 0) { 13418 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK; 13419 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK; 13420 13421 eeprom_phy_id = (id1 >> 16) << 10; 13422 eeprom_phy_id |= (id2 & 0xfc00) << 16; 13423 eeprom_phy_id |= (id2 & 0x03ff) << 0; 13424 } else 13425 eeprom_phy_id = 0; 13426 13427 tp->phy_id = eeprom_phy_id; 13428 if (eeprom_phy_serdes) { 13429 if (!tg3_flag(tp, 5705_PLUS)) 13430 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 13431 else 13432 tp->phy_flags |= TG3_PHYFLG_MII_SERDES; 13433 } 13434 13435 if (tg3_flag(tp, 5750_PLUS)) 13436 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | 13437 SHASTA_EXT_LED_MODE_MASK); 13438 else 13439 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; 13440 13441 switch (led_cfg) { 13442 default: 13443 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: 13444 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 13445 break; 13446 13447 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: 13448 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 13449 break; 13450 13451 case NIC_SRAM_DATA_CFG_LED_MODE_MAC: 13452 tp->led_ctrl = LED_CTRL_MODE_MAC; 13453 13454 /* Default to PHY_1_MODE if 0 (MAC_MODE) is 13455 * read on some older 5700/5701 bootcode. 13456 */ 13457 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 13458 ASIC_REV_5700 || 13459 GET_ASIC_REV(tp->pci_chip_rev_id) == 13460 ASIC_REV_5701) 13461 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 13462 13463 break; 13464 13465 case SHASTA_EXT_LED_SHARED: 13466 tp->led_ctrl = LED_CTRL_MODE_SHARED; 13467 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && 13468 tp->pci_chip_rev_id != CHIPREV_ID_5750_A1) 13469 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 13470 LED_CTRL_MODE_PHY_2); 13471 break; 13472 13473 case SHASTA_EXT_LED_MAC: 13474 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; 13475 break; 13476 13477 case SHASTA_EXT_LED_COMBO: 13478 tp->led_ctrl = LED_CTRL_MODE_COMBO; 13479 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) 13480 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 13481 LED_CTRL_MODE_PHY_2); 13482 break; 13483 13484 } 13485 13486 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 13487 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) && 13488 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) 13489 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 13490 13491 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) 13492 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 13493 13494 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { 13495 tg3_flag_set(tp, EEPROM_WRITE_PROT); 13496 if ((tp->pdev->subsystem_vendor == 13497 PCI_VENDOR_ID_ARIMA) && 13498 (tp->pdev->subsystem_device == 0x205a || 13499 tp->pdev->subsystem_device == 0x2063)) 13500 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 13501 } else { 13502 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 13503 tg3_flag_set(tp, IS_NIC); 13504 } 13505 13506 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 13507 tg3_flag_set(tp, ENABLE_ASF); 13508 if (tg3_flag(tp, 5750_PLUS)) 13509 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 13510 } 13511 13512 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) && 13513 tg3_flag(tp, 5750_PLUS)) 13514 tg3_flag_set(tp, ENABLE_APE); 13515 13516 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES && 13517 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)) 13518 tg3_flag_clear(tp, WOL_CAP); 13519 13520 if (tg3_flag(tp, WOL_CAP) && 13521 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { 13522 tg3_flag_set(tp, WOL_ENABLE); 13523 device_set_wakeup_enable(&tp->pdev->dev, true); 13524 } 13525 13526 if (cfg2 & (1 << 17)) 13527 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; 13528 13529 /* serdes signal pre-emphasis in register 0x590 set by */ 13530 /* bootcode if bit 18 is set */ 13531 if (cfg2 & (1 << 18)) 13532 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS; 13533 13534 if ((tg3_flag(tp, 57765_PLUS) || 13535 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 13536 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX)) && 13537 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN)) 13538 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD; 13539 13540 if (tg3_flag(tp, PCI_EXPRESS) && 13541 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 13542 !tg3_flag(tp, 57765_PLUS)) { 13543 u32 cfg3; 13544 13545 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3); 13546 if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE) 13547 tg3_flag_set(tp, ASPM_WORKAROUND); 13548 } 13549 13550 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE) 13551 tg3_flag_set(tp, RGMII_INBAND_DISABLE); 13552 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN) 13553 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN); 13554 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN) 13555 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN); 13556 } 13557 done: 13558 if (tg3_flag(tp, WOL_CAP)) 13559 device_set_wakeup_enable(&tp->pdev->dev, 13560 tg3_flag(tp, WOL_ENABLE)); 13561 else 13562 device_set_wakeup_capable(&tp->pdev->dev, false); 13563 } 13564 13565 static int __devinit tg3_issue_otp_command(struct tg3 *tp, u32 cmd) 13566 { 13567 int i; 13568 u32 val; 13569 13570 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START); 13571 tw32(OTP_CTRL, cmd); 13572 13573 /* Wait for up to 1 ms for command to execute. */ 13574 for (i = 0; i < 100; i++) { 13575 val = tr32(OTP_STATUS); 13576 if (val & OTP_STATUS_CMD_DONE) 13577 break; 13578 udelay(10); 13579 } 13580 13581 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY; 13582 } 13583 13584 /* Read the gphy configuration from the OTP region of the chip. The gphy 13585 * configuration is a 32-bit value that straddles the alignment boundary. 13586 * We do two 32-bit reads and then shift and merge the results. 13587 */ 13588 static u32 __devinit tg3_read_otp_phycfg(struct tg3 *tp) 13589 { 13590 u32 bhalf_otp, thalf_otp; 13591 13592 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC); 13593 13594 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT)) 13595 return 0; 13596 13597 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1); 13598 13599 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 13600 return 0; 13601 13602 thalf_otp = tr32(OTP_READ_DATA); 13603 13604 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2); 13605 13606 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 13607 return 0; 13608 13609 bhalf_otp = tr32(OTP_READ_DATA); 13610 13611 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); 13612 } 13613 13614 static void __devinit tg3_phy_init_link_config(struct tg3 *tp) 13615 { 13616 u32 adv = ADVERTISED_Autoneg; 13617 13618 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 13619 adv |= ADVERTISED_1000baseT_Half | 13620 ADVERTISED_1000baseT_Full; 13621 13622 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 13623 adv |= ADVERTISED_100baseT_Half | 13624 ADVERTISED_100baseT_Full | 13625 ADVERTISED_10baseT_Half | 13626 ADVERTISED_10baseT_Full | 13627 ADVERTISED_TP; 13628 else 13629 adv |= ADVERTISED_FIBRE; 13630 13631 tp->link_config.advertising = adv; 13632 tp->link_config.speed = SPEED_UNKNOWN; 13633 tp->link_config.duplex = DUPLEX_UNKNOWN; 13634 tp->link_config.autoneg = AUTONEG_ENABLE; 13635 tp->link_config.active_speed = SPEED_UNKNOWN; 13636 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 13637 13638 tp->old_link = -1; 13639 } 13640 13641 static int __devinit tg3_phy_probe(struct tg3 *tp) 13642 { 13643 u32 hw_phy_id_1, hw_phy_id_2; 13644 u32 hw_phy_id, hw_phy_id_masked; 13645 int err; 13646 13647 /* flow control autonegotiation is default behavior */ 13648 tg3_flag_set(tp, PAUSE_AUTONEG); 13649 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX; 13650 13651 if (tg3_flag(tp, USE_PHYLIB)) 13652 return tg3_phy_init(tp); 13653 13654 /* Reading the PHY ID register can conflict with ASF 13655 * firmware access to the PHY hardware. 13656 */ 13657 err = 0; 13658 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) { 13659 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID; 13660 } else { 13661 /* Now read the physical PHY_ID from the chip and verify 13662 * that it is sane. If it doesn't look good, we fall back 13663 * to either the hard-coded table based PHY_ID and failing 13664 * that the value found in the eeprom area. 13665 */ 13666 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1); 13667 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2); 13668 13669 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10; 13670 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16; 13671 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0; 13672 13673 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK; 13674 } 13675 13676 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) { 13677 tp->phy_id = hw_phy_id; 13678 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002) 13679 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 13680 else 13681 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES; 13682 } else { 13683 if (tp->phy_id != TG3_PHY_ID_INVALID) { 13684 /* Do nothing, phy ID already set up in 13685 * tg3_get_eeprom_hw_cfg(). 13686 */ 13687 } else { 13688 struct subsys_tbl_ent *p; 13689 13690 /* No eeprom signature? Try the hardcoded 13691 * subsys device table. 13692 */ 13693 p = tg3_lookup_by_subsys(tp); 13694 if (!p) 13695 return -ENODEV; 13696 13697 tp->phy_id = p->phy_id; 13698 if (!tp->phy_id || 13699 tp->phy_id == TG3_PHY_ID_BCM8002) 13700 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 13701 } 13702 } 13703 13704 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 13705 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 13706 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || 13707 (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 && 13708 tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) || 13709 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 && 13710 tp->pci_chip_rev_id != CHIPREV_ID_57765_A0))) 13711 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 13712 13713 tg3_phy_init_link_config(tp); 13714 13715 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 13716 !tg3_flag(tp, ENABLE_APE) && 13717 !tg3_flag(tp, ENABLE_ASF)) { 13718 u32 bmsr, dummy; 13719 13720 tg3_readphy(tp, MII_BMSR, &bmsr); 13721 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 13722 (bmsr & BMSR_LSTATUS)) 13723 goto skip_phy_reset; 13724 13725 err = tg3_phy_reset(tp); 13726 if (err) 13727 return err; 13728 13729 tg3_phy_set_wirespeed(tp); 13730 13731 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) { 13732 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 13733 tp->link_config.flowctrl); 13734 13735 tg3_writephy(tp, MII_BMCR, 13736 BMCR_ANENABLE | BMCR_ANRESTART); 13737 } 13738 } 13739 13740 skip_phy_reset: 13741 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 13742 err = tg3_init_5401phy_dsp(tp); 13743 if (err) 13744 return err; 13745 13746 err = tg3_init_5401phy_dsp(tp); 13747 } 13748 13749 return err; 13750 } 13751 13752 static void __devinit tg3_read_vpd(struct tg3 *tp) 13753 { 13754 u8 *vpd_data; 13755 unsigned int block_end, rosize, len; 13756 u32 vpdlen; 13757 int j, i = 0; 13758 13759 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen); 13760 if (!vpd_data) 13761 goto out_no_vpd; 13762 13763 i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA); 13764 if (i < 0) 13765 goto out_not_found; 13766 13767 rosize = pci_vpd_lrdt_size(&vpd_data[i]); 13768 block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize; 13769 i += PCI_VPD_LRDT_TAG_SIZE; 13770 13771 if (block_end > vpdlen) 13772 goto out_not_found; 13773 13774 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 13775 PCI_VPD_RO_KEYWORD_MFR_ID); 13776 if (j > 0) { 13777 len = pci_vpd_info_field_size(&vpd_data[j]); 13778 13779 j += PCI_VPD_INFO_FLD_HDR_SIZE; 13780 if (j + len > block_end || len != 4 || 13781 memcmp(&vpd_data[j], "1028", 4)) 13782 goto partno; 13783 13784 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 13785 PCI_VPD_RO_KEYWORD_VENDOR0); 13786 if (j < 0) 13787 goto partno; 13788 13789 len = pci_vpd_info_field_size(&vpd_data[j]); 13790 13791 j += PCI_VPD_INFO_FLD_HDR_SIZE; 13792 if (j + len > block_end) 13793 goto partno; 13794 13795 memcpy(tp->fw_ver, &vpd_data[j], len); 13796 strncat(tp->fw_ver, " bc ", vpdlen - len - 1); 13797 } 13798 13799 partno: 13800 i = pci_vpd_find_info_keyword(vpd_data, i, rosize, 13801 PCI_VPD_RO_KEYWORD_PARTNO); 13802 if (i < 0) 13803 goto out_not_found; 13804 13805 len = pci_vpd_info_field_size(&vpd_data[i]); 13806 13807 i += PCI_VPD_INFO_FLD_HDR_SIZE; 13808 if (len > TG3_BPN_SIZE || 13809 (len + i) > vpdlen) 13810 goto out_not_found; 13811 13812 memcpy(tp->board_part_number, &vpd_data[i], len); 13813 13814 out_not_found: 13815 kfree(vpd_data); 13816 if (tp->board_part_number[0]) 13817 return; 13818 13819 out_no_vpd: 13820 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { 13821 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717) 13822 strcpy(tp->board_part_number, "BCM5717"); 13823 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718) 13824 strcpy(tp->board_part_number, "BCM5718"); 13825 else 13826 goto nomatch; 13827 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 13828 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780) 13829 strcpy(tp->board_part_number, "BCM57780"); 13830 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760) 13831 strcpy(tp->board_part_number, "BCM57760"); 13832 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790) 13833 strcpy(tp->board_part_number, "BCM57790"); 13834 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788) 13835 strcpy(tp->board_part_number, "BCM57788"); 13836 else 13837 goto nomatch; 13838 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) { 13839 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761) 13840 strcpy(tp->board_part_number, "BCM57761"); 13841 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765) 13842 strcpy(tp->board_part_number, "BCM57765"); 13843 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781) 13844 strcpy(tp->board_part_number, "BCM57781"); 13845 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785) 13846 strcpy(tp->board_part_number, "BCM57785"); 13847 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791) 13848 strcpy(tp->board_part_number, "BCM57791"); 13849 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 13850 strcpy(tp->board_part_number, "BCM57795"); 13851 else 13852 goto nomatch; 13853 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) { 13854 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762) 13855 strcpy(tp->board_part_number, "BCM57762"); 13856 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766) 13857 strcpy(tp->board_part_number, "BCM57766"); 13858 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782) 13859 strcpy(tp->board_part_number, "BCM57782"); 13860 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 13861 strcpy(tp->board_part_number, "BCM57786"); 13862 else 13863 goto nomatch; 13864 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 13865 strcpy(tp->board_part_number, "BCM95906"); 13866 } else { 13867 nomatch: 13868 strcpy(tp->board_part_number, "none"); 13869 } 13870 } 13871 13872 static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) 13873 { 13874 u32 val; 13875 13876 if (tg3_nvram_read(tp, offset, &val) || 13877 (val & 0xfc000000) != 0x0c000000 || 13878 tg3_nvram_read(tp, offset + 4, &val) || 13879 val != 0) 13880 return 0; 13881 13882 return 1; 13883 } 13884 13885 static void __devinit tg3_read_bc_ver(struct tg3 *tp) 13886 { 13887 u32 val, offset, start, ver_offset; 13888 int i, dst_off; 13889 bool newver = false; 13890 13891 if (tg3_nvram_read(tp, 0xc, &offset) || 13892 tg3_nvram_read(tp, 0x4, &start)) 13893 return; 13894 13895 offset = tg3_nvram_logical_addr(tp, offset); 13896 13897 if (tg3_nvram_read(tp, offset, &val)) 13898 return; 13899 13900 if ((val & 0xfc000000) == 0x0c000000) { 13901 if (tg3_nvram_read(tp, offset + 4, &val)) 13902 return; 13903 13904 if (val == 0) 13905 newver = true; 13906 } 13907 13908 dst_off = strlen(tp->fw_ver); 13909 13910 if (newver) { 13911 if (TG3_VER_SIZE - dst_off < 16 || 13912 tg3_nvram_read(tp, offset + 8, &ver_offset)) 13913 return; 13914 13915 offset = offset + ver_offset - start; 13916 for (i = 0; i < 16; i += 4) { 13917 __be32 v; 13918 if (tg3_nvram_read_be32(tp, offset + i, &v)) 13919 return; 13920 13921 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v)); 13922 } 13923 } else { 13924 u32 major, minor; 13925 13926 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset)) 13927 return; 13928 13929 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >> 13930 TG3_NVM_BCVER_MAJSFT; 13931 minor = ver_offset & TG3_NVM_BCVER_MINMSK; 13932 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off, 13933 "v%d.%02d", major, minor); 13934 } 13935 } 13936 13937 static void __devinit tg3_read_hwsb_ver(struct tg3 *tp) 13938 { 13939 u32 val, major, minor; 13940 13941 /* Use native endian representation */ 13942 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val)) 13943 return; 13944 13945 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >> 13946 TG3_NVM_HWSB_CFG1_MAJSFT; 13947 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >> 13948 TG3_NVM_HWSB_CFG1_MINSFT; 13949 13950 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); 13951 } 13952 13953 static void __devinit tg3_read_sb_ver(struct tg3 *tp, u32 val) 13954 { 13955 u32 offset, major, minor, build; 13956 13957 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1); 13958 13959 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1) 13960 return; 13961 13962 switch (val & TG3_EEPROM_SB_REVISION_MASK) { 13963 case TG3_EEPROM_SB_REVISION_0: 13964 offset = TG3_EEPROM_SB_F1R0_EDH_OFF; 13965 break; 13966 case TG3_EEPROM_SB_REVISION_2: 13967 offset = TG3_EEPROM_SB_F1R2_EDH_OFF; 13968 break; 13969 case TG3_EEPROM_SB_REVISION_3: 13970 offset = TG3_EEPROM_SB_F1R3_EDH_OFF; 13971 break; 13972 case TG3_EEPROM_SB_REVISION_4: 13973 offset = TG3_EEPROM_SB_F1R4_EDH_OFF; 13974 break; 13975 case TG3_EEPROM_SB_REVISION_5: 13976 offset = TG3_EEPROM_SB_F1R5_EDH_OFF; 13977 break; 13978 case TG3_EEPROM_SB_REVISION_6: 13979 offset = TG3_EEPROM_SB_F1R6_EDH_OFF; 13980 break; 13981 default: 13982 return; 13983 } 13984 13985 if (tg3_nvram_read(tp, offset, &val)) 13986 return; 13987 13988 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >> 13989 TG3_EEPROM_SB_EDH_BLD_SHFT; 13990 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >> 13991 TG3_EEPROM_SB_EDH_MAJ_SHFT; 13992 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK; 13993 13994 if (minor > 99 || build > 26) 13995 return; 13996 13997 offset = strlen(tp->fw_ver); 13998 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset, 13999 " v%d.%02d", major, minor); 14000 14001 if (build > 0) { 14002 offset = strlen(tp->fw_ver); 14003 if (offset < TG3_VER_SIZE - 1) 14004 tp->fw_ver[offset] = 'a' + build - 1; 14005 } 14006 } 14007 14008 static void __devinit tg3_read_mgmtfw_ver(struct tg3 *tp) 14009 { 14010 u32 val, offset, start; 14011 int i, vlen; 14012 14013 for (offset = TG3_NVM_DIR_START; 14014 offset < TG3_NVM_DIR_END; 14015 offset += TG3_NVM_DIRENT_SIZE) { 14016 if (tg3_nvram_read(tp, offset, &val)) 14017 return; 14018 14019 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI) 14020 break; 14021 } 14022 14023 if (offset == TG3_NVM_DIR_END) 14024 return; 14025 14026 if (!tg3_flag(tp, 5705_PLUS)) 14027 start = 0x08000000; 14028 else if (tg3_nvram_read(tp, offset - 4, &start)) 14029 return; 14030 14031 if (tg3_nvram_read(tp, offset + 4, &offset) || 14032 !tg3_fw_img_is_valid(tp, offset) || 14033 tg3_nvram_read(tp, offset + 8, &val)) 14034 return; 14035 14036 offset += val - start; 14037 14038 vlen = strlen(tp->fw_ver); 14039 14040 tp->fw_ver[vlen++] = ','; 14041 tp->fw_ver[vlen++] = ' '; 14042 14043 for (i = 0; i < 4; i++) { 14044 __be32 v; 14045 if (tg3_nvram_read_be32(tp, offset, &v)) 14046 return; 14047 14048 offset += sizeof(v); 14049 14050 if (vlen > TG3_VER_SIZE - sizeof(v)) { 14051 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen); 14052 break; 14053 } 14054 14055 memcpy(&tp->fw_ver[vlen], &v, sizeof(v)); 14056 vlen += sizeof(v); 14057 } 14058 } 14059 14060 static void __devinit tg3_probe_ncsi(struct tg3 *tp) 14061 { 14062 u32 apedata; 14063 14064 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 14065 if (apedata != APE_SEG_SIG_MAGIC) 14066 return; 14067 14068 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 14069 if (!(apedata & APE_FW_STATUS_READY)) 14070 return; 14071 14072 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) 14073 tg3_flag_set(tp, APE_HAS_NCSI); 14074 } 14075 14076 static void __devinit tg3_read_dash_ver(struct tg3 *tp) 14077 { 14078 int vlen; 14079 u32 apedata; 14080 char *fwtype; 14081 14082 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 14083 14084 if (tg3_flag(tp, APE_HAS_NCSI)) 14085 fwtype = "NCSI"; 14086 else 14087 fwtype = "DASH"; 14088 14089 vlen = strlen(tp->fw_ver); 14090 14091 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d", 14092 fwtype, 14093 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT, 14094 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT, 14095 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT, 14096 (apedata & APE_FW_VERSION_BLDMSK)); 14097 } 14098 14099 static void __devinit tg3_read_fw_ver(struct tg3 *tp) 14100 { 14101 u32 val; 14102 bool vpd_vers = false; 14103 14104 if (tp->fw_ver[0] != 0) 14105 vpd_vers = true; 14106 14107 if (tg3_flag(tp, NO_NVRAM)) { 14108 strcat(tp->fw_ver, "sb"); 14109 return; 14110 } 14111 14112 if (tg3_nvram_read(tp, 0, &val)) 14113 return; 14114 14115 if (val == TG3_EEPROM_MAGIC) 14116 tg3_read_bc_ver(tp); 14117 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) 14118 tg3_read_sb_ver(tp, val); 14119 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 14120 tg3_read_hwsb_ver(tp); 14121 14122 if (tg3_flag(tp, ENABLE_ASF)) { 14123 if (tg3_flag(tp, ENABLE_APE)) { 14124 tg3_probe_ncsi(tp); 14125 if (!vpd_vers) 14126 tg3_read_dash_ver(tp); 14127 } else if (!vpd_vers) { 14128 tg3_read_mgmtfw_ver(tp); 14129 } 14130 } 14131 14132 tp->fw_ver[TG3_VER_SIZE - 1] = 0; 14133 } 14134 14135 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp) 14136 { 14137 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 14138 return TG3_RX_RET_MAX_SIZE_5717; 14139 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) 14140 return TG3_RX_RET_MAX_SIZE_5700; 14141 else 14142 return TG3_RX_RET_MAX_SIZE_5705; 14143 } 14144 14145 static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = { 14146 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) }, 14147 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) }, 14148 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) }, 14149 { }, 14150 }; 14151 14152 static struct pci_dev * __devinit tg3_find_peer(struct tg3 *tp) 14153 { 14154 struct pci_dev *peer; 14155 unsigned int func, devnr = tp->pdev->devfn & ~7; 14156 14157 for (func = 0; func < 8; func++) { 14158 peer = pci_get_slot(tp->pdev->bus, devnr | func); 14159 if (peer && peer != tp->pdev) 14160 break; 14161 pci_dev_put(peer); 14162 } 14163 /* 5704 can be configured in single-port mode, set peer to 14164 * tp->pdev in that case. 14165 */ 14166 if (!peer) { 14167 peer = tp->pdev; 14168 return peer; 14169 } 14170 14171 /* 14172 * We don't need to keep the refcount elevated; there's no way 14173 * to remove one half of this device without removing the other 14174 */ 14175 pci_dev_put(peer); 14176 14177 return peer; 14178 } 14179 14180 static void __devinit tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) 14181 { 14182 tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT; 14183 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) { 14184 u32 reg; 14185 14186 /* All devices that use the alternate 14187 * ASIC REV location have a CPMU. 14188 */ 14189 tg3_flag_set(tp, CPMU_PRESENT); 14190 14191 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 14192 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 14193 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 14194 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) 14195 reg = TG3PCI_GEN2_PRODID_ASICREV; 14196 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || 14197 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || 14198 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 || 14199 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 || 14200 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 14201 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 14202 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 || 14203 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 || 14204 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 || 14205 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 14206 reg = TG3PCI_GEN15_PRODID_ASICREV; 14207 else 14208 reg = TG3PCI_PRODID_ASICREV; 14209 14210 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id); 14211 } 14212 14213 /* Wrong chip ID in 5752 A0. This code can be removed later 14214 * as A0 is not in production. 14215 */ 14216 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW) 14217 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; 14218 14219 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 14220 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 14221 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 14222 tg3_flag_set(tp, 5717_PLUS); 14223 14224 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 || 14225 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) 14226 tg3_flag_set(tp, 57765_CLASS); 14227 14228 if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS)) 14229 tg3_flag_set(tp, 57765_PLUS); 14230 14231 /* Intentionally exclude ASIC_REV_5906 */ 14232 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 14233 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 14234 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 14235 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 14236 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 14237 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 14238 tg3_flag(tp, 57765_PLUS)) 14239 tg3_flag_set(tp, 5755_PLUS); 14240 14241 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 || 14242 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) 14243 tg3_flag_set(tp, 5780_CLASS); 14244 14245 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 14246 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 14247 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 || 14248 tg3_flag(tp, 5755_PLUS) || 14249 tg3_flag(tp, 5780_CLASS)) 14250 tg3_flag_set(tp, 5750_PLUS); 14251 14252 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || 14253 tg3_flag(tp, 5750_PLUS)) 14254 tg3_flag_set(tp, 5705_PLUS); 14255 } 14256 14257 static int __devinit tg3_get_invariants(struct tg3 *tp) 14258 { 14259 u32 misc_ctrl_reg; 14260 u32 pci_state_reg, grc_misc_cfg; 14261 u32 val; 14262 u16 pci_cmd; 14263 int err; 14264 14265 /* Force memory write invalidate off. If we leave it on, 14266 * then on 5700_BX chips we have to enable a workaround. 14267 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary 14268 * to match the cacheline size. The Broadcom driver have this 14269 * workaround but turns MWI off all the times so never uses 14270 * it. This seems to suggest that the workaround is insufficient. 14271 */ 14272 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 14273 pci_cmd &= ~PCI_COMMAND_INVALIDATE; 14274 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 14275 14276 /* Important! -- Make sure register accesses are byteswapped 14277 * correctly. Also, for those chips that require it, make 14278 * sure that indirect register accesses are enabled before 14279 * the first operation. 14280 */ 14281 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 14282 &misc_ctrl_reg); 14283 tp->misc_host_ctrl |= (misc_ctrl_reg & 14284 MISC_HOST_CTRL_CHIPREV); 14285 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 14286 tp->misc_host_ctrl); 14287 14288 tg3_detect_asic_rev(tp, misc_ctrl_reg); 14289 14290 /* If we have 5702/03 A1 or A2 on certain ICH chipsets, 14291 * we need to disable memory and use config. cycles 14292 * only to access all registers. The 5702/03 chips 14293 * can mistakenly decode the special cycles from the 14294 * ICH chipsets as memory write cycles, causing corruption 14295 * of register and memory space. Only certain ICH bridges 14296 * will drive special cycles with non-zero data during the 14297 * address phase which can fall within the 5703's address 14298 * range. This is not an ICH bug as the PCI spec allows 14299 * non-zero address during special cycles. However, only 14300 * these ICH bridges are known to drive non-zero addresses 14301 * during special cycles. 14302 * 14303 * Since special cycles do not cross PCI bridges, we only 14304 * enable this workaround if the 5703 is on the secondary 14305 * bus of these ICH bridges. 14306 */ 14307 if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) || 14308 (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) { 14309 static struct tg3_dev_id { 14310 u32 vendor; 14311 u32 device; 14312 u32 rev; 14313 } ich_chipsets[] = { 14314 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8, 14315 PCI_ANY_ID }, 14316 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8, 14317 PCI_ANY_ID }, 14318 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11, 14319 0xa }, 14320 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6, 14321 PCI_ANY_ID }, 14322 { }, 14323 }; 14324 struct tg3_dev_id *pci_id = &ich_chipsets[0]; 14325 struct pci_dev *bridge = NULL; 14326 14327 while (pci_id->vendor != 0) { 14328 bridge = pci_get_device(pci_id->vendor, pci_id->device, 14329 bridge); 14330 if (!bridge) { 14331 pci_id++; 14332 continue; 14333 } 14334 if (pci_id->rev != PCI_ANY_ID) { 14335 if (bridge->revision > pci_id->rev) 14336 continue; 14337 } 14338 if (bridge->subordinate && 14339 (bridge->subordinate->number == 14340 tp->pdev->bus->number)) { 14341 tg3_flag_set(tp, ICH_WORKAROUND); 14342 pci_dev_put(bridge); 14343 break; 14344 } 14345 } 14346 } 14347 14348 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 14349 static struct tg3_dev_id { 14350 u32 vendor; 14351 u32 device; 14352 } bridge_chipsets[] = { 14353 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, 14354 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, 14355 { }, 14356 }; 14357 struct tg3_dev_id *pci_id = &bridge_chipsets[0]; 14358 struct pci_dev *bridge = NULL; 14359 14360 while (pci_id->vendor != 0) { 14361 bridge = pci_get_device(pci_id->vendor, 14362 pci_id->device, 14363 bridge); 14364 if (!bridge) { 14365 pci_id++; 14366 continue; 14367 } 14368 if (bridge->subordinate && 14369 (bridge->subordinate->number <= 14370 tp->pdev->bus->number) && 14371 (bridge->subordinate->busn_res.end >= 14372 tp->pdev->bus->number)) { 14373 tg3_flag_set(tp, 5701_DMA_BUG); 14374 pci_dev_put(bridge); 14375 break; 14376 } 14377 } 14378 } 14379 14380 /* The EPB bridge inside 5714, 5715, and 5780 cannot support 14381 * DMA addresses > 40-bit. This bridge may have other additional 14382 * 57xx devices behind it in some 4-port NIC designs for example. 14383 * Any tg3 device found behind the bridge will also need the 40-bit 14384 * DMA workaround. 14385 */ 14386 if (tg3_flag(tp, 5780_CLASS)) { 14387 tg3_flag_set(tp, 40BIT_DMA_BUG); 14388 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI); 14389 } else { 14390 struct pci_dev *bridge = NULL; 14391 14392 do { 14393 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS, 14394 PCI_DEVICE_ID_SERVERWORKS_EPB, 14395 bridge); 14396 if (bridge && bridge->subordinate && 14397 (bridge->subordinate->number <= 14398 tp->pdev->bus->number) && 14399 (bridge->subordinate->busn_res.end >= 14400 tp->pdev->bus->number)) { 14401 tg3_flag_set(tp, 40BIT_DMA_BUG); 14402 pci_dev_put(bridge); 14403 break; 14404 } 14405 } while (bridge); 14406 } 14407 14408 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 14409 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) 14410 tp->pdev_peer = tg3_find_peer(tp); 14411 14412 /* Determine TSO capabilities */ 14413 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) 14414 ; /* Do nothing. HW bug. */ 14415 else if (tg3_flag(tp, 57765_PLUS)) 14416 tg3_flag_set(tp, HW_TSO_3); 14417 else if (tg3_flag(tp, 5755_PLUS) || 14418 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 14419 tg3_flag_set(tp, HW_TSO_2); 14420 else if (tg3_flag(tp, 5750_PLUS)) { 14421 tg3_flag_set(tp, HW_TSO_1); 14422 tg3_flag_set(tp, TSO_BUG); 14423 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 && 14424 tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2) 14425 tg3_flag_clear(tp, TSO_BUG); 14426 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 14427 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 14428 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 14429 tg3_flag_set(tp, TSO_BUG); 14430 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) 14431 tp->fw_needed = FIRMWARE_TG3TSO5; 14432 else 14433 tp->fw_needed = FIRMWARE_TG3TSO; 14434 } 14435 14436 /* Selectively allow TSO based on operating conditions */ 14437 if (tg3_flag(tp, HW_TSO_1) || 14438 tg3_flag(tp, HW_TSO_2) || 14439 tg3_flag(tp, HW_TSO_3) || 14440 tp->fw_needed) { 14441 /* For firmware TSO, assume ASF is disabled. 14442 * We'll disable TSO later if we discover ASF 14443 * is enabled in tg3_get_eeprom_hw_cfg(). 14444 */ 14445 tg3_flag_set(tp, TSO_CAPABLE); 14446 } else { 14447 tg3_flag_clear(tp, TSO_CAPABLE); 14448 tg3_flag_clear(tp, TSO_BUG); 14449 tp->fw_needed = NULL; 14450 } 14451 14452 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) 14453 tp->fw_needed = FIRMWARE_TG3; 14454 14455 tp->irq_max = 1; 14456 14457 if (tg3_flag(tp, 5750_PLUS)) { 14458 tg3_flag_set(tp, SUPPORT_MSI); 14459 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX || 14460 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX || 14461 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 && 14462 tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 && 14463 tp->pdev_peer == tp->pdev)) 14464 tg3_flag_clear(tp, SUPPORT_MSI); 14465 14466 if (tg3_flag(tp, 5755_PLUS) || 14467 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 14468 tg3_flag_set(tp, 1SHOT_MSI); 14469 } 14470 14471 if (tg3_flag(tp, 57765_PLUS)) { 14472 tg3_flag_set(tp, SUPPORT_MSIX); 14473 tp->irq_max = TG3_IRQ_MAX_VECS; 14474 tg3_rss_init_dflt_indir_tbl(tp); 14475 } 14476 } 14477 14478 if (tg3_flag(tp, 5755_PLUS) || 14479 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 14480 tg3_flag_set(tp, SHORT_DMA_BUG); 14481 14482 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 14483 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K; 14484 14485 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 14486 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 14487 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 14488 tg3_flag_set(tp, LRG_PROD_RING_CAP); 14489 14490 if (tg3_flag(tp, 57765_PLUS) && 14491 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0) 14492 tg3_flag_set(tp, USE_JUMBO_BDFLAG); 14493 14494 if (!tg3_flag(tp, 5705_PLUS) || 14495 tg3_flag(tp, 5780_CLASS) || 14496 tg3_flag(tp, USE_JUMBO_BDFLAG)) 14497 tg3_flag_set(tp, JUMBO_CAPABLE); 14498 14499 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 14500 &pci_state_reg); 14501 14502 if (pci_is_pcie(tp->pdev)) { 14503 u16 lnkctl; 14504 14505 tg3_flag_set(tp, PCI_EXPRESS); 14506 14507 pci_read_config_word(tp->pdev, 14508 pci_pcie_cap(tp->pdev) + PCI_EXP_LNKCTL, 14509 &lnkctl); 14510 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) { 14511 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 14512 ASIC_REV_5906) { 14513 tg3_flag_clear(tp, HW_TSO_2); 14514 tg3_flag_clear(tp, TSO_CAPABLE); 14515 } 14516 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 14517 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 14518 tp->pci_chip_rev_id == CHIPREV_ID_57780_A0 || 14519 tp->pci_chip_rev_id == CHIPREV_ID_57780_A1) 14520 tg3_flag_set(tp, CLKREQ_BUG); 14521 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) { 14522 tg3_flag_set(tp, L1PLLPD_EN); 14523 } 14524 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 14525 /* BCM5785 devices are effectively PCIe devices, and should 14526 * follow PCIe codepaths, but do not have a PCIe capabilities 14527 * section. 14528 */ 14529 tg3_flag_set(tp, PCI_EXPRESS); 14530 } else if (!tg3_flag(tp, 5705_PLUS) || 14531 tg3_flag(tp, 5780_CLASS)) { 14532 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX); 14533 if (!tp->pcix_cap) { 14534 dev_err(&tp->pdev->dev, 14535 "Cannot find PCI-X capability, aborting\n"); 14536 return -EIO; 14537 } 14538 14539 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE)) 14540 tg3_flag_set(tp, PCIX_MODE); 14541 } 14542 14543 /* If we have an AMD 762 or VIA K8T800 chipset, write 14544 * reordering to the mailbox registers done by the host 14545 * controller can cause major troubles. We read back from 14546 * every mailbox register write to force the writes to be 14547 * posted to the chip in order. 14548 */ 14549 if (pci_dev_present(tg3_write_reorder_chipsets) && 14550 !tg3_flag(tp, PCI_EXPRESS)) 14551 tg3_flag_set(tp, MBOX_WRITE_REORDER); 14552 14553 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 14554 &tp->pci_cacheline_sz); 14555 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, 14556 &tp->pci_lat_timer); 14557 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 && 14558 tp->pci_lat_timer < 64) { 14559 tp->pci_lat_timer = 64; 14560 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 14561 tp->pci_lat_timer); 14562 } 14563 14564 /* Important! -- It is critical that the PCI-X hw workaround 14565 * situation is decided before the first MMIO register access. 14566 */ 14567 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) { 14568 /* 5700 BX chips need to have their TX producer index 14569 * mailboxes written twice to workaround a bug. 14570 */ 14571 tg3_flag_set(tp, TXD_MBOX_HWBUG); 14572 14573 /* If we are in PCI-X mode, enable register write workaround. 14574 * 14575 * The workaround is to use indirect register accesses 14576 * for all chip writes not to mailbox registers. 14577 */ 14578 if (tg3_flag(tp, PCIX_MODE)) { 14579 u32 pm_reg; 14580 14581 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 14582 14583 /* The chip can have it's power management PCI config 14584 * space registers clobbered due to this bug. 14585 * So explicitly force the chip into D0 here. 14586 */ 14587 pci_read_config_dword(tp->pdev, 14588 tp->pm_cap + PCI_PM_CTRL, 14589 &pm_reg); 14590 pm_reg &= ~PCI_PM_CTRL_STATE_MASK; 14591 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */; 14592 pci_write_config_dword(tp->pdev, 14593 tp->pm_cap + PCI_PM_CTRL, 14594 pm_reg); 14595 14596 /* Also, force SERR#/PERR# in PCI command. */ 14597 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 14598 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; 14599 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 14600 } 14601 } 14602 14603 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) 14604 tg3_flag_set(tp, PCI_HIGH_SPEED); 14605 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0) 14606 tg3_flag_set(tp, PCI_32BIT); 14607 14608 /* Chip-specific fixup from Broadcom driver */ 14609 if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) && 14610 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) { 14611 pci_state_reg |= PCISTATE_RETRY_SAME_DMA; 14612 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg); 14613 } 14614 14615 /* Default fast path register access methods */ 14616 tp->read32 = tg3_read32; 14617 tp->write32 = tg3_write32; 14618 tp->read32_mbox = tg3_read32; 14619 tp->write32_mbox = tg3_write32; 14620 tp->write32_tx_mbox = tg3_write32; 14621 tp->write32_rx_mbox = tg3_write32; 14622 14623 /* Various workaround register access methods */ 14624 if (tg3_flag(tp, PCIX_TARGET_HWBUG)) 14625 tp->write32 = tg3_write_indirect_reg32; 14626 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 || 14627 (tg3_flag(tp, PCI_EXPRESS) && 14628 tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) { 14629 /* 14630 * Back to back register writes can cause problems on these 14631 * chips, the workaround is to read back all reg writes 14632 * except those to mailbox regs. 14633 * 14634 * See tg3_write_indirect_reg32(). 14635 */ 14636 tp->write32 = tg3_write_flush_reg32; 14637 } 14638 14639 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) { 14640 tp->write32_tx_mbox = tg3_write32_tx_mbox; 14641 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 14642 tp->write32_rx_mbox = tg3_write_flush_reg32; 14643 } 14644 14645 if (tg3_flag(tp, ICH_WORKAROUND)) { 14646 tp->read32 = tg3_read_indirect_reg32; 14647 tp->write32 = tg3_write_indirect_reg32; 14648 tp->read32_mbox = tg3_read_indirect_mbox; 14649 tp->write32_mbox = tg3_write_indirect_mbox; 14650 tp->write32_tx_mbox = tg3_write_indirect_mbox; 14651 tp->write32_rx_mbox = tg3_write_indirect_mbox; 14652 14653 iounmap(tp->regs); 14654 tp->regs = NULL; 14655 14656 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 14657 pci_cmd &= ~PCI_COMMAND_MEMORY; 14658 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 14659 } 14660 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 14661 tp->read32_mbox = tg3_read32_mbox_5906; 14662 tp->write32_mbox = tg3_write32_mbox_5906; 14663 tp->write32_tx_mbox = tg3_write32_mbox_5906; 14664 tp->write32_rx_mbox = tg3_write32_mbox_5906; 14665 } 14666 14667 if (tp->write32 == tg3_write_indirect_reg32 || 14668 (tg3_flag(tp, PCIX_MODE) && 14669 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14670 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701))) 14671 tg3_flag_set(tp, SRAM_USE_CONFIG); 14672 14673 /* The memory arbiter has to be enabled in order for SRAM accesses 14674 * to succeed. Normally on powerup the tg3 chip firmware will make 14675 * sure it is enabled, but other entities such as system netboot 14676 * code might disable it. 14677 */ 14678 val = tr32(MEMARB_MODE); 14679 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 14680 14681 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; 14682 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 14683 tg3_flag(tp, 5780_CLASS)) { 14684 if (tg3_flag(tp, PCIX_MODE)) { 14685 pci_read_config_dword(tp->pdev, 14686 tp->pcix_cap + PCI_X_STATUS, 14687 &val); 14688 tp->pci_fn = val & 0x7; 14689 } 14690 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { 14691 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 14692 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) == 14693 NIC_SRAM_CPMUSTAT_SIG) { 14694 tp->pci_fn = val & TG3_CPMU_STATUS_FMSK_5717; 14695 tp->pci_fn = tp->pci_fn ? 1 : 0; 14696 } 14697 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 14698 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 14699 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 14700 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) == 14701 NIC_SRAM_CPMUSTAT_SIG) { 14702 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >> 14703 TG3_CPMU_STATUS_FSHFT_5719; 14704 } 14705 } 14706 14707 /* Get eeprom hw config before calling tg3_set_power_state(). 14708 * In particular, the TG3_FLAG_IS_NIC flag must be 14709 * determined before calling tg3_set_power_state() so that 14710 * we know whether or not to switch out of Vaux power. 14711 * When the flag is set, it means that GPIO1 is used for eeprom 14712 * write protect and also implies that it is a LOM where GPIOs 14713 * are not used to switch power. 14714 */ 14715 tg3_get_eeprom_hw_cfg(tp); 14716 14717 if (tp->fw_needed && tg3_flag(tp, ENABLE_ASF)) { 14718 tg3_flag_clear(tp, TSO_CAPABLE); 14719 tg3_flag_clear(tp, TSO_BUG); 14720 tp->fw_needed = NULL; 14721 } 14722 14723 if (tg3_flag(tp, ENABLE_APE)) { 14724 /* Allow reads and writes to the 14725 * APE register and memory space. 14726 */ 14727 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR | 14728 PCISTATE_ALLOW_APE_SHMEM_WR | 14729 PCISTATE_ALLOW_APE_PSPACE_WR; 14730 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, 14731 pci_state_reg); 14732 14733 tg3_ape_lock_init(tp); 14734 } 14735 14736 /* Set up tp->grc_local_ctrl before calling 14737 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high 14738 * will bring 5700's external PHY out of reset. 14739 * It is also used as eeprom write protect on LOMs. 14740 */ 14741 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM; 14742 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14743 tg3_flag(tp, EEPROM_WRITE_PROT)) 14744 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 14745 GRC_LCLCTRL_GPIO_OUTPUT1); 14746 /* Unused GPIO3 must be driven as output on 5752 because there 14747 * are no pull-up resistors on unused GPIO pins. 14748 */ 14749 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 14750 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 14751 14752 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 14753 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 14754 tg3_flag(tp, 57765_CLASS)) 14755 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 14756 14757 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 14758 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 14759 /* Turn off the debug UART. */ 14760 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 14761 if (tg3_flag(tp, IS_NIC)) 14762 /* Keep VMain power. */ 14763 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 14764 GRC_LCLCTRL_GPIO_OUTPUT0; 14765 } 14766 14767 /* Switch out of Vaux if it is a NIC */ 14768 tg3_pwrsrc_switch_to_vmain(tp); 14769 14770 /* Derive initial jumbo mode from MTU assigned in 14771 * ether_setup() via the alloc_etherdev() call 14772 */ 14773 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS)) 14774 tg3_flag_set(tp, JUMBO_RING_ENABLE); 14775 14776 /* Determine WakeOnLan speed to use. */ 14777 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14778 tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 14779 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 || 14780 tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) { 14781 tg3_flag_clear(tp, WOL_SPEED_100MB); 14782 } else { 14783 tg3_flag_set(tp, WOL_SPEED_100MB); 14784 } 14785 14786 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 14787 tp->phy_flags |= TG3_PHYFLG_IS_FET; 14788 14789 /* A few boards don't want Ethernet@WireSpeed phy feature */ 14790 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14791 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 14792 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) && 14793 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) || 14794 (tp->phy_flags & TG3_PHYFLG_IS_FET) || 14795 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 14796 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED; 14797 14798 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX || 14799 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX) 14800 tp->phy_flags |= TG3_PHYFLG_ADC_BUG; 14801 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) 14802 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG; 14803 14804 if (tg3_flag(tp, 5705_PLUS) && 14805 !(tp->phy_flags & TG3_PHYFLG_IS_FET) && 14806 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 14807 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 && 14808 !tg3_flag(tp, 57765_PLUS)) { 14809 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 14810 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 14811 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 14812 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) { 14813 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 && 14814 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722) 14815 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG; 14816 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M) 14817 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM; 14818 } else 14819 tp->phy_flags |= TG3_PHYFLG_BER_BUG; 14820 } 14821 14822 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 14823 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) { 14824 tp->phy_otp = tg3_read_otp_phycfg(tp); 14825 if (tp->phy_otp == 0) 14826 tp->phy_otp = TG3_OTP_DEFAULT; 14827 } 14828 14829 if (tg3_flag(tp, CPMU_PRESENT)) 14830 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST; 14831 else 14832 tp->mi_mode = MAC_MI_MODE_BASE; 14833 14834 tp->coalesce_mode = 0; 14835 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX && 14836 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX) 14837 tp->coalesce_mode |= HOSTCC_MODE_32BYTE; 14838 14839 /* Set these bits to enable statistics workaround. */ 14840 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 14841 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 14842 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) { 14843 tp->coalesce_mode |= HOSTCC_MODE_ATTN; 14844 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN; 14845 } 14846 14847 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 14848 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 14849 tg3_flag_set(tp, USE_PHYLIB); 14850 14851 err = tg3_mdio_init(tp); 14852 if (err) 14853 return err; 14854 14855 /* Initialize data/descriptor byte/word swapping. */ 14856 val = tr32(GRC_MODE); 14857 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 14858 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | 14859 GRC_MODE_WORD_SWAP_B2HRX_DATA | 14860 GRC_MODE_B2HRX_ENABLE | 14861 GRC_MODE_HTX2B_ENABLE | 14862 GRC_MODE_HOST_STACKUP); 14863 else 14864 val &= GRC_MODE_HOST_STACKUP; 14865 14866 tw32(GRC_MODE, val | tp->grc_mode); 14867 14868 tg3_switch_clocks(tp); 14869 14870 /* Clear this out for sanity. */ 14871 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 14872 14873 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 14874 &pci_state_reg); 14875 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && 14876 !tg3_flag(tp, PCIX_TARGET_HWBUG)) { 14877 u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl); 14878 14879 if (chiprevid == CHIPREV_ID_5701_A0 || 14880 chiprevid == CHIPREV_ID_5701_B0 || 14881 chiprevid == CHIPREV_ID_5701_B2 || 14882 chiprevid == CHIPREV_ID_5701_B5) { 14883 void __iomem *sram_base; 14884 14885 /* Write some dummy words into the SRAM status block 14886 * area, see if it reads back correctly. If the return 14887 * value is bad, force enable the PCIX workaround. 14888 */ 14889 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK; 14890 14891 writel(0x00000000, sram_base); 14892 writel(0x00000000, sram_base + 4); 14893 writel(0xffffffff, sram_base + 4); 14894 if (readl(sram_base) != 0x00000000) 14895 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 14896 } 14897 } 14898 14899 udelay(50); 14900 tg3_nvram_init(tp); 14901 14902 grc_misc_cfg = tr32(GRC_MISC_CFG); 14903 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; 14904 14905 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 14906 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 || 14907 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M)) 14908 tg3_flag_set(tp, IS_5788); 14909 14910 if (!tg3_flag(tp, IS_5788) && 14911 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) 14912 tg3_flag_set(tp, TAGGED_STATUS); 14913 if (tg3_flag(tp, TAGGED_STATUS)) { 14914 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD | 14915 HOSTCC_MODE_CLRTICK_TXBD); 14916 14917 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS; 14918 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 14919 tp->misc_host_ctrl); 14920 } 14921 14922 /* Preserve the APE MAC_MODE bits */ 14923 if (tg3_flag(tp, ENABLE_APE)) 14924 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 14925 else 14926 tp->mac_mode = 0; 14927 14928 /* these are limited to 10/100 only */ 14929 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 && 14930 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) || 14931 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 14932 tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM && 14933 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 || 14934 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 || 14935 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) || 14936 (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM && 14937 (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F || 14938 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F || 14939 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) || 14940 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790 || 14941 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 14942 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 14943 (tp->phy_flags & TG3_PHYFLG_IS_FET)) 14944 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY; 14945 14946 err = tg3_phy_probe(tp); 14947 if (err) { 14948 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err); 14949 /* ... but do not return immediately ... */ 14950 tg3_mdio_fini(tp); 14951 } 14952 14953 tg3_read_vpd(tp); 14954 tg3_read_fw_ver(tp); 14955 14956 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 14957 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 14958 } else { 14959 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 14960 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 14961 else 14962 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 14963 } 14964 14965 /* 5700 {AX,BX} chips have a broken status block link 14966 * change bit implementation, so we must use the 14967 * status register in those cases. 14968 */ 14969 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 14970 tg3_flag_set(tp, USE_LINKCHG_REG); 14971 else 14972 tg3_flag_clear(tp, USE_LINKCHG_REG); 14973 14974 /* The led_ctrl is set during tg3_phy_probe, here we might 14975 * have to force the link status polling mechanism based 14976 * upon subsystem IDs. 14977 */ 14978 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 14979 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 && 14980 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 14981 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 14982 tg3_flag_set(tp, USE_LINKCHG_REG); 14983 } 14984 14985 /* For all SERDES we poll the MAC status register. */ 14986 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 14987 tg3_flag_set(tp, POLL_SERDES); 14988 else 14989 tg3_flag_clear(tp, POLL_SERDES); 14990 14991 tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN; 14992 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD; 14993 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 && 14994 tg3_flag(tp, PCIX_MODE)) { 14995 tp->rx_offset = NET_SKB_PAD; 14996 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 14997 tp->rx_copy_thresh = ~(u16)0; 14998 #endif 14999 } 15000 15001 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1; 15002 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1; 15003 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1; 15004 15005 tp->rx_std_max_post = tp->rx_std_ring_mask + 1; 15006 15007 /* Increment the rx prod index on the rx std ring by at most 15008 * 8 for these chips to workaround hw errata. 15009 */ 15010 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 15011 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 15012 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 15013 tp->rx_std_max_post = 8; 15014 15015 if (tg3_flag(tp, ASPM_WORKAROUND)) 15016 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) & 15017 PCIE_PWR_MGMT_L1_THRESH_MSK; 15018 15019 return err; 15020 } 15021 15022 #ifdef CONFIG_SPARC 15023 static int __devinit tg3_get_macaddr_sparc(struct tg3 *tp) 15024 { 15025 struct net_device *dev = tp->dev; 15026 struct pci_dev *pdev = tp->pdev; 15027 struct device_node *dp = pci_device_to_OF_node(pdev); 15028 const unsigned char *addr; 15029 int len; 15030 15031 addr = of_get_property(dp, "local-mac-address", &len); 15032 if (addr && len == 6) { 15033 memcpy(dev->dev_addr, addr, 6); 15034 memcpy(dev->perm_addr, dev->dev_addr, 6); 15035 return 0; 15036 } 15037 return -ENODEV; 15038 } 15039 15040 static int __devinit tg3_get_default_macaddr_sparc(struct tg3 *tp) 15041 { 15042 struct net_device *dev = tp->dev; 15043 15044 memcpy(dev->dev_addr, idprom->id_ethaddr, 6); 15045 memcpy(dev->perm_addr, idprom->id_ethaddr, 6); 15046 return 0; 15047 } 15048 #endif 15049 15050 static int __devinit tg3_get_device_address(struct tg3 *tp) 15051 { 15052 struct net_device *dev = tp->dev; 15053 u32 hi, lo, mac_offset; 15054 int addr_ok = 0; 15055 15056 #ifdef CONFIG_SPARC 15057 if (!tg3_get_macaddr_sparc(tp)) 15058 return 0; 15059 #endif 15060 15061 mac_offset = 0x7c; 15062 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 15063 tg3_flag(tp, 5780_CLASS)) { 15064 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 15065 mac_offset = 0xcc; 15066 if (tg3_nvram_lock(tp)) 15067 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); 15068 else 15069 tg3_nvram_unlock(tp); 15070 } else if (tg3_flag(tp, 5717_PLUS)) { 15071 if (tp->pci_fn & 1) 15072 mac_offset = 0xcc; 15073 if (tp->pci_fn > 1) 15074 mac_offset += 0x18c; 15075 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 15076 mac_offset = 0x10; 15077 15078 /* First try to get it from MAC address mailbox. */ 15079 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); 15080 if ((hi >> 16) == 0x484b) { 15081 dev->dev_addr[0] = (hi >> 8) & 0xff; 15082 dev->dev_addr[1] = (hi >> 0) & 0xff; 15083 15084 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo); 15085 dev->dev_addr[2] = (lo >> 24) & 0xff; 15086 dev->dev_addr[3] = (lo >> 16) & 0xff; 15087 dev->dev_addr[4] = (lo >> 8) & 0xff; 15088 dev->dev_addr[5] = (lo >> 0) & 0xff; 15089 15090 /* Some old bootcode may report a 0 MAC address in SRAM */ 15091 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]); 15092 } 15093 if (!addr_ok) { 15094 /* Next, try NVRAM. */ 15095 if (!tg3_flag(tp, NO_NVRAM) && 15096 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) && 15097 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) { 15098 memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2); 15099 memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo)); 15100 } 15101 /* Finally just fetch it out of the MAC control regs. */ 15102 else { 15103 hi = tr32(MAC_ADDR_0_HIGH); 15104 lo = tr32(MAC_ADDR_0_LOW); 15105 15106 dev->dev_addr[5] = lo & 0xff; 15107 dev->dev_addr[4] = (lo >> 8) & 0xff; 15108 dev->dev_addr[3] = (lo >> 16) & 0xff; 15109 dev->dev_addr[2] = (lo >> 24) & 0xff; 15110 dev->dev_addr[1] = hi & 0xff; 15111 dev->dev_addr[0] = (hi >> 8) & 0xff; 15112 } 15113 } 15114 15115 if (!is_valid_ether_addr(&dev->dev_addr[0])) { 15116 #ifdef CONFIG_SPARC 15117 if (!tg3_get_default_macaddr_sparc(tp)) 15118 return 0; 15119 #endif 15120 return -EINVAL; 15121 } 15122 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); 15123 return 0; 15124 } 15125 15126 #define BOUNDARY_SINGLE_CACHELINE 1 15127 #define BOUNDARY_MULTI_CACHELINE 2 15128 15129 static u32 __devinit tg3_calc_dma_bndry(struct tg3 *tp, u32 val) 15130 { 15131 int cacheline_size; 15132 u8 byte; 15133 int goal; 15134 15135 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte); 15136 if (byte == 0) 15137 cacheline_size = 1024; 15138 else 15139 cacheline_size = (int) byte * 4; 15140 15141 /* On 5703 and later chips, the boundary bits have no 15142 * effect. 15143 */ 15144 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 15145 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 15146 !tg3_flag(tp, PCI_EXPRESS)) 15147 goto out; 15148 15149 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) 15150 goal = BOUNDARY_MULTI_CACHELINE; 15151 #else 15152 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA) 15153 goal = BOUNDARY_SINGLE_CACHELINE; 15154 #else 15155 goal = 0; 15156 #endif 15157 #endif 15158 15159 if (tg3_flag(tp, 57765_PLUS)) { 15160 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 15161 goto out; 15162 } 15163 15164 if (!goal) 15165 goto out; 15166 15167 /* PCI controllers on most RISC systems tend to disconnect 15168 * when a device tries to burst across a cache-line boundary. 15169 * Therefore, letting tg3 do so just wastes PCI bandwidth. 15170 * 15171 * Unfortunately, for PCI-E there are only limited 15172 * write-side controls for this, and thus for reads 15173 * we will still get the disconnects. We'll also waste 15174 * these PCI cycles for both read and write for chips 15175 * other than 5700 and 5701 which do not implement the 15176 * boundary bits. 15177 */ 15178 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) { 15179 switch (cacheline_size) { 15180 case 16: 15181 case 32: 15182 case 64: 15183 case 128: 15184 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15185 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX | 15186 DMA_RWCTRL_WRITE_BNDRY_128_PCIX); 15187 } else { 15188 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 15189 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 15190 } 15191 break; 15192 15193 case 256: 15194 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX | 15195 DMA_RWCTRL_WRITE_BNDRY_256_PCIX); 15196 break; 15197 15198 default: 15199 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 15200 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 15201 break; 15202 } 15203 } else if (tg3_flag(tp, PCI_EXPRESS)) { 15204 switch (cacheline_size) { 15205 case 16: 15206 case 32: 15207 case 64: 15208 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15209 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 15210 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; 15211 break; 15212 } 15213 /* fallthrough */ 15214 case 128: 15215 default: 15216 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 15217 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE; 15218 break; 15219 } 15220 } else { 15221 switch (cacheline_size) { 15222 case 16: 15223 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15224 val |= (DMA_RWCTRL_READ_BNDRY_16 | 15225 DMA_RWCTRL_WRITE_BNDRY_16); 15226 break; 15227 } 15228 /* fallthrough */ 15229 case 32: 15230 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15231 val |= (DMA_RWCTRL_READ_BNDRY_32 | 15232 DMA_RWCTRL_WRITE_BNDRY_32); 15233 break; 15234 } 15235 /* fallthrough */ 15236 case 64: 15237 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15238 val |= (DMA_RWCTRL_READ_BNDRY_64 | 15239 DMA_RWCTRL_WRITE_BNDRY_64); 15240 break; 15241 } 15242 /* fallthrough */ 15243 case 128: 15244 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15245 val |= (DMA_RWCTRL_READ_BNDRY_128 | 15246 DMA_RWCTRL_WRITE_BNDRY_128); 15247 break; 15248 } 15249 /* fallthrough */ 15250 case 256: 15251 val |= (DMA_RWCTRL_READ_BNDRY_256 | 15252 DMA_RWCTRL_WRITE_BNDRY_256); 15253 break; 15254 case 512: 15255 val |= (DMA_RWCTRL_READ_BNDRY_512 | 15256 DMA_RWCTRL_WRITE_BNDRY_512); 15257 break; 15258 case 1024: 15259 default: 15260 val |= (DMA_RWCTRL_READ_BNDRY_1024 | 15261 DMA_RWCTRL_WRITE_BNDRY_1024); 15262 break; 15263 } 15264 } 15265 15266 out: 15267 return val; 15268 } 15269 15270 static int __devinit tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, int size, int to_device) 15271 { 15272 struct tg3_internal_buffer_desc test_desc; 15273 u32 sram_dma_descs; 15274 int i, ret; 15275 15276 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE; 15277 15278 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0); 15279 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0); 15280 tw32(RDMAC_STATUS, 0); 15281 tw32(WDMAC_STATUS, 0); 15282 15283 tw32(BUFMGR_MODE, 0); 15284 tw32(FTQ_RESET, 0); 15285 15286 test_desc.addr_hi = ((u64) buf_dma) >> 32; 15287 test_desc.addr_lo = buf_dma & 0xffffffff; 15288 test_desc.nic_mbuf = 0x00002100; 15289 test_desc.len = size; 15290 15291 /* 15292 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz 15293 * the *second* time the tg3 driver was getting loaded after an 15294 * initial scan. 15295 * 15296 * Broadcom tells me: 15297 * ...the DMA engine is connected to the GRC block and a DMA 15298 * reset may affect the GRC block in some unpredictable way... 15299 * The behavior of resets to individual blocks has not been tested. 15300 * 15301 * Broadcom noted the GRC reset will also reset all sub-components. 15302 */ 15303 if (to_device) { 15304 test_desc.cqid_sqid = (13 << 8) | 2; 15305 15306 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE); 15307 udelay(40); 15308 } else { 15309 test_desc.cqid_sqid = (16 << 8) | 7; 15310 15311 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE); 15312 udelay(40); 15313 } 15314 test_desc.flags = 0x00000005; 15315 15316 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) { 15317 u32 val; 15318 15319 val = *(((u32 *)&test_desc) + i); 15320 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 15321 sram_dma_descs + (i * sizeof(u32))); 15322 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 15323 } 15324 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 15325 15326 if (to_device) 15327 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs); 15328 else 15329 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs); 15330 15331 ret = -ENODEV; 15332 for (i = 0; i < 40; i++) { 15333 u32 val; 15334 15335 if (to_device) 15336 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ); 15337 else 15338 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ); 15339 if ((val & 0xffff) == sram_dma_descs) { 15340 ret = 0; 15341 break; 15342 } 15343 15344 udelay(100); 15345 } 15346 15347 return ret; 15348 } 15349 15350 #define TEST_BUFFER_SIZE 0x2000 15351 15352 static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = { 15353 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) }, 15354 { }, 15355 }; 15356 15357 static int __devinit tg3_test_dma(struct tg3 *tp) 15358 { 15359 dma_addr_t buf_dma; 15360 u32 *buf, saved_dma_rwctrl; 15361 int ret = 0; 15362 15363 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, 15364 &buf_dma, GFP_KERNEL); 15365 if (!buf) { 15366 ret = -ENOMEM; 15367 goto out_nofree; 15368 } 15369 15370 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | 15371 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); 15372 15373 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl); 15374 15375 if (tg3_flag(tp, 57765_PLUS)) 15376 goto out; 15377 15378 if (tg3_flag(tp, PCI_EXPRESS)) { 15379 /* DMA read watermark not used on PCIE */ 15380 tp->dma_rwctrl |= 0x00180000; 15381 } else if (!tg3_flag(tp, PCIX_MODE)) { 15382 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || 15383 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) 15384 tp->dma_rwctrl |= 0x003f0000; 15385 else 15386 tp->dma_rwctrl |= 0x003f000f; 15387 } else { 15388 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 15389 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 15390 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); 15391 u32 read_water = 0x7; 15392 15393 /* If the 5704 is behind the EPB bridge, we can 15394 * do the less restrictive ONE_DMA workaround for 15395 * better performance. 15396 */ 15397 if (tg3_flag(tp, 40BIT_DMA_BUG) && 15398 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 15399 tp->dma_rwctrl |= 0x8000; 15400 else if (ccval == 0x6 || ccval == 0x7) 15401 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 15402 15403 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) 15404 read_water = 4; 15405 /* Set bit 23 to enable PCIX hw bug fix */ 15406 tp->dma_rwctrl |= 15407 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) | 15408 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | 15409 (1 << 23); 15410 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { 15411 /* 5780 always in PCIX mode */ 15412 tp->dma_rwctrl |= 0x00144000; 15413 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 15414 /* 5714 always in PCIX mode */ 15415 tp->dma_rwctrl |= 0x00148000; 15416 } else { 15417 tp->dma_rwctrl |= 0x001b000f; 15418 } 15419 } 15420 15421 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 15422 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 15423 tp->dma_rwctrl &= 0xfffffff0; 15424 15425 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 15426 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 15427 /* Remove this if it causes problems for some boards. */ 15428 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT; 15429 15430 /* On 5700/5701 chips, we need to set this bit. 15431 * Otherwise the chip will issue cacheline transactions 15432 * to streamable DMA memory with not all the byte 15433 * enables turned on. This is an error on several 15434 * RISC PCI controllers, in particular sparc64. 15435 * 15436 * On 5703/5704 chips, this bit has been reassigned 15437 * a different meaning. In particular, it is used 15438 * on those chips to enable a PCI-X workaround. 15439 */ 15440 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE; 15441 } 15442 15443 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 15444 15445 #if 0 15446 /* Unneeded, already done by tg3_get_invariants. */ 15447 tg3_switch_clocks(tp); 15448 #endif 15449 15450 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 15451 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) 15452 goto out; 15453 15454 /* It is best to perform DMA test with maximum write burst size 15455 * to expose the 5700/5701 write DMA bug. 15456 */ 15457 saved_dma_rwctrl = tp->dma_rwctrl; 15458 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 15459 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 15460 15461 while (1) { 15462 u32 *p = buf, i; 15463 15464 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) 15465 p[i] = i; 15466 15467 /* Send the buffer to the chip. */ 15468 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1); 15469 if (ret) { 15470 dev_err(&tp->pdev->dev, 15471 "%s: Buffer write failed. err = %d\n", 15472 __func__, ret); 15473 break; 15474 } 15475 15476 #if 0 15477 /* validate data reached card RAM correctly. */ 15478 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 15479 u32 val; 15480 tg3_read_mem(tp, 0x2100 + (i*4), &val); 15481 if (le32_to_cpu(val) != p[i]) { 15482 dev_err(&tp->pdev->dev, 15483 "%s: Buffer corrupted on device! " 15484 "(%d != %d)\n", __func__, val, i); 15485 /* ret = -ENODEV here? */ 15486 } 15487 p[i] = 0; 15488 } 15489 #endif 15490 /* Now read it back. */ 15491 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0); 15492 if (ret) { 15493 dev_err(&tp->pdev->dev, "%s: Buffer read failed. " 15494 "err = %d\n", __func__, ret); 15495 break; 15496 } 15497 15498 /* Verify it. */ 15499 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 15500 if (p[i] == i) 15501 continue; 15502 15503 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 15504 DMA_RWCTRL_WRITE_BNDRY_16) { 15505 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 15506 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 15507 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 15508 break; 15509 } else { 15510 dev_err(&tp->pdev->dev, 15511 "%s: Buffer corrupted on read back! " 15512 "(%d != %d)\n", __func__, p[i], i); 15513 ret = -ENODEV; 15514 goto out; 15515 } 15516 } 15517 15518 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) { 15519 /* Success. */ 15520 ret = 0; 15521 break; 15522 } 15523 } 15524 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 15525 DMA_RWCTRL_WRITE_BNDRY_16) { 15526 /* DMA test passed without adjusting DMA boundary, 15527 * now look for chipsets that are known to expose the 15528 * DMA bug without failing the test. 15529 */ 15530 if (pci_dev_present(tg3_dma_wait_state_chipsets)) { 15531 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 15532 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 15533 } else { 15534 /* Safe to use the calculated DMA boundary. */ 15535 tp->dma_rwctrl = saved_dma_rwctrl; 15536 } 15537 15538 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 15539 } 15540 15541 out: 15542 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma); 15543 out_nofree: 15544 return ret; 15545 } 15546 15547 static void __devinit tg3_init_bufmgr_config(struct tg3 *tp) 15548 { 15549 if (tg3_flag(tp, 57765_PLUS)) { 15550 tp->bufmgr_config.mbuf_read_dma_low_water = 15551 DEFAULT_MB_RDMA_LOW_WATER_5705; 15552 tp->bufmgr_config.mbuf_mac_rx_low_water = 15553 DEFAULT_MB_MACRX_LOW_WATER_57765; 15554 tp->bufmgr_config.mbuf_high_water = 15555 DEFAULT_MB_HIGH_WATER_57765; 15556 15557 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 15558 DEFAULT_MB_RDMA_LOW_WATER_5705; 15559 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 15560 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765; 15561 tp->bufmgr_config.mbuf_high_water_jumbo = 15562 DEFAULT_MB_HIGH_WATER_JUMBO_57765; 15563 } else if (tg3_flag(tp, 5705_PLUS)) { 15564 tp->bufmgr_config.mbuf_read_dma_low_water = 15565 DEFAULT_MB_RDMA_LOW_WATER_5705; 15566 tp->bufmgr_config.mbuf_mac_rx_low_water = 15567 DEFAULT_MB_MACRX_LOW_WATER_5705; 15568 tp->bufmgr_config.mbuf_high_water = 15569 DEFAULT_MB_HIGH_WATER_5705; 15570 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 15571 tp->bufmgr_config.mbuf_mac_rx_low_water = 15572 DEFAULT_MB_MACRX_LOW_WATER_5906; 15573 tp->bufmgr_config.mbuf_high_water = 15574 DEFAULT_MB_HIGH_WATER_5906; 15575 } 15576 15577 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 15578 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; 15579 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 15580 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; 15581 tp->bufmgr_config.mbuf_high_water_jumbo = 15582 DEFAULT_MB_HIGH_WATER_JUMBO_5780; 15583 } else { 15584 tp->bufmgr_config.mbuf_read_dma_low_water = 15585 DEFAULT_MB_RDMA_LOW_WATER; 15586 tp->bufmgr_config.mbuf_mac_rx_low_water = 15587 DEFAULT_MB_MACRX_LOW_WATER; 15588 tp->bufmgr_config.mbuf_high_water = 15589 DEFAULT_MB_HIGH_WATER; 15590 15591 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 15592 DEFAULT_MB_RDMA_LOW_WATER_JUMBO; 15593 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 15594 DEFAULT_MB_MACRX_LOW_WATER_JUMBO; 15595 tp->bufmgr_config.mbuf_high_water_jumbo = 15596 DEFAULT_MB_HIGH_WATER_JUMBO; 15597 } 15598 15599 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; 15600 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; 15601 } 15602 15603 static char * __devinit tg3_phy_string(struct tg3 *tp) 15604 { 15605 switch (tp->phy_id & TG3_PHY_ID_MASK) { 15606 case TG3_PHY_ID_BCM5400: return "5400"; 15607 case TG3_PHY_ID_BCM5401: return "5401"; 15608 case TG3_PHY_ID_BCM5411: return "5411"; 15609 case TG3_PHY_ID_BCM5701: return "5701"; 15610 case TG3_PHY_ID_BCM5703: return "5703"; 15611 case TG3_PHY_ID_BCM5704: return "5704"; 15612 case TG3_PHY_ID_BCM5705: return "5705"; 15613 case TG3_PHY_ID_BCM5750: return "5750"; 15614 case TG3_PHY_ID_BCM5752: return "5752"; 15615 case TG3_PHY_ID_BCM5714: return "5714"; 15616 case TG3_PHY_ID_BCM5780: return "5780"; 15617 case TG3_PHY_ID_BCM5755: return "5755"; 15618 case TG3_PHY_ID_BCM5787: return "5787"; 15619 case TG3_PHY_ID_BCM5784: return "5784"; 15620 case TG3_PHY_ID_BCM5756: return "5722/5756"; 15621 case TG3_PHY_ID_BCM5906: return "5906"; 15622 case TG3_PHY_ID_BCM5761: return "5761"; 15623 case TG3_PHY_ID_BCM5718C: return "5718C"; 15624 case TG3_PHY_ID_BCM5718S: return "5718S"; 15625 case TG3_PHY_ID_BCM57765: return "57765"; 15626 case TG3_PHY_ID_BCM5719C: return "5719C"; 15627 case TG3_PHY_ID_BCM5720C: return "5720C"; 15628 case TG3_PHY_ID_BCM8002: return "8002/serdes"; 15629 case 0: return "serdes"; 15630 default: return "unknown"; 15631 } 15632 } 15633 15634 static char * __devinit tg3_bus_string(struct tg3 *tp, char *str) 15635 { 15636 if (tg3_flag(tp, PCI_EXPRESS)) { 15637 strcpy(str, "PCI Express"); 15638 return str; 15639 } else if (tg3_flag(tp, PCIX_MODE)) { 15640 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f; 15641 15642 strcpy(str, "PCIX:"); 15643 15644 if ((clock_ctrl == 7) || 15645 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) == 15646 GRC_MISC_CFG_BOARD_ID_5704CIOBE)) 15647 strcat(str, "133MHz"); 15648 else if (clock_ctrl == 0) 15649 strcat(str, "33MHz"); 15650 else if (clock_ctrl == 2) 15651 strcat(str, "50MHz"); 15652 else if (clock_ctrl == 4) 15653 strcat(str, "66MHz"); 15654 else if (clock_ctrl == 6) 15655 strcat(str, "100MHz"); 15656 } else { 15657 strcpy(str, "PCI:"); 15658 if (tg3_flag(tp, PCI_HIGH_SPEED)) 15659 strcat(str, "66MHz"); 15660 else 15661 strcat(str, "33MHz"); 15662 } 15663 if (tg3_flag(tp, PCI_32BIT)) 15664 strcat(str, ":32-bit"); 15665 else 15666 strcat(str, ":64-bit"); 15667 return str; 15668 } 15669 15670 static void __devinit tg3_init_coal(struct tg3 *tp) 15671 { 15672 struct ethtool_coalesce *ec = &tp->coal; 15673 15674 memset(ec, 0, sizeof(*ec)); 15675 ec->cmd = ETHTOOL_GCOALESCE; 15676 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS; 15677 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS; 15678 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES; 15679 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES; 15680 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT; 15681 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT; 15682 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT; 15683 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT; 15684 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS; 15685 15686 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD | 15687 HOSTCC_MODE_CLRTICK_TXBD)) { 15688 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS; 15689 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS; 15690 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS; 15691 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS; 15692 } 15693 15694 if (tg3_flag(tp, 5705_PLUS)) { 15695 ec->rx_coalesce_usecs_irq = 0; 15696 ec->tx_coalesce_usecs_irq = 0; 15697 ec->stats_block_coalesce_usecs = 0; 15698 } 15699 } 15700 15701 static int __devinit tg3_init_one(struct pci_dev *pdev, 15702 const struct pci_device_id *ent) 15703 { 15704 struct net_device *dev; 15705 struct tg3 *tp; 15706 int i, err, pm_cap; 15707 u32 sndmbx, rcvmbx, intmbx; 15708 char str[40]; 15709 u64 dma_mask, persist_dma_mask; 15710 netdev_features_t features = 0; 15711 15712 printk_once(KERN_INFO "%s\n", version); 15713 15714 err = pci_enable_device(pdev); 15715 if (err) { 15716 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); 15717 return err; 15718 } 15719 15720 err = pci_request_regions(pdev, DRV_MODULE_NAME); 15721 if (err) { 15722 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n"); 15723 goto err_out_disable_pdev; 15724 } 15725 15726 pci_set_master(pdev); 15727 15728 /* Find power-management capability. */ 15729 pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); 15730 if (pm_cap == 0) { 15731 dev_err(&pdev->dev, 15732 "Cannot find Power Management capability, aborting\n"); 15733 err = -EIO; 15734 goto err_out_free_res; 15735 } 15736 15737 err = pci_set_power_state(pdev, PCI_D0); 15738 if (err) { 15739 dev_err(&pdev->dev, "Transition to D0 failed, aborting\n"); 15740 goto err_out_free_res; 15741 } 15742 15743 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS); 15744 if (!dev) { 15745 err = -ENOMEM; 15746 goto err_out_power_down; 15747 } 15748 15749 SET_NETDEV_DEV(dev, &pdev->dev); 15750 15751 tp = netdev_priv(dev); 15752 tp->pdev = pdev; 15753 tp->dev = dev; 15754 tp->pm_cap = pm_cap; 15755 tp->rx_mode = TG3_DEF_RX_MODE; 15756 tp->tx_mode = TG3_DEF_TX_MODE; 15757 15758 if (tg3_debug > 0) 15759 tp->msg_enable = tg3_debug; 15760 else 15761 tp->msg_enable = TG3_DEF_MSG_ENABLE; 15762 15763 /* The word/byte swap controls here control register access byte 15764 * swapping. DMA data byte swapping is controlled in the GRC_MODE 15765 * setting below. 15766 */ 15767 tp->misc_host_ctrl = 15768 MISC_HOST_CTRL_MASK_PCI_INT | 15769 MISC_HOST_CTRL_WORD_SWAP | 15770 MISC_HOST_CTRL_INDIR_ACCESS | 15771 MISC_HOST_CTRL_PCISTATE_RW; 15772 15773 /* The NONFRM (non-frame) byte/word swap controls take effect 15774 * on descriptor entries, anything which isn't packet data. 15775 * 15776 * The StrongARM chips on the board (one for tx, one for rx) 15777 * are running in big-endian mode. 15778 */ 15779 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA | 15780 GRC_MODE_WSWAP_NONFRM_DATA); 15781 #ifdef __BIG_ENDIAN 15782 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; 15783 #endif 15784 spin_lock_init(&tp->lock); 15785 spin_lock_init(&tp->indirect_lock); 15786 INIT_WORK(&tp->reset_task, tg3_reset_task); 15787 15788 tp->regs = pci_ioremap_bar(pdev, BAR_0); 15789 if (!tp->regs) { 15790 dev_err(&pdev->dev, "Cannot map device registers, aborting\n"); 15791 err = -ENOMEM; 15792 goto err_out_free_dev; 15793 } 15794 15795 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 15796 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E || 15797 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S || 15798 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE || 15799 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 15800 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 15801 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 15802 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) { 15803 tg3_flag_set(tp, ENABLE_APE); 15804 tp->aperegs = pci_ioremap_bar(pdev, BAR_2); 15805 if (!tp->aperegs) { 15806 dev_err(&pdev->dev, 15807 "Cannot map APE registers, aborting\n"); 15808 err = -ENOMEM; 15809 goto err_out_iounmap; 15810 } 15811 } 15812 15813 tp->rx_pending = TG3_DEF_RX_RING_PENDING; 15814 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; 15815 15816 dev->ethtool_ops = &tg3_ethtool_ops; 15817 dev->watchdog_timeo = TG3_TX_TIMEOUT; 15818 dev->netdev_ops = &tg3_netdev_ops; 15819 dev->irq = pdev->irq; 15820 15821 err = tg3_get_invariants(tp); 15822 if (err) { 15823 dev_err(&pdev->dev, 15824 "Problem fetching invariants of chip, aborting\n"); 15825 goto err_out_apeunmap; 15826 } 15827 15828 /* The EPB bridge inside 5714, 5715, and 5780 and any 15829 * device behind the EPB cannot support DMA addresses > 40-bit. 15830 * On 64-bit systems with IOMMU, use 40-bit dma_mask. 15831 * On 64-bit systems without IOMMU, use 64-bit dma_mask and 15832 * do DMA address check in tg3_start_xmit(). 15833 */ 15834 if (tg3_flag(tp, IS_5788)) 15835 persist_dma_mask = dma_mask = DMA_BIT_MASK(32); 15836 else if (tg3_flag(tp, 40BIT_DMA_BUG)) { 15837 persist_dma_mask = dma_mask = DMA_BIT_MASK(40); 15838 #ifdef CONFIG_HIGHMEM 15839 dma_mask = DMA_BIT_MASK(64); 15840 #endif 15841 } else 15842 persist_dma_mask = dma_mask = DMA_BIT_MASK(64); 15843 15844 /* Configure DMA attributes. */ 15845 if (dma_mask > DMA_BIT_MASK(32)) { 15846 err = pci_set_dma_mask(pdev, dma_mask); 15847 if (!err) { 15848 features |= NETIF_F_HIGHDMA; 15849 err = pci_set_consistent_dma_mask(pdev, 15850 persist_dma_mask); 15851 if (err < 0) { 15852 dev_err(&pdev->dev, "Unable to obtain 64 bit " 15853 "DMA for consistent allocations\n"); 15854 goto err_out_apeunmap; 15855 } 15856 } 15857 } 15858 if (err || dma_mask == DMA_BIT_MASK(32)) { 15859 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 15860 if (err) { 15861 dev_err(&pdev->dev, 15862 "No usable DMA configuration, aborting\n"); 15863 goto err_out_apeunmap; 15864 } 15865 } 15866 15867 tg3_init_bufmgr_config(tp); 15868 15869 features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 15870 15871 /* 5700 B0 chips do not support checksumming correctly due 15872 * to hardware bugs. 15873 */ 15874 if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) { 15875 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM; 15876 15877 if (tg3_flag(tp, 5755_PLUS)) 15878 features |= NETIF_F_IPV6_CSUM; 15879 } 15880 15881 /* TSO is on by default on chips that support hardware TSO. 15882 * Firmware TSO on older chips gives lower performance, so it 15883 * is off by default, but can be enabled using ethtool. 15884 */ 15885 if ((tg3_flag(tp, HW_TSO_1) || 15886 tg3_flag(tp, HW_TSO_2) || 15887 tg3_flag(tp, HW_TSO_3)) && 15888 (features & NETIF_F_IP_CSUM)) 15889 features |= NETIF_F_TSO; 15890 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) { 15891 if (features & NETIF_F_IPV6_CSUM) 15892 features |= NETIF_F_TSO6; 15893 if (tg3_flag(tp, HW_TSO_3) || 15894 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 15895 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 15896 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) || 15897 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 15898 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 15899 features |= NETIF_F_TSO_ECN; 15900 } 15901 15902 dev->features |= features; 15903 dev->vlan_features |= features; 15904 15905 /* 15906 * Add loopback capability only for a subset of devices that support 15907 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY 15908 * loopback for the remaining devices. 15909 */ 15910 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 && 15911 !tg3_flag(tp, CPMU_PRESENT)) 15912 /* Add the loopback capability */ 15913 features |= NETIF_F_LOOPBACK; 15914 15915 dev->hw_features |= features; 15916 15917 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 && 15918 !tg3_flag(tp, TSO_CAPABLE) && 15919 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) { 15920 tg3_flag_set(tp, MAX_RXPEND_64); 15921 tp->rx_pending = 63; 15922 } 15923 15924 err = tg3_get_device_address(tp); 15925 if (err) { 15926 dev_err(&pdev->dev, 15927 "Could not obtain valid ethernet address, aborting\n"); 15928 goto err_out_apeunmap; 15929 } 15930 15931 /* 15932 * Reset chip in case UNDI or EFI driver did not shutdown 15933 * DMA self test will enable WDMAC and we'll see (spurious) 15934 * pending DMA on the PCI bus at that point. 15935 */ 15936 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) || 15937 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 15938 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); 15939 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 15940 } 15941 15942 err = tg3_test_dma(tp); 15943 if (err) { 15944 dev_err(&pdev->dev, "DMA engine test failed, aborting\n"); 15945 goto err_out_apeunmap; 15946 } 15947 15948 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW; 15949 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW; 15950 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW; 15951 for (i = 0; i < tp->irq_max; i++) { 15952 struct tg3_napi *tnapi = &tp->napi[i]; 15953 15954 tnapi->tp = tp; 15955 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING; 15956 15957 tnapi->int_mbox = intmbx; 15958 if (i <= 4) 15959 intmbx += 0x8; 15960 else 15961 intmbx += 0x4; 15962 15963 tnapi->consmbox = rcvmbx; 15964 tnapi->prodmbox = sndmbx; 15965 15966 if (i) 15967 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1); 15968 else 15969 tnapi->coal_now = HOSTCC_MODE_NOW; 15970 15971 if (!tg3_flag(tp, SUPPORT_MSIX)) 15972 break; 15973 15974 /* 15975 * If we support MSIX, we'll be using RSS. If we're using 15976 * RSS, the first vector only handles link interrupts and the 15977 * remaining vectors handle rx and tx interrupts. Reuse the 15978 * mailbox values for the next iteration. The values we setup 15979 * above are still useful for the single vectored mode. 15980 */ 15981 if (!i) 15982 continue; 15983 15984 rcvmbx += 0x8; 15985 15986 if (sndmbx & 0x4) 15987 sndmbx -= 0x4; 15988 else 15989 sndmbx += 0xc; 15990 } 15991 15992 tg3_init_coal(tp); 15993 15994 pci_set_drvdata(pdev, dev); 15995 15996 if (tg3_flag(tp, 5717_PLUS)) { 15997 /* Resume a low-power mode */ 15998 tg3_frob_aux_power(tp, false); 15999 } 16000 16001 tg3_timer_init(tp); 16002 16003 err = register_netdev(dev); 16004 if (err) { 16005 dev_err(&pdev->dev, "Cannot register net device, aborting\n"); 16006 goto err_out_apeunmap; 16007 } 16008 16009 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", 16010 tp->board_part_number, 16011 tp->pci_chip_rev_id, 16012 tg3_bus_string(tp, str), 16013 dev->dev_addr); 16014 16015 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 16016 struct phy_device *phydev; 16017 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 16018 netdev_info(dev, 16019 "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n", 16020 phydev->drv->name, dev_name(&phydev->dev)); 16021 } else { 16022 char *ethtype; 16023 16024 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 16025 ethtype = "10/100Base-TX"; 16026 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 16027 ethtype = "1000Base-SX"; 16028 else 16029 ethtype = "10/100/1000Base-T"; 16030 16031 netdev_info(dev, "attached PHY is %s (%s Ethernet) " 16032 "(WireSpeed[%d], EEE[%d])\n", 16033 tg3_phy_string(tp), ethtype, 16034 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0, 16035 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0); 16036 } 16037 16038 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n", 16039 (dev->features & NETIF_F_RXCSUM) != 0, 16040 tg3_flag(tp, USE_LINKCHG_REG) != 0, 16041 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0, 16042 tg3_flag(tp, ENABLE_ASF) != 0, 16043 tg3_flag(tp, TSO_CAPABLE) != 0); 16044 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n", 16045 tp->dma_rwctrl, 16046 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 : 16047 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64); 16048 16049 pci_save_state(pdev); 16050 16051 return 0; 16052 16053 err_out_apeunmap: 16054 if (tp->aperegs) { 16055 iounmap(tp->aperegs); 16056 tp->aperegs = NULL; 16057 } 16058 16059 err_out_iounmap: 16060 if (tp->regs) { 16061 iounmap(tp->regs); 16062 tp->regs = NULL; 16063 } 16064 16065 err_out_free_dev: 16066 free_netdev(dev); 16067 16068 err_out_power_down: 16069 pci_set_power_state(pdev, PCI_D3hot); 16070 16071 err_out_free_res: 16072 pci_release_regions(pdev); 16073 16074 err_out_disable_pdev: 16075 pci_disable_device(pdev); 16076 pci_set_drvdata(pdev, NULL); 16077 return err; 16078 } 16079 16080 static void __devexit tg3_remove_one(struct pci_dev *pdev) 16081 { 16082 struct net_device *dev = pci_get_drvdata(pdev); 16083 16084 if (dev) { 16085 struct tg3 *tp = netdev_priv(dev); 16086 16087 release_firmware(tp->fw); 16088 16089 tg3_reset_task_cancel(tp); 16090 16091 if (tg3_flag(tp, USE_PHYLIB)) { 16092 tg3_phy_fini(tp); 16093 tg3_mdio_fini(tp); 16094 } 16095 16096 unregister_netdev(dev); 16097 if (tp->aperegs) { 16098 iounmap(tp->aperegs); 16099 tp->aperegs = NULL; 16100 } 16101 if (tp->regs) { 16102 iounmap(tp->regs); 16103 tp->regs = NULL; 16104 } 16105 free_netdev(dev); 16106 pci_release_regions(pdev); 16107 pci_disable_device(pdev); 16108 pci_set_drvdata(pdev, NULL); 16109 } 16110 } 16111 16112 #ifdef CONFIG_PM_SLEEP 16113 static int tg3_suspend(struct device *device) 16114 { 16115 struct pci_dev *pdev = to_pci_dev(device); 16116 struct net_device *dev = pci_get_drvdata(pdev); 16117 struct tg3 *tp = netdev_priv(dev); 16118 int err; 16119 16120 if (!netif_running(dev)) 16121 return 0; 16122 16123 tg3_reset_task_cancel(tp); 16124 tg3_phy_stop(tp); 16125 tg3_netif_stop(tp); 16126 16127 tg3_timer_stop(tp); 16128 16129 tg3_full_lock(tp, 1); 16130 tg3_disable_ints(tp); 16131 tg3_full_unlock(tp); 16132 16133 netif_device_detach(dev); 16134 16135 tg3_full_lock(tp, 0); 16136 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 16137 tg3_flag_clear(tp, INIT_COMPLETE); 16138 tg3_full_unlock(tp); 16139 16140 err = tg3_power_down_prepare(tp); 16141 if (err) { 16142 int err2; 16143 16144 tg3_full_lock(tp, 0); 16145 16146 tg3_flag_set(tp, INIT_COMPLETE); 16147 err2 = tg3_restart_hw(tp, 1); 16148 if (err2) 16149 goto out; 16150 16151 tg3_timer_start(tp); 16152 16153 netif_device_attach(dev); 16154 tg3_netif_start(tp); 16155 16156 out: 16157 tg3_full_unlock(tp); 16158 16159 if (!err2) 16160 tg3_phy_start(tp); 16161 } 16162 16163 return err; 16164 } 16165 16166 static int tg3_resume(struct device *device) 16167 { 16168 struct pci_dev *pdev = to_pci_dev(device); 16169 struct net_device *dev = pci_get_drvdata(pdev); 16170 struct tg3 *tp = netdev_priv(dev); 16171 int err; 16172 16173 if (!netif_running(dev)) 16174 return 0; 16175 16176 netif_device_attach(dev); 16177 16178 tg3_full_lock(tp, 0); 16179 16180 tg3_flag_set(tp, INIT_COMPLETE); 16181 err = tg3_restart_hw(tp, 1); 16182 if (err) 16183 goto out; 16184 16185 tg3_timer_start(tp); 16186 16187 tg3_netif_start(tp); 16188 16189 out: 16190 tg3_full_unlock(tp); 16191 16192 if (!err) 16193 tg3_phy_start(tp); 16194 16195 return err; 16196 } 16197 16198 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume); 16199 #define TG3_PM_OPS (&tg3_pm_ops) 16200 16201 #else 16202 16203 #define TG3_PM_OPS NULL 16204 16205 #endif /* CONFIG_PM_SLEEP */ 16206 16207 /** 16208 * tg3_io_error_detected - called when PCI error is detected 16209 * @pdev: Pointer to PCI device 16210 * @state: The current pci connection state 16211 * 16212 * This function is called after a PCI bus error affecting 16213 * this device has been detected. 16214 */ 16215 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, 16216 pci_channel_state_t state) 16217 { 16218 struct net_device *netdev = pci_get_drvdata(pdev); 16219 struct tg3 *tp = netdev_priv(netdev); 16220 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET; 16221 16222 netdev_info(netdev, "PCI I/O error detected\n"); 16223 16224 rtnl_lock(); 16225 16226 if (!netif_running(netdev)) 16227 goto done; 16228 16229 tg3_phy_stop(tp); 16230 16231 tg3_netif_stop(tp); 16232 16233 tg3_timer_stop(tp); 16234 16235 /* Want to make sure that the reset task doesn't run */ 16236 tg3_reset_task_cancel(tp); 16237 16238 netif_device_detach(netdev); 16239 16240 /* Clean up software state, even if MMIO is blocked */ 16241 tg3_full_lock(tp, 0); 16242 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 16243 tg3_full_unlock(tp); 16244 16245 done: 16246 if (state == pci_channel_io_perm_failure) 16247 err = PCI_ERS_RESULT_DISCONNECT; 16248 else 16249 pci_disable_device(pdev); 16250 16251 rtnl_unlock(); 16252 16253 return err; 16254 } 16255 16256 /** 16257 * tg3_io_slot_reset - called after the pci bus has been reset. 16258 * @pdev: Pointer to PCI device 16259 * 16260 * Restart the card from scratch, as if from a cold-boot. 16261 * At this point, the card has exprienced a hard reset, 16262 * followed by fixups by BIOS, and has its config space 16263 * set up identically to what it was at cold boot. 16264 */ 16265 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev) 16266 { 16267 struct net_device *netdev = pci_get_drvdata(pdev); 16268 struct tg3 *tp = netdev_priv(netdev); 16269 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; 16270 int err; 16271 16272 rtnl_lock(); 16273 16274 if (pci_enable_device(pdev)) { 16275 netdev_err(netdev, "Cannot re-enable PCI device after reset.\n"); 16276 goto done; 16277 } 16278 16279 pci_set_master(pdev); 16280 pci_restore_state(pdev); 16281 pci_save_state(pdev); 16282 16283 if (!netif_running(netdev)) { 16284 rc = PCI_ERS_RESULT_RECOVERED; 16285 goto done; 16286 } 16287 16288 err = tg3_power_up(tp); 16289 if (err) 16290 goto done; 16291 16292 rc = PCI_ERS_RESULT_RECOVERED; 16293 16294 done: 16295 rtnl_unlock(); 16296 16297 return rc; 16298 } 16299 16300 /** 16301 * tg3_io_resume - called when traffic can start flowing again. 16302 * @pdev: Pointer to PCI device 16303 * 16304 * This callback is called when the error recovery driver tells 16305 * us that its OK to resume normal operation. 16306 */ 16307 static void tg3_io_resume(struct pci_dev *pdev) 16308 { 16309 struct net_device *netdev = pci_get_drvdata(pdev); 16310 struct tg3 *tp = netdev_priv(netdev); 16311 int err; 16312 16313 rtnl_lock(); 16314 16315 if (!netif_running(netdev)) 16316 goto done; 16317 16318 tg3_full_lock(tp, 0); 16319 tg3_flag_set(tp, INIT_COMPLETE); 16320 err = tg3_restart_hw(tp, 1); 16321 tg3_full_unlock(tp); 16322 if (err) { 16323 netdev_err(netdev, "Cannot restart hardware after reset.\n"); 16324 goto done; 16325 } 16326 16327 netif_device_attach(netdev); 16328 16329 tg3_timer_start(tp); 16330 16331 tg3_netif_start(tp); 16332 16333 tg3_phy_start(tp); 16334 16335 done: 16336 rtnl_unlock(); 16337 } 16338 16339 static struct pci_error_handlers tg3_err_handler = { 16340 .error_detected = tg3_io_error_detected, 16341 .slot_reset = tg3_io_slot_reset, 16342 .resume = tg3_io_resume 16343 }; 16344 16345 static struct pci_driver tg3_driver = { 16346 .name = DRV_MODULE_NAME, 16347 .id_table = tg3_pci_tbl, 16348 .probe = tg3_init_one, 16349 .remove = __devexit_p(tg3_remove_one), 16350 .err_handler = &tg3_err_handler, 16351 .driver.pm = TG3_PM_OPS, 16352 }; 16353 16354 static int __init tg3_init(void) 16355 { 16356 return pci_register_driver(&tg3_driver); 16357 } 16358 16359 static void __exit tg3_cleanup(void) 16360 { 16361 pci_unregister_driver(&tg3_driver); 16362 } 16363 16364 module_init(tg3_init); 16365 module_exit(tg3_cleanup); 16366