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 #include <linux/hwmon.h> 48 #include <linux/hwmon-sysfs.h> 49 50 #include <net/checksum.h> 51 #include <net/ip.h> 52 53 #include <linux/io.h> 54 #include <asm/byteorder.h> 55 #include <linux/uaccess.h> 56 57 #include <uapi/linux/net_tstamp.h> 58 #include <linux/ptp_clock_kernel.h> 59 60 #ifdef CONFIG_SPARC 61 #include <asm/idprom.h> 62 #include <asm/prom.h> 63 #endif 64 65 #define BAR_0 0 66 #define BAR_2 2 67 68 #include "tg3.h" 69 70 /* Functions & macros to verify TG3_FLAGS types */ 71 72 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits) 73 { 74 return test_bit(flag, bits); 75 } 76 77 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits) 78 { 79 set_bit(flag, bits); 80 } 81 82 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits) 83 { 84 clear_bit(flag, bits); 85 } 86 87 #define tg3_flag(tp, flag) \ 88 _tg3_flag(TG3_FLAG_##flag, (tp)->tg3_flags) 89 #define tg3_flag_set(tp, flag) \ 90 _tg3_flag_set(TG3_FLAG_##flag, (tp)->tg3_flags) 91 #define tg3_flag_clear(tp, flag) \ 92 _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags) 93 94 #define DRV_MODULE_NAME "tg3" 95 #define TG3_MAJ_NUM 3 96 #define TG3_MIN_NUM 128 97 #define DRV_MODULE_VERSION \ 98 __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM) 99 #define DRV_MODULE_RELDATE "December 03, 2012" 100 101 #define RESET_KIND_SHUTDOWN 0 102 #define RESET_KIND_INIT 1 103 #define RESET_KIND_SUSPEND 2 104 105 #define TG3_DEF_RX_MODE 0 106 #define TG3_DEF_TX_MODE 0 107 #define TG3_DEF_MSG_ENABLE \ 108 (NETIF_MSG_DRV | \ 109 NETIF_MSG_PROBE | \ 110 NETIF_MSG_LINK | \ 111 NETIF_MSG_TIMER | \ 112 NETIF_MSG_IFDOWN | \ 113 NETIF_MSG_IFUP | \ 114 NETIF_MSG_RX_ERR | \ 115 NETIF_MSG_TX_ERR) 116 117 #define TG3_GRC_LCLCTL_PWRSW_DELAY 100 118 119 /* length of time before we decide the hardware is borked, 120 * and dev->tx_timeout() should be called to fix the problem 121 */ 122 123 #define TG3_TX_TIMEOUT (5 * HZ) 124 125 /* hardware minimum and maximum for a single frame's data payload */ 126 #define TG3_MIN_MTU 60 127 #define TG3_MAX_MTU(tp) \ 128 (tg3_flag(tp, JUMBO_CAPABLE) ? 9000 : 1500) 129 130 /* These numbers seem to be hard coded in the NIC firmware somehow. 131 * You can't change the ring sizes, but you can change where you place 132 * them in the NIC onboard memory. 133 */ 134 #define TG3_RX_STD_RING_SIZE(tp) \ 135 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 136 TG3_RX_STD_MAX_SIZE_5717 : TG3_RX_STD_MAX_SIZE_5700) 137 #define TG3_DEF_RX_RING_PENDING 200 138 #define TG3_RX_JMB_RING_SIZE(tp) \ 139 (tg3_flag(tp, LRG_PROD_RING_CAP) ? \ 140 TG3_RX_JMB_MAX_SIZE_5717 : TG3_RX_JMB_MAX_SIZE_5700) 141 #define TG3_DEF_RX_JUMBO_RING_PENDING 100 142 143 /* Do not place this n-ring entries value into the tp struct itself, 144 * we really want to expose these constants to GCC so that modulo et 145 * al. operations are done with shifts and masks instead of with 146 * hw multiply/modulo instructions. Another solution would be to 147 * replace things like '% foo' with '& (foo - 1)'. 148 */ 149 150 #define TG3_TX_RING_SIZE 512 151 #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1) 152 153 #define TG3_RX_STD_RING_BYTES(tp) \ 154 (sizeof(struct tg3_rx_buffer_desc) * TG3_RX_STD_RING_SIZE(tp)) 155 #define TG3_RX_JMB_RING_BYTES(tp) \ 156 (sizeof(struct tg3_ext_rx_buffer_desc) * TG3_RX_JMB_RING_SIZE(tp)) 157 #define TG3_RX_RCB_RING_BYTES(tp) \ 158 (sizeof(struct tg3_rx_buffer_desc) * (tp->rx_ret_ring_mask + 1)) 159 #define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \ 160 TG3_TX_RING_SIZE) 161 #define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1)) 162 163 #define TG3_DMA_BYTE_ENAB 64 164 165 #define TG3_RX_STD_DMA_SZ 1536 166 #define TG3_RX_JMB_DMA_SZ 9046 167 168 #define TG3_RX_DMA_TO_MAP_SZ(x) ((x) + TG3_DMA_BYTE_ENAB) 169 170 #define TG3_RX_STD_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_STD_DMA_SZ) 171 #define TG3_RX_JMB_MAP_SZ TG3_RX_DMA_TO_MAP_SZ(TG3_RX_JMB_DMA_SZ) 172 173 #define TG3_RX_STD_BUFF_RING_SIZE(tp) \ 174 (sizeof(struct ring_info) * TG3_RX_STD_RING_SIZE(tp)) 175 176 #define TG3_RX_JMB_BUFF_RING_SIZE(tp) \ 177 (sizeof(struct ring_info) * TG3_RX_JMB_RING_SIZE(tp)) 178 179 /* Due to a hardware bug, the 5701 can only DMA to memory addresses 180 * that are at least dword aligned when used in PCIX mode. The driver 181 * works around this bug by double copying the packet. This workaround 182 * is built into the normal double copy length check for efficiency. 183 * 184 * However, the double copy is only necessary on those architectures 185 * where unaligned memory accesses are inefficient. For those architectures 186 * where unaligned memory accesses incur little penalty, we can reintegrate 187 * the 5701 in the normal rx path. Doing so saves a device structure 188 * dereference by hardcoding the double copy threshold in place. 189 */ 190 #define TG3_RX_COPY_THRESHOLD 256 191 #if NET_IP_ALIGN == 0 || defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) 192 #define TG3_RX_COPY_THRESH(tp) TG3_RX_COPY_THRESHOLD 193 #else 194 #define TG3_RX_COPY_THRESH(tp) ((tp)->rx_copy_thresh) 195 #endif 196 197 #if (NET_IP_ALIGN != 0) 198 #define TG3_RX_OFFSET(tp) ((tp)->rx_offset) 199 #else 200 #define TG3_RX_OFFSET(tp) (NET_SKB_PAD) 201 #endif 202 203 /* minimum number of free TX descriptors required to wake up TX process */ 204 #define TG3_TX_WAKEUP_THRESH(tnapi) ((tnapi)->tx_pending / 4) 205 #define TG3_TX_BD_DMA_MAX_2K 2048 206 #define TG3_TX_BD_DMA_MAX_4K 4096 207 208 #define TG3_RAW_IP_ALIGN 2 209 210 #define TG3_FW_UPDATE_TIMEOUT_SEC 5 211 #define TG3_FW_UPDATE_FREQ_SEC (TG3_FW_UPDATE_TIMEOUT_SEC / 2) 212 213 #define FIRMWARE_TG3 "tigon/tg3.bin" 214 #define FIRMWARE_TG3TSO "tigon/tg3_tso.bin" 215 #define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin" 216 217 static char version[] = 218 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")"; 219 220 MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)"); 221 MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver"); 222 MODULE_LICENSE("GPL"); 223 MODULE_VERSION(DRV_MODULE_VERSION); 224 MODULE_FIRMWARE(FIRMWARE_TG3); 225 MODULE_FIRMWARE(FIRMWARE_TG3TSO); 226 MODULE_FIRMWARE(FIRMWARE_TG3TSO5); 227 228 static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */ 229 module_param(tg3_debug, int, 0); 230 MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value"); 231 232 #define TG3_DRV_DATA_FLAG_10_100_ONLY 0x0001 233 #define TG3_DRV_DATA_FLAG_5705_10_100 0x0002 234 235 static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = { 236 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)}, 237 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)}, 238 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702)}, 239 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703)}, 240 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704)}, 241 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702FE)}, 242 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705)}, 243 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705_2)}, 244 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M)}, 245 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705M_2)}, 246 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702X)}, 247 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703X)}, 248 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S)}, 249 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5702A3)}, 250 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5703A3)}, 251 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)}, 252 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)}, 253 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)}, 254 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901), 255 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 256 TG3_DRV_DATA_FLAG_5705_10_100}, 257 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2), 258 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 259 TG3_DRV_DATA_FLAG_5705_10_100}, 260 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)}, 261 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F), 262 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY | 263 TG3_DRV_DATA_FLAG_5705_10_100}, 264 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)}, 265 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)}, 266 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)}, 267 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)}, 268 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F), 269 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 270 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)}, 271 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)}, 272 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)}, 273 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)}, 274 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F), 275 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 276 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)}, 277 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)}, 278 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)}, 279 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755M)}, 280 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)}, 281 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)}, 282 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)}, 283 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M, 284 PCI_VENDOR_ID_LENOVO, 285 TG3PCI_SUBDEVICE_ID_LENOVO_5787M), 286 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 287 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)}, 288 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F), 289 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 290 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)}, 291 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)}, 292 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)}, 293 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715S)}, 294 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780)}, 295 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5780S)}, 296 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5781)}, 297 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906)}, 298 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5906M)}, 299 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5784)}, 300 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5764)}, 301 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5723)}, 302 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761)}, 303 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5761E)}, 304 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761S)}, 305 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)}, 306 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)}, 307 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)}, 308 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 309 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A), 310 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 311 {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780, 312 PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B), 313 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 314 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)}, 315 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)}, 316 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790), 317 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 318 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)}, 319 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)}, 320 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)}, 321 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5718)}, 322 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57781)}, 323 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)}, 324 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)}, 325 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)}, 326 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791), 327 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 328 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795), 329 .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY}, 330 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)}, 331 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)}, 332 {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)}, 333 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9DXX)}, 334 {PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, PCI_DEVICE_ID_SYSKONNECT_9MXX)}, 335 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1000)}, 336 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1001)}, 337 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC1003)}, 338 {PCI_DEVICE(PCI_VENDOR_ID_ALTIMA, PCI_DEVICE_ID_ALTIMA_AC9100)}, 339 {PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_TIGON3)}, 340 {PCI_DEVICE(0x10cf, 0x11a2)}, /* Fujitsu 1000base-SX with BCM5703SKHB */ 341 {} 342 }; 343 344 MODULE_DEVICE_TABLE(pci, tg3_pci_tbl); 345 346 static const struct { 347 const char string[ETH_GSTRING_LEN]; 348 } ethtool_stats_keys[] = { 349 { "rx_octets" }, 350 { "rx_fragments" }, 351 { "rx_ucast_packets" }, 352 { "rx_mcast_packets" }, 353 { "rx_bcast_packets" }, 354 { "rx_fcs_errors" }, 355 { "rx_align_errors" }, 356 { "rx_xon_pause_rcvd" }, 357 { "rx_xoff_pause_rcvd" }, 358 { "rx_mac_ctrl_rcvd" }, 359 { "rx_xoff_entered" }, 360 { "rx_frame_too_long_errors" }, 361 { "rx_jabbers" }, 362 { "rx_undersize_packets" }, 363 { "rx_in_length_errors" }, 364 { "rx_out_length_errors" }, 365 { "rx_64_or_less_octet_packets" }, 366 { "rx_65_to_127_octet_packets" }, 367 { "rx_128_to_255_octet_packets" }, 368 { "rx_256_to_511_octet_packets" }, 369 { "rx_512_to_1023_octet_packets" }, 370 { "rx_1024_to_1522_octet_packets" }, 371 { "rx_1523_to_2047_octet_packets" }, 372 { "rx_2048_to_4095_octet_packets" }, 373 { "rx_4096_to_8191_octet_packets" }, 374 { "rx_8192_to_9022_octet_packets" }, 375 376 { "tx_octets" }, 377 { "tx_collisions" }, 378 379 { "tx_xon_sent" }, 380 { "tx_xoff_sent" }, 381 { "tx_flow_control" }, 382 { "tx_mac_errors" }, 383 { "tx_single_collisions" }, 384 { "tx_mult_collisions" }, 385 { "tx_deferred" }, 386 { "tx_excessive_collisions" }, 387 { "tx_late_collisions" }, 388 { "tx_collide_2times" }, 389 { "tx_collide_3times" }, 390 { "tx_collide_4times" }, 391 { "tx_collide_5times" }, 392 { "tx_collide_6times" }, 393 { "tx_collide_7times" }, 394 { "tx_collide_8times" }, 395 { "tx_collide_9times" }, 396 { "tx_collide_10times" }, 397 { "tx_collide_11times" }, 398 { "tx_collide_12times" }, 399 { "tx_collide_13times" }, 400 { "tx_collide_14times" }, 401 { "tx_collide_15times" }, 402 { "tx_ucast_packets" }, 403 { "tx_mcast_packets" }, 404 { "tx_bcast_packets" }, 405 { "tx_carrier_sense_errors" }, 406 { "tx_discards" }, 407 { "tx_errors" }, 408 409 { "dma_writeq_full" }, 410 { "dma_write_prioq_full" }, 411 { "rxbds_empty" }, 412 { "rx_discards" }, 413 { "rx_errors" }, 414 { "rx_threshold_hit" }, 415 416 { "dma_readq_full" }, 417 { "dma_read_prioq_full" }, 418 { "tx_comp_queue_full" }, 419 420 { "ring_set_send_prod_index" }, 421 { "ring_status_update" }, 422 { "nic_irqs" }, 423 { "nic_avoided_irqs" }, 424 { "nic_tx_threshold_hit" }, 425 426 { "mbuf_lwm_thresh_hit" }, 427 }; 428 429 #define TG3_NUM_STATS ARRAY_SIZE(ethtool_stats_keys) 430 #define TG3_NVRAM_TEST 0 431 #define TG3_LINK_TEST 1 432 #define TG3_REGISTER_TEST 2 433 #define TG3_MEMORY_TEST 3 434 #define TG3_MAC_LOOPB_TEST 4 435 #define TG3_PHY_LOOPB_TEST 5 436 #define TG3_EXT_LOOPB_TEST 6 437 #define TG3_INTERRUPT_TEST 7 438 439 440 static const struct { 441 const char string[ETH_GSTRING_LEN]; 442 } ethtool_test_keys[] = { 443 [TG3_NVRAM_TEST] = { "nvram test (online) " }, 444 [TG3_LINK_TEST] = { "link test (online) " }, 445 [TG3_REGISTER_TEST] = { "register test (offline)" }, 446 [TG3_MEMORY_TEST] = { "memory test (offline)" }, 447 [TG3_MAC_LOOPB_TEST] = { "mac loopback test (offline)" }, 448 [TG3_PHY_LOOPB_TEST] = { "phy loopback test (offline)" }, 449 [TG3_EXT_LOOPB_TEST] = { "ext loopback test (offline)" }, 450 [TG3_INTERRUPT_TEST] = { "interrupt test (offline)" }, 451 }; 452 453 #define TG3_NUM_TEST ARRAY_SIZE(ethtool_test_keys) 454 455 456 static void tg3_write32(struct tg3 *tp, u32 off, u32 val) 457 { 458 writel(val, tp->regs + off); 459 } 460 461 static u32 tg3_read32(struct tg3 *tp, u32 off) 462 { 463 return readl(tp->regs + off); 464 } 465 466 static void tg3_ape_write32(struct tg3 *tp, u32 off, u32 val) 467 { 468 writel(val, tp->aperegs + off); 469 } 470 471 static u32 tg3_ape_read32(struct tg3 *tp, u32 off) 472 { 473 return readl(tp->aperegs + off); 474 } 475 476 static void tg3_write_indirect_reg32(struct tg3 *tp, u32 off, u32 val) 477 { 478 unsigned long flags; 479 480 spin_lock_irqsave(&tp->indirect_lock, flags); 481 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 482 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 483 spin_unlock_irqrestore(&tp->indirect_lock, flags); 484 } 485 486 static void tg3_write_flush_reg32(struct tg3 *tp, u32 off, u32 val) 487 { 488 writel(val, tp->regs + off); 489 readl(tp->regs + off); 490 } 491 492 static u32 tg3_read_indirect_reg32(struct tg3 *tp, u32 off) 493 { 494 unsigned long flags; 495 u32 val; 496 497 spin_lock_irqsave(&tp->indirect_lock, flags); 498 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off); 499 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 500 spin_unlock_irqrestore(&tp->indirect_lock, flags); 501 return val; 502 } 503 504 static void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val) 505 { 506 unsigned long flags; 507 508 if (off == (MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW)) { 509 pci_write_config_dword(tp->pdev, TG3PCI_RCV_RET_RING_CON_IDX + 510 TG3_64BIT_REG_LOW, val); 511 return; 512 } 513 if (off == TG3_RX_STD_PROD_IDX_REG) { 514 pci_write_config_dword(tp->pdev, TG3PCI_STD_RING_PROD_IDX + 515 TG3_64BIT_REG_LOW, val); 516 return; 517 } 518 519 spin_lock_irqsave(&tp->indirect_lock, flags); 520 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 521 pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); 522 spin_unlock_irqrestore(&tp->indirect_lock, flags); 523 524 /* In indirect mode when disabling interrupts, we also need 525 * to clear the interrupt bit in the GRC local ctrl register. 526 */ 527 if ((off == (MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW)) && 528 (val == 0x1)) { 529 pci_write_config_dword(tp->pdev, TG3PCI_MISC_LOCAL_CTRL, 530 tp->grc_local_ctrl|GRC_LCLCTRL_CLEARINT); 531 } 532 } 533 534 static u32 tg3_read_indirect_mbox(struct tg3 *tp, u32 off) 535 { 536 unsigned long flags; 537 u32 val; 538 539 spin_lock_irqsave(&tp->indirect_lock, flags); 540 pci_write_config_dword(tp->pdev, TG3PCI_REG_BASE_ADDR, off + 0x5600); 541 pci_read_config_dword(tp->pdev, TG3PCI_REG_DATA, &val); 542 spin_unlock_irqrestore(&tp->indirect_lock, flags); 543 return val; 544 } 545 546 /* usec_wait specifies the wait time in usec when writing to certain registers 547 * where it is unsafe to read back the register without some delay. 548 * GRC_LOCAL_CTRL is one example if the GPIOs are toggled to switch power. 549 * TG3PCI_CLOCK_CTRL is another example if the clock frequencies are changed. 550 */ 551 static void _tw32_flush(struct tg3 *tp, u32 off, u32 val, u32 usec_wait) 552 { 553 if (tg3_flag(tp, PCIX_TARGET_HWBUG) || tg3_flag(tp, ICH_WORKAROUND)) 554 /* Non-posted methods */ 555 tp->write32(tp, off, val); 556 else { 557 /* Posted method */ 558 tg3_write32(tp, off, val); 559 if (usec_wait) 560 udelay(usec_wait); 561 tp->read32(tp, off); 562 } 563 /* Wait again after the read for the posted method to guarantee that 564 * the wait time is met. 565 */ 566 if (usec_wait) 567 udelay(usec_wait); 568 } 569 570 static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val) 571 { 572 tp->write32_mbox(tp, off, val); 573 if (!tg3_flag(tp, MBOX_WRITE_REORDER) && !tg3_flag(tp, ICH_WORKAROUND)) 574 tp->read32_mbox(tp, off); 575 } 576 577 static void tg3_write32_tx_mbox(struct tg3 *tp, u32 off, u32 val) 578 { 579 void __iomem *mbox = tp->regs + off; 580 writel(val, mbox); 581 if (tg3_flag(tp, TXD_MBOX_HWBUG)) 582 writel(val, mbox); 583 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 584 readl(mbox); 585 } 586 587 static u32 tg3_read32_mbox_5906(struct tg3 *tp, u32 off) 588 { 589 return readl(tp->regs + off + GRCMBOX_BASE); 590 } 591 592 static void tg3_write32_mbox_5906(struct tg3 *tp, u32 off, u32 val) 593 { 594 writel(val, tp->regs + off + GRCMBOX_BASE); 595 } 596 597 #define tw32_mailbox(reg, val) tp->write32_mbox(tp, reg, val) 598 #define tw32_mailbox_f(reg, val) tw32_mailbox_flush(tp, (reg), (val)) 599 #define tw32_rx_mbox(reg, val) tp->write32_rx_mbox(tp, reg, val) 600 #define tw32_tx_mbox(reg, val) tp->write32_tx_mbox(tp, reg, val) 601 #define tr32_mailbox(reg) tp->read32_mbox(tp, reg) 602 603 #define tw32(reg, val) tp->write32(tp, reg, val) 604 #define tw32_f(reg, val) _tw32_flush(tp, (reg), (val), 0) 605 #define tw32_wait_f(reg, val, us) _tw32_flush(tp, (reg), (val), (us)) 606 #define tr32(reg) tp->read32(tp, reg) 607 608 static void tg3_write_mem(struct tg3 *tp, u32 off, u32 val) 609 { 610 unsigned long flags; 611 612 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 && 613 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) 614 return; 615 616 spin_lock_irqsave(&tp->indirect_lock, flags); 617 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 618 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 619 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 620 621 /* Always leave this as zero. */ 622 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 623 } else { 624 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 625 tw32_f(TG3PCI_MEM_WIN_DATA, val); 626 627 /* Always leave this as zero. */ 628 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 629 } 630 spin_unlock_irqrestore(&tp->indirect_lock, flags); 631 } 632 633 static void tg3_read_mem(struct tg3 *tp, u32 off, u32 *val) 634 { 635 unsigned long flags; 636 637 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 && 638 (off >= NIC_SRAM_STATS_BLK) && (off < NIC_SRAM_TX_BUFFER_DESC)) { 639 *val = 0; 640 return; 641 } 642 643 spin_lock_irqsave(&tp->indirect_lock, flags); 644 if (tg3_flag(tp, SRAM_USE_CONFIG)) { 645 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, off); 646 pci_read_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 647 648 /* Always leave this as zero. */ 649 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 650 } else { 651 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, off); 652 *val = tr32(TG3PCI_MEM_WIN_DATA); 653 654 /* Always leave this as zero. */ 655 tw32_f(TG3PCI_MEM_WIN_BASE_ADDR, 0); 656 } 657 spin_unlock_irqrestore(&tp->indirect_lock, flags); 658 } 659 660 static void tg3_ape_lock_init(struct tg3 *tp) 661 { 662 int i; 663 u32 regbase, bit; 664 665 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 666 regbase = TG3_APE_LOCK_GRANT; 667 else 668 regbase = TG3_APE_PER_LOCK_GRANT; 669 670 /* Make sure the driver hasn't any stale locks. */ 671 for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) { 672 switch (i) { 673 case TG3_APE_LOCK_PHY0: 674 case TG3_APE_LOCK_PHY1: 675 case TG3_APE_LOCK_PHY2: 676 case TG3_APE_LOCK_PHY3: 677 bit = APE_LOCK_GRANT_DRIVER; 678 break; 679 default: 680 if (!tp->pci_fn) 681 bit = APE_LOCK_GRANT_DRIVER; 682 else 683 bit = 1 << tp->pci_fn; 684 } 685 tg3_ape_write32(tp, regbase + 4 * i, bit); 686 } 687 688 } 689 690 static int tg3_ape_lock(struct tg3 *tp, int locknum) 691 { 692 int i, off; 693 int ret = 0; 694 u32 status, req, gnt, bit; 695 696 if (!tg3_flag(tp, ENABLE_APE)) 697 return 0; 698 699 switch (locknum) { 700 case TG3_APE_LOCK_GPIO: 701 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 702 return 0; 703 case TG3_APE_LOCK_GRC: 704 case TG3_APE_LOCK_MEM: 705 if (!tp->pci_fn) 706 bit = APE_LOCK_REQ_DRIVER; 707 else 708 bit = 1 << tp->pci_fn; 709 break; 710 case TG3_APE_LOCK_PHY0: 711 case TG3_APE_LOCK_PHY1: 712 case TG3_APE_LOCK_PHY2: 713 case TG3_APE_LOCK_PHY3: 714 bit = APE_LOCK_REQ_DRIVER; 715 break; 716 default: 717 return -EINVAL; 718 } 719 720 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) { 721 req = TG3_APE_LOCK_REQ; 722 gnt = TG3_APE_LOCK_GRANT; 723 } else { 724 req = TG3_APE_PER_LOCK_REQ; 725 gnt = TG3_APE_PER_LOCK_GRANT; 726 } 727 728 off = 4 * locknum; 729 730 tg3_ape_write32(tp, req + off, bit); 731 732 /* Wait for up to 1 millisecond to acquire lock. */ 733 for (i = 0; i < 100; i++) { 734 status = tg3_ape_read32(tp, gnt + off); 735 if (status == bit) 736 break; 737 udelay(10); 738 } 739 740 if (status != bit) { 741 /* Revoke the lock request. */ 742 tg3_ape_write32(tp, gnt + off, bit); 743 ret = -EBUSY; 744 } 745 746 return ret; 747 } 748 749 static void tg3_ape_unlock(struct tg3 *tp, int locknum) 750 { 751 u32 gnt, bit; 752 753 if (!tg3_flag(tp, ENABLE_APE)) 754 return; 755 756 switch (locknum) { 757 case TG3_APE_LOCK_GPIO: 758 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 759 return; 760 case TG3_APE_LOCK_GRC: 761 case TG3_APE_LOCK_MEM: 762 if (!tp->pci_fn) 763 bit = APE_LOCK_GRANT_DRIVER; 764 else 765 bit = 1 << tp->pci_fn; 766 break; 767 case TG3_APE_LOCK_PHY0: 768 case TG3_APE_LOCK_PHY1: 769 case TG3_APE_LOCK_PHY2: 770 case TG3_APE_LOCK_PHY3: 771 bit = APE_LOCK_GRANT_DRIVER; 772 break; 773 default: 774 return; 775 } 776 777 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 778 gnt = TG3_APE_LOCK_GRANT; 779 else 780 gnt = TG3_APE_PER_LOCK_GRANT; 781 782 tg3_ape_write32(tp, gnt + 4 * locknum, bit); 783 } 784 785 static int tg3_ape_event_lock(struct tg3 *tp, u32 timeout_us) 786 { 787 u32 apedata; 788 789 while (timeout_us) { 790 if (tg3_ape_lock(tp, TG3_APE_LOCK_MEM)) 791 return -EBUSY; 792 793 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 794 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 795 break; 796 797 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 798 799 udelay(10); 800 timeout_us -= (timeout_us > 10) ? 10 : timeout_us; 801 } 802 803 return timeout_us ? 0 : -EBUSY; 804 } 805 806 static int tg3_ape_wait_for_event(struct tg3 *tp, u32 timeout_us) 807 { 808 u32 i, apedata; 809 810 for (i = 0; i < timeout_us / 10; i++) { 811 apedata = tg3_ape_read32(tp, TG3_APE_EVENT_STATUS); 812 813 if (!(apedata & APE_EVENT_STATUS_EVENT_PENDING)) 814 break; 815 816 udelay(10); 817 } 818 819 return i == timeout_us / 10; 820 } 821 822 static int tg3_ape_scratchpad_read(struct tg3 *tp, u32 *data, u32 base_off, 823 u32 len) 824 { 825 int err; 826 u32 i, bufoff, msgoff, maxlen, apedata; 827 828 if (!tg3_flag(tp, APE_HAS_NCSI)) 829 return 0; 830 831 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 832 if (apedata != APE_SEG_SIG_MAGIC) 833 return -ENODEV; 834 835 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 836 if (!(apedata & APE_FW_STATUS_READY)) 837 return -EAGAIN; 838 839 bufoff = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_OFF) + 840 TG3_APE_SHMEM_BASE; 841 msgoff = bufoff + 2 * sizeof(u32); 842 maxlen = tg3_ape_read32(tp, TG3_APE_SEG_MSG_BUF_LEN); 843 844 while (len) { 845 u32 length; 846 847 /* Cap xfer sizes to scratchpad limits. */ 848 length = (len > maxlen) ? maxlen : len; 849 len -= length; 850 851 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 852 if (!(apedata & APE_FW_STATUS_READY)) 853 return -EAGAIN; 854 855 /* Wait for up to 1 msec for APE to service previous event. */ 856 err = tg3_ape_event_lock(tp, 1000); 857 if (err) 858 return err; 859 860 apedata = APE_EVENT_STATUS_DRIVER_EVNT | 861 APE_EVENT_STATUS_SCRTCHPD_READ | 862 APE_EVENT_STATUS_EVENT_PENDING; 863 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, apedata); 864 865 tg3_ape_write32(tp, bufoff, base_off); 866 tg3_ape_write32(tp, bufoff + sizeof(u32), length); 867 868 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 869 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 870 871 base_off += length; 872 873 if (tg3_ape_wait_for_event(tp, 30000)) 874 return -EAGAIN; 875 876 for (i = 0; length; i += 4, length -= 4) { 877 u32 val = tg3_ape_read32(tp, msgoff + i); 878 memcpy(data, &val, sizeof(u32)); 879 data++; 880 } 881 } 882 883 return 0; 884 } 885 886 static int tg3_ape_send_event(struct tg3 *tp, u32 event) 887 { 888 int err; 889 u32 apedata; 890 891 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 892 if (apedata != APE_SEG_SIG_MAGIC) 893 return -EAGAIN; 894 895 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 896 if (!(apedata & APE_FW_STATUS_READY)) 897 return -EAGAIN; 898 899 /* Wait for up to 1 millisecond for APE to service previous event. */ 900 err = tg3_ape_event_lock(tp, 1000); 901 if (err) 902 return err; 903 904 tg3_ape_write32(tp, TG3_APE_EVENT_STATUS, 905 event | APE_EVENT_STATUS_EVENT_PENDING); 906 907 tg3_ape_unlock(tp, TG3_APE_LOCK_MEM); 908 tg3_ape_write32(tp, TG3_APE_EVENT, APE_EVENT_1); 909 910 return 0; 911 } 912 913 static void tg3_ape_driver_state_change(struct tg3 *tp, int kind) 914 { 915 u32 event; 916 u32 apedata; 917 918 if (!tg3_flag(tp, ENABLE_APE)) 919 return; 920 921 switch (kind) { 922 case RESET_KIND_INIT: 923 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 924 APE_HOST_SEG_SIG_MAGIC); 925 tg3_ape_write32(tp, TG3_APE_HOST_SEG_LEN, 926 APE_HOST_SEG_LEN_MAGIC); 927 apedata = tg3_ape_read32(tp, TG3_APE_HOST_INIT_COUNT); 928 tg3_ape_write32(tp, TG3_APE_HOST_INIT_COUNT, ++apedata); 929 tg3_ape_write32(tp, TG3_APE_HOST_DRIVER_ID, 930 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM)); 931 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR, 932 APE_HOST_BEHAV_NO_PHYLOCK); 933 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, 934 TG3_APE_HOST_DRVR_STATE_START); 935 936 event = APE_EVENT_STATUS_STATE_START; 937 break; 938 case RESET_KIND_SHUTDOWN: 939 /* With the interface we are currently using, 940 * APE does not track driver state. Wiping 941 * out the HOST SEGMENT SIGNATURE forces 942 * the APE to assume OS absent status. 943 */ 944 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0); 945 946 if (device_may_wakeup(&tp->pdev->dev) && 947 tg3_flag(tp, WOL_ENABLE)) { 948 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED, 949 TG3_APE_HOST_WOL_SPEED_AUTO); 950 apedata = TG3_APE_HOST_DRVR_STATE_WOL; 951 } else 952 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD; 953 954 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata); 955 956 event = APE_EVENT_STATUS_STATE_UNLOAD; 957 break; 958 case RESET_KIND_SUSPEND: 959 event = APE_EVENT_STATUS_STATE_SUSPEND; 960 break; 961 default: 962 return; 963 } 964 965 event |= APE_EVENT_STATUS_DRIVER_EVNT | APE_EVENT_STATUS_STATE_CHNGE; 966 967 tg3_ape_send_event(tp, event); 968 } 969 970 static void tg3_disable_ints(struct tg3 *tp) 971 { 972 int i; 973 974 tw32(TG3PCI_MISC_HOST_CTRL, 975 (tp->misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT)); 976 for (i = 0; i < tp->irq_max; i++) 977 tw32_mailbox_f(tp->napi[i].int_mbox, 0x00000001); 978 } 979 980 static void tg3_enable_ints(struct tg3 *tp) 981 { 982 int i; 983 984 tp->irq_sync = 0; 985 wmb(); 986 987 tw32(TG3PCI_MISC_HOST_CTRL, 988 (tp->misc_host_ctrl & ~MISC_HOST_CTRL_MASK_PCI_INT)); 989 990 tp->coal_now = tp->coalesce_mode | HOSTCC_MODE_ENABLE; 991 for (i = 0; i < tp->irq_cnt; i++) { 992 struct tg3_napi *tnapi = &tp->napi[i]; 993 994 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 995 if (tg3_flag(tp, 1SHOT_MSI)) 996 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 997 998 tp->coal_now |= tnapi->coal_now; 999 } 1000 1001 /* Force an initial interrupt */ 1002 if (!tg3_flag(tp, TAGGED_STATUS) && 1003 (tp->napi[0].hw_status->status & SD_STATUS_UPDATED)) 1004 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 1005 else 1006 tw32(HOSTCC_MODE, tp->coal_now); 1007 1008 tp->coal_now &= ~(tp->napi[0].coal_now | tp->napi[1].coal_now); 1009 } 1010 1011 static inline unsigned int tg3_has_work(struct tg3_napi *tnapi) 1012 { 1013 struct tg3 *tp = tnapi->tp; 1014 struct tg3_hw_status *sblk = tnapi->hw_status; 1015 unsigned int work_exists = 0; 1016 1017 /* check for phy events */ 1018 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 1019 if (sblk->status & SD_STATUS_LINK_CHG) 1020 work_exists = 1; 1021 } 1022 1023 /* check for TX work to do */ 1024 if (sblk->idx[0].tx_consumer != tnapi->tx_cons) 1025 work_exists = 1; 1026 1027 /* check for RX work to do */ 1028 if (tnapi->rx_rcb_prod_idx && 1029 *(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 1030 work_exists = 1; 1031 1032 return work_exists; 1033 } 1034 1035 /* tg3_int_reenable 1036 * similar to tg3_enable_ints, but it accurately determines whether there 1037 * is new work pending and can return without flushing the PIO write 1038 * which reenables interrupts 1039 */ 1040 static void tg3_int_reenable(struct tg3_napi *tnapi) 1041 { 1042 struct tg3 *tp = tnapi->tp; 1043 1044 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 1045 mmiowb(); 1046 1047 /* When doing tagged status, this work check is unnecessary. 1048 * The last_tag we write above tells the chip which piece of 1049 * work we've completed. 1050 */ 1051 if (!tg3_flag(tp, TAGGED_STATUS) && tg3_has_work(tnapi)) 1052 tw32(HOSTCC_MODE, tp->coalesce_mode | 1053 HOSTCC_MODE_ENABLE | tnapi->coal_now); 1054 } 1055 1056 static void tg3_switch_clocks(struct tg3 *tp) 1057 { 1058 u32 clock_ctrl; 1059 u32 orig_clock_ctrl; 1060 1061 if (tg3_flag(tp, CPMU_PRESENT) || tg3_flag(tp, 5780_CLASS)) 1062 return; 1063 1064 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); 1065 1066 orig_clock_ctrl = clock_ctrl; 1067 clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | 1068 CLOCK_CTRL_CLKRUN_OENABLE | 1069 0x1f); 1070 tp->pci_clock_ctrl = clock_ctrl; 1071 1072 if (tg3_flag(tp, 5705_PLUS)) { 1073 if (orig_clock_ctrl & CLOCK_CTRL_625_CORE) { 1074 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1075 clock_ctrl | CLOCK_CTRL_625_CORE, 40); 1076 } 1077 } else if ((orig_clock_ctrl & CLOCK_CTRL_44MHZ_CORE) != 0) { 1078 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1079 clock_ctrl | 1080 (CLOCK_CTRL_44MHZ_CORE | CLOCK_CTRL_ALTCLK), 1081 40); 1082 tw32_wait_f(TG3PCI_CLOCK_CTRL, 1083 clock_ctrl | (CLOCK_CTRL_ALTCLK), 1084 40); 1085 } 1086 tw32_wait_f(TG3PCI_CLOCK_CTRL, clock_ctrl, 40); 1087 } 1088 1089 #define PHY_BUSY_LOOPS 5000 1090 1091 static int tg3_readphy(struct tg3 *tp, int reg, u32 *val) 1092 { 1093 u32 frame_val; 1094 unsigned int loops; 1095 int ret; 1096 1097 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1098 tw32_f(MAC_MI_MODE, 1099 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1100 udelay(80); 1101 } 1102 1103 tg3_ape_lock(tp, tp->phy_ape_lock); 1104 1105 *val = 0x0; 1106 1107 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1108 MI_COM_PHY_ADDR_MASK); 1109 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1110 MI_COM_REG_ADDR_MASK); 1111 frame_val |= (MI_COM_CMD_READ | MI_COM_START); 1112 1113 tw32_f(MAC_MI_COM, frame_val); 1114 1115 loops = PHY_BUSY_LOOPS; 1116 while (loops != 0) { 1117 udelay(10); 1118 frame_val = tr32(MAC_MI_COM); 1119 1120 if ((frame_val & MI_COM_BUSY) == 0) { 1121 udelay(5); 1122 frame_val = tr32(MAC_MI_COM); 1123 break; 1124 } 1125 loops -= 1; 1126 } 1127 1128 ret = -EBUSY; 1129 if (loops != 0) { 1130 *val = frame_val & MI_COM_DATA_MASK; 1131 ret = 0; 1132 } 1133 1134 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1135 tw32_f(MAC_MI_MODE, tp->mi_mode); 1136 udelay(80); 1137 } 1138 1139 tg3_ape_unlock(tp, tp->phy_ape_lock); 1140 1141 return ret; 1142 } 1143 1144 static int tg3_writephy(struct tg3 *tp, int reg, u32 val) 1145 { 1146 u32 frame_val; 1147 unsigned int loops; 1148 int ret; 1149 1150 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 1151 (reg == MII_CTRL1000 || reg == MII_TG3_AUX_CTRL)) 1152 return 0; 1153 1154 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1155 tw32_f(MAC_MI_MODE, 1156 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 1157 udelay(80); 1158 } 1159 1160 tg3_ape_lock(tp, tp->phy_ape_lock); 1161 1162 frame_val = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) & 1163 MI_COM_PHY_ADDR_MASK); 1164 frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) & 1165 MI_COM_REG_ADDR_MASK); 1166 frame_val |= (val & MI_COM_DATA_MASK); 1167 frame_val |= (MI_COM_CMD_WRITE | MI_COM_START); 1168 1169 tw32_f(MAC_MI_COM, frame_val); 1170 1171 loops = PHY_BUSY_LOOPS; 1172 while (loops != 0) { 1173 udelay(10); 1174 frame_val = tr32(MAC_MI_COM); 1175 if ((frame_val & MI_COM_BUSY) == 0) { 1176 udelay(5); 1177 frame_val = tr32(MAC_MI_COM); 1178 break; 1179 } 1180 loops -= 1; 1181 } 1182 1183 ret = -EBUSY; 1184 if (loops != 0) 1185 ret = 0; 1186 1187 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 1188 tw32_f(MAC_MI_MODE, tp->mi_mode); 1189 udelay(80); 1190 } 1191 1192 tg3_ape_unlock(tp, tp->phy_ape_lock); 1193 1194 return ret; 1195 } 1196 1197 static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val) 1198 { 1199 int err; 1200 1201 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1202 if (err) 1203 goto done; 1204 1205 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1206 if (err) 1207 goto done; 1208 1209 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1210 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1211 if (err) 1212 goto done; 1213 1214 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val); 1215 1216 done: 1217 return err; 1218 } 1219 1220 static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val) 1221 { 1222 int err; 1223 1224 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); 1225 if (err) 1226 goto done; 1227 1228 err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); 1229 if (err) 1230 goto done; 1231 1232 err = tg3_writephy(tp, MII_TG3_MMD_CTRL, 1233 MII_TG3_MMD_CTRL_DATA_NOINC | devad); 1234 if (err) 1235 goto done; 1236 1237 err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val); 1238 1239 done: 1240 return err; 1241 } 1242 1243 static int tg3_phydsp_read(struct tg3 *tp, u32 reg, u32 *val) 1244 { 1245 int err; 1246 1247 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1248 if (!err) 1249 err = tg3_readphy(tp, MII_TG3_DSP_RW_PORT, val); 1250 1251 return err; 1252 } 1253 1254 static int tg3_phydsp_write(struct tg3 *tp, u32 reg, u32 val) 1255 { 1256 int err; 1257 1258 err = tg3_writephy(tp, MII_TG3_DSP_ADDRESS, reg); 1259 if (!err) 1260 err = tg3_writephy(tp, MII_TG3_DSP_RW_PORT, val); 1261 1262 return err; 1263 } 1264 1265 static int tg3_phy_auxctl_read(struct tg3 *tp, int reg, u32 *val) 1266 { 1267 int err; 1268 1269 err = tg3_writephy(tp, MII_TG3_AUX_CTRL, 1270 (reg << MII_TG3_AUXCTL_MISC_RDSEL_SHIFT) | 1271 MII_TG3_AUXCTL_SHDWSEL_MISC); 1272 if (!err) 1273 err = tg3_readphy(tp, MII_TG3_AUX_CTRL, val); 1274 1275 return err; 1276 } 1277 1278 static int tg3_phy_auxctl_write(struct tg3 *tp, int reg, u32 set) 1279 { 1280 if (reg == MII_TG3_AUXCTL_SHDWSEL_MISC) 1281 set |= MII_TG3_AUXCTL_MISC_WREN; 1282 1283 return tg3_writephy(tp, MII_TG3_AUX_CTRL, set | reg); 1284 } 1285 1286 static int tg3_phy_toggle_auxctl_smdsp(struct tg3 *tp, bool enable) 1287 { 1288 u32 val; 1289 int err; 1290 1291 err = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 1292 1293 if (err) 1294 return err; 1295 if (enable) 1296 1297 val |= MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1298 else 1299 val &= ~MII_TG3_AUXCTL_ACTL_SMDSP_ENA; 1300 1301 err = tg3_phy_auxctl_write((tp), MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 1302 val | MII_TG3_AUXCTL_ACTL_TX_6DB); 1303 1304 return err; 1305 } 1306 1307 static int tg3_bmcr_reset(struct tg3 *tp) 1308 { 1309 u32 phy_control; 1310 int limit, err; 1311 1312 /* OK, reset it, and poll the BMCR_RESET bit until it 1313 * clears or we time out. 1314 */ 1315 phy_control = BMCR_RESET; 1316 err = tg3_writephy(tp, MII_BMCR, phy_control); 1317 if (err != 0) 1318 return -EBUSY; 1319 1320 limit = 5000; 1321 while (limit--) { 1322 err = tg3_readphy(tp, MII_BMCR, &phy_control); 1323 if (err != 0) 1324 return -EBUSY; 1325 1326 if ((phy_control & BMCR_RESET) == 0) { 1327 udelay(40); 1328 break; 1329 } 1330 udelay(10); 1331 } 1332 if (limit < 0) 1333 return -EBUSY; 1334 1335 return 0; 1336 } 1337 1338 static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg) 1339 { 1340 struct tg3 *tp = bp->priv; 1341 u32 val; 1342 1343 spin_lock_bh(&tp->lock); 1344 1345 if (tg3_readphy(tp, reg, &val)) 1346 val = -EIO; 1347 1348 spin_unlock_bh(&tp->lock); 1349 1350 return val; 1351 } 1352 1353 static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val) 1354 { 1355 struct tg3 *tp = bp->priv; 1356 u32 ret = 0; 1357 1358 spin_lock_bh(&tp->lock); 1359 1360 if (tg3_writephy(tp, reg, val)) 1361 ret = -EIO; 1362 1363 spin_unlock_bh(&tp->lock); 1364 1365 return ret; 1366 } 1367 1368 static int tg3_mdio_reset(struct mii_bus *bp) 1369 { 1370 return 0; 1371 } 1372 1373 static void tg3_mdio_config_5785(struct tg3 *tp) 1374 { 1375 u32 val; 1376 struct phy_device *phydev; 1377 1378 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1379 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1380 case PHY_ID_BCM50610: 1381 case PHY_ID_BCM50610M: 1382 val = MAC_PHYCFG2_50610_LED_MODES; 1383 break; 1384 case PHY_ID_BCMAC131: 1385 val = MAC_PHYCFG2_AC131_LED_MODES; 1386 break; 1387 case PHY_ID_RTL8211C: 1388 val = MAC_PHYCFG2_RTL8211C_LED_MODES; 1389 break; 1390 case PHY_ID_RTL8201E: 1391 val = MAC_PHYCFG2_RTL8201E_LED_MODES; 1392 break; 1393 default: 1394 return; 1395 } 1396 1397 if (phydev->interface != PHY_INTERFACE_MODE_RGMII) { 1398 tw32(MAC_PHYCFG2, val); 1399 1400 val = tr32(MAC_PHYCFG1); 1401 val &= ~(MAC_PHYCFG1_RGMII_INT | 1402 MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK); 1403 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT; 1404 tw32(MAC_PHYCFG1, val); 1405 1406 return; 1407 } 1408 1409 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) 1410 val |= MAC_PHYCFG2_EMODE_MASK_MASK | 1411 MAC_PHYCFG2_FMODE_MASK_MASK | 1412 MAC_PHYCFG2_GMODE_MASK_MASK | 1413 MAC_PHYCFG2_ACT_MASK_MASK | 1414 MAC_PHYCFG2_QUAL_MASK_MASK | 1415 MAC_PHYCFG2_INBAND_ENABLE; 1416 1417 tw32(MAC_PHYCFG2, val); 1418 1419 val = tr32(MAC_PHYCFG1); 1420 val &= ~(MAC_PHYCFG1_RXCLK_TO_MASK | MAC_PHYCFG1_TXCLK_TO_MASK | 1421 MAC_PHYCFG1_RGMII_EXT_RX_DEC | MAC_PHYCFG1_RGMII_SND_STAT_EN); 1422 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1423 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1424 val |= MAC_PHYCFG1_RGMII_EXT_RX_DEC; 1425 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1426 val |= MAC_PHYCFG1_RGMII_SND_STAT_EN; 1427 } 1428 val |= MAC_PHYCFG1_RXCLK_TIMEOUT | MAC_PHYCFG1_TXCLK_TIMEOUT | 1429 MAC_PHYCFG1_RGMII_INT | MAC_PHYCFG1_TXC_DRV; 1430 tw32(MAC_PHYCFG1, val); 1431 1432 val = tr32(MAC_EXT_RGMII_MODE); 1433 val &= ~(MAC_RGMII_MODE_RX_INT_B | 1434 MAC_RGMII_MODE_RX_QUALITY | 1435 MAC_RGMII_MODE_RX_ACTIVITY | 1436 MAC_RGMII_MODE_RX_ENG_DET | 1437 MAC_RGMII_MODE_TX_ENABLE | 1438 MAC_RGMII_MODE_TX_LOWPWR | 1439 MAC_RGMII_MODE_TX_RESET); 1440 if (!tg3_flag(tp, RGMII_INBAND_DISABLE)) { 1441 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1442 val |= MAC_RGMII_MODE_RX_INT_B | 1443 MAC_RGMII_MODE_RX_QUALITY | 1444 MAC_RGMII_MODE_RX_ACTIVITY | 1445 MAC_RGMII_MODE_RX_ENG_DET; 1446 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1447 val |= MAC_RGMII_MODE_TX_ENABLE | 1448 MAC_RGMII_MODE_TX_LOWPWR | 1449 MAC_RGMII_MODE_TX_RESET; 1450 } 1451 tw32(MAC_EXT_RGMII_MODE, val); 1452 } 1453 1454 static void tg3_mdio_start(struct tg3 *tp) 1455 { 1456 tp->mi_mode &= ~MAC_MI_MODE_AUTO_POLL; 1457 tw32_f(MAC_MI_MODE, tp->mi_mode); 1458 udelay(80); 1459 1460 if (tg3_flag(tp, MDIOBUS_INITED) && 1461 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 1462 tg3_mdio_config_5785(tp); 1463 } 1464 1465 static int tg3_mdio_init(struct tg3 *tp) 1466 { 1467 int i; 1468 u32 reg; 1469 struct phy_device *phydev; 1470 1471 if (tg3_flag(tp, 5717_PLUS)) { 1472 u32 is_serdes; 1473 1474 tp->phy_addr = tp->pci_fn + 1; 1475 1476 if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) 1477 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; 1478 else 1479 is_serdes = tr32(TG3_CPMU_PHY_STRAP) & 1480 TG3_CPMU_PHY_STRAP_IS_SERDES; 1481 if (is_serdes) 1482 tp->phy_addr += 7; 1483 } else 1484 tp->phy_addr = TG3_PHY_MII_ADDR; 1485 1486 tg3_mdio_start(tp); 1487 1488 if (!tg3_flag(tp, USE_PHYLIB) || tg3_flag(tp, MDIOBUS_INITED)) 1489 return 0; 1490 1491 tp->mdio_bus = mdiobus_alloc(); 1492 if (tp->mdio_bus == NULL) 1493 return -ENOMEM; 1494 1495 tp->mdio_bus->name = "tg3 mdio bus"; 1496 snprintf(tp->mdio_bus->id, MII_BUS_ID_SIZE, "%x", 1497 (tp->pdev->bus->number << 8) | tp->pdev->devfn); 1498 tp->mdio_bus->priv = tp; 1499 tp->mdio_bus->parent = &tp->pdev->dev; 1500 tp->mdio_bus->read = &tg3_mdio_read; 1501 tp->mdio_bus->write = &tg3_mdio_write; 1502 tp->mdio_bus->reset = &tg3_mdio_reset; 1503 tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR); 1504 tp->mdio_bus->irq = &tp->mdio_irq[0]; 1505 1506 for (i = 0; i < PHY_MAX_ADDR; i++) 1507 tp->mdio_bus->irq[i] = PHY_POLL; 1508 1509 /* The bus registration will look for all the PHYs on the mdio bus. 1510 * Unfortunately, it does not ensure the PHY is powered up before 1511 * accessing the PHY ID registers. A chip reset is the 1512 * quickest way to bring the device back to an operational state.. 1513 */ 1514 if (tg3_readphy(tp, MII_BMCR, ®) || (reg & BMCR_PDOWN)) 1515 tg3_bmcr_reset(tp); 1516 1517 i = mdiobus_register(tp->mdio_bus); 1518 if (i) { 1519 dev_warn(&tp->pdev->dev, "mdiobus_reg failed (0x%x)\n", i); 1520 mdiobus_free(tp->mdio_bus); 1521 return i; 1522 } 1523 1524 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1525 1526 if (!phydev || !phydev->drv) { 1527 dev_warn(&tp->pdev->dev, "No PHY devices\n"); 1528 mdiobus_unregister(tp->mdio_bus); 1529 mdiobus_free(tp->mdio_bus); 1530 return -ENODEV; 1531 } 1532 1533 switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) { 1534 case PHY_ID_BCM57780: 1535 phydev->interface = PHY_INTERFACE_MODE_GMII; 1536 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1537 break; 1538 case PHY_ID_BCM50610: 1539 case PHY_ID_BCM50610M: 1540 phydev->dev_flags |= PHY_BRCM_CLEAR_RGMII_MODE | 1541 PHY_BRCM_RX_REFCLK_UNUSED | 1542 PHY_BRCM_DIS_TXCRXC_NOENRGY | 1543 PHY_BRCM_AUTO_PWRDWN_ENABLE; 1544 if (tg3_flag(tp, RGMII_INBAND_DISABLE)) 1545 phydev->dev_flags |= PHY_BRCM_STD_IBND_DISABLE; 1546 if (tg3_flag(tp, RGMII_EXT_IBND_RX_EN)) 1547 phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE; 1548 if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) 1549 phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE; 1550 /* fallthru */ 1551 case PHY_ID_RTL8211C: 1552 phydev->interface = PHY_INTERFACE_MODE_RGMII; 1553 break; 1554 case PHY_ID_RTL8201E: 1555 case PHY_ID_BCMAC131: 1556 phydev->interface = PHY_INTERFACE_MODE_MII; 1557 phydev->dev_flags |= PHY_BRCM_AUTO_PWRDWN_ENABLE; 1558 tp->phy_flags |= TG3_PHYFLG_IS_FET; 1559 break; 1560 } 1561 1562 tg3_flag_set(tp, MDIOBUS_INITED); 1563 1564 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 1565 tg3_mdio_config_5785(tp); 1566 1567 return 0; 1568 } 1569 1570 static void tg3_mdio_fini(struct tg3 *tp) 1571 { 1572 if (tg3_flag(tp, MDIOBUS_INITED)) { 1573 tg3_flag_clear(tp, MDIOBUS_INITED); 1574 mdiobus_unregister(tp->mdio_bus); 1575 mdiobus_free(tp->mdio_bus); 1576 } 1577 } 1578 1579 /* tp->lock is held. */ 1580 static inline void tg3_generate_fw_event(struct tg3 *tp) 1581 { 1582 u32 val; 1583 1584 val = tr32(GRC_RX_CPU_EVENT); 1585 val |= GRC_RX_CPU_DRIVER_EVENT; 1586 tw32_f(GRC_RX_CPU_EVENT, val); 1587 1588 tp->last_event_jiffies = jiffies; 1589 } 1590 1591 #define TG3_FW_EVENT_TIMEOUT_USEC 2500 1592 1593 /* tp->lock is held. */ 1594 static void tg3_wait_for_event_ack(struct tg3 *tp) 1595 { 1596 int i; 1597 unsigned int delay_cnt; 1598 long time_remain; 1599 1600 /* If enough time has passed, no wait is necessary. */ 1601 time_remain = (long)(tp->last_event_jiffies + 1 + 1602 usecs_to_jiffies(TG3_FW_EVENT_TIMEOUT_USEC)) - 1603 (long)jiffies; 1604 if (time_remain < 0) 1605 return; 1606 1607 /* Check if we can shorten the wait time. */ 1608 delay_cnt = jiffies_to_usecs(time_remain); 1609 if (delay_cnt > TG3_FW_EVENT_TIMEOUT_USEC) 1610 delay_cnt = TG3_FW_EVENT_TIMEOUT_USEC; 1611 delay_cnt = (delay_cnt >> 3) + 1; 1612 1613 for (i = 0; i < delay_cnt; i++) { 1614 if (!(tr32(GRC_RX_CPU_EVENT) & GRC_RX_CPU_DRIVER_EVENT)) 1615 break; 1616 udelay(8); 1617 } 1618 } 1619 1620 /* tp->lock is held. */ 1621 static void tg3_phy_gather_ump_data(struct tg3 *tp, u32 *data) 1622 { 1623 u32 reg, val; 1624 1625 val = 0; 1626 if (!tg3_readphy(tp, MII_BMCR, ®)) 1627 val = reg << 16; 1628 if (!tg3_readphy(tp, MII_BMSR, ®)) 1629 val |= (reg & 0xffff); 1630 *data++ = val; 1631 1632 val = 0; 1633 if (!tg3_readphy(tp, MII_ADVERTISE, ®)) 1634 val = reg << 16; 1635 if (!tg3_readphy(tp, MII_LPA, ®)) 1636 val |= (reg & 0xffff); 1637 *data++ = val; 1638 1639 val = 0; 1640 if (!(tp->phy_flags & TG3_PHYFLG_MII_SERDES)) { 1641 if (!tg3_readphy(tp, MII_CTRL1000, ®)) 1642 val = reg << 16; 1643 if (!tg3_readphy(tp, MII_STAT1000, ®)) 1644 val |= (reg & 0xffff); 1645 } 1646 *data++ = val; 1647 1648 if (!tg3_readphy(tp, MII_PHYADDR, ®)) 1649 val = reg << 16; 1650 else 1651 val = 0; 1652 *data++ = val; 1653 } 1654 1655 /* tp->lock is held. */ 1656 static void tg3_ump_link_report(struct tg3 *tp) 1657 { 1658 u32 data[4]; 1659 1660 if (!tg3_flag(tp, 5780_CLASS) || !tg3_flag(tp, ENABLE_ASF)) 1661 return; 1662 1663 tg3_phy_gather_ump_data(tp, data); 1664 1665 tg3_wait_for_event_ack(tp); 1666 1667 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_LINK_UPDATE); 1668 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 14); 1669 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x0, data[0]); 1670 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x4, data[1]); 1671 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0x8, data[2]); 1672 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX + 0xc, data[3]); 1673 1674 tg3_generate_fw_event(tp); 1675 } 1676 1677 /* tp->lock is held. */ 1678 static void tg3_stop_fw(struct tg3 *tp) 1679 { 1680 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 1681 /* Wait for RX cpu to ACK the previous event. */ 1682 tg3_wait_for_event_ack(tp); 1683 1684 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, FWCMD_NICDRV_PAUSE_FW); 1685 1686 tg3_generate_fw_event(tp); 1687 1688 /* Wait for RX cpu to ACK this event. */ 1689 tg3_wait_for_event_ack(tp); 1690 } 1691 } 1692 1693 /* tp->lock is held. */ 1694 static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) 1695 { 1696 tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, 1697 NIC_SRAM_FIRMWARE_MBOX_MAGIC1); 1698 1699 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1700 switch (kind) { 1701 case RESET_KIND_INIT: 1702 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1703 DRV_STATE_START); 1704 break; 1705 1706 case RESET_KIND_SHUTDOWN: 1707 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1708 DRV_STATE_UNLOAD); 1709 break; 1710 1711 case RESET_KIND_SUSPEND: 1712 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1713 DRV_STATE_SUSPEND); 1714 break; 1715 1716 default: 1717 break; 1718 } 1719 } 1720 1721 if (kind == RESET_KIND_INIT || 1722 kind == RESET_KIND_SUSPEND) 1723 tg3_ape_driver_state_change(tp, kind); 1724 } 1725 1726 /* tp->lock is held. */ 1727 static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) 1728 { 1729 if (tg3_flag(tp, ASF_NEW_HANDSHAKE)) { 1730 switch (kind) { 1731 case RESET_KIND_INIT: 1732 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1733 DRV_STATE_START_DONE); 1734 break; 1735 1736 case RESET_KIND_SHUTDOWN: 1737 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1738 DRV_STATE_UNLOAD_DONE); 1739 break; 1740 1741 default: 1742 break; 1743 } 1744 } 1745 1746 if (kind == RESET_KIND_SHUTDOWN) 1747 tg3_ape_driver_state_change(tp, kind); 1748 } 1749 1750 /* tp->lock is held. */ 1751 static void tg3_write_sig_legacy(struct tg3 *tp, int kind) 1752 { 1753 if (tg3_flag(tp, ENABLE_ASF)) { 1754 switch (kind) { 1755 case RESET_KIND_INIT: 1756 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1757 DRV_STATE_START); 1758 break; 1759 1760 case RESET_KIND_SHUTDOWN: 1761 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1762 DRV_STATE_UNLOAD); 1763 break; 1764 1765 case RESET_KIND_SUSPEND: 1766 tg3_write_mem(tp, NIC_SRAM_FW_DRV_STATE_MBOX, 1767 DRV_STATE_SUSPEND); 1768 break; 1769 1770 default: 1771 break; 1772 } 1773 } 1774 } 1775 1776 static int tg3_poll_fw(struct tg3 *tp) 1777 { 1778 int i; 1779 u32 val; 1780 1781 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 1782 /* Wait up to 20ms for init done. */ 1783 for (i = 0; i < 200; i++) { 1784 if (tr32(VCPU_STATUS) & VCPU_STATUS_INIT_DONE) 1785 return 0; 1786 udelay(100); 1787 } 1788 return -ENODEV; 1789 } 1790 1791 /* Wait for firmware initialization to complete. */ 1792 for (i = 0; i < 100000; i++) { 1793 tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); 1794 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 1795 break; 1796 udelay(10); 1797 } 1798 1799 /* Chip might not be fitted with firmware. Some Sun onboard 1800 * parts are configured like that. So don't signal the timeout 1801 * of the above loop as an error, but do report the lack of 1802 * running firmware once. 1803 */ 1804 if (i >= 100000 && !tg3_flag(tp, NO_FWARE_REPORTED)) { 1805 tg3_flag_set(tp, NO_FWARE_REPORTED); 1806 1807 netdev_info(tp->dev, "No firmware running\n"); 1808 } 1809 1810 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) { 1811 /* The 57765 A0 needs a little more 1812 * time to do some important work. 1813 */ 1814 mdelay(10); 1815 } 1816 1817 return 0; 1818 } 1819 1820 static void tg3_link_report(struct tg3 *tp) 1821 { 1822 if (!netif_carrier_ok(tp->dev)) { 1823 netif_info(tp, link, tp->dev, "Link is down\n"); 1824 tg3_ump_link_report(tp); 1825 } else if (netif_msg_link(tp)) { 1826 netdev_info(tp->dev, "Link is up at %d Mbps, %s duplex\n", 1827 (tp->link_config.active_speed == SPEED_1000 ? 1828 1000 : 1829 (tp->link_config.active_speed == SPEED_100 ? 1830 100 : 10)), 1831 (tp->link_config.active_duplex == DUPLEX_FULL ? 1832 "full" : "half")); 1833 1834 netdev_info(tp->dev, "Flow control is %s for TX and %s for RX\n", 1835 (tp->link_config.active_flowctrl & FLOW_CTRL_TX) ? 1836 "on" : "off", 1837 (tp->link_config.active_flowctrl & FLOW_CTRL_RX) ? 1838 "on" : "off"); 1839 1840 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) 1841 netdev_info(tp->dev, "EEE is %s\n", 1842 tp->setlpicnt ? "enabled" : "disabled"); 1843 1844 tg3_ump_link_report(tp); 1845 } 1846 } 1847 1848 static u16 tg3_advert_flowctrl_1000X(u8 flow_ctrl) 1849 { 1850 u16 miireg; 1851 1852 if ((flow_ctrl & FLOW_CTRL_TX) && (flow_ctrl & FLOW_CTRL_RX)) 1853 miireg = ADVERTISE_1000XPAUSE; 1854 else if (flow_ctrl & FLOW_CTRL_TX) 1855 miireg = ADVERTISE_1000XPSE_ASYM; 1856 else if (flow_ctrl & FLOW_CTRL_RX) 1857 miireg = ADVERTISE_1000XPAUSE | ADVERTISE_1000XPSE_ASYM; 1858 else 1859 miireg = 0; 1860 1861 return miireg; 1862 } 1863 1864 static u8 tg3_resolve_flowctrl_1000X(u16 lcladv, u16 rmtadv) 1865 { 1866 u8 cap = 0; 1867 1868 if (lcladv & rmtadv & ADVERTISE_1000XPAUSE) { 1869 cap = FLOW_CTRL_TX | FLOW_CTRL_RX; 1870 } else if (lcladv & rmtadv & ADVERTISE_1000XPSE_ASYM) { 1871 if (lcladv & ADVERTISE_1000XPAUSE) 1872 cap = FLOW_CTRL_RX; 1873 if (rmtadv & ADVERTISE_1000XPAUSE) 1874 cap = FLOW_CTRL_TX; 1875 } 1876 1877 return cap; 1878 } 1879 1880 static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv) 1881 { 1882 u8 autoneg; 1883 u8 flowctrl = 0; 1884 u32 old_rx_mode = tp->rx_mode; 1885 u32 old_tx_mode = tp->tx_mode; 1886 1887 if (tg3_flag(tp, USE_PHYLIB)) 1888 autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg; 1889 else 1890 autoneg = tp->link_config.autoneg; 1891 1892 if (autoneg == AUTONEG_ENABLE && tg3_flag(tp, PAUSE_AUTONEG)) { 1893 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 1894 flowctrl = tg3_resolve_flowctrl_1000X(lcladv, rmtadv); 1895 else 1896 flowctrl = mii_resolve_flowctrl_fdx(lcladv, rmtadv); 1897 } else 1898 flowctrl = tp->link_config.flowctrl; 1899 1900 tp->link_config.active_flowctrl = flowctrl; 1901 1902 if (flowctrl & FLOW_CTRL_RX) 1903 tp->rx_mode |= RX_MODE_FLOW_CTRL_ENABLE; 1904 else 1905 tp->rx_mode &= ~RX_MODE_FLOW_CTRL_ENABLE; 1906 1907 if (old_rx_mode != tp->rx_mode) 1908 tw32_f(MAC_RX_MODE, tp->rx_mode); 1909 1910 if (flowctrl & FLOW_CTRL_TX) 1911 tp->tx_mode |= TX_MODE_FLOW_CTRL_ENABLE; 1912 else 1913 tp->tx_mode &= ~TX_MODE_FLOW_CTRL_ENABLE; 1914 1915 if (old_tx_mode != tp->tx_mode) 1916 tw32_f(MAC_TX_MODE, tp->tx_mode); 1917 } 1918 1919 static void tg3_adjust_link(struct net_device *dev) 1920 { 1921 u8 oldflowctrl, linkmesg = 0; 1922 u32 mac_mode, lcl_adv, rmt_adv; 1923 struct tg3 *tp = netdev_priv(dev); 1924 struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 1925 1926 spin_lock_bh(&tp->lock); 1927 1928 mac_mode = tp->mac_mode & ~(MAC_MODE_PORT_MODE_MASK | 1929 MAC_MODE_HALF_DUPLEX); 1930 1931 oldflowctrl = tp->link_config.active_flowctrl; 1932 1933 if (phydev->link) { 1934 lcl_adv = 0; 1935 rmt_adv = 0; 1936 1937 if (phydev->speed == SPEED_100 || phydev->speed == SPEED_10) 1938 mac_mode |= MAC_MODE_PORT_MODE_MII; 1939 else if (phydev->speed == SPEED_1000 || 1940 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785) 1941 mac_mode |= MAC_MODE_PORT_MODE_GMII; 1942 else 1943 mac_mode |= MAC_MODE_PORT_MODE_MII; 1944 1945 if (phydev->duplex == DUPLEX_HALF) 1946 mac_mode |= MAC_MODE_HALF_DUPLEX; 1947 else { 1948 lcl_adv = mii_advertise_flowctrl( 1949 tp->link_config.flowctrl); 1950 1951 if (phydev->pause) 1952 rmt_adv = LPA_PAUSE_CAP; 1953 if (phydev->asym_pause) 1954 rmt_adv |= LPA_PAUSE_ASYM; 1955 } 1956 1957 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 1958 } else 1959 mac_mode |= MAC_MODE_PORT_MODE_GMII; 1960 1961 if (mac_mode != tp->mac_mode) { 1962 tp->mac_mode = mac_mode; 1963 tw32_f(MAC_MODE, tp->mac_mode); 1964 udelay(40); 1965 } 1966 1967 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 1968 if (phydev->speed == SPEED_10) 1969 tw32(MAC_MI_STAT, 1970 MAC_MI_STAT_10MBPS_MODE | 1971 MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 1972 else 1973 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 1974 } 1975 1976 if (phydev->speed == SPEED_1000 && phydev->duplex == DUPLEX_HALF) 1977 tw32(MAC_TX_LENGTHS, 1978 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 1979 (6 << TX_LENGTHS_IPG_SHIFT) | 1980 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT))); 1981 else 1982 tw32(MAC_TX_LENGTHS, 1983 ((2 << TX_LENGTHS_IPG_CRS_SHIFT) | 1984 (6 << TX_LENGTHS_IPG_SHIFT) | 1985 (32 << TX_LENGTHS_SLOT_TIME_SHIFT))); 1986 1987 if (phydev->link != tp->old_link || 1988 phydev->speed != tp->link_config.active_speed || 1989 phydev->duplex != tp->link_config.active_duplex || 1990 oldflowctrl != tp->link_config.active_flowctrl) 1991 linkmesg = 1; 1992 1993 tp->old_link = phydev->link; 1994 tp->link_config.active_speed = phydev->speed; 1995 tp->link_config.active_duplex = phydev->duplex; 1996 1997 spin_unlock_bh(&tp->lock); 1998 1999 if (linkmesg) 2000 tg3_link_report(tp); 2001 } 2002 2003 static int tg3_phy_init(struct tg3 *tp) 2004 { 2005 struct phy_device *phydev; 2006 2007 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) 2008 return 0; 2009 2010 /* Bring the PHY back to a known state. */ 2011 tg3_bmcr_reset(tp); 2012 2013 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 2014 2015 /* Attach the MAC to the PHY. */ 2016 phydev = phy_connect(tp->dev, dev_name(&phydev->dev), tg3_adjust_link, 2017 phydev->dev_flags, phydev->interface); 2018 if (IS_ERR(phydev)) { 2019 dev_err(&tp->pdev->dev, "Could not attach to PHY\n"); 2020 return PTR_ERR(phydev); 2021 } 2022 2023 /* Mask with MAC supported features. */ 2024 switch (phydev->interface) { 2025 case PHY_INTERFACE_MODE_GMII: 2026 case PHY_INTERFACE_MODE_RGMII: 2027 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 2028 phydev->supported &= (PHY_GBIT_FEATURES | 2029 SUPPORTED_Pause | 2030 SUPPORTED_Asym_Pause); 2031 break; 2032 } 2033 /* fallthru */ 2034 case PHY_INTERFACE_MODE_MII: 2035 phydev->supported &= (PHY_BASIC_FEATURES | 2036 SUPPORTED_Pause | 2037 SUPPORTED_Asym_Pause); 2038 break; 2039 default: 2040 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 2041 return -EINVAL; 2042 } 2043 2044 tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; 2045 2046 phydev->advertising = phydev->supported; 2047 2048 return 0; 2049 } 2050 2051 static void tg3_phy_start(struct tg3 *tp) 2052 { 2053 struct phy_device *phydev; 2054 2055 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2056 return; 2057 2058 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 2059 2060 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 2061 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 2062 phydev->speed = tp->link_config.speed; 2063 phydev->duplex = tp->link_config.duplex; 2064 phydev->autoneg = tp->link_config.autoneg; 2065 phydev->advertising = tp->link_config.advertising; 2066 } 2067 2068 phy_start(phydev); 2069 2070 phy_start_aneg(phydev); 2071 } 2072 2073 static void tg3_phy_stop(struct tg3 *tp) 2074 { 2075 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 2076 return; 2077 2078 phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 2079 } 2080 2081 static void tg3_phy_fini(struct tg3 *tp) 2082 { 2083 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 2084 phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 2085 tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED; 2086 } 2087 } 2088 2089 static int tg3_phy_set_extloopbk(struct tg3 *tp) 2090 { 2091 int err; 2092 u32 val; 2093 2094 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 2095 return 0; 2096 2097 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2098 /* Cannot do read-modify-write on 5401 */ 2099 err = tg3_phy_auxctl_write(tp, 2100 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2101 MII_TG3_AUXCTL_ACTL_EXTLOOPBK | 2102 0x4c20); 2103 goto done; 2104 } 2105 2106 err = tg3_phy_auxctl_read(tp, 2107 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2108 if (err) 2109 return err; 2110 2111 val |= MII_TG3_AUXCTL_ACTL_EXTLOOPBK; 2112 err = tg3_phy_auxctl_write(tp, 2113 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, val); 2114 2115 done: 2116 return err; 2117 } 2118 2119 static void tg3_phy_fet_toggle_apd(struct tg3 *tp, bool enable) 2120 { 2121 u32 phytest; 2122 2123 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2124 u32 phy; 2125 2126 tg3_writephy(tp, MII_TG3_FET_TEST, 2127 phytest | MII_TG3_FET_SHADOW_EN); 2128 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXSTAT2, &phy)) { 2129 if (enable) 2130 phy |= MII_TG3_FET_SHDW_AUXSTAT2_APD; 2131 else 2132 phy &= ~MII_TG3_FET_SHDW_AUXSTAT2_APD; 2133 tg3_writephy(tp, MII_TG3_FET_SHDW_AUXSTAT2, phy); 2134 } 2135 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2136 } 2137 } 2138 2139 static void tg3_phy_toggle_apd(struct tg3 *tp, bool enable) 2140 { 2141 u32 reg; 2142 2143 if (!tg3_flag(tp, 5705_PLUS) || 2144 (tg3_flag(tp, 5717_PLUS) && 2145 (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) 2146 return; 2147 2148 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2149 tg3_phy_fet_toggle_apd(tp, enable); 2150 return; 2151 } 2152 2153 reg = MII_TG3_MISC_SHDW_WREN | 2154 MII_TG3_MISC_SHDW_SCR5_SEL | 2155 MII_TG3_MISC_SHDW_SCR5_LPED | 2156 MII_TG3_MISC_SHDW_SCR5_DLPTLM | 2157 MII_TG3_MISC_SHDW_SCR5_SDTL | 2158 MII_TG3_MISC_SHDW_SCR5_C125OE; 2159 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 || !enable) 2160 reg |= MII_TG3_MISC_SHDW_SCR5_DLLAPD; 2161 2162 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg); 2163 2164 2165 reg = MII_TG3_MISC_SHDW_WREN | 2166 MII_TG3_MISC_SHDW_APD_SEL | 2167 MII_TG3_MISC_SHDW_APD_WKTM_84MS; 2168 if (enable) 2169 reg |= MII_TG3_MISC_SHDW_APD_ENABLE; 2170 2171 tg3_writephy(tp, MII_TG3_MISC_SHDW, reg); 2172 } 2173 2174 static void tg3_phy_toggle_automdix(struct tg3 *tp, int enable) 2175 { 2176 u32 phy; 2177 2178 if (!tg3_flag(tp, 5705_PLUS) || 2179 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 2180 return; 2181 2182 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2183 u32 ephy; 2184 2185 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &ephy)) { 2186 u32 reg = MII_TG3_FET_SHDW_MISCCTRL; 2187 2188 tg3_writephy(tp, MII_TG3_FET_TEST, 2189 ephy | MII_TG3_FET_SHADOW_EN); 2190 if (!tg3_readphy(tp, reg, &phy)) { 2191 if (enable) 2192 phy |= MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2193 else 2194 phy &= ~MII_TG3_FET_SHDW_MISCCTRL_MDIX; 2195 tg3_writephy(tp, reg, phy); 2196 } 2197 tg3_writephy(tp, MII_TG3_FET_TEST, ephy); 2198 } 2199 } else { 2200 int ret; 2201 2202 ret = tg3_phy_auxctl_read(tp, 2203 MII_TG3_AUXCTL_SHDWSEL_MISC, &phy); 2204 if (!ret) { 2205 if (enable) 2206 phy |= MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2207 else 2208 phy &= ~MII_TG3_AUXCTL_MISC_FORCE_AMDIX; 2209 tg3_phy_auxctl_write(tp, 2210 MII_TG3_AUXCTL_SHDWSEL_MISC, phy); 2211 } 2212 } 2213 } 2214 2215 static void tg3_phy_set_wirespeed(struct tg3 *tp) 2216 { 2217 int ret; 2218 u32 val; 2219 2220 if (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) 2221 return; 2222 2223 ret = tg3_phy_auxctl_read(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, &val); 2224 if (!ret) 2225 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_MISC, 2226 val | MII_TG3_AUXCTL_MISC_WIRESPD_EN); 2227 } 2228 2229 static void tg3_phy_apply_otp(struct tg3 *tp) 2230 { 2231 u32 otp, phy; 2232 2233 if (!tp->phy_otp) 2234 return; 2235 2236 otp = tp->phy_otp; 2237 2238 if (tg3_phy_toggle_auxctl_smdsp(tp, true)) 2239 return; 2240 2241 phy = ((otp & TG3_OTP_AGCTGT_MASK) >> TG3_OTP_AGCTGT_SHIFT); 2242 phy |= MII_TG3_DSP_TAP1_AGCTGT_DFLT; 2243 tg3_phydsp_write(tp, MII_TG3_DSP_TAP1, phy); 2244 2245 phy = ((otp & TG3_OTP_HPFFLTR_MASK) >> TG3_OTP_HPFFLTR_SHIFT) | 2246 ((otp & TG3_OTP_HPFOVER_MASK) >> TG3_OTP_HPFOVER_SHIFT); 2247 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH0, phy); 2248 2249 phy = ((otp & TG3_OTP_LPFDIS_MASK) >> TG3_OTP_LPFDIS_SHIFT); 2250 phy |= MII_TG3_DSP_AADJ1CH3_ADCCKADJ; 2251 tg3_phydsp_write(tp, MII_TG3_DSP_AADJ1CH3, phy); 2252 2253 phy = ((otp & TG3_OTP_VDAC_MASK) >> TG3_OTP_VDAC_SHIFT); 2254 tg3_phydsp_write(tp, MII_TG3_DSP_EXP75, phy); 2255 2256 phy = ((otp & TG3_OTP_10BTAMP_MASK) >> TG3_OTP_10BTAMP_SHIFT); 2257 tg3_phydsp_write(tp, MII_TG3_DSP_EXP96, phy); 2258 2259 phy = ((otp & TG3_OTP_ROFF_MASK) >> TG3_OTP_ROFF_SHIFT) | 2260 ((otp & TG3_OTP_RCOFF_MASK) >> TG3_OTP_RCOFF_SHIFT); 2261 tg3_phydsp_write(tp, MII_TG3_DSP_EXP97, phy); 2262 2263 tg3_phy_toggle_auxctl_smdsp(tp, false); 2264 } 2265 2266 static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up) 2267 { 2268 u32 val; 2269 2270 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 2271 return; 2272 2273 tp->setlpicnt = 0; 2274 2275 if (tp->link_config.autoneg == AUTONEG_ENABLE && 2276 current_link_up == 1 && 2277 tp->link_config.active_duplex == DUPLEX_FULL && 2278 (tp->link_config.active_speed == SPEED_100 || 2279 tp->link_config.active_speed == SPEED_1000)) { 2280 u32 eeectl; 2281 2282 if (tp->link_config.active_speed == SPEED_1000) 2283 eeectl = TG3_CPMU_EEE_CTRL_EXIT_16_5_US; 2284 else 2285 eeectl = TG3_CPMU_EEE_CTRL_EXIT_36_US; 2286 2287 tw32(TG3_CPMU_EEE_CTRL, eeectl); 2288 2289 tg3_phy_cl45_read(tp, MDIO_MMD_AN, 2290 TG3_CL45_D7_EEERES_STAT, &val); 2291 2292 if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || 2293 val == TG3_CL45_D7_EEERES_STAT_LP_100TX) 2294 tp->setlpicnt = 2; 2295 } 2296 2297 if (!tp->setlpicnt) { 2298 if (current_link_up == 1 && 2299 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2300 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000); 2301 tg3_phy_toggle_auxctl_smdsp(tp, false); 2302 } 2303 2304 val = tr32(TG3_CPMU_EEE_MODE); 2305 tw32(TG3_CPMU_EEE_MODE, val & ~TG3_CPMU_EEEMD_LPI_ENABLE); 2306 } 2307 } 2308 2309 static void tg3_phy_eee_enable(struct tg3 *tp) 2310 { 2311 u32 val; 2312 2313 if (tp->link_config.active_speed == SPEED_1000 && 2314 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2315 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2316 tg3_flag(tp, 57765_CLASS)) && 2317 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2318 val = MII_TG3_DSP_TAP26_ALNOKO | 2319 MII_TG3_DSP_TAP26_RMRXSTO; 2320 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 2321 tg3_phy_toggle_auxctl_smdsp(tp, false); 2322 } 2323 2324 val = tr32(TG3_CPMU_EEE_MODE); 2325 tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE); 2326 } 2327 2328 static int tg3_wait_macro_done(struct tg3 *tp) 2329 { 2330 int limit = 100; 2331 2332 while (limit--) { 2333 u32 tmp32; 2334 2335 if (!tg3_readphy(tp, MII_TG3_DSP_CONTROL, &tmp32)) { 2336 if ((tmp32 & 0x1000) == 0) 2337 break; 2338 } 2339 } 2340 if (limit < 0) 2341 return -EBUSY; 2342 2343 return 0; 2344 } 2345 2346 static int tg3_phy_write_and_check_testpat(struct tg3 *tp, int *resetp) 2347 { 2348 static const u32 test_pat[4][6] = { 2349 { 0x00005555, 0x00000005, 0x00002aaa, 0x0000000a, 0x00003456, 0x00000003 }, 2350 { 0x00002aaa, 0x0000000a, 0x00003333, 0x00000003, 0x0000789a, 0x00000005 }, 2351 { 0x00005a5a, 0x00000005, 0x00002a6a, 0x0000000a, 0x00001bcd, 0x00000003 }, 2352 { 0x00002a5a, 0x0000000a, 0x000033c3, 0x00000003, 0x00002ef1, 0x00000005 } 2353 }; 2354 int chan; 2355 2356 for (chan = 0; chan < 4; chan++) { 2357 int i; 2358 2359 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2360 (chan * 0x2000) | 0x0200); 2361 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2362 2363 for (i = 0; i < 6; i++) 2364 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 2365 test_pat[chan][i]); 2366 2367 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2368 if (tg3_wait_macro_done(tp)) { 2369 *resetp = 1; 2370 return -EBUSY; 2371 } 2372 2373 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2374 (chan * 0x2000) | 0x0200); 2375 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0082); 2376 if (tg3_wait_macro_done(tp)) { 2377 *resetp = 1; 2378 return -EBUSY; 2379 } 2380 2381 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0802); 2382 if (tg3_wait_macro_done(tp)) { 2383 *resetp = 1; 2384 return -EBUSY; 2385 } 2386 2387 for (i = 0; i < 6; i += 2) { 2388 u32 low, high; 2389 2390 if (tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &low) || 2391 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &high) || 2392 tg3_wait_macro_done(tp)) { 2393 *resetp = 1; 2394 return -EBUSY; 2395 } 2396 low &= 0x7fff; 2397 high &= 0x000f; 2398 if (low != test_pat[chan][i] || 2399 high != test_pat[chan][i+1]) { 2400 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000b); 2401 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4001); 2402 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x4005); 2403 2404 return -EBUSY; 2405 } 2406 } 2407 } 2408 2409 return 0; 2410 } 2411 2412 static int tg3_phy_reset_chanpat(struct tg3 *tp) 2413 { 2414 int chan; 2415 2416 for (chan = 0; chan < 4; chan++) { 2417 int i; 2418 2419 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 2420 (chan * 0x2000) | 0x0200); 2421 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0002); 2422 for (i = 0; i < 6; i++) 2423 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x000); 2424 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0202); 2425 if (tg3_wait_macro_done(tp)) 2426 return -EBUSY; 2427 } 2428 2429 return 0; 2430 } 2431 2432 static int tg3_phy_reset_5703_4_5(struct tg3 *tp) 2433 { 2434 u32 reg32, phy9_orig; 2435 int retries, do_phy_reset, err; 2436 2437 retries = 10; 2438 do_phy_reset = 1; 2439 do { 2440 if (do_phy_reset) { 2441 err = tg3_bmcr_reset(tp); 2442 if (err) 2443 return err; 2444 do_phy_reset = 0; 2445 } 2446 2447 /* Disable transmitter and interrupt. */ 2448 if (tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) 2449 continue; 2450 2451 reg32 |= 0x3000; 2452 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2453 2454 /* Set full-duplex, 1000 mbps. */ 2455 tg3_writephy(tp, MII_BMCR, 2456 BMCR_FULLDPLX | BMCR_SPEED1000); 2457 2458 /* Set to master mode. */ 2459 if (tg3_readphy(tp, MII_CTRL1000, &phy9_orig)) 2460 continue; 2461 2462 tg3_writephy(tp, MII_CTRL1000, 2463 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 2464 2465 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 2466 if (err) 2467 return err; 2468 2469 /* Block the PHY control access. */ 2470 tg3_phydsp_write(tp, 0x8005, 0x0800); 2471 2472 err = tg3_phy_write_and_check_testpat(tp, &do_phy_reset); 2473 if (!err) 2474 break; 2475 } while (--retries); 2476 2477 err = tg3_phy_reset_chanpat(tp); 2478 if (err) 2479 return err; 2480 2481 tg3_phydsp_write(tp, 0x8005, 0x0000); 2482 2483 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x8200); 2484 tg3_writephy(tp, MII_TG3_DSP_CONTROL, 0x0000); 2485 2486 tg3_phy_toggle_auxctl_smdsp(tp, false); 2487 2488 tg3_writephy(tp, MII_CTRL1000, phy9_orig); 2489 2490 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, ®32)) { 2491 reg32 &= ~0x3000; 2492 tg3_writephy(tp, MII_TG3_EXT_CTRL, reg32); 2493 } else if (!err) 2494 err = -EBUSY; 2495 2496 return err; 2497 } 2498 2499 static void tg3_carrier_on(struct tg3 *tp) 2500 { 2501 netif_carrier_on(tp->dev); 2502 tp->link_up = true; 2503 } 2504 2505 static void tg3_carrier_off(struct tg3 *tp) 2506 { 2507 netif_carrier_off(tp->dev); 2508 tp->link_up = false; 2509 } 2510 2511 /* This will reset the tigon3 PHY if there is no valid 2512 * link unless the FORCE argument is non-zero. 2513 */ 2514 static int tg3_phy_reset(struct tg3 *tp) 2515 { 2516 u32 val, cpmuctrl; 2517 int err; 2518 2519 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2520 val = tr32(GRC_MISC_CFG); 2521 tw32_f(GRC_MISC_CFG, val & ~GRC_MISC_CFG_EPHY_IDDQ); 2522 udelay(40); 2523 } 2524 err = tg3_readphy(tp, MII_BMSR, &val); 2525 err |= tg3_readphy(tp, MII_BMSR, &val); 2526 if (err != 0) 2527 return -EBUSY; 2528 2529 if (netif_running(tp->dev) && tp->link_up) { 2530 tg3_carrier_off(tp); 2531 tg3_link_report(tp); 2532 } 2533 2534 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 2535 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 2536 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 2537 err = tg3_phy_reset_5703_4_5(tp); 2538 if (err) 2539 return err; 2540 goto out; 2541 } 2542 2543 cpmuctrl = 0; 2544 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 2545 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) { 2546 cpmuctrl = tr32(TG3_CPMU_CTRL); 2547 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) 2548 tw32(TG3_CPMU_CTRL, 2549 cpmuctrl & ~CPMU_CTRL_GPHY_10MB_RXONLY); 2550 } 2551 2552 err = tg3_bmcr_reset(tp); 2553 if (err) 2554 return err; 2555 2556 if (cpmuctrl & CPMU_CTRL_GPHY_10MB_RXONLY) { 2557 val = MII_TG3_DSP_EXP8_AEDW | MII_TG3_DSP_EXP8_REJ2MHz; 2558 tg3_phydsp_write(tp, MII_TG3_DSP_EXP8, val); 2559 2560 tw32(TG3_CPMU_CTRL, cpmuctrl); 2561 } 2562 2563 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || 2564 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) { 2565 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2566 if ((val & CPMU_LSPD_1000MB_MACCLK_MASK) == 2567 CPMU_LSPD_1000MB_MACCLK_12_5) { 2568 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2569 udelay(40); 2570 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2571 } 2572 } 2573 2574 if (tg3_flag(tp, 5717_PLUS) && 2575 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) 2576 return 0; 2577 2578 tg3_phy_apply_otp(tp); 2579 2580 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 2581 tg3_phy_toggle_apd(tp, true); 2582 else 2583 tg3_phy_toggle_apd(tp, false); 2584 2585 out: 2586 if ((tp->phy_flags & TG3_PHYFLG_ADC_BUG) && 2587 !tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2588 tg3_phydsp_write(tp, 0x201f, 0x2aaa); 2589 tg3_phydsp_write(tp, 0x000a, 0x0323); 2590 tg3_phy_toggle_auxctl_smdsp(tp, false); 2591 } 2592 2593 if (tp->phy_flags & TG3_PHYFLG_5704_A0_BUG) { 2594 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2595 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 2596 } 2597 2598 if (tp->phy_flags & TG3_PHYFLG_BER_BUG) { 2599 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2600 tg3_phydsp_write(tp, 0x000a, 0x310b); 2601 tg3_phydsp_write(tp, 0x201f, 0x9506); 2602 tg3_phydsp_write(tp, 0x401f, 0x14e2); 2603 tg3_phy_toggle_auxctl_smdsp(tp, false); 2604 } 2605 } else if (tp->phy_flags & TG3_PHYFLG_JITTER_BUG) { 2606 if (!tg3_phy_toggle_auxctl_smdsp(tp, true)) { 2607 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 0x000a); 2608 if (tp->phy_flags & TG3_PHYFLG_ADJUST_TRIM) { 2609 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x110b); 2610 tg3_writephy(tp, MII_TG3_TEST1, 2611 MII_TG3_TEST1_TRIM_EN | 0x4); 2612 } else 2613 tg3_writephy(tp, MII_TG3_DSP_RW_PORT, 0x010b); 2614 2615 tg3_phy_toggle_auxctl_smdsp(tp, false); 2616 } 2617 } 2618 2619 /* Set Extended packet length bit (bit 14) on all chips that */ 2620 /* support jumbo frames */ 2621 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 2622 /* Cannot do read-modify-write on 5401 */ 2623 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 2624 } else if (tg3_flag(tp, JUMBO_CAPABLE)) { 2625 /* Set bit 14 with read-modify-write to preserve other bits */ 2626 err = tg3_phy_auxctl_read(tp, 2627 MII_TG3_AUXCTL_SHDWSEL_AUXCTL, &val); 2628 if (!err) 2629 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 2630 val | MII_TG3_AUXCTL_ACTL_EXTPKTLEN); 2631 } 2632 2633 /* Set phy register 0x10 bit 0 to high fifo elasticity to support 2634 * jumbo frames transmission. 2635 */ 2636 if (tg3_flag(tp, JUMBO_CAPABLE)) { 2637 if (!tg3_readphy(tp, MII_TG3_EXT_CTRL, &val)) 2638 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2639 val | MII_TG3_EXT_CTRL_FIFO_ELASTIC); 2640 } 2641 2642 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2643 /* adjust output voltage */ 2644 tg3_writephy(tp, MII_TG3_FET_PTEST, 0x12); 2645 } 2646 2647 tg3_phy_toggle_automdix(tp, 1); 2648 tg3_phy_set_wirespeed(tp); 2649 return 0; 2650 } 2651 2652 #define TG3_GPIO_MSG_DRVR_PRES 0x00000001 2653 #define TG3_GPIO_MSG_NEED_VAUX 0x00000002 2654 #define TG3_GPIO_MSG_MASK (TG3_GPIO_MSG_DRVR_PRES | \ 2655 TG3_GPIO_MSG_NEED_VAUX) 2656 #define TG3_GPIO_MSG_ALL_DRVR_PRES_MASK \ 2657 ((TG3_GPIO_MSG_DRVR_PRES << 0) | \ 2658 (TG3_GPIO_MSG_DRVR_PRES << 4) | \ 2659 (TG3_GPIO_MSG_DRVR_PRES << 8) | \ 2660 (TG3_GPIO_MSG_DRVR_PRES << 12)) 2661 2662 #define TG3_GPIO_MSG_ALL_NEED_VAUX_MASK \ 2663 ((TG3_GPIO_MSG_NEED_VAUX << 0) | \ 2664 (TG3_GPIO_MSG_NEED_VAUX << 4) | \ 2665 (TG3_GPIO_MSG_NEED_VAUX << 8) | \ 2666 (TG3_GPIO_MSG_NEED_VAUX << 12)) 2667 2668 static inline u32 tg3_set_function_status(struct tg3 *tp, u32 newstat) 2669 { 2670 u32 status, shift; 2671 2672 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2673 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 2674 status = tg3_ape_read32(tp, TG3_APE_GPIO_MSG); 2675 else 2676 status = tr32(TG3_CPMU_DRV_STATUS); 2677 2678 shift = TG3_APE_GPIO_MSG_SHIFT + 4 * tp->pci_fn; 2679 status &= ~(TG3_GPIO_MSG_MASK << shift); 2680 status |= (newstat << shift); 2681 2682 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2683 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 2684 tg3_ape_write32(tp, TG3_APE_GPIO_MSG, status); 2685 else 2686 tw32(TG3_CPMU_DRV_STATUS, status); 2687 2688 return status >> TG3_APE_GPIO_MSG_SHIFT; 2689 } 2690 2691 static inline int tg3_pwrsrc_switch_to_vmain(struct tg3 *tp) 2692 { 2693 if (!tg3_flag(tp, IS_NIC)) 2694 return 0; 2695 2696 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2697 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2698 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 2699 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2700 return -EIO; 2701 2702 tg3_set_function_status(tp, TG3_GPIO_MSG_DRVR_PRES); 2703 2704 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2705 TG3_GRC_LCLCTL_PWRSW_DELAY); 2706 2707 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2708 } else { 2709 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl, 2710 TG3_GRC_LCLCTL_PWRSW_DELAY); 2711 } 2712 2713 return 0; 2714 } 2715 2716 static void tg3_pwrsrc_die_with_vmain(struct tg3 *tp) 2717 { 2718 u32 grc_local_ctrl; 2719 2720 if (!tg3_flag(tp, IS_NIC) || 2721 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2722 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) 2723 return; 2724 2725 grc_local_ctrl = tp->grc_local_ctrl | GRC_LCLCTRL_GPIO_OE1; 2726 2727 tw32_wait_f(GRC_LOCAL_CTRL, 2728 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2729 TG3_GRC_LCLCTL_PWRSW_DELAY); 2730 2731 tw32_wait_f(GRC_LOCAL_CTRL, 2732 grc_local_ctrl, 2733 TG3_GRC_LCLCTL_PWRSW_DELAY); 2734 2735 tw32_wait_f(GRC_LOCAL_CTRL, 2736 grc_local_ctrl | GRC_LCLCTRL_GPIO_OUTPUT1, 2737 TG3_GRC_LCLCTL_PWRSW_DELAY); 2738 } 2739 2740 static void tg3_pwrsrc_switch_to_vaux(struct tg3 *tp) 2741 { 2742 if (!tg3_flag(tp, IS_NIC)) 2743 return; 2744 2745 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2746 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 2747 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2748 (GRC_LCLCTRL_GPIO_OE0 | 2749 GRC_LCLCTRL_GPIO_OE1 | 2750 GRC_LCLCTRL_GPIO_OE2 | 2751 GRC_LCLCTRL_GPIO_OUTPUT0 | 2752 GRC_LCLCTRL_GPIO_OUTPUT1), 2753 TG3_GRC_LCLCTL_PWRSW_DELAY); 2754 } else if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 2755 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 2756 /* The 5761 non-e device swaps GPIO 0 and GPIO 2. */ 2757 u32 grc_local_ctrl = GRC_LCLCTRL_GPIO_OE0 | 2758 GRC_LCLCTRL_GPIO_OE1 | 2759 GRC_LCLCTRL_GPIO_OE2 | 2760 GRC_LCLCTRL_GPIO_OUTPUT0 | 2761 GRC_LCLCTRL_GPIO_OUTPUT1 | 2762 tp->grc_local_ctrl; 2763 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2764 TG3_GRC_LCLCTL_PWRSW_DELAY); 2765 2766 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT2; 2767 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2768 TG3_GRC_LCLCTL_PWRSW_DELAY); 2769 2770 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT0; 2771 tw32_wait_f(GRC_LOCAL_CTRL, grc_local_ctrl, 2772 TG3_GRC_LCLCTL_PWRSW_DELAY); 2773 } else { 2774 u32 no_gpio2; 2775 u32 grc_local_ctrl = 0; 2776 2777 /* Workaround to prevent overdrawing Amps. */ 2778 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 2779 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 2780 tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | 2781 grc_local_ctrl, 2782 TG3_GRC_LCLCTL_PWRSW_DELAY); 2783 } 2784 2785 /* On 5753 and variants, GPIO2 cannot be used. */ 2786 no_gpio2 = tp->nic_sram_data_cfg & 2787 NIC_SRAM_DATA_CFG_NO_GPIO2; 2788 2789 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 2790 GRC_LCLCTRL_GPIO_OE1 | 2791 GRC_LCLCTRL_GPIO_OE2 | 2792 GRC_LCLCTRL_GPIO_OUTPUT1 | 2793 GRC_LCLCTRL_GPIO_OUTPUT2; 2794 if (no_gpio2) { 2795 grc_local_ctrl &= ~(GRC_LCLCTRL_GPIO_OE2 | 2796 GRC_LCLCTRL_GPIO_OUTPUT2); 2797 } 2798 tw32_wait_f(GRC_LOCAL_CTRL, 2799 tp->grc_local_ctrl | grc_local_ctrl, 2800 TG3_GRC_LCLCTL_PWRSW_DELAY); 2801 2802 grc_local_ctrl |= GRC_LCLCTRL_GPIO_OUTPUT0; 2803 2804 tw32_wait_f(GRC_LOCAL_CTRL, 2805 tp->grc_local_ctrl | grc_local_ctrl, 2806 TG3_GRC_LCLCTL_PWRSW_DELAY); 2807 2808 if (!no_gpio2) { 2809 grc_local_ctrl &= ~GRC_LCLCTRL_GPIO_OUTPUT2; 2810 tw32_wait_f(GRC_LOCAL_CTRL, 2811 tp->grc_local_ctrl | grc_local_ctrl, 2812 TG3_GRC_LCLCTL_PWRSW_DELAY); 2813 } 2814 } 2815 } 2816 2817 static void tg3_frob_aux_power_5717(struct tg3 *tp, bool wol_enable) 2818 { 2819 u32 msg = 0; 2820 2821 /* Serialize power state transitions */ 2822 if (tg3_ape_lock(tp, TG3_APE_LOCK_GPIO)) 2823 return; 2824 2825 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE) || wol_enable) 2826 msg = TG3_GPIO_MSG_NEED_VAUX; 2827 2828 msg = tg3_set_function_status(tp, msg); 2829 2830 if (msg & TG3_GPIO_MSG_ALL_DRVR_PRES_MASK) 2831 goto done; 2832 2833 if (msg & TG3_GPIO_MSG_ALL_NEED_VAUX_MASK) 2834 tg3_pwrsrc_switch_to_vaux(tp); 2835 else 2836 tg3_pwrsrc_die_with_vmain(tp); 2837 2838 done: 2839 tg3_ape_unlock(tp, TG3_APE_LOCK_GPIO); 2840 } 2841 2842 static void tg3_frob_aux_power(struct tg3 *tp, bool include_wol) 2843 { 2844 bool need_vaux = false; 2845 2846 /* The GPIOs do something completely different on 57765. */ 2847 if (!tg3_flag(tp, IS_NIC) || tg3_flag(tp, 57765_CLASS)) 2848 return; 2849 2850 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 2851 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 2852 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 2853 tg3_frob_aux_power_5717(tp, include_wol ? 2854 tg3_flag(tp, WOL_ENABLE) != 0 : 0); 2855 return; 2856 } 2857 2858 if (tp->pdev_peer && tp->pdev_peer != tp->pdev) { 2859 struct net_device *dev_peer; 2860 2861 dev_peer = pci_get_drvdata(tp->pdev_peer); 2862 2863 /* remove_one() may have been run on the peer. */ 2864 if (dev_peer) { 2865 struct tg3 *tp_peer = netdev_priv(dev_peer); 2866 2867 if (tg3_flag(tp_peer, INIT_COMPLETE)) 2868 return; 2869 2870 if ((include_wol && tg3_flag(tp_peer, WOL_ENABLE)) || 2871 tg3_flag(tp_peer, ENABLE_ASF)) 2872 need_vaux = true; 2873 } 2874 } 2875 2876 if ((include_wol && tg3_flag(tp, WOL_ENABLE)) || 2877 tg3_flag(tp, ENABLE_ASF)) 2878 need_vaux = true; 2879 2880 if (need_vaux) 2881 tg3_pwrsrc_switch_to_vaux(tp); 2882 else 2883 tg3_pwrsrc_die_with_vmain(tp); 2884 } 2885 2886 static int tg3_5700_link_polarity(struct tg3 *tp, u32 speed) 2887 { 2888 if (tp->led_ctrl == LED_CTRL_MODE_PHY_2) 2889 return 1; 2890 else if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411) { 2891 if (speed != SPEED_10) 2892 return 1; 2893 } else if (speed == SPEED_10) 2894 return 1; 2895 2896 return 0; 2897 } 2898 2899 static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) 2900 { 2901 u32 val; 2902 2903 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 2904 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 2905 u32 sg_dig_ctrl = tr32(SG_DIG_CTRL); 2906 u32 serdes_cfg = tr32(MAC_SERDES_CFG); 2907 2908 sg_dig_ctrl |= 2909 SG_DIG_USING_HW_AUTONEG | SG_DIG_SOFT_RESET; 2910 tw32(SG_DIG_CTRL, sg_dig_ctrl); 2911 tw32(MAC_SERDES_CFG, serdes_cfg | (1 << 15)); 2912 } 2913 return; 2914 } 2915 2916 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 2917 tg3_bmcr_reset(tp); 2918 val = tr32(GRC_MISC_CFG); 2919 tw32_f(GRC_MISC_CFG, val | GRC_MISC_CFG_EPHY_IDDQ); 2920 udelay(40); 2921 return; 2922 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 2923 u32 phytest; 2924 if (!tg3_readphy(tp, MII_TG3_FET_TEST, &phytest)) { 2925 u32 phy; 2926 2927 tg3_writephy(tp, MII_ADVERTISE, 0); 2928 tg3_writephy(tp, MII_BMCR, 2929 BMCR_ANENABLE | BMCR_ANRESTART); 2930 2931 tg3_writephy(tp, MII_TG3_FET_TEST, 2932 phytest | MII_TG3_FET_SHADOW_EN); 2933 if (!tg3_readphy(tp, MII_TG3_FET_SHDW_AUXMODE4, &phy)) { 2934 phy |= MII_TG3_FET_SHDW_AUXMODE4_SBPD; 2935 tg3_writephy(tp, 2936 MII_TG3_FET_SHDW_AUXMODE4, 2937 phy); 2938 } 2939 tg3_writephy(tp, MII_TG3_FET_TEST, phytest); 2940 } 2941 return; 2942 } else if (do_low_power) { 2943 tg3_writephy(tp, MII_TG3_EXT_CTRL, 2944 MII_TG3_EXT_CTRL_FORCE_LED_OFF); 2945 2946 val = MII_TG3_AUXCTL_PCTL_100TX_LPWR | 2947 MII_TG3_AUXCTL_PCTL_SPR_ISOLATE | 2948 MII_TG3_AUXCTL_PCTL_VREG_11V; 2949 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, val); 2950 } 2951 2952 /* The PHY should not be powered down on some chips because 2953 * of bugs. 2954 */ 2955 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 2956 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 2957 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 && 2958 (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) || 2959 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 && 2960 !tp->pci_fn)) 2961 return; 2962 2963 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || 2964 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5761_AX) { 2965 val = tr32(TG3_CPMU_LSPD_1000MB_CLK); 2966 val &= ~CPMU_LSPD_1000MB_MACCLK_MASK; 2967 val |= CPMU_LSPD_1000MB_MACCLK_12_5; 2968 tw32_f(TG3_CPMU_LSPD_1000MB_CLK, val); 2969 } 2970 2971 tg3_writephy(tp, MII_BMCR, BMCR_PDOWN); 2972 } 2973 2974 /* tp->lock is held. */ 2975 static int tg3_nvram_lock(struct tg3 *tp) 2976 { 2977 if (tg3_flag(tp, NVRAM)) { 2978 int i; 2979 2980 if (tp->nvram_lock_cnt == 0) { 2981 tw32(NVRAM_SWARB, SWARB_REQ_SET1); 2982 for (i = 0; i < 8000; i++) { 2983 if (tr32(NVRAM_SWARB) & SWARB_GNT1) 2984 break; 2985 udelay(20); 2986 } 2987 if (i == 8000) { 2988 tw32(NVRAM_SWARB, SWARB_REQ_CLR1); 2989 return -ENODEV; 2990 } 2991 } 2992 tp->nvram_lock_cnt++; 2993 } 2994 return 0; 2995 } 2996 2997 /* tp->lock is held. */ 2998 static void tg3_nvram_unlock(struct tg3 *tp) 2999 { 3000 if (tg3_flag(tp, NVRAM)) { 3001 if (tp->nvram_lock_cnt > 0) 3002 tp->nvram_lock_cnt--; 3003 if (tp->nvram_lock_cnt == 0) 3004 tw32_f(NVRAM_SWARB, SWARB_REQ_CLR1); 3005 } 3006 } 3007 3008 /* tp->lock is held. */ 3009 static void tg3_enable_nvram_access(struct tg3 *tp) 3010 { 3011 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3012 u32 nvaccess = tr32(NVRAM_ACCESS); 3013 3014 tw32(NVRAM_ACCESS, nvaccess | ACCESS_ENABLE); 3015 } 3016 } 3017 3018 /* tp->lock is held. */ 3019 static void tg3_disable_nvram_access(struct tg3 *tp) 3020 { 3021 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) { 3022 u32 nvaccess = tr32(NVRAM_ACCESS); 3023 3024 tw32(NVRAM_ACCESS, nvaccess & ~ACCESS_ENABLE); 3025 } 3026 } 3027 3028 static int tg3_nvram_read_using_eeprom(struct tg3 *tp, 3029 u32 offset, u32 *val) 3030 { 3031 u32 tmp; 3032 int i; 3033 3034 if (offset > EEPROM_ADDR_ADDR_MASK || (offset % 4) != 0) 3035 return -EINVAL; 3036 3037 tmp = tr32(GRC_EEPROM_ADDR) & ~(EEPROM_ADDR_ADDR_MASK | 3038 EEPROM_ADDR_DEVID_MASK | 3039 EEPROM_ADDR_READ); 3040 tw32(GRC_EEPROM_ADDR, 3041 tmp | 3042 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3043 ((offset << EEPROM_ADDR_ADDR_SHIFT) & 3044 EEPROM_ADDR_ADDR_MASK) | 3045 EEPROM_ADDR_READ | EEPROM_ADDR_START); 3046 3047 for (i = 0; i < 1000; i++) { 3048 tmp = tr32(GRC_EEPROM_ADDR); 3049 3050 if (tmp & EEPROM_ADDR_COMPLETE) 3051 break; 3052 msleep(1); 3053 } 3054 if (!(tmp & EEPROM_ADDR_COMPLETE)) 3055 return -EBUSY; 3056 3057 tmp = tr32(GRC_EEPROM_DATA); 3058 3059 /* 3060 * The data will always be opposite the native endian 3061 * format. Perform a blind byteswap to compensate. 3062 */ 3063 *val = swab32(tmp); 3064 3065 return 0; 3066 } 3067 3068 #define NVRAM_CMD_TIMEOUT 10000 3069 3070 static int tg3_nvram_exec_cmd(struct tg3 *tp, u32 nvram_cmd) 3071 { 3072 int i; 3073 3074 tw32(NVRAM_CMD, nvram_cmd); 3075 for (i = 0; i < NVRAM_CMD_TIMEOUT; i++) { 3076 udelay(10); 3077 if (tr32(NVRAM_CMD) & NVRAM_CMD_DONE) { 3078 udelay(10); 3079 break; 3080 } 3081 } 3082 3083 if (i == NVRAM_CMD_TIMEOUT) 3084 return -EBUSY; 3085 3086 return 0; 3087 } 3088 3089 static u32 tg3_nvram_phys_addr(struct tg3 *tp, u32 addr) 3090 { 3091 if (tg3_flag(tp, NVRAM) && 3092 tg3_flag(tp, NVRAM_BUFFERED) && 3093 tg3_flag(tp, FLASH) && 3094 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3095 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3096 3097 addr = ((addr / tp->nvram_pagesize) << 3098 ATMEL_AT45DB0X1B_PAGE_POS) + 3099 (addr % tp->nvram_pagesize); 3100 3101 return addr; 3102 } 3103 3104 static u32 tg3_nvram_logical_addr(struct tg3 *tp, u32 addr) 3105 { 3106 if (tg3_flag(tp, NVRAM) && 3107 tg3_flag(tp, NVRAM_BUFFERED) && 3108 tg3_flag(tp, FLASH) && 3109 !tg3_flag(tp, NO_NVRAM_ADDR_TRANS) && 3110 (tp->nvram_jedecnum == JEDEC_ATMEL)) 3111 3112 addr = ((addr >> ATMEL_AT45DB0X1B_PAGE_POS) * 3113 tp->nvram_pagesize) + 3114 (addr & ((1 << ATMEL_AT45DB0X1B_PAGE_POS) - 1)); 3115 3116 return addr; 3117 } 3118 3119 /* NOTE: Data read in from NVRAM is byteswapped according to 3120 * the byteswapping settings for all other register accesses. 3121 * tg3 devices are BE devices, so on a BE machine, the data 3122 * returned will be exactly as it is seen in NVRAM. On a LE 3123 * machine, the 32-bit value will be byteswapped. 3124 */ 3125 static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) 3126 { 3127 int ret; 3128 3129 if (!tg3_flag(tp, NVRAM)) 3130 return tg3_nvram_read_using_eeprom(tp, offset, val); 3131 3132 offset = tg3_nvram_phys_addr(tp, offset); 3133 3134 if (offset > NVRAM_ADDR_MSK) 3135 return -EINVAL; 3136 3137 ret = tg3_nvram_lock(tp); 3138 if (ret) 3139 return ret; 3140 3141 tg3_enable_nvram_access(tp); 3142 3143 tw32(NVRAM_ADDR, offset); 3144 ret = tg3_nvram_exec_cmd(tp, NVRAM_CMD_RD | NVRAM_CMD_GO | 3145 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_DONE); 3146 3147 if (ret == 0) 3148 *val = tr32(NVRAM_RDDATA); 3149 3150 tg3_disable_nvram_access(tp); 3151 3152 tg3_nvram_unlock(tp); 3153 3154 return ret; 3155 } 3156 3157 /* Ensures NVRAM data is in bytestream format. */ 3158 static int tg3_nvram_read_be32(struct tg3 *tp, u32 offset, __be32 *val) 3159 { 3160 u32 v; 3161 int res = tg3_nvram_read(tp, offset, &v); 3162 if (!res) 3163 *val = cpu_to_be32(v); 3164 return res; 3165 } 3166 3167 static int tg3_nvram_write_block_using_eeprom(struct tg3 *tp, 3168 u32 offset, u32 len, u8 *buf) 3169 { 3170 int i, j, rc = 0; 3171 u32 val; 3172 3173 for (i = 0; i < len; i += 4) { 3174 u32 addr; 3175 __be32 data; 3176 3177 addr = offset + i; 3178 3179 memcpy(&data, buf + i, 4); 3180 3181 /* 3182 * The SEEPROM interface expects the data to always be opposite 3183 * the native endian format. We accomplish this by reversing 3184 * all the operations that would have been performed on the 3185 * data from a call to tg3_nvram_read_be32(). 3186 */ 3187 tw32(GRC_EEPROM_DATA, swab32(be32_to_cpu(data))); 3188 3189 val = tr32(GRC_EEPROM_ADDR); 3190 tw32(GRC_EEPROM_ADDR, val | EEPROM_ADDR_COMPLETE); 3191 3192 val &= ~(EEPROM_ADDR_ADDR_MASK | EEPROM_ADDR_DEVID_MASK | 3193 EEPROM_ADDR_READ); 3194 tw32(GRC_EEPROM_ADDR, val | 3195 (0 << EEPROM_ADDR_DEVID_SHIFT) | 3196 (addr & EEPROM_ADDR_ADDR_MASK) | 3197 EEPROM_ADDR_START | 3198 EEPROM_ADDR_WRITE); 3199 3200 for (j = 0; j < 1000; j++) { 3201 val = tr32(GRC_EEPROM_ADDR); 3202 3203 if (val & EEPROM_ADDR_COMPLETE) 3204 break; 3205 msleep(1); 3206 } 3207 if (!(val & EEPROM_ADDR_COMPLETE)) { 3208 rc = -EBUSY; 3209 break; 3210 } 3211 } 3212 3213 return rc; 3214 } 3215 3216 /* offset and length are dword aligned */ 3217 static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len, 3218 u8 *buf) 3219 { 3220 int ret = 0; 3221 u32 pagesize = tp->nvram_pagesize; 3222 u32 pagemask = pagesize - 1; 3223 u32 nvram_cmd; 3224 u8 *tmp; 3225 3226 tmp = kmalloc(pagesize, GFP_KERNEL); 3227 if (tmp == NULL) 3228 return -ENOMEM; 3229 3230 while (len) { 3231 int j; 3232 u32 phy_addr, page_off, size; 3233 3234 phy_addr = offset & ~pagemask; 3235 3236 for (j = 0; j < pagesize; j += 4) { 3237 ret = tg3_nvram_read_be32(tp, phy_addr + j, 3238 (__be32 *) (tmp + j)); 3239 if (ret) 3240 break; 3241 } 3242 if (ret) 3243 break; 3244 3245 page_off = offset & pagemask; 3246 size = pagesize; 3247 if (len < size) 3248 size = len; 3249 3250 len -= size; 3251 3252 memcpy(tmp + page_off, buf, size); 3253 3254 offset = offset + (pagesize - page_off); 3255 3256 tg3_enable_nvram_access(tp); 3257 3258 /* 3259 * Before we can erase the flash page, we need 3260 * to issue a special "write enable" command. 3261 */ 3262 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3263 3264 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3265 break; 3266 3267 /* Erase the target page */ 3268 tw32(NVRAM_ADDR, phy_addr); 3269 3270 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR | 3271 NVRAM_CMD_FIRST | NVRAM_CMD_LAST | NVRAM_CMD_ERASE; 3272 3273 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3274 break; 3275 3276 /* Issue another write enable to start the write. */ 3277 nvram_cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3278 3279 if (tg3_nvram_exec_cmd(tp, nvram_cmd)) 3280 break; 3281 3282 for (j = 0; j < pagesize; j += 4) { 3283 __be32 data; 3284 3285 data = *((__be32 *) (tmp + j)); 3286 3287 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3288 3289 tw32(NVRAM_ADDR, phy_addr + j); 3290 3291 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | 3292 NVRAM_CMD_WR; 3293 3294 if (j == 0) 3295 nvram_cmd |= NVRAM_CMD_FIRST; 3296 else if (j == (pagesize - 4)) 3297 nvram_cmd |= NVRAM_CMD_LAST; 3298 3299 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3300 if (ret) 3301 break; 3302 } 3303 if (ret) 3304 break; 3305 } 3306 3307 nvram_cmd = NVRAM_CMD_WRDI | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3308 tg3_nvram_exec_cmd(tp, nvram_cmd); 3309 3310 kfree(tmp); 3311 3312 return ret; 3313 } 3314 3315 /* offset and length are dword aligned */ 3316 static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len, 3317 u8 *buf) 3318 { 3319 int i, ret = 0; 3320 3321 for (i = 0; i < len; i += 4, offset += 4) { 3322 u32 page_off, phy_addr, nvram_cmd; 3323 __be32 data; 3324 3325 memcpy(&data, buf + i, 4); 3326 tw32(NVRAM_WRDATA, be32_to_cpu(data)); 3327 3328 page_off = offset % tp->nvram_pagesize; 3329 3330 phy_addr = tg3_nvram_phys_addr(tp, offset); 3331 3332 nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR; 3333 3334 if (page_off == 0 || i == 0) 3335 nvram_cmd |= NVRAM_CMD_FIRST; 3336 if (page_off == (tp->nvram_pagesize - 4)) 3337 nvram_cmd |= NVRAM_CMD_LAST; 3338 3339 if (i == (len - 4)) 3340 nvram_cmd |= NVRAM_CMD_LAST; 3341 3342 if ((nvram_cmd & NVRAM_CMD_FIRST) || 3343 !tg3_flag(tp, FLASH) || 3344 !tg3_flag(tp, 57765_PLUS)) 3345 tw32(NVRAM_ADDR, phy_addr); 3346 3347 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 && 3348 !tg3_flag(tp, 5755_PLUS) && 3349 (tp->nvram_jedecnum == JEDEC_ST) && 3350 (nvram_cmd & NVRAM_CMD_FIRST)) { 3351 u32 cmd; 3352 3353 cmd = NVRAM_CMD_WREN | NVRAM_CMD_GO | NVRAM_CMD_DONE; 3354 ret = tg3_nvram_exec_cmd(tp, cmd); 3355 if (ret) 3356 break; 3357 } 3358 if (!tg3_flag(tp, FLASH)) { 3359 /* We always do complete word writes to eeprom. */ 3360 nvram_cmd |= (NVRAM_CMD_FIRST | NVRAM_CMD_LAST); 3361 } 3362 3363 ret = tg3_nvram_exec_cmd(tp, nvram_cmd); 3364 if (ret) 3365 break; 3366 } 3367 return ret; 3368 } 3369 3370 /* offset and length are dword aligned */ 3371 static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf) 3372 { 3373 int ret; 3374 3375 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3376 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & 3377 ~GRC_LCLCTRL_GPIO_OUTPUT1); 3378 udelay(40); 3379 } 3380 3381 if (!tg3_flag(tp, NVRAM)) { 3382 ret = tg3_nvram_write_block_using_eeprom(tp, offset, len, buf); 3383 } else { 3384 u32 grc_mode; 3385 3386 ret = tg3_nvram_lock(tp); 3387 if (ret) 3388 return ret; 3389 3390 tg3_enable_nvram_access(tp); 3391 if (tg3_flag(tp, 5750_PLUS) && !tg3_flag(tp, PROTECTED_NVRAM)) 3392 tw32(NVRAM_WRITE1, 0x406); 3393 3394 grc_mode = tr32(GRC_MODE); 3395 tw32(GRC_MODE, grc_mode | GRC_MODE_NVRAM_WR_ENABLE); 3396 3397 if (tg3_flag(tp, NVRAM_BUFFERED) || !tg3_flag(tp, FLASH)) { 3398 ret = tg3_nvram_write_block_buffered(tp, offset, len, 3399 buf); 3400 } else { 3401 ret = tg3_nvram_write_block_unbuffered(tp, offset, len, 3402 buf); 3403 } 3404 3405 grc_mode = tr32(GRC_MODE); 3406 tw32(GRC_MODE, grc_mode & ~GRC_MODE_NVRAM_WR_ENABLE); 3407 3408 tg3_disable_nvram_access(tp); 3409 tg3_nvram_unlock(tp); 3410 } 3411 3412 if (tg3_flag(tp, EEPROM_WRITE_PROT)) { 3413 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 3414 udelay(40); 3415 } 3416 3417 return ret; 3418 } 3419 3420 #define RX_CPU_SCRATCH_BASE 0x30000 3421 #define RX_CPU_SCRATCH_SIZE 0x04000 3422 #define TX_CPU_SCRATCH_BASE 0x34000 3423 #define TX_CPU_SCRATCH_SIZE 0x04000 3424 3425 /* tp->lock is held. */ 3426 static int tg3_halt_cpu(struct tg3 *tp, u32 offset) 3427 { 3428 int i; 3429 3430 BUG_ON(offset == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)); 3431 3432 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 3433 u32 val = tr32(GRC_VCPU_EXT_CTRL); 3434 3435 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_HALT_CPU); 3436 return 0; 3437 } 3438 if (offset == RX_CPU_BASE) { 3439 for (i = 0; i < 10000; i++) { 3440 tw32(offset + CPU_STATE, 0xffffffff); 3441 tw32(offset + CPU_MODE, CPU_MODE_HALT); 3442 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT) 3443 break; 3444 } 3445 3446 tw32(offset + CPU_STATE, 0xffffffff); 3447 tw32_f(offset + CPU_MODE, CPU_MODE_HALT); 3448 udelay(10); 3449 } else { 3450 for (i = 0; i < 10000; i++) { 3451 tw32(offset + CPU_STATE, 0xffffffff); 3452 tw32(offset + CPU_MODE, CPU_MODE_HALT); 3453 if (tr32(offset + CPU_MODE) & CPU_MODE_HALT) 3454 break; 3455 } 3456 } 3457 3458 if (i >= 10000) { 3459 netdev_err(tp->dev, "%s timed out, %s CPU\n", 3460 __func__, offset == RX_CPU_BASE ? "RX" : "TX"); 3461 return -ENODEV; 3462 } 3463 3464 /* Clear firmware's nvram arbitration. */ 3465 if (tg3_flag(tp, NVRAM)) 3466 tw32(NVRAM_SWARB, SWARB_REQ_CLR0); 3467 return 0; 3468 } 3469 3470 struct fw_info { 3471 unsigned int fw_base; 3472 unsigned int fw_len; 3473 const __be32 *fw_data; 3474 }; 3475 3476 /* tp->lock is held. */ 3477 static int tg3_load_firmware_cpu(struct tg3 *tp, u32 cpu_base, 3478 u32 cpu_scratch_base, int cpu_scratch_size, 3479 struct fw_info *info) 3480 { 3481 int err, lock_err, i; 3482 void (*write_op)(struct tg3 *, u32, u32); 3483 3484 if (cpu_base == TX_CPU_BASE && tg3_flag(tp, 5705_PLUS)) { 3485 netdev_err(tp->dev, 3486 "%s: Trying to load TX cpu firmware which is 5705\n", 3487 __func__); 3488 return -EINVAL; 3489 } 3490 3491 if (tg3_flag(tp, 5705_PLUS)) 3492 write_op = tg3_write_mem; 3493 else 3494 write_op = tg3_write_indirect_reg32; 3495 3496 /* It is possible that bootcode is still loading at this point. 3497 * Get the nvram lock first before halting the cpu. 3498 */ 3499 lock_err = tg3_nvram_lock(tp); 3500 err = tg3_halt_cpu(tp, cpu_base); 3501 if (!lock_err) 3502 tg3_nvram_unlock(tp); 3503 if (err) 3504 goto out; 3505 3506 for (i = 0; i < cpu_scratch_size; i += sizeof(u32)) 3507 write_op(tp, cpu_scratch_base + i, 0); 3508 tw32(cpu_base + CPU_STATE, 0xffffffff); 3509 tw32(cpu_base + CPU_MODE, tr32(cpu_base+CPU_MODE)|CPU_MODE_HALT); 3510 for (i = 0; i < (info->fw_len / sizeof(u32)); i++) 3511 write_op(tp, (cpu_scratch_base + 3512 (info->fw_base & 0xffff) + 3513 (i * sizeof(u32))), 3514 be32_to_cpu(info->fw_data[i])); 3515 3516 err = 0; 3517 3518 out: 3519 return err; 3520 } 3521 3522 /* tp->lock is held. */ 3523 static int tg3_load_5701_a0_firmware_fix(struct tg3 *tp) 3524 { 3525 struct fw_info info; 3526 const __be32 *fw_data; 3527 int err, i; 3528 3529 fw_data = (void *)tp->fw->data; 3530 3531 /* Firmware blob starts with version numbers, followed by 3532 start address and length. We are setting complete length. 3533 length = end_address_of_bss - start_address_of_text. 3534 Remainder is the blob to be loaded contiguously 3535 from start address. */ 3536 3537 info.fw_base = be32_to_cpu(fw_data[1]); 3538 info.fw_len = tp->fw->size - 12; 3539 info.fw_data = &fw_data[3]; 3540 3541 err = tg3_load_firmware_cpu(tp, RX_CPU_BASE, 3542 RX_CPU_SCRATCH_BASE, RX_CPU_SCRATCH_SIZE, 3543 &info); 3544 if (err) 3545 return err; 3546 3547 err = tg3_load_firmware_cpu(tp, TX_CPU_BASE, 3548 TX_CPU_SCRATCH_BASE, TX_CPU_SCRATCH_SIZE, 3549 &info); 3550 if (err) 3551 return err; 3552 3553 /* Now startup only the RX cpu. */ 3554 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3555 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base); 3556 3557 for (i = 0; i < 5; i++) { 3558 if (tr32(RX_CPU_BASE + CPU_PC) == info.fw_base) 3559 break; 3560 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3561 tw32(RX_CPU_BASE + CPU_MODE, CPU_MODE_HALT); 3562 tw32_f(RX_CPU_BASE + CPU_PC, info.fw_base); 3563 udelay(1000); 3564 } 3565 if (i >= 5) { 3566 netdev_err(tp->dev, "%s fails to set RX CPU PC, is %08x " 3567 "should be %08x\n", __func__, 3568 tr32(RX_CPU_BASE + CPU_PC), info.fw_base); 3569 return -ENODEV; 3570 } 3571 tw32(RX_CPU_BASE + CPU_STATE, 0xffffffff); 3572 tw32_f(RX_CPU_BASE + CPU_MODE, 0x00000000); 3573 3574 return 0; 3575 } 3576 3577 /* tp->lock is held. */ 3578 static int tg3_load_tso_firmware(struct tg3 *tp) 3579 { 3580 struct fw_info info; 3581 const __be32 *fw_data; 3582 unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size; 3583 int err, i; 3584 3585 if (tg3_flag(tp, HW_TSO_1) || 3586 tg3_flag(tp, HW_TSO_2) || 3587 tg3_flag(tp, HW_TSO_3)) 3588 return 0; 3589 3590 fw_data = (void *)tp->fw->data; 3591 3592 /* Firmware blob starts with version numbers, followed by 3593 start address and length. We are setting complete length. 3594 length = end_address_of_bss - start_address_of_text. 3595 Remainder is the blob to be loaded contiguously 3596 from start address. */ 3597 3598 info.fw_base = be32_to_cpu(fw_data[1]); 3599 cpu_scratch_size = tp->fw_len; 3600 info.fw_len = tp->fw->size - 12; 3601 info.fw_data = &fw_data[3]; 3602 3603 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 3604 cpu_base = RX_CPU_BASE; 3605 cpu_scratch_base = NIC_SRAM_MBUF_POOL_BASE5705; 3606 } else { 3607 cpu_base = TX_CPU_BASE; 3608 cpu_scratch_base = TX_CPU_SCRATCH_BASE; 3609 cpu_scratch_size = TX_CPU_SCRATCH_SIZE; 3610 } 3611 3612 err = tg3_load_firmware_cpu(tp, cpu_base, 3613 cpu_scratch_base, cpu_scratch_size, 3614 &info); 3615 if (err) 3616 return err; 3617 3618 /* Now startup the cpu. */ 3619 tw32(cpu_base + CPU_STATE, 0xffffffff); 3620 tw32_f(cpu_base + CPU_PC, info.fw_base); 3621 3622 for (i = 0; i < 5; i++) { 3623 if (tr32(cpu_base + CPU_PC) == info.fw_base) 3624 break; 3625 tw32(cpu_base + CPU_STATE, 0xffffffff); 3626 tw32(cpu_base + CPU_MODE, CPU_MODE_HALT); 3627 tw32_f(cpu_base + CPU_PC, info.fw_base); 3628 udelay(1000); 3629 } 3630 if (i >= 5) { 3631 netdev_err(tp->dev, 3632 "%s fails to set CPU PC, is %08x should be %08x\n", 3633 __func__, tr32(cpu_base + CPU_PC), info.fw_base); 3634 return -ENODEV; 3635 } 3636 tw32(cpu_base + CPU_STATE, 0xffffffff); 3637 tw32_f(cpu_base + CPU_MODE, 0x00000000); 3638 return 0; 3639 } 3640 3641 3642 /* tp->lock is held. */ 3643 static void __tg3_set_mac_addr(struct tg3 *tp, int skip_mac_1) 3644 { 3645 u32 addr_high, addr_low; 3646 int i; 3647 3648 addr_high = ((tp->dev->dev_addr[0] << 8) | 3649 tp->dev->dev_addr[1]); 3650 addr_low = ((tp->dev->dev_addr[2] << 24) | 3651 (tp->dev->dev_addr[3] << 16) | 3652 (tp->dev->dev_addr[4] << 8) | 3653 (tp->dev->dev_addr[5] << 0)); 3654 for (i = 0; i < 4; i++) { 3655 if (i == 1 && skip_mac_1) 3656 continue; 3657 tw32(MAC_ADDR_0_HIGH + (i * 8), addr_high); 3658 tw32(MAC_ADDR_0_LOW + (i * 8), addr_low); 3659 } 3660 3661 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 3662 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 3663 for (i = 0; i < 12; i++) { 3664 tw32(MAC_EXTADDR_0_HIGH + (i * 8), addr_high); 3665 tw32(MAC_EXTADDR_0_LOW + (i * 8), addr_low); 3666 } 3667 } 3668 3669 addr_high = (tp->dev->dev_addr[0] + 3670 tp->dev->dev_addr[1] + 3671 tp->dev->dev_addr[2] + 3672 tp->dev->dev_addr[3] + 3673 tp->dev->dev_addr[4] + 3674 tp->dev->dev_addr[5]) & 3675 TX_BACKOFF_SEED_MASK; 3676 tw32(MAC_TX_BACKOFF_SEED, addr_high); 3677 } 3678 3679 static void tg3_enable_register_access(struct tg3 *tp) 3680 { 3681 /* 3682 * Make sure register accesses (indirect or otherwise) will function 3683 * correctly. 3684 */ 3685 pci_write_config_dword(tp->pdev, 3686 TG3PCI_MISC_HOST_CTRL, tp->misc_host_ctrl); 3687 } 3688 3689 static int tg3_power_up(struct tg3 *tp) 3690 { 3691 int err; 3692 3693 tg3_enable_register_access(tp); 3694 3695 err = pci_set_power_state(tp->pdev, PCI_D0); 3696 if (!err) { 3697 /* Switch out of Vaux if it is a NIC */ 3698 tg3_pwrsrc_switch_to_vmain(tp); 3699 } else { 3700 netdev_err(tp->dev, "Transition to D0 failed\n"); 3701 } 3702 3703 return err; 3704 } 3705 3706 static int tg3_setup_phy(struct tg3 *, int); 3707 3708 static int tg3_power_down_prepare(struct tg3 *tp) 3709 { 3710 u32 misc_host_ctrl; 3711 bool device_should_wake, do_low_power; 3712 3713 tg3_enable_register_access(tp); 3714 3715 /* Restore the CLKREQ setting. */ 3716 if (tg3_flag(tp, CLKREQ_BUG)) 3717 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 3718 PCI_EXP_LNKCTL_CLKREQ_EN); 3719 3720 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 3721 tw32(TG3PCI_MISC_HOST_CTRL, 3722 misc_host_ctrl | MISC_HOST_CTRL_MASK_PCI_INT); 3723 3724 device_should_wake = device_may_wakeup(&tp->pdev->dev) && 3725 tg3_flag(tp, WOL_ENABLE); 3726 3727 if (tg3_flag(tp, USE_PHYLIB)) { 3728 do_low_power = false; 3729 if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) && 3730 !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 3731 struct phy_device *phydev; 3732 u32 phyid, advertising; 3733 3734 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 3735 3736 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 3737 3738 tp->link_config.speed = phydev->speed; 3739 tp->link_config.duplex = phydev->duplex; 3740 tp->link_config.autoneg = phydev->autoneg; 3741 tp->link_config.advertising = phydev->advertising; 3742 3743 advertising = ADVERTISED_TP | 3744 ADVERTISED_Pause | 3745 ADVERTISED_Autoneg | 3746 ADVERTISED_10baseT_Half; 3747 3748 if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) { 3749 if (tg3_flag(tp, WOL_SPEED_100MB)) 3750 advertising |= 3751 ADVERTISED_100baseT_Half | 3752 ADVERTISED_100baseT_Full | 3753 ADVERTISED_10baseT_Full; 3754 else 3755 advertising |= ADVERTISED_10baseT_Full; 3756 } 3757 3758 phydev->advertising = advertising; 3759 3760 phy_start_aneg(phydev); 3761 3762 phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; 3763 if (phyid != PHY_ID_BCMAC131) { 3764 phyid &= PHY_BCM_OUI_MASK; 3765 if (phyid == PHY_BCM_OUI_1 || 3766 phyid == PHY_BCM_OUI_2 || 3767 phyid == PHY_BCM_OUI_3) 3768 do_low_power = true; 3769 } 3770 } 3771 } else { 3772 do_low_power = true; 3773 3774 if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) 3775 tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; 3776 3777 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 3778 tg3_setup_phy(tp, 0); 3779 } 3780 3781 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 3782 u32 val; 3783 3784 val = tr32(GRC_VCPU_EXT_CTRL); 3785 tw32(GRC_VCPU_EXT_CTRL, val | GRC_VCPU_EXT_CTRL_DISABLE_WOL); 3786 } else if (!tg3_flag(tp, ENABLE_ASF)) { 3787 int i; 3788 u32 val; 3789 3790 for (i = 0; i < 200; i++) { 3791 tg3_read_mem(tp, NIC_SRAM_FW_ASF_STATUS_MBOX, &val); 3792 if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) 3793 break; 3794 msleep(1); 3795 } 3796 } 3797 if (tg3_flag(tp, WOL_CAP)) 3798 tg3_write_mem(tp, NIC_SRAM_WOL_MBOX, WOL_SIGNATURE | 3799 WOL_DRV_STATE_SHUTDOWN | 3800 WOL_DRV_WOL | 3801 WOL_SET_MAGIC_PKT); 3802 3803 if (device_should_wake) { 3804 u32 mac_mode; 3805 3806 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 3807 if (do_low_power && 3808 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 3809 tg3_phy_auxctl_write(tp, 3810 MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 3811 MII_TG3_AUXCTL_PCTL_WOL_EN | 3812 MII_TG3_AUXCTL_PCTL_100TX_LPWR | 3813 MII_TG3_AUXCTL_PCTL_CL_AB_TXDAC); 3814 udelay(40); 3815 } 3816 3817 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 3818 mac_mode = MAC_MODE_PORT_MODE_GMII; 3819 else 3820 mac_mode = MAC_MODE_PORT_MODE_MII; 3821 3822 mac_mode |= tp->mac_mode & MAC_MODE_LINK_POLARITY; 3823 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 3824 ASIC_REV_5700) { 3825 u32 speed = tg3_flag(tp, WOL_SPEED_100MB) ? 3826 SPEED_100 : SPEED_10; 3827 if (tg3_5700_link_polarity(tp, speed)) 3828 mac_mode |= MAC_MODE_LINK_POLARITY; 3829 else 3830 mac_mode &= ~MAC_MODE_LINK_POLARITY; 3831 } 3832 } else { 3833 mac_mode = MAC_MODE_PORT_MODE_TBI; 3834 } 3835 3836 if (!tg3_flag(tp, 5750_PLUS)) 3837 tw32(MAC_LED_CTRL, tp->led_ctrl); 3838 3839 mac_mode |= MAC_MODE_MAGIC_PKT_ENABLE; 3840 if ((tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) && 3841 (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE))) 3842 mac_mode |= MAC_MODE_KEEP_FRAME_IN_WOL; 3843 3844 if (tg3_flag(tp, ENABLE_APE)) 3845 mac_mode |= MAC_MODE_APE_TX_EN | 3846 MAC_MODE_APE_RX_EN | 3847 MAC_MODE_TDE_ENABLE; 3848 3849 tw32_f(MAC_MODE, mac_mode); 3850 udelay(100); 3851 3852 tw32_f(MAC_RX_MODE, RX_MODE_ENABLE); 3853 udelay(10); 3854 } 3855 3856 if (!tg3_flag(tp, WOL_SPEED_100MB) && 3857 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3858 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 3859 u32 base_val; 3860 3861 base_val = tp->pci_clock_ctrl; 3862 base_val |= (CLOCK_CTRL_RXCLK_DISABLE | 3863 CLOCK_CTRL_TXCLK_DISABLE); 3864 3865 tw32_wait_f(TG3PCI_CLOCK_CTRL, base_val | CLOCK_CTRL_ALTCLK | 3866 CLOCK_CTRL_PWRDOWN_PLL133, 40); 3867 } else if (tg3_flag(tp, 5780_CLASS) || 3868 tg3_flag(tp, CPMU_PRESENT) || 3869 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 3870 /* do nothing */ 3871 } else if (!(tg3_flag(tp, 5750_PLUS) && tg3_flag(tp, ENABLE_ASF))) { 3872 u32 newbits1, newbits2; 3873 3874 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3875 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 3876 newbits1 = (CLOCK_CTRL_RXCLK_DISABLE | 3877 CLOCK_CTRL_TXCLK_DISABLE | 3878 CLOCK_CTRL_ALTCLK); 3879 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 3880 } else if (tg3_flag(tp, 5705_PLUS)) { 3881 newbits1 = CLOCK_CTRL_625_CORE; 3882 newbits2 = newbits1 | CLOCK_CTRL_ALTCLK; 3883 } else { 3884 newbits1 = CLOCK_CTRL_ALTCLK; 3885 newbits2 = newbits1 | CLOCK_CTRL_44MHZ_CORE; 3886 } 3887 3888 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits1, 3889 40); 3890 3891 tw32_wait_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl | newbits2, 3892 40); 3893 3894 if (!tg3_flag(tp, 5705_PLUS)) { 3895 u32 newbits3; 3896 3897 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 3898 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 3899 newbits3 = (CLOCK_CTRL_RXCLK_DISABLE | 3900 CLOCK_CTRL_TXCLK_DISABLE | 3901 CLOCK_CTRL_44MHZ_CORE); 3902 } else { 3903 newbits3 = CLOCK_CTRL_44MHZ_CORE; 3904 } 3905 3906 tw32_wait_f(TG3PCI_CLOCK_CTRL, 3907 tp->pci_clock_ctrl | newbits3, 40); 3908 } 3909 } 3910 3911 if (!(device_should_wake) && !tg3_flag(tp, ENABLE_ASF)) 3912 tg3_power_down_phy(tp, do_low_power); 3913 3914 tg3_frob_aux_power(tp, true); 3915 3916 /* Workaround for unstable PLL clock */ 3917 if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) || 3918 (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) { 3919 u32 val = tr32(0x7d00); 3920 3921 val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1); 3922 tw32(0x7d00, val); 3923 if (!tg3_flag(tp, ENABLE_ASF)) { 3924 int err; 3925 3926 err = tg3_nvram_lock(tp); 3927 tg3_halt_cpu(tp, RX_CPU_BASE); 3928 if (!err) 3929 tg3_nvram_unlock(tp); 3930 } 3931 } 3932 3933 tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); 3934 3935 return 0; 3936 } 3937 3938 static void tg3_power_down(struct tg3 *tp) 3939 { 3940 tg3_power_down_prepare(tp); 3941 3942 pci_wake_from_d3(tp->pdev, tg3_flag(tp, WOL_ENABLE)); 3943 pci_set_power_state(tp->pdev, PCI_D3hot); 3944 } 3945 3946 static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex) 3947 { 3948 switch (val & MII_TG3_AUX_STAT_SPDMASK) { 3949 case MII_TG3_AUX_STAT_10HALF: 3950 *speed = SPEED_10; 3951 *duplex = DUPLEX_HALF; 3952 break; 3953 3954 case MII_TG3_AUX_STAT_10FULL: 3955 *speed = SPEED_10; 3956 *duplex = DUPLEX_FULL; 3957 break; 3958 3959 case MII_TG3_AUX_STAT_100HALF: 3960 *speed = SPEED_100; 3961 *duplex = DUPLEX_HALF; 3962 break; 3963 3964 case MII_TG3_AUX_STAT_100FULL: 3965 *speed = SPEED_100; 3966 *duplex = DUPLEX_FULL; 3967 break; 3968 3969 case MII_TG3_AUX_STAT_1000HALF: 3970 *speed = SPEED_1000; 3971 *duplex = DUPLEX_HALF; 3972 break; 3973 3974 case MII_TG3_AUX_STAT_1000FULL: 3975 *speed = SPEED_1000; 3976 *duplex = DUPLEX_FULL; 3977 break; 3978 3979 default: 3980 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 3981 *speed = (val & MII_TG3_AUX_STAT_100) ? SPEED_100 : 3982 SPEED_10; 3983 *duplex = (val & MII_TG3_AUX_STAT_FULL) ? DUPLEX_FULL : 3984 DUPLEX_HALF; 3985 break; 3986 } 3987 *speed = SPEED_UNKNOWN; 3988 *duplex = DUPLEX_UNKNOWN; 3989 break; 3990 } 3991 } 3992 3993 static int tg3_phy_autoneg_cfg(struct tg3 *tp, u32 advertise, u32 flowctrl) 3994 { 3995 int err = 0; 3996 u32 val, new_adv; 3997 3998 new_adv = ADVERTISE_CSMA; 3999 new_adv |= ethtool_adv_to_mii_adv_t(advertise) & ADVERTISE_ALL; 4000 new_adv |= mii_advertise_flowctrl(flowctrl); 4001 4002 err = tg3_writephy(tp, MII_ADVERTISE, new_adv); 4003 if (err) 4004 goto done; 4005 4006 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4007 new_adv = ethtool_adv_to_mii_ctrl1000_t(advertise); 4008 4009 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 4010 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) 4011 new_adv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4012 4013 err = tg3_writephy(tp, MII_CTRL1000, new_adv); 4014 if (err) 4015 goto done; 4016 } 4017 4018 if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP)) 4019 goto done; 4020 4021 tw32(TG3_CPMU_EEE_MODE, 4022 tr32(TG3_CPMU_EEE_MODE) & ~TG3_CPMU_EEEMD_LPI_ENABLE); 4023 4024 err = tg3_phy_toggle_auxctl_smdsp(tp, true); 4025 if (!err) { 4026 u32 err2; 4027 4028 val = 0; 4029 /* Advertise 100-BaseTX EEE ability */ 4030 if (advertise & ADVERTISED_100baseT_Full) 4031 val |= MDIO_AN_EEE_ADV_100TX; 4032 /* Advertise 1000-BaseT EEE ability */ 4033 if (advertise & ADVERTISED_1000baseT_Full) 4034 val |= MDIO_AN_EEE_ADV_1000T; 4035 err = tg3_phy_cl45_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); 4036 if (err) 4037 val = 0; 4038 4039 switch (GET_ASIC_REV(tp->pci_chip_rev_id)) { 4040 case ASIC_REV_5717: 4041 case ASIC_REV_57765: 4042 case ASIC_REV_57766: 4043 case ASIC_REV_5719: 4044 /* If we advertised any eee advertisements above... */ 4045 if (val) 4046 val = MII_TG3_DSP_TAP26_ALNOKO | 4047 MII_TG3_DSP_TAP26_RMRXSTO | 4048 MII_TG3_DSP_TAP26_OPCSINPT; 4049 tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); 4050 /* Fall through */ 4051 case ASIC_REV_5720: 4052 if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) 4053 tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val | 4054 MII_TG3_DSP_CH34TP2_HIBW01); 4055 } 4056 4057 err2 = tg3_phy_toggle_auxctl_smdsp(tp, false); 4058 if (!err) 4059 err = err2; 4060 } 4061 4062 done: 4063 return err; 4064 } 4065 4066 static void tg3_phy_copper_begin(struct tg3 *tp) 4067 { 4068 if (tp->link_config.autoneg == AUTONEG_ENABLE || 4069 (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4070 u32 adv, fc; 4071 4072 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { 4073 adv = ADVERTISED_10baseT_Half | 4074 ADVERTISED_10baseT_Full; 4075 if (tg3_flag(tp, WOL_SPEED_100MB)) 4076 adv |= ADVERTISED_100baseT_Half | 4077 ADVERTISED_100baseT_Full; 4078 4079 fc = FLOW_CTRL_TX | FLOW_CTRL_RX; 4080 } else { 4081 adv = tp->link_config.advertising; 4082 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 4083 adv &= ~(ADVERTISED_1000baseT_Half | 4084 ADVERTISED_1000baseT_Full); 4085 4086 fc = tp->link_config.flowctrl; 4087 } 4088 4089 tg3_phy_autoneg_cfg(tp, adv, fc); 4090 4091 tg3_writephy(tp, MII_BMCR, 4092 BMCR_ANENABLE | BMCR_ANRESTART); 4093 } else { 4094 int i; 4095 u32 bmcr, orig_bmcr; 4096 4097 tp->link_config.active_speed = tp->link_config.speed; 4098 tp->link_config.active_duplex = tp->link_config.duplex; 4099 4100 bmcr = 0; 4101 switch (tp->link_config.speed) { 4102 default: 4103 case SPEED_10: 4104 break; 4105 4106 case SPEED_100: 4107 bmcr |= BMCR_SPEED100; 4108 break; 4109 4110 case SPEED_1000: 4111 bmcr |= BMCR_SPEED1000; 4112 break; 4113 } 4114 4115 if (tp->link_config.duplex == DUPLEX_FULL) 4116 bmcr |= BMCR_FULLDPLX; 4117 4118 if (!tg3_readphy(tp, MII_BMCR, &orig_bmcr) && 4119 (bmcr != orig_bmcr)) { 4120 tg3_writephy(tp, MII_BMCR, BMCR_LOOPBACK); 4121 for (i = 0; i < 1500; i++) { 4122 u32 tmp; 4123 4124 udelay(10); 4125 if (tg3_readphy(tp, MII_BMSR, &tmp) || 4126 tg3_readphy(tp, MII_BMSR, &tmp)) 4127 continue; 4128 if (!(tmp & BMSR_LSTATUS)) { 4129 udelay(40); 4130 break; 4131 } 4132 } 4133 tg3_writephy(tp, MII_BMCR, bmcr); 4134 udelay(40); 4135 } 4136 } 4137 } 4138 4139 static int tg3_init_5401phy_dsp(struct tg3 *tp) 4140 { 4141 int err; 4142 4143 /* Turn off tap power management. */ 4144 /* Set Extended packet length bit */ 4145 err = tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_AUXCTL, 0x4c20); 4146 4147 err |= tg3_phydsp_write(tp, 0x0012, 0x1804); 4148 err |= tg3_phydsp_write(tp, 0x0013, 0x1204); 4149 err |= tg3_phydsp_write(tp, 0x8006, 0x0132); 4150 err |= tg3_phydsp_write(tp, 0x8006, 0x0232); 4151 err |= tg3_phydsp_write(tp, 0x201f, 0x0a20); 4152 4153 udelay(40); 4154 4155 return err; 4156 } 4157 4158 static bool tg3_phy_copper_an_config_ok(struct tg3 *tp, u32 *lcladv) 4159 { 4160 u32 advmsk, tgtadv, advertising; 4161 4162 advertising = tp->link_config.advertising; 4163 tgtadv = ethtool_adv_to_mii_adv_t(advertising) & ADVERTISE_ALL; 4164 4165 advmsk = ADVERTISE_ALL; 4166 if (tp->link_config.active_duplex == DUPLEX_FULL) { 4167 tgtadv |= mii_advertise_flowctrl(tp->link_config.flowctrl); 4168 advmsk |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM; 4169 } 4170 4171 if (tg3_readphy(tp, MII_ADVERTISE, lcladv)) 4172 return false; 4173 4174 if ((*lcladv & advmsk) != tgtadv) 4175 return false; 4176 4177 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4178 u32 tg3_ctrl; 4179 4180 tgtadv = ethtool_adv_to_mii_ctrl1000_t(advertising); 4181 4182 if (tg3_readphy(tp, MII_CTRL1000, &tg3_ctrl)) 4183 return false; 4184 4185 if (tgtadv && 4186 (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 4187 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0)) { 4188 tgtadv |= CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER; 4189 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL | 4190 CTL1000_AS_MASTER | CTL1000_ENABLE_MASTER); 4191 } else { 4192 tg3_ctrl &= (ADVERTISE_1000HALF | ADVERTISE_1000FULL); 4193 } 4194 4195 if (tg3_ctrl != tgtadv) 4196 return false; 4197 } 4198 4199 return true; 4200 } 4201 4202 static bool tg3_phy_copper_fetch_rmtadv(struct tg3 *tp, u32 *rmtadv) 4203 { 4204 u32 lpeth = 0; 4205 4206 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { 4207 u32 val; 4208 4209 if (tg3_readphy(tp, MII_STAT1000, &val)) 4210 return false; 4211 4212 lpeth = mii_stat1000_to_ethtool_lpa_t(val); 4213 } 4214 4215 if (tg3_readphy(tp, MII_LPA, rmtadv)) 4216 return false; 4217 4218 lpeth |= mii_lpa_to_ethtool_lpa_t(*rmtadv); 4219 tp->link_config.rmt_adv = lpeth; 4220 4221 return true; 4222 } 4223 4224 static bool tg3_test_and_report_link_chg(struct tg3 *tp, int curr_link_up) 4225 { 4226 if (curr_link_up != tp->link_up) { 4227 if (curr_link_up) { 4228 tg3_carrier_on(tp); 4229 } else { 4230 tg3_carrier_off(tp); 4231 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 4232 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 4233 } 4234 4235 tg3_link_report(tp); 4236 return true; 4237 } 4238 4239 return false; 4240 } 4241 4242 static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset) 4243 { 4244 int current_link_up; 4245 u32 bmsr, val; 4246 u32 lcl_adv, rmt_adv; 4247 u16 current_speed; 4248 u8 current_duplex; 4249 int i, err; 4250 4251 tw32(MAC_EVENT, 0); 4252 4253 tw32_f(MAC_STATUS, 4254 (MAC_STATUS_SYNC_CHANGED | 4255 MAC_STATUS_CFG_CHANGED | 4256 MAC_STATUS_MI_COMPLETION | 4257 MAC_STATUS_LNKSTATE_CHANGED)); 4258 udelay(40); 4259 4260 if ((tp->mi_mode & MAC_MI_MODE_AUTO_POLL) != 0) { 4261 tw32_f(MAC_MI_MODE, 4262 (tp->mi_mode & ~MAC_MI_MODE_AUTO_POLL)); 4263 udelay(80); 4264 } 4265 4266 tg3_phy_auxctl_write(tp, MII_TG3_AUXCTL_SHDWSEL_PWRCTL, 0); 4267 4268 /* Some third-party PHYs need to be reset on link going 4269 * down. 4270 */ 4271 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 4272 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 4273 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) && 4274 tp->link_up) { 4275 tg3_readphy(tp, MII_BMSR, &bmsr); 4276 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4277 !(bmsr & BMSR_LSTATUS)) 4278 force_reset = 1; 4279 } 4280 if (force_reset) 4281 tg3_phy_reset(tp); 4282 4283 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 4284 tg3_readphy(tp, MII_BMSR, &bmsr); 4285 if (tg3_readphy(tp, MII_BMSR, &bmsr) || 4286 !tg3_flag(tp, INIT_COMPLETE)) 4287 bmsr = 0; 4288 4289 if (!(bmsr & BMSR_LSTATUS)) { 4290 err = tg3_init_5401phy_dsp(tp); 4291 if (err) 4292 return err; 4293 4294 tg3_readphy(tp, MII_BMSR, &bmsr); 4295 for (i = 0; i < 1000; i++) { 4296 udelay(10); 4297 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4298 (bmsr & BMSR_LSTATUS)) { 4299 udelay(40); 4300 break; 4301 } 4302 } 4303 4304 if ((tp->phy_id & TG3_PHY_ID_REV_MASK) == 4305 TG3_PHY_REV_BCM5401_B0 && 4306 !(bmsr & BMSR_LSTATUS) && 4307 tp->link_config.active_speed == SPEED_1000) { 4308 err = tg3_phy_reset(tp); 4309 if (!err) 4310 err = tg3_init_5401phy_dsp(tp); 4311 if (err) 4312 return err; 4313 } 4314 } 4315 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 4316 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0) { 4317 /* 5701 {A0,B0} CRC bug workaround */ 4318 tg3_writephy(tp, 0x15, 0x0a75); 4319 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4320 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8d68); 4321 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x8c68); 4322 } 4323 4324 /* Clear pending interrupts... */ 4325 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4326 tg3_readphy(tp, MII_TG3_ISTAT, &val); 4327 4328 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) 4329 tg3_writephy(tp, MII_TG3_IMASK, ~MII_TG3_INT_LINKCHG); 4330 else if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) 4331 tg3_writephy(tp, MII_TG3_IMASK, ~0); 4332 4333 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 4334 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 4335 if (tp->led_ctrl == LED_CTRL_MODE_PHY_1) 4336 tg3_writephy(tp, MII_TG3_EXT_CTRL, 4337 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 4338 else 4339 tg3_writephy(tp, MII_TG3_EXT_CTRL, 0); 4340 } 4341 4342 current_link_up = 0; 4343 current_speed = SPEED_UNKNOWN; 4344 current_duplex = DUPLEX_UNKNOWN; 4345 tp->phy_flags &= ~TG3_PHYFLG_MDIX_STATE; 4346 tp->link_config.rmt_adv = 0; 4347 4348 if (tp->phy_flags & TG3_PHYFLG_CAPACITIVE_COUPLING) { 4349 err = tg3_phy_auxctl_read(tp, 4350 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4351 &val); 4352 if (!err && !(val & (1 << 10))) { 4353 tg3_phy_auxctl_write(tp, 4354 MII_TG3_AUXCTL_SHDWSEL_MISCTEST, 4355 val | (1 << 10)); 4356 goto relink; 4357 } 4358 } 4359 4360 bmsr = 0; 4361 for (i = 0; i < 100; i++) { 4362 tg3_readphy(tp, MII_BMSR, &bmsr); 4363 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 4364 (bmsr & BMSR_LSTATUS)) 4365 break; 4366 udelay(40); 4367 } 4368 4369 if (bmsr & BMSR_LSTATUS) { 4370 u32 aux_stat, bmcr; 4371 4372 tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat); 4373 for (i = 0; i < 2000; i++) { 4374 udelay(10); 4375 if (!tg3_readphy(tp, MII_TG3_AUX_STAT, &aux_stat) && 4376 aux_stat) 4377 break; 4378 } 4379 4380 tg3_aux_stat_to_speed_duplex(tp, aux_stat, 4381 ¤t_speed, 4382 ¤t_duplex); 4383 4384 bmcr = 0; 4385 for (i = 0; i < 200; i++) { 4386 tg3_readphy(tp, MII_BMCR, &bmcr); 4387 if (tg3_readphy(tp, MII_BMCR, &bmcr)) 4388 continue; 4389 if (bmcr && bmcr != 0x7fff) 4390 break; 4391 udelay(10); 4392 } 4393 4394 lcl_adv = 0; 4395 rmt_adv = 0; 4396 4397 tp->link_config.active_speed = current_speed; 4398 tp->link_config.active_duplex = current_duplex; 4399 4400 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 4401 if ((bmcr & BMCR_ANENABLE) && 4402 tg3_phy_copper_an_config_ok(tp, &lcl_adv) && 4403 tg3_phy_copper_fetch_rmtadv(tp, &rmt_adv)) 4404 current_link_up = 1; 4405 } else { 4406 if (!(bmcr & BMCR_ANENABLE) && 4407 tp->link_config.speed == current_speed && 4408 tp->link_config.duplex == current_duplex && 4409 tp->link_config.flowctrl == 4410 tp->link_config.active_flowctrl) { 4411 current_link_up = 1; 4412 } 4413 } 4414 4415 if (current_link_up == 1 && 4416 tp->link_config.active_duplex == DUPLEX_FULL) { 4417 u32 reg, bit; 4418 4419 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 4420 reg = MII_TG3_FET_GEN_STAT; 4421 bit = MII_TG3_FET_GEN_STAT_MDIXSTAT; 4422 } else { 4423 reg = MII_TG3_EXT_STAT; 4424 bit = MII_TG3_EXT_STAT_MDIX; 4425 } 4426 4427 if (!tg3_readphy(tp, reg, &val) && (val & bit)) 4428 tp->phy_flags |= TG3_PHYFLG_MDIX_STATE; 4429 4430 tg3_setup_flow_control(tp, lcl_adv, rmt_adv); 4431 } 4432 } 4433 4434 relink: 4435 if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { 4436 tg3_phy_copper_begin(tp); 4437 4438 tg3_readphy(tp, MII_BMSR, &bmsr); 4439 if ((!tg3_readphy(tp, MII_BMSR, &bmsr) && (bmsr & BMSR_LSTATUS)) || 4440 (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 4441 current_link_up = 1; 4442 } 4443 4444 tp->mac_mode &= ~MAC_MODE_PORT_MODE_MASK; 4445 if (current_link_up == 1) { 4446 if (tp->link_config.active_speed == SPEED_100 || 4447 tp->link_config.active_speed == SPEED_10) 4448 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4449 else 4450 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 4451 } else if (tp->phy_flags & TG3_PHYFLG_IS_FET) 4452 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 4453 else 4454 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 4455 4456 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 4457 if (tp->link_config.active_duplex == DUPLEX_HALF) 4458 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 4459 4460 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) { 4461 if (current_link_up == 1 && 4462 tg3_5700_link_polarity(tp, tp->link_config.active_speed)) 4463 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 4464 else 4465 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 4466 } 4467 4468 /* ??? Without this setting Netgear GA302T PHY does not 4469 * ??? send/receive packets... 4470 */ 4471 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5411 && 4472 tp->pci_chip_rev_id == CHIPREV_ID_5700_ALTIMA) { 4473 tp->mi_mode |= MAC_MI_MODE_AUTO_POLL; 4474 tw32_f(MAC_MI_MODE, tp->mi_mode); 4475 udelay(80); 4476 } 4477 4478 tw32_f(MAC_MODE, tp->mac_mode); 4479 udelay(40); 4480 4481 tg3_phy_eee_adjust(tp, current_link_up); 4482 4483 if (tg3_flag(tp, USE_LINKCHG_REG)) { 4484 /* Polled via timer. */ 4485 tw32_f(MAC_EVENT, 0); 4486 } else { 4487 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 4488 } 4489 udelay(40); 4490 4491 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 && 4492 current_link_up == 1 && 4493 tp->link_config.active_speed == SPEED_1000 && 4494 (tg3_flag(tp, PCIX_MODE) || tg3_flag(tp, PCI_HIGH_SPEED))) { 4495 udelay(120); 4496 tw32_f(MAC_STATUS, 4497 (MAC_STATUS_SYNC_CHANGED | 4498 MAC_STATUS_CFG_CHANGED)); 4499 udelay(40); 4500 tg3_write_mem(tp, 4501 NIC_SRAM_FIRMWARE_MBOX, 4502 NIC_SRAM_FIRMWARE_MBOX_MAGIC2); 4503 } 4504 4505 /* Prevent send BD corruption. */ 4506 if (tg3_flag(tp, CLKREQ_BUG)) { 4507 if (tp->link_config.active_speed == SPEED_100 || 4508 tp->link_config.active_speed == SPEED_10) 4509 pcie_capability_clear_word(tp->pdev, PCI_EXP_LNKCTL, 4510 PCI_EXP_LNKCTL_CLKREQ_EN); 4511 else 4512 pcie_capability_set_word(tp->pdev, PCI_EXP_LNKCTL, 4513 PCI_EXP_LNKCTL_CLKREQ_EN); 4514 } 4515 4516 tg3_test_and_report_link_chg(tp, current_link_up); 4517 4518 return 0; 4519 } 4520 4521 struct tg3_fiber_aneginfo { 4522 int state; 4523 #define ANEG_STATE_UNKNOWN 0 4524 #define ANEG_STATE_AN_ENABLE 1 4525 #define ANEG_STATE_RESTART_INIT 2 4526 #define ANEG_STATE_RESTART 3 4527 #define ANEG_STATE_DISABLE_LINK_OK 4 4528 #define ANEG_STATE_ABILITY_DETECT_INIT 5 4529 #define ANEG_STATE_ABILITY_DETECT 6 4530 #define ANEG_STATE_ACK_DETECT_INIT 7 4531 #define ANEG_STATE_ACK_DETECT 8 4532 #define ANEG_STATE_COMPLETE_ACK_INIT 9 4533 #define ANEG_STATE_COMPLETE_ACK 10 4534 #define ANEG_STATE_IDLE_DETECT_INIT 11 4535 #define ANEG_STATE_IDLE_DETECT 12 4536 #define ANEG_STATE_LINK_OK 13 4537 #define ANEG_STATE_NEXT_PAGE_WAIT_INIT 14 4538 #define ANEG_STATE_NEXT_PAGE_WAIT 15 4539 4540 u32 flags; 4541 #define MR_AN_ENABLE 0x00000001 4542 #define MR_RESTART_AN 0x00000002 4543 #define MR_AN_COMPLETE 0x00000004 4544 #define MR_PAGE_RX 0x00000008 4545 #define MR_NP_LOADED 0x00000010 4546 #define MR_TOGGLE_TX 0x00000020 4547 #define MR_LP_ADV_FULL_DUPLEX 0x00000040 4548 #define MR_LP_ADV_HALF_DUPLEX 0x00000080 4549 #define MR_LP_ADV_SYM_PAUSE 0x00000100 4550 #define MR_LP_ADV_ASYM_PAUSE 0x00000200 4551 #define MR_LP_ADV_REMOTE_FAULT1 0x00000400 4552 #define MR_LP_ADV_REMOTE_FAULT2 0x00000800 4553 #define MR_LP_ADV_NEXT_PAGE 0x00001000 4554 #define MR_TOGGLE_RX 0x00002000 4555 #define MR_NP_RX 0x00004000 4556 4557 #define MR_LINK_OK 0x80000000 4558 4559 unsigned long link_time, cur_time; 4560 4561 u32 ability_match_cfg; 4562 int ability_match_count; 4563 4564 char ability_match, idle_match, ack_match; 4565 4566 u32 txconfig, rxconfig; 4567 #define ANEG_CFG_NP 0x00000080 4568 #define ANEG_CFG_ACK 0x00000040 4569 #define ANEG_CFG_RF2 0x00000020 4570 #define ANEG_CFG_RF1 0x00000010 4571 #define ANEG_CFG_PS2 0x00000001 4572 #define ANEG_CFG_PS1 0x00008000 4573 #define ANEG_CFG_HD 0x00004000 4574 #define ANEG_CFG_FD 0x00002000 4575 #define ANEG_CFG_INVAL 0x00001f06 4576 4577 }; 4578 #define ANEG_OK 0 4579 #define ANEG_DONE 1 4580 #define ANEG_TIMER_ENAB 2 4581 #define ANEG_FAILED -1 4582 4583 #define ANEG_STATE_SETTLE_TIME 10000 4584 4585 static int tg3_fiber_aneg_smachine(struct tg3 *tp, 4586 struct tg3_fiber_aneginfo *ap) 4587 { 4588 u16 flowctrl; 4589 unsigned long delta; 4590 u32 rx_cfg_reg; 4591 int ret; 4592 4593 if (ap->state == ANEG_STATE_UNKNOWN) { 4594 ap->rxconfig = 0; 4595 ap->link_time = 0; 4596 ap->cur_time = 0; 4597 ap->ability_match_cfg = 0; 4598 ap->ability_match_count = 0; 4599 ap->ability_match = 0; 4600 ap->idle_match = 0; 4601 ap->ack_match = 0; 4602 } 4603 ap->cur_time++; 4604 4605 if (tr32(MAC_STATUS) & MAC_STATUS_RCVD_CFG) { 4606 rx_cfg_reg = tr32(MAC_RX_AUTO_NEG); 4607 4608 if (rx_cfg_reg != ap->ability_match_cfg) { 4609 ap->ability_match_cfg = rx_cfg_reg; 4610 ap->ability_match = 0; 4611 ap->ability_match_count = 0; 4612 } else { 4613 if (++ap->ability_match_count > 1) { 4614 ap->ability_match = 1; 4615 ap->ability_match_cfg = rx_cfg_reg; 4616 } 4617 } 4618 if (rx_cfg_reg & ANEG_CFG_ACK) 4619 ap->ack_match = 1; 4620 else 4621 ap->ack_match = 0; 4622 4623 ap->idle_match = 0; 4624 } else { 4625 ap->idle_match = 1; 4626 ap->ability_match_cfg = 0; 4627 ap->ability_match_count = 0; 4628 ap->ability_match = 0; 4629 ap->ack_match = 0; 4630 4631 rx_cfg_reg = 0; 4632 } 4633 4634 ap->rxconfig = rx_cfg_reg; 4635 ret = ANEG_OK; 4636 4637 switch (ap->state) { 4638 case ANEG_STATE_UNKNOWN: 4639 if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) 4640 ap->state = ANEG_STATE_AN_ENABLE; 4641 4642 /* fallthru */ 4643 case ANEG_STATE_AN_ENABLE: 4644 ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); 4645 if (ap->flags & MR_AN_ENABLE) { 4646 ap->link_time = 0; 4647 ap->cur_time = 0; 4648 ap->ability_match_cfg = 0; 4649 ap->ability_match_count = 0; 4650 ap->ability_match = 0; 4651 ap->idle_match = 0; 4652 ap->ack_match = 0; 4653 4654 ap->state = ANEG_STATE_RESTART_INIT; 4655 } else { 4656 ap->state = ANEG_STATE_DISABLE_LINK_OK; 4657 } 4658 break; 4659 4660 case ANEG_STATE_RESTART_INIT: 4661 ap->link_time = ap->cur_time; 4662 ap->flags &= ~(MR_NP_LOADED); 4663 ap->txconfig = 0; 4664 tw32(MAC_TX_AUTO_NEG, 0); 4665 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 4666 tw32_f(MAC_MODE, tp->mac_mode); 4667 udelay(40); 4668 4669 ret = ANEG_TIMER_ENAB; 4670 ap->state = ANEG_STATE_RESTART; 4671 4672 /* fallthru */ 4673 case ANEG_STATE_RESTART: 4674 delta = ap->cur_time - ap->link_time; 4675 if (delta > ANEG_STATE_SETTLE_TIME) 4676 ap->state = ANEG_STATE_ABILITY_DETECT_INIT; 4677 else 4678 ret = ANEG_TIMER_ENAB; 4679 break; 4680 4681 case ANEG_STATE_DISABLE_LINK_OK: 4682 ret = ANEG_DONE; 4683 break; 4684 4685 case ANEG_STATE_ABILITY_DETECT_INIT: 4686 ap->flags &= ~(MR_TOGGLE_TX); 4687 ap->txconfig = ANEG_CFG_FD; 4688 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 4689 if (flowctrl & ADVERTISE_1000XPAUSE) 4690 ap->txconfig |= ANEG_CFG_PS1; 4691 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 4692 ap->txconfig |= ANEG_CFG_PS2; 4693 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 4694 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 4695 tw32_f(MAC_MODE, tp->mac_mode); 4696 udelay(40); 4697 4698 ap->state = ANEG_STATE_ABILITY_DETECT; 4699 break; 4700 4701 case ANEG_STATE_ABILITY_DETECT: 4702 if (ap->ability_match != 0 && ap->rxconfig != 0) 4703 ap->state = ANEG_STATE_ACK_DETECT_INIT; 4704 break; 4705 4706 case ANEG_STATE_ACK_DETECT_INIT: 4707 ap->txconfig |= ANEG_CFG_ACK; 4708 tw32(MAC_TX_AUTO_NEG, ap->txconfig); 4709 tp->mac_mode |= MAC_MODE_SEND_CONFIGS; 4710 tw32_f(MAC_MODE, tp->mac_mode); 4711 udelay(40); 4712 4713 ap->state = ANEG_STATE_ACK_DETECT; 4714 4715 /* fallthru */ 4716 case ANEG_STATE_ACK_DETECT: 4717 if (ap->ack_match != 0) { 4718 if ((ap->rxconfig & ~ANEG_CFG_ACK) == 4719 (ap->ability_match_cfg & ~ANEG_CFG_ACK)) { 4720 ap->state = ANEG_STATE_COMPLETE_ACK_INIT; 4721 } else { 4722 ap->state = ANEG_STATE_AN_ENABLE; 4723 } 4724 } else if (ap->ability_match != 0 && 4725 ap->rxconfig == 0) { 4726 ap->state = ANEG_STATE_AN_ENABLE; 4727 } 4728 break; 4729 4730 case ANEG_STATE_COMPLETE_ACK_INIT: 4731 if (ap->rxconfig & ANEG_CFG_INVAL) { 4732 ret = ANEG_FAILED; 4733 break; 4734 } 4735 ap->flags &= ~(MR_LP_ADV_FULL_DUPLEX | 4736 MR_LP_ADV_HALF_DUPLEX | 4737 MR_LP_ADV_SYM_PAUSE | 4738 MR_LP_ADV_ASYM_PAUSE | 4739 MR_LP_ADV_REMOTE_FAULT1 | 4740 MR_LP_ADV_REMOTE_FAULT2 | 4741 MR_LP_ADV_NEXT_PAGE | 4742 MR_TOGGLE_RX | 4743 MR_NP_RX); 4744 if (ap->rxconfig & ANEG_CFG_FD) 4745 ap->flags |= MR_LP_ADV_FULL_DUPLEX; 4746 if (ap->rxconfig & ANEG_CFG_HD) 4747 ap->flags |= MR_LP_ADV_HALF_DUPLEX; 4748 if (ap->rxconfig & ANEG_CFG_PS1) 4749 ap->flags |= MR_LP_ADV_SYM_PAUSE; 4750 if (ap->rxconfig & ANEG_CFG_PS2) 4751 ap->flags |= MR_LP_ADV_ASYM_PAUSE; 4752 if (ap->rxconfig & ANEG_CFG_RF1) 4753 ap->flags |= MR_LP_ADV_REMOTE_FAULT1; 4754 if (ap->rxconfig & ANEG_CFG_RF2) 4755 ap->flags |= MR_LP_ADV_REMOTE_FAULT2; 4756 if (ap->rxconfig & ANEG_CFG_NP) 4757 ap->flags |= MR_LP_ADV_NEXT_PAGE; 4758 4759 ap->link_time = ap->cur_time; 4760 4761 ap->flags ^= (MR_TOGGLE_TX); 4762 if (ap->rxconfig & 0x0008) 4763 ap->flags |= MR_TOGGLE_RX; 4764 if (ap->rxconfig & ANEG_CFG_NP) 4765 ap->flags |= MR_NP_RX; 4766 ap->flags |= MR_PAGE_RX; 4767 4768 ap->state = ANEG_STATE_COMPLETE_ACK; 4769 ret = ANEG_TIMER_ENAB; 4770 break; 4771 4772 case ANEG_STATE_COMPLETE_ACK: 4773 if (ap->ability_match != 0 && 4774 ap->rxconfig == 0) { 4775 ap->state = ANEG_STATE_AN_ENABLE; 4776 break; 4777 } 4778 delta = ap->cur_time - ap->link_time; 4779 if (delta > ANEG_STATE_SETTLE_TIME) { 4780 if (!(ap->flags & (MR_LP_ADV_NEXT_PAGE))) { 4781 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 4782 } else { 4783 if ((ap->txconfig & ANEG_CFG_NP) == 0 && 4784 !(ap->flags & MR_NP_RX)) { 4785 ap->state = ANEG_STATE_IDLE_DETECT_INIT; 4786 } else { 4787 ret = ANEG_FAILED; 4788 } 4789 } 4790 } 4791 break; 4792 4793 case ANEG_STATE_IDLE_DETECT_INIT: 4794 ap->link_time = ap->cur_time; 4795 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 4796 tw32_f(MAC_MODE, tp->mac_mode); 4797 udelay(40); 4798 4799 ap->state = ANEG_STATE_IDLE_DETECT; 4800 ret = ANEG_TIMER_ENAB; 4801 break; 4802 4803 case ANEG_STATE_IDLE_DETECT: 4804 if (ap->ability_match != 0 && 4805 ap->rxconfig == 0) { 4806 ap->state = ANEG_STATE_AN_ENABLE; 4807 break; 4808 } 4809 delta = ap->cur_time - ap->link_time; 4810 if (delta > ANEG_STATE_SETTLE_TIME) { 4811 /* XXX another gem from the Broadcom driver :( */ 4812 ap->state = ANEG_STATE_LINK_OK; 4813 } 4814 break; 4815 4816 case ANEG_STATE_LINK_OK: 4817 ap->flags |= (MR_AN_COMPLETE | MR_LINK_OK); 4818 ret = ANEG_DONE; 4819 break; 4820 4821 case ANEG_STATE_NEXT_PAGE_WAIT_INIT: 4822 /* ??? unimplemented */ 4823 break; 4824 4825 case ANEG_STATE_NEXT_PAGE_WAIT: 4826 /* ??? unimplemented */ 4827 break; 4828 4829 default: 4830 ret = ANEG_FAILED; 4831 break; 4832 } 4833 4834 return ret; 4835 } 4836 4837 static int fiber_autoneg(struct tg3 *tp, u32 *txflags, u32 *rxflags) 4838 { 4839 int res = 0; 4840 struct tg3_fiber_aneginfo aninfo; 4841 int status = ANEG_FAILED; 4842 unsigned int tick; 4843 u32 tmp; 4844 4845 tw32_f(MAC_TX_AUTO_NEG, 0); 4846 4847 tmp = tp->mac_mode & ~MAC_MODE_PORT_MODE_MASK; 4848 tw32_f(MAC_MODE, tmp | MAC_MODE_PORT_MODE_GMII); 4849 udelay(40); 4850 4851 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_SEND_CONFIGS); 4852 udelay(40); 4853 4854 memset(&aninfo, 0, sizeof(aninfo)); 4855 aninfo.flags |= MR_AN_ENABLE; 4856 aninfo.state = ANEG_STATE_UNKNOWN; 4857 aninfo.cur_time = 0; 4858 tick = 0; 4859 while (++tick < 195000) { 4860 status = tg3_fiber_aneg_smachine(tp, &aninfo); 4861 if (status == ANEG_DONE || status == ANEG_FAILED) 4862 break; 4863 4864 udelay(1); 4865 } 4866 4867 tp->mac_mode &= ~MAC_MODE_SEND_CONFIGS; 4868 tw32_f(MAC_MODE, tp->mac_mode); 4869 udelay(40); 4870 4871 *txflags = aninfo.txconfig; 4872 *rxflags = aninfo.flags; 4873 4874 if (status == ANEG_DONE && 4875 (aninfo.flags & (MR_AN_COMPLETE | MR_LINK_OK | 4876 MR_LP_ADV_FULL_DUPLEX))) 4877 res = 1; 4878 4879 return res; 4880 } 4881 4882 static void tg3_init_bcm8002(struct tg3 *tp) 4883 { 4884 u32 mac_status = tr32(MAC_STATUS); 4885 int i; 4886 4887 /* Reset when initting first time or we have a link. */ 4888 if (tg3_flag(tp, INIT_COMPLETE) && 4889 !(mac_status & MAC_STATUS_PCS_SYNCED)) 4890 return; 4891 4892 /* Set PLL lock range. */ 4893 tg3_writephy(tp, 0x16, 0x8007); 4894 4895 /* SW reset */ 4896 tg3_writephy(tp, MII_BMCR, BMCR_RESET); 4897 4898 /* Wait for reset to complete. */ 4899 /* XXX schedule_timeout() ... */ 4900 for (i = 0; i < 500; i++) 4901 udelay(10); 4902 4903 /* Config mode; select PMA/Ch 1 regs. */ 4904 tg3_writephy(tp, 0x10, 0x8411); 4905 4906 /* Enable auto-lock and comdet, select txclk for tx. */ 4907 tg3_writephy(tp, 0x11, 0x0a10); 4908 4909 tg3_writephy(tp, 0x18, 0x00a0); 4910 tg3_writephy(tp, 0x16, 0x41ff); 4911 4912 /* Assert and deassert POR. */ 4913 tg3_writephy(tp, 0x13, 0x0400); 4914 udelay(40); 4915 tg3_writephy(tp, 0x13, 0x0000); 4916 4917 tg3_writephy(tp, 0x11, 0x0a50); 4918 udelay(40); 4919 tg3_writephy(tp, 0x11, 0x0a10); 4920 4921 /* Wait for signal to stabilize */ 4922 /* XXX schedule_timeout() ... */ 4923 for (i = 0; i < 15000; i++) 4924 udelay(10); 4925 4926 /* Deselect the channel register so we can read the PHYID 4927 * later. 4928 */ 4929 tg3_writephy(tp, 0x10, 0x8011); 4930 } 4931 4932 static int tg3_setup_fiber_hw_autoneg(struct tg3 *tp, u32 mac_status) 4933 { 4934 u16 flowctrl; 4935 u32 sg_dig_ctrl, sg_dig_status; 4936 u32 serdes_cfg, expected_sg_dig_ctrl; 4937 int workaround, port_a; 4938 int current_link_up; 4939 4940 serdes_cfg = 0; 4941 expected_sg_dig_ctrl = 0; 4942 workaround = 0; 4943 port_a = 1; 4944 current_link_up = 0; 4945 4946 if (tp->pci_chip_rev_id != CHIPREV_ID_5704_A0 && 4947 tp->pci_chip_rev_id != CHIPREV_ID_5704_A1) { 4948 workaround = 1; 4949 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 4950 port_a = 0; 4951 4952 /* preserve bits 0-11,13,14 for signal pre-emphasis */ 4953 /* preserve bits 20-23 for voltage regulator */ 4954 serdes_cfg = tr32(MAC_SERDES_CFG) & 0x00f06fff; 4955 } 4956 4957 sg_dig_ctrl = tr32(SG_DIG_CTRL); 4958 4959 if (tp->link_config.autoneg != AUTONEG_ENABLE) { 4960 if (sg_dig_ctrl & SG_DIG_USING_HW_AUTONEG) { 4961 if (workaround) { 4962 u32 val = serdes_cfg; 4963 4964 if (port_a) 4965 val |= 0xc010000; 4966 else 4967 val |= 0x4010000; 4968 tw32_f(MAC_SERDES_CFG, val); 4969 } 4970 4971 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 4972 } 4973 if (mac_status & MAC_STATUS_PCS_SYNCED) { 4974 tg3_setup_flow_control(tp, 0, 0); 4975 current_link_up = 1; 4976 } 4977 goto out; 4978 } 4979 4980 /* Want auto-negotiation. */ 4981 expected_sg_dig_ctrl = SG_DIG_USING_HW_AUTONEG | SG_DIG_COMMON_SETUP; 4982 4983 flowctrl = tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 4984 if (flowctrl & ADVERTISE_1000XPAUSE) 4985 expected_sg_dig_ctrl |= SG_DIG_PAUSE_CAP; 4986 if (flowctrl & ADVERTISE_1000XPSE_ASYM) 4987 expected_sg_dig_ctrl |= SG_DIG_ASYM_PAUSE; 4988 4989 if (sg_dig_ctrl != expected_sg_dig_ctrl) { 4990 if ((tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT) && 4991 tp->serdes_counter && 4992 ((mac_status & (MAC_STATUS_PCS_SYNCED | 4993 MAC_STATUS_RCVD_CFG)) == 4994 MAC_STATUS_PCS_SYNCED)) { 4995 tp->serdes_counter--; 4996 current_link_up = 1; 4997 goto out; 4998 } 4999 restart_autoneg: 5000 if (workaround) 5001 tw32_f(MAC_SERDES_CFG, serdes_cfg | 0xc011000); 5002 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl | SG_DIG_SOFT_RESET); 5003 udelay(5); 5004 tw32_f(SG_DIG_CTRL, expected_sg_dig_ctrl); 5005 5006 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5007 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5008 } else if (mac_status & (MAC_STATUS_PCS_SYNCED | 5009 MAC_STATUS_SIGNAL_DET)) { 5010 sg_dig_status = tr32(SG_DIG_STATUS); 5011 mac_status = tr32(MAC_STATUS); 5012 5013 if ((sg_dig_status & SG_DIG_AUTONEG_COMPLETE) && 5014 (mac_status & MAC_STATUS_PCS_SYNCED)) { 5015 u32 local_adv = 0, remote_adv = 0; 5016 5017 if (sg_dig_ctrl & SG_DIG_PAUSE_CAP) 5018 local_adv |= ADVERTISE_1000XPAUSE; 5019 if (sg_dig_ctrl & SG_DIG_ASYM_PAUSE) 5020 local_adv |= ADVERTISE_1000XPSE_ASYM; 5021 5022 if (sg_dig_status & SG_DIG_PARTNER_PAUSE_CAPABLE) 5023 remote_adv |= LPA_1000XPAUSE; 5024 if (sg_dig_status & SG_DIG_PARTNER_ASYM_PAUSE) 5025 remote_adv |= LPA_1000XPAUSE_ASYM; 5026 5027 tp->link_config.rmt_adv = 5028 mii_adv_to_ethtool_adv_x(remote_adv); 5029 5030 tg3_setup_flow_control(tp, local_adv, remote_adv); 5031 current_link_up = 1; 5032 tp->serdes_counter = 0; 5033 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5034 } else if (!(sg_dig_status & SG_DIG_AUTONEG_COMPLETE)) { 5035 if (tp->serdes_counter) 5036 tp->serdes_counter--; 5037 else { 5038 if (workaround) { 5039 u32 val = serdes_cfg; 5040 5041 if (port_a) 5042 val |= 0xc010000; 5043 else 5044 val |= 0x4010000; 5045 5046 tw32_f(MAC_SERDES_CFG, val); 5047 } 5048 5049 tw32_f(SG_DIG_CTRL, SG_DIG_COMMON_SETUP); 5050 udelay(40); 5051 5052 /* Link parallel detection - link is up */ 5053 /* only if we have PCS_SYNC and not */ 5054 /* receiving config code words */ 5055 mac_status = tr32(MAC_STATUS); 5056 if ((mac_status & MAC_STATUS_PCS_SYNCED) && 5057 !(mac_status & MAC_STATUS_RCVD_CFG)) { 5058 tg3_setup_flow_control(tp, 0, 0); 5059 current_link_up = 1; 5060 tp->phy_flags |= 5061 TG3_PHYFLG_PARALLEL_DETECT; 5062 tp->serdes_counter = 5063 SERDES_PARALLEL_DET_TIMEOUT; 5064 } else 5065 goto restart_autoneg; 5066 } 5067 } 5068 } else { 5069 tp->serdes_counter = SERDES_AN_TIMEOUT_5704S; 5070 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5071 } 5072 5073 out: 5074 return current_link_up; 5075 } 5076 5077 static int tg3_setup_fiber_by_hand(struct tg3 *tp, u32 mac_status) 5078 { 5079 int current_link_up = 0; 5080 5081 if (!(mac_status & MAC_STATUS_PCS_SYNCED)) 5082 goto out; 5083 5084 if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5085 u32 txflags, rxflags; 5086 int i; 5087 5088 if (fiber_autoneg(tp, &txflags, &rxflags)) { 5089 u32 local_adv = 0, remote_adv = 0; 5090 5091 if (txflags & ANEG_CFG_PS1) 5092 local_adv |= ADVERTISE_1000XPAUSE; 5093 if (txflags & ANEG_CFG_PS2) 5094 local_adv |= ADVERTISE_1000XPSE_ASYM; 5095 5096 if (rxflags & MR_LP_ADV_SYM_PAUSE) 5097 remote_adv |= LPA_1000XPAUSE; 5098 if (rxflags & MR_LP_ADV_ASYM_PAUSE) 5099 remote_adv |= LPA_1000XPAUSE_ASYM; 5100 5101 tp->link_config.rmt_adv = 5102 mii_adv_to_ethtool_adv_x(remote_adv); 5103 5104 tg3_setup_flow_control(tp, local_adv, remote_adv); 5105 5106 current_link_up = 1; 5107 } 5108 for (i = 0; i < 30; i++) { 5109 udelay(20); 5110 tw32_f(MAC_STATUS, 5111 (MAC_STATUS_SYNC_CHANGED | 5112 MAC_STATUS_CFG_CHANGED)); 5113 udelay(40); 5114 if ((tr32(MAC_STATUS) & 5115 (MAC_STATUS_SYNC_CHANGED | 5116 MAC_STATUS_CFG_CHANGED)) == 0) 5117 break; 5118 } 5119 5120 mac_status = tr32(MAC_STATUS); 5121 if (current_link_up == 0 && 5122 (mac_status & MAC_STATUS_PCS_SYNCED) && 5123 !(mac_status & MAC_STATUS_RCVD_CFG)) 5124 current_link_up = 1; 5125 } else { 5126 tg3_setup_flow_control(tp, 0, 0); 5127 5128 /* Forcing 1000FD link up. */ 5129 current_link_up = 1; 5130 5131 tw32_f(MAC_MODE, (tp->mac_mode | MAC_MODE_SEND_CONFIGS)); 5132 udelay(40); 5133 5134 tw32_f(MAC_MODE, tp->mac_mode); 5135 udelay(40); 5136 } 5137 5138 out: 5139 return current_link_up; 5140 } 5141 5142 static int tg3_setup_fiber_phy(struct tg3 *tp, int force_reset) 5143 { 5144 u32 orig_pause_cfg; 5145 u16 orig_active_speed; 5146 u8 orig_active_duplex; 5147 u32 mac_status; 5148 int current_link_up; 5149 int i; 5150 5151 orig_pause_cfg = tp->link_config.active_flowctrl; 5152 orig_active_speed = tp->link_config.active_speed; 5153 orig_active_duplex = tp->link_config.active_duplex; 5154 5155 if (!tg3_flag(tp, HW_AUTONEG) && 5156 tp->link_up && 5157 tg3_flag(tp, INIT_COMPLETE)) { 5158 mac_status = tr32(MAC_STATUS); 5159 mac_status &= (MAC_STATUS_PCS_SYNCED | 5160 MAC_STATUS_SIGNAL_DET | 5161 MAC_STATUS_CFG_CHANGED | 5162 MAC_STATUS_RCVD_CFG); 5163 if (mac_status == (MAC_STATUS_PCS_SYNCED | 5164 MAC_STATUS_SIGNAL_DET)) { 5165 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5166 MAC_STATUS_CFG_CHANGED)); 5167 return 0; 5168 } 5169 } 5170 5171 tw32_f(MAC_TX_AUTO_NEG, 0); 5172 5173 tp->mac_mode &= ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 5174 tp->mac_mode |= MAC_MODE_PORT_MODE_TBI; 5175 tw32_f(MAC_MODE, tp->mac_mode); 5176 udelay(40); 5177 5178 if (tp->phy_id == TG3_PHY_ID_BCM8002) 5179 tg3_init_bcm8002(tp); 5180 5181 /* Enable link change event even when serdes polling. */ 5182 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5183 udelay(40); 5184 5185 current_link_up = 0; 5186 tp->link_config.rmt_adv = 0; 5187 mac_status = tr32(MAC_STATUS); 5188 5189 if (tg3_flag(tp, HW_AUTONEG)) 5190 current_link_up = tg3_setup_fiber_hw_autoneg(tp, mac_status); 5191 else 5192 current_link_up = tg3_setup_fiber_by_hand(tp, mac_status); 5193 5194 tp->napi[0].hw_status->status = 5195 (SD_STATUS_UPDATED | 5196 (tp->napi[0].hw_status->status & ~SD_STATUS_LINK_CHG)); 5197 5198 for (i = 0; i < 100; i++) { 5199 tw32_f(MAC_STATUS, (MAC_STATUS_SYNC_CHANGED | 5200 MAC_STATUS_CFG_CHANGED)); 5201 udelay(5); 5202 if ((tr32(MAC_STATUS) & (MAC_STATUS_SYNC_CHANGED | 5203 MAC_STATUS_CFG_CHANGED | 5204 MAC_STATUS_LNKSTATE_CHANGED)) == 0) 5205 break; 5206 } 5207 5208 mac_status = tr32(MAC_STATUS); 5209 if ((mac_status & MAC_STATUS_PCS_SYNCED) == 0) { 5210 current_link_up = 0; 5211 if (tp->link_config.autoneg == AUTONEG_ENABLE && 5212 tp->serdes_counter == 0) { 5213 tw32_f(MAC_MODE, (tp->mac_mode | 5214 MAC_MODE_SEND_CONFIGS)); 5215 udelay(1); 5216 tw32_f(MAC_MODE, tp->mac_mode); 5217 } 5218 } 5219 5220 if (current_link_up == 1) { 5221 tp->link_config.active_speed = SPEED_1000; 5222 tp->link_config.active_duplex = DUPLEX_FULL; 5223 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5224 LED_CTRL_LNKLED_OVERRIDE | 5225 LED_CTRL_1000MBPS_ON)); 5226 } else { 5227 tp->link_config.active_speed = SPEED_UNKNOWN; 5228 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 5229 tw32(MAC_LED_CTRL, (tp->led_ctrl | 5230 LED_CTRL_LNKLED_OVERRIDE | 5231 LED_CTRL_TRAFFIC_OVERRIDE)); 5232 } 5233 5234 if (!tg3_test_and_report_link_chg(tp, current_link_up)) { 5235 u32 now_pause_cfg = tp->link_config.active_flowctrl; 5236 if (orig_pause_cfg != now_pause_cfg || 5237 orig_active_speed != tp->link_config.active_speed || 5238 orig_active_duplex != tp->link_config.active_duplex) 5239 tg3_link_report(tp); 5240 } 5241 5242 return 0; 5243 } 5244 5245 static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset) 5246 { 5247 int current_link_up, err = 0; 5248 u32 bmsr, bmcr; 5249 u16 current_speed; 5250 u8 current_duplex; 5251 u32 local_adv, remote_adv; 5252 5253 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 5254 tw32_f(MAC_MODE, tp->mac_mode); 5255 udelay(40); 5256 5257 tw32(MAC_EVENT, 0); 5258 5259 tw32_f(MAC_STATUS, 5260 (MAC_STATUS_SYNC_CHANGED | 5261 MAC_STATUS_CFG_CHANGED | 5262 MAC_STATUS_MI_COMPLETION | 5263 MAC_STATUS_LNKSTATE_CHANGED)); 5264 udelay(40); 5265 5266 if (force_reset) 5267 tg3_phy_reset(tp); 5268 5269 current_link_up = 0; 5270 current_speed = SPEED_UNKNOWN; 5271 current_duplex = DUPLEX_UNKNOWN; 5272 tp->link_config.rmt_adv = 0; 5273 5274 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5275 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5276 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 5277 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5278 bmsr |= BMSR_LSTATUS; 5279 else 5280 bmsr &= ~BMSR_LSTATUS; 5281 } 5282 5283 err |= tg3_readphy(tp, MII_BMCR, &bmcr); 5284 5285 if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset && 5286 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5287 /* do nothing, just check for link up at the end */ 5288 } else if (tp->link_config.autoneg == AUTONEG_ENABLE) { 5289 u32 adv, newadv; 5290 5291 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5292 newadv = adv & ~(ADVERTISE_1000XFULL | ADVERTISE_1000XHALF | 5293 ADVERTISE_1000XPAUSE | 5294 ADVERTISE_1000XPSE_ASYM | 5295 ADVERTISE_SLCT); 5296 5297 newadv |= tg3_advert_flowctrl_1000X(tp->link_config.flowctrl); 5298 newadv |= ethtool_adv_to_mii_adv_x(tp->link_config.advertising); 5299 5300 if ((newadv != adv) || !(bmcr & BMCR_ANENABLE)) { 5301 tg3_writephy(tp, MII_ADVERTISE, newadv); 5302 bmcr |= BMCR_ANENABLE | BMCR_ANRESTART; 5303 tg3_writephy(tp, MII_BMCR, bmcr); 5304 5305 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5306 tp->serdes_counter = SERDES_AN_TIMEOUT_5714S; 5307 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5308 5309 return err; 5310 } 5311 } else { 5312 u32 new_bmcr; 5313 5314 bmcr &= ~BMCR_SPEED1000; 5315 new_bmcr = bmcr & ~(BMCR_ANENABLE | BMCR_FULLDPLX); 5316 5317 if (tp->link_config.duplex == DUPLEX_FULL) 5318 new_bmcr |= BMCR_FULLDPLX; 5319 5320 if (new_bmcr != bmcr) { 5321 /* BMCR_SPEED1000 is a reserved bit that needs 5322 * to be set on write. 5323 */ 5324 new_bmcr |= BMCR_SPEED1000; 5325 5326 /* Force a linkdown */ 5327 if (tp->link_up) { 5328 u32 adv; 5329 5330 err |= tg3_readphy(tp, MII_ADVERTISE, &adv); 5331 adv &= ~(ADVERTISE_1000XFULL | 5332 ADVERTISE_1000XHALF | 5333 ADVERTISE_SLCT); 5334 tg3_writephy(tp, MII_ADVERTISE, adv); 5335 tg3_writephy(tp, MII_BMCR, bmcr | 5336 BMCR_ANRESTART | 5337 BMCR_ANENABLE); 5338 udelay(10); 5339 tg3_carrier_off(tp); 5340 } 5341 tg3_writephy(tp, MII_BMCR, new_bmcr); 5342 bmcr = new_bmcr; 5343 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5344 err |= tg3_readphy(tp, MII_BMSR, &bmsr); 5345 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 5346 ASIC_REV_5714) { 5347 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 5348 bmsr |= BMSR_LSTATUS; 5349 else 5350 bmsr &= ~BMSR_LSTATUS; 5351 } 5352 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5353 } 5354 } 5355 5356 if (bmsr & BMSR_LSTATUS) { 5357 current_speed = SPEED_1000; 5358 current_link_up = 1; 5359 if (bmcr & BMCR_FULLDPLX) 5360 current_duplex = DUPLEX_FULL; 5361 else 5362 current_duplex = DUPLEX_HALF; 5363 5364 local_adv = 0; 5365 remote_adv = 0; 5366 5367 if (bmcr & BMCR_ANENABLE) { 5368 u32 common; 5369 5370 err |= tg3_readphy(tp, MII_ADVERTISE, &local_adv); 5371 err |= tg3_readphy(tp, MII_LPA, &remote_adv); 5372 common = local_adv & remote_adv; 5373 if (common & (ADVERTISE_1000XHALF | 5374 ADVERTISE_1000XFULL)) { 5375 if (common & ADVERTISE_1000XFULL) 5376 current_duplex = DUPLEX_FULL; 5377 else 5378 current_duplex = DUPLEX_HALF; 5379 5380 tp->link_config.rmt_adv = 5381 mii_adv_to_ethtool_adv_x(remote_adv); 5382 } else if (!tg3_flag(tp, 5780_CLASS)) { 5383 /* Link is up via parallel detect */ 5384 } else { 5385 current_link_up = 0; 5386 } 5387 } 5388 } 5389 5390 if (current_link_up == 1 && current_duplex == DUPLEX_FULL) 5391 tg3_setup_flow_control(tp, local_adv, remote_adv); 5392 5393 tp->mac_mode &= ~MAC_MODE_HALF_DUPLEX; 5394 if (tp->link_config.active_duplex == DUPLEX_HALF) 5395 tp->mac_mode |= MAC_MODE_HALF_DUPLEX; 5396 5397 tw32_f(MAC_MODE, tp->mac_mode); 5398 udelay(40); 5399 5400 tw32_f(MAC_EVENT, MAC_EVENT_LNKSTATE_CHANGED); 5401 5402 tp->link_config.active_speed = current_speed; 5403 tp->link_config.active_duplex = current_duplex; 5404 5405 tg3_test_and_report_link_chg(tp, current_link_up); 5406 return err; 5407 } 5408 5409 static void tg3_serdes_parallel_detect(struct tg3 *tp) 5410 { 5411 if (tp->serdes_counter) { 5412 /* Give autoneg time to complete. */ 5413 tp->serdes_counter--; 5414 return; 5415 } 5416 5417 if (!tp->link_up && 5418 (tp->link_config.autoneg == AUTONEG_ENABLE)) { 5419 u32 bmcr; 5420 5421 tg3_readphy(tp, MII_BMCR, &bmcr); 5422 if (bmcr & BMCR_ANENABLE) { 5423 u32 phy1, phy2; 5424 5425 /* Select shadow register 0x1f */ 5426 tg3_writephy(tp, MII_TG3_MISC_SHDW, 0x7c00); 5427 tg3_readphy(tp, MII_TG3_MISC_SHDW, &phy1); 5428 5429 /* Select expansion interrupt status register */ 5430 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 5431 MII_TG3_DSP_EXP1_INT_STAT); 5432 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 5433 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 5434 5435 if ((phy1 & 0x10) && !(phy2 & 0x20)) { 5436 /* We have signal detect and not receiving 5437 * config code words, link is up by parallel 5438 * detection. 5439 */ 5440 5441 bmcr &= ~BMCR_ANENABLE; 5442 bmcr |= BMCR_SPEED1000 | BMCR_FULLDPLX; 5443 tg3_writephy(tp, MII_BMCR, bmcr); 5444 tp->phy_flags |= TG3_PHYFLG_PARALLEL_DETECT; 5445 } 5446 } 5447 } else if (tp->link_up && 5448 (tp->link_config.autoneg == AUTONEG_ENABLE) && 5449 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT)) { 5450 u32 phy2; 5451 5452 /* Select expansion interrupt status register */ 5453 tg3_writephy(tp, MII_TG3_DSP_ADDRESS, 5454 MII_TG3_DSP_EXP1_INT_STAT); 5455 tg3_readphy(tp, MII_TG3_DSP_RW_PORT, &phy2); 5456 if (phy2 & 0x20) { 5457 u32 bmcr; 5458 5459 /* Config code words received, turn on autoneg. */ 5460 tg3_readphy(tp, MII_BMCR, &bmcr); 5461 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANENABLE); 5462 5463 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 5464 5465 } 5466 } 5467 } 5468 5469 static int tg3_setup_phy(struct tg3 *tp, int force_reset) 5470 { 5471 u32 val; 5472 int err; 5473 5474 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 5475 err = tg3_setup_fiber_phy(tp, force_reset); 5476 else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 5477 err = tg3_setup_fiber_mii_phy(tp, force_reset); 5478 else 5479 err = tg3_setup_copper_phy(tp, force_reset); 5480 5481 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) { 5482 u32 scale; 5483 5484 val = tr32(TG3_CPMU_CLCK_STAT) & CPMU_CLCK_STAT_MAC_CLCK_MASK; 5485 if (val == CPMU_CLCK_STAT_MAC_CLCK_62_5) 5486 scale = 65; 5487 else if (val == CPMU_CLCK_STAT_MAC_CLCK_6_25) 5488 scale = 6; 5489 else 5490 scale = 12; 5491 5492 val = tr32(GRC_MISC_CFG) & ~GRC_MISC_CFG_PRESCALAR_MASK; 5493 val |= (scale << GRC_MISC_CFG_PRESCALAR_SHIFT); 5494 tw32(GRC_MISC_CFG, val); 5495 } 5496 5497 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 5498 (6 << TX_LENGTHS_IPG_SHIFT); 5499 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 5500 val |= tr32(MAC_TX_LENGTHS) & 5501 (TX_LENGTHS_JMB_FRM_LEN_MSK | 5502 TX_LENGTHS_CNT_DWN_VAL_MSK); 5503 5504 if (tp->link_config.active_speed == SPEED_1000 && 5505 tp->link_config.active_duplex == DUPLEX_HALF) 5506 tw32(MAC_TX_LENGTHS, val | 5507 (0xff << TX_LENGTHS_SLOT_TIME_SHIFT)); 5508 else 5509 tw32(MAC_TX_LENGTHS, val | 5510 (32 << TX_LENGTHS_SLOT_TIME_SHIFT)); 5511 5512 if (!tg3_flag(tp, 5705_PLUS)) { 5513 if (tp->link_up) { 5514 tw32(HOSTCC_STAT_COAL_TICKS, 5515 tp->coal.stats_block_coalesce_usecs); 5516 } else { 5517 tw32(HOSTCC_STAT_COAL_TICKS, 0); 5518 } 5519 } 5520 5521 if (tg3_flag(tp, ASPM_WORKAROUND)) { 5522 val = tr32(PCIE_PWR_MGMT_THRESH); 5523 if (!tp->link_up) 5524 val = (val & ~PCIE_PWR_MGMT_L1_THRESH_MSK) | 5525 tp->pwrmgmt_thresh; 5526 else 5527 val |= PCIE_PWR_MGMT_L1_THRESH_MSK; 5528 tw32(PCIE_PWR_MGMT_THRESH, val); 5529 } 5530 5531 return err; 5532 } 5533 5534 /* tp->lock must be held */ 5535 static u64 tg3_refclk_read(struct tg3 *tp) 5536 { 5537 u64 stamp = tr32(TG3_EAV_REF_CLCK_LSB); 5538 return stamp | (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32; 5539 } 5540 5541 /* tp->lock must be held */ 5542 static void tg3_refclk_write(struct tg3 *tp, u64 newval) 5543 { 5544 tw32(TG3_EAV_REF_CLCK_CTL, TG3_EAV_REF_CLCK_CTL_STOP); 5545 tw32(TG3_EAV_REF_CLCK_LSB, newval & 0xffffffff); 5546 tw32(TG3_EAV_REF_CLCK_MSB, newval >> 32); 5547 tw32_f(TG3_EAV_REF_CLCK_CTL, TG3_EAV_REF_CLCK_CTL_RESUME); 5548 } 5549 5550 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync); 5551 static inline void tg3_full_unlock(struct tg3 *tp); 5552 static int tg3_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info) 5553 { 5554 struct tg3 *tp = netdev_priv(dev); 5555 5556 info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE | 5557 SOF_TIMESTAMPING_RX_SOFTWARE | 5558 SOF_TIMESTAMPING_SOFTWARE | 5559 SOF_TIMESTAMPING_TX_HARDWARE | 5560 SOF_TIMESTAMPING_RX_HARDWARE | 5561 SOF_TIMESTAMPING_RAW_HARDWARE; 5562 5563 if (tp->ptp_clock) 5564 info->phc_index = ptp_clock_index(tp->ptp_clock); 5565 else 5566 info->phc_index = -1; 5567 5568 info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON); 5569 5570 info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) | 5571 (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) | 5572 (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) | 5573 (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT); 5574 return 0; 5575 } 5576 5577 static int tg3_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb) 5578 { 5579 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 5580 bool neg_adj = false; 5581 u32 correction = 0; 5582 5583 if (ppb < 0) { 5584 neg_adj = true; 5585 ppb = -ppb; 5586 } 5587 5588 /* Frequency adjustment is performed using hardware with a 24 bit 5589 * accumulator and a programmable correction value. On each clk, the 5590 * correction value gets added to the accumulator and when it 5591 * overflows, the time counter is incremented/decremented. 5592 * 5593 * So conversion from ppb to correction value is 5594 * ppb * (1 << 24) / 1000000000 5595 */ 5596 correction = div_u64((u64)ppb * (1 << 24), 1000000000ULL) & 5597 TG3_EAV_REF_CLK_CORRECT_MASK; 5598 5599 tg3_full_lock(tp, 0); 5600 5601 if (correction) 5602 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 5603 TG3_EAV_REF_CLK_CORRECT_EN | 5604 (neg_adj ? TG3_EAV_REF_CLK_CORRECT_NEG : 0) | correction); 5605 else 5606 tw32(TG3_EAV_REF_CLK_CORRECT_CTL, 0); 5607 5608 tg3_full_unlock(tp); 5609 5610 return 0; 5611 } 5612 5613 static int tg3_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) 5614 { 5615 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 5616 5617 tg3_full_lock(tp, 0); 5618 tp->ptp_adjust += delta; 5619 tg3_full_unlock(tp); 5620 5621 return 0; 5622 } 5623 5624 static int tg3_ptp_gettime(struct ptp_clock_info *ptp, struct timespec *ts) 5625 { 5626 u64 ns; 5627 u32 remainder; 5628 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 5629 5630 tg3_full_lock(tp, 0); 5631 ns = tg3_refclk_read(tp); 5632 ns += tp->ptp_adjust; 5633 tg3_full_unlock(tp); 5634 5635 ts->tv_sec = div_u64_rem(ns, 1000000000, &remainder); 5636 ts->tv_nsec = remainder; 5637 5638 return 0; 5639 } 5640 5641 static int tg3_ptp_settime(struct ptp_clock_info *ptp, 5642 const struct timespec *ts) 5643 { 5644 u64 ns; 5645 struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); 5646 5647 ns = timespec_to_ns(ts); 5648 5649 tg3_full_lock(tp, 0); 5650 tg3_refclk_write(tp, ns); 5651 tp->ptp_adjust = 0; 5652 tg3_full_unlock(tp); 5653 5654 return 0; 5655 } 5656 5657 static int tg3_ptp_enable(struct ptp_clock_info *ptp, 5658 struct ptp_clock_request *rq, int on) 5659 { 5660 return -EOPNOTSUPP; 5661 } 5662 5663 static const struct ptp_clock_info tg3_ptp_caps = { 5664 .owner = THIS_MODULE, 5665 .name = "tg3 clock", 5666 .max_adj = 250000000, 5667 .n_alarm = 0, 5668 .n_ext_ts = 0, 5669 .n_per_out = 0, 5670 .pps = 0, 5671 .adjfreq = tg3_ptp_adjfreq, 5672 .adjtime = tg3_ptp_adjtime, 5673 .gettime = tg3_ptp_gettime, 5674 .settime = tg3_ptp_settime, 5675 .enable = tg3_ptp_enable, 5676 }; 5677 5678 static void tg3_hwclock_to_timestamp(struct tg3 *tp, u64 hwclock, 5679 struct skb_shared_hwtstamps *timestamp) 5680 { 5681 memset(timestamp, 0, sizeof(struct skb_shared_hwtstamps)); 5682 timestamp->hwtstamp = ns_to_ktime((hwclock & TG3_TSTAMP_MASK) + 5683 tp->ptp_adjust); 5684 } 5685 5686 /* tp->lock must be held */ 5687 static void tg3_ptp_init(struct tg3 *tp) 5688 { 5689 if (!tg3_flag(tp, PTP_CAPABLE)) 5690 return; 5691 5692 /* Initialize the hardware clock to the system time. */ 5693 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real())); 5694 tp->ptp_adjust = 0; 5695 tp->ptp_info = tg3_ptp_caps; 5696 } 5697 5698 /* tp->lock must be held */ 5699 static void tg3_ptp_resume(struct tg3 *tp) 5700 { 5701 if (!tg3_flag(tp, PTP_CAPABLE)) 5702 return; 5703 5704 tg3_refclk_write(tp, ktime_to_ns(ktime_get_real()) + tp->ptp_adjust); 5705 tp->ptp_adjust = 0; 5706 } 5707 5708 static void tg3_ptp_fini(struct tg3 *tp) 5709 { 5710 if (!tg3_flag(tp, PTP_CAPABLE) || !tp->ptp_clock) 5711 return; 5712 5713 ptp_clock_unregister(tp->ptp_clock); 5714 tp->ptp_clock = NULL; 5715 tp->ptp_adjust = 0; 5716 } 5717 5718 static inline int tg3_irq_sync(struct tg3 *tp) 5719 { 5720 return tp->irq_sync; 5721 } 5722 5723 static inline void tg3_rd32_loop(struct tg3 *tp, u32 *dst, u32 off, u32 len) 5724 { 5725 int i; 5726 5727 dst = (u32 *)((u8 *)dst + off); 5728 for (i = 0; i < len; i += sizeof(u32)) 5729 *dst++ = tr32(off + i); 5730 } 5731 5732 static void tg3_dump_legacy_regs(struct tg3 *tp, u32 *regs) 5733 { 5734 tg3_rd32_loop(tp, regs, TG3PCI_VENDOR, 0xb0); 5735 tg3_rd32_loop(tp, regs, MAILBOX_INTERRUPT_0, 0x200); 5736 tg3_rd32_loop(tp, regs, MAC_MODE, 0x4f0); 5737 tg3_rd32_loop(tp, regs, SNDDATAI_MODE, 0xe0); 5738 tg3_rd32_loop(tp, regs, SNDDATAC_MODE, 0x04); 5739 tg3_rd32_loop(tp, regs, SNDBDS_MODE, 0x80); 5740 tg3_rd32_loop(tp, regs, SNDBDI_MODE, 0x48); 5741 tg3_rd32_loop(tp, regs, SNDBDC_MODE, 0x04); 5742 tg3_rd32_loop(tp, regs, RCVLPC_MODE, 0x20); 5743 tg3_rd32_loop(tp, regs, RCVLPC_SELLST_BASE, 0x15c); 5744 tg3_rd32_loop(tp, regs, RCVDBDI_MODE, 0x0c); 5745 tg3_rd32_loop(tp, regs, RCVDBDI_JUMBO_BD, 0x3c); 5746 tg3_rd32_loop(tp, regs, RCVDBDI_BD_PROD_IDX_0, 0x44); 5747 tg3_rd32_loop(tp, regs, RCVDCC_MODE, 0x04); 5748 tg3_rd32_loop(tp, regs, RCVBDI_MODE, 0x20); 5749 tg3_rd32_loop(tp, regs, RCVCC_MODE, 0x14); 5750 tg3_rd32_loop(tp, regs, RCVLSC_MODE, 0x08); 5751 tg3_rd32_loop(tp, regs, MBFREE_MODE, 0x08); 5752 tg3_rd32_loop(tp, regs, HOSTCC_MODE, 0x100); 5753 5754 if (tg3_flag(tp, SUPPORT_MSIX)) 5755 tg3_rd32_loop(tp, regs, HOSTCC_RXCOL_TICKS_VEC1, 0x180); 5756 5757 tg3_rd32_loop(tp, regs, MEMARB_MODE, 0x10); 5758 tg3_rd32_loop(tp, regs, BUFMGR_MODE, 0x58); 5759 tg3_rd32_loop(tp, regs, RDMAC_MODE, 0x08); 5760 tg3_rd32_loop(tp, regs, WDMAC_MODE, 0x08); 5761 tg3_rd32_loop(tp, regs, RX_CPU_MODE, 0x04); 5762 tg3_rd32_loop(tp, regs, RX_CPU_STATE, 0x04); 5763 tg3_rd32_loop(tp, regs, RX_CPU_PGMCTR, 0x04); 5764 tg3_rd32_loop(tp, regs, RX_CPU_HWBKPT, 0x04); 5765 5766 if (!tg3_flag(tp, 5705_PLUS)) { 5767 tg3_rd32_loop(tp, regs, TX_CPU_MODE, 0x04); 5768 tg3_rd32_loop(tp, regs, TX_CPU_STATE, 0x04); 5769 tg3_rd32_loop(tp, regs, TX_CPU_PGMCTR, 0x04); 5770 } 5771 5772 tg3_rd32_loop(tp, regs, GRCMBOX_INTERRUPT_0, 0x110); 5773 tg3_rd32_loop(tp, regs, FTQ_RESET, 0x120); 5774 tg3_rd32_loop(tp, regs, MSGINT_MODE, 0x0c); 5775 tg3_rd32_loop(tp, regs, DMAC_MODE, 0x04); 5776 tg3_rd32_loop(tp, regs, GRC_MODE, 0x4c); 5777 5778 if (tg3_flag(tp, NVRAM)) 5779 tg3_rd32_loop(tp, regs, NVRAM_CMD, 0x24); 5780 } 5781 5782 static void tg3_dump_state(struct tg3 *tp) 5783 { 5784 int i; 5785 u32 *regs; 5786 5787 regs = kzalloc(TG3_REG_BLK_SIZE, GFP_ATOMIC); 5788 if (!regs) { 5789 netdev_err(tp->dev, "Failed allocating register dump buffer\n"); 5790 return; 5791 } 5792 5793 if (tg3_flag(tp, PCI_EXPRESS)) { 5794 /* Read up to but not including private PCI registers */ 5795 for (i = 0; i < TG3_PCIE_TLDLPL_PORT; i += sizeof(u32)) 5796 regs[i / sizeof(u32)] = tr32(i); 5797 } else 5798 tg3_dump_legacy_regs(tp, regs); 5799 5800 for (i = 0; i < TG3_REG_BLK_SIZE / sizeof(u32); i += 4) { 5801 if (!regs[i + 0] && !regs[i + 1] && 5802 !regs[i + 2] && !regs[i + 3]) 5803 continue; 5804 5805 netdev_err(tp->dev, "0x%08x: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", 5806 i * 4, 5807 regs[i + 0], regs[i + 1], regs[i + 2], regs[i + 3]); 5808 } 5809 5810 kfree(regs); 5811 5812 for (i = 0; i < tp->irq_cnt; i++) { 5813 struct tg3_napi *tnapi = &tp->napi[i]; 5814 5815 /* SW status block */ 5816 netdev_err(tp->dev, 5817 "%d: Host status block [%08x:%08x:(%04x:%04x:%04x):(%04x:%04x)]\n", 5818 i, 5819 tnapi->hw_status->status, 5820 tnapi->hw_status->status_tag, 5821 tnapi->hw_status->rx_jumbo_consumer, 5822 tnapi->hw_status->rx_consumer, 5823 tnapi->hw_status->rx_mini_consumer, 5824 tnapi->hw_status->idx[0].rx_producer, 5825 tnapi->hw_status->idx[0].tx_consumer); 5826 5827 netdev_err(tp->dev, 5828 "%d: NAPI info [%08x:%08x:(%04x:%04x:%04x):%04x:(%04x:%04x:%04x:%04x)]\n", 5829 i, 5830 tnapi->last_tag, tnapi->last_irq_tag, 5831 tnapi->tx_prod, tnapi->tx_cons, tnapi->tx_pending, 5832 tnapi->rx_rcb_ptr, 5833 tnapi->prodring.rx_std_prod_idx, 5834 tnapi->prodring.rx_std_cons_idx, 5835 tnapi->prodring.rx_jmb_prod_idx, 5836 tnapi->prodring.rx_jmb_cons_idx); 5837 } 5838 } 5839 5840 /* This is called whenever we suspect that the system chipset is re- 5841 * ordering the sequence of MMIO to the tx send mailbox. The symptom 5842 * is bogus tx completions. We try to recover by setting the 5843 * TG3_FLAG_MBOX_WRITE_REORDER flag and resetting the chip later 5844 * in the workqueue. 5845 */ 5846 static void tg3_tx_recover(struct tg3 *tp) 5847 { 5848 BUG_ON(tg3_flag(tp, MBOX_WRITE_REORDER) || 5849 tp->write32_tx_mbox == tg3_write_indirect_mbox); 5850 5851 netdev_warn(tp->dev, 5852 "The system may be re-ordering memory-mapped I/O " 5853 "cycles to the network device, attempting to recover. " 5854 "Please report the problem to the driver maintainer " 5855 "and include system chipset information.\n"); 5856 5857 spin_lock(&tp->lock); 5858 tg3_flag_set(tp, TX_RECOVERY_PENDING); 5859 spin_unlock(&tp->lock); 5860 } 5861 5862 static inline u32 tg3_tx_avail(struct tg3_napi *tnapi) 5863 { 5864 /* Tell compiler to fetch tx indices from memory. */ 5865 barrier(); 5866 return tnapi->tx_pending - 5867 ((tnapi->tx_prod - tnapi->tx_cons) & (TG3_TX_RING_SIZE - 1)); 5868 } 5869 5870 /* Tigon3 never reports partial packet sends. So we do not 5871 * need special logic to handle SKBs that have not had all 5872 * of their frags sent yet, like SunGEM does. 5873 */ 5874 static void tg3_tx(struct tg3_napi *tnapi) 5875 { 5876 struct tg3 *tp = tnapi->tp; 5877 u32 hw_idx = tnapi->hw_status->idx[0].tx_consumer; 5878 u32 sw_idx = tnapi->tx_cons; 5879 struct netdev_queue *txq; 5880 int index = tnapi - tp->napi; 5881 unsigned int pkts_compl = 0, bytes_compl = 0; 5882 5883 if (tg3_flag(tp, ENABLE_TSS)) 5884 index--; 5885 5886 txq = netdev_get_tx_queue(tp->dev, index); 5887 5888 while (sw_idx != hw_idx) { 5889 struct tg3_tx_ring_info *ri = &tnapi->tx_buffers[sw_idx]; 5890 struct sk_buff *skb = ri->skb; 5891 int i, tx_bug = 0; 5892 5893 if (unlikely(skb == NULL)) { 5894 tg3_tx_recover(tp); 5895 return; 5896 } 5897 5898 if (tnapi->tx_ring[sw_idx].len_flags & TXD_FLAG_HWTSTAMP) { 5899 struct skb_shared_hwtstamps timestamp; 5900 u64 hwclock = tr32(TG3_TX_TSTAMP_LSB); 5901 hwclock |= (u64)tr32(TG3_TX_TSTAMP_MSB) << 32; 5902 5903 tg3_hwclock_to_timestamp(tp, hwclock, ×tamp); 5904 5905 skb_tstamp_tx(skb, ×tamp); 5906 } 5907 5908 pci_unmap_single(tp->pdev, 5909 dma_unmap_addr(ri, mapping), 5910 skb_headlen(skb), 5911 PCI_DMA_TODEVICE); 5912 5913 ri->skb = NULL; 5914 5915 while (ri->fragmented) { 5916 ri->fragmented = false; 5917 sw_idx = NEXT_TX(sw_idx); 5918 ri = &tnapi->tx_buffers[sw_idx]; 5919 } 5920 5921 sw_idx = NEXT_TX(sw_idx); 5922 5923 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 5924 ri = &tnapi->tx_buffers[sw_idx]; 5925 if (unlikely(ri->skb != NULL || sw_idx == hw_idx)) 5926 tx_bug = 1; 5927 5928 pci_unmap_page(tp->pdev, 5929 dma_unmap_addr(ri, mapping), 5930 skb_frag_size(&skb_shinfo(skb)->frags[i]), 5931 PCI_DMA_TODEVICE); 5932 5933 while (ri->fragmented) { 5934 ri->fragmented = false; 5935 sw_idx = NEXT_TX(sw_idx); 5936 ri = &tnapi->tx_buffers[sw_idx]; 5937 } 5938 5939 sw_idx = NEXT_TX(sw_idx); 5940 } 5941 5942 pkts_compl++; 5943 bytes_compl += skb->len; 5944 5945 dev_kfree_skb(skb); 5946 5947 if (unlikely(tx_bug)) { 5948 tg3_tx_recover(tp); 5949 return; 5950 } 5951 } 5952 5953 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl); 5954 5955 tnapi->tx_cons = sw_idx; 5956 5957 /* Need to make the tx_cons update visible to tg3_start_xmit() 5958 * before checking for netif_queue_stopped(). Without the 5959 * memory barrier, there is a small possibility that tg3_start_xmit() 5960 * will miss it and cause the queue to be stopped forever. 5961 */ 5962 smp_mb(); 5963 5964 if (unlikely(netif_tx_queue_stopped(txq) && 5965 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)))) { 5966 __netif_tx_lock(txq, smp_processor_id()); 5967 if (netif_tx_queue_stopped(txq) && 5968 (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi))) 5969 netif_tx_wake_queue(txq); 5970 __netif_tx_unlock(txq); 5971 } 5972 } 5973 5974 static void tg3_frag_free(bool is_frag, void *data) 5975 { 5976 if (is_frag) 5977 put_page(virt_to_head_page(data)); 5978 else 5979 kfree(data); 5980 } 5981 5982 static void tg3_rx_data_free(struct tg3 *tp, struct ring_info *ri, u32 map_sz) 5983 { 5984 unsigned int skb_size = SKB_DATA_ALIGN(map_sz + TG3_RX_OFFSET(tp)) + 5985 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 5986 5987 if (!ri->data) 5988 return; 5989 5990 pci_unmap_single(tp->pdev, dma_unmap_addr(ri, mapping), 5991 map_sz, PCI_DMA_FROMDEVICE); 5992 tg3_frag_free(skb_size <= PAGE_SIZE, ri->data); 5993 ri->data = NULL; 5994 } 5995 5996 5997 /* Returns size of skb allocated or < 0 on error. 5998 * 5999 * We only need to fill in the address because the other members 6000 * of the RX descriptor are invariant, see tg3_init_rings. 6001 * 6002 * Note the purposeful assymetry of cpu vs. chip accesses. For 6003 * posting buffers we only dirty the first cache line of the RX 6004 * descriptor (containing the address). Whereas for the RX status 6005 * buffers the cpu only reads the last cacheline of the RX descriptor 6006 * (to fetch the error flags, vlan tag, checksum, and opaque cookie). 6007 */ 6008 static int tg3_alloc_rx_data(struct tg3 *tp, struct tg3_rx_prodring_set *tpr, 6009 u32 opaque_key, u32 dest_idx_unmasked, 6010 unsigned int *frag_size) 6011 { 6012 struct tg3_rx_buffer_desc *desc; 6013 struct ring_info *map; 6014 u8 *data; 6015 dma_addr_t mapping; 6016 int skb_size, data_size, dest_idx; 6017 6018 switch (opaque_key) { 6019 case RXD_OPAQUE_RING_STD: 6020 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6021 desc = &tpr->rx_std[dest_idx]; 6022 map = &tpr->rx_std_buffers[dest_idx]; 6023 data_size = tp->rx_pkt_map_sz; 6024 break; 6025 6026 case RXD_OPAQUE_RING_JUMBO: 6027 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6028 desc = &tpr->rx_jmb[dest_idx].std; 6029 map = &tpr->rx_jmb_buffers[dest_idx]; 6030 data_size = TG3_RX_JMB_MAP_SZ; 6031 break; 6032 6033 default: 6034 return -EINVAL; 6035 } 6036 6037 /* Do not overwrite any of the map or rp information 6038 * until we are sure we can commit to a new buffer. 6039 * 6040 * Callers depend upon this behavior and assume that 6041 * we leave everything unchanged if we fail. 6042 */ 6043 skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) + 6044 SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); 6045 if (skb_size <= PAGE_SIZE) { 6046 data = netdev_alloc_frag(skb_size); 6047 *frag_size = skb_size; 6048 } else { 6049 data = kmalloc(skb_size, GFP_ATOMIC); 6050 *frag_size = 0; 6051 } 6052 if (!data) 6053 return -ENOMEM; 6054 6055 mapping = pci_map_single(tp->pdev, 6056 data + TG3_RX_OFFSET(tp), 6057 data_size, 6058 PCI_DMA_FROMDEVICE); 6059 if (unlikely(pci_dma_mapping_error(tp->pdev, mapping))) { 6060 tg3_frag_free(skb_size <= PAGE_SIZE, data); 6061 return -EIO; 6062 } 6063 6064 map->data = data; 6065 dma_unmap_addr_set(map, mapping, mapping); 6066 6067 desc->addr_hi = ((u64)mapping >> 32); 6068 desc->addr_lo = ((u64)mapping & 0xffffffff); 6069 6070 return data_size; 6071 } 6072 6073 /* We only need to move over in the address because the other 6074 * members of the RX descriptor are invariant. See notes above 6075 * tg3_alloc_rx_data for full details. 6076 */ 6077 static void tg3_recycle_rx(struct tg3_napi *tnapi, 6078 struct tg3_rx_prodring_set *dpr, 6079 u32 opaque_key, int src_idx, 6080 u32 dest_idx_unmasked) 6081 { 6082 struct tg3 *tp = tnapi->tp; 6083 struct tg3_rx_buffer_desc *src_desc, *dest_desc; 6084 struct ring_info *src_map, *dest_map; 6085 struct tg3_rx_prodring_set *spr = &tp->napi[0].prodring; 6086 int dest_idx; 6087 6088 switch (opaque_key) { 6089 case RXD_OPAQUE_RING_STD: 6090 dest_idx = dest_idx_unmasked & tp->rx_std_ring_mask; 6091 dest_desc = &dpr->rx_std[dest_idx]; 6092 dest_map = &dpr->rx_std_buffers[dest_idx]; 6093 src_desc = &spr->rx_std[src_idx]; 6094 src_map = &spr->rx_std_buffers[src_idx]; 6095 break; 6096 6097 case RXD_OPAQUE_RING_JUMBO: 6098 dest_idx = dest_idx_unmasked & tp->rx_jmb_ring_mask; 6099 dest_desc = &dpr->rx_jmb[dest_idx].std; 6100 dest_map = &dpr->rx_jmb_buffers[dest_idx]; 6101 src_desc = &spr->rx_jmb[src_idx].std; 6102 src_map = &spr->rx_jmb_buffers[src_idx]; 6103 break; 6104 6105 default: 6106 return; 6107 } 6108 6109 dest_map->data = src_map->data; 6110 dma_unmap_addr_set(dest_map, mapping, 6111 dma_unmap_addr(src_map, mapping)); 6112 dest_desc->addr_hi = src_desc->addr_hi; 6113 dest_desc->addr_lo = src_desc->addr_lo; 6114 6115 /* Ensure that the update to the skb happens after the physical 6116 * addresses have been transferred to the new BD location. 6117 */ 6118 smp_wmb(); 6119 6120 src_map->data = NULL; 6121 } 6122 6123 /* The RX ring scheme is composed of multiple rings which post fresh 6124 * buffers to the chip, and one special ring the chip uses to report 6125 * status back to the host. 6126 * 6127 * The special ring reports the status of received packets to the 6128 * host. The chip does not write into the original descriptor the 6129 * RX buffer was obtained from. The chip simply takes the original 6130 * descriptor as provided by the host, updates the status and length 6131 * field, then writes this into the next status ring entry. 6132 * 6133 * Each ring the host uses to post buffers to the chip is described 6134 * by a TG3_BDINFO entry in the chips SRAM area. When a packet arrives, 6135 * it is first placed into the on-chip ram. When the packet's length 6136 * is known, it walks down the TG3_BDINFO entries to select the ring. 6137 * Each TG3_BDINFO specifies a MAXLEN field and the first TG3_BDINFO 6138 * which is within the range of the new packet's length is chosen. 6139 * 6140 * The "separate ring for rx status" scheme may sound queer, but it makes 6141 * sense from a cache coherency perspective. If only the host writes 6142 * to the buffer post rings, and only the chip writes to the rx status 6143 * rings, then cache lines never move beyond shared-modified state. 6144 * If both the host and chip were to write into the same ring, cache line 6145 * eviction could occur since both entities want it in an exclusive state. 6146 */ 6147 static int tg3_rx(struct tg3_napi *tnapi, int budget) 6148 { 6149 struct tg3 *tp = tnapi->tp; 6150 u32 work_mask, rx_std_posted = 0; 6151 u32 std_prod_idx, jmb_prod_idx; 6152 u32 sw_idx = tnapi->rx_rcb_ptr; 6153 u16 hw_idx; 6154 int received; 6155 struct tg3_rx_prodring_set *tpr = &tnapi->prodring; 6156 6157 hw_idx = *(tnapi->rx_rcb_prod_idx); 6158 /* 6159 * We need to order the read of hw_idx and the read of 6160 * the opaque cookie. 6161 */ 6162 rmb(); 6163 work_mask = 0; 6164 received = 0; 6165 std_prod_idx = tpr->rx_std_prod_idx; 6166 jmb_prod_idx = tpr->rx_jmb_prod_idx; 6167 while (sw_idx != hw_idx && budget > 0) { 6168 struct ring_info *ri; 6169 struct tg3_rx_buffer_desc *desc = &tnapi->rx_rcb[sw_idx]; 6170 unsigned int len; 6171 struct sk_buff *skb; 6172 dma_addr_t dma_addr; 6173 u32 opaque_key, desc_idx, *post_ptr; 6174 u8 *data; 6175 u64 tstamp = 0; 6176 6177 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 6178 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 6179 if (opaque_key == RXD_OPAQUE_RING_STD) { 6180 ri = &tp->napi[0].prodring.rx_std_buffers[desc_idx]; 6181 dma_addr = dma_unmap_addr(ri, mapping); 6182 data = ri->data; 6183 post_ptr = &std_prod_idx; 6184 rx_std_posted++; 6185 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 6186 ri = &tp->napi[0].prodring.rx_jmb_buffers[desc_idx]; 6187 dma_addr = dma_unmap_addr(ri, mapping); 6188 data = ri->data; 6189 post_ptr = &jmb_prod_idx; 6190 } else 6191 goto next_pkt_nopost; 6192 6193 work_mask |= opaque_key; 6194 6195 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 6196 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) { 6197 drop_it: 6198 tg3_recycle_rx(tnapi, tpr, opaque_key, 6199 desc_idx, *post_ptr); 6200 drop_it_no_recycle: 6201 /* Other statistics kept track of by card. */ 6202 tp->rx_dropped++; 6203 goto next_pkt; 6204 } 6205 6206 prefetch(data + TG3_RX_OFFSET(tp)); 6207 len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 6208 ETH_FCS_LEN; 6209 6210 if ((desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6211 RXD_FLAG_PTPSTAT_PTPV1 || 6212 (desc->type_flags & RXD_FLAG_PTPSTAT_MASK) == 6213 RXD_FLAG_PTPSTAT_PTPV2) { 6214 tstamp = tr32(TG3_RX_TSTAMP_LSB); 6215 tstamp |= (u64)tr32(TG3_RX_TSTAMP_MSB) << 32; 6216 } 6217 6218 if (len > TG3_RX_COPY_THRESH(tp)) { 6219 int skb_size; 6220 unsigned int frag_size; 6221 6222 skb_size = tg3_alloc_rx_data(tp, tpr, opaque_key, 6223 *post_ptr, &frag_size); 6224 if (skb_size < 0) 6225 goto drop_it; 6226 6227 pci_unmap_single(tp->pdev, dma_addr, skb_size, 6228 PCI_DMA_FROMDEVICE); 6229 6230 skb = build_skb(data, frag_size); 6231 if (!skb) { 6232 tg3_frag_free(frag_size != 0, data); 6233 goto drop_it_no_recycle; 6234 } 6235 skb_reserve(skb, TG3_RX_OFFSET(tp)); 6236 /* Ensure that the update to the data happens 6237 * after the usage of the old DMA mapping. 6238 */ 6239 smp_wmb(); 6240 6241 ri->data = NULL; 6242 6243 } else { 6244 tg3_recycle_rx(tnapi, tpr, opaque_key, 6245 desc_idx, *post_ptr); 6246 6247 skb = netdev_alloc_skb(tp->dev, 6248 len + TG3_RAW_IP_ALIGN); 6249 if (skb == NULL) 6250 goto drop_it_no_recycle; 6251 6252 skb_reserve(skb, TG3_RAW_IP_ALIGN); 6253 pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 6254 memcpy(skb->data, 6255 data + TG3_RX_OFFSET(tp), 6256 len); 6257 pci_dma_sync_single_for_device(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); 6258 } 6259 6260 skb_put(skb, len); 6261 if (tstamp) 6262 tg3_hwclock_to_timestamp(tp, tstamp, 6263 skb_hwtstamps(skb)); 6264 6265 if ((tp->dev->features & NETIF_F_RXCSUM) && 6266 (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 6267 (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 6268 >> RXD_TCPCSUM_SHIFT) == 0xffff)) 6269 skb->ip_summed = CHECKSUM_UNNECESSARY; 6270 else 6271 skb_checksum_none_assert(skb); 6272 6273 skb->protocol = eth_type_trans(skb, tp->dev); 6274 6275 if (len > (tp->dev->mtu + ETH_HLEN) && 6276 skb->protocol != htons(ETH_P_8021Q)) { 6277 dev_kfree_skb(skb); 6278 goto drop_it_no_recycle; 6279 } 6280 6281 if (desc->type_flags & RXD_FLAG_VLAN && 6282 !(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG)) 6283 __vlan_hwaccel_put_tag(skb, 6284 desc->err_vlan & RXD_VLAN_MASK); 6285 6286 napi_gro_receive(&tnapi->napi, skb); 6287 6288 received++; 6289 budget--; 6290 6291 next_pkt: 6292 (*post_ptr)++; 6293 6294 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 6295 tpr->rx_std_prod_idx = std_prod_idx & 6296 tp->rx_std_ring_mask; 6297 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6298 tpr->rx_std_prod_idx); 6299 work_mask &= ~RXD_OPAQUE_RING_STD; 6300 rx_std_posted = 0; 6301 } 6302 next_pkt_nopost: 6303 sw_idx++; 6304 sw_idx &= tp->rx_ret_ring_mask; 6305 6306 /* Refresh hw_idx to see if there is new work */ 6307 if (sw_idx == hw_idx) { 6308 hw_idx = *(tnapi->rx_rcb_prod_idx); 6309 rmb(); 6310 } 6311 } 6312 6313 /* ACK the status ring. */ 6314 tnapi->rx_rcb_ptr = sw_idx; 6315 tw32_rx_mbox(tnapi->consmbox, sw_idx); 6316 6317 /* Refill RX ring(s). */ 6318 if (!tg3_flag(tp, ENABLE_RSS)) { 6319 /* Sync BD data before updating mailbox */ 6320 wmb(); 6321 6322 if (work_mask & RXD_OPAQUE_RING_STD) { 6323 tpr->rx_std_prod_idx = std_prod_idx & 6324 tp->rx_std_ring_mask; 6325 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6326 tpr->rx_std_prod_idx); 6327 } 6328 if (work_mask & RXD_OPAQUE_RING_JUMBO) { 6329 tpr->rx_jmb_prod_idx = jmb_prod_idx & 6330 tp->rx_jmb_ring_mask; 6331 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 6332 tpr->rx_jmb_prod_idx); 6333 } 6334 mmiowb(); 6335 } else if (work_mask) { 6336 /* rx_std_buffers[] and rx_jmb_buffers[] entries must be 6337 * updated before the producer indices can be updated. 6338 */ 6339 smp_wmb(); 6340 6341 tpr->rx_std_prod_idx = std_prod_idx & tp->rx_std_ring_mask; 6342 tpr->rx_jmb_prod_idx = jmb_prod_idx & tp->rx_jmb_ring_mask; 6343 6344 if (tnapi != &tp->napi[1]) { 6345 tp->rx_refill = true; 6346 napi_schedule(&tp->napi[1].napi); 6347 } 6348 } 6349 6350 return received; 6351 } 6352 6353 static void tg3_poll_link(struct tg3 *tp) 6354 { 6355 /* handle link change and other phy events */ 6356 if (!(tg3_flag(tp, USE_LINKCHG_REG) || tg3_flag(tp, POLL_SERDES))) { 6357 struct tg3_hw_status *sblk = tp->napi[0].hw_status; 6358 6359 if (sblk->status & SD_STATUS_LINK_CHG) { 6360 sblk->status = SD_STATUS_UPDATED | 6361 (sblk->status & ~SD_STATUS_LINK_CHG); 6362 spin_lock(&tp->lock); 6363 if (tg3_flag(tp, USE_PHYLIB)) { 6364 tw32_f(MAC_STATUS, 6365 (MAC_STATUS_SYNC_CHANGED | 6366 MAC_STATUS_CFG_CHANGED | 6367 MAC_STATUS_MI_COMPLETION | 6368 MAC_STATUS_LNKSTATE_CHANGED)); 6369 udelay(40); 6370 } else 6371 tg3_setup_phy(tp, 0); 6372 spin_unlock(&tp->lock); 6373 } 6374 } 6375 } 6376 6377 static int tg3_rx_prodring_xfer(struct tg3 *tp, 6378 struct tg3_rx_prodring_set *dpr, 6379 struct tg3_rx_prodring_set *spr) 6380 { 6381 u32 si, di, cpycnt, src_prod_idx; 6382 int i, err = 0; 6383 6384 while (1) { 6385 src_prod_idx = spr->rx_std_prod_idx; 6386 6387 /* Make sure updates to the rx_std_buffers[] entries and the 6388 * standard producer index are seen in the correct order. 6389 */ 6390 smp_rmb(); 6391 6392 if (spr->rx_std_cons_idx == src_prod_idx) 6393 break; 6394 6395 if (spr->rx_std_cons_idx < src_prod_idx) 6396 cpycnt = src_prod_idx - spr->rx_std_cons_idx; 6397 else 6398 cpycnt = tp->rx_std_ring_mask + 1 - 6399 spr->rx_std_cons_idx; 6400 6401 cpycnt = min(cpycnt, 6402 tp->rx_std_ring_mask + 1 - dpr->rx_std_prod_idx); 6403 6404 si = spr->rx_std_cons_idx; 6405 di = dpr->rx_std_prod_idx; 6406 6407 for (i = di; i < di + cpycnt; i++) { 6408 if (dpr->rx_std_buffers[i].data) { 6409 cpycnt = i - di; 6410 err = -ENOSPC; 6411 break; 6412 } 6413 } 6414 6415 if (!cpycnt) 6416 break; 6417 6418 /* Ensure that updates to the rx_std_buffers ring and the 6419 * shadowed hardware producer ring from tg3_recycle_skb() are 6420 * ordered correctly WRT the skb check above. 6421 */ 6422 smp_rmb(); 6423 6424 memcpy(&dpr->rx_std_buffers[di], 6425 &spr->rx_std_buffers[si], 6426 cpycnt * sizeof(struct ring_info)); 6427 6428 for (i = 0; i < cpycnt; i++, di++, si++) { 6429 struct tg3_rx_buffer_desc *sbd, *dbd; 6430 sbd = &spr->rx_std[si]; 6431 dbd = &dpr->rx_std[di]; 6432 dbd->addr_hi = sbd->addr_hi; 6433 dbd->addr_lo = sbd->addr_lo; 6434 } 6435 6436 spr->rx_std_cons_idx = (spr->rx_std_cons_idx + cpycnt) & 6437 tp->rx_std_ring_mask; 6438 dpr->rx_std_prod_idx = (dpr->rx_std_prod_idx + cpycnt) & 6439 tp->rx_std_ring_mask; 6440 } 6441 6442 while (1) { 6443 src_prod_idx = spr->rx_jmb_prod_idx; 6444 6445 /* Make sure updates to the rx_jmb_buffers[] entries and 6446 * the jumbo producer index are seen in the correct order. 6447 */ 6448 smp_rmb(); 6449 6450 if (spr->rx_jmb_cons_idx == src_prod_idx) 6451 break; 6452 6453 if (spr->rx_jmb_cons_idx < src_prod_idx) 6454 cpycnt = src_prod_idx - spr->rx_jmb_cons_idx; 6455 else 6456 cpycnt = tp->rx_jmb_ring_mask + 1 - 6457 spr->rx_jmb_cons_idx; 6458 6459 cpycnt = min(cpycnt, 6460 tp->rx_jmb_ring_mask + 1 - dpr->rx_jmb_prod_idx); 6461 6462 si = spr->rx_jmb_cons_idx; 6463 di = dpr->rx_jmb_prod_idx; 6464 6465 for (i = di; i < di + cpycnt; i++) { 6466 if (dpr->rx_jmb_buffers[i].data) { 6467 cpycnt = i - di; 6468 err = -ENOSPC; 6469 break; 6470 } 6471 } 6472 6473 if (!cpycnt) 6474 break; 6475 6476 /* Ensure that updates to the rx_jmb_buffers ring and the 6477 * shadowed hardware producer ring from tg3_recycle_skb() are 6478 * ordered correctly WRT the skb check above. 6479 */ 6480 smp_rmb(); 6481 6482 memcpy(&dpr->rx_jmb_buffers[di], 6483 &spr->rx_jmb_buffers[si], 6484 cpycnt * sizeof(struct ring_info)); 6485 6486 for (i = 0; i < cpycnt; i++, di++, si++) { 6487 struct tg3_rx_buffer_desc *sbd, *dbd; 6488 sbd = &spr->rx_jmb[si].std; 6489 dbd = &dpr->rx_jmb[di].std; 6490 dbd->addr_hi = sbd->addr_hi; 6491 dbd->addr_lo = sbd->addr_lo; 6492 } 6493 6494 spr->rx_jmb_cons_idx = (spr->rx_jmb_cons_idx + cpycnt) & 6495 tp->rx_jmb_ring_mask; 6496 dpr->rx_jmb_prod_idx = (dpr->rx_jmb_prod_idx + cpycnt) & 6497 tp->rx_jmb_ring_mask; 6498 } 6499 6500 return err; 6501 } 6502 6503 static int tg3_poll_work(struct tg3_napi *tnapi, int work_done, int budget) 6504 { 6505 struct tg3 *tp = tnapi->tp; 6506 6507 /* run TX completion thread */ 6508 if (tnapi->hw_status->idx[0].tx_consumer != tnapi->tx_cons) { 6509 tg3_tx(tnapi); 6510 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 6511 return work_done; 6512 } 6513 6514 if (!tnapi->rx_rcb_prod_idx) 6515 return work_done; 6516 6517 /* run RX thread, within the bounds set by NAPI. 6518 * All RX "locking" is done by ensuring outside 6519 * code synchronizes with tg3->napi.poll() 6520 */ 6521 if (*(tnapi->rx_rcb_prod_idx) != tnapi->rx_rcb_ptr) 6522 work_done += tg3_rx(tnapi, budget - work_done); 6523 6524 if (tg3_flag(tp, ENABLE_RSS) && tnapi == &tp->napi[1]) { 6525 struct tg3_rx_prodring_set *dpr = &tp->napi[0].prodring; 6526 int i, err = 0; 6527 u32 std_prod_idx = dpr->rx_std_prod_idx; 6528 u32 jmb_prod_idx = dpr->rx_jmb_prod_idx; 6529 6530 tp->rx_refill = false; 6531 for (i = 1; i <= tp->rxq_cnt; i++) 6532 err |= tg3_rx_prodring_xfer(tp, dpr, 6533 &tp->napi[i].prodring); 6534 6535 wmb(); 6536 6537 if (std_prod_idx != dpr->rx_std_prod_idx) 6538 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, 6539 dpr->rx_std_prod_idx); 6540 6541 if (jmb_prod_idx != dpr->rx_jmb_prod_idx) 6542 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, 6543 dpr->rx_jmb_prod_idx); 6544 6545 mmiowb(); 6546 6547 if (err) 6548 tw32_f(HOSTCC_MODE, tp->coal_now); 6549 } 6550 6551 return work_done; 6552 } 6553 6554 static inline void tg3_reset_task_schedule(struct tg3 *tp) 6555 { 6556 if (!test_and_set_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags)) 6557 schedule_work(&tp->reset_task); 6558 } 6559 6560 static inline void tg3_reset_task_cancel(struct tg3 *tp) 6561 { 6562 cancel_work_sync(&tp->reset_task); 6563 tg3_flag_clear(tp, RESET_TASK_PENDING); 6564 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 6565 } 6566 6567 static int tg3_poll_msix(struct napi_struct *napi, int budget) 6568 { 6569 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 6570 struct tg3 *tp = tnapi->tp; 6571 int work_done = 0; 6572 struct tg3_hw_status *sblk = tnapi->hw_status; 6573 6574 while (1) { 6575 work_done = tg3_poll_work(tnapi, work_done, budget); 6576 6577 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 6578 goto tx_recovery; 6579 6580 if (unlikely(work_done >= budget)) 6581 break; 6582 6583 /* tp->last_tag is used in tg3_int_reenable() below 6584 * to tell the hw how much work has been processed, 6585 * so we must read it before checking for more work. 6586 */ 6587 tnapi->last_tag = sblk->status_tag; 6588 tnapi->last_irq_tag = tnapi->last_tag; 6589 rmb(); 6590 6591 /* check for RX/TX work to do */ 6592 if (likely(sblk->idx[0].tx_consumer == tnapi->tx_cons && 6593 *(tnapi->rx_rcb_prod_idx) == tnapi->rx_rcb_ptr)) { 6594 6595 /* This test here is not race free, but will reduce 6596 * the number of interrupts by looping again. 6597 */ 6598 if (tnapi == &tp->napi[1] && tp->rx_refill) 6599 continue; 6600 6601 napi_complete(napi); 6602 /* Reenable interrupts. */ 6603 tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); 6604 6605 /* This test here is synchronized by napi_schedule() 6606 * and napi_complete() to close the race condition. 6607 */ 6608 if (unlikely(tnapi == &tp->napi[1] && tp->rx_refill)) { 6609 tw32(HOSTCC_MODE, tp->coalesce_mode | 6610 HOSTCC_MODE_ENABLE | 6611 tnapi->coal_now); 6612 } 6613 mmiowb(); 6614 break; 6615 } 6616 } 6617 6618 return work_done; 6619 6620 tx_recovery: 6621 /* work_done is guaranteed to be less than budget. */ 6622 napi_complete(napi); 6623 tg3_reset_task_schedule(tp); 6624 return work_done; 6625 } 6626 6627 static void tg3_process_error(struct tg3 *tp) 6628 { 6629 u32 val; 6630 bool real_error = false; 6631 6632 if (tg3_flag(tp, ERROR_PROCESSED)) 6633 return; 6634 6635 /* Check Flow Attention register */ 6636 val = tr32(HOSTCC_FLOW_ATTN); 6637 if (val & ~HOSTCC_FLOW_ATTN_MBUF_LWM) { 6638 netdev_err(tp->dev, "FLOW Attention error. Resetting chip.\n"); 6639 real_error = true; 6640 } 6641 6642 if (tr32(MSGINT_STATUS) & ~MSGINT_STATUS_MSI_REQ) { 6643 netdev_err(tp->dev, "MSI Status error. Resetting chip.\n"); 6644 real_error = true; 6645 } 6646 6647 if (tr32(RDMAC_STATUS) || tr32(WDMAC_STATUS)) { 6648 netdev_err(tp->dev, "DMA Status error. Resetting chip.\n"); 6649 real_error = true; 6650 } 6651 6652 if (!real_error) 6653 return; 6654 6655 tg3_dump_state(tp); 6656 6657 tg3_flag_set(tp, ERROR_PROCESSED); 6658 tg3_reset_task_schedule(tp); 6659 } 6660 6661 static int tg3_poll(struct napi_struct *napi, int budget) 6662 { 6663 struct tg3_napi *tnapi = container_of(napi, struct tg3_napi, napi); 6664 struct tg3 *tp = tnapi->tp; 6665 int work_done = 0; 6666 struct tg3_hw_status *sblk = tnapi->hw_status; 6667 6668 while (1) { 6669 if (sblk->status & SD_STATUS_ERROR) 6670 tg3_process_error(tp); 6671 6672 tg3_poll_link(tp); 6673 6674 work_done = tg3_poll_work(tnapi, work_done, budget); 6675 6676 if (unlikely(tg3_flag(tp, TX_RECOVERY_PENDING))) 6677 goto tx_recovery; 6678 6679 if (unlikely(work_done >= budget)) 6680 break; 6681 6682 if (tg3_flag(tp, TAGGED_STATUS)) { 6683 /* tp->last_tag is used in tg3_int_reenable() below 6684 * to tell the hw how much work has been processed, 6685 * so we must read it before checking for more work. 6686 */ 6687 tnapi->last_tag = sblk->status_tag; 6688 tnapi->last_irq_tag = tnapi->last_tag; 6689 rmb(); 6690 } else 6691 sblk->status &= ~SD_STATUS_UPDATED; 6692 6693 if (likely(!tg3_has_work(tnapi))) { 6694 napi_complete(napi); 6695 tg3_int_reenable(tnapi); 6696 break; 6697 } 6698 } 6699 6700 return work_done; 6701 6702 tx_recovery: 6703 /* work_done is guaranteed to be less than budget. */ 6704 napi_complete(napi); 6705 tg3_reset_task_schedule(tp); 6706 return work_done; 6707 } 6708 6709 static void tg3_napi_disable(struct tg3 *tp) 6710 { 6711 int i; 6712 6713 for (i = tp->irq_cnt - 1; i >= 0; i--) 6714 napi_disable(&tp->napi[i].napi); 6715 } 6716 6717 static void tg3_napi_enable(struct tg3 *tp) 6718 { 6719 int i; 6720 6721 for (i = 0; i < tp->irq_cnt; i++) 6722 napi_enable(&tp->napi[i].napi); 6723 } 6724 6725 static void tg3_napi_init(struct tg3 *tp) 6726 { 6727 int i; 6728 6729 netif_napi_add(tp->dev, &tp->napi[0].napi, tg3_poll, 64); 6730 for (i = 1; i < tp->irq_cnt; i++) 6731 netif_napi_add(tp->dev, &tp->napi[i].napi, tg3_poll_msix, 64); 6732 } 6733 6734 static void tg3_napi_fini(struct tg3 *tp) 6735 { 6736 int i; 6737 6738 for (i = 0; i < tp->irq_cnt; i++) 6739 netif_napi_del(&tp->napi[i].napi); 6740 } 6741 6742 static inline void tg3_netif_stop(struct tg3 *tp) 6743 { 6744 tp->dev->trans_start = jiffies; /* prevent tx timeout */ 6745 tg3_napi_disable(tp); 6746 netif_carrier_off(tp->dev); 6747 netif_tx_disable(tp->dev); 6748 } 6749 6750 /* tp->lock must be held */ 6751 static inline void tg3_netif_start(struct tg3 *tp) 6752 { 6753 tg3_ptp_resume(tp); 6754 6755 /* NOTE: unconditional netif_tx_wake_all_queues is only 6756 * appropriate so long as all callers are assured to 6757 * have free tx slots (such as after tg3_init_hw) 6758 */ 6759 netif_tx_wake_all_queues(tp->dev); 6760 6761 if (tp->link_up) 6762 netif_carrier_on(tp->dev); 6763 6764 tg3_napi_enable(tp); 6765 tp->napi[0].hw_status->status |= SD_STATUS_UPDATED; 6766 tg3_enable_ints(tp); 6767 } 6768 6769 static void tg3_irq_quiesce(struct tg3 *tp) 6770 { 6771 int i; 6772 6773 BUG_ON(tp->irq_sync); 6774 6775 tp->irq_sync = 1; 6776 smp_mb(); 6777 6778 for (i = 0; i < tp->irq_cnt; i++) 6779 synchronize_irq(tp->napi[i].irq_vec); 6780 } 6781 6782 /* Fully shutdown all tg3 driver activity elsewhere in the system. 6783 * If irq_sync is non-zero, then the IRQ handler must be synchronized 6784 * with as well. Most of the time, this is not necessary except when 6785 * shutting down the device. 6786 */ 6787 static inline void tg3_full_lock(struct tg3 *tp, int irq_sync) 6788 { 6789 spin_lock_bh(&tp->lock); 6790 if (irq_sync) 6791 tg3_irq_quiesce(tp); 6792 } 6793 6794 static inline void tg3_full_unlock(struct tg3 *tp) 6795 { 6796 spin_unlock_bh(&tp->lock); 6797 } 6798 6799 /* One-shot MSI handler - Chip automatically disables interrupt 6800 * after sending MSI so driver doesn't have to do it. 6801 */ 6802 static irqreturn_t tg3_msi_1shot(int irq, void *dev_id) 6803 { 6804 struct tg3_napi *tnapi = dev_id; 6805 struct tg3 *tp = tnapi->tp; 6806 6807 prefetch(tnapi->hw_status); 6808 if (tnapi->rx_rcb) 6809 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6810 6811 if (likely(!tg3_irq_sync(tp))) 6812 napi_schedule(&tnapi->napi); 6813 6814 return IRQ_HANDLED; 6815 } 6816 6817 /* MSI ISR - No need to check for interrupt sharing and no need to 6818 * flush status block and interrupt mailbox. PCI ordering rules 6819 * guarantee that MSI will arrive after the status block. 6820 */ 6821 static irqreturn_t tg3_msi(int irq, void *dev_id) 6822 { 6823 struct tg3_napi *tnapi = dev_id; 6824 struct tg3 *tp = tnapi->tp; 6825 6826 prefetch(tnapi->hw_status); 6827 if (tnapi->rx_rcb) 6828 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6829 /* 6830 * Writing any value to intr-mbox-0 clears PCI INTA# and 6831 * chip-internal interrupt pending events. 6832 * Writing non-zero to intr-mbox-0 additional tells the 6833 * NIC to stop sending us irqs, engaging "in-intr-handler" 6834 * event coalescing. 6835 */ 6836 tw32_mailbox(tnapi->int_mbox, 0x00000001); 6837 if (likely(!tg3_irq_sync(tp))) 6838 napi_schedule(&tnapi->napi); 6839 6840 return IRQ_RETVAL(1); 6841 } 6842 6843 static irqreturn_t tg3_interrupt(int irq, void *dev_id) 6844 { 6845 struct tg3_napi *tnapi = dev_id; 6846 struct tg3 *tp = tnapi->tp; 6847 struct tg3_hw_status *sblk = tnapi->hw_status; 6848 unsigned int handled = 1; 6849 6850 /* In INTx mode, it is possible for the interrupt to arrive at 6851 * the CPU before the status block posted prior to the interrupt. 6852 * Reading the PCI State register will confirm whether the 6853 * interrupt is ours and will flush the status block. 6854 */ 6855 if (unlikely(!(sblk->status & SD_STATUS_UPDATED))) { 6856 if (tg3_flag(tp, CHIP_RESETTING) || 6857 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 6858 handled = 0; 6859 goto out; 6860 } 6861 } 6862 6863 /* 6864 * Writing any value to intr-mbox-0 clears PCI INTA# and 6865 * chip-internal interrupt pending events. 6866 * Writing non-zero to intr-mbox-0 additional tells the 6867 * NIC to stop sending us irqs, engaging "in-intr-handler" 6868 * event coalescing. 6869 * 6870 * Flush the mailbox to de-assert the IRQ immediately to prevent 6871 * spurious interrupts. The flush impacts performance but 6872 * excessive spurious interrupts can be worse in some cases. 6873 */ 6874 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 6875 if (tg3_irq_sync(tp)) 6876 goto out; 6877 sblk->status &= ~SD_STATUS_UPDATED; 6878 if (likely(tg3_has_work(tnapi))) { 6879 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6880 napi_schedule(&tnapi->napi); 6881 } else { 6882 /* No work, shared interrupt perhaps? re-enable 6883 * interrupts, and flush that PCI write 6884 */ 6885 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 6886 0x00000000); 6887 } 6888 out: 6889 return IRQ_RETVAL(handled); 6890 } 6891 6892 static irqreturn_t tg3_interrupt_tagged(int irq, void *dev_id) 6893 { 6894 struct tg3_napi *tnapi = dev_id; 6895 struct tg3 *tp = tnapi->tp; 6896 struct tg3_hw_status *sblk = tnapi->hw_status; 6897 unsigned int handled = 1; 6898 6899 /* In INTx mode, it is possible for the interrupt to arrive at 6900 * the CPU before the status block posted prior to the interrupt. 6901 * Reading the PCI State register will confirm whether the 6902 * interrupt is ours and will flush the status block. 6903 */ 6904 if (unlikely(sblk->status_tag == tnapi->last_irq_tag)) { 6905 if (tg3_flag(tp, CHIP_RESETTING) || 6906 (tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 6907 handled = 0; 6908 goto out; 6909 } 6910 } 6911 6912 /* 6913 * writing any value to intr-mbox-0 clears PCI INTA# and 6914 * chip-internal interrupt pending events. 6915 * writing non-zero to intr-mbox-0 additional tells the 6916 * NIC to stop sending us irqs, engaging "in-intr-handler" 6917 * event coalescing. 6918 * 6919 * Flush the mailbox to de-assert the IRQ immediately to prevent 6920 * spurious interrupts. The flush impacts performance but 6921 * excessive spurious interrupts can be worse in some cases. 6922 */ 6923 tw32_mailbox_f(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000001); 6924 6925 /* 6926 * In a shared interrupt configuration, sometimes other devices' 6927 * interrupts will scream. We record the current status tag here 6928 * so that the above check can report that the screaming interrupts 6929 * are unhandled. Eventually they will be silenced. 6930 */ 6931 tnapi->last_irq_tag = sblk->status_tag; 6932 6933 if (tg3_irq_sync(tp)) 6934 goto out; 6935 6936 prefetch(&tnapi->rx_rcb[tnapi->rx_rcb_ptr]); 6937 6938 napi_schedule(&tnapi->napi); 6939 6940 out: 6941 return IRQ_RETVAL(handled); 6942 } 6943 6944 /* ISR for interrupt test */ 6945 static irqreturn_t tg3_test_isr(int irq, void *dev_id) 6946 { 6947 struct tg3_napi *tnapi = dev_id; 6948 struct tg3 *tp = tnapi->tp; 6949 struct tg3_hw_status *sblk = tnapi->hw_status; 6950 6951 if ((sblk->status & SD_STATUS_UPDATED) || 6952 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) { 6953 tg3_disable_ints(tp); 6954 return IRQ_RETVAL(1); 6955 } 6956 return IRQ_RETVAL(0); 6957 } 6958 6959 #ifdef CONFIG_NET_POLL_CONTROLLER 6960 static void tg3_poll_controller(struct net_device *dev) 6961 { 6962 int i; 6963 struct tg3 *tp = netdev_priv(dev); 6964 6965 if (tg3_irq_sync(tp)) 6966 return; 6967 6968 for (i = 0; i < tp->irq_cnt; i++) 6969 tg3_interrupt(tp->napi[i].irq_vec, &tp->napi[i]); 6970 } 6971 #endif 6972 6973 static void tg3_tx_timeout(struct net_device *dev) 6974 { 6975 struct tg3 *tp = netdev_priv(dev); 6976 6977 if (netif_msg_tx_err(tp)) { 6978 netdev_err(dev, "transmit timed out, resetting\n"); 6979 tg3_dump_state(tp); 6980 } 6981 6982 tg3_reset_task_schedule(tp); 6983 } 6984 6985 /* Test for DMA buffers crossing any 4GB boundaries: 4G, 8G, etc */ 6986 static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) 6987 { 6988 u32 base = (u32) mapping & 0xffffffff; 6989 6990 return (base > 0xffffdcc0) && (base + len + 8 < base); 6991 } 6992 6993 /* Test for DMA addresses > 40-bit */ 6994 static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, 6995 int len) 6996 { 6997 #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) 6998 if (tg3_flag(tp, 40BIT_DMA_BUG)) 6999 return ((u64) mapping + len) > DMA_BIT_MASK(40); 7000 return 0; 7001 #else 7002 return 0; 7003 #endif 7004 } 7005 7006 static inline void tg3_tx_set_bd(struct tg3_tx_buffer_desc *txbd, 7007 dma_addr_t mapping, u32 len, u32 flags, 7008 u32 mss, u32 vlan) 7009 { 7010 txbd->addr_hi = ((u64) mapping >> 32); 7011 txbd->addr_lo = ((u64) mapping & 0xffffffff); 7012 txbd->len_flags = (len << TXD_LEN_SHIFT) | (flags & 0x0000ffff); 7013 txbd->vlan_tag = (mss << TXD_MSS_SHIFT) | (vlan << TXD_VLAN_TAG_SHIFT); 7014 } 7015 7016 static bool tg3_tx_frag_set(struct tg3_napi *tnapi, u32 *entry, u32 *budget, 7017 dma_addr_t map, u32 len, u32 flags, 7018 u32 mss, u32 vlan) 7019 { 7020 struct tg3 *tp = tnapi->tp; 7021 bool hwbug = false; 7022 7023 if (tg3_flag(tp, SHORT_DMA_BUG) && len <= 8) 7024 hwbug = true; 7025 7026 if (tg3_4g_overflow_test(map, len)) 7027 hwbug = true; 7028 7029 if (tg3_40bit_overflow_test(tp, map, len)) 7030 hwbug = true; 7031 7032 if (tp->dma_limit) { 7033 u32 prvidx = *entry; 7034 u32 tmp_flag = flags & ~TXD_FLAG_END; 7035 while (len > tp->dma_limit && *budget) { 7036 u32 frag_len = tp->dma_limit; 7037 len -= tp->dma_limit; 7038 7039 /* Avoid the 8byte DMA problem */ 7040 if (len <= 8) { 7041 len += tp->dma_limit / 2; 7042 frag_len = tp->dma_limit / 2; 7043 } 7044 7045 tnapi->tx_buffers[*entry].fragmented = true; 7046 7047 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7048 frag_len, tmp_flag, mss, vlan); 7049 *budget -= 1; 7050 prvidx = *entry; 7051 *entry = NEXT_TX(*entry); 7052 7053 map += frag_len; 7054 } 7055 7056 if (len) { 7057 if (*budget) { 7058 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7059 len, flags, mss, vlan); 7060 *budget -= 1; 7061 *entry = NEXT_TX(*entry); 7062 } else { 7063 hwbug = true; 7064 tnapi->tx_buffers[prvidx].fragmented = false; 7065 } 7066 } 7067 } else { 7068 tg3_tx_set_bd(&tnapi->tx_ring[*entry], map, 7069 len, flags, mss, vlan); 7070 *entry = NEXT_TX(*entry); 7071 } 7072 7073 return hwbug; 7074 } 7075 7076 static void tg3_tx_skb_unmap(struct tg3_napi *tnapi, u32 entry, int last) 7077 { 7078 int i; 7079 struct sk_buff *skb; 7080 struct tg3_tx_ring_info *txb = &tnapi->tx_buffers[entry]; 7081 7082 skb = txb->skb; 7083 txb->skb = NULL; 7084 7085 pci_unmap_single(tnapi->tp->pdev, 7086 dma_unmap_addr(txb, mapping), 7087 skb_headlen(skb), 7088 PCI_DMA_TODEVICE); 7089 7090 while (txb->fragmented) { 7091 txb->fragmented = false; 7092 entry = NEXT_TX(entry); 7093 txb = &tnapi->tx_buffers[entry]; 7094 } 7095 7096 for (i = 0; i <= last; i++) { 7097 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 7098 7099 entry = NEXT_TX(entry); 7100 txb = &tnapi->tx_buffers[entry]; 7101 7102 pci_unmap_page(tnapi->tp->pdev, 7103 dma_unmap_addr(txb, mapping), 7104 skb_frag_size(frag), PCI_DMA_TODEVICE); 7105 7106 while (txb->fragmented) { 7107 txb->fragmented = false; 7108 entry = NEXT_TX(entry); 7109 txb = &tnapi->tx_buffers[entry]; 7110 } 7111 } 7112 } 7113 7114 /* Workaround 4GB and 40-bit hardware DMA bugs. */ 7115 static int tigon3_dma_hwbug_workaround(struct tg3_napi *tnapi, 7116 struct sk_buff **pskb, 7117 u32 *entry, u32 *budget, 7118 u32 base_flags, u32 mss, u32 vlan) 7119 { 7120 struct tg3 *tp = tnapi->tp; 7121 struct sk_buff *new_skb, *skb = *pskb; 7122 dma_addr_t new_addr = 0; 7123 int ret = 0; 7124 7125 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) 7126 new_skb = skb_copy(skb, GFP_ATOMIC); 7127 else { 7128 int more_headroom = 4 - ((unsigned long)skb->data & 3); 7129 7130 new_skb = skb_copy_expand(skb, 7131 skb_headroom(skb) + more_headroom, 7132 skb_tailroom(skb), GFP_ATOMIC); 7133 } 7134 7135 if (!new_skb) { 7136 ret = -1; 7137 } else { 7138 /* New SKB is guaranteed to be linear. */ 7139 new_addr = pci_map_single(tp->pdev, new_skb->data, new_skb->len, 7140 PCI_DMA_TODEVICE); 7141 /* Make sure the mapping succeeded */ 7142 if (pci_dma_mapping_error(tp->pdev, new_addr)) { 7143 dev_kfree_skb(new_skb); 7144 ret = -1; 7145 } else { 7146 u32 save_entry = *entry; 7147 7148 base_flags |= TXD_FLAG_END; 7149 7150 tnapi->tx_buffers[*entry].skb = new_skb; 7151 dma_unmap_addr_set(&tnapi->tx_buffers[*entry], 7152 mapping, new_addr); 7153 7154 if (tg3_tx_frag_set(tnapi, entry, budget, new_addr, 7155 new_skb->len, base_flags, 7156 mss, vlan)) { 7157 tg3_tx_skb_unmap(tnapi, save_entry, -1); 7158 dev_kfree_skb(new_skb); 7159 ret = -1; 7160 } 7161 } 7162 } 7163 7164 dev_kfree_skb(skb); 7165 *pskb = new_skb; 7166 return ret; 7167 } 7168 7169 static netdev_tx_t tg3_start_xmit(struct sk_buff *, struct net_device *); 7170 7171 /* Use GSO to workaround a rare TSO bug that may be triggered when the 7172 * TSO header is greater than 80 bytes. 7173 */ 7174 static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb) 7175 { 7176 struct sk_buff *segs, *nskb; 7177 u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; 7178 7179 /* Estimate the number of fragments in the worst case */ 7180 if (unlikely(tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est)) { 7181 netif_stop_queue(tp->dev); 7182 7183 /* netif_tx_stop_queue() must be done before checking 7184 * checking tx index in tg3_tx_avail() below, because in 7185 * tg3_tx(), we update tx index before checking for 7186 * netif_tx_queue_stopped(). 7187 */ 7188 smp_mb(); 7189 if (tg3_tx_avail(&tp->napi[0]) <= frag_cnt_est) 7190 return NETDEV_TX_BUSY; 7191 7192 netif_wake_queue(tp->dev); 7193 } 7194 7195 segs = skb_gso_segment(skb, tp->dev->features & ~NETIF_F_TSO); 7196 if (IS_ERR(segs)) 7197 goto tg3_tso_bug_end; 7198 7199 do { 7200 nskb = segs; 7201 segs = segs->next; 7202 nskb->next = NULL; 7203 tg3_start_xmit(nskb, tp->dev); 7204 } while (segs); 7205 7206 tg3_tso_bug_end: 7207 dev_kfree_skb(skb); 7208 7209 return NETDEV_TX_OK; 7210 } 7211 7212 /* hard_start_xmit for devices that have the 4G bug and/or 40-bit bug and 7213 * support TG3_FLAG_HW_TSO_1 or firmware TSO only. 7214 */ 7215 static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) 7216 { 7217 struct tg3 *tp = netdev_priv(dev); 7218 u32 len, entry, base_flags, mss, vlan = 0; 7219 u32 budget; 7220 int i = -1, would_hit_hwbug; 7221 dma_addr_t mapping; 7222 struct tg3_napi *tnapi; 7223 struct netdev_queue *txq; 7224 unsigned int last; 7225 7226 txq = netdev_get_tx_queue(dev, skb_get_queue_mapping(skb)); 7227 tnapi = &tp->napi[skb_get_queue_mapping(skb)]; 7228 if (tg3_flag(tp, ENABLE_TSS)) 7229 tnapi++; 7230 7231 budget = tg3_tx_avail(tnapi); 7232 7233 /* We are running in BH disabled context with netif_tx_lock 7234 * and TX reclaim runs via tp->napi.poll inside of a software 7235 * interrupt. Furthermore, IRQ processing runs lockless so we have 7236 * no IRQ context deadlocks to worry about either. Rejoice! 7237 */ 7238 if (unlikely(budget <= (skb_shinfo(skb)->nr_frags + 1))) { 7239 if (!netif_tx_queue_stopped(txq)) { 7240 netif_tx_stop_queue(txq); 7241 7242 /* This is a hard error, log it. */ 7243 netdev_err(dev, 7244 "BUG! Tx Ring full when queue awake!\n"); 7245 } 7246 return NETDEV_TX_BUSY; 7247 } 7248 7249 entry = tnapi->tx_prod; 7250 base_flags = 0; 7251 if (skb->ip_summed == CHECKSUM_PARTIAL) 7252 base_flags |= TXD_FLAG_TCPUDP_CSUM; 7253 7254 mss = skb_shinfo(skb)->gso_size; 7255 if (mss) { 7256 struct iphdr *iph; 7257 u32 tcp_opt_len, hdr_len; 7258 7259 if (skb_header_cloned(skb) && 7260 pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) 7261 goto drop; 7262 7263 iph = ip_hdr(skb); 7264 tcp_opt_len = tcp_optlen(skb); 7265 7266 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb) - ETH_HLEN; 7267 7268 if (!skb_is_gso_v6(skb)) { 7269 iph->check = 0; 7270 iph->tot_len = htons(mss + hdr_len); 7271 } 7272 7273 if (unlikely((ETH_HLEN + hdr_len) > 80) && 7274 tg3_flag(tp, TSO_BUG)) 7275 return tg3_tso_bug(tp, skb); 7276 7277 base_flags |= (TXD_FLAG_CPU_PRE_DMA | 7278 TXD_FLAG_CPU_POST_DMA); 7279 7280 if (tg3_flag(tp, HW_TSO_1) || 7281 tg3_flag(tp, HW_TSO_2) || 7282 tg3_flag(tp, HW_TSO_3)) { 7283 tcp_hdr(skb)->check = 0; 7284 base_flags &= ~TXD_FLAG_TCPUDP_CSUM; 7285 } else 7286 tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr, 7287 iph->daddr, 0, 7288 IPPROTO_TCP, 7289 0); 7290 7291 if (tg3_flag(tp, HW_TSO_3)) { 7292 mss |= (hdr_len & 0xc) << 12; 7293 if (hdr_len & 0x10) 7294 base_flags |= 0x00000010; 7295 base_flags |= (hdr_len & 0x3e0) << 5; 7296 } else if (tg3_flag(tp, HW_TSO_2)) 7297 mss |= hdr_len << 9; 7298 else if (tg3_flag(tp, HW_TSO_1) || 7299 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 7300 if (tcp_opt_len || iph->ihl > 5) { 7301 int tsflags; 7302 7303 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 7304 mss |= (tsflags << 11); 7305 } 7306 } else { 7307 if (tcp_opt_len || iph->ihl > 5) { 7308 int tsflags; 7309 7310 tsflags = (iph->ihl - 5) + (tcp_opt_len >> 2); 7311 base_flags |= tsflags << 12; 7312 } 7313 } 7314 } 7315 7316 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 7317 !mss && skb->len > VLAN_ETH_FRAME_LEN) 7318 base_flags |= TXD_FLAG_JMB_PKT; 7319 7320 if (vlan_tx_tag_present(skb)) { 7321 base_flags |= TXD_FLAG_VLAN; 7322 vlan = vlan_tx_tag_get(skb); 7323 } 7324 7325 if ((unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) && 7326 tg3_flag(tp, TX_TSTAMP_EN)) { 7327 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 7328 base_flags |= TXD_FLAG_HWTSTAMP; 7329 } 7330 7331 len = skb_headlen(skb); 7332 7333 mapping = pci_map_single(tp->pdev, skb->data, len, PCI_DMA_TODEVICE); 7334 if (pci_dma_mapping_error(tp->pdev, mapping)) 7335 goto drop; 7336 7337 7338 tnapi->tx_buffers[entry].skb = skb; 7339 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, mapping); 7340 7341 would_hit_hwbug = 0; 7342 7343 if (tg3_flag(tp, 5701_DMA_BUG)) 7344 would_hit_hwbug = 1; 7345 7346 if (tg3_tx_frag_set(tnapi, &entry, &budget, mapping, len, base_flags | 7347 ((skb_shinfo(skb)->nr_frags == 0) ? TXD_FLAG_END : 0), 7348 mss, vlan)) { 7349 would_hit_hwbug = 1; 7350 } else if (skb_shinfo(skb)->nr_frags > 0) { 7351 u32 tmp_mss = mss; 7352 7353 if (!tg3_flag(tp, HW_TSO_1) && 7354 !tg3_flag(tp, HW_TSO_2) && 7355 !tg3_flag(tp, HW_TSO_3)) 7356 tmp_mss = 0; 7357 7358 /* Now loop through additional data 7359 * fragments, and queue them. 7360 */ 7361 last = skb_shinfo(skb)->nr_frags - 1; 7362 for (i = 0; i <= last; i++) { 7363 skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; 7364 7365 len = skb_frag_size(frag); 7366 mapping = skb_frag_dma_map(&tp->pdev->dev, frag, 0, 7367 len, DMA_TO_DEVICE); 7368 7369 tnapi->tx_buffers[entry].skb = NULL; 7370 dma_unmap_addr_set(&tnapi->tx_buffers[entry], mapping, 7371 mapping); 7372 if (dma_mapping_error(&tp->pdev->dev, mapping)) 7373 goto dma_error; 7374 7375 if (!budget || 7376 tg3_tx_frag_set(tnapi, &entry, &budget, mapping, 7377 len, base_flags | 7378 ((i == last) ? TXD_FLAG_END : 0), 7379 tmp_mss, vlan)) { 7380 would_hit_hwbug = 1; 7381 break; 7382 } 7383 } 7384 } 7385 7386 if (would_hit_hwbug) { 7387 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, i); 7388 7389 /* If the workaround fails due to memory/mapping 7390 * failure, silently drop this packet. 7391 */ 7392 entry = tnapi->tx_prod; 7393 budget = tg3_tx_avail(tnapi); 7394 if (tigon3_dma_hwbug_workaround(tnapi, &skb, &entry, &budget, 7395 base_flags, mss, vlan)) 7396 goto drop_nofree; 7397 } 7398 7399 skb_tx_timestamp(skb); 7400 netdev_tx_sent_queue(txq, skb->len); 7401 7402 /* Sync BD data before updating mailbox */ 7403 wmb(); 7404 7405 /* Packets are ready, update Tx producer idx local and on card. */ 7406 tw32_tx_mbox(tnapi->prodmbox, entry); 7407 7408 tnapi->tx_prod = entry; 7409 if (unlikely(tg3_tx_avail(tnapi) <= (MAX_SKB_FRAGS + 1))) { 7410 netif_tx_stop_queue(txq); 7411 7412 /* netif_tx_stop_queue() must be done before checking 7413 * checking tx index in tg3_tx_avail() below, because in 7414 * tg3_tx(), we update tx index before checking for 7415 * netif_tx_queue_stopped(). 7416 */ 7417 smp_mb(); 7418 if (tg3_tx_avail(tnapi) > TG3_TX_WAKEUP_THRESH(tnapi)) 7419 netif_tx_wake_queue(txq); 7420 } 7421 7422 mmiowb(); 7423 return NETDEV_TX_OK; 7424 7425 dma_error: 7426 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod, --i); 7427 tnapi->tx_buffers[tnapi->tx_prod].skb = NULL; 7428 drop: 7429 dev_kfree_skb(skb); 7430 drop_nofree: 7431 tp->tx_dropped++; 7432 return NETDEV_TX_OK; 7433 } 7434 7435 static void tg3_mac_loopback(struct tg3 *tp, bool enable) 7436 { 7437 if (enable) { 7438 tp->mac_mode &= ~(MAC_MODE_HALF_DUPLEX | 7439 MAC_MODE_PORT_MODE_MASK); 7440 7441 tp->mac_mode |= MAC_MODE_PORT_INT_LPBACK; 7442 7443 if (!tg3_flag(tp, 5705_PLUS)) 7444 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 7445 7446 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 7447 tp->mac_mode |= MAC_MODE_PORT_MODE_MII; 7448 else 7449 tp->mac_mode |= MAC_MODE_PORT_MODE_GMII; 7450 } else { 7451 tp->mac_mode &= ~MAC_MODE_PORT_INT_LPBACK; 7452 7453 if (tg3_flag(tp, 5705_PLUS) || 7454 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) || 7455 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 7456 tp->mac_mode &= ~MAC_MODE_LINK_POLARITY; 7457 } 7458 7459 tw32(MAC_MODE, tp->mac_mode); 7460 udelay(40); 7461 } 7462 7463 static int tg3_phy_lpbk_set(struct tg3 *tp, u32 speed, bool extlpbk) 7464 { 7465 u32 val, bmcr, mac_mode, ptest = 0; 7466 7467 tg3_phy_toggle_apd(tp, false); 7468 tg3_phy_toggle_automdix(tp, 0); 7469 7470 if (extlpbk && tg3_phy_set_extloopbk(tp)) 7471 return -EIO; 7472 7473 bmcr = BMCR_FULLDPLX; 7474 switch (speed) { 7475 case SPEED_10: 7476 break; 7477 case SPEED_100: 7478 bmcr |= BMCR_SPEED100; 7479 break; 7480 case SPEED_1000: 7481 default: 7482 if (tp->phy_flags & TG3_PHYFLG_IS_FET) { 7483 speed = SPEED_100; 7484 bmcr |= BMCR_SPEED100; 7485 } else { 7486 speed = SPEED_1000; 7487 bmcr |= BMCR_SPEED1000; 7488 } 7489 } 7490 7491 if (extlpbk) { 7492 if (!(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 7493 tg3_readphy(tp, MII_CTRL1000, &val); 7494 val |= CTL1000_AS_MASTER | 7495 CTL1000_ENABLE_MASTER; 7496 tg3_writephy(tp, MII_CTRL1000, val); 7497 } else { 7498 ptest = MII_TG3_FET_PTEST_TRIM_SEL | 7499 MII_TG3_FET_PTEST_TRIM_2; 7500 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest); 7501 } 7502 } else 7503 bmcr |= BMCR_LOOPBACK; 7504 7505 tg3_writephy(tp, MII_BMCR, bmcr); 7506 7507 /* The write needs to be flushed for the FETs */ 7508 if (tp->phy_flags & TG3_PHYFLG_IS_FET) 7509 tg3_readphy(tp, MII_BMCR, &bmcr); 7510 7511 udelay(40); 7512 7513 if ((tp->phy_flags & TG3_PHYFLG_IS_FET) && 7514 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 7515 tg3_writephy(tp, MII_TG3_FET_PTEST, ptest | 7516 MII_TG3_FET_PTEST_FRC_TX_LINK | 7517 MII_TG3_FET_PTEST_FRC_TX_LOCK); 7518 7519 /* The write needs to be flushed for the AC131 */ 7520 tg3_readphy(tp, MII_TG3_FET_PTEST, &val); 7521 } 7522 7523 /* Reset to prevent losing 1st rx packet intermittently */ 7524 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 7525 tg3_flag(tp, 5780_CLASS)) { 7526 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 7527 udelay(10); 7528 tw32_f(MAC_RX_MODE, tp->rx_mode); 7529 } 7530 7531 mac_mode = tp->mac_mode & 7532 ~(MAC_MODE_PORT_MODE_MASK | MAC_MODE_HALF_DUPLEX); 7533 if (speed == SPEED_1000) 7534 mac_mode |= MAC_MODE_PORT_MODE_GMII; 7535 else 7536 mac_mode |= MAC_MODE_PORT_MODE_MII; 7537 7538 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) { 7539 u32 masked_phy_id = tp->phy_id & TG3_PHY_ID_MASK; 7540 7541 if (masked_phy_id == TG3_PHY_ID_BCM5401) 7542 mac_mode &= ~MAC_MODE_LINK_POLARITY; 7543 else if (masked_phy_id == TG3_PHY_ID_BCM5411) 7544 mac_mode |= MAC_MODE_LINK_POLARITY; 7545 7546 tg3_writephy(tp, MII_TG3_EXT_CTRL, 7547 MII_TG3_EXT_CTRL_LNK3_LED_MODE); 7548 } 7549 7550 tw32(MAC_MODE, mac_mode); 7551 udelay(40); 7552 7553 return 0; 7554 } 7555 7556 static void tg3_set_loopback(struct net_device *dev, netdev_features_t features) 7557 { 7558 struct tg3 *tp = netdev_priv(dev); 7559 7560 if (features & NETIF_F_LOOPBACK) { 7561 if (tp->mac_mode & MAC_MODE_PORT_INT_LPBACK) 7562 return; 7563 7564 spin_lock_bh(&tp->lock); 7565 tg3_mac_loopback(tp, true); 7566 netif_carrier_on(tp->dev); 7567 spin_unlock_bh(&tp->lock); 7568 netdev_info(dev, "Internal MAC loopback mode enabled.\n"); 7569 } else { 7570 if (!(tp->mac_mode & MAC_MODE_PORT_INT_LPBACK)) 7571 return; 7572 7573 spin_lock_bh(&tp->lock); 7574 tg3_mac_loopback(tp, false); 7575 /* Force link status check */ 7576 tg3_setup_phy(tp, 1); 7577 spin_unlock_bh(&tp->lock); 7578 netdev_info(dev, "Internal MAC loopback mode disabled.\n"); 7579 } 7580 } 7581 7582 static netdev_features_t tg3_fix_features(struct net_device *dev, 7583 netdev_features_t features) 7584 { 7585 struct tg3 *tp = netdev_priv(dev); 7586 7587 if (dev->mtu > ETH_DATA_LEN && tg3_flag(tp, 5780_CLASS)) 7588 features &= ~NETIF_F_ALL_TSO; 7589 7590 return features; 7591 } 7592 7593 static int tg3_set_features(struct net_device *dev, netdev_features_t features) 7594 { 7595 netdev_features_t changed = dev->features ^ features; 7596 7597 if ((changed & NETIF_F_LOOPBACK) && netif_running(dev)) 7598 tg3_set_loopback(dev, features); 7599 7600 return 0; 7601 } 7602 7603 static void tg3_rx_prodring_free(struct tg3 *tp, 7604 struct tg3_rx_prodring_set *tpr) 7605 { 7606 int i; 7607 7608 if (tpr != &tp->napi[0].prodring) { 7609 for (i = tpr->rx_std_cons_idx; i != tpr->rx_std_prod_idx; 7610 i = (i + 1) & tp->rx_std_ring_mask) 7611 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 7612 tp->rx_pkt_map_sz); 7613 7614 if (tg3_flag(tp, JUMBO_CAPABLE)) { 7615 for (i = tpr->rx_jmb_cons_idx; 7616 i != tpr->rx_jmb_prod_idx; 7617 i = (i + 1) & tp->rx_jmb_ring_mask) { 7618 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 7619 TG3_RX_JMB_MAP_SZ); 7620 } 7621 } 7622 7623 return; 7624 } 7625 7626 for (i = 0; i <= tp->rx_std_ring_mask; i++) 7627 tg3_rx_data_free(tp, &tpr->rx_std_buffers[i], 7628 tp->rx_pkt_map_sz); 7629 7630 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 7631 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) 7632 tg3_rx_data_free(tp, &tpr->rx_jmb_buffers[i], 7633 TG3_RX_JMB_MAP_SZ); 7634 } 7635 } 7636 7637 /* Initialize rx rings for packet processing. 7638 * 7639 * The chip has been shut down and the driver detached from 7640 * the networking, so no interrupts or new tx packets will 7641 * end up in the driver. tp->{tx,}lock are held and thus 7642 * we may not sleep. 7643 */ 7644 static int tg3_rx_prodring_alloc(struct tg3 *tp, 7645 struct tg3_rx_prodring_set *tpr) 7646 { 7647 u32 i, rx_pkt_dma_sz; 7648 7649 tpr->rx_std_cons_idx = 0; 7650 tpr->rx_std_prod_idx = 0; 7651 tpr->rx_jmb_cons_idx = 0; 7652 tpr->rx_jmb_prod_idx = 0; 7653 7654 if (tpr != &tp->napi[0].prodring) { 7655 memset(&tpr->rx_std_buffers[0], 0, 7656 TG3_RX_STD_BUFF_RING_SIZE(tp)); 7657 if (tpr->rx_jmb_buffers) 7658 memset(&tpr->rx_jmb_buffers[0], 0, 7659 TG3_RX_JMB_BUFF_RING_SIZE(tp)); 7660 goto done; 7661 } 7662 7663 /* Zero out all descriptors. */ 7664 memset(tpr->rx_std, 0, TG3_RX_STD_RING_BYTES(tp)); 7665 7666 rx_pkt_dma_sz = TG3_RX_STD_DMA_SZ; 7667 if (tg3_flag(tp, 5780_CLASS) && 7668 tp->dev->mtu > ETH_DATA_LEN) 7669 rx_pkt_dma_sz = TG3_RX_JMB_DMA_SZ; 7670 tp->rx_pkt_map_sz = TG3_RX_DMA_TO_MAP_SZ(rx_pkt_dma_sz); 7671 7672 /* Initialize invariants of the rings, we only set this 7673 * stuff once. This works because the card does not 7674 * write into the rx buffer posting rings. 7675 */ 7676 for (i = 0; i <= tp->rx_std_ring_mask; i++) { 7677 struct tg3_rx_buffer_desc *rxd; 7678 7679 rxd = &tpr->rx_std[i]; 7680 rxd->idx_len = rx_pkt_dma_sz << RXD_LEN_SHIFT; 7681 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT); 7682 rxd->opaque = (RXD_OPAQUE_RING_STD | 7683 (i << RXD_OPAQUE_INDEX_SHIFT)); 7684 } 7685 7686 /* Now allocate fresh SKBs for each rx ring. */ 7687 for (i = 0; i < tp->rx_pending; i++) { 7688 unsigned int frag_size; 7689 7690 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_STD, i, 7691 &frag_size) < 0) { 7692 netdev_warn(tp->dev, 7693 "Using a smaller RX standard ring. Only " 7694 "%d out of %d buffers were allocated " 7695 "successfully\n", i, tp->rx_pending); 7696 if (i == 0) 7697 goto initfail; 7698 tp->rx_pending = i; 7699 break; 7700 } 7701 } 7702 7703 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 7704 goto done; 7705 7706 memset(tpr->rx_jmb, 0, TG3_RX_JMB_RING_BYTES(tp)); 7707 7708 if (!tg3_flag(tp, JUMBO_RING_ENABLE)) 7709 goto done; 7710 7711 for (i = 0; i <= tp->rx_jmb_ring_mask; i++) { 7712 struct tg3_rx_buffer_desc *rxd; 7713 7714 rxd = &tpr->rx_jmb[i].std; 7715 rxd->idx_len = TG3_RX_JMB_DMA_SZ << RXD_LEN_SHIFT; 7716 rxd->type_flags = (RXD_FLAG_END << RXD_FLAGS_SHIFT) | 7717 RXD_FLAG_JUMBO; 7718 rxd->opaque = (RXD_OPAQUE_RING_JUMBO | 7719 (i << RXD_OPAQUE_INDEX_SHIFT)); 7720 } 7721 7722 for (i = 0; i < tp->rx_jumbo_pending; i++) { 7723 unsigned int frag_size; 7724 7725 if (tg3_alloc_rx_data(tp, tpr, RXD_OPAQUE_RING_JUMBO, i, 7726 &frag_size) < 0) { 7727 netdev_warn(tp->dev, 7728 "Using a smaller RX jumbo ring. Only %d " 7729 "out of %d buffers were allocated " 7730 "successfully\n", i, tp->rx_jumbo_pending); 7731 if (i == 0) 7732 goto initfail; 7733 tp->rx_jumbo_pending = i; 7734 break; 7735 } 7736 } 7737 7738 done: 7739 return 0; 7740 7741 initfail: 7742 tg3_rx_prodring_free(tp, tpr); 7743 return -ENOMEM; 7744 } 7745 7746 static void tg3_rx_prodring_fini(struct tg3 *tp, 7747 struct tg3_rx_prodring_set *tpr) 7748 { 7749 kfree(tpr->rx_std_buffers); 7750 tpr->rx_std_buffers = NULL; 7751 kfree(tpr->rx_jmb_buffers); 7752 tpr->rx_jmb_buffers = NULL; 7753 if (tpr->rx_std) { 7754 dma_free_coherent(&tp->pdev->dev, TG3_RX_STD_RING_BYTES(tp), 7755 tpr->rx_std, tpr->rx_std_mapping); 7756 tpr->rx_std = NULL; 7757 } 7758 if (tpr->rx_jmb) { 7759 dma_free_coherent(&tp->pdev->dev, TG3_RX_JMB_RING_BYTES(tp), 7760 tpr->rx_jmb, tpr->rx_jmb_mapping); 7761 tpr->rx_jmb = NULL; 7762 } 7763 } 7764 7765 static int tg3_rx_prodring_init(struct tg3 *tp, 7766 struct tg3_rx_prodring_set *tpr) 7767 { 7768 tpr->rx_std_buffers = kzalloc(TG3_RX_STD_BUFF_RING_SIZE(tp), 7769 GFP_KERNEL); 7770 if (!tpr->rx_std_buffers) 7771 return -ENOMEM; 7772 7773 tpr->rx_std = dma_alloc_coherent(&tp->pdev->dev, 7774 TG3_RX_STD_RING_BYTES(tp), 7775 &tpr->rx_std_mapping, 7776 GFP_KERNEL); 7777 if (!tpr->rx_std) 7778 goto err_out; 7779 7780 if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) { 7781 tpr->rx_jmb_buffers = kzalloc(TG3_RX_JMB_BUFF_RING_SIZE(tp), 7782 GFP_KERNEL); 7783 if (!tpr->rx_jmb_buffers) 7784 goto err_out; 7785 7786 tpr->rx_jmb = dma_alloc_coherent(&tp->pdev->dev, 7787 TG3_RX_JMB_RING_BYTES(tp), 7788 &tpr->rx_jmb_mapping, 7789 GFP_KERNEL); 7790 if (!tpr->rx_jmb) 7791 goto err_out; 7792 } 7793 7794 return 0; 7795 7796 err_out: 7797 tg3_rx_prodring_fini(tp, tpr); 7798 return -ENOMEM; 7799 } 7800 7801 /* Free up pending packets in all rx/tx rings. 7802 * 7803 * The chip has been shut down and the driver detached from 7804 * the networking, so no interrupts or new tx packets will 7805 * end up in the driver. tp->{tx,}lock is not held and we are not 7806 * in an interrupt context and thus may sleep. 7807 */ 7808 static void tg3_free_rings(struct tg3 *tp) 7809 { 7810 int i, j; 7811 7812 for (j = 0; j < tp->irq_cnt; j++) { 7813 struct tg3_napi *tnapi = &tp->napi[j]; 7814 7815 tg3_rx_prodring_free(tp, &tnapi->prodring); 7816 7817 if (!tnapi->tx_buffers) 7818 continue; 7819 7820 for (i = 0; i < TG3_TX_RING_SIZE; i++) { 7821 struct sk_buff *skb = tnapi->tx_buffers[i].skb; 7822 7823 if (!skb) 7824 continue; 7825 7826 tg3_tx_skb_unmap(tnapi, i, 7827 skb_shinfo(skb)->nr_frags - 1); 7828 7829 dev_kfree_skb_any(skb); 7830 } 7831 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j)); 7832 } 7833 } 7834 7835 /* Initialize tx/rx rings for packet processing. 7836 * 7837 * The chip has been shut down and the driver detached from 7838 * the networking, so no interrupts or new tx packets will 7839 * end up in the driver. tp->{tx,}lock are held and thus 7840 * we may not sleep. 7841 */ 7842 static int tg3_init_rings(struct tg3 *tp) 7843 { 7844 int i; 7845 7846 /* Free up all the SKBs. */ 7847 tg3_free_rings(tp); 7848 7849 for (i = 0; i < tp->irq_cnt; i++) { 7850 struct tg3_napi *tnapi = &tp->napi[i]; 7851 7852 tnapi->last_tag = 0; 7853 tnapi->last_irq_tag = 0; 7854 tnapi->hw_status->status = 0; 7855 tnapi->hw_status->status_tag = 0; 7856 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 7857 7858 tnapi->tx_prod = 0; 7859 tnapi->tx_cons = 0; 7860 if (tnapi->tx_ring) 7861 memset(tnapi->tx_ring, 0, TG3_TX_RING_BYTES); 7862 7863 tnapi->rx_rcb_ptr = 0; 7864 if (tnapi->rx_rcb) 7865 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 7866 7867 if (tg3_rx_prodring_alloc(tp, &tnapi->prodring)) { 7868 tg3_free_rings(tp); 7869 return -ENOMEM; 7870 } 7871 } 7872 7873 return 0; 7874 } 7875 7876 static void tg3_mem_tx_release(struct tg3 *tp) 7877 { 7878 int i; 7879 7880 for (i = 0; i < tp->irq_max; i++) { 7881 struct tg3_napi *tnapi = &tp->napi[i]; 7882 7883 if (tnapi->tx_ring) { 7884 dma_free_coherent(&tp->pdev->dev, TG3_TX_RING_BYTES, 7885 tnapi->tx_ring, tnapi->tx_desc_mapping); 7886 tnapi->tx_ring = NULL; 7887 } 7888 7889 kfree(tnapi->tx_buffers); 7890 tnapi->tx_buffers = NULL; 7891 } 7892 } 7893 7894 static int tg3_mem_tx_acquire(struct tg3 *tp) 7895 { 7896 int i; 7897 struct tg3_napi *tnapi = &tp->napi[0]; 7898 7899 /* If multivector TSS is enabled, vector 0 does not handle 7900 * tx interrupts. Don't allocate any resources for it. 7901 */ 7902 if (tg3_flag(tp, ENABLE_TSS)) 7903 tnapi++; 7904 7905 for (i = 0; i < tp->txq_cnt; i++, tnapi++) { 7906 tnapi->tx_buffers = kzalloc(sizeof(struct tg3_tx_ring_info) * 7907 TG3_TX_RING_SIZE, GFP_KERNEL); 7908 if (!tnapi->tx_buffers) 7909 goto err_out; 7910 7911 tnapi->tx_ring = dma_alloc_coherent(&tp->pdev->dev, 7912 TG3_TX_RING_BYTES, 7913 &tnapi->tx_desc_mapping, 7914 GFP_KERNEL); 7915 if (!tnapi->tx_ring) 7916 goto err_out; 7917 } 7918 7919 return 0; 7920 7921 err_out: 7922 tg3_mem_tx_release(tp); 7923 return -ENOMEM; 7924 } 7925 7926 static void tg3_mem_rx_release(struct tg3 *tp) 7927 { 7928 int i; 7929 7930 for (i = 0; i < tp->irq_max; i++) { 7931 struct tg3_napi *tnapi = &tp->napi[i]; 7932 7933 tg3_rx_prodring_fini(tp, &tnapi->prodring); 7934 7935 if (!tnapi->rx_rcb) 7936 continue; 7937 7938 dma_free_coherent(&tp->pdev->dev, 7939 TG3_RX_RCB_RING_BYTES(tp), 7940 tnapi->rx_rcb, 7941 tnapi->rx_rcb_mapping); 7942 tnapi->rx_rcb = NULL; 7943 } 7944 } 7945 7946 static int tg3_mem_rx_acquire(struct tg3 *tp) 7947 { 7948 unsigned int i, limit; 7949 7950 limit = tp->rxq_cnt; 7951 7952 /* If RSS is enabled, we need a (dummy) producer ring 7953 * set on vector zero. This is the true hw prodring. 7954 */ 7955 if (tg3_flag(tp, ENABLE_RSS)) 7956 limit++; 7957 7958 for (i = 0; i < limit; i++) { 7959 struct tg3_napi *tnapi = &tp->napi[i]; 7960 7961 if (tg3_rx_prodring_init(tp, &tnapi->prodring)) 7962 goto err_out; 7963 7964 /* If multivector RSS is enabled, vector 0 7965 * does not handle rx or tx interrupts. 7966 * Don't allocate any resources for it. 7967 */ 7968 if (!i && tg3_flag(tp, ENABLE_RSS)) 7969 continue; 7970 7971 tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev, 7972 TG3_RX_RCB_RING_BYTES(tp), 7973 &tnapi->rx_rcb_mapping, 7974 GFP_KERNEL); 7975 if (!tnapi->rx_rcb) 7976 goto err_out; 7977 7978 memset(tnapi->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); 7979 } 7980 7981 return 0; 7982 7983 err_out: 7984 tg3_mem_rx_release(tp); 7985 return -ENOMEM; 7986 } 7987 7988 /* 7989 * Must not be invoked with interrupt sources disabled and 7990 * the hardware shutdown down. 7991 */ 7992 static void tg3_free_consistent(struct tg3 *tp) 7993 { 7994 int i; 7995 7996 for (i = 0; i < tp->irq_cnt; i++) { 7997 struct tg3_napi *tnapi = &tp->napi[i]; 7998 7999 if (tnapi->hw_status) { 8000 dma_free_coherent(&tp->pdev->dev, TG3_HW_STATUS_SIZE, 8001 tnapi->hw_status, 8002 tnapi->status_mapping); 8003 tnapi->hw_status = NULL; 8004 } 8005 } 8006 8007 tg3_mem_rx_release(tp); 8008 tg3_mem_tx_release(tp); 8009 8010 if (tp->hw_stats) { 8011 dma_free_coherent(&tp->pdev->dev, sizeof(struct tg3_hw_stats), 8012 tp->hw_stats, tp->stats_mapping); 8013 tp->hw_stats = NULL; 8014 } 8015 } 8016 8017 /* 8018 * Must not be invoked with interrupt sources disabled and 8019 * the hardware shutdown down. Can sleep. 8020 */ 8021 static int tg3_alloc_consistent(struct tg3 *tp) 8022 { 8023 int i; 8024 8025 tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev, 8026 sizeof(struct tg3_hw_stats), 8027 &tp->stats_mapping, 8028 GFP_KERNEL); 8029 if (!tp->hw_stats) 8030 goto err_out; 8031 8032 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 8033 8034 for (i = 0; i < tp->irq_cnt; i++) { 8035 struct tg3_napi *tnapi = &tp->napi[i]; 8036 struct tg3_hw_status *sblk; 8037 8038 tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev, 8039 TG3_HW_STATUS_SIZE, 8040 &tnapi->status_mapping, 8041 GFP_KERNEL); 8042 if (!tnapi->hw_status) 8043 goto err_out; 8044 8045 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8046 sblk = tnapi->hw_status; 8047 8048 if (tg3_flag(tp, ENABLE_RSS)) { 8049 u16 *prodptr = NULL; 8050 8051 /* 8052 * When RSS is enabled, the status block format changes 8053 * slightly. The "rx_jumbo_consumer", "reserved", 8054 * and "rx_mini_consumer" members get mapped to the 8055 * other three rx return ring producer indexes. 8056 */ 8057 switch (i) { 8058 case 1: 8059 prodptr = &sblk->idx[0].rx_producer; 8060 break; 8061 case 2: 8062 prodptr = &sblk->rx_jumbo_consumer; 8063 break; 8064 case 3: 8065 prodptr = &sblk->reserved; 8066 break; 8067 case 4: 8068 prodptr = &sblk->rx_mini_consumer; 8069 break; 8070 } 8071 tnapi->rx_rcb_prod_idx = prodptr; 8072 } else { 8073 tnapi->rx_rcb_prod_idx = &sblk->idx[0].rx_producer; 8074 } 8075 } 8076 8077 if (tg3_mem_tx_acquire(tp) || tg3_mem_rx_acquire(tp)) 8078 goto err_out; 8079 8080 return 0; 8081 8082 err_out: 8083 tg3_free_consistent(tp); 8084 return -ENOMEM; 8085 } 8086 8087 #define MAX_WAIT_CNT 1000 8088 8089 /* To stop a block, clear the enable bit and poll till it 8090 * clears. tp->lock is held. 8091 */ 8092 static int tg3_stop_block(struct tg3 *tp, unsigned long ofs, u32 enable_bit, int silent) 8093 { 8094 unsigned int i; 8095 u32 val; 8096 8097 if (tg3_flag(tp, 5705_PLUS)) { 8098 switch (ofs) { 8099 case RCVLSC_MODE: 8100 case DMAC_MODE: 8101 case MBFREE_MODE: 8102 case BUFMGR_MODE: 8103 case MEMARB_MODE: 8104 /* We can't enable/disable these bits of the 8105 * 5705/5750, just say success. 8106 */ 8107 return 0; 8108 8109 default: 8110 break; 8111 } 8112 } 8113 8114 val = tr32(ofs); 8115 val &= ~enable_bit; 8116 tw32_f(ofs, val); 8117 8118 for (i = 0; i < MAX_WAIT_CNT; i++) { 8119 udelay(100); 8120 val = tr32(ofs); 8121 if ((val & enable_bit) == 0) 8122 break; 8123 } 8124 8125 if (i == MAX_WAIT_CNT && !silent) { 8126 dev_err(&tp->pdev->dev, 8127 "tg3_stop_block timed out, ofs=%lx enable_bit=%x\n", 8128 ofs, enable_bit); 8129 return -ENODEV; 8130 } 8131 8132 return 0; 8133 } 8134 8135 /* tp->lock is held. */ 8136 static int tg3_abort_hw(struct tg3 *tp, int silent) 8137 { 8138 int i, err; 8139 8140 tg3_disable_ints(tp); 8141 8142 tp->rx_mode &= ~RX_MODE_ENABLE; 8143 tw32_f(MAC_RX_MODE, tp->rx_mode); 8144 udelay(10); 8145 8146 err = tg3_stop_block(tp, RCVBDI_MODE, RCVBDI_MODE_ENABLE, silent); 8147 err |= tg3_stop_block(tp, RCVLPC_MODE, RCVLPC_MODE_ENABLE, silent); 8148 err |= tg3_stop_block(tp, RCVLSC_MODE, RCVLSC_MODE_ENABLE, silent); 8149 err |= tg3_stop_block(tp, RCVDBDI_MODE, RCVDBDI_MODE_ENABLE, silent); 8150 err |= tg3_stop_block(tp, RCVDCC_MODE, RCVDCC_MODE_ENABLE, silent); 8151 err |= tg3_stop_block(tp, RCVCC_MODE, RCVCC_MODE_ENABLE, silent); 8152 8153 err |= tg3_stop_block(tp, SNDBDS_MODE, SNDBDS_MODE_ENABLE, silent); 8154 err |= tg3_stop_block(tp, SNDBDI_MODE, SNDBDI_MODE_ENABLE, silent); 8155 err |= tg3_stop_block(tp, SNDDATAI_MODE, SNDDATAI_MODE_ENABLE, silent); 8156 err |= tg3_stop_block(tp, RDMAC_MODE, RDMAC_MODE_ENABLE, silent); 8157 err |= tg3_stop_block(tp, SNDDATAC_MODE, SNDDATAC_MODE_ENABLE, silent); 8158 err |= tg3_stop_block(tp, DMAC_MODE, DMAC_MODE_ENABLE, silent); 8159 err |= tg3_stop_block(tp, SNDBDC_MODE, SNDBDC_MODE_ENABLE, silent); 8160 8161 tp->mac_mode &= ~MAC_MODE_TDE_ENABLE; 8162 tw32_f(MAC_MODE, tp->mac_mode); 8163 udelay(40); 8164 8165 tp->tx_mode &= ~TX_MODE_ENABLE; 8166 tw32_f(MAC_TX_MODE, tp->tx_mode); 8167 8168 for (i = 0; i < MAX_WAIT_CNT; i++) { 8169 udelay(100); 8170 if (!(tr32(MAC_TX_MODE) & TX_MODE_ENABLE)) 8171 break; 8172 } 8173 if (i >= MAX_WAIT_CNT) { 8174 dev_err(&tp->pdev->dev, 8175 "%s timed out, TX_MODE_ENABLE will not clear " 8176 "MAC_TX_MODE=%08x\n", __func__, tr32(MAC_TX_MODE)); 8177 err |= -ENODEV; 8178 } 8179 8180 err |= tg3_stop_block(tp, HOSTCC_MODE, HOSTCC_MODE_ENABLE, silent); 8181 err |= tg3_stop_block(tp, WDMAC_MODE, WDMAC_MODE_ENABLE, silent); 8182 err |= tg3_stop_block(tp, MBFREE_MODE, MBFREE_MODE_ENABLE, silent); 8183 8184 tw32(FTQ_RESET, 0xffffffff); 8185 tw32(FTQ_RESET, 0x00000000); 8186 8187 err |= tg3_stop_block(tp, BUFMGR_MODE, BUFMGR_MODE_ENABLE, silent); 8188 err |= tg3_stop_block(tp, MEMARB_MODE, MEMARB_MODE_ENABLE, silent); 8189 8190 for (i = 0; i < tp->irq_cnt; i++) { 8191 struct tg3_napi *tnapi = &tp->napi[i]; 8192 if (tnapi->hw_status) 8193 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8194 } 8195 8196 return err; 8197 } 8198 8199 /* Save PCI command register before chip reset */ 8200 static void tg3_save_pci_state(struct tg3 *tp) 8201 { 8202 pci_read_config_word(tp->pdev, PCI_COMMAND, &tp->pci_cmd); 8203 } 8204 8205 /* Restore PCI state after chip reset */ 8206 static void tg3_restore_pci_state(struct tg3 *tp) 8207 { 8208 u32 val; 8209 8210 /* Re-enable indirect register accesses. */ 8211 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 8212 tp->misc_host_ctrl); 8213 8214 /* Set MAX PCI retry to zero. */ 8215 val = (PCISTATE_ROM_ENABLE | PCISTATE_ROM_RETRY_ENABLE); 8216 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && 8217 tg3_flag(tp, PCIX_MODE)) 8218 val |= PCISTATE_RETRY_SAME_DMA; 8219 /* Allow reads and writes to the APE register and memory space. */ 8220 if (tg3_flag(tp, ENABLE_APE)) 8221 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 8222 PCISTATE_ALLOW_APE_SHMEM_WR | 8223 PCISTATE_ALLOW_APE_PSPACE_WR; 8224 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, val); 8225 8226 pci_write_config_word(tp->pdev, PCI_COMMAND, tp->pci_cmd); 8227 8228 if (!tg3_flag(tp, PCI_EXPRESS)) { 8229 pci_write_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 8230 tp->pci_cacheline_sz); 8231 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 8232 tp->pci_lat_timer); 8233 } 8234 8235 /* Make sure PCI-X relaxed ordering bit is clear. */ 8236 if (tg3_flag(tp, PCIX_MODE)) { 8237 u16 pcix_cmd; 8238 8239 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8240 &pcix_cmd); 8241 pcix_cmd &= ~PCI_X_CMD_ERO; 8242 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 8243 pcix_cmd); 8244 } 8245 8246 if (tg3_flag(tp, 5780_CLASS)) { 8247 8248 /* Chip reset on 5780 will reset MSI enable bit, 8249 * so need to restore it. 8250 */ 8251 if (tg3_flag(tp, USING_MSI)) { 8252 u16 ctrl; 8253 8254 pci_read_config_word(tp->pdev, 8255 tp->msi_cap + PCI_MSI_FLAGS, 8256 &ctrl); 8257 pci_write_config_word(tp->pdev, 8258 tp->msi_cap + PCI_MSI_FLAGS, 8259 ctrl | PCI_MSI_FLAGS_ENABLE); 8260 val = tr32(MSGINT_MODE); 8261 tw32(MSGINT_MODE, val | MSGINT_MODE_ENABLE); 8262 } 8263 } 8264 } 8265 8266 /* tp->lock is held. */ 8267 static int tg3_chip_reset(struct tg3 *tp) 8268 { 8269 u32 val; 8270 void (*write_op)(struct tg3 *, u32, u32); 8271 int i, err; 8272 8273 tg3_nvram_lock(tp); 8274 8275 tg3_ape_lock(tp, TG3_APE_LOCK_GRC); 8276 8277 /* No matching tg3_nvram_unlock() after this because 8278 * chip reset below will undo the nvram lock. 8279 */ 8280 tp->nvram_lock_cnt = 0; 8281 8282 /* GRC_MISC_CFG core clock reset will clear the memory 8283 * enable bit in PCI register 4 and the MSI enable bit 8284 * on some chips, so we save relevant registers here. 8285 */ 8286 tg3_save_pci_state(tp); 8287 8288 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 8289 tg3_flag(tp, 5755_PLUS)) 8290 tw32(GRC_FASTBOOT_PC, 0); 8291 8292 /* 8293 * We must avoid the readl() that normally takes place. 8294 * It locks machines, causes machine checks, and other 8295 * fun things. So, temporarily disable the 5701 8296 * hardware workaround, while we do the reset. 8297 */ 8298 write_op = tp->write32; 8299 if (write_op == tg3_write_flush_reg32) 8300 tp->write32 = tg3_write32; 8301 8302 /* Prevent the irq handler from reading or writing PCI registers 8303 * during chip reset when the memory enable bit in the PCI command 8304 * register may be cleared. The chip does not generate interrupt 8305 * at this time, but the irq handler may still be called due to irq 8306 * sharing or irqpoll. 8307 */ 8308 tg3_flag_set(tp, CHIP_RESETTING); 8309 for (i = 0; i < tp->irq_cnt; i++) { 8310 struct tg3_napi *tnapi = &tp->napi[i]; 8311 if (tnapi->hw_status) { 8312 tnapi->hw_status->status = 0; 8313 tnapi->hw_status->status_tag = 0; 8314 } 8315 tnapi->last_tag = 0; 8316 tnapi->last_irq_tag = 0; 8317 } 8318 smp_mb(); 8319 8320 for (i = 0; i < tp->irq_cnt; i++) 8321 synchronize_irq(tp->napi[i].irq_vec); 8322 8323 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 8324 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 8325 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 8326 } 8327 8328 /* do the reset */ 8329 val = GRC_MISC_CFG_CORECLK_RESET; 8330 8331 if (tg3_flag(tp, PCI_EXPRESS)) { 8332 /* Force PCIe 1.0a mode */ 8333 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 8334 !tg3_flag(tp, 57765_PLUS) && 8335 tr32(TG3_PCIE_PHY_TSTCTL) == 8336 (TG3_PCIE_PHY_TSTCTL_PCIE10 | TG3_PCIE_PHY_TSTCTL_PSCRAM)) 8337 tw32(TG3_PCIE_PHY_TSTCTL, TG3_PCIE_PHY_TSTCTL_PSCRAM); 8338 8339 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) { 8340 tw32(GRC_MISC_CFG, (1 << 29)); 8341 val |= (1 << 29); 8342 } 8343 } 8344 8345 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 8346 tw32(VCPU_STATUS, tr32(VCPU_STATUS) | VCPU_STATUS_DRV_RESET); 8347 tw32(GRC_VCPU_EXT_CTRL, 8348 tr32(GRC_VCPU_EXT_CTRL) & ~GRC_VCPU_EXT_CTRL_HALT_CPU); 8349 } 8350 8351 /* Manage gphy power for all CPMU absent PCIe devices. */ 8352 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, CPMU_PRESENT)) 8353 val |= GRC_MISC_CFG_KEEP_GPHY_POWER; 8354 8355 tw32(GRC_MISC_CFG, val); 8356 8357 /* restore 5701 hardware bug workaround write method */ 8358 tp->write32 = write_op; 8359 8360 /* Unfortunately, we have to delay before the PCI read back. 8361 * Some 575X chips even will not respond to a PCI cfg access 8362 * when the reset command is given to the chip. 8363 * 8364 * How do these hardware designers expect things to work 8365 * properly if the PCI write is posted for a long period 8366 * of time? It is always necessary to have some method by 8367 * which a register read back can occur to push the write 8368 * out which does the reset. 8369 * 8370 * For most tg3 variants the trick below was working. 8371 * Ho hum... 8372 */ 8373 udelay(120); 8374 8375 /* Flush PCI posted writes. The normal MMIO registers 8376 * are inaccessible at this time so this is the only 8377 * way to make this reliably (actually, this is no longer 8378 * the case, see above). I tried to use indirect 8379 * register read/write but this upset some 5701 variants. 8380 */ 8381 pci_read_config_dword(tp->pdev, PCI_COMMAND, &val); 8382 8383 udelay(120); 8384 8385 if (tg3_flag(tp, PCI_EXPRESS) && pci_is_pcie(tp->pdev)) { 8386 u16 val16; 8387 8388 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A0) { 8389 int j; 8390 u32 cfg_val; 8391 8392 /* Wait for link training to complete. */ 8393 for (j = 0; j < 5000; j++) 8394 udelay(100); 8395 8396 pci_read_config_dword(tp->pdev, 0xc4, &cfg_val); 8397 pci_write_config_dword(tp->pdev, 0xc4, 8398 cfg_val | (1 << 15)); 8399 } 8400 8401 /* Clear the "no snoop" and "relaxed ordering" bits. */ 8402 val16 = PCI_EXP_DEVCTL_RELAX_EN | PCI_EXP_DEVCTL_NOSNOOP_EN; 8403 /* 8404 * Older PCIe devices only support the 128 byte 8405 * MPS setting. Enforce the restriction. 8406 */ 8407 if (!tg3_flag(tp, CPMU_PRESENT)) 8408 val16 |= PCI_EXP_DEVCTL_PAYLOAD; 8409 pcie_capability_clear_word(tp->pdev, PCI_EXP_DEVCTL, val16); 8410 8411 /* Clear error status */ 8412 pcie_capability_write_word(tp->pdev, PCI_EXP_DEVSTA, 8413 PCI_EXP_DEVSTA_CED | 8414 PCI_EXP_DEVSTA_NFED | 8415 PCI_EXP_DEVSTA_FED | 8416 PCI_EXP_DEVSTA_URD); 8417 } 8418 8419 tg3_restore_pci_state(tp); 8420 8421 tg3_flag_clear(tp, CHIP_RESETTING); 8422 tg3_flag_clear(tp, ERROR_PROCESSED); 8423 8424 val = 0; 8425 if (tg3_flag(tp, 5780_CLASS)) 8426 val = tr32(MEMARB_MODE); 8427 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 8428 8429 if (tp->pci_chip_rev_id == CHIPREV_ID_5750_A3) { 8430 tg3_stop_fw(tp); 8431 tw32(0x5000, 0x400); 8432 } 8433 8434 tw32(GRC_MODE, tp->grc_mode); 8435 8436 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) { 8437 val = tr32(0xc4); 8438 8439 tw32(0xc4, val | (1 << 15)); 8440 } 8441 8442 if ((tp->nic_sram_data_cfg & NIC_SRAM_DATA_CFG_MINI_PCI) != 0 && 8443 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 8444 tp->pci_clock_ctrl |= CLOCK_CTRL_CLKRUN_OENABLE; 8445 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) 8446 tp->pci_clock_ctrl |= CLOCK_CTRL_FORCE_CLKRUN; 8447 tw32(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 8448 } 8449 8450 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 8451 tp->mac_mode = MAC_MODE_PORT_MODE_TBI; 8452 val = tp->mac_mode; 8453 } else if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 8454 tp->mac_mode = MAC_MODE_PORT_MODE_GMII; 8455 val = tp->mac_mode; 8456 } else 8457 val = 0; 8458 8459 tw32_f(MAC_MODE, val); 8460 udelay(40); 8461 8462 tg3_ape_unlock(tp, TG3_APE_LOCK_GRC); 8463 8464 err = tg3_poll_fw(tp); 8465 if (err) 8466 return err; 8467 8468 tg3_mdio_start(tp); 8469 8470 if (tg3_flag(tp, PCI_EXPRESS) && 8471 tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && 8472 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 8473 !tg3_flag(tp, 57765_PLUS)) { 8474 val = tr32(0x7c00); 8475 8476 tw32(0x7c00, val | (1 << 25)); 8477 } 8478 8479 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 8480 val = tr32(TG3_CPMU_CLCK_ORIDE); 8481 tw32(TG3_CPMU_CLCK_ORIDE, val & ~CPMU_CLCK_ORIDE_MAC_ORIDE_EN); 8482 } 8483 8484 /* Reprobe ASF enable state. */ 8485 tg3_flag_clear(tp, ENABLE_ASF); 8486 tg3_flag_clear(tp, ASF_NEW_HANDSHAKE); 8487 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 8488 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 8489 u32 nic_cfg; 8490 8491 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 8492 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 8493 tg3_flag_set(tp, ENABLE_ASF); 8494 tp->last_event_jiffies = jiffies; 8495 if (tg3_flag(tp, 5750_PLUS)) 8496 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 8497 } 8498 } 8499 8500 return 0; 8501 } 8502 8503 static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); 8504 static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); 8505 8506 /* tp->lock is held. */ 8507 static int tg3_halt(struct tg3 *tp, int kind, int silent) 8508 { 8509 int err; 8510 8511 tg3_stop_fw(tp); 8512 8513 tg3_write_sig_pre_reset(tp, kind); 8514 8515 tg3_abort_hw(tp, silent); 8516 err = tg3_chip_reset(tp); 8517 8518 __tg3_set_mac_addr(tp, 0); 8519 8520 tg3_write_sig_legacy(tp, kind); 8521 tg3_write_sig_post_reset(tp, kind); 8522 8523 if (tp->hw_stats) { 8524 /* Save the stats across chip resets... */ 8525 tg3_get_nstats(tp, &tp->net_stats_prev); 8526 tg3_get_estats(tp, &tp->estats_prev); 8527 8528 /* And make sure the next sample is new data */ 8529 memset(tp->hw_stats, 0, sizeof(struct tg3_hw_stats)); 8530 } 8531 8532 if (err) 8533 return err; 8534 8535 return 0; 8536 } 8537 8538 static int tg3_set_mac_addr(struct net_device *dev, void *p) 8539 { 8540 struct tg3 *tp = netdev_priv(dev); 8541 struct sockaddr *addr = p; 8542 int err = 0, skip_mac_1 = 0; 8543 8544 if (!is_valid_ether_addr(addr->sa_data)) 8545 return -EADDRNOTAVAIL; 8546 8547 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 8548 8549 if (!netif_running(dev)) 8550 return 0; 8551 8552 if (tg3_flag(tp, ENABLE_ASF)) { 8553 u32 addr0_high, addr0_low, addr1_high, addr1_low; 8554 8555 addr0_high = tr32(MAC_ADDR_0_HIGH); 8556 addr0_low = tr32(MAC_ADDR_0_LOW); 8557 addr1_high = tr32(MAC_ADDR_1_HIGH); 8558 addr1_low = tr32(MAC_ADDR_1_LOW); 8559 8560 /* Skip MAC addr 1 if ASF is using it. */ 8561 if ((addr0_high != addr1_high || addr0_low != addr1_low) && 8562 !(addr1_high == 0 && addr1_low == 0)) 8563 skip_mac_1 = 1; 8564 } 8565 spin_lock_bh(&tp->lock); 8566 __tg3_set_mac_addr(tp, skip_mac_1); 8567 spin_unlock_bh(&tp->lock); 8568 8569 return err; 8570 } 8571 8572 /* tp->lock is held. */ 8573 static void tg3_set_bdinfo(struct tg3 *tp, u32 bdinfo_addr, 8574 dma_addr_t mapping, u32 maxlen_flags, 8575 u32 nic_addr) 8576 { 8577 tg3_write_mem(tp, 8578 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH), 8579 ((u64) mapping >> 32)); 8580 tg3_write_mem(tp, 8581 (bdinfo_addr + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW), 8582 ((u64) mapping & 0xffffffff)); 8583 tg3_write_mem(tp, 8584 (bdinfo_addr + TG3_BDINFO_MAXLEN_FLAGS), 8585 maxlen_flags); 8586 8587 if (!tg3_flag(tp, 5705_PLUS)) 8588 tg3_write_mem(tp, 8589 (bdinfo_addr + TG3_BDINFO_NIC_ADDR), 8590 nic_addr); 8591 } 8592 8593 8594 static void tg3_coal_tx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 8595 { 8596 int i = 0; 8597 8598 if (!tg3_flag(tp, ENABLE_TSS)) { 8599 tw32(HOSTCC_TXCOL_TICKS, ec->tx_coalesce_usecs); 8600 tw32(HOSTCC_TXMAX_FRAMES, ec->tx_max_coalesced_frames); 8601 tw32(HOSTCC_TXCOAL_MAXF_INT, ec->tx_max_coalesced_frames_irq); 8602 } else { 8603 tw32(HOSTCC_TXCOL_TICKS, 0); 8604 tw32(HOSTCC_TXMAX_FRAMES, 0); 8605 tw32(HOSTCC_TXCOAL_MAXF_INT, 0); 8606 8607 for (; i < tp->txq_cnt; i++) { 8608 u32 reg; 8609 8610 reg = HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18; 8611 tw32(reg, ec->tx_coalesce_usecs); 8612 reg = HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18; 8613 tw32(reg, ec->tx_max_coalesced_frames); 8614 reg = HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18; 8615 tw32(reg, ec->tx_max_coalesced_frames_irq); 8616 } 8617 } 8618 8619 for (; i < tp->irq_max - 1; i++) { 8620 tw32(HOSTCC_TXCOL_TICKS_VEC1 + i * 0x18, 0); 8621 tw32(HOSTCC_TXMAX_FRAMES_VEC1 + i * 0x18, 0); 8622 tw32(HOSTCC_TXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 8623 } 8624 } 8625 8626 static void tg3_coal_rx_init(struct tg3 *tp, struct ethtool_coalesce *ec) 8627 { 8628 int i = 0; 8629 u32 limit = tp->rxq_cnt; 8630 8631 if (!tg3_flag(tp, ENABLE_RSS)) { 8632 tw32(HOSTCC_RXCOL_TICKS, ec->rx_coalesce_usecs); 8633 tw32(HOSTCC_RXMAX_FRAMES, ec->rx_max_coalesced_frames); 8634 tw32(HOSTCC_RXCOAL_MAXF_INT, ec->rx_max_coalesced_frames_irq); 8635 limit--; 8636 } else { 8637 tw32(HOSTCC_RXCOL_TICKS, 0); 8638 tw32(HOSTCC_RXMAX_FRAMES, 0); 8639 tw32(HOSTCC_RXCOAL_MAXF_INT, 0); 8640 } 8641 8642 for (; i < limit; i++) { 8643 u32 reg; 8644 8645 reg = HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18; 8646 tw32(reg, ec->rx_coalesce_usecs); 8647 reg = HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18; 8648 tw32(reg, ec->rx_max_coalesced_frames); 8649 reg = HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18; 8650 tw32(reg, ec->rx_max_coalesced_frames_irq); 8651 } 8652 8653 for (; i < tp->irq_max - 1; i++) { 8654 tw32(HOSTCC_RXCOL_TICKS_VEC1 + i * 0x18, 0); 8655 tw32(HOSTCC_RXMAX_FRAMES_VEC1 + i * 0x18, 0); 8656 tw32(HOSTCC_RXCOAL_MAXF_INT_VEC1 + i * 0x18, 0); 8657 } 8658 } 8659 8660 static void __tg3_set_coalesce(struct tg3 *tp, struct ethtool_coalesce *ec) 8661 { 8662 tg3_coal_tx_init(tp, ec); 8663 tg3_coal_rx_init(tp, ec); 8664 8665 if (!tg3_flag(tp, 5705_PLUS)) { 8666 u32 val = ec->stats_block_coalesce_usecs; 8667 8668 tw32(HOSTCC_RXCOAL_TICK_INT, ec->rx_coalesce_usecs_irq); 8669 tw32(HOSTCC_TXCOAL_TICK_INT, ec->tx_coalesce_usecs_irq); 8670 8671 if (!tp->link_up) 8672 val = 0; 8673 8674 tw32(HOSTCC_STAT_COAL_TICKS, val); 8675 } 8676 } 8677 8678 /* tp->lock is held. */ 8679 static void tg3_rings_reset(struct tg3 *tp) 8680 { 8681 int i; 8682 u32 stblk, txrcb, rxrcb, limit; 8683 struct tg3_napi *tnapi = &tp->napi[0]; 8684 8685 /* Disable all transmit rings but the first. */ 8686 if (!tg3_flag(tp, 5705_PLUS)) 8687 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 16; 8688 else if (tg3_flag(tp, 5717_PLUS)) 8689 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 4; 8690 else if (tg3_flag(tp, 57765_CLASS)) 8691 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE * 2; 8692 else 8693 limit = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 8694 8695 for (txrcb = NIC_SRAM_SEND_RCB + TG3_BDINFO_SIZE; 8696 txrcb < limit; txrcb += TG3_BDINFO_SIZE) 8697 tg3_write_mem(tp, txrcb + TG3_BDINFO_MAXLEN_FLAGS, 8698 BDINFO_FLAGS_DISABLED); 8699 8700 8701 /* Disable all receive return rings but the first. */ 8702 if (tg3_flag(tp, 5717_PLUS)) 8703 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; 8704 else if (!tg3_flag(tp, 5705_PLUS)) 8705 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; 8706 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 8707 tg3_flag(tp, 57765_CLASS)) 8708 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; 8709 else 8710 limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 8711 8712 for (rxrcb = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE; 8713 rxrcb < limit; rxrcb += TG3_BDINFO_SIZE) 8714 tg3_write_mem(tp, rxrcb + TG3_BDINFO_MAXLEN_FLAGS, 8715 BDINFO_FLAGS_DISABLED); 8716 8717 /* Disable interrupts */ 8718 tw32_mailbox_f(tp->napi[0].int_mbox, 1); 8719 tp->napi[0].chk_msi_cnt = 0; 8720 tp->napi[0].last_rx_cons = 0; 8721 tp->napi[0].last_tx_cons = 0; 8722 8723 /* Zero mailbox registers. */ 8724 if (tg3_flag(tp, SUPPORT_MSIX)) { 8725 for (i = 1; i < tp->irq_max; i++) { 8726 tp->napi[i].tx_prod = 0; 8727 tp->napi[i].tx_cons = 0; 8728 if (tg3_flag(tp, ENABLE_TSS)) 8729 tw32_mailbox(tp->napi[i].prodmbox, 0); 8730 tw32_rx_mbox(tp->napi[i].consmbox, 0); 8731 tw32_mailbox_f(tp->napi[i].int_mbox, 1); 8732 tp->napi[i].chk_msi_cnt = 0; 8733 tp->napi[i].last_rx_cons = 0; 8734 tp->napi[i].last_tx_cons = 0; 8735 } 8736 if (!tg3_flag(tp, ENABLE_TSS)) 8737 tw32_mailbox(tp->napi[0].prodmbox, 0); 8738 } else { 8739 tp->napi[0].tx_prod = 0; 8740 tp->napi[0].tx_cons = 0; 8741 tw32_mailbox(tp->napi[0].prodmbox, 0); 8742 tw32_rx_mbox(tp->napi[0].consmbox, 0); 8743 } 8744 8745 /* Make sure the NIC-based send BD rings are disabled. */ 8746 if (!tg3_flag(tp, 5705_PLUS)) { 8747 u32 mbox = MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW; 8748 for (i = 0; i < 16; i++) 8749 tw32_tx_mbox(mbox + i * 8, 0); 8750 } 8751 8752 txrcb = NIC_SRAM_SEND_RCB; 8753 rxrcb = NIC_SRAM_RCV_RET_RCB; 8754 8755 /* Clear status block in ram. */ 8756 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8757 8758 /* Set status block DMA address */ 8759 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 8760 ((u64) tnapi->status_mapping >> 32)); 8761 tw32(HOSTCC_STATUS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 8762 ((u64) tnapi->status_mapping & 0xffffffff)); 8763 8764 if (tnapi->tx_ring) { 8765 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 8766 (TG3_TX_RING_SIZE << 8767 BDINFO_FLAGS_MAXLEN_SHIFT), 8768 NIC_SRAM_TX_BUFFER_DESC); 8769 txrcb += TG3_BDINFO_SIZE; 8770 } 8771 8772 if (tnapi->rx_rcb) { 8773 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 8774 (tp->rx_ret_ring_mask + 1) << 8775 BDINFO_FLAGS_MAXLEN_SHIFT, 0); 8776 rxrcb += TG3_BDINFO_SIZE; 8777 } 8778 8779 stblk = HOSTCC_STATBLCK_RING1; 8780 8781 for (i = 1, tnapi++; i < tp->irq_cnt; i++, tnapi++) { 8782 u64 mapping = (u64)tnapi->status_mapping; 8783 tw32(stblk + TG3_64BIT_REG_HIGH, mapping >> 32); 8784 tw32(stblk + TG3_64BIT_REG_LOW, mapping & 0xffffffff); 8785 8786 /* Clear status block in ram. */ 8787 memset(tnapi->hw_status, 0, TG3_HW_STATUS_SIZE); 8788 8789 if (tnapi->tx_ring) { 8790 tg3_set_bdinfo(tp, txrcb, tnapi->tx_desc_mapping, 8791 (TG3_TX_RING_SIZE << 8792 BDINFO_FLAGS_MAXLEN_SHIFT), 8793 NIC_SRAM_TX_BUFFER_DESC); 8794 txrcb += TG3_BDINFO_SIZE; 8795 } 8796 8797 tg3_set_bdinfo(tp, rxrcb, tnapi->rx_rcb_mapping, 8798 ((tp->rx_ret_ring_mask + 1) << 8799 BDINFO_FLAGS_MAXLEN_SHIFT), 0); 8800 8801 stblk += 8; 8802 rxrcb += TG3_BDINFO_SIZE; 8803 } 8804 } 8805 8806 static void tg3_setup_rxbd_thresholds(struct tg3 *tp) 8807 { 8808 u32 val, bdcache_maxcnt, host_rep_thresh, nic_rep_thresh; 8809 8810 if (!tg3_flag(tp, 5750_PLUS) || 8811 tg3_flag(tp, 5780_CLASS) || 8812 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 8813 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 8814 tg3_flag(tp, 57765_PLUS)) 8815 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5700; 8816 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 8817 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787) 8818 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5755; 8819 else 8820 bdcache_maxcnt = TG3_SRAM_RX_STD_BDCACHE_SIZE_5906; 8821 8822 nic_rep_thresh = min(bdcache_maxcnt / 2, tp->rx_std_max_post); 8823 host_rep_thresh = max_t(u32, tp->rx_pending / 8, 1); 8824 8825 val = min(nic_rep_thresh, host_rep_thresh); 8826 tw32(RCVBDI_STD_THRESH, val); 8827 8828 if (tg3_flag(tp, 57765_PLUS)) 8829 tw32(STD_REPLENISH_LWM, bdcache_maxcnt); 8830 8831 if (!tg3_flag(tp, JUMBO_CAPABLE) || tg3_flag(tp, 5780_CLASS)) 8832 return; 8833 8834 bdcache_maxcnt = TG3_SRAM_RX_JMB_BDCACHE_SIZE_5700; 8835 8836 host_rep_thresh = max_t(u32, tp->rx_jumbo_pending / 8, 1); 8837 8838 val = min(bdcache_maxcnt / 2, host_rep_thresh); 8839 tw32(RCVBDI_JUMBO_THRESH, val); 8840 8841 if (tg3_flag(tp, 57765_PLUS)) 8842 tw32(JMB_REPLENISH_LWM, bdcache_maxcnt); 8843 } 8844 8845 static inline u32 calc_crc(unsigned char *buf, int len) 8846 { 8847 u32 reg; 8848 u32 tmp; 8849 int j, k; 8850 8851 reg = 0xffffffff; 8852 8853 for (j = 0; j < len; j++) { 8854 reg ^= buf[j]; 8855 8856 for (k = 0; k < 8; k++) { 8857 tmp = reg & 0x01; 8858 8859 reg >>= 1; 8860 8861 if (tmp) 8862 reg ^= 0xedb88320; 8863 } 8864 } 8865 8866 return ~reg; 8867 } 8868 8869 static void tg3_set_multi(struct tg3 *tp, unsigned int accept_all) 8870 { 8871 /* accept or reject all multicast frames */ 8872 tw32(MAC_HASH_REG_0, accept_all ? 0xffffffff : 0); 8873 tw32(MAC_HASH_REG_1, accept_all ? 0xffffffff : 0); 8874 tw32(MAC_HASH_REG_2, accept_all ? 0xffffffff : 0); 8875 tw32(MAC_HASH_REG_3, accept_all ? 0xffffffff : 0); 8876 } 8877 8878 static void __tg3_set_rx_mode(struct net_device *dev) 8879 { 8880 struct tg3 *tp = netdev_priv(dev); 8881 u32 rx_mode; 8882 8883 rx_mode = tp->rx_mode & ~(RX_MODE_PROMISC | 8884 RX_MODE_KEEP_VLAN_TAG); 8885 8886 #if !defined(CONFIG_VLAN_8021Q) && !defined(CONFIG_VLAN_8021Q_MODULE) 8887 /* When ASF is in use, we always keep the RX_MODE_KEEP_VLAN_TAG 8888 * flag clear. 8889 */ 8890 if (!tg3_flag(tp, ENABLE_ASF)) 8891 rx_mode |= RX_MODE_KEEP_VLAN_TAG; 8892 #endif 8893 8894 if (dev->flags & IFF_PROMISC) { 8895 /* Promiscuous mode. */ 8896 rx_mode |= RX_MODE_PROMISC; 8897 } else if (dev->flags & IFF_ALLMULTI) { 8898 /* Accept all multicast. */ 8899 tg3_set_multi(tp, 1); 8900 } else if (netdev_mc_empty(dev)) { 8901 /* Reject all multicast. */ 8902 tg3_set_multi(tp, 0); 8903 } else { 8904 /* Accept one or more multicast(s). */ 8905 struct netdev_hw_addr *ha; 8906 u32 mc_filter[4] = { 0, }; 8907 u32 regidx; 8908 u32 bit; 8909 u32 crc; 8910 8911 netdev_for_each_mc_addr(ha, dev) { 8912 crc = calc_crc(ha->addr, ETH_ALEN); 8913 bit = ~crc & 0x7f; 8914 regidx = (bit & 0x60) >> 5; 8915 bit &= 0x1f; 8916 mc_filter[regidx] |= (1 << bit); 8917 } 8918 8919 tw32(MAC_HASH_REG_0, mc_filter[0]); 8920 tw32(MAC_HASH_REG_1, mc_filter[1]); 8921 tw32(MAC_HASH_REG_2, mc_filter[2]); 8922 tw32(MAC_HASH_REG_3, mc_filter[3]); 8923 } 8924 8925 if (rx_mode != tp->rx_mode) { 8926 tp->rx_mode = rx_mode; 8927 tw32_f(MAC_RX_MODE, rx_mode); 8928 udelay(10); 8929 } 8930 } 8931 8932 static void tg3_rss_init_dflt_indir_tbl(struct tg3 *tp, u32 qcnt) 8933 { 8934 int i; 8935 8936 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 8937 tp->rss_ind_tbl[i] = ethtool_rxfh_indir_default(i, qcnt); 8938 } 8939 8940 static void tg3_rss_check_indir_tbl(struct tg3 *tp) 8941 { 8942 int i; 8943 8944 if (!tg3_flag(tp, SUPPORT_MSIX)) 8945 return; 8946 8947 if (tp->rxq_cnt == 1) { 8948 memset(&tp->rss_ind_tbl[0], 0, sizeof(tp->rss_ind_tbl)); 8949 return; 8950 } 8951 8952 /* Validate table against current IRQ count */ 8953 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) { 8954 if (tp->rss_ind_tbl[i] >= tp->rxq_cnt) 8955 break; 8956 } 8957 8958 if (i != TG3_RSS_INDIR_TBL_SIZE) 8959 tg3_rss_init_dflt_indir_tbl(tp, tp->rxq_cnt); 8960 } 8961 8962 static void tg3_rss_write_indir_tbl(struct tg3 *tp) 8963 { 8964 int i = 0; 8965 u32 reg = MAC_RSS_INDIR_TBL_0; 8966 8967 while (i < TG3_RSS_INDIR_TBL_SIZE) { 8968 u32 val = tp->rss_ind_tbl[i]; 8969 i++; 8970 for (; i % 8; i++) { 8971 val <<= 4; 8972 val |= tp->rss_ind_tbl[i]; 8973 } 8974 tw32(reg, val); 8975 reg += 4; 8976 } 8977 } 8978 8979 /* tp->lock is held. */ 8980 static int tg3_reset_hw(struct tg3 *tp, int reset_phy) 8981 { 8982 u32 val, rdmac_mode; 8983 int i, err, limit; 8984 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 8985 8986 tg3_disable_ints(tp); 8987 8988 tg3_stop_fw(tp); 8989 8990 tg3_write_sig_pre_reset(tp, RESET_KIND_INIT); 8991 8992 if (tg3_flag(tp, INIT_COMPLETE)) 8993 tg3_abort_hw(tp, 1); 8994 8995 /* Enable MAC control of LPI */ 8996 if (tp->phy_flags & TG3_PHYFLG_EEE_CAP) { 8997 tw32_f(TG3_CPMU_EEE_LNKIDL_CTRL, 8998 TG3_CPMU_EEE_LNKIDL_PCIE_NL0 | 8999 TG3_CPMU_EEE_LNKIDL_UART_IDL); 9000 9001 tw32_f(TG3_CPMU_EEE_CTRL, 9002 TG3_CPMU_EEE_CTRL_EXIT_20_1_US); 9003 9004 val = TG3_CPMU_EEEMD_ERLY_L1_XIT_DET | 9005 TG3_CPMU_EEEMD_LPI_IN_TX | 9006 TG3_CPMU_EEEMD_LPI_IN_RX | 9007 TG3_CPMU_EEEMD_EEE_ENABLE; 9008 9009 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) 9010 val |= TG3_CPMU_EEEMD_SND_IDX_DET_EN; 9011 9012 if (tg3_flag(tp, ENABLE_APE)) 9013 val |= TG3_CPMU_EEEMD_APE_TX_DET_EN; 9014 9015 tw32_f(TG3_CPMU_EEE_MODE, val); 9016 9017 tw32_f(TG3_CPMU_EEE_DBTMR1, 9018 TG3_CPMU_DBTMR1_PCIEXIT_2047US | 9019 TG3_CPMU_DBTMR1_LNKIDLE_2047US); 9020 9021 tw32_f(TG3_CPMU_EEE_DBTMR2, 9022 TG3_CPMU_DBTMR2_APE_TX_2047US | 9023 TG3_CPMU_DBTMR2_TXIDXEQ_2047US); 9024 } 9025 9026 if (reset_phy) 9027 tg3_phy_reset(tp); 9028 9029 err = tg3_chip_reset(tp); 9030 if (err) 9031 return err; 9032 9033 tg3_write_sig_legacy(tp, RESET_KIND_INIT); 9034 9035 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) { 9036 val = tr32(TG3_CPMU_CTRL); 9037 val &= ~(CPMU_CTRL_LINK_AWARE_MODE | CPMU_CTRL_LINK_IDLE_MODE); 9038 tw32(TG3_CPMU_CTRL, val); 9039 9040 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9041 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9042 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9043 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9044 9045 val = tr32(TG3_CPMU_LNK_AWARE_PWRMD); 9046 val &= ~CPMU_LNK_AWARE_MACCLK_MASK; 9047 val |= CPMU_LNK_AWARE_MACCLK_6_25; 9048 tw32(TG3_CPMU_LNK_AWARE_PWRMD, val); 9049 9050 val = tr32(TG3_CPMU_HST_ACC); 9051 val &= ~CPMU_HST_ACC_MACCLK_MASK; 9052 val |= CPMU_HST_ACC_MACCLK_6_25; 9053 tw32(TG3_CPMU_HST_ACC, val); 9054 } 9055 9056 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 9057 val = tr32(PCIE_PWR_MGMT_THRESH) & ~PCIE_PWR_MGMT_L1_THRESH_MSK; 9058 val |= PCIE_PWR_MGMT_EXT_ASPM_TMR_EN | 9059 PCIE_PWR_MGMT_L1_THRESH_4MS; 9060 tw32(PCIE_PWR_MGMT_THRESH, val); 9061 9062 val = tr32(TG3_PCIE_EIDLE_DELAY) & ~TG3_PCIE_EIDLE_DELAY_MASK; 9063 tw32(TG3_PCIE_EIDLE_DELAY, val | TG3_PCIE_EIDLE_DELAY_13_CLKS); 9064 9065 tw32(TG3_CORR_ERR_STAT, TG3_CORR_ERR_STAT_CLEAR); 9066 9067 val = tr32(TG3_PCIE_LNKCTL) & ~TG3_PCIE_LNKCTL_L1_PLL_PD_EN; 9068 tw32(TG3_PCIE_LNKCTL, val | TG3_PCIE_LNKCTL_L1_PLL_PD_DIS); 9069 } 9070 9071 if (tg3_flag(tp, L1PLLPD_EN)) { 9072 u32 grc_mode = tr32(GRC_MODE); 9073 9074 /* Access the lower 1K of PL PCIE block registers. */ 9075 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9076 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9077 9078 val = tr32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1); 9079 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL1, 9080 val | TG3_PCIE_PL_LO_PHYCTL1_L1PLLPD_EN); 9081 9082 tw32(GRC_MODE, grc_mode); 9083 } 9084 9085 if (tg3_flag(tp, 57765_CLASS)) { 9086 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) { 9087 u32 grc_mode = tr32(GRC_MODE); 9088 9089 /* Access the lower 1K of PL PCIE block registers. */ 9090 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9091 tw32(GRC_MODE, val | GRC_MODE_PCIE_PL_SEL); 9092 9093 val = tr32(TG3_PCIE_TLDLPL_PORT + 9094 TG3_PCIE_PL_LO_PHYCTL5); 9095 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_PL_LO_PHYCTL5, 9096 val | TG3_PCIE_PL_LO_PHYCTL5_DIS_L2CLKREQ); 9097 9098 tw32(GRC_MODE, grc_mode); 9099 } 9100 9101 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_57765_AX) { 9102 u32 grc_mode = tr32(GRC_MODE); 9103 9104 /* Access the lower 1K of DL PCIE block registers. */ 9105 val = grc_mode & ~GRC_MODE_PCIE_PORT_MASK; 9106 tw32(GRC_MODE, val | GRC_MODE_PCIE_DL_SEL); 9107 9108 val = tr32(TG3_PCIE_TLDLPL_PORT + 9109 TG3_PCIE_DL_LO_FTSMAX); 9110 val &= ~TG3_PCIE_DL_LO_FTSMAX_MSK; 9111 tw32(TG3_PCIE_TLDLPL_PORT + TG3_PCIE_DL_LO_FTSMAX, 9112 val | TG3_PCIE_DL_LO_FTSMAX_VAL); 9113 9114 tw32(GRC_MODE, grc_mode); 9115 } 9116 9117 val = tr32(TG3_CPMU_LSPD_10MB_CLK); 9118 val &= ~CPMU_LSPD_10MB_MACCLK_MASK; 9119 val |= CPMU_LSPD_10MB_MACCLK_6_25; 9120 tw32(TG3_CPMU_LSPD_10MB_CLK, val); 9121 } 9122 9123 /* This works around an issue with Athlon chipsets on 9124 * B3 tigon3 silicon. This bit has no effect on any 9125 * other revision. But do not set this on PCI Express 9126 * chips and don't even touch the clocks if the CPMU is present. 9127 */ 9128 if (!tg3_flag(tp, CPMU_PRESENT)) { 9129 if (!tg3_flag(tp, PCI_EXPRESS)) 9130 tp->pci_clock_ctrl |= CLOCK_CTRL_DELAY_PCI_GRANT; 9131 tw32_f(TG3PCI_CLOCK_CTRL, tp->pci_clock_ctrl); 9132 } 9133 9134 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0 && 9135 tg3_flag(tp, PCIX_MODE)) { 9136 val = tr32(TG3PCI_PCISTATE); 9137 val |= PCISTATE_RETRY_SAME_DMA; 9138 tw32(TG3PCI_PCISTATE, val); 9139 } 9140 9141 if (tg3_flag(tp, ENABLE_APE)) { 9142 /* Allow reads and writes to the 9143 * APE register and memory space. 9144 */ 9145 val = tr32(TG3PCI_PCISTATE); 9146 val |= PCISTATE_ALLOW_APE_CTLSPC_WR | 9147 PCISTATE_ALLOW_APE_SHMEM_WR | 9148 PCISTATE_ALLOW_APE_PSPACE_WR; 9149 tw32(TG3PCI_PCISTATE, val); 9150 } 9151 9152 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_BX) { 9153 /* Enable some hw fixes. */ 9154 val = tr32(TG3PCI_MSI_DATA); 9155 val |= (1 << 26) | (1 << 28) | (1 << 29); 9156 tw32(TG3PCI_MSI_DATA, val); 9157 } 9158 9159 /* Descriptor ring init may make accesses to the 9160 * NIC SRAM area to setup the TX descriptors, so we 9161 * can only do this after the hardware has been 9162 * successfully reset. 9163 */ 9164 err = tg3_init_rings(tp); 9165 if (err) 9166 return err; 9167 9168 if (tg3_flag(tp, 57765_PLUS)) { 9169 val = tr32(TG3PCI_DMA_RW_CTRL) & 9170 ~DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 9171 if (tp->pci_chip_rev_id == CHIPREV_ID_57765_A0) 9172 val &= ~DMA_RWCTRL_CRDRDR_RDMA_MRRS_MSK; 9173 if (!tg3_flag(tp, 57765_CLASS) && 9174 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) 9175 val |= DMA_RWCTRL_TAGGED_STAT_WA; 9176 tw32(TG3PCI_DMA_RW_CTRL, val | tp->dma_rwctrl); 9177 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 && 9178 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) { 9179 /* This value is determined during the probe time DMA 9180 * engine test, tg3_test_dma. 9181 */ 9182 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 9183 } 9184 9185 tp->grc_mode &= ~(GRC_MODE_HOST_SENDBDS | 9186 GRC_MODE_4X_NIC_SEND_RINGS | 9187 GRC_MODE_NO_TX_PHDR_CSUM | 9188 GRC_MODE_NO_RX_PHDR_CSUM); 9189 tp->grc_mode |= GRC_MODE_HOST_SENDBDS; 9190 9191 /* Pseudo-header checksum is done by hardware logic and not 9192 * the offload processers, so make the chip do the pseudo- 9193 * header checksums on receive. For transmit it is more 9194 * convenient to do the pseudo-header checksum in software 9195 * as Linux does that on transmit for us in all cases. 9196 */ 9197 tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; 9198 9199 val = GRC_MODE_IRQ_ON_MAC_ATTN | GRC_MODE_HOST_STACKUP; 9200 if (tp->rxptpctl) 9201 tw32(TG3_RX_PTP_CTL, 9202 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 9203 9204 if (tg3_flag(tp, PTP_CAPABLE)) 9205 val |= GRC_MODE_TIME_SYNC_ENABLE; 9206 9207 tw32(GRC_MODE, tp->grc_mode | val); 9208 9209 /* Setup the timer prescalar register. Clock is always 66Mhz. */ 9210 val = tr32(GRC_MISC_CFG); 9211 val &= ~0xff; 9212 val |= (65 << GRC_MISC_CFG_PRESCALAR_SHIFT); 9213 tw32(GRC_MISC_CFG, val); 9214 9215 /* Initialize MBUF/DESC pool. */ 9216 if (tg3_flag(tp, 5750_PLUS)) { 9217 /* Do nothing. */ 9218 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5705) { 9219 tw32(BUFMGR_MB_POOL_ADDR, NIC_SRAM_MBUF_POOL_BASE); 9220 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 9221 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE64); 9222 else 9223 tw32(BUFMGR_MB_POOL_SIZE, NIC_SRAM_MBUF_POOL_SIZE96); 9224 tw32(BUFMGR_DMA_DESC_POOL_ADDR, NIC_SRAM_DMA_DESC_POOL_BASE); 9225 tw32(BUFMGR_DMA_DESC_POOL_SIZE, NIC_SRAM_DMA_DESC_POOL_SIZE); 9226 } else if (tg3_flag(tp, TSO_CAPABLE)) { 9227 int fw_len; 9228 9229 fw_len = tp->fw_len; 9230 fw_len = (fw_len + (0x80 - 1)) & ~(0x80 - 1); 9231 tw32(BUFMGR_MB_POOL_ADDR, 9232 NIC_SRAM_MBUF_POOL_BASE5705 + fw_len); 9233 tw32(BUFMGR_MB_POOL_SIZE, 9234 NIC_SRAM_MBUF_POOL_SIZE5705 - fw_len - 0xa00); 9235 } 9236 9237 if (tp->dev->mtu <= ETH_DATA_LEN) { 9238 tw32(BUFMGR_MB_RDMA_LOW_WATER, 9239 tp->bufmgr_config.mbuf_read_dma_low_water); 9240 tw32(BUFMGR_MB_MACRX_LOW_WATER, 9241 tp->bufmgr_config.mbuf_mac_rx_low_water); 9242 tw32(BUFMGR_MB_HIGH_WATER, 9243 tp->bufmgr_config.mbuf_high_water); 9244 } else { 9245 tw32(BUFMGR_MB_RDMA_LOW_WATER, 9246 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo); 9247 tw32(BUFMGR_MB_MACRX_LOW_WATER, 9248 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo); 9249 tw32(BUFMGR_MB_HIGH_WATER, 9250 tp->bufmgr_config.mbuf_high_water_jumbo); 9251 } 9252 tw32(BUFMGR_DMA_LOW_WATER, 9253 tp->bufmgr_config.dma_low_water); 9254 tw32(BUFMGR_DMA_HIGH_WATER, 9255 tp->bufmgr_config.dma_high_water); 9256 9257 val = BUFMGR_MODE_ENABLE | BUFMGR_MODE_ATTN_ENABLE; 9258 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 9259 val |= BUFMGR_MODE_NO_TX_UNDERRUN; 9260 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 9261 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 9262 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) 9263 val |= BUFMGR_MODE_MBLOW_ATTN_ENAB; 9264 tw32(BUFMGR_MODE, val); 9265 for (i = 0; i < 2000; i++) { 9266 if (tr32(BUFMGR_MODE) & BUFMGR_MODE_ENABLE) 9267 break; 9268 udelay(10); 9269 } 9270 if (i >= 2000) { 9271 netdev_err(tp->dev, "%s cannot enable BUFMGR\n", __func__); 9272 return -ENODEV; 9273 } 9274 9275 if (tp->pci_chip_rev_id == CHIPREV_ID_5906_A1) 9276 tw32(ISO_PKT_TX, (tr32(ISO_PKT_TX) & ~0x3) | 0x2); 9277 9278 tg3_setup_rxbd_thresholds(tp); 9279 9280 /* Initialize TG3_BDINFO's at: 9281 * RCVDBDI_STD_BD: standard eth size rx ring 9282 * RCVDBDI_JUMBO_BD: jumbo frame rx ring 9283 * RCVDBDI_MINI_BD: small frame rx ring (??? does not work) 9284 * 9285 * like so: 9286 * TG3_BDINFO_HOST_ADDR: high/low parts of DMA address of ring 9287 * TG3_BDINFO_MAXLEN_FLAGS: (rx max buffer size << 16) | 9288 * ring attribute flags 9289 * TG3_BDINFO_NIC_ADDR: location of descriptors in nic SRAM 9290 * 9291 * Standard receive ring @ NIC_SRAM_RX_BUFFER_DESC, 512 entries. 9292 * Jumbo receive ring @ NIC_SRAM_RX_JUMBO_BUFFER_DESC, 256 entries. 9293 * 9294 * The size of each ring is fixed in the firmware, but the location is 9295 * configurable. 9296 */ 9297 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 9298 ((u64) tpr->rx_std_mapping >> 32)); 9299 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 9300 ((u64) tpr->rx_std_mapping & 0xffffffff)); 9301 if (!tg3_flag(tp, 5717_PLUS)) 9302 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 9303 NIC_SRAM_RX_BUFFER_DESC); 9304 9305 /* Disable the mini ring */ 9306 if (!tg3_flag(tp, 5705_PLUS)) 9307 tw32(RCVDBDI_MINI_BD + TG3_BDINFO_MAXLEN_FLAGS, 9308 BDINFO_FLAGS_DISABLED); 9309 9310 /* Program the jumbo buffer descriptor ring control 9311 * blocks on those devices that have them. 9312 */ 9313 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 9314 (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS))) { 9315 9316 if (tg3_flag(tp, JUMBO_RING_ENABLE)) { 9317 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_HIGH, 9318 ((u64) tpr->rx_jmb_mapping >> 32)); 9319 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 9320 ((u64) tpr->rx_jmb_mapping & 0xffffffff)); 9321 val = TG3_RX_JMB_RING_SIZE(tp) << 9322 BDINFO_FLAGS_MAXLEN_SHIFT; 9323 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 9324 val | BDINFO_FLAGS_USE_EXT_RECV); 9325 if (!tg3_flag(tp, USE_JUMBO_BDFLAG) || 9326 tg3_flag(tp, 57765_CLASS)) 9327 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_NIC_ADDR, 9328 NIC_SRAM_RX_JUMBO_BUFFER_DESC); 9329 } else { 9330 tw32(RCVDBDI_JUMBO_BD + TG3_BDINFO_MAXLEN_FLAGS, 9331 BDINFO_FLAGS_DISABLED); 9332 } 9333 9334 if (tg3_flag(tp, 57765_PLUS)) { 9335 val = TG3_RX_STD_RING_SIZE(tp); 9336 val <<= BDINFO_FLAGS_MAXLEN_SHIFT; 9337 val |= (TG3_RX_STD_DMA_SZ << 2); 9338 } else 9339 val = TG3_RX_STD_DMA_SZ << BDINFO_FLAGS_MAXLEN_SHIFT; 9340 } else 9341 val = TG3_RX_STD_MAX_SIZE_5700 << BDINFO_FLAGS_MAXLEN_SHIFT; 9342 9343 tw32(RCVDBDI_STD_BD + TG3_BDINFO_MAXLEN_FLAGS, val); 9344 9345 tpr->rx_std_prod_idx = tp->rx_pending; 9346 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, tpr->rx_std_prod_idx); 9347 9348 tpr->rx_jmb_prod_idx = 9349 tg3_flag(tp, JUMBO_RING_ENABLE) ? tp->rx_jumbo_pending : 0; 9350 tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, tpr->rx_jmb_prod_idx); 9351 9352 tg3_rings_reset(tp); 9353 9354 /* Initialize MAC address and backoff seed. */ 9355 __tg3_set_mac_addr(tp, 0); 9356 9357 /* MTU + ethernet header + FCS + optional VLAN tag */ 9358 tw32(MAC_RX_MTU_SIZE, 9359 tp->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN); 9360 9361 /* The slot time is changed by tg3_setup_phy if we 9362 * run at gigabit with half duplex. 9363 */ 9364 val = (2 << TX_LENGTHS_IPG_CRS_SHIFT) | 9365 (6 << TX_LENGTHS_IPG_SHIFT) | 9366 (32 << TX_LENGTHS_SLOT_TIME_SHIFT); 9367 9368 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 9369 val |= tr32(MAC_TX_LENGTHS) & 9370 (TX_LENGTHS_JMB_FRM_LEN_MSK | 9371 TX_LENGTHS_CNT_DWN_VAL_MSK); 9372 9373 tw32(MAC_TX_LENGTHS, val); 9374 9375 /* Receive rules. */ 9376 tw32(MAC_RCV_RULE_CFG, RCV_RULE_CFG_DEFAULT_CLASS); 9377 tw32(RCVLPC_CONFIG, 0x0181); 9378 9379 /* Calculate RDMAC_MODE setting early, we need it to determine 9380 * the RCVLPC_STATE_ENABLE mask. 9381 */ 9382 rdmac_mode = (RDMAC_MODE_ENABLE | RDMAC_MODE_TGTABORT_ENAB | 9383 RDMAC_MODE_MSTABORT_ENAB | RDMAC_MODE_PARITYERR_ENAB | 9384 RDMAC_MODE_ADDROFLOW_ENAB | RDMAC_MODE_FIFOOFLOW_ENAB | 9385 RDMAC_MODE_FIFOURUN_ENAB | RDMAC_MODE_FIFOOREAD_ENAB | 9386 RDMAC_MODE_LNGREAD_ENAB); 9387 9388 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) 9389 rdmac_mode |= RDMAC_MODE_MULT_DMA_RD_DIS; 9390 9391 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 9392 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 9393 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 9394 rdmac_mode |= RDMAC_MODE_BD_SBD_CRPT_ENAB | 9395 RDMAC_MODE_MBUF_RBD_CRPT_ENAB | 9396 RDMAC_MODE_MBUF_SBD_CRPT_ENAB; 9397 9398 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 9399 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 9400 if (tg3_flag(tp, TSO_CAPABLE) && 9401 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 9402 rdmac_mode |= RDMAC_MODE_FIFO_SIZE_128; 9403 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 9404 !tg3_flag(tp, IS_5788)) { 9405 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 9406 } 9407 } 9408 9409 if (tg3_flag(tp, PCI_EXPRESS)) 9410 rdmac_mode |= RDMAC_MODE_FIFO_LONG_BURST; 9411 9412 if (tg3_flag(tp, HW_TSO_1) || 9413 tg3_flag(tp, HW_TSO_2) || 9414 tg3_flag(tp, HW_TSO_3)) 9415 rdmac_mode |= RDMAC_MODE_IPV4_LSO_EN; 9416 9417 if (tg3_flag(tp, 57765_PLUS) || 9418 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 9419 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 9420 rdmac_mode |= RDMAC_MODE_IPV6_LSO_EN; 9421 9422 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 9423 rdmac_mode |= tr32(RDMAC_MODE) & RDMAC_MODE_H2BNC_VLAN_DET; 9424 9425 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 9426 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 9427 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 9428 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 9429 tg3_flag(tp, 57765_PLUS)) { 9430 val = tr32(TG3_RDMA_RSRVCTRL_REG); 9431 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) { 9432 val &= ~(TG3_RDMA_RSRVCTRL_TXMRGN_MASK | 9433 TG3_RDMA_RSRVCTRL_FIFO_LWM_MASK | 9434 TG3_RDMA_RSRVCTRL_FIFO_HWM_MASK); 9435 val |= TG3_RDMA_RSRVCTRL_TXMRGN_320B | 9436 TG3_RDMA_RSRVCTRL_FIFO_LWM_1_5K | 9437 TG3_RDMA_RSRVCTRL_FIFO_HWM_1_5K; 9438 } 9439 tw32(TG3_RDMA_RSRVCTRL_REG, 9440 val | TG3_RDMA_RSRVCTRL_FIFO_OFLW_FIX); 9441 } 9442 9443 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 9444 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 9445 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 9446 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val | 9447 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_BD_4K | 9448 TG3_LSO_RD_DMA_CRPTEN_CTRL_BLEN_LSO_4K); 9449 } 9450 9451 /* Receive/send statistics. */ 9452 if (tg3_flag(tp, 5750_PLUS)) { 9453 val = tr32(RCVLPC_STATS_ENABLE); 9454 val &= ~RCVLPC_STATSENAB_DACK_FIX; 9455 tw32(RCVLPC_STATS_ENABLE, val); 9456 } else if ((rdmac_mode & RDMAC_MODE_FIFO_SIZE_128) && 9457 tg3_flag(tp, TSO_CAPABLE)) { 9458 val = tr32(RCVLPC_STATS_ENABLE); 9459 val &= ~RCVLPC_STATSENAB_LNGBRST_RFIX; 9460 tw32(RCVLPC_STATS_ENABLE, val); 9461 } else { 9462 tw32(RCVLPC_STATS_ENABLE, 0xffffff); 9463 } 9464 tw32(RCVLPC_STATSCTRL, RCVLPC_STATSCTRL_ENABLE); 9465 tw32(SNDDATAI_STATSENAB, 0xffffff); 9466 tw32(SNDDATAI_STATSCTRL, 9467 (SNDDATAI_SCTRL_ENABLE | 9468 SNDDATAI_SCTRL_FASTUPD)); 9469 9470 /* Setup host coalescing engine. */ 9471 tw32(HOSTCC_MODE, 0); 9472 for (i = 0; i < 2000; i++) { 9473 if (!(tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE)) 9474 break; 9475 udelay(10); 9476 } 9477 9478 __tg3_set_coalesce(tp, &tp->coal); 9479 9480 if (!tg3_flag(tp, 5705_PLUS)) { 9481 /* Status/statistics block address. See tg3_timer, 9482 * the tg3_periodic_fetch_stats call there, and 9483 * tg3_get_stats to see how this works for 5705/5750 chips. 9484 */ 9485 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_HIGH, 9486 ((u64) tp->stats_mapping >> 32)); 9487 tw32(HOSTCC_STATS_BLK_HOST_ADDR + TG3_64BIT_REG_LOW, 9488 ((u64) tp->stats_mapping & 0xffffffff)); 9489 tw32(HOSTCC_STATS_BLK_NIC_ADDR, NIC_SRAM_STATS_BLK); 9490 9491 tw32(HOSTCC_STATUS_BLK_NIC_ADDR, NIC_SRAM_STATUS_BLK); 9492 9493 /* Clear statistics and status block memory areas */ 9494 for (i = NIC_SRAM_STATS_BLK; 9495 i < NIC_SRAM_STATUS_BLK + TG3_HW_STATUS_SIZE; 9496 i += sizeof(u32)) { 9497 tg3_write_mem(tp, i, 0); 9498 udelay(40); 9499 } 9500 } 9501 9502 tw32(HOSTCC_MODE, HOSTCC_MODE_ENABLE | tp->coalesce_mode); 9503 9504 tw32(RCVCC_MODE, RCVCC_MODE_ENABLE | RCVCC_MODE_ATTN_ENABLE); 9505 tw32(RCVLPC_MODE, RCVLPC_MODE_ENABLE); 9506 if (!tg3_flag(tp, 5705_PLUS)) 9507 tw32(RCVLSC_MODE, RCVLSC_MODE_ENABLE | RCVLSC_MODE_ATTN_ENABLE); 9508 9509 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) { 9510 tp->phy_flags &= ~TG3_PHYFLG_PARALLEL_DETECT; 9511 /* reset to prevent losing 1st rx packet intermittently */ 9512 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 9513 udelay(10); 9514 } 9515 9516 tp->mac_mode |= MAC_MODE_TXSTAT_ENABLE | MAC_MODE_RXSTAT_ENABLE | 9517 MAC_MODE_TDE_ENABLE | MAC_MODE_RDE_ENABLE | 9518 MAC_MODE_FHDE_ENABLE; 9519 if (tg3_flag(tp, ENABLE_APE)) 9520 tp->mac_mode |= MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 9521 if (!tg3_flag(tp, 5705_PLUS) && 9522 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 9523 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) 9524 tp->mac_mode |= MAC_MODE_LINK_POLARITY; 9525 tw32_f(MAC_MODE, tp->mac_mode | MAC_MODE_RXSTAT_CLEAR | MAC_MODE_TXSTAT_CLEAR); 9526 udelay(40); 9527 9528 /* tp->grc_local_ctrl is partially set up during tg3_get_invariants(). 9529 * If TG3_FLAG_IS_NIC is zero, we should read the 9530 * register to preserve the GPIO settings for LOMs. The GPIOs, 9531 * whether used as inputs or outputs, are set by boot code after 9532 * reset. 9533 */ 9534 if (!tg3_flag(tp, IS_NIC)) { 9535 u32 gpio_mask; 9536 9537 gpio_mask = GRC_LCLCTRL_GPIO_OE0 | GRC_LCLCTRL_GPIO_OE1 | 9538 GRC_LCLCTRL_GPIO_OE2 | GRC_LCLCTRL_GPIO_OUTPUT0 | 9539 GRC_LCLCTRL_GPIO_OUTPUT1 | GRC_LCLCTRL_GPIO_OUTPUT2; 9540 9541 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 9542 gpio_mask |= GRC_LCLCTRL_GPIO_OE3 | 9543 GRC_LCLCTRL_GPIO_OUTPUT3; 9544 9545 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 9546 gpio_mask |= GRC_LCLCTRL_GPIO_UART_SEL; 9547 9548 tp->grc_local_ctrl &= ~gpio_mask; 9549 tp->grc_local_ctrl |= tr32(GRC_LOCAL_CTRL) & gpio_mask; 9550 9551 /* GPIO1 must be driven high for eeprom write protect */ 9552 if (tg3_flag(tp, EEPROM_WRITE_PROT)) 9553 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 9554 GRC_LCLCTRL_GPIO_OUTPUT1); 9555 } 9556 tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 9557 udelay(100); 9558 9559 if (tg3_flag(tp, USING_MSIX)) { 9560 val = tr32(MSGINT_MODE); 9561 val |= MSGINT_MODE_ENABLE; 9562 if (tp->irq_cnt > 1) 9563 val |= MSGINT_MODE_MULTIVEC_EN; 9564 if (!tg3_flag(tp, 1SHOT_MSI)) 9565 val |= MSGINT_MODE_ONE_SHOT_DISABLE; 9566 tw32(MSGINT_MODE, val); 9567 } 9568 9569 if (!tg3_flag(tp, 5705_PLUS)) { 9570 tw32_f(DMAC_MODE, DMAC_MODE_ENABLE); 9571 udelay(40); 9572 } 9573 9574 val = (WDMAC_MODE_ENABLE | WDMAC_MODE_TGTABORT_ENAB | 9575 WDMAC_MODE_MSTABORT_ENAB | WDMAC_MODE_PARITYERR_ENAB | 9576 WDMAC_MODE_ADDROFLOW_ENAB | WDMAC_MODE_FIFOOFLOW_ENAB | 9577 WDMAC_MODE_FIFOURUN_ENAB | WDMAC_MODE_FIFOOREAD_ENAB | 9578 WDMAC_MODE_LNGREAD_ENAB); 9579 9580 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 9581 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 9582 if (tg3_flag(tp, TSO_CAPABLE) && 9583 (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 || 9584 tp->pci_chip_rev_id == CHIPREV_ID_5705_A2)) { 9585 /* nothing */ 9586 } else if (!(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH) && 9587 !tg3_flag(tp, IS_5788)) { 9588 val |= WDMAC_MODE_RX_ACCEL; 9589 } 9590 } 9591 9592 /* Enable host coalescing bug fix */ 9593 if (tg3_flag(tp, 5755_PLUS)) 9594 val |= WDMAC_MODE_STATUS_TAG_FIX; 9595 9596 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 9597 val |= WDMAC_MODE_BURST_ALL_DATA; 9598 9599 tw32_f(WDMAC_MODE, val); 9600 udelay(40); 9601 9602 if (tg3_flag(tp, PCIX_MODE)) { 9603 u16 pcix_cmd; 9604 9605 pci_read_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 9606 &pcix_cmd); 9607 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) { 9608 pcix_cmd &= ~PCI_X_CMD_MAX_READ; 9609 pcix_cmd |= PCI_X_CMD_READ_2K; 9610 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 9611 pcix_cmd &= ~(PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ); 9612 pcix_cmd |= PCI_X_CMD_READ_2K; 9613 } 9614 pci_write_config_word(tp->pdev, tp->pcix_cap + PCI_X_CMD, 9615 pcix_cmd); 9616 } 9617 9618 tw32_f(RDMAC_MODE, rdmac_mode); 9619 udelay(40); 9620 9621 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) { 9622 for (i = 0; i < TG3_NUM_RDMA_CHANNELS; i++) { 9623 if (tr32(TG3_RDMA_LENGTH + (i << 2)) > TG3_MAX_MTU(tp)) 9624 break; 9625 } 9626 if (i < TG3_NUM_RDMA_CHANNELS) { 9627 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 9628 val |= TG3_LSO_RD_DMA_TX_LENGTH_WA; 9629 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 9630 tg3_flag_set(tp, 5719_RDMA_BUG); 9631 } 9632 } 9633 9634 tw32(RCVDCC_MODE, RCVDCC_MODE_ENABLE | RCVDCC_MODE_ATTN_ENABLE); 9635 if (!tg3_flag(tp, 5705_PLUS)) 9636 tw32(MBFREE_MODE, MBFREE_MODE_ENABLE); 9637 9638 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 9639 tw32(SNDDATAC_MODE, 9640 SNDDATAC_MODE_ENABLE | SNDDATAC_MODE_CDELAY); 9641 else 9642 tw32(SNDDATAC_MODE, SNDDATAC_MODE_ENABLE); 9643 9644 tw32(SNDBDC_MODE, SNDBDC_MODE_ENABLE | SNDBDC_MODE_ATTN_ENABLE); 9645 tw32(RCVBDI_MODE, RCVBDI_MODE_ENABLE | RCVBDI_MODE_RCB_ATTN_ENAB); 9646 val = RCVDBDI_MODE_ENABLE | RCVDBDI_MODE_INV_RING_SZ; 9647 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 9648 val |= RCVDBDI_MODE_LRG_RING_SZ; 9649 tw32(RCVDBDI_MODE, val); 9650 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE); 9651 if (tg3_flag(tp, HW_TSO_1) || 9652 tg3_flag(tp, HW_TSO_2) || 9653 tg3_flag(tp, HW_TSO_3)) 9654 tw32(SNDDATAI_MODE, SNDDATAI_MODE_ENABLE | 0x8); 9655 val = SNDBDI_MODE_ENABLE | SNDBDI_MODE_ATTN_ENABLE; 9656 if (tg3_flag(tp, ENABLE_TSS)) 9657 val |= SNDBDI_MODE_MULTI_TXQ_EN; 9658 tw32(SNDBDI_MODE, val); 9659 tw32(SNDBDS_MODE, SNDBDS_MODE_ENABLE | SNDBDS_MODE_ATTN_ENABLE); 9660 9661 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) { 9662 err = tg3_load_5701_a0_firmware_fix(tp); 9663 if (err) 9664 return err; 9665 } 9666 9667 if (tg3_flag(tp, TSO_CAPABLE)) { 9668 err = tg3_load_tso_firmware(tp); 9669 if (err) 9670 return err; 9671 } 9672 9673 tp->tx_mode = TX_MODE_ENABLE; 9674 9675 if (tg3_flag(tp, 5755_PLUS) || 9676 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 9677 tp->tx_mode |= TX_MODE_MBUF_LOCKUP_FIX; 9678 9679 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 9680 val = TX_MODE_JMB_FRM_LEN | TX_MODE_CNT_DN_MODE; 9681 tp->tx_mode &= ~val; 9682 tp->tx_mode |= tr32(MAC_TX_MODE) & val; 9683 } 9684 9685 tw32_f(MAC_TX_MODE, tp->tx_mode); 9686 udelay(100); 9687 9688 if (tg3_flag(tp, ENABLE_RSS)) { 9689 tg3_rss_write_indir_tbl(tp); 9690 9691 /* Setup the "secret" hash key. */ 9692 tw32(MAC_RSS_HASH_KEY_0, 0x5f865437); 9693 tw32(MAC_RSS_HASH_KEY_1, 0xe4ac62cc); 9694 tw32(MAC_RSS_HASH_KEY_2, 0x50103a45); 9695 tw32(MAC_RSS_HASH_KEY_3, 0x36621985); 9696 tw32(MAC_RSS_HASH_KEY_4, 0xbf14c0e8); 9697 tw32(MAC_RSS_HASH_KEY_5, 0x1bc27a1e); 9698 tw32(MAC_RSS_HASH_KEY_6, 0x84f4b556); 9699 tw32(MAC_RSS_HASH_KEY_7, 0x094ea6fe); 9700 tw32(MAC_RSS_HASH_KEY_8, 0x7dda01e7); 9701 tw32(MAC_RSS_HASH_KEY_9, 0xc04d7481); 9702 } 9703 9704 tp->rx_mode = RX_MODE_ENABLE; 9705 if (tg3_flag(tp, 5755_PLUS)) 9706 tp->rx_mode |= RX_MODE_IPV6_CSUM_ENABLE; 9707 9708 if (tg3_flag(tp, ENABLE_RSS)) 9709 tp->rx_mode |= RX_MODE_RSS_ENABLE | 9710 RX_MODE_RSS_ITBL_HASH_BITS_7 | 9711 RX_MODE_RSS_IPV6_HASH_EN | 9712 RX_MODE_RSS_TCP_IPV6_HASH_EN | 9713 RX_MODE_RSS_IPV4_HASH_EN | 9714 RX_MODE_RSS_TCP_IPV4_HASH_EN; 9715 9716 tw32_f(MAC_RX_MODE, tp->rx_mode); 9717 udelay(10); 9718 9719 tw32(MAC_LED_CTRL, tp->led_ctrl); 9720 9721 tw32(MAC_MI_STAT, MAC_MI_STAT_LNKSTAT_ATTN_ENAB); 9722 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9723 tw32_f(MAC_RX_MODE, RX_MODE_RESET); 9724 udelay(10); 9725 } 9726 tw32_f(MAC_RX_MODE, tp->rx_mode); 9727 udelay(10); 9728 9729 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 9730 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) && 9731 !(tp->phy_flags & TG3_PHYFLG_SERDES_PREEMPHASIS)) { 9732 /* Set drive transmission level to 1.2V */ 9733 /* only if the signal pre-emphasis bit is not set */ 9734 val = tr32(MAC_SERDES_CFG); 9735 val &= 0xfffff000; 9736 val |= 0x880; 9737 tw32(MAC_SERDES_CFG, val); 9738 } 9739 if (tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) 9740 tw32(MAC_SERDES_CFG, 0x616000); 9741 } 9742 9743 /* Prevent chip from dropping frames when flow control 9744 * is enabled. 9745 */ 9746 if (tg3_flag(tp, 57765_CLASS)) 9747 val = 1; 9748 else 9749 val = 2; 9750 tw32_f(MAC_LOW_WMARK_MAX_RX_FRAME, val); 9751 9752 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && 9753 (tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 9754 /* Use hardware link auto-negotiation */ 9755 tg3_flag_set(tp, HW_AUTONEG); 9756 } 9757 9758 if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 9759 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 9760 u32 tmp; 9761 9762 tmp = tr32(SERDES_RX_CTRL); 9763 tw32(SERDES_RX_CTRL, tmp | SERDES_RX_SIG_DETECT); 9764 tp->grc_local_ctrl &= ~GRC_LCLCTRL_USE_EXT_SIG_DETECT; 9765 tp->grc_local_ctrl |= GRC_LCLCTRL_USE_SIG_DETECT; 9766 tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); 9767 } 9768 9769 if (!tg3_flag(tp, USE_PHYLIB)) { 9770 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 9771 tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; 9772 9773 err = tg3_setup_phy(tp, 0); 9774 if (err) 9775 return err; 9776 9777 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 9778 !(tp->phy_flags & TG3_PHYFLG_IS_FET)) { 9779 u32 tmp; 9780 9781 /* Clear CRC stats. */ 9782 if (!tg3_readphy(tp, MII_TG3_TEST1, &tmp)) { 9783 tg3_writephy(tp, MII_TG3_TEST1, 9784 tmp | MII_TG3_TEST1_CRC_EN); 9785 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &tmp); 9786 } 9787 } 9788 } 9789 9790 __tg3_set_rx_mode(tp->dev); 9791 9792 /* Initialize receive rules. */ 9793 tw32(MAC_RCV_RULE_0, 0xc2000000 & RCV_RULE_DISABLE_MASK); 9794 tw32(MAC_RCV_VALUE_0, 0xffffffff & RCV_RULE_DISABLE_MASK); 9795 tw32(MAC_RCV_RULE_1, 0x86000004 & RCV_RULE_DISABLE_MASK); 9796 tw32(MAC_RCV_VALUE_1, 0xffffffff & RCV_RULE_DISABLE_MASK); 9797 9798 if (tg3_flag(tp, 5705_PLUS) && !tg3_flag(tp, 5780_CLASS)) 9799 limit = 8; 9800 else 9801 limit = 16; 9802 if (tg3_flag(tp, ENABLE_ASF)) 9803 limit -= 4; 9804 switch (limit) { 9805 case 16: 9806 tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); 9807 case 15: 9808 tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); 9809 case 14: 9810 tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); 9811 case 13: 9812 tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); 9813 case 12: 9814 tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); 9815 case 11: 9816 tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); 9817 case 10: 9818 tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); 9819 case 9: 9820 tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); 9821 case 8: 9822 tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); 9823 case 7: 9824 tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); 9825 case 6: 9826 tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); 9827 case 5: 9828 tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); 9829 case 4: 9830 /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ 9831 case 3: 9832 /* tw32(MAC_RCV_RULE_2, 0); tw32(MAC_RCV_VALUE_2, 0); */ 9833 case 2: 9834 case 1: 9835 9836 default: 9837 break; 9838 } 9839 9840 if (tg3_flag(tp, ENABLE_APE)) 9841 /* Write our heartbeat update interval to APE. */ 9842 tg3_ape_write32(tp, TG3_APE_HOST_HEARTBEAT_INT_MS, 9843 APE_HOST_HEARTBEAT_INT_DISABLE); 9844 9845 tg3_write_sig_post_reset(tp, RESET_KIND_INIT); 9846 9847 return 0; 9848 } 9849 9850 /* Called at device open time to get the chip ready for 9851 * packet processing. Invoked with tp->lock held. 9852 */ 9853 static int tg3_init_hw(struct tg3 *tp, int reset_phy) 9854 { 9855 tg3_switch_clocks(tp); 9856 9857 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 9858 9859 return tg3_reset_hw(tp, reset_phy); 9860 } 9861 9862 static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir) 9863 { 9864 int i; 9865 9866 for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) { 9867 u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN; 9868 9869 tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len); 9870 off += len; 9871 9872 if (ocir->signature != TG3_OCIR_SIG_MAGIC || 9873 !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE)) 9874 memset(ocir, 0, TG3_OCIR_LEN); 9875 } 9876 } 9877 9878 /* sysfs attributes for hwmon */ 9879 static ssize_t tg3_show_temp(struct device *dev, 9880 struct device_attribute *devattr, char *buf) 9881 { 9882 struct pci_dev *pdev = to_pci_dev(dev); 9883 struct net_device *netdev = pci_get_drvdata(pdev); 9884 struct tg3 *tp = netdev_priv(netdev); 9885 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); 9886 u32 temperature; 9887 9888 spin_lock_bh(&tp->lock); 9889 tg3_ape_scratchpad_read(tp, &temperature, attr->index, 9890 sizeof(temperature)); 9891 spin_unlock_bh(&tp->lock); 9892 return sprintf(buf, "%u\n", temperature); 9893 } 9894 9895 9896 static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tg3_show_temp, NULL, 9897 TG3_TEMP_SENSOR_OFFSET); 9898 static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL, 9899 TG3_TEMP_CAUTION_OFFSET); 9900 static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL, 9901 TG3_TEMP_MAX_OFFSET); 9902 9903 static struct attribute *tg3_attributes[] = { 9904 &sensor_dev_attr_temp1_input.dev_attr.attr, 9905 &sensor_dev_attr_temp1_crit.dev_attr.attr, 9906 &sensor_dev_attr_temp1_max.dev_attr.attr, 9907 NULL 9908 }; 9909 9910 static const struct attribute_group tg3_group = { 9911 .attrs = tg3_attributes, 9912 }; 9913 9914 static void tg3_hwmon_close(struct tg3 *tp) 9915 { 9916 if (tp->hwmon_dev) { 9917 hwmon_device_unregister(tp->hwmon_dev); 9918 tp->hwmon_dev = NULL; 9919 sysfs_remove_group(&tp->pdev->dev.kobj, &tg3_group); 9920 } 9921 } 9922 9923 static void tg3_hwmon_open(struct tg3 *tp) 9924 { 9925 int i, err; 9926 u32 size = 0; 9927 struct pci_dev *pdev = tp->pdev; 9928 struct tg3_ocir ocirs[TG3_SD_NUM_RECS]; 9929 9930 tg3_sd_scan_scratchpad(tp, ocirs); 9931 9932 for (i = 0; i < TG3_SD_NUM_RECS; i++) { 9933 if (!ocirs[i].src_data_length) 9934 continue; 9935 9936 size += ocirs[i].src_hdr_length; 9937 size += ocirs[i].src_data_length; 9938 } 9939 9940 if (!size) 9941 return; 9942 9943 /* Register hwmon sysfs hooks */ 9944 err = sysfs_create_group(&pdev->dev.kobj, &tg3_group); 9945 if (err) { 9946 dev_err(&pdev->dev, "Cannot create sysfs group, aborting\n"); 9947 return; 9948 } 9949 9950 tp->hwmon_dev = hwmon_device_register(&pdev->dev); 9951 if (IS_ERR(tp->hwmon_dev)) { 9952 tp->hwmon_dev = NULL; 9953 dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n"); 9954 sysfs_remove_group(&pdev->dev.kobj, &tg3_group); 9955 } 9956 } 9957 9958 9959 #define TG3_STAT_ADD32(PSTAT, REG) \ 9960 do { u32 __val = tr32(REG); \ 9961 (PSTAT)->low += __val; \ 9962 if ((PSTAT)->low < __val) \ 9963 (PSTAT)->high += 1; \ 9964 } while (0) 9965 9966 static void tg3_periodic_fetch_stats(struct tg3 *tp) 9967 { 9968 struct tg3_hw_stats *sp = tp->hw_stats; 9969 9970 if (!tp->link_up) 9971 return; 9972 9973 TG3_STAT_ADD32(&sp->tx_octets, MAC_TX_STATS_OCTETS); 9974 TG3_STAT_ADD32(&sp->tx_collisions, MAC_TX_STATS_COLLISIONS); 9975 TG3_STAT_ADD32(&sp->tx_xon_sent, MAC_TX_STATS_XON_SENT); 9976 TG3_STAT_ADD32(&sp->tx_xoff_sent, MAC_TX_STATS_XOFF_SENT); 9977 TG3_STAT_ADD32(&sp->tx_mac_errors, MAC_TX_STATS_MAC_ERRORS); 9978 TG3_STAT_ADD32(&sp->tx_single_collisions, MAC_TX_STATS_SINGLE_COLLISIONS); 9979 TG3_STAT_ADD32(&sp->tx_mult_collisions, MAC_TX_STATS_MULT_COLLISIONS); 9980 TG3_STAT_ADD32(&sp->tx_deferred, MAC_TX_STATS_DEFERRED); 9981 TG3_STAT_ADD32(&sp->tx_excessive_collisions, MAC_TX_STATS_EXCESSIVE_COL); 9982 TG3_STAT_ADD32(&sp->tx_late_collisions, MAC_TX_STATS_LATE_COL); 9983 TG3_STAT_ADD32(&sp->tx_ucast_packets, MAC_TX_STATS_UCAST); 9984 TG3_STAT_ADD32(&sp->tx_mcast_packets, MAC_TX_STATS_MCAST); 9985 TG3_STAT_ADD32(&sp->tx_bcast_packets, MAC_TX_STATS_BCAST); 9986 if (unlikely(tg3_flag(tp, 5719_RDMA_BUG) && 9987 (sp->tx_ucast_packets.low + sp->tx_mcast_packets.low + 9988 sp->tx_bcast_packets.low) > TG3_NUM_RDMA_CHANNELS)) { 9989 u32 val; 9990 9991 val = tr32(TG3_LSO_RD_DMA_CRPTEN_CTRL); 9992 val &= ~TG3_LSO_RD_DMA_TX_LENGTH_WA; 9993 tw32(TG3_LSO_RD_DMA_CRPTEN_CTRL, val); 9994 tg3_flag_clear(tp, 5719_RDMA_BUG); 9995 } 9996 9997 TG3_STAT_ADD32(&sp->rx_octets, MAC_RX_STATS_OCTETS); 9998 TG3_STAT_ADD32(&sp->rx_fragments, MAC_RX_STATS_FRAGMENTS); 9999 TG3_STAT_ADD32(&sp->rx_ucast_packets, MAC_RX_STATS_UCAST); 10000 TG3_STAT_ADD32(&sp->rx_mcast_packets, MAC_RX_STATS_MCAST); 10001 TG3_STAT_ADD32(&sp->rx_bcast_packets, MAC_RX_STATS_BCAST); 10002 TG3_STAT_ADD32(&sp->rx_fcs_errors, MAC_RX_STATS_FCS_ERRORS); 10003 TG3_STAT_ADD32(&sp->rx_align_errors, MAC_RX_STATS_ALIGN_ERRORS); 10004 TG3_STAT_ADD32(&sp->rx_xon_pause_rcvd, MAC_RX_STATS_XON_PAUSE_RECVD); 10005 TG3_STAT_ADD32(&sp->rx_xoff_pause_rcvd, MAC_RX_STATS_XOFF_PAUSE_RECVD); 10006 TG3_STAT_ADD32(&sp->rx_mac_ctrl_rcvd, MAC_RX_STATS_MAC_CTRL_RECVD); 10007 TG3_STAT_ADD32(&sp->rx_xoff_entered, MAC_RX_STATS_XOFF_ENTERED); 10008 TG3_STAT_ADD32(&sp->rx_frame_too_long_errors, MAC_RX_STATS_FRAME_TOO_LONG); 10009 TG3_STAT_ADD32(&sp->rx_jabbers, MAC_RX_STATS_JABBERS); 10010 TG3_STAT_ADD32(&sp->rx_undersize_packets, MAC_RX_STATS_UNDERSIZE); 10011 10012 TG3_STAT_ADD32(&sp->rxbds_empty, RCVLPC_NO_RCV_BD_CNT); 10013 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && 10014 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0 && 10015 tp->pci_chip_rev_id != CHIPREV_ID_5720_A0) { 10016 TG3_STAT_ADD32(&sp->rx_discards, RCVLPC_IN_DISCARDS_CNT); 10017 } else { 10018 u32 val = tr32(HOSTCC_FLOW_ATTN); 10019 val = (val & HOSTCC_FLOW_ATTN_MBUF_LWM) ? 1 : 0; 10020 if (val) { 10021 tw32(HOSTCC_FLOW_ATTN, HOSTCC_FLOW_ATTN_MBUF_LWM); 10022 sp->rx_discards.low += val; 10023 if (sp->rx_discards.low < val) 10024 sp->rx_discards.high += 1; 10025 } 10026 sp->mbuf_lwm_thresh_hit = sp->rx_discards; 10027 } 10028 TG3_STAT_ADD32(&sp->rx_errors, RCVLPC_IN_ERRORS_CNT); 10029 } 10030 10031 static void tg3_chk_missed_msi(struct tg3 *tp) 10032 { 10033 u32 i; 10034 10035 for (i = 0; i < tp->irq_cnt; i++) { 10036 struct tg3_napi *tnapi = &tp->napi[i]; 10037 10038 if (tg3_has_work(tnapi)) { 10039 if (tnapi->last_rx_cons == tnapi->rx_rcb_ptr && 10040 tnapi->last_tx_cons == tnapi->tx_cons) { 10041 if (tnapi->chk_msi_cnt < 1) { 10042 tnapi->chk_msi_cnt++; 10043 return; 10044 } 10045 tg3_msi(0, tnapi); 10046 } 10047 } 10048 tnapi->chk_msi_cnt = 0; 10049 tnapi->last_rx_cons = tnapi->rx_rcb_ptr; 10050 tnapi->last_tx_cons = tnapi->tx_cons; 10051 } 10052 } 10053 10054 static void tg3_timer(unsigned long __opaque) 10055 { 10056 struct tg3 *tp = (struct tg3 *) __opaque; 10057 10058 if (tp->irq_sync || tg3_flag(tp, RESET_TASK_PENDING)) 10059 goto restart_timer; 10060 10061 spin_lock(&tp->lock); 10062 10063 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 10064 tg3_flag(tp, 57765_CLASS)) 10065 tg3_chk_missed_msi(tp); 10066 10067 if (!tg3_flag(tp, TAGGED_STATUS)) { 10068 /* All of this garbage is because when using non-tagged 10069 * IRQ status the mailbox/status_block protocol the chip 10070 * uses with the cpu is race prone. 10071 */ 10072 if (tp->napi[0].hw_status->status & SD_STATUS_UPDATED) { 10073 tw32(GRC_LOCAL_CTRL, 10074 tp->grc_local_ctrl | GRC_LCLCTRL_SETINT); 10075 } else { 10076 tw32(HOSTCC_MODE, tp->coalesce_mode | 10077 HOSTCC_MODE_ENABLE | HOSTCC_MODE_NOW); 10078 } 10079 10080 if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 10081 spin_unlock(&tp->lock); 10082 tg3_reset_task_schedule(tp); 10083 goto restart_timer; 10084 } 10085 } 10086 10087 /* This part only runs once per second. */ 10088 if (!--tp->timer_counter) { 10089 if (tg3_flag(tp, 5705_PLUS)) 10090 tg3_periodic_fetch_stats(tp); 10091 10092 if (tp->setlpicnt && !--tp->setlpicnt) 10093 tg3_phy_eee_enable(tp); 10094 10095 if (tg3_flag(tp, USE_LINKCHG_REG)) { 10096 u32 mac_stat; 10097 int phy_event; 10098 10099 mac_stat = tr32(MAC_STATUS); 10100 10101 phy_event = 0; 10102 if (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) { 10103 if (mac_stat & MAC_STATUS_MI_INTERRUPT) 10104 phy_event = 1; 10105 } else if (mac_stat & MAC_STATUS_LNKSTATE_CHANGED) 10106 phy_event = 1; 10107 10108 if (phy_event) 10109 tg3_setup_phy(tp, 0); 10110 } else if (tg3_flag(tp, POLL_SERDES)) { 10111 u32 mac_stat = tr32(MAC_STATUS); 10112 int need_setup = 0; 10113 10114 if (tp->link_up && 10115 (mac_stat & MAC_STATUS_LNKSTATE_CHANGED)) { 10116 need_setup = 1; 10117 } 10118 if (!tp->link_up && 10119 (mac_stat & (MAC_STATUS_PCS_SYNCED | 10120 MAC_STATUS_SIGNAL_DET))) { 10121 need_setup = 1; 10122 } 10123 if (need_setup) { 10124 if (!tp->serdes_counter) { 10125 tw32_f(MAC_MODE, 10126 (tp->mac_mode & 10127 ~MAC_MODE_PORT_MODE_MASK)); 10128 udelay(40); 10129 tw32_f(MAC_MODE, tp->mac_mode); 10130 udelay(40); 10131 } 10132 tg3_setup_phy(tp, 0); 10133 } 10134 } else if ((tp->phy_flags & TG3_PHYFLG_MII_SERDES) && 10135 tg3_flag(tp, 5780_CLASS)) { 10136 tg3_serdes_parallel_detect(tp); 10137 } 10138 10139 tp->timer_counter = tp->timer_multiplier; 10140 } 10141 10142 /* Heartbeat is only sent once every 2 seconds. 10143 * 10144 * The heartbeat is to tell the ASF firmware that the host 10145 * driver is still alive. In the event that the OS crashes, 10146 * ASF needs to reset the hardware to free up the FIFO space 10147 * that may be filled with rx packets destined for the host. 10148 * If the FIFO is full, ASF will no longer function properly. 10149 * 10150 * Unintended resets have been reported on real time kernels 10151 * where the timer doesn't run on time. Netpoll will also have 10152 * same problem. 10153 * 10154 * The new FWCMD_NICDRV_ALIVE3 command tells the ASF firmware 10155 * to check the ring condition when the heartbeat is expiring 10156 * before doing the reset. This will prevent most unintended 10157 * resets. 10158 */ 10159 if (!--tp->asf_counter) { 10160 if (tg3_flag(tp, ENABLE_ASF) && !tg3_flag(tp, ENABLE_APE)) { 10161 tg3_wait_for_event_ack(tp); 10162 10163 tg3_write_mem(tp, NIC_SRAM_FW_CMD_MBOX, 10164 FWCMD_NICDRV_ALIVE3); 10165 tg3_write_mem(tp, NIC_SRAM_FW_CMD_LEN_MBOX, 4); 10166 tg3_write_mem(tp, NIC_SRAM_FW_CMD_DATA_MBOX, 10167 TG3_FW_UPDATE_TIMEOUT_SEC); 10168 10169 tg3_generate_fw_event(tp); 10170 } 10171 tp->asf_counter = tp->asf_multiplier; 10172 } 10173 10174 spin_unlock(&tp->lock); 10175 10176 restart_timer: 10177 tp->timer.expires = jiffies + tp->timer_offset; 10178 add_timer(&tp->timer); 10179 } 10180 10181 static void tg3_timer_init(struct tg3 *tp) 10182 { 10183 if (tg3_flag(tp, TAGGED_STATUS) && 10184 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && 10185 !tg3_flag(tp, 57765_CLASS)) 10186 tp->timer_offset = HZ; 10187 else 10188 tp->timer_offset = HZ / 10; 10189 10190 BUG_ON(tp->timer_offset > HZ); 10191 10192 tp->timer_multiplier = (HZ / tp->timer_offset); 10193 tp->asf_multiplier = (HZ / tp->timer_offset) * 10194 TG3_FW_UPDATE_FREQ_SEC; 10195 10196 init_timer(&tp->timer); 10197 tp->timer.data = (unsigned long) tp; 10198 tp->timer.function = tg3_timer; 10199 } 10200 10201 static void tg3_timer_start(struct tg3 *tp) 10202 { 10203 tp->asf_counter = tp->asf_multiplier; 10204 tp->timer_counter = tp->timer_multiplier; 10205 10206 tp->timer.expires = jiffies + tp->timer_offset; 10207 add_timer(&tp->timer); 10208 } 10209 10210 static void tg3_timer_stop(struct tg3 *tp) 10211 { 10212 del_timer_sync(&tp->timer); 10213 } 10214 10215 /* Restart hardware after configuration changes, self-test, etc. 10216 * Invoked with tp->lock held. 10217 */ 10218 static int tg3_restart_hw(struct tg3 *tp, int reset_phy) 10219 __releases(tp->lock) 10220 __acquires(tp->lock) 10221 { 10222 int err; 10223 10224 err = tg3_init_hw(tp, reset_phy); 10225 if (err) { 10226 netdev_err(tp->dev, 10227 "Failed to re-initialize device, aborting\n"); 10228 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10229 tg3_full_unlock(tp); 10230 tg3_timer_stop(tp); 10231 tp->irq_sync = 0; 10232 tg3_napi_enable(tp); 10233 dev_close(tp->dev); 10234 tg3_full_lock(tp, 0); 10235 } 10236 return err; 10237 } 10238 10239 static void tg3_reset_task(struct work_struct *work) 10240 { 10241 struct tg3 *tp = container_of(work, struct tg3, reset_task); 10242 int err; 10243 10244 tg3_full_lock(tp, 0); 10245 10246 if (!netif_running(tp->dev)) { 10247 tg3_flag_clear(tp, RESET_TASK_PENDING); 10248 tg3_full_unlock(tp); 10249 return; 10250 } 10251 10252 tg3_full_unlock(tp); 10253 10254 tg3_phy_stop(tp); 10255 10256 tg3_netif_stop(tp); 10257 10258 tg3_full_lock(tp, 1); 10259 10260 if (tg3_flag(tp, TX_RECOVERY_PENDING)) { 10261 tp->write32_tx_mbox = tg3_write32_tx_mbox; 10262 tp->write32_rx_mbox = tg3_write_flush_reg32; 10263 tg3_flag_set(tp, MBOX_WRITE_REORDER); 10264 tg3_flag_clear(tp, TX_RECOVERY_PENDING); 10265 } 10266 10267 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 10268 err = tg3_init_hw(tp, 1); 10269 if (err) 10270 goto out; 10271 10272 tg3_netif_start(tp); 10273 10274 out: 10275 tg3_full_unlock(tp); 10276 10277 if (!err) 10278 tg3_phy_start(tp); 10279 10280 tg3_flag_clear(tp, RESET_TASK_PENDING); 10281 } 10282 10283 static int tg3_request_irq(struct tg3 *tp, int irq_num) 10284 { 10285 irq_handler_t fn; 10286 unsigned long flags; 10287 char *name; 10288 struct tg3_napi *tnapi = &tp->napi[irq_num]; 10289 10290 if (tp->irq_cnt == 1) 10291 name = tp->dev->name; 10292 else { 10293 name = &tnapi->irq_lbl[0]; 10294 snprintf(name, IFNAMSIZ, "%s-%d", tp->dev->name, irq_num); 10295 name[IFNAMSIZ-1] = 0; 10296 } 10297 10298 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 10299 fn = tg3_msi; 10300 if (tg3_flag(tp, 1SHOT_MSI)) 10301 fn = tg3_msi_1shot; 10302 flags = 0; 10303 } else { 10304 fn = tg3_interrupt; 10305 if (tg3_flag(tp, TAGGED_STATUS)) 10306 fn = tg3_interrupt_tagged; 10307 flags = IRQF_SHARED; 10308 } 10309 10310 return request_irq(tnapi->irq_vec, fn, flags, name, tnapi); 10311 } 10312 10313 static int tg3_test_interrupt(struct tg3 *tp) 10314 { 10315 struct tg3_napi *tnapi = &tp->napi[0]; 10316 struct net_device *dev = tp->dev; 10317 int err, i, intr_ok = 0; 10318 u32 val; 10319 10320 if (!netif_running(dev)) 10321 return -ENODEV; 10322 10323 tg3_disable_ints(tp); 10324 10325 free_irq(tnapi->irq_vec, tnapi); 10326 10327 /* 10328 * Turn off MSI one shot mode. Otherwise this test has no 10329 * observable way to know whether the interrupt was delivered. 10330 */ 10331 if (tg3_flag(tp, 57765_PLUS)) { 10332 val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; 10333 tw32(MSGINT_MODE, val); 10334 } 10335 10336 err = request_irq(tnapi->irq_vec, tg3_test_isr, 10337 IRQF_SHARED, dev->name, tnapi); 10338 if (err) 10339 return err; 10340 10341 tnapi->hw_status->status &= ~SD_STATUS_UPDATED; 10342 tg3_enable_ints(tp); 10343 10344 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 10345 tnapi->coal_now); 10346 10347 for (i = 0; i < 5; i++) { 10348 u32 int_mbox, misc_host_ctrl; 10349 10350 int_mbox = tr32_mailbox(tnapi->int_mbox); 10351 misc_host_ctrl = tr32(TG3PCI_MISC_HOST_CTRL); 10352 10353 if ((int_mbox != 0) || 10354 (misc_host_ctrl & MISC_HOST_CTRL_MASK_PCI_INT)) { 10355 intr_ok = 1; 10356 break; 10357 } 10358 10359 if (tg3_flag(tp, 57765_PLUS) && 10360 tnapi->hw_status->status_tag != tnapi->last_tag) 10361 tw32_mailbox_f(tnapi->int_mbox, tnapi->last_tag << 24); 10362 10363 msleep(10); 10364 } 10365 10366 tg3_disable_ints(tp); 10367 10368 free_irq(tnapi->irq_vec, tnapi); 10369 10370 err = tg3_request_irq(tp, 0); 10371 10372 if (err) 10373 return err; 10374 10375 if (intr_ok) { 10376 /* Reenable MSI one shot mode. */ 10377 if (tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, 1SHOT_MSI)) { 10378 val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; 10379 tw32(MSGINT_MODE, val); 10380 } 10381 return 0; 10382 } 10383 10384 return -EIO; 10385 } 10386 10387 /* Returns 0 if MSI test succeeds or MSI test fails and INTx mode is 10388 * successfully restored 10389 */ 10390 static int tg3_test_msi(struct tg3 *tp) 10391 { 10392 int err; 10393 u16 pci_cmd; 10394 10395 if (!tg3_flag(tp, USING_MSI)) 10396 return 0; 10397 10398 /* Turn off SERR reporting in case MSI terminates with Master 10399 * Abort. 10400 */ 10401 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 10402 pci_write_config_word(tp->pdev, PCI_COMMAND, 10403 pci_cmd & ~PCI_COMMAND_SERR); 10404 10405 err = tg3_test_interrupt(tp); 10406 10407 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 10408 10409 if (!err) 10410 return 0; 10411 10412 /* other failures */ 10413 if (err != -EIO) 10414 return err; 10415 10416 /* MSI test failed, go back to INTx mode */ 10417 netdev_warn(tp->dev, "No interrupt was generated using MSI. Switching " 10418 "to INTx mode. Please report this failure to the PCI " 10419 "maintainer and include system chipset information\n"); 10420 10421 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 10422 10423 pci_disable_msi(tp->pdev); 10424 10425 tg3_flag_clear(tp, USING_MSI); 10426 tp->napi[0].irq_vec = tp->pdev->irq; 10427 10428 err = tg3_request_irq(tp, 0); 10429 if (err) 10430 return err; 10431 10432 /* Need to reset the chip because the MSI cycle may have terminated 10433 * with Master Abort. 10434 */ 10435 tg3_full_lock(tp, 1); 10436 10437 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10438 err = tg3_init_hw(tp, 1); 10439 10440 tg3_full_unlock(tp); 10441 10442 if (err) 10443 free_irq(tp->napi[0].irq_vec, &tp->napi[0]); 10444 10445 return err; 10446 } 10447 10448 static int tg3_request_firmware(struct tg3 *tp) 10449 { 10450 const __be32 *fw_data; 10451 10452 if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) { 10453 netdev_err(tp->dev, "Failed to load firmware \"%s\"\n", 10454 tp->fw_needed); 10455 return -ENOENT; 10456 } 10457 10458 fw_data = (void *)tp->fw->data; 10459 10460 /* Firmware blob starts with version numbers, followed by 10461 * start address and _full_ length including BSS sections 10462 * (which must be longer than the actual data, of course 10463 */ 10464 10465 tp->fw_len = be32_to_cpu(fw_data[2]); /* includes bss */ 10466 if (tp->fw_len < (tp->fw->size - 12)) { 10467 netdev_err(tp->dev, "bogus length %d in \"%s\"\n", 10468 tp->fw_len, tp->fw_needed); 10469 release_firmware(tp->fw); 10470 tp->fw = NULL; 10471 return -EINVAL; 10472 } 10473 10474 /* We no longer need firmware; we have it. */ 10475 tp->fw_needed = NULL; 10476 return 0; 10477 } 10478 10479 static u32 tg3_irq_count(struct tg3 *tp) 10480 { 10481 u32 irq_cnt = max(tp->rxq_cnt, tp->txq_cnt); 10482 10483 if (irq_cnt > 1) { 10484 /* We want as many rx rings enabled as there are cpus. 10485 * In multiqueue MSI-X mode, the first MSI-X vector 10486 * only deals with link interrupts, etc, so we add 10487 * one to the number of vectors we are requesting. 10488 */ 10489 irq_cnt = min_t(unsigned, irq_cnt + 1, tp->irq_max); 10490 } 10491 10492 return irq_cnt; 10493 } 10494 10495 static bool tg3_enable_msix(struct tg3 *tp) 10496 { 10497 int i, rc; 10498 struct msix_entry msix_ent[TG3_IRQ_MAX_VECS]; 10499 10500 tp->txq_cnt = tp->txq_req; 10501 tp->rxq_cnt = tp->rxq_req; 10502 if (!tp->rxq_cnt) 10503 tp->rxq_cnt = netif_get_num_default_rss_queues(); 10504 if (tp->rxq_cnt > tp->rxq_max) 10505 tp->rxq_cnt = tp->rxq_max; 10506 10507 /* Disable multiple TX rings by default. Simple round-robin hardware 10508 * scheduling of the TX rings can cause starvation of rings with 10509 * small packets when other rings have TSO or jumbo packets. 10510 */ 10511 if (!tp->txq_req) 10512 tp->txq_cnt = 1; 10513 10514 tp->irq_cnt = tg3_irq_count(tp); 10515 10516 for (i = 0; i < tp->irq_max; i++) { 10517 msix_ent[i].entry = i; 10518 msix_ent[i].vector = 0; 10519 } 10520 10521 rc = pci_enable_msix(tp->pdev, msix_ent, tp->irq_cnt); 10522 if (rc < 0) { 10523 return false; 10524 } else if (rc != 0) { 10525 if (pci_enable_msix(tp->pdev, msix_ent, rc)) 10526 return false; 10527 netdev_notice(tp->dev, "Requested %d MSI-X vectors, received %d\n", 10528 tp->irq_cnt, rc); 10529 tp->irq_cnt = rc; 10530 tp->rxq_cnt = max(rc - 1, 1); 10531 if (tp->txq_cnt) 10532 tp->txq_cnt = min(tp->rxq_cnt, tp->txq_max); 10533 } 10534 10535 for (i = 0; i < tp->irq_max; i++) 10536 tp->napi[i].irq_vec = msix_ent[i].vector; 10537 10538 if (netif_set_real_num_rx_queues(tp->dev, tp->rxq_cnt)) { 10539 pci_disable_msix(tp->pdev); 10540 return false; 10541 } 10542 10543 if (tp->irq_cnt == 1) 10544 return true; 10545 10546 tg3_flag_set(tp, ENABLE_RSS); 10547 10548 if (tp->txq_cnt > 1) 10549 tg3_flag_set(tp, ENABLE_TSS); 10550 10551 netif_set_real_num_tx_queues(tp->dev, tp->txq_cnt); 10552 10553 return true; 10554 } 10555 10556 static void tg3_ints_init(struct tg3 *tp) 10557 { 10558 if ((tg3_flag(tp, SUPPORT_MSI) || tg3_flag(tp, SUPPORT_MSIX)) && 10559 !tg3_flag(tp, TAGGED_STATUS)) { 10560 /* All MSI supporting chips should support tagged 10561 * status. Assert that this is the case. 10562 */ 10563 netdev_warn(tp->dev, 10564 "MSI without TAGGED_STATUS? Not using MSI\n"); 10565 goto defcfg; 10566 } 10567 10568 if (tg3_flag(tp, SUPPORT_MSIX) && tg3_enable_msix(tp)) 10569 tg3_flag_set(tp, USING_MSIX); 10570 else if (tg3_flag(tp, SUPPORT_MSI) && pci_enable_msi(tp->pdev) == 0) 10571 tg3_flag_set(tp, USING_MSI); 10572 10573 if (tg3_flag(tp, USING_MSI) || tg3_flag(tp, USING_MSIX)) { 10574 u32 msi_mode = tr32(MSGINT_MODE); 10575 if (tg3_flag(tp, USING_MSIX) && tp->irq_cnt > 1) 10576 msi_mode |= MSGINT_MODE_MULTIVEC_EN; 10577 if (!tg3_flag(tp, 1SHOT_MSI)) 10578 msi_mode |= MSGINT_MODE_ONE_SHOT_DISABLE; 10579 tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); 10580 } 10581 defcfg: 10582 if (!tg3_flag(tp, USING_MSIX)) { 10583 tp->irq_cnt = 1; 10584 tp->napi[0].irq_vec = tp->pdev->irq; 10585 } 10586 10587 if (tp->irq_cnt == 1) { 10588 tp->txq_cnt = 1; 10589 tp->rxq_cnt = 1; 10590 netif_set_real_num_tx_queues(tp->dev, 1); 10591 netif_set_real_num_rx_queues(tp->dev, 1); 10592 } 10593 } 10594 10595 static void tg3_ints_fini(struct tg3 *tp) 10596 { 10597 if (tg3_flag(tp, USING_MSIX)) 10598 pci_disable_msix(tp->pdev); 10599 else if (tg3_flag(tp, USING_MSI)) 10600 pci_disable_msi(tp->pdev); 10601 tg3_flag_clear(tp, USING_MSI); 10602 tg3_flag_clear(tp, USING_MSIX); 10603 tg3_flag_clear(tp, ENABLE_RSS); 10604 tg3_flag_clear(tp, ENABLE_TSS); 10605 } 10606 10607 static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, 10608 bool init) 10609 { 10610 struct net_device *dev = tp->dev; 10611 int i, err; 10612 10613 /* 10614 * Setup interrupts first so we know how 10615 * many NAPI resources to allocate 10616 */ 10617 tg3_ints_init(tp); 10618 10619 tg3_rss_check_indir_tbl(tp); 10620 10621 /* The placement of this call is tied 10622 * to the setup and use of Host TX descriptors. 10623 */ 10624 err = tg3_alloc_consistent(tp); 10625 if (err) 10626 goto err_out1; 10627 10628 tg3_napi_init(tp); 10629 10630 tg3_napi_enable(tp); 10631 10632 for (i = 0; i < tp->irq_cnt; i++) { 10633 struct tg3_napi *tnapi = &tp->napi[i]; 10634 err = tg3_request_irq(tp, i); 10635 if (err) { 10636 for (i--; i >= 0; i--) { 10637 tnapi = &tp->napi[i]; 10638 free_irq(tnapi->irq_vec, tnapi); 10639 } 10640 goto err_out2; 10641 } 10642 } 10643 10644 tg3_full_lock(tp, 0); 10645 10646 err = tg3_init_hw(tp, reset_phy); 10647 if (err) { 10648 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10649 tg3_free_rings(tp); 10650 } 10651 10652 tg3_full_unlock(tp); 10653 10654 if (err) 10655 goto err_out3; 10656 10657 if (test_irq && tg3_flag(tp, USING_MSI)) { 10658 err = tg3_test_msi(tp); 10659 10660 if (err) { 10661 tg3_full_lock(tp, 0); 10662 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10663 tg3_free_rings(tp); 10664 tg3_full_unlock(tp); 10665 10666 goto err_out2; 10667 } 10668 10669 if (!tg3_flag(tp, 57765_PLUS) && tg3_flag(tp, USING_MSI)) { 10670 u32 val = tr32(PCIE_TRANSACTION_CFG); 10671 10672 tw32(PCIE_TRANSACTION_CFG, 10673 val | PCIE_TRANS_CFG_1SHOT_MSI); 10674 } 10675 } 10676 10677 tg3_phy_start(tp); 10678 10679 tg3_hwmon_open(tp); 10680 10681 tg3_full_lock(tp, 0); 10682 10683 tg3_timer_start(tp); 10684 tg3_flag_set(tp, INIT_COMPLETE); 10685 tg3_enable_ints(tp); 10686 10687 if (init) 10688 tg3_ptp_init(tp); 10689 else 10690 tg3_ptp_resume(tp); 10691 10692 10693 tg3_full_unlock(tp); 10694 10695 netif_tx_start_all_queues(dev); 10696 10697 /* 10698 * Reset loopback feature if it was turned on while the device was down 10699 * make sure that it's installed properly now. 10700 */ 10701 if (dev->features & NETIF_F_LOOPBACK) 10702 tg3_set_loopback(dev, dev->features); 10703 10704 return 0; 10705 10706 err_out3: 10707 for (i = tp->irq_cnt - 1; i >= 0; i--) { 10708 struct tg3_napi *tnapi = &tp->napi[i]; 10709 free_irq(tnapi->irq_vec, tnapi); 10710 } 10711 10712 err_out2: 10713 tg3_napi_disable(tp); 10714 tg3_napi_fini(tp); 10715 tg3_free_consistent(tp); 10716 10717 err_out1: 10718 tg3_ints_fini(tp); 10719 10720 return err; 10721 } 10722 10723 static void tg3_stop(struct tg3 *tp) 10724 { 10725 int i; 10726 10727 tg3_reset_task_cancel(tp); 10728 tg3_netif_stop(tp); 10729 10730 tg3_timer_stop(tp); 10731 10732 tg3_hwmon_close(tp); 10733 10734 tg3_phy_stop(tp); 10735 10736 tg3_full_lock(tp, 1); 10737 10738 tg3_disable_ints(tp); 10739 10740 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 10741 tg3_free_rings(tp); 10742 tg3_flag_clear(tp, INIT_COMPLETE); 10743 10744 tg3_full_unlock(tp); 10745 10746 for (i = tp->irq_cnt - 1; i >= 0; i--) { 10747 struct tg3_napi *tnapi = &tp->napi[i]; 10748 free_irq(tnapi->irq_vec, tnapi); 10749 } 10750 10751 tg3_ints_fini(tp); 10752 10753 tg3_napi_fini(tp); 10754 10755 tg3_free_consistent(tp); 10756 } 10757 10758 static int tg3_open(struct net_device *dev) 10759 { 10760 struct tg3 *tp = netdev_priv(dev); 10761 int err; 10762 10763 if (tp->fw_needed) { 10764 err = tg3_request_firmware(tp); 10765 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) { 10766 if (err) 10767 return err; 10768 } else if (err) { 10769 netdev_warn(tp->dev, "TSO capability disabled\n"); 10770 tg3_flag_clear(tp, TSO_CAPABLE); 10771 } else if (!tg3_flag(tp, TSO_CAPABLE)) { 10772 netdev_notice(tp->dev, "TSO capability restored\n"); 10773 tg3_flag_set(tp, TSO_CAPABLE); 10774 } 10775 } 10776 10777 tg3_carrier_off(tp); 10778 10779 err = tg3_power_up(tp); 10780 if (err) 10781 return err; 10782 10783 tg3_full_lock(tp, 0); 10784 10785 tg3_disable_ints(tp); 10786 tg3_flag_clear(tp, INIT_COMPLETE); 10787 10788 tg3_full_unlock(tp); 10789 10790 err = tg3_start(tp, true, true, true); 10791 if (err) { 10792 tg3_frob_aux_power(tp, false); 10793 pci_set_power_state(tp->pdev, PCI_D3hot); 10794 } 10795 10796 if (tg3_flag(tp, PTP_CAPABLE)) { 10797 tp->ptp_clock = ptp_clock_register(&tp->ptp_info, 10798 &tp->pdev->dev); 10799 if (IS_ERR(tp->ptp_clock)) 10800 tp->ptp_clock = NULL; 10801 } 10802 10803 return err; 10804 } 10805 10806 static int tg3_close(struct net_device *dev) 10807 { 10808 struct tg3 *tp = netdev_priv(dev); 10809 10810 tg3_ptp_fini(tp); 10811 10812 tg3_stop(tp); 10813 10814 /* Clear stats across close / open calls */ 10815 memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev)); 10816 memset(&tp->estats_prev, 0, sizeof(tp->estats_prev)); 10817 10818 tg3_power_down(tp); 10819 10820 tg3_carrier_off(tp); 10821 10822 return 0; 10823 } 10824 10825 static inline u64 get_stat64(tg3_stat64_t *val) 10826 { 10827 return ((u64)val->high << 32) | ((u64)val->low); 10828 } 10829 10830 static u64 tg3_calc_crc_errors(struct tg3 *tp) 10831 { 10832 struct tg3_hw_stats *hw_stats = tp->hw_stats; 10833 10834 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 10835 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 10836 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 10837 u32 val; 10838 10839 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 10840 tg3_writephy(tp, MII_TG3_TEST1, 10841 val | MII_TG3_TEST1_CRC_EN); 10842 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 10843 } else 10844 val = 0; 10845 10846 tp->phy_crc_errors += val; 10847 10848 return tp->phy_crc_errors; 10849 } 10850 10851 return get_stat64(&hw_stats->rx_fcs_errors); 10852 } 10853 10854 #define ESTAT_ADD(member) \ 10855 estats->member = old_estats->member + \ 10856 get_stat64(&hw_stats->member) 10857 10858 static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) 10859 { 10860 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 10861 struct tg3_hw_stats *hw_stats = tp->hw_stats; 10862 10863 ESTAT_ADD(rx_octets); 10864 ESTAT_ADD(rx_fragments); 10865 ESTAT_ADD(rx_ucast_packets); 10866 ESTAT_ADD(rx_mcast_packets); 10867 ESTAT_ADD(rx_bcast_packets); 10868 ESTAT_ADD(rx_fcs_errors); 10869 ESTAT_ADD(rx_align_errors); 10870 ESTAT_ADD(rx_xon_pause_rcvd); 10871 ESTAT_ADD(rx_xoff_pause_rcvd); 10872 ESTAT_ADD(rx_mac_ctrl_rcvd); 10873 ESTAT_ADD(rx_xoff_entered); 10874 ESTAT_ADD(rx_frame_too_long_errors); 10875 ESTAT_ADD(rx_jabbers); 10876 ESTAT_ADD(rx_undersize_packets); 10877 ESTAT_ADD(rx_in_length_errors); 10878 ESTAT_ADD(rx_out_length_errors); 10879 ESTAT_ADD(rx_64_or_less_octet_packets); 10880 ESTAT_ADD(rx_65_to_127_octet_packets); 10881 ESTAT_ADD(rx_128_to_255_octet_packets); 10882 ESTAT_ADD(rx_256_to_511_octet_packets); 10883 ESTAT_ADD(rx_512_to_1023_octet_packets); 10884 ESTAT_ADD(rx_1024_to_1522_octet_packets); 10885 ESTAT_ADD(rx_1523_to_2047_octet_packets); 10886 ESTAT_ADD(rx_2048_to_4095_octet_packets); 10887 ESTAT_ADD(rx_4096_to_8191_octet_packets); 10888 ESTAT_ADD(rx_8192_to_9022_octet_packets); 10889 10890 ESTAT_ADD(tx_octets); 10891 ESTAT_ADD(tx_collisions); 10892 ESTAT_ADD(tx_xon_sent); 10893 ESTAT_ADD(tx_xoff_sent); 10894 ESTAT_ADD(tx_flow_control); 10895 ESTAT_ADD(tx_mac_errors); 10896 ESTAT_ADD(tx_single_collisions); 10897 ESTAT_ADD(tx_mult_collisions); 10898 ESTAT_ADD(tx_deferred); 10899 ESTAT_ADD(tx_excessive_collisions); 10900 ESTAT_ADD(tx_late_collisions); 10901 ESTAT_ADD(tx_collide_2times); 10902 ESTAT_ADD(tx_collide_3times); 10903 ESTAT_ADD(tx_collide_4times); 10904 ESTAT_ADD(tx_collide_5times); 10905 ESTAT_ADD(tx_collide_6times); 10906 ESTAT_ADD(tx_collide_7times); 10907 ESTAT_ADD(tx_collide_8times); 10908 ESTAT_ADD(tx_collide_9times); 10909 ESTAT_ADD(tx_collide_10times); 10910 ESTAT_ADD(tx_collide_11times); 10911 ESTAT_ADD(tx_collide_12times); 10912 ESTAT_ADD(tx_collide_13times); 10913 ESTAT_ADD(tx_collide_14times); 10914 ESTAT_ADD(tx_collide_15times); 10915 ESTAT_ADD(tx_ucast_packets); 10916 ESTAT_ADD(tx_mcast_packets); 10917 ESTAT_ADD(tx_bcast_packets); 10918 ESTAT_ADD(tx_carrier_sense_errors); 10919 ESTAT_ADD(tx_discards); 10920 ESTAT_ADD(tx_errors); 10921 10922 ESTAT_ADD(dma_writeq_full); 10923 ESTAT_ADD(dma_write_prioq_full); 10924 ESTAT_ADD(rxbds_empty); 10925 ESTAT_ADD(rx_discards); 10926 ESTAT_ADD(rx_errors); 10927 ESTAT_ADD(rx_threshold_hit); 10928 10929 ESTAT_ADD(dma_readq_full); 10930 ESTAT_ADD(dma_read_prioq_full); 10931 ESTAT_ADD(tx_comp_queue_full); 10932 10933 ESTAT_ADD(ring_set_send_prod_index); 10934 ESTAT_ADD(ring_status_update); 10935 ESTAT_ADD(nic_irqs); 10936 ESTAT_ADD(nic_avoided_irqs); 10937 ESTAT_ADD(nic_tx_threshold_hit); 10938 10939 ESTAT_ADD(mbuf_lwm_thresh_hit); 10940 } 10941 10942 static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) 10943 { 10944 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 10945 struct tg3_hw_stats *hw_stats = tp->hw_stats; 10946 10947 stats->rx_packets = old_stats->rx_packets + 10948 get_stat64(&hw_stats->rx_ucast_packets) + 10949 get_stat64(&hw_stats->rx_mcast_packets) + 10950 get_stat64(&hw_stats->rx_bcast_packets); 10951 10952 stats->tx_packets = old_stats->tx_packets + 10953 get_stat64(&hw_stats->tx_ucast_packets) + 10954 get_stat64(&hw_stats->tx_mcast_packets) + 10955 get_stat64(&hw_stats->tx_bcast_packets); 10956 10957 stats->rx_bytes = old_stats->rx_bytes + 10958 get_stat64(&hw_stats->rx_octets); 10959 stats->tx_bytes = old_stats->tx_bytes + 10960 get_stat64(&hw_stats->tx_octets); 10961 10962 stats->rx_errors = old_stats->rx_errors + 10963 get_stat64(&hw_stats->rx_errors); 10964 stats->tx_errors = old_stats->tx_errors + 10965 get_stat64(&hw_stats->tx_errors) + 10966 get_stat64(&hw_stats->tx_mac_errors) + 10967 get_stat64(&hw_stats->tx_carrier_sense_errors) + 10968 get_stat64(&hw_stats->tx_discards); 10969 10970 stats->multicast = old_stats->multicast + 10971 get_stat64(&hw_stats->rx_mcast_packets); 10972 stats->collisions = old_stats->collisions + 10973 get_stat64(&hw_stats->tx_collisions); 10974 10975 stats->rx_length_errors = old_stats->rx_length_errors + 10976 get_stat64(&hw_stats->rx_frame_too_long_errors) + 10977 get_stat64(&hw_stats->rx_undersize_packets); 10978 10979 stats->rx_over_errors = old_stats->rx_over_errors + 10980 get_stat64(&hw_stats->rxbds_empty); 10981 stats->rx_frame_errors = old_stats->rx_frame_errors + 10982 get_stat64(&hw_stats->rx_align_errors); 10983 stats->tx_aborted_errors = old_stats->tx_aborted_errors + 10984 get_stat64(&hw_stats->tx_discards); 10985 stats->tx_carrier_errors = old_stats->tx_carrier_errors + 10986 get_stat64(&hw_stats->tx_carrier_sense_errors); 10987 10988 stats->rx_crc_errors = old_stats->rx_crc_errors + 10989 tg3_calc_crc_errors(tp); 10990 10991 stats->rx_missed_errors = old_stats->rx_missed_errors + 10992 get_stat64(&hw_stats->rx_discards); 10993 10994 stats->rx_dropped = tp->rx_dropped; 10995 stats->tx_dropped = tp->tx_dropped; 10996 } 10997 10998 static int tg3_get_regs_len(struct net_device *dev) 10999 { 11000 return TG3_REG_BLK_SIZE; 11001 } 11002 11003 static void tg3_get_regs(struct net_device *dev, 11004 struct ethtool_regs *regs, void *_p) 11005 { 11006 struct tg3 *tp = netdev_priv(dev); 11007 11008 regs->version = 0; 11009 11010 memset(_p, 0, TG3_REG_BLK_SIZE); 11011 11012 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 11013 return; 11014 11015 tg3_full_lock(tp, 0); 11016 11017 tg3_dump_legacy_regs(tp, (u32 *)_p); 11018 11019 tg3_full_unlock(tp); 11020 } 11021 11022 static int tg3_get_eeprom_len(struct net_device *dev) 11023 { 11024 struct tg3 *tp = netdev_priv(dev); 11025 11026 return tp->nvram_size; 11027 } 11028 11029 static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 11030 { 11031 struct tg3 *tp = netdev_priv(dev); 11032 int ret; 11033 u8 *pd; 11034 u32 i, offset, len, b_offset, b_count; 11035 __be32 val; 11036 11037 if (tg3_flag(tp, NO_NVRAM)) 11038 return -EINVAL; 11039 11040 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 11041 return -EAGAIN; 11042 11043 offset = eeprom->offset; 11044 len = eeprom->len; 11045 eeprom->len = 0; 11046 11047 eeprom->magic = TG3_EEPROM_MAGIC; 11048 11049 if (offset & 3) { 11050 /* adjustments to start on required 4 byte boundary */ 11051 b_offset = offset & 3; 11052 b_count = 4 - b_offset; 11053 if (b_count > len) { 11054 /* i.e. offset=1 len=2 */ 11055 b_count = len; 11056 } 11057 ret = tg3_nvram_read_be32(tp, offset-b_offset, &val); 11058 if (ret) 11059 return ret; 11060 memcpy(data, ((char *)&val) + b_offset, b_count); 11061 len -= b_count; 11062 offset += b_count; 11063 eeprom->len += b_count; 11064 } 11065 11066 /* read bytes up to the last 4 byte boundary */ 11067 pd = &data[eeprom->len]; 11068 for (i = 0; i < (len - (len & 3)); i += 4) { 11069 ret = tg3_nvram_read_be32(tp, offset + i, &val); 11070 if (ret) { 11071 eeprom->len += i; 11072 return ret; 11073 } 11074 memcpy(pd + i, &val, 4); 11075 } 11076 eeprom->len += i; 11077 11078 if (len & 3) { 11079 /* read last bytes not ending on 4 byte boundary */ 11080 pd = &data[eeprom->len]; 11081 b_count = len & 3; 11082 b_offset = offset + len - b_count; 11083 ret = tg3_nvram_read_be32(tp, b_offset, &val); 11084 if (ret) 11085 return ret; 11086 memcpy(pd, &val, b_count); 11087 eeprom->len += b_count; 11088 } 11089 return 0; 11090 } 11091 11092 static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u8 *data) 11093 { 11094 struct tg3 *tp = netdev_priv(dev); 11095 int ret; 11096 u32 offset, len, b_offset, odd_len; 11097 u8 *buf; 11098 __be32 start, end; 11099 11100 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 11101 return -EAGAIN; 11102 11103 if (tg3_flag(tp, NO_NVRAM) || 11104 eeprom->magic != TG3_EEPROM_MAGIC) 11105 return -EINVAL; 11106 11107 offset = eeprom->offset; 11108 len = eeprom->len; 11109 11110 if ((b_offset = (offset & 3))) { 11111 /* adjustments to start on required 4 byte boundary */ 11112 ret = tg3_nvram_read_be32(tp, offset-b_offset, &start); 11113 if (ret) 11114 return ret; 11115 len += b_offset; 11116 offset &= ~3; 11117 if (len < 4) 11118 len = 4; 11119 } 11120 11121 odd_len = 0; 11122 if (len & 3) { 11123 /* adjustments to end on required 4 byte boundary */ 11124 odd_len = 1; 11125 len = (len + 3) & ~3; 11126 ret = tg3_nvram_read_be32(tp, offset+len-4, &end); 11127 if (ret) 11128 return ret; 11129 } 11130 11131 buf = data; 11132 if (b_offset || odd_len) { 11133 buf = kmalloc(len, GFP_KERNEL); 11134 if (!buf) 11135 return -ENOMEM; 11136 if (b_offset) 11137 memcpy(buf, &start, 4); 11138 if (odd_len) 11139 memcpy(buf+len-4, &end, 4); 11140 memcpy(buf + b_offset, data, eeprom->len); 11141 } 11142 11143 ret = tg3_nvram_write_block(tp, offset, len, buf); 11144 11145 if (buf != data) 11146 kfree(buf); 11147 11148 return ret; 11149 } 11150 11151 static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) 11152 { 11153 struct tg3 *tp = netdev_priv(dev); 11154 11155 if (tg3_flag(tp, USE_PHYLIB)) { 11156 struct phy_device *phydev; 11157 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 11158 return -EAGAIN; 11159 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 11160 return phy_ethtool_gset(phydev, cmd); 11161 } 11162 11163 cmd->supported = (SUPPORTED_Autoneg); 11164 11165 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 11166 cmd->supported |= (SUPPORTED_1000baseT_Half | 11167 SUPPORTED_1000baseT_Full); 11168 11169 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 11170 cmd->supported |= (SUPPORTED_100baseT_Half | 11171 SUPPORTED_100baseT_Full | 11172 SUPPORTED_10baseT_Half | 11173 SUPPORTED_10baseT_Full | 11174 SUPPORTED_TP); 11175 cmd->port = PORT_TP; 11176 } else { 11177 cmd->supported |= SUPPORTED_FIBRE; 11178 cmd->port = PORT_FIBRE; 11179 } 11180 11181 cmd->advertising = tp->link_config.advertising; 11182 if (tg3_flag(tp, PAUSE_AUTONEG)) { 11183 if (tp->link_config.flowctrl & FLOW_CTRL_RX) { 11184 if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 11185 cmd->advertising |= ADVERTISED_Pause; 11186 } else { 11187 cmd->advertising |= ADVERTISED_Pause | 11188 ADVERTISED_Asym_Pause; 11189 } 11190 } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { 11191 cmd->advertising |= ADVERTISED_Asym_Pause; 11192 } 11193 } 11194 if (netif_running(dev) && tp->link_up) { 11195 ethtool_cmd_speed_set(cmd, tp->link_config.active_speed); 11196 cmd->duplex = tp->link_config.active_duplex; 11197 cmd->lp_advertising = tp->link_config.rmt_adv; 11198 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { 11199 if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) 11200 cmd->eth_tp_mdix = ETH_TP_MDI_X; 11201 else 11202 cmd->eth_tp_mdix = ETH_TP_MDI; 11203 } 11204 } else { 11205 ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); 11206 cmd->duplex = DUPLEX_UNKNOWN; 11207 cmd->eth_tp_mdix = ETH_TP_MDI_INVALID; 11208 } 11209 cmd->phy_address = tp->phy_addr; 11210 cmd->transceiver = XCVR_INTERNAL; 11211 cmd->autoneg = tp->link_config.autoneg; 11212 cmd->maxtxpkt = 0; 11213 cmd->maxrxpkt = 0; 11214 return 0; 11215 } 11216 11217 static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) 11218 { 11219 struct tg3 *tp = netdev_priv(dev); 11220 u32 speed = ethtool_cmd_speed(cmd); 11221 11222 if (tg3_flag(tp, USE_PHYLIB)) { 11223 struct phy_device *phydev; 11224 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 11225 return -EAGAIN; 11226 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 11227 return phy_ethtool_sset(phydev, cmd); 11228 } 11229 11230 if (cmd->autoneg != AUTONEG_ENABLE && 11231 cmd->autoneg != AUTONEG_DISABLE) 11232 return -EINVAL; 11233 11234 if (cmd->autoneg == AUTONEG_DISABLE && 11235 cmd->duplex != DUPLEX_FULL && 11236 cmd->duplex != DUPLEX_HALF) 11237 return -EINVAL; 11238 11239 if (cmd->autoneg == AUTONEG_ENABLE) { 11240 u32 mask = ADVERTISED_Autoneg | 11241 ADVERTISED_Pause | 11242 ADVERTISED_Asym_Pause; 11243 11244 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 11245 mask |= ADVERTISED_1000baseT_Half | 11246 ADVERTISED_1000baseT_Full; 11247 11248 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 11249 mask |= ADVERTISED_100baseT_Half | 11250 ADVERTISED_100baseT_Full | 11251 ADVERTISED_10baseT_Half | 11252 ADVERTISED_10baseT_Full | 11253 ADVERTISED_TP; 11254 else 11255 mask |= ADVERTISED_FIBRE; 11256 11257 if (cmd->advertising & ~mask) 11258 return -EINVAL; 11259 11260 mask &= (ADVERTISED_1000baseT_Half | 11261 ADVERTISED_1000baseT_Full | 11262 ADVERTISED_100baseT_Half | 11263 ADVERTISED_100baseT_Full | 11264 ADVERTISED_10baseT_Half | 11265 ADVERTISED_10baseT_Full); 11266 11267 cmd->advertising &= mask; 11268 } else { 11269 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { 11270 if (speed != SPEED_1000) 11271 return -EINVAL; 11272 11273 if (cmd->duplex != DUPLEX_FULL) 11274 return -EINVAL; 11275 } else { 11276 if (speed != SPEED_100 && 11277 speed != SPEED_10) 11278 return -EINVAL; 11279 } 11280 } 11281 11282 tg3_full_lock(tp, 0); 11283 11284 tp->link_config.autoneg = cmd->autoneg; 11285 if (cmd->autoneg == AUTONEG_ENABLE) { 11286 tp->link_config.advertising = (cmd->advertising | 11287 ADVERTISED_Autoneg); 11288 tp->link_config.speed = SPEED_UNKNOWN; 11289 tp->link_config.duplex = DUPLEX_UNKNOWN; 11290 } else { 11291 tp->link_config.advertising = 0; 11292 tp->link_config.speed = speed; 11293 tp->link_config.duplex = cmd->duplex; 11294 } 11295 11296 if (netif_running(dev)) 11297 tg3_setup_phy(tp, 1); 11298 11299 tg3_full_unlock(tp); 11300 11301 return 0; 11302 } 11303 11304 static void tg3_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 11305 { 11306 struct tg3 *tp = netdev_priv(dev); 11307 11308 strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); 11309 strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version)); 11310 strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version)); 11311 strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info)); 11312 } 11313 11314 static void tg3_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 11315 { 11316 struct tg3 *tp = netdev_priv(dev); 11317 11318 if (tg3_flag(tp, WOL_CAP) && device_can_wakeup(&tp->pdev->dev)) 11319 wol->supported = WAKE_MAGIC; 11320 else 11321 wol->supported = 0; 11322 wol->wolopts = 0; 11323 if (tg3_flag(tp, WOL_ENABLE) && device_can_wakeup(&tp->pdev->dev)) 11324 wol->wolopts = WAKE_MAGIC; 11325 memset(&wol->sopass, 0, sizeof(wol->sopass)); 11326 } 11327 11328 static int tg3_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) 11329 { 11330 struct tg3 *tp = netdev_priv(dev); 11331 struct device *dp = &tp->pdev->dev; 11332 11333 if (wol->wolopts & ~WAKE_MAGIC) 11334 return -EINVAL; 11335 if ((wol->wolopts & WAKE_MAGIC) && 11336 !(tg3_flag(tp, WOL_CAP) && device_can_wakeup(dp))) 11337 return -EINVAL; 11338 11339 device_set_wakeup_enable(dp, wol->wolopts & WAKE_MAGIC); 11340 11341 spin_lock_bh(&tp->lock); 11342 if (device_may_wakeup(dp)) 11343 tg3_flag_set(tp, WOL_ENABLE); 11344 else 11345 tg3_flag_clear(tp, WOL_ENABLE); 11346 spin_unlock_bh(&tp->lock); 11347 11348 return 0; 11349 } 11350 11351 static u32 tg3_get_msglevel(struct net_device *dev) 11352 { 11353 struct tg3 *tp = netdev_priv(dev); 11354 return tp->msg_enable; 11355 } 11356 11357 static void tg3_set_msglevel(struct net_device *dev, u32 value) 11358 { 11359 struct tg3 *tp = netdev_priv(dev); 11360 tp->msg_enable = value; 11361 } 11362 11363 static int tg3_nway_reset(struct net_device *dev) 11364 { 11365 struct tg3 *tp = netdev_priv(dev); 11366 int r; 11367 11368 if (!netif_running(dev)) 11369 return -EAGAIN; 11370 11371 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 11372 return -EINVAL; 11373 11374 if (tg3_flag(tp, USE_PHYLIB)) { 11375 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 11376 return -EAGAIN; 11377 r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]); 11378 } else { 11379 u32 bmcr; 11380 11381 spin_lock_bh(&tp->lock); 11382 r = -EINVAL; 11383 tg3_readphy(tp, MII_BMCR, &bmcr); 11384 if (!tg3_readphy(tp, MII_BMCR, &bmcr) && 11385 ((bmcr & BMCR_ANENABLE) || 11386 (tp->phy_flags & TG3_PHYFLG_PARALLEL_DETECT))) { 11387 tg3_writephy(tp, MII_BMCR, bmcr | BMCR_ANRESTART | 11388 BMCR_ANENABLE); 11389 r = 0; 11390 } 11391 spin_unlock_bh(&tp->lock); 11392 } 11393 11394 return r; 11395 } 11396 11397 static void tg3_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 11398 { 11399 struct tg3 *tp = netdev_priv(dev); 11400 11401 ering->rx_max_pending = tp->rx_std_ring_mask; 11402 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 11403 ering->rx_jumbo_max_pending = tp->rx_jmb_ring_mask; 11404 else 11405 ering->rx_jumbo_max_pending = 0; 11406 11407 ering->tx_max_pending = TG3_TX_RING_SIZE - 1; 11408 11409 ering->rx_pending = tp->rx_pending; 11410 if (tg3_flag(tp, JUMBO_RING_ENABLE)) 11411 ering->rx_jumbo_pending = tp->rx_jumbo_pending; 11412 else 11413 ering->rx_jumbo_pending = 0; 11414 11415 ering->tx_pending = tp->napi[0].tx_pending; 11416 } 11417 11418 static int tg3_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ering) 11419 { 11420 struct tg3 *tp = netdev_priv(dev); 11421 int i, irq_sync = 0, err = 0; 11422 11423 if ((ering->rx_pending > tp->rx_std_ring_mask) || 11424 (ering->rx_jumbo_pending > tp->rx_jmb_ring_mask) || 11425 (ering->tx_pending > TG3_TX_RING_SIZE - 1) || 11426 (ering->tx_pending <= MAX_SKB_FRAGS) || 11427 (tg3_flag(tp, TSO_BUG) && 11428 (ering->tx_pending <= (MAX_SKB_FRAGS * 3)))) 11429 return -EINVAL; 11430 11431 if (netif_running(dev)) { 11432 tg3_phy_stop(tp); 11433 tg3_netif_stop(tp); 11434 irq_sync = 1; 11435 } 11436 11437 tg3_full_lock(tp, irq_sync); 11438 11439 tp->rx_pending = ering->rx_pending; 11440 11441 if (tg3_flag(tp, MAX_RXPEND_64) && 11442 tp->rx_pending > 63) 11443 tp->rx_pending = 63; 11444 tp->rx_jumbo_pending = ering->rx_jumbo_pending; 11445 11446 for (i = 0; i < tp->irq_max; i++) 11447 tp->napi[i].tx_pending = ering->tx_pending; 11448 11449 if (netif_running(dev)) { 11450 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11451 err = tg3_restart_hw(tp, 1); 11452 if (!err) 11453 tg3_netif_start(tp); 11454 } 11455 11456 tg3_full_unlock(tp); 11457 11458 if (irq_sync && !err) 11459 tg3_phy_start(tp); 11460 11461 return err; 11462 } 11463 11464 static void tg3_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 11465 { 11466 struct tg3 *tp = netdev_priv(dev); 11467 11468 epause->autoneg = !!tg3_flag(tp, PAUSE_AUTONEG); 11469 11470 if (tp->link_config.flowctrl & FLOW_CTRL_RX) 11471 epause->rx_pause = 1; 11472 else 11473 epause->rx_pause = 0; 11474 11475 if (tp->link_config.flowctrl & FLOW_CTRL_TX) 11476 epause->tx_pause = 1; 11477 else 11478 epause->tx_pause = 0; 11479 } 11480 11481 static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *epause) 11482 { 11483 struct tg3 *tp = netdev_priv(dev); 11484 int err = 0; 11485 11486 if (tg3_flag(tp, USE_PHYLIB)) { 11487 u32 newadv; 11488 struct phy_device *phydev; 11489 11490 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 11491 11492 if (!(phydev->supported & SUPPORTED_Pause) || 11493 (!(phydev->supported & SUPPORTED_Asym_Pause) && 11494 (epause->rx_pause != epause->tx_pause))) 11495 return -EINVAL; 11496 11497 tp->link_config.flowctrl = 0; 11498 if (epause->rx_pause) { 11499 tp->link_config.flowctrl |= FLOW_CTRL_RX; 11500 11501 if (epause->tx_pause) { 11502 tp->link_config.flowctrl |= FLOW_CTRL_TX; 11503 newadv = ADVERTISED_Pause; 11504 } else 11505 newadv = ADVERTISED_Pause | 11506 ADVERTISED_Asym_Pause; 11507 } else if (epause->tx_pause) { 11508 tp->link_config.flowctrl |= FLOW_CTRL_TX; 11509 newadv = ADVERTISED_Asym_Pause; 11510 } else 11511 newadv = 0; 11512 11513 if (epause->autoneg) 11514 tg3_flag_set(tp, PAUSE_AUTONEG); 11515 else 11516 tg3_flag_clear(tp, PAUSE_AUTONEG); 11517 11518 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 11519 u32 oldadv = phydev->advertising & 11520 (ADVERTISED_Pause | ADVERTISED_Asym_Pause); 11521 if (oldadv != newadv) { 11522 phydev->advertising &= 11523 ~(ADVERTISED_Pause | 11524 ADVERTISED_Asym_Pause); 11525 phydev->advertising |= newadv; 11526 if (phydev->autoneg) { 11527 /* 11528 * Always renegotiate the link to 11529 * inform our link partner of our 11530 * flow control settings, even if the 11531 * flow control is forced. Let 11532 * tg3_adjust_link() do the final 11533 * flow control setup. 11534 */ 11535 return phy_start_aneg(phydev); 11536 } 11537 } 11538 11539 if (!epause->autoneg) 11540 tg3_setup_flow_control(tp, 0, 0); 11541 } else { 11542 tp->link_config.advertising &= 11543 ~(ADVERTISED_Pause | 11544 ADVERTISED_Asym_Pause); 11545 tp->link_config.advertising |= newadv; 11546 } 11547 } else { 11548 int irq_sync = 0; 11549 11550 if (netif_running(dev)) { 11551 tg3_netif_stop(tp); 11552 irq_sync = 1; 11553 } 11554 11555 tg3_full_lock(tp, irq_sync); 11556 11557 if (epause->autoneg) 11558 tg3_flag_set(tp, PAUSE_AUTONEG); 11559 else 11560 tg3_flag_clear(tp, PAUSE_AUTONEG); 11561 if (epause->rx_pause) 11562 tp->link_config.flowctrl |= FLOW_CTRL_RX; 11563 else 11564 tp->link_config.flowctrl &= ~FLOW_CTRL_RX; 11565 if (epause->tx_pause) 11566 tp->link_config.flowctrl |= FLOW_CTRL_TX; 11567 else 11568 tp->link_config.flowctrl &= ~FLOW_CTRL_TX; 11569 11570 if (netif_running(dev)) { 11571 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 11572 err = tg3_restart_hw(tp, 1); 11573 if (!err) 11574 tg3_netif_start(tp); 11575 } 11576 11577 tg3_full_unlock(tp); 11578 } 11579 11580 return err; 11581 } 11582 11583 static int tg3_get_sset_count(struct net_device *dev, int sset) 11584 { 11585 switch (sset) { 11586 case ETH_SS_TEST: 11587 return TG3_NUM_TEST; 11588 case ETH_SS_STATS: 11589 return TG3_NUM_STATS; 11590 default: 11591 return -EOPNOTSUPP; 11592 } 11593 } 11594 11595 static int tg3_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, 11596 u32 *rules __always_unused) 11597 { 11598 struct tg3 *tp = netdev_priv(dev); 11599 11600 if (!tg3_flag(tp, SUPPORT_MSIX)) 11601 return -EOPNOTSUPP; 11602 11603 switch (info->cmd) { 11604 case ETHTOOL_GRXRINGS: 11605 if (netif_running(tp->dev)) 11606 info->data = tp->rxq_cnt; 11607 else { 11608 info->data = num_online_cpus(); 11609 if (info->data > TG3_RSS_MAX_NUM_QS) 11610 info->data = TG3_RSS_MAX_NUM_QS; 11611 } 11612 11613 /* The first interrupt vector only 11614 * handles link interrupts. 11615 */ 11616 info->data -= 1; 11617 return 0; 11618 11619 default: 11620 return -EOPNOTSUPP; 11621 } 11622 } 11623 11624 static u32 tg3_get_rxfh_indir_size(struct net_device *dev) 11625 { 11626 u32 size = 0; 11627 struct tg3 *tp = netdev_priv(dev); 11628 11629 if (tg3_flag(tp, SUPPORT_MSIX)) 11630 size = TG3_RSS_INDIR_TBL_SIZE; 11631 11632 return size; 11633 } 11634 11635 static int tg3_get_rxfh_indir(struct net_device *dev, u32 *indir) 11636 { 11637 struct tg3 *tp = netdev_priv(dev); 11638 int i; 11639 11640 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 11641 indir[i] = tp->rss_ind_tbl[i]; 11642 11643 return 0; 11644 } 11645 11646 static int tg3_set_rxfh_indir(struct net_device *dev, const u32 *indir) 11647 { 11648 struct tg3 *tp = netdev_priv(dev); 11649 size_t i; 11650 11651 for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) 11652 tp->rss_ind_tbl[i] = indir[i]; 11653 11654 if (!netif_running(dev) || !tg3_flag(tp, ENABLE_RSS)) 11655 return 0; 11656 11657 /* It is legal to write the indirection 11658 * table while the device is running. 11659 */ 11660 tg3_full_lock(tp, 0); 11661 tg3_rss_write_indir_tbl(tp); 11662 tg3_full_unlock(tp); 11663 11664 return 0; 11665 } 11666 11667 static void tg3_get_channels(struct net_device *dev, 11668 struct ethtool_channels *channel) 11669 { 11670 struct tg3 *tp = netdev_priv(dev); 11671 u32 deflt_qs = netif_get_num_default_rss_queues(); 11672 11673 channel->max_rx = tp->rxq_max; 11674 channel->max_tx = tp->txq_max; 11675 11676 if (netif_running(dev)) { 11677 channel->rx_count = tp->rxq_cnt; 11678 channel->tx_count = tp->txq_cnt; 11679 } else { 11680 if (tp->rxq_req) 11681 channel->rx_count = tp->rxq_req; 11682 else 11683 channel->rx_count = min(deflt_qs, tp->rxq_max); 11684 11685 if (tp->txq_req) 11686 channel->tx_count = tp->txq_req; 11687 else 11688 channel->tx_count = min(deflt_qs, tp->txq_max); 11689 } 11690 } 11691 11692 static int tg3_set_channels(struct net_device *dev, 11693 struct ethtool_channels *channel) 11694 { 11695 struct tg3 *tp = netdev_priv(dev); 11696 11697 if (!tg3_flag(tp, SUPPORT_MSIX)) 11698 return -EOPNOTSUPP; 11699 11700 if (channel->rx_count > tp->rxq_max || 11701 channel->tx_count > tp->txq_max) 11702 return -EINVAL; 11703 11704 tp->rxq_req = channel->rx_count; 11705 tp->txq_req = channel->tx_count; 11706 11707 if (!netif_running(dev)) 11708 return 0; 11709 11710 tg3_stop(tp); 11711 11712 tg3_carrier_off(tp); 11713 11714 tg3_start(tp, true, false, false); 11715 11716 return 0; 11717 } 11718 11719 static void tg3_get_strings(struct net_device *dev, u32 stringset, u8 *buf) 11720 { 11721 switch (stringset) { 11722 case ETH_SS_STATS: 11723 memcpy(buf, ðtool_stats_keys, sizeof(ethtool_stats_keys)); 11724 break; 11725 case ETH_SS_TEST: 11726 memcpy(buf, ðtool_test_keys, sizeof(ethtool_test_keys)); 11727 break; 11728 default: 11729 WARN_ON(1); /* we need a WARN() */ 11730 break; 11731 } 11732 } 11733 11734 static int tg3_set_phys_id(struct net_device *dev, 11735 enum ethtool_phys_id_state state) 11736 { 11737 struct tg3 *tp = netdev_priv(dev); 11738 11739 if (!netif_running(tp->dev)) 11740 return -EAGAIN; 11741 11742 switch (state) { 11743 case ETHTOOL_ID_ACTIVE: 11744 return 1; /* cycle on/off once per second */ 11745 11746 case ETHTOOL_ID_ON: 11747 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 11748 LED_CTRL_1000MBPS_ON | 11749 LED_CTRL_100MBPS_ON | 11750 LED_CTRL_10MBPS_ON | 11751 LED_CTRL_TRAFFIC_OVERRIDE | 11752 LED_CTRL_TRAFFIC_BLINK | 11753 LED_CTRL_TRAFFIC_LED); 11754 break; 11755 11756 case ETHTOOL_ID_OFF: 11757 tw32(MAC_LED_CTRL, LED_CTRL_LNKLED_OVERRIDE | 11758 LED_CTRL_TRAFFIC_OVERRIDE); 11759 break; 11760 11761 case ETHTOOL_ID_INACTIVE: 11762 tw32(MAC_LED_CTRL, tp->led_ctrl); 11763 break; 11764 } 11765 11766 return 0; 11767 } 11768 11769 static void tg3_get_ethtool_stats(struct net_device *dev, 11770 struct ethtool_stats *estats, u64 *tmp_stats) 11771 { 11772 struct tg3 *tp = netdev_priv(dev); 11773 11774 if (tp->hw_stats) 11775 tg3_get_estats(tp, (struct tg3_ethtool_stats *)tmp_stats); 11776 else 11777 memset(tmp_stats, 0, sizeof(struct tg3_ethtool_stats)); 11778 } 11779 11780 static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen) 11781 { 11782 int i; 11783 __be32 *buf; 11784 u32 offset = 0, len = 0; 11785 u32 magic, val; 11786 11787 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &magic)) 11788 return NULL; 11789 11790 if (magic == TG3_EEPROM_MAGIC) { 11791 for (offset = TG3_NVM_DIR_START; 11792 offset < TG3_NVM_DIR_END; 11793 offset += TG3_NVM_DIRENT_SIZE) { 11794 if (tg3_nvram_read(tp, offset, &val)) 11795 return NULL; 11796 11797 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == 11798 TG3_NVM_DIRTYPE_EXTVPD) 11799 break; 11800 } 11801 11802 if (offset != TG3_NVM_DIR_END) { 11803 len = (val & TG3_NVM_DIRTYPE_LENMSK) * 4; 11804 if (tg3_nvram_read(tp, offset + 4, &offset)) 11805 return NULL; 11806 11807 offset = tg3_nvram_logical_addr(tp, offset); 11808 } 11809 } 11810 11811 if (!offset || !len) { 11812 offset = TG3_NVM_VPD_OFF; 11813 len = TG3_NVM_VPD_LEN; 11814 } 11815 11816 buf = kmalloc(len, GFP_KERNEL); 11817 if (buf == NULL) 11818 return NULL; 11819 11820 if (magic == TG3_EEPROM_MAGIC) { 11821 for (i = 0; i < len; i += 4) { 11822 /* The data is in little-endian format in NVRAM. 11823 * Use the big-endian read routines to preserve 11824 * the byte order as it exists in NVRAM. 11825 */ 11826 if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4])) 11827 goto error; 11828 } 11829 } else { 11830 u8 *ptr; 11831 ssize_t cnt; 11832 unsigned int pos = 0; 11833 11834 ptr = (u8 *)&buf[0]; 11835 for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) { 11836 cnt = pci_read_vpd(tp->pdev, pos, 11837 len - pos, ptr); 11838 if (cnt == -ETIMEDOUT || cnt == -EINTR) 11839 cnt = 0; 11840 else if (cnt < 0) 11841 goto error; 11842 } 11843 if (pos != len) 11844 goto error; 11845 } 11846 11847 *vpdlen = len; 11848 11849 return buf; 11850 11851 error: 11852 kfree(buf); 11853 return NULL; 11854 } 11855 11856 #define NVRAM_TEST_SIZE 0x100 11857 #define NVRAM_SELFBOOT_FORMAT1_0_SIZE 0x14 11858 #define NVRAM_SELFBOOT_FORMAT1_2_SIZE 0x18 11859 #define NVRAM_SELFBOOT_FORMAT1_3_SIZE 0x1c 11860 #define NVRAM_SELFBOOT_FORMAT1_4_SIZE 0x20 11861 #define NVRAM_SELFBOOT_FORMAT1_5_SIZE 0x24 11862 #define NVRAM_SELFBOOT_FORMAT1_6_SIZE 0x50 11863 #define NVRAM_SELFBOOT_HW_SIZE 0x20 11864 #define NVRAM_SELFBOOT_DATA_SIZE 0x1c 11865 11866 static int tg3_test_nvram(struct tg3 *tp) 11867 { 11868 u32 csum, magic, len; 11869 __be32 *buf; 11870 int i, j, k, err = 0, size; 11871 11872 if (tg3_flag(tp, NO_NVRAM)) 11873 return 0; 11874 11875 if (tg3_nvram_read(tp, 0, &magic) != 0) 11876 return -EIO; 11877 11878 if (magic == TG3_EEPROM_MAGIC) 11879 size = NVRAM_TEST_SIZE; 11880 else if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) { 11881 if ((magic & TG3_EEPROM_SB_FORMAT_MASK) == 11882 TG3_EEPROM_SB_FORMAT_1) { 11883 switch (magic & TG3_EEPROM_SB_REVISION_MASK) { 11884 case TG3_EEPROM_SB_REVISION_0: 11885 size = NVRAM_SELFBOOT_FORMAT1_0_SIZE; 11886 break; 11887 case TG3_EEPROM_SB_REVISION_2: 11888 size = NVRAM_SELFBOOT_FORMAT1_2_SIZE; 11889 break; 11890 case TG3_EEPROM_SB_REVISION_3: 11891 size = NVRAM_SELFBOOT_FORMAT1_3_SIZE; 11892 break; 11893 case TG3_EEPROM_SB_REVISION_4: 11894 size = NVRAM_SELFBOOT_FORMAT1_4_SIZE; 11895 break; 11896 case TG3_EEPROM_SB_REVISION_5: 11897 size = NVRAM_SELFBOOT_FORMAT1_5_SIZE; 11898 break; 11899 case TG3_EEPROM_SB_REVISION_6: 11900 size = NVRAM_SELFBOOT_FORMAT1_6_SIZE; 11901 break; 11902 default: 11903 return -EIO; 11904 } 11905 } else 11906 return 0; 11907 } else if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 11908 size = NVRAM_SELFBOOT_HW_SIZE; 11909 else 11910 return -EIO; 11911 11912 buf = kmalloc(size, GFP_KERNEL); 11913 if (buf == NULL) 11914 return -ENOMEM; 11915 11916 err = -EIO; 11917 for (i = 0, j = 0; i < size; i += 4, j++) { 11918 err = tg3_nvram_read_be32(tp, i, &buf[j]); 11919 if (err) 11920 break; 11921 } 11922 if (i < size) 11923 goto out; 11924 11925 /* Selfboot format */ 11926 magic = be32_to_cpu(buf[0]); 11927 if ((magic & TG3_EEPROM_MAGIC_FW_MSK) == 11928 TG3_EEPROM_MAGIC_FW) { 11929 u8 *buf8 = (u8 *) buf, csum8 = 0; 11930 11931 if ((magic & TG3_EEPROM_SB_REVISION_MASK) == 11932 TG3_EEPROM_SB_REVISION_2) { 11933 /* For rev 2, the csum doesn't include the MBA. */ 11934 for (i = 0; i < TG3_EEPROM_SB_F1R2_MBA_OFF; i++) 11935 csum8 += buf8[i]; 11936 for (i = TG3_EEPROM_SB_F1R2_MBA_OFF + 4; i < size; i++) 11937 csum8 += buf8[i]; 11938 } else { 11939 for (i = 0; i < size; i++) 11940 csum8 += buf8[i]; 11941 } 11942 11943 if (csum8 == 0) { 11944 err = 0; 11945 goto out; 11946 } 11947 11948 err = -EIO; 11949 goto out; 11950 } 11951 11952 if ((magic & TG3_EEPROM_MAGIC_HW_MSK) == 11953 TG3_EEPROM_MAGIC_HW) { 11954 u8 data[NVRAM_SELFBOOT_DATA_SIZE]; 11955 u8 parity[NVRAM_SELFBOOT_DATA_SIZE]; 11956 u8 *buf8 = (u8 *) buf; 11957 11958 /* Separate the parity bits and the data bytes. */ 11959 for (i = 0, j = 0, k = 0; i < NVRAM_SELFBOOT_HW_SIZE; i++) { 11960 if ((i == 0) || (i == 8)) { 11961 int l; 11962 u8 msk; 11963 11964 for (l = 0, msk = 0x80; l < 7; l++, msk >>= 1) 11965 parity[k++] = buf8[i] & msk; 11966 i++; 11967 } else if (i == 16) { 11968 int l; 11969 u8 msk; 11970 11971 for (l = 0, msk = 0x20; l < 6; l++, msk >>= 1) 11972 parity[k++] = buf8[i] & msk; 11973 i++; 11974 11975 for (l = 0, msk = 0x80; l < 8; l++, msk >>= 1) 11976 parity[k++] = buf8[i] & msk; 11977 i++; 11978 } 11979 data[j++] = buf8[i]; 11980 } 11981 11982 err = -EIO; 11983 for (i = 0; i < NVRAM_SELFBOOT_DATA_SIZE; i++) { 11984 u8 hw8 = hweight8(data[i]); 11985 11986 if ((hw8 & 0x1) && parity[i]) 11987 goto out; 11988 else if (!(hw8 & 0x1) && !parity[i]) 11989 goto out; 11990 } 11991 err = 0; 11992 goto out; 11993 } 11994 11995 err = -EIO; 11996 11997 /* Bootstrap checksum at offset 0x10 */ 11998 csum = calc_crc((unsigned char *) buf, 0x10); 11999 if (csum != le32_to_cpu(buf[0x10/4])) 12000 goto out; 12001 12002 /* Manufacturing block starts at offset 0x74, checksum at 0xfc */ 12003 csum = calc_crc((unsigned char *) &buf[0x74/4], 0x88); 12004 if (csum != le32_to_cpu(buf[0xfc/4])) 12005 goto out; 12006 12007 kfree(buf); 12008 12009 buf = tg3_vpd_readblock(tp, &len); 12010 if (!buf) 12011 return -ENOMEM; 12012 12013 i = pci_vpd_find_tag((u8 *)buf, 0, len, PCI_VPD_LRDT_RO_DATA); 12014 if (i > 0) { 12015 j = pci_vpd_lrdt_size(&((u8 *)buf)[i]); 12016 if (j < 0) 12017 goto out; 12018 12019 if (i + PCI_VPD_LRDT_TAG_SIZE + j > len) 12020 goto out; 12021 12022 i += PCI_VPD_LRDT_TAG_SIZE; 12023 j = pci_vpd_find_info_keyword((u8 *)buf, i, j, 12024 PCI_VPD_RO_KEYWORD_CHKSUM); 12025 if (j > 0) { 12026 u8 csum8 = 0; 12027 12028 j += PCI_VPD_INFO_FLD_HDR_SIZE; 12029 12030 for (i = 0; i <= j; i++) 12031 csum8 += ((u8 *)buf)[i]; 12032 12033 if (csum8) 12034 goto out; 12035 } 12036 } 12037 12038 err = 0; 12039 12040 out: 12041 kfree(buf); 12042 return err; 12043 } 12044 12045 #define TG3_SERDES_TIMEOUT_SEC 2 12046 #define TG3_COPPER_TIMEOUT_SEC 6 12047 12048 static int tg3_test_link(struct tg3 *tp) 12049 { 12050 int i, max; 12051 12052 if (!netif_running(tp->dev)) 12053 return -ENODEV; 12054 12055 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 12056 max = TG3_SERDES_TIMEOUT_SEC; 12057 else 12058 max = TG3_COPPER_TIMEOUT_SEC; 12059 12060 for (i = 0; i < max; i++) { 12061 if (tp->link_up) 12062 return 0; 12063 12064 if (msleep_interruptible(1000)) 12065 break; 12066 } 12067 12068 return -EIO; 12069 } 12070 12071 /* Only test the commonly used registers */ 12072 static int tg3_test_registers(struct tg3 *tp) 12073 { 12074 int i, is_5705, is_5750; 12075 u32 offset, read_mask, write_mask, val, save_val, read_val; 12076 static struct { 12077 u16 offset; 12078 u16 flags; 12079 #define TG3_FL_5705 0x1 12080 #define TG3_FL_NOT_5705 0x2 12081 #define TG3_FL_NOT_5788 0x4 12082 #define TG3_FL_NOT_5750 0x8 12083 u32 read_mask; 12084 u32 write_mask; 12085 } reg_tbl[] = { 12086 /* MAC Control Registers */ 12087 { MAC_MODE, TG3_FL_NOT_5705, 12088 0x00000000, 0x00ef6f8c }, 12089 { MAC_MODE, TG3_FL_5705, 12090 0x00000000, 0x01ef6b8c }, 12091 { MAC_STATUS, TG3_FL_NOT_5705, 12092 0x03800107, 0x00000000 }, 12093 { MAC_STATUS, TG3_FL_5705, 12094 0x03800100, 0x00000000 }, 12095 { MAC_ADDR_0_HIGH, 0x0000, 12096 0x00000000, 0x0000ffff }, 12097 { MAC_ADDR_0_LOW, 0x0000, 12098 0x00000000, 0xffffffff }, 12099 { MAC_RX_MTU_SIZE, 0x0000, 12100 0x00000000, 0x0000ffff }, 12101 { MAC_TX_MODE, 0x0000, 12102 0x00000000, 0x00000070 }, 12103 { MAC_TX_LENGTHS, 0x0000, 12104 0x00000000, 0x00003fff }, 12105 { MAC_RX_MODE, TG3_FL_NOT_5705, 12106 0x00000000, 0x000007fc }, 12107 { MAC_RX_MODE, TG3_FL_5705, 12108 0x00000000, 0x000007dc }, 12109 { MAC_HASH_REG_0, 0x0000, 12110 0x00000000, 0xffffffff }, 12111 { MAC_HASH_REG_1, 0x0000, 12112 0x00000000, 0xffffffff }, 12113 { MAC_HASH_REG_2, 0x0000, 12114 0x00000000, 0xffffffff }, 12115 { MAC_HASH_REG_3, 0x0000, 12116 0x00000000, 0xffffffff }, 12117 12118 /* Receive Data and Receive BD Initiator Control Registers. */ 12119 { RCVDBDI_JUMBO_BD+0, TG3_FL_NOT_5705, 12120 0x00000000, 0xffffffff }, 12121 { RCVDBDI_JUMBO_BD+4, TG3_FL_NOT_5705, 12122 0x00000000, 0xffffffff }, 12123 { RCVDBDI_JUMBO_BD+8, TG3_FL_NOT_5705, 12124 0x00000000, 0x00000003 }, 12125 { RCVDBDI_JUMBO_BD+0xc, TG3_FL_NOT_5705, 12126 0x00000000, 0xffffffff }, 12127 { RCVDBDI_STD_BD+0, 0x0000, 12128 0x00000000, 0xffffffff }, 12129 { RCVDBDI_STD_BD+4, 0x0000, 12130 0x00000000, 0xffffffff }, 12131 { RCVDBDI_STD_BD+8, 0x0000, 12132 0x00000000, 0xffff0002 }, 12133 { RCVDBDI_STD_BD+0xc, 0x0000, 12134 0x00000000, 0xffffffff }, 12135 12136 /* Receive BD Initiator Control Registers. */ 12137 { RCVBDI_STD_THRESH, TG3_FL_NOT_5705, 12138 0x00000000, 0xffffffff }, 12139 { RCVBDI_STD_THRESH, TG3_FL_5705, 12140 0x00000000, 0x000003ff }, 12141 { RCVBDI_JUMBO_THRESH, TG3_FL_NOT_5705, 12142 0x00000000, 0xffffffff }, 12143 12144 /* Host Coalescing Control Registers. */ 12145 { HOSTCC_MODE, TG3_FL_NOT_5705, 12146 0x00000000, 0x00000004 }, 12147 { HOSTCC_MODE, TG3_FL_5705, 12148 0x00000000, 0x000000f6 }, 12149 { HOSTCC_RXCOL_TICKS, TG3_FL_NOT_5705, 12150 0x00000000, 0xffffffff }, 12151 { HOSTCC_RXCOL_TICKS, TG3_FL_5705, 12152 0x00000000, 0x000003ff }, 12153 { HOSTCC_TXCOL_TICKS, TG3_FL_NOT_5705, 12154 0x00000000, 0xffffffff }, 12155 { HOSTCC_TXCOL_TICKS, TG3_FL_5705, 12156 0x00000000, 0x000003ff }, 12157 { HOSTCC_RXMAX_FRAMES, TG3_FL_NOT_5705, 12158 0x00000000, 0xffffffff }, 12159 { HOSTCC_RXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 12160 0x00000000, 0x000000ff }, 12161 { HOSTCC_TXMAX_FRAMES, TG3_FL_NOT_5705, 12162 0x00000000, 0xffffffff }, 12163 { HOSTCC_TXMAX_FRAMES, TG3_FL_5705 | TG3_FL_NOT_5788, 12164 0x00000000, 0x000000ff }, 12165 { HOSTCC_RXCOAL_TICK_INT, TG3_FL_NOT_5705, 12166 0x00000000, 0xffffffff }, 12167 { HOSTCC_TXCOAL_TICK_INT, TG3_FL_NOT_5705, 12168 0x00000000, 0xffffffff }, 12169 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_NOT_5705, 12170 0x00000000, 0xffffffff }, 12171 { HOSTCC_RXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 12172 0x00000000, 0x000000ff }, 12173 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_NOT_5705, 12174 0x00000000, 0xffffffff }, 12175 { HOSTCC_TXCOAL_MAXF_INT, TG3_FL_5705 | TG3_FL_NOT_5788, 12176 0x00000000, 0x000000ff }, 12177 { HOSTCC_STAT_COAL_TICKS, TG3_FL_NOT_5705, 12178 0x00000000, 0xffffffff }, 12179 { HOSTCC_STATS_BLK_HOST_ADDR, TG3_FL_NOT_5705, 12180 0x00000000, 0xffffffff }, 12181 { HOSTCC_STATS_BLK_HOST_ADDR+4, TG3_FL_NOT_5705, 12182 0x00000000, 0xffffffff }, 12183 { HOSTCC_STATUS_BLK_HOST_ADDR, 0x0000, 12184 0x00000000, 0xffffffff }, 12185 { HOSTCC_STATUS_BLK_HOST_ADDR+4, 0x0000, 12186 0x00000000, 0xffffffff }, 12187 { HOSTCC_STATS_BLK_NIC_ADDR, 0x0000, 12188 0xffffffff, 0x00000000 }, 12189 { HOSTCC_STATUS_BLK_NIC_ADDR, 0x0000, 12190 0xffffffff, 0x00000000 }, 12191 12192 /* Buffer Manager Control Registers. */ 12193 { BUFMGR_MB_POOL_ADDR, TG3_FL_NOT_5750, 12194 0x00000000, 0x007fff80 }, 12195 { BUFMGR_MB_POOL_SIZE, TG3_FL_NOT_5750, 12196 0x00000000, 0x007fffff }, 12197 { BUFMGR_MB_RDMA_LOW_WATER, 0x0000, 12198 0x00000000, 0x0000003f }, 12199 { BUFMGR_MB_MACRX_LOW_WATER, 0x0000, 12200 0x00000000, 0x000001ff }, 12201 { BUFMGR_MB_HIGH_WATER, 0x0000, 12202 0x00000000, 0x000001ff }, 12203 { BUFMGR_DMA_DESC_POOL_ADDR, TG3_FL_NOT_5705, 12204 0xffffffff, 0x00000000 }, 12205 { BUFMGR_DMA_DESC_POOL_SIZE, TG3_FL_NOT_5705, 12206 0xffffffff, 0x00000000 }, 12207 12208 /* Mailbox Registers */ 12209 { GRCMBOX_RCVSTD_PROD_IDX+4, 0x0000, 12210 0x00000000, 0x000001ff }, 12211 { GRCMBOX_RCVJUMBO_PROD_IDX+4, TG3_FL_NOT_5705, 12212 0x00000000, 0x000001ff }, 12213 { GRCMBOX_RCVRET_CON_IDX_0+4, 0x0000, 12214 0x00000000, 0x000007ff }, 12215 { GRCMBOX_SNDHOST_PROD_IDX_0+4, 0x0000, 12216 0x00000000, 0x000001ff }, 12217 12218 { 0xffff, 0x0000, 0x00000000, 0x00000000 }, 12219 }; 12220 12221 is_5705 = is_5750 = 0; 12222 if (tg3_flag(tp, 5705_PLUS)) { 12223 is_5705 = 1; 12224 if (tg3_flag(tp, 5750_PLUS)) 12225 is_5750 = 1; 12226 } 12227 12228 for (i = 0; reg_tbl[i].offset != 0xffff; i++) { 12229 if (is_5705 && (reg_tbl[i].flags & TG3_FL_NOT_5705)) 12230 continue; 12231 12232 if (!is_5705 && (reg_tbl[i].flags & TG3_FL_5705)) 12233 continue; 12234 12235 if (tg3_flag(tp, IS_5788) && 12236 (reg_tbl[i].flags & TG3_FL_NOT_5788)) 12237 continue; 12238 12239 if (is_5750 && (reg_tbl[i].flags & TG3_FL_NOT_5750)) 12240 continue; 12241 12242 offset = (u32) reg_tbl[i].offset; 12243 read_mask = reg_tbl[i].read_mask; 12244 write_mask = reg_tbl[i].write_mask; 12245 12246 /* Save the original register content */ 12247 save_val = tr32(offset); 12248 12249 /* Determine the read-only value. */ 12250 read_val = save_val & read_mask; 12251 12252 /* Write zero to the register, then make sure the read-only bits 12253 * are not changed and the read/write bits are all zeros. 12254 */ 12255 tw32(offset, 0); 12256 12257 val = tr32(offset); 12258 12259 /* Test the read-only and read/write bits. */ 12260 if (((val & read_mask) != read_val) || (val & write_mask)) 12261 goto out; 12262 12263 /* Write ones to all the bits defined by RdMask and WrMask, then 12264 * make sure the read-only bits are not changed and the 12265 * read/write bits are all ones. 12266 */ 12267 tw32(offset, read_mask | write_mask); 12268 12269 val = tr32(offset); 12270 12271 /* Test the read-only bits. */ 12272 if ((val & read_mask) != read_val) 12273 goto out; 12274 12275 /* Test the read/write bits. */ 12276 if ((val & write_mask) != write_mask) 12277 goto out; 12278 12279 tw32(offset, save_val); 12280 } 12281 12282 return 0; 12283 12284 out: 12285 if (netif_msg_hw(tp)) 12286 netdev_err(tp->dev, 12287 "Register test failed at offset %x\n", offset); 12288 tw32(offset, save_val); 12289 return -EIO; 12290 } 12291 12292 static int tg3_do_mem_test(struct tg3 *tp, u32 offset, u32 len) 12293 { 12294 static const u32 test_pattern[] = { 0x00000000, 0xffffffff, 0xaa55a55a }; 12295 int i; 12296 u32 j; 12297 12298 for (i = 0; i < ARRAY_SIZE(test_pattern); i++) { 12299 for (j = 0; j < len; j += 4) { 12300 u32 val; 12301 12302 tg3_write_mem(tp, offset + j, test_pattern[i]); 12303 tg3_read_mem(tp, offset + j, &val); 12304 if (val != test_pattern[i]) 12305 return -EIO; 12306 } 12307 } 12308 return 0; 12309 } 12310 12311 static int tg3_test_memory(struct tg3 *tp) 12312 { 12313 static struct mem_entry { 12314 u32 offset; 12315 u32 len; 12316 } mem_tbl_570x[] = { 12317 { 0x00000000, 0x00b50}, 12318 { 0x00002000, 0x1c000}, 12319 { 0xffffffff, 0x00000} 12320 }, mem_tbl_5705[] = { 12321 { 0x00000100, 0x0000c}, 12322 { 0x00000200, 0x00008}, 12323 { 0x00004000, 0x00800}, 12324 { 0x00006000, 0x01000}, 12325 { 0x00008000, 0x02000}, 12326 { 0x00010000, 0x0e000}, 12327 { 0xffffffff, 0x00000} 12328 }, mem_tbl_5755[] = { 12329 { 0x00000200, 0x00008}, 12330 { 0x00004000, 0x00800}, 12331 { 0x00006000, 0x00800}, 12332 { 0x00008000, 0x02000}, 12333 { 0x00010000, 0x0c000}, 12334 { 0xffffffff, 0x00000} 12335 }, mem_tbl_5906[] = { 12336 { 0x00000200, 0x00008}, 12337 { 0x00004000, 0x00400}, 12338 { 0x00006000, 0x00400}, 12339 { 0x00008000, 0x01000}, 12340 { 0x00010000, 0x01000}, 12341 { 0xffffffff, 0x00000} 12342 }, mem_tbl_5717[] = { 12343 { 0x00000200, 0x00008}, 12344 { 0x00010000, 0x0a000}, 12345 { 0x00020000, 0x13c00}, 12346 { 0xffffffff, 0x00000} 12347 }, mem_tbl_57765[] = { 12348 { 0x00000200, 0x00008}, 12349 { 0x00004000, 0x00800}, 12350 { 0x00006000, 0x09800}, 12351 { 0x00010000, 0x0a000}, 12352 { 0xffffffff, 0x00000} 12353 }; 12354 struct mem_entry *mem_tbl; 12355 int err = 0; 12356 int i; 12357 12358 if (tg3_flag(tp, 5717_PLUS)) 12359 mem_tbl = mem_tbl_5717; 12360 else if (tg3_flag(tp, 57765_CLASS)) 12361 mem_tbl = mem_tbl_57765; 12362 else if (tg3_flag(tp, 5755_PLUS)) 12363 mem_tbl = mem_tbl_5755; 12364 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 12365 mem_tbl = mem_tbl_5906; 12366 else if (tg3_flag(tp, 5705_PLUS)) 12367 mem_tbl = mem_tbl_5705; 12368 else 12369 mem_tbl = mem_tbl_570x; 12370 12371 for (i = 0; mem_tbl[i].offset != 0xffffffff; i++) { 12372 err = tg3_do_mem_test(tp, mem_tbl[i].offset, mem_tbl[i].len); 12373 if (err) 12374 break; 12375 } 12376 12377 return err; 12378 } 12379 12380 #define TG3_TSO_MSS 500 12381 12382 #define TG3_TSO_IP_HDR_LEN 20 12383 #define TG3_TSO_TCP_HDR_LEN 20 12384 #define TG3_TSO_TCP_OPT_LEN 12 12385 12386 static const u8 tg3_tso_header[] = { 12387 0x08, 0x00, 12388 0x45, 0x00, 0x00, 0x00, 12389 0x00, 0x00, 0x40, 0x00, 12390 0x40, 0x06, 0x00, 0x00, 12391 0x0a, 0x00, 0x00, 0x01, 12392 0x0a, 0x00, 0x00, 0x02, 12393 0x0d, 0x00, 0xe0, 0x00, 12394 0x00, 0x00, 0x01, 0x00, 12395 0x00, 0x00, 0x02, 0x00, 12396 0x80, 0x10, 0x10, 0x00, 12397 0x14, 0x09, 0x00, 0x00, 12398 0x01, 0x01, 0x08, 0x0a, 12399 0x11, 0x11, 0x11, 0x11, 12400 0x11, 0x11, 0x11, 0x11, 12401 }; 12402 12403 static int tg3_run_loopback(struct tg3 *tp, u32 pktsz, bool tso_loopback) 12404 { 12405 u32 rx_start_idx, rx_idx, tx_idx, opaque_key; 12406 u32 base_flags = 0, mss = 0, desc_idx, coal_now, data_off, val; 12407 u32 budget; 12408 struct sk_buff *skb; 12409 u8 *tx_data, *rx_data; 12410 dma_addr_t map; 12411 int num_pkts, tx_len, rx_len, i, err; 12412 struct tg3_rx_buffer_desc *desc; 12413 struct tg3_napi *tnapi, *rnapi; 12414 struct tg3_rx_prodring_set *tpr = &tp->napi[0].prodring; 12415 12416 tnapi = &tp->napi[0]; 12417 rnapi = &tp->napi[0]; 12418 if (tp->irq_cnt > 1) { 12419 if (tg3_flag(tp, ENABLE_RSS)) 12420 rnapi = &tp->napi[1]; 12421 if (tg3_flag(tp, ENABLE_TSS)) 12422 tnapi = &tp->napi[1]; 12423 } 12424 coal_now = tnapi->coal_now | rnapi->coal_now; 12425 12426 err = -EIO; 12427 12428 tx_len = pktsz; 12429 skb = netdev_alloc_skb(tp->dev, tx_len); 12430 if (!skb) 12431 return -ENOMEM; 12432 12433 tx_data = skb_put(skb, tx_len); 12434 memcpy(tx_data, tp->dev->dev_addr, 6); 12435 memset(tx_data + 6, 0x0, 8); 12436 12437 tw32(MAC_RX_MTU_SIZE, tx_len + ETH_FCS_LEN); 12438 12439 if (tso_loopback) { 12440 struct iphdr *iph = (struct iphdr *)&tx_data[ETH_HLEN]; 12441 12442 u32 hdr_len = TG3_TSO_IP_HDR_LEN + TG3_TSO_TCP_HDR_LEN + 12443 TG3_TSO_TCP_OPT_LEN; 12444 12445 memcpy(tx_data + ETH_ALEN * 2, tg3_tso_header, 12446 sizeof(tg3_tso_header)); 12447 mss = TG3_TSO_MSS; 12448 12449 val = tx_len - ETH_ALEN * 2 - sizeof(tg3_tso_header); 12450 num_pkts = DIV_ROUND_UP(val, TG3_TSO_MSS); 12451 12452 /* Set the total length field in the IP header */ 12453 iph->tot_len = htons((u16)(mss + hdr_len)); 12454 12455 base_flags = (TXD_FLAG_CPU_PRE_DMA | 12456 TXD_FLAG_CPU_POST_DMA); 12457 12458 if (tg3_flag(tp, HW_TSO_1) || 12459 tg3_flag(tp, HW_TSO_2) || 12460 tg3_flag(tp, HW_TSO_3)) { 12461 struct tcphdr *th; 12462 val = ETH_HLEN + TG3_TSO_IP_HDR_LEN; 12463 th = (struct tcphdr *)&tx_data[val]; 12464 th->check = 0; 12465 } else 12466 base_flags |= TXD_FLAG_TCPUDP_CSUM; 12467 12468 if (tg3_flag(tp, HW_TSO_3)) { 12469 mss |= (hdr_len & 0xc) << 12; 12470 if (hdr_len & 0x10) 12471 base_flags |= 0x00000010; 12472 base_flags |= (hdr_len & 0x3e0) << 5; 12473 } else if (tg3_flag(tp, HW_TSO_2)) 12474 mss |= hdr_len << 9; 12475 else if (tg3_flag(tp, HW_TSO_1) || 12476 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 12477 mss |= (TG3_TSO_TCP_OPT_LEN << 9); 12478 } else { 12479 base_flags |= (TG3_TSO_TCP_OPT_LEN << 10); 12480 } 12481 12482 data_off = ETH_ALEN * 2 + sizeof(tg3_tso_header); 12483 } else { 12484 num_pkts = 1; 12485 data_off = ETH_HLEN; 12486 12487 if (tg3_flag(tp, USE_JUMBO_BDFLAG) && 12488 tx_len > VLAN_ETH_FRAME_LEN) 12489 base_flags |= TXD_FLAG_JMB_PKT; 12490 } 12491 12492 for (i = data_off; i < tx_len; i++) 12493 tx_data[i] = (u8) (i & 0xff); 12494 12495 map = pci_map_single(tp->pdev, skb->data, tx_len, PCI_DMA_TODEVICE); 12496 if (pci_dma_mapping_error(tp->pdev, map)) { 12497 dev_kfree_skb(skb); 12498 return -EIO; 12499 } 12500 12501 val = tnapi->tx_prod; 12502 tnapi->tx_buffers[val].skb = skb; 12503 dma_unmap_addr_set(&tnapi->tx_buffers[val], mapping, map); 12504 12505 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 12506 rnapi->coal_now); 12507 12508 udelay(10); 12509 12510 rx_start_idx = rnapi->hw_status->idx[0].rx_producer; 12511 12512 budget = tg3_tx_avail(tnapi); 12513 if (tg3_tx_frag_set(tnapi, &val, &budget, map, tx_len, 12514 base_flags | TXD_FLAG_END, mss, 0)) { 12515 tnapi->tx_buffers[val].skb = NULL; 12516 dev_kfree_skb(skb); 12517 return -EIO; 12518 } 12519 12520 tnapi->tx_prod++; 12521 12522 /* Sync BD data before updating mailbox */ 12523 wmb(); 12524 12525 tw32_tx_mbox(tnapi->prodmbox, tnapi->tx_prod); 12526 tr32_mailbox(tnapi->prodmbox); 12527 12528 udelay(10); 12529 12530 /* 350 usec to allow enough time on some 10/100 Mbps devices. */ 12531 for (i = 0; i < 35; i++) { 12532 tw32_f(HOSTCC_MODE, tp->coalesce_mode | HOSTCC_MODE_ENABLE | 12533 coal_now); 12534 12535 udelay(10); 12536 12537 tx_idx = tnapi->hw_status->idx[0].tx_consumer; 12538 rx_idx = rnapi->hw_status->idx[0].rx_producer; 12539 if ((tx_idx == tnapi->tx_prod) && 12540 (rx_idx == (rx_start_idx + num_pkts))) 12541 break; 12542 } 12543 12544 tg3_tx_skb_unmap(tnapi, tnapi->tx_prod - 1, -1); 12545 dev_kfree_skb(skb); 12546 12547 if (tx_idx != tnapi->tx_prod) 12548 goto out; 12549 12550 if (rx_idx != rx_start_idx + num_pkts) 12551 goto out; 12552 12553 val = data_off; 12554 while (rx_idx != rx_start_idx) { 12555 desc = &rnapi->rx_rcb[rx_start_idx++]; 12556 desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; 12557 opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; 12558 12559 if ((desc->err_vlan & RXD_ERR_MASK) != 0 && 12560 (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) 12561 goto out; 12562 12563 rx_len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) 12564 - ETH_FCS_LEN; 12565 12566 if (!tso_loopback) { 12567 if (rx_len != tx_len) 12568 goto out; 12569 12570 if (pktsz <= TG3_RX_STD_DMA_SZ - ETH_FCS_LEN) { 12571 if (opaque_key != RXD_OPAQUE_RING_STD) 12572 goto out; 12573 } else { 12574 if (opaque_key != RXD_OPAQUE_RING_JUMBO) 12575 goto out; 12576 } 12577 } else if ((desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && 12578 (desc->ip_tcp_csum & RXD_TCPCSUM_MASK) 12579 >> RXD_TCPCSUM_SHIFT != 0xffff) { 12580 goto out; 12581 } 12582 12583 if (opaque_key == RXD_OPAQUE_RING_STD) { 12584 rx_data = tpr->rx_std_buffers[desc_idx].data; 12585 map = dma_unmap_addr(&tpr->rx_std_buffers[desc_idx], 12586 mapping); 12587 } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { 12588 rx_data = tpr->rx_jmb_buffers[desc_idx].data; 12589 map = dma_unmap_addr(&tpr->rx_jmb_buffers[desc_idx], 12590 mapping); 12591 } else 12592 goto out; 12593 12594 pci_dma_sync_single_for_cpu(tp->pdev, map, rx_len, 12595 PCI_DMA_FROMDEVICE); 12596 12597 rx_data += TG3_RX_OFFSET(tp); 12598 for (i = data_off; i < rx_len; i++, val++) { 12599 if (*(rx_data + i) != (u8) (val & 0xff)) 12600 goto out; 12601 } 12602 } 12603 12604 err = 0; 12605 12606 /* tg3_free_rings will unmap and free the rx_data */ 12607 out: 12608 return err; 12609 } 12610 12611 #define TG3_STD_LOOPBACK_FAILED 1 12612 #define TG3_JMB_LOOPBACK_FAILED 2 12613 #define TG3_TSO_LOOPBACK_FAILED 4 12614 #define TG3_LOOPBACK_FAILED \ 12615 (TG3_STD_LOOPBACK_FAILED | \ 12616 TG3_JMB_LOOPBACK_FAILED | \ 12617 TG3_TSO_LOOPBACK_FAILED) 12618 12619 static int tg3_test_loopback(struct tg3 *tp, u64 *data, bool do_extlpbk) 12620 { 12621 int err = -EIO; 12622 u32 eee_cap; 12623 u32 jmb_pkt_sz = 9000; 12624 12625 if (tp->dma_limit) 12626 jmb_pkt_sz = tp->dma_limit - ETH_HLEN; 12627 12628 eee_cap = tp->phy_flags & TG3_PHYFLG_EEE_CAP; 12629 tp->phy_flags &= ~TG3_PHYFLG_EEE_CAP; 12630 12631 if (!netif_running(tp->dev)) { 12632 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 12633 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 12634 if (do_extlpbk) 12635 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 12636 goto done; 12637 } 12638 12639 err = tg3_reset_hw(tp, 1); 12640 if (err) { 12641 data[TG3_MAC_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 12642 data[TG3_PHY_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 12643 if (do_extlpbk) 12644 data[TG3_EXT_LOOPB_TEST] = TG3_LOOPBACK_FAILED; 12645 goto done; 12646 } 12647 12648 if (tg3_flag(tp, ENABLE_RSS)) { 12649 int i; 12650 12651 /* Reroute all rx packets to the 1st queue */ 12652 for (i = MAC_RSS_INDIR_TBL_0; 12653 i < MAC_RSS_INDIR_TBL_0 + TG3_RSS_INDIR_TBL_SIZE; i += 4) 12654 tw32(i, 0x0); 12655 } 12656 12657 /* HW errata - mac loopback fails in some cases on 5780. 12658 * Normal traffic and PHY loopback are not affected by 12659 * errata. Also, the MAC loopback test is deprecated for 12660 * all newer ASIC revisions. 12661 */ 12662 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 && 12663 !tg3_flag(tp, CPMU_PRESENT)) { 12664 tg3_mac_loopback(tp, true); 12665 12666 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 12667 data[TG3_MAC_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 12668 12669 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 12670 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 12671 data[TG3_MAC_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 12672 12673 tg3_mac_loopback(tp, false); 12674 } 12675 12676 if (!(tp->phy_flags & TG3_PHYFLG_PHY_SERDES) && 12677 !tg3_flag(tp, USE_PHYLIB)) { 12678 int i; 12679 12680 tg3_phy_lpbk_set(tp, 0, false); 12681 12682 /* Wait for link */ 12683 for (i = 0; i < 100; i++) { 12684 if (tr32(MAC_TX_STATUS) & TX_STATUS_LINK_UP) 12685 break; 12686 mdelay(1); 12687 } 12688 12689 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 12690 data[TG3_PHY_LOOPB_TEST] |= TG3_STD_LOOPBACK_FAILED; 12691 if (tg3_flag(tp, TSO_CAPABLE) && 12692 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 12693 data[TG3_PHY_LOOPB_TEST] |= TG3_TSO_LOOPBACK_FAILED; 12694 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 12695 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 12696 data[TG3_PHY_LOOPB_TEST] |= TG3_JMB_LOOPBACK_FAILED; 12697 12698 if (do_extlpbk) { 12699 tg3_phy_lpbk_set(tp, 0, true); 12700 12701 /* All link indications report up, but the hardware 12702 * isn't really ready for about 20 msec. Double it 12703 * to be sure. 12704 */ 12705 mdelay(40); 12706 12707 if (tg3_run_loopback(tp, ETH_FRAME_LEN, false)) 12708 data[TG3_EXT_LOOPB_TEST] |= 12709 TG3_STD_LOOPBACK_FAILED; 12710 if (tg3_flag(tp, TSO_CAPABLE) && 12711 tg3_run_loopback(tp, ETH_FRAME_LEN, true)) 12712 data[TG3_EXT_LOOPB_TEST] |= 12713 TG3_TSO_LOOPBACK_FAILED; 12714 if (tg3_flag(tp, JUMBO_RING_ENABLE) && 12715 tg3_run_loopback(tp, jmb_pkt_sz + ETH_HLEN, false)) 12716 data[TG3_EXT_LOOPB_TEST] |= 12717 TG3_JMB_LOOPBACK_FAILED; 12718 } 12719 12720 /* Re-enable gphy autopowerdown. */ 12721 if (tp->phy_flags & TG3_PHYFLG_ENABLE_APD) 12722 tg3_phy_toggle_apd(tp, true); 12723 } 12724 12725 err = (data[TG3_MAC_LOOPB_TEST] | data[TG3_PHY_LOOPB_TEST] | 12726 data[TG3_EXT_LOOPB_TEST]) ? -EIO : 0; 12727 12728 done: 12729 tp->phy_flags |= eee_cap; 12730 12731 return err; 12732 } 12733 12734 static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, 12735 u64 *data) 12736 { 12737 struct tg3 *tp = netdev_priv(dev); 12738 bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB; 12739 12740 if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && 12741 tg3_power_up(tp)) { 12742 etest->flags |= ETH_TEST_FL_FAILED; 12743 memset(data, 1, sizeof(u64) * TG3_NUM_TEST); 12744 return; 12745 } 12746 12747 memset(data, 0, sizeof(u64) * TG3_NUM_TEST); 12748 12749 if (tg3_test_nvram(tp) != 0) { 12750 etest->flags |= ETH_TEST_FL_FAILED; 12751 data[TG3_NVRAM_TEST] = 1; 12752 } 12753 if (!doextlpbk && tg3_test_link(tp)) { 12754 etest->flags |= ETH_TEST_FL_FAILED; 12755 data[TG3_LINK_TEST] = 1; 12756 } 12757 if (etest->flags & ETH_TEST_FL_OFFLINE) { 12758 int err, err2 = 0, irq_sync = 0; 12759 12760 if (netif_running(dev)) { 12761 tg3_phy_stop(tp); 12762 tg3_netif_stop(tp); 12763 irq_sync = 1; 12764 } 12765 12766 tg3_full_lock(tp, irq_sync); 12767 tg3_halt(tp, RESET_KIND_SUSPEND, 1); 12768 err = tg3_nvram_lock(tp); 12769 tg3_halt_cpu(tp, RX_CPU_BASE); 12770 if (!tg3_flag(tp, 5705_PLUS)) 12771 tg3_halt_cpu(tp, TX_CPU_BASE); 12772 if (!err) 12773 tg3_nvram_unlock(tp); 12774 12775 if (tp->phy_flags & TG3_PHYFLG_MII_SERDES) 12776 tg3_phy_reset(tp); 12777 12778 if (tg3_test_registers(tp) != 0) { 12779 etest->flags |= ETH_TEST_FL_FAILED; 12780 data[TG3_REGISTER_TEST] = 1; 12781 } 12782 12783 if (tg3_test_memory(tp) != 0) { 12784 etest->flags |= ETH_TEST_FL_FAILED; 12785 data[TG3_MEMORY_TEST] = 1; 12786 } 12787 12788 if (doextlpbk) 12789 etest->flags |= ETH_TEST_FL_EXTERNAL_LB_DONE; 12790 12791 if (tg3_test_loopback(tp, data, doextlpbk)) 12792 etest->flags |= ETH_TEST_FL_FAILED; 12793 12794 tg3_full_unlock(tp); 12795 12796 if (tg3_test_interrupt(tp) != 0) { 12797 etest->flags |= ETH_TEST_FL_FAILED; 12798 data[TG3_INTERRUPT_TEST] = 1; 12799 } 12800 12801 tg3_full_lock(tp, 0); 12802 12803 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 12804 if (netif_running(dev)) { 12805 tg3_flag_set(tp, INIT_COMPLETE); 12806 err2 = tg3_restart_hw(tp, 1); 12807 if (!err2) 12808 tg3_netif_start(tp); 12809 } 12810 12811 tg3_full_unlock(tp); 12812 12813 if (irq_sync && !err2) 12814 tg3_phy_start(tp); 12815 } 12816 if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) 12817 tg3_power_down(tp); 12818 12819 } 12820 12821 static int tg3_hwtstamp_ioctl(struct net_device *dev, 12822 struct ifreq *ifr, int cmd) 12823 { 12824 struct tg3 *tp = netdev_priv(dev); 12825 struct hwtstamp_config stmpconf; 12826 12827 if (!tg3_flag(tp, PTP_CAPABLE)) 12828 return -EINVAL; 12829 12830 if (copy_from_user(&stmpconf, ifr->ifr_data, sizeof(stmpconf))) 12831 return -EFAULT; 12832 12833 if (stmpconf.flags) 12834 return -EINVAL; 12835 12836 switch (stmpconf.tx_type) { 12837 case HWTSTAMP_TX_ON: 12838 tg3_flag_set(tp, TX_TSTAMP_EN); 12839 break; 12840 case HWTSTAMP_TX_OFF: 12841 tg3_flag_clear(tp, TX_TSTAMP_EN); 12842 break; 12843 default: 12844 return -ERANGE; 12845 } 12846 12847 switch (stmpconf.rx_filter) { 12848 case HWTSTAMP_FILTER_NONE: 12849 tp->rxptpctl = 0; 12850 break; 12851 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: 12852 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 12853 TG3_RX_PTP_CTL_ALL_V1_EVENTS; 12854 break; 12855 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: 12856 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 12857 TG3_RX_PTP_CTL_SYNC_EVNT; 12858 break; 12859 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: 12860 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V1_EN | 12861 TG3_RX_PTP_CTL_DELAY_REQ; 12862 break; 12863 case HWTSTAMP_FILTER_PTP_V2_EVENT: 12864 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 12865 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 12866 break; 12867 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: 12868 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 12869 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 12870 break; 12871 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT: 12872 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 12873 TG3_RX_PTP_CTL_ALL_V2_EVENTS; 12874 break; 12875 case HWTSTAMP_FILTER_PTP_V2_SYNC: 12876 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 12877 TG3_RX_PTP_CTL_SYNC_EVNT; 12878 break; 12879 case HWTSTAMP_FILTER_PTP_V2_L2_SYNC: 12880 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 12881 TG3_RX_PTP_CTL_SYNC_EVNT; 12882 break; 12883 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC: 12884 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 12885 TG3_RX_PTP_CTL_SYNC_EVNT; 12886 break; 12887 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: 12888 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_EN | 12889 TG3_RX_PTP_CTL_DELAY_REQ; 12890 break; 12891 case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ: 12892 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L2_EN | 12893 TG3_RX_PTP_CTL_DELAY_REQ; 12894 break; 12895 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ: 12896 tp->rxptpctl = TG3_RX_PTP_CTL_RX_PTP_V2_L4_EN | 12897 TG3_RX_PTP_CTL_DELAY_REQ; 12898 break; 12899 default: 12900 return -ERANGE; 12901 } 12902 12903 if (netif_running(dev) && tp->rxptpctl) 12904 tw32(TG3_RX_PTP_CTL, 12905 tp->rxptpctl | TG3_RX_PTP_CTL_HWTS_INTERLOCK); 12906 12907 return copy_to_user(ifr->ifr_data, &stmpconf, sizeof(stmpconf)) ? 12908 -EFAULT : 0; 12909 } 12910 12911 static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 12912 { 12913 struct mii_ioctl_data *data = if_mii(ifr); 12914 struct tg3 *tp = netdev_priv(dev); 12915 int err; 12916 12917 if (tg3_flag(tp, USE_PHYLIB)) { 12918 struct phy_device *phydev; 12919 if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) 12920 return -EAGAIN; 12921 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 12922 return phy_mii_ioctl(phydev, ifr, cmd); 12923 } 12924 12925 switch (cmd) { 12926 case SIOCGMIIPHY: 12927 data->phy_id = tp->phy_addr; 12928 12929 /* fallthru */ 12930 case SIOCGMIIREG: { 12931 u32 mii_regval; 12932 12933 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12934 break; /* We have no PHY */ 12935 12936 if (!netif_running(dev)) 12937 return -EAGAIN; 12938 12939 spin_lock_bh(&tp->lock); 12940 err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval); 12941 spin_unlock_bh(&tp->lock); 12942 12943 data->val_out = mii_regval; 12944 12945 return err; 12946 } 12947 12948 case SIOCSMIIREG: 12949 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 12950 break; /* We have no PHY */ 12951 12952 if (!netif_running(dev)) 12953 return -EAGAIN; 12954 12955 spin_lock_bh(&tp->lock); 12956 err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in); 12957 spin_unlock_bh(&tp->lock); 12958 12959 return err; 12960 12961 case SIOCSHWTSTAMP: 12962 return tg3_hwtstamp_ioctl(dev, ifr, cmd); 12963 12964 default: 12965 /* do nothing */ 12966 break; 12967 } 12968 return -EOPNOTSUPP; 12969 } 12970 12971 static int tg3_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 12972 { 12973 struct tg3 *tp = netdev_priv(dev); 12974 12975 memcpy(ec, &tp->coal, sizeof(*ec)); 12976 return 0; 12977 } 12978 12979 static int tg3_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec) 12980 { 12981 struct tg3 *tp = netdev_priv(dev); 12982 u32 max_rxcoal_tick_int = 0, max_txcoal_tick_int = 0; 12983 u32 max_stat_coal_ticks = 0, min_stat_coal_ticks = 0; 12984 12985 if (!tg3_flag(tp, 5705_PLUS)) { 12986 max_rxcoal_tick_int = MAX_RXCOAL_TICK_INT; 12987 max_txcoal_tick_int = MAX_TXCOAL_TICK_INT; 12988 max_stat_coal_ticks = MAX_STAT_COAL_TICKS; 12989 min_stat_coal_ticks = MIN_STAT_COAL_TICKS; 12990 } 12991 12992 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) || 12993 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) || 12994 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) || 12995 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) || 12996 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) || 12997 (ec->tx_coalesce_usecs_irq > max_txcoal_tick_int) || 12998 (ec->rx_max_coalesced_frames_irq > MAX_RXCOAL_MAXF_INT) || 12999 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) || 13000 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) || 13001 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks)) 13002 return -EINVAL; 13003 13004 /* No rx interrupts will be generated if both are zero */ 13005 if ((ec->rx_coalesce_usecs == 0) && 13006 (ec->rx_max_coalesced_frames == 0)) 13007 return -EINVAL; 13008 13009 /* No tx interrupts will be generated if both are zero */ 13010 if ((ec->tx_coalesce_usecs == 0) && 13011 (ec->tx_max_coalesced_frames == 0)) 13012 return -EINVAL; 13013 13014 /* Only copy relevant parameters, ignore all others. */ 13015 tp->coal.rx_coalesce_usecs = ec->rx_coalesce_usecs; 13016 tp->coal.tx_coalesce_usecs = ec->tx_coalesce_usecs; 13017 tp->coal.rx_max_coalesced_frames = ec->rx_max_coalesced_frames; 13018 tp->coal.tx_max_coalesced_frames = ec->tx_max_coalesced_frames; 13019 tp->coal.rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq; 13020 tp->coal.tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq; 13021 tp->coal.rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq; 13022 tp->coal.tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq; 13023 tp->coal.stats_block_coalesce_usecs = ec->stats_block_coalesce_usecs; 13024 13025 if (netif_running(dev)) { 13026 tg3_full_lock(tp, 0); 13027 __tg3_set_coalesce(tp, &tp->coal); 13028 tg3_full_unlock(tp); 13029 } 13030 return 0; 13031 } 13032 13033 static const struct ethtool_ops tg3_ethtool_ops = { 13034 .get_settings = tg3_get_settings, 13035 .set_settings = tg3_set_settings, 13036 .get_drvinfo = tg3_get_drvinfo, 13037 .get_regs_len = tg3_get_regs_len, 13038 .get_regs = tg3_get_regs, 13039 .get_wol = tg3_get_wol, 13040 .set_wol = tg3_set_wol, 13041 .get_msglevel = tg3_get_msglevel, 13042 .set_msglevel = tg3_set_msglevel, 13043 .nway_reset = tg3_nway_reset, 13044 .get_link = ethtool_op_get_link, 13045 .get_eeprom_len = tg3_get_eeprom_len, 13046 .get_eeprom = tg3_get_eeprom, 13047 .set_eeprom = tg3_set_eeprom, 13048 .get_ringparam = tg3_get_ringparam, 13049 .set_ringparam = tg3_set_ringparam, 13050 .get_pauseparam = tg3_get_pauseparam, 13051 .set_pauseparam = tg3_set_pauseparam, 13052 .self_test = tg3_self_test, 13053 .get_strings = tg3_get_strings, 13054 .set_phys_id = tg3_set_phys_id, 13055 .get_ethtool_stats = tg3_get_ethtool_stats, 13056 .get_coalesce = tg3_get_coalesce, 13057 .set_coalesce = tg3_set_coalesce, 13058 .get_sset_count = tg3_get_sset_count, 13059 .get_rxnfc = tg3_get_rxnfc, 13060 .get_rxfh_indir_size = tg3_get_rxfh_indir_size, 13061 .get_rxfh_indir = tg3_get_rxfh_indir, 13062 .set_rxfh_indir = tg3_set_rxfh_indir, 13063 .get_channels = tg3_get_channels, 13064 .set_channels = tg3_set_channels, 13065 .get_ts_info = tg3_get_ts_info, 13066 }; 13067 13068 static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, 13069 struct rtnl_link_stats64 *stats) 13070 { 13071 struct tg3 *tp = netdev_priv(dev); 13072 13073 spin_lock_bh(&tp->lock); 13074 if (!tp->hw_stats) { 13075 spin_unlock_bh(&tp->lock); 13076 return &tp->net_stats_prev; 13077 } 13078 13079 tg3_get_nstats(tp, stats); 13080 spin_unlock_bh(&tp->lock); 13081 13082 return stats; 13083 } 13084 13085 static void tg3_set_rx_mode(struct net_device *dev) 13086 { 13087 struct tg3 *tp = netdev_priv(dev); 13088 13089 if (!netif_running(dev)) 13090 return; 13091 13092 tg3_full_lock(tp, 0); 13093 __tg3_set_rx_mode(dev); 13094 tg3_full_unlock(tp); 13095 } 13096 13097 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp, 13098 int new_mtu) 13099 { 13100 dev->mtu = new_mtu; 13101 13102 if (new_mtu > ETH_DATA_LEN) { 13103 if (tg3_flag(tp, 5780_CLASS)) { 13104 netdev_update_features(dev); 13105 tg3_flag_clear(tp, TSO_CAPABLE); 13106 } else { 13107 tg3_flag_set(tp, JUMBO_RING_ENABLE); 13108 } 13109 } else { 13110 if (tg3_flag(tp, 5780_CLASS)) { 13111 tg3_flag_set(tp, TSO_CAPABLE); 13112 netdev_update_features(dev); 13113 } 13114 tg3_flag_clear(tp, JUMBO_RING_ENABLE); 13115 } 13116 } 13117 13118 static int tg3_change_mtu(struct net_device *dev, int new_mtu) 13119 { 13120 struct tg3 *tp = netdev_priv(dev); 13121 int err, reset_phy = 0; 13122 13123 if (new_mtu < TG3_MIN_MTU || new_mtu > TG3_MAX_MTU(tp)) 13124 return -EINVAL; 13125 13126 if (!netif_running(dev)) { 13127 /* We'll just catch it later when the 13128 * device is up'd. 13129 */ 13130 tg3_set_mtu(dev, tp, new_mtu); 13131 return 0; 13132 } 13133 13134 tg3_phy_stop(tp); 13135 13136 tg3_netif_stop(tp); 13137 13138 tg3_full_lock(tp, 1); 13139 13140 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 13141 13142 tg3_set_mtu(dev, tp, new_mtu); 13143 13144 /* Reset PHY, otherwise the read DMA engine will be in a mode that 13145 * breaks all requests to 256 bytes. 13146 */ 13147 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) 13148 reset_phy = 1; 13149 13150 err = tg3_restart_hw(tp, reset_phy); 13151 13152 if (!err) 13153 tg3_netif_start(tp); 13154 13155 tg3_full_unlock(tp); 13156 13157 if (!err) 13158 tg3_phy_start(tp); 13159 13160 return err; 13161 } 13162 13163 static const struct net_device_ops tg3_netdev_ops = { 13164 .ndo_open = tg3_open, 13165 .ndo_stop = tg3_close, 13166 .ndo_start_xmit = tg3_start_xmit, 13167 .ndo_get_stats64 = tg3_get_stats64, 13168 .ndo_validate_addr = eth_validate_addr, 13169 .ndo_set_rx_mode = tg3_set_rx_mode, 13170 .ndo_set_mac_address = tg3_set_mac_addr, 13171 .ndo_do_ioctl = tg3_ioctl, 13172 .ndo_tx_timeout = tg3_tx_timeout, 13173 .ndo_change_mtu = tg3_change_mtu, 13174 .ndo_fix_features = tg3_fix_features, 13175 .ndo_set_features = tg3_set_features, 13176 #ifdef CONFIG_NET_POLL_CONTROLLER 13177 .ndo_poll_controller = tg3_poll_controller, 13178 #endif 13179 }; 13180 13181 static void tg3_get_eeprom_size(struct tg3 *tp) 13182 { 13183 u32 cursize, val, magic; 13184 13185 tp->nvram_size = EEPROM_CHIP_SIZE; 13186 13187 if (tg3_nvram_read(tp, 0, &magic) != 0) 13188 return; 13189 13190 if ((magic != TG3_EEPROM_MAGIC) && 13191 ((magic & TG3_EEPROM_MAGIC_FW_MSK) != TG3_EEPROM_MAGIC_FW) && 13192 ((magic & TG3_EEPROM_MAGIC_HW_MSK) != TG3_EEPROM_MAGIC_HW)) 13193 return; 13194 13195 /* 13196 * Size the chip by reading offsets at increasing powers of two. 13197 * When we encounter our validation signature, we know the addressing 13198 * has wrapped around, and thus have our chip size. 13199 */ 13200 cursize = 0x10; 13201 13202 while (cursize < tp->nvram_size) { 13203 if (tg3_nvram_read(tp, cursize, &val) != 0) 13204 return; 13205 13206 if (val == magic) 13207 break; 13208 13209 cursize <<= 1; 13210 } 13211 13212 tp->nvram_size = cursize; 13213 } 13214 13215 static void tg3_get_nvram_size(struct tg3 *tp) 13216 { 13217 u32 val; 13218 13219 if (tg3_flag(tp, NO_NVRAM) || tg3_nvram_read(tp, 0, &val) != 0) 13220 return; 13221 13222 /* Selfboot format */ 13223 if (val != TG3_EEPROM_MAGIC) { 13224 tg3_get_eeprom_size(tp); 13225 return; 13226 } 13227 13228 if (tg3_nvram_read(tp, 0xf0, &val) == 0) { 13229 if (val != 0) { 13230 /* This is confusing. We want to operate on the 13231 * 16-bit value at offset 0xf2. The tg3_nvram_read() 13232 * call will read from NVRAM and byteswap the data 13233 * according to the byteswapping settings for all 13234 * other register accesses. This ensures the data we 13235 * want will always reside in the lower 16-bits. 13236 * However, the data in NVRAM is in LE format, which 13237 * means the data from the NVRAM read will always be 13238 * opposite the endianness of the CPU. The 16-bit 13239 * byteswap then brings the data to CPU endianness. 13240 */ 13241 tp->nvram_size = swab16((u16)(val & 0x0000ffff)) * 1024; 13242 return; 13243 } 13244 } 13245 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 13246 } 13247 13248 static void tg3_get_nvram_info(struct tg3 *tp) 13249 { 13250 u32 nvcfg1; 13251 13252 nvcfg1 = tr32(NVRAM_CFG1); 13253 if (nvcfg1 & NVRAM_CFG1_FLASHIF_ENAB) { 13254 tg3_flag_set(tp, FLASH); 13255 } else { 13256 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 13257 tw32(NVRAM_CFG1, nvcfg1); 13258 } 13259 13260 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 13261 tg3_flag(tp, 5780_CLASS)) { 13262 switch (nvcfg1 & NVRAM_CFG1_VENDOR_MASK) { 13263 case FLASH_VENDOR_ATMEL_FLASH_BUFFERED: 13264 tp->nvram_jedecnum = JEDEC_ATMEL; 13265 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 13266 tg3_flag_set(tp, NVRAM_BUFFERED); 13267 break; 13268 case FLASH_VENDOR_ATMEL_FLASH_UNBUFFERED: 13269 tp->nvram_jedecnum = JEDEC_ATMEL; 13270 tp->nvram_pagesize = ATMEL_AT25F512_PAGE_SIZE; 13271 break; 13272 case FLASH_VENDOR_ATMEL_EEPROM: 13273 tp->nvram_jedecnum = JEDEC_ATMEL; 13274 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 13275 tg3_flag_set(tp, NVRAM_BUFFERED); 13276 break; 13277 case FLASH_VENDOR_ST: 13278 tp->nvram_jedecnum = JEDEC_ST; 13279 tp->nvram_pagesize = ST_M45PEX0_PAGE_SIZE; 13280 tg3_flag_set(tp, NVRAM_BUFFERED); 13281 break; 13282 case FLASH_VENDOR_SAIFUN: 13283 tp->nvram_jedecnum = JEDEC_SAIFUN; 13284 tp->nvram_pagesize = SAIFUN_SA25F0XX_PAGE_SIZE; 13285 break; 13286 case FLASH_VENDOR_SST_SMALL: 13287 case FLASH_VENDOR_SST_LARGE: 13288 tp->nvram_jedecnum = JEDEC_SST; 13289 tp->nvram_pagesize = SST_25VF0X0_PAGE_SIZE; 13290 break; 13291 } 13292 } else { 13293 tp->nvram_jedecnum = JEDEC_ATMEL; 13294 tp->nvram_pagesize = ATMEL_AT45DB0X1B_PAGE_SIZE; 13295 tg3_flag_set(tp, NVRAM_BUFFERED); 13296 } 13297 } 13298 13299 static void tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) 13300 { 13301 switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { 13302 case FLASH_5752PAGE_SIZE_256: 13303 tp->nvram_pagesize = 256; 13304 break; 13305 case FLASH_5752PAGE_SIZE_512: 13306 tp->nvram_pagesize = 512; 13307 break; 13308 case FLASH_5752PAGE_SIZE_1K: 13309 tp->nvram_pagesize = 1024; 13310 break; 13311 case FLASH_5752PAGE_SIZE_2K: 13312 tp->nvram_pagesize = 2048; 13313 break; 13314 case FLASH_5752PAGE_SIZE_4K: 13315 tp->nvram_pagesize = 4096; 13316 break; 13317 case FLASH_5752PAGE_SIZE_264: 13318 tp->nvram_pagesize = 264; 13319 break; 13320 case FLASH_5752PAGE_SIZE_528: 13321 tp->nvram_pagesize = 528; 13322 break; 13323 } 13324 } 13325 13326 static void tg3_get_5752_nvram_info(struct tg3 *tp) 13327 { 13328 u32 nvcfg1; 13329 13330 nvcfg1 = tr32(NVRAM_CFG1); 13331 13332 /* NVRAM protection for TPM */ 13333 if (nvcfg1 & (1 << 27)) 13334 tg3_flag_set(tp, PROTECTED_NVRAM); 13335 13336 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13337 case FLASH_5752VENDOR_ATMEL_EEPROM_64KHZ: 13338 case FLASH_5752VENDOR_ATMEL_EEPROM_376KHZ: 13339 tp->nvram_jedecnum = JEDEC_ATMEL; 13340 tg3_flag_set(tp, NVRAM_BUFFERED); 13341 break; 13342 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 13343 tp->nvram_jedecnum = JEDEC_ATMEL; 13344 tg3_flag_set(tp, NVRAM_BUFFERED); 13345 tg3_flag_set(tp, FLASH); 13346 break; 13347 case FLASH_5752VENDOR_ST_M45PE10: 13348 case FLASH_5752VENDOR_ST_M45PE20: 13349 case FLASH_5752VENDOR_ST_M45PE40: 13350 tp->nvram_jedecnum = JEDEC_ST; 13351 tg3_flag_set(tp, NVRAM_BUFFERED); 13352 tg3_flag_set(tp, FLASH); 13353 break; 13354 } 13355 13356 if (tg3_flag(tp, FLASH)) { 13357 tg3_nvram_get_pagesize(tp, nvcfg1); 13358 } else { 13359 /* For eeprom, set pagesize to maximum eeprom size */ 13360 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 13361 13362 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 13363 tw32(NVRAM_CFG1, nvcfg1); 13364 } 13365 } 13366 13367 static void tg3_get_5755_nvram_info(struct tg3 *tp) 13368 { 13369 u32 nvcfg1, protect = 0; 13370 13371 nvcfg1 = tr32(NVRAM_CFG1); 13372 13373 /* NVRAM protection for TPM */ 13374 if (nvcfg1 & (1 << 27)) { 13375 tg3_flag_set(tp, PROTECTED_NVRAM); 13376 protect = 1; 13377 } 13378 13379 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 13380 switch (nvcfg1) { 13381 case FLASH_5755VENDOR_ATMEL_FLASH_1: 13382 case FLASH_5755VENDOR_ATMEL_FLASH_2: 13383 case FLASH_5755VENDOR_ATMEL_FLASH_3: 13384 case FLASH_5755VENDOR_ATMEL_FLASH_5: 13385 tp->nvram_jedecnum = JEDEC_ATMEL; 13386 tg3_flag_set(tp, NVRAM_BUFFERED); 13387 tg3_flag_set(tp, FLASH); 13388 tp->nvram_pagesize = 264; 13389 if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_1 || 13390 nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_5) 13391 tp->nvram_size = (protect ? 0x3e200 : 13392 TG3_NVRAM_SIZE_512KB); 13393 else if (nvcfg1 == FLASH_5755VENDOR_ATMEL_FLASH_2) 13394 tp->nvram_size = (protect ? 0x1f200 : 13395 TG3_NVRAM_SIZE_256KB); 13396 else 13397 tp->nvram_size = (protect ? 0x1f200 : 13398 TG3_NVRAM_SIZE_128KB); 13399 break; 13400 case FLASH_5752VENDOR_ST_M45PE10: 13401 case FLASH_5752VENDOR_ST_M45PE20: 13402 case FLASH_5752VENDOR_ST_M45PE40: 13403 tp->nvram_jedecnum = JEDEC_ST; 13404 tg3_flag_set(tp, NVRAM_BUFFERED); 13405 tg3_flag_set(tp, FLASH); 13406 tp->nvram_pagesize = 256; 13407 if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE10) 13408 tp->nvram_size = (protect ? 13409 TG3_NVRAM_SIZE_64KB : 13410 TG3_NVRAM_SIZE_128KB); 13411 else if (nvcfg1 == FLASH_5752VENDOR_ST_M45PE20) 13412 tp->nvram_size = (protect ? 13413 TG3_NVRAM_SIZE_64KB : 13414 TG3_NVRAM_SIZE_256KB); 13415 else 13416 tp->nvram_size = (protect ? 13417 TG3_NVRAM_SIZE_128KB : 13418 TG3_NVRAM_SIZE_512KB); 13419 break; 13420 } 13421 } 13422 13423 static void tg3_get_5787_nvram_info(struct tg3 *tp) 13424 { 13425 u32 nvcfg1; 13426 13427 nvcfg1 = tr32(NVRAM_CFG1); 13428 13429 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13430 case FLASH_5787VENDOR_ATMEL_EEPROM_64KHZ: 13431 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 13432 case FLASH_5787VENDOR_MICRO_EEPROM_64KHZ: 13433 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 13434 tp->nvram_jedecnum = JEDEC_ATMEL; 13435 tg3_flag_set(tp, NVRAM_BUFFERED); 13436 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 13437 13438 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 13439 tw32(NVRAM_CFG1, nvcfg1); 13440 break; 13441 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 13442 case FLASH_5755VENDOR_ATMEL_FLASH_1: 13443 case FLASH_5755VENDOR_ATMEL_FLASH_2: 13444 case FLASH_5755VENDOR_ATMEL_FLASH_3: 13445 tp->nvram_jedecnum = JEDEC_ATMEL; 13446 tg3_flag_set(tp, NVRAM_BUFFERED); 13447 tg3_flag_set(tp, FLASH); 13448 tp->nvram_pagesize = 264; 13449 break; 13450 case FLASH_5752VENDOR_ST_M45PE10: 13451 case FLASH_5752VENDOR_ST_M45PE20: 13452 case FLASH_5752VENDOR_ST_M45PE40: 13453 tp->nvram_jedecnum = JEDEC_ST; 13454 tg3_flag_set(tp, NVRAM_BUFFERED); 13455 tg3_flag_set(tp, FLASH); 13456 tp->nvram_pagesize = 256; 13457 break; 13458 } 13459 } 13460 13461 static void tg3_get_5761_nvram_info(struct tg3 *tp) 13462 { 13463 u32 nvcfg1, protect = 0; 13464 13465 nvcfg1 = tr32(NVRAM_CFG1); 13466 13467 /* NVRAM protection for TPM */ 13468 if (nvcfg1 & (1 << 27)) { 13469 tg3_flag_set(tp, PROTECTED_NVRAM); 13470 protect = 1; 13471 } 13472 13473 nvcfg1 &= NVRAM_CFG1_5752VENDOR_MASK; 13474 switch (nvcfg1) { 13475 case FLASH_5761VENDOR_ATMEL_ADB021D: 13476 case FLASH_5761VENDOR_ATMEL_ADB041D: 13477 case FLASH_5761VENDOR_ATMEL_ADB081D: 13478 case FLASH_5761VENDOR_ATMEL_ADB161D: 13479 case FLASH_5761VENDOR_ATMEL_MDB021D: 13480 case FLASH_5761VENDOR_ATMEL_MDB041D: 13481 case FLASH_5761VENDOR_ATMEL_MDB081D: 13482 case FLASH_5761VENDOR_ATMEL_MDB161D: 13483 tp->nvram_jedecnum = JEDEC_ATMEL; 13484 tg3_flag_set(tp, NVRAM_BUFFERED); 13485 tg3_flag_set(tp, FLASH); 13486 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 13487 tp->nvram_pagesize = 256; 13488 break; 13489 case FLASH_5761VENDOR_ST_A_M45PE20: 13490 case FLASH_5761VENDOR_ST_A_M45PE40: 13491 case FLASH_5761VENDOR_ST_A_M45PE80: 13492 case FLASH_5761VENDOR_ST_A_M45PE16: 13493 case FLASH_5761VENDOR_ST_M_M45PE20: 13494 case FLASH_5761VENDOR_ST_M_M45PE40: 13495 case FLASH_5761VENDOR_ST_M_M45PE80: 13496 case FLASH_5761VENDOR_ST_M_M45PE16: 13497 tp->nvram_jedecnum = JEDEC_ST; 13498 tg3_flag_set(tp, NVRAM_BUFFERED); 13499 tg3_flag_set(tp, FLASH); 13500 tp->nvram_pagesize = 256; 13501 break; 13502 } 13503 13504 if (protect) { 13505 tp->nvram_size = tr32(NVRAM_ADDR_LOCKOUT); 13506 } else { 13507 switch (nvcfg1) { 13508 case FLASH_5761VENDOR_ATMEL_ADB161D: 13509 case FLASH_5761VENDOR_ATMEL_MDB161D: 13510 case FLASH_5761VENDOR_ST_A_M45PE16: 13511 case FLASH_5761VENDOR_ST_M_M45PE16: 13512 tp->nvram_size = TG3_NVRAM_SIZE_2MB; 13513 break; 13514 case FLASH_5761VENDOR_ATMEL_ADB081D: 13515 case FLASH_5761VENDOR_ATMEL_MDB081D: 13516 case FLASH_5761VENDOR_ST_A_M45PE80: 13517 case FLASH_5761VENDOR_ST_M_M45PE80: 13518 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 13519 break; 13520 case FLASH_5761VENDOR_ATMEL_ADB041D: 13521 case FLASH_5761VENDOR_ATMEL_MDB041D: 13522 case FLASH_5761VENDOR_ST_A_M45PE40: 13523 case FLASH_5761VENDOR_ST_M_M45PE40: 13524 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 13525 break; 13526 case FLASH_5761VENDOR_ATMEL_ADB021D: 13527 case FLASH_5761VENDOR_ATMEL_MDB021D: 13528 case FLASH_5761VENDOR_ST_A_M45PE20: 13529 case FLASH_5761VENDOR_ST_M_M45PE20: 13530 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13531 break; 13532 } 13533 } 13534 } 13535 13536 static void tg3_get_5906_nvram_info(struct tg3 *tp) 13537 { 13538 tp->nvram_jedecnum = JEDEC_ATMEL; 13539 tg3_flag_set(tp, NVRAM_BUFFERED); 13540 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 13541 } 13542 13543 static void tg3_get_57780_nvram_info(struct tg3 *tp) 13544 { 13545 u32 nvcfg1; 13546 13547 nvcfg1 = tr32(NVRAM_CFG1); 13548 13549 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13550 case FLASH_5787VENDOR_ATMEL_EEPROM_376KHZ: 13551 case FLASH_5787VENDOR_MICRO_EEPROM_376KHZ: 13552 tp->nvram_jedecnum = JEDEC_ATMEL; 13553 tg3_flag_set(tp, NVRAM_BUFFERED); 13554 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 13555 13556 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 13557 tw32(NVRAM_CFG1, nvcfg1); 13558 return; 13559 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 13560 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 13561 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 13562 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 13563 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 13564 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 13565 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 13566 tp->nvram_jedecnum = JEDEC_ATMEL; 13567 tg3_flag_set(tp, NVRAM_BUFFERED); 13568 tg3_flag_set(tp, FLASH); 13569 13570 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13571 case FLASH_5752VENDOR_ATMEL_FLASH_BUFFERED: 13572 case FLASH_57780VENDOR_ATMEL_AT45DB011D: 13573 case FLASH_57780VENDOR_ATMEL_AT45DB011B: 13574 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13575 break; 13576 case FLASH_57780VENDOR_ATMEL_AT45DB021D: 13577 case FLASH_57780VENDOR_ATMEL_AT45DB021B: 13578 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13579 break; 13580 case FLASH_57780VENDOR_ATMEL_AT45DB041D: 13581 case FLASH_57780VENDOR_ATMEL_AT45DB041B: 13582 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 13583 break; 13584 } 13585 break; 13586 case FLASH_5752VENDOR_ST_M45PE10: 13587 case FLASH_5752VENDOR_ST_M45PE20: 13588 case FLASH_5752VENDOR_ST_M45PE40: 13589 tp->nvram_jedecnum = JEDEC_ST; 13590 tg3_flag_set(tp, NVRAM_BUFFERED); 13591 tg3_flag_set(tp, FLASH); 13592 13593 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13594 case FLASH_5752VENDOR_ST_M45PE10: 13595 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13596 break; 13597 case FLASH_5752VENDOR_ST_M45PE20: 13598 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13599 break; 13600 case FLASH_5752VENDOR_ST_M45PE40: 13601 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 13602 break; 13603 } 13604 break; 13605 default: 13606 tg3_flag_set(tp, NO_NVRAM); 13607 return; 13608 } 13609 13610 tg3_nvram_get_pagesize(tp, nvcfg1); 13611 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 13612 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 13613 } 13614 13615 13616 static void tg3_get_5717_nvram_info(struct tg3 *tp) 13617 { 13618 u32 nvcfg1; 13619 13620 nvcfg1 = tr32(NVRAM_CFG1); 13621 13622 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13623 case FLASH_5717VENDOR_ATMEL_EEPROM: 13624 case FLASH_5717VENDOR_MICRO_EEPROM: 13625 tp->nvram_jedecnum = JEDEC_ATMEL; 13626 tg3_flag_set(tp, NVRAM_BUFFERED); 13627 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 13628 13629 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 13630 tw32(NVRAM_CFG1, nvcfg1); 13631 return; 13632 case FLASH_5717VENDOR_ATMEL_MDB011D: 13633 case FLASH_5717VENDOR_ATMEL_ADB011B: 13634 case FLASH_5717VENDOR_ATMEL_ADB011D: 13635 case FLASH_5717VENDOR_ATMEL_MDB021D: 13636 case FLASH_5717VENDOR_ATMEL_ADB021B: 13637 case FLASH_5717VENDOR_ATMEL_ADB021D: 13638 case FLASH_5717VENDOR_ATMEL_45USPT: 13639 tp->nvram_jedecnum = JEDEC_ATMEL; 13640 tg3_flag_set(tp, NVRAM_BUFFERED); 13641 tg3_flag_set(tp, FLASH); 13642 13643 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13644 case FLASH_5717VENDOR_ATMEL_MDB021D: 13645 /* Detect size with tg3_nvram_get_size() */ 13646 break; 13647 case FLASH_5717VENDOR_ATMEL_ADB021B: 13648 case FLASH_5717VENDOR_ATMEL_ADB021D: 13649 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13650 break; 13651 default: 13652 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13653 break; 13654 } 13655 break; 13656 case FLASH_5717VENDOR_ST_M_M25PE10: 13657 case FLASH_5717VENDOR_ST_A_M25PE10: 13658 case FLASH_5717VENDOR_ST_M_M45PE10: 13659 case FLASH_5717VENDOR_ST_A_M45PE10: 13660 case FLASH_5717VENDOR_ST_M_M25PE20: 13661 case FLASH_5717VENDOR_ST_A_M25PE20: 13662 case FLASH_5717VENDOR_ST_M_M45PE20: 13663 case FLASH_5717VENDOR_ST_A_M45PE20: 13664 case FLASH_5717VENDOR_ST_25USPT: 13665 case FLASH_5717VENDOR_ST_45USPT: 13666 tp->nvram_jedecnum = JEDEC_ST; 13667 tg3_flag_set(tp, NVRAM_BUFFERED); 13668 tg3_flag_set(tp, FLASH); 13669 13670 switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { 13671 case FLASH_5717VENDOR_ST_M_M25PE20: 13672 case FLASH_5717VENDOR_ST_M_M45PE20: 13673 /* Detect size with tg3_nvram_get_size() */ 13674 break; 13675 case FLASH_5717VENDOR_ST_A_M25PE20: 13676 case FLASH_5717VENDOR_ST_A_M45PE20: 13677 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13678 break; 13679 default: 13680 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13681 break; 13682 } 13683 break; 13684 default: 13685 tg3_flag_set(tp, NO_NVRAM); 13686 return; 13687 } 13688 13689 tg3_nvram_get_pagesize(tp, nvcfg1); 13690 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 13691 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 13692 } 13693 13694 static void tg3_get_5720_nvram_info(struct tg3 *tp) 13695 { 13696 u32 nvcfg1, nvmpinstrp; 13697 13698 nvcfg1 = tr32(NVRAM_CFG1); 13699 nvmpinstrp = nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK; 13700 13701 switch (nvmpinstrp) { 13702 case FLASH_5720_EEPROM_HD: 13703 case FLASH_5720_EEPROM_LD: 13704 tp->nvram_jedecnum = JEDEC_ATMEL; 13705 tg3_flag_set(tp, NVRAM_BUFFERED); 13706 13707 nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; 13708 tw32(NVRAM_CFG1, nvcfg1); 13709 if (nvmpinstrp == FLASH_5720_EEPROM_HD) 13710 tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; 13711 else 13712 tp->nvram_pagesize = ATMEL_AT24C02_CHIP_SIZE; 13713 return; 13714 case FLASH_5720VENDOR_M_ATMEL_DB011D: 13715 case FLASH_5720VENDOR_A_ATMEL_DB011B: 13716 case FLASH_5720VENDOR_A_ATMEL_DB011D: 13717 case FLASH_5720VENDOR_M_ATMEL_DB021D: 13718 case FLASH_5720VENDOR_A_ATMEL_DB021B: 13719 case FLASH_5720VENDOR_A_ATMEL_DB021D: 13720 case FLASH_5720VENDOR_M_ATMEL_DB041D: 13721 case FLASH_5720VENDOR_A_ATMEL_DB041B: 13722 case FLASH_5720VENDOR_A_ATMEL_DB041D: 13723 case FLASH_5720VENDOR_M_ATMEL_DB081D: 13724 case FLASH_5720VENDOR_A_ATMEL_DB081D: 13725 case FLASH_5720VENDOR_ATMEL_45USPT: 13726 tp->nvram_jedecnum = JEDEC_ATMEL; 13727 tg3_flag_set(tp, NVRAM_BUFFERED); 13728 tg3_flag_set(tp, FLASH); 13729 13730 switch (nvmpinstrp) { 13731 case FLASH_5720VENDOR_M_ATMEL_DB021D: 13732 case FLASH_5720VENDOR_A_ATMEL_DB021B: 13733 case FLASH_5720VENDOR_A_ATMEL_DB021D: 13734 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13735 break; 13736 case FLASH_5720VENDOR_M_ATMEL_DB041D: 13737 case FLASH_5720VENDOR_A_ATMEL_DB041B: 13738 case FLASH_5720VENDOR_A_ATMEL_DB041D: 13739 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 13740 break; 13741 case FLASH_5720VENDOR_M_ATMEL_DB081D: 13742 case FLASH_5720VENDOR_A_ATMEL_DB081D: 13743 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 13744 break; 13745 default: 13746 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13747 break; 13748 } 13749 break; 13750 case FLASH_5720VENDOR_M_ST_M25PE10: 13751 case FLASH_5720VENDOR_M_ST_M45PE10: 13752 case FLASH_5720VENDOR_A_ST_M25PE10: 13753 case FLASH_5720VENDOR_A_ST_M45PE10: 13754 case FLASH_5720VENDOR_M_ST_M25PE20: 13755 case FLASH_5720VENDOR_M_ST_M45PE20: 13756 case FLASH_5720VENDOR_A_ST_M25PE20: 13757 case FLASH_5720VENDOR_A_ST_M45PE20: 13758 case FLASH_5720VENDOR_M_ST_M25PE40: 13759 case FLASH_5720VENDOR_M_ST_M45PE40: 13760 case FLASH_5720VENDOR_A_ST_M25PE40: 13761 case FLASH_5720VENDOR_A_ST_M45PE40: 13762 case FLASH_5720VENDOR_M_ST_M25PE80: 13763 case FLASH_5720VENDOR_M_ST_M45PE80: 13764 case FLASH_5720VENDOR_A_ST_M25PE80: 13765 case FLASH_5720VENDOR_A_ST_M45PE80: 13766 case FLASH_5720VENDOR_ST_25USPT: 13767 case FLASH_5720VENDOR_ST_45USPT: 13768 tp->nvram_jedecnum = JEDEC_ST; 13769 tg3_flag_set(tp, NVRAM_BUFFERED); 13770 tg3_flag_set(tp, FLASH); 13771 13772 switch (nvmpinstrp) { 13773 case FLASH_5720VENDOR_M_ST_M25PE20: 13774 case FLASH_5720VENDOR_M_ST_M45PE20: 13775 case FLASH_5720VENDOR_A_ST_M25PE20: 13776 case FLASH_5720VENDOR_A_ST_M45PE20: 13777 tp->nvram_size = TG3_NVRAM_SIZE_256KB; 13778 break; 13779 case FLASH_5720VENDOR_M_ST_M25PE40: 13780 case FLASH_5720VENDOR_M_ST_M45PE40: 13781 case FLASH_5720VENDOR_A_ST_M25PE40: 13782 case FLASH_5720VENDOR_A_ST_M45PE40: 13783 tp->nvram_size = TG3_NVRAM_SIZE_512KB; 13784 break; 13785 case FLASH_5720VENDOR_M_ST_M25PE80: 13786 case FLASH_5720VENDOR_M_ST_M45PE80: 13787 case FLASH_5720VENDOR_A_ST_M25PE80: 13788 case FLASH_5720VENDOR_A_ST_M45PE80: 13789 tp->nvram_size = TG3_NVRAM_SIZE_1MB; 13790 break; 13791 default: 13792 tp->nvram_size = TG3_NVRAM_SIZE_128KB; 13793 break; 13794 } 13795 break; 13796 default: 13797 tg3_flag_set(tp, NO_NVRAM); 13798 return; 13799 } 13800 13801 tg3_nvram_get_pagesize(tp, nvcfg1); 13802 if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) 13803 tg3_flag_set(tp, NO_NVRAM_ADDR_TRANS); 13804 } 13805 13806 /* Chips other than 5700/5701 use the NVRAM for fetching info. */ 13807 static void tg3_nvram_init(struct tg3 *tp) 13808 { 13809 tw32_f(GRC_EEPROM_ADDR, 13810 (EEPROM_ADDR_FSM_RESET | 13811 (EEPROM_DEFAULT_CLOCK_PERIOD << 13812 EEPROM_ADDR_CLKPERD_SHIFT))); 13813 13814 msleep(1); 13815 13816 /* Enable seeprom accesses. */ 13817 tw32_f(GRC_LOCAL_CTRL, 13818 tr32(GRC_LOCAL_CTRL) | GRC_LCLCTRL_AUTO_SEEPROM); 13819 udelay(100); 13820 13821 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 13822 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) { 13823 tg3_flag_set(tp, NVRAM); 13824 13825 if (tg3_nvram_lock(tp)) { 13826 netdev_warn(tp->dev, 13827 "Cannot get nvram lock, %s failed\n", 13828 __func__); 13829 return; 13830 } 13831 tg3_enable_nvram_access(tp); 13832 13833 tp->nvram_size = 0; 13834 13835 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 13836 tg3_get_5752_nvram_info(tp); 13837 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 13838 tg3_get_5755_nvram_info(tp); 13839 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 13840 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 13841 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 13842 tg3_get_5787_nvram_info(tp); 13843 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) 13844 tg3_get_5761_nvram_info(tp); 13845 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 13846 tg3_get_5906_nvram_info(tp); 13847 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 13848 tg3_flag(tp, 57765_CLASS)) 13849 tg3_get_57780_nvram_info(tp); 13850 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 13851 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 13852 tg3_get_5717_nvram_info(tp); 13853 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 13854 tg3_get_5720_nvram_info(tp); 13855 else 13856 tg3_get_nvram_info(tp); 13857 13858 if (tp->nvram_size == 0) 13859 tg3_get_nvram_size(tp); 13860 13861 tg3_disable_nvram_access(tp); 13862 tg3_nvram_unlock(tp); 13863 13864 } else { 13865 tg3_flag_clear(tp, NVRAM); 13866 tg3_flag_clear(tp, NVRAM_BUFFERED); 13867 13868 tg3_get_eeprom_size(tp); 13869 } 13870 } 13871 13872 struct subsys_tbl_ent { 13873 u16 subsys_vendor, subsys_devid; 13874 u32 phy_id; 13875 }; 13876 13877 static struct subsys_tbl_ent subsys_id_to_phy_id[] = { 13878 /* Broadcom boards. */ 13879 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13880 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A6, TG3_PHY_ID_BCM5401 }, 13881 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13882 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A5, TG3_PHY_ID_BCM5701 }, 13883 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13884 TG3PCI_SUBDEVICE_ID_BROADCOM_95700T6, TG3_PHY_ID_BCM8002 }, 13885 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13886 TG3PCI_SUBDEVICE_ID_BROADCOM_95700A9, 0 }, 13887 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13888 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T1, TG3_PHY_ID_BCM5701 }, 13889 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13890 TG3PCI_SUBDEVICE_ID_BROADCOM_95701T8, TG3_PHY_ID_BCM5701 }, 13891 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13892 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A7, 0 }, 13893 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13894 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A10, TG3_PHY_ID_BCM5701 }, 13895 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13896 TG3PCI_SUBDEVICE_ID_BROADCOM_95701A12, TG3_PHY_ID_BCM5701 }, 13897 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13898 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX1, TG3_PHY_ID_BCM5703 }, 13899 { TG3PCI_SUBVENDOR_ID_BROADCOM, 13900 TG3PCI_SUBDEVICE_ID_BROADCOM_95703AX2, TG3_PHY_ID_BCM5703 }, 13901 13902 /* 3com boards. */ 13903 { TG3PCI_SUBVENDOR_ID_3COM, 13904 TG3PCI_SUBDEVICE_ID_3COM_3C996T, TG3_PHY_ID_BCM5401 }, 13905 { TG3PCI_SUBVENDOR_ID_3COM, 13906 TG3PCI_SUBDEVICE_ID_3COM_3C996BT, TG3_PHY_ID_BCM5701 }, 13907 { TG3PCI_SUBVENDOR_ID_3COM, 13908 TG3PCI_SUBDEVICE_ID_3COM_3C996SX, 0 }, 13909 { TG3PCI_SUBVENDOR_ID_3COM, 13910 TG3PCI_SUBDEVICE_ID_3COM_3C1000T, TG3_PHY_ID_BCM5701 }, 13911 { TG3PCI_SUBVENDOR_ID_3COM, 13912 TG3PCI_SUBDEVICE_ID_3COM_3C940BR01, TG3_PHY_ID_BCM5701 }, 13913 13914 /* DELL boards. */ 13915 { TG3PCI_SUBVENDOR_ID_DELL, 13916 TG3PCI_SUBDEVICE_ID_DELL_VIPER, TG3_PHY_ID_BCM5401 }, 13917 { TG3PCI_SUBVENDOR_ID_DELL, 13918 TG3PCI_SUBDEVICE_ID_DELL_JAGUAR, TG3_PHY_ID_BCM5401 }, 13919 { TG3PCI_SUBVENDOR_ID_DELL, 13920 TG3PCI_SUBDEVICE_ID_DELL_MERLOT, TG3_PHY_ID_BCM5411 }, 13921 { TG3PCI_SUBVENDOR_ID_DELL, 13922 TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT, TG3_PHY_ID_BCM5411 }, 13923 13924 /* Compaq boards. */ 13925 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13926 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE, TG3_PHY_ID_BCM5701 }, 13927 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13928 TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2, TG3_PHY_ID_BCM5701 }, 13929 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13930 TG3PCI_SUBDEVICE_ID_COMPAQ_CHANGELING, 0 }, 13931 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13932 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780, TG3_PHY_ID_BCM5701 }, 13933 { TG3PCI_SUBVENDOR_ID_COMPAQ, 13934 TG3PCI_SUBDEVICE_ID_COMPAQ_NC7780_2, TG3_PHY_ID_BCM5701 }, 13935 13936 /* IBM boards. */ 13937 { TG3PCI_SUBVENDOR_ID_IBM, 13938 TG3PCI_SUBDEVICE_ID_IBM_5703SAX2, 0 } 13939 }; 13940 13941 static struct subsys_tbl_ent *tg3_lookup_by_subsys(struct tg3 *tp) 13942 { 13943 int i; 13944 13945 for (i = 0; i < ARRAY_SIZE(subsys_id_to_phy_id); i++) { 13946 if ((subsys_id_to_phy_id[i].subsys_vendor == 13947 tp->pdev->subsystem_vendor) && 13948 (subsys_id_to_phy_id[i].subsys_devid == 13949 tp->pdev->subsystem_device)) 13950 return &subsys_id_to_phy_id[i]; 13951 } 13952 return NULL; 13953 } 13954 13955 static void tg3_get_eeprom_hw_cfg(struct tg3 *tp) 13956 { 13957 u32 val; 13958 13959 tp->phy_id = TG3_PHY_ID_INVALID; 13960 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 13961 13962 /* Assume an onboard device and WOL capable by default. */ 13963 tg3_flag_set(tp, EEPROM_WRITE_PROT); 13964 tg3_flag_set(tp, WOL_CAP); 13965 13966 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 13967 if (!(tr32(PCIE_TRANSACTION_CFG) & PCIE_TRANS_CFG_LOM)) { 13968 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 13969 tg3_flag_set(tp, IS_NIC); 13970 } 13971 val = tr32(VCPU_CFGSHDW); 13972 if (val & VCPU_CFGSHDW_ASPM_DBNC) 13973 tg3_flag_set(tp, ASPM_WORKAROUND); 13974 if ((val & VCPU_CFGSHDW_WOL_ENABLE) && 13975 (val & VCPU_CFGSHDW_WOL_MAGPKT)) { 13976 tg3_flag_set(tp, WOL_ENABLE); 13977 device_set_wakeup_enable(&tp->pdev->dev, true); 13978 } 13979 goto done; 13980 } 13981 13982 tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); 13983 if (val == NIC_SRAM_DATA_SIG_MAGIC) { 13984 u32 nic_cfg, led_cfg; 13985 u32 nic_phy_id, ver, cfg2 = 0, cfg4 = 0, eeprom_phy_id; 13986 int eeprom_phy_serdes = 0; 13987 13988 tg3_read_mem(tp, NIC_SRAM_DATA_CFG, &nic_cfg); 13989 tp->nic_sram_data_cfg = nic_cfg; 13990 13991 tg3_read_mem(tp, NIC_SRAM_DATA_VER, &ver); 13992 ver >>= NIC_SRAM_DATA_VER_SHIFT; 13993 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 13994 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 13995 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5703 && 13996 (ver > 0) && (ver < 0x100)) 13997 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_2, &cfg2); 13998 13999 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) 14000 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_4, &cfg4); 14001 14002 if ((nic_cfg & NIC_SRAM_DATA_CFG_PHY_TYPE_MASK) == 14003 NIC_SRAM_DATA_CFG_PHY_TYPE_FIBER) 14004 eeprom_phy_serdes = 1; 14005 14006 tg3_read_mem(tp, NIC_SRAM_DATA_PHY_ID, &nic_phy_id); 14007 if (nic_phy_id != 0) { 14008 u32 id1 = nic_phy_id & NIC_SRAM_DATA_PHY_ID1_MASK; 14009 u32 id2 = nic_phy_id & NIC_SRAM_DATA_PHY_ID2_MASK; 14010 14011 eeprom_phy_id = (id1 >> 16) << 10; 14012 eeprom_phy_id |= (id2 & 0xfc00) << 16; 14013 eeprom_phy_id |= (id2 & 0x03ff) << 0; 14014 } else 14015 eeprom_phy_id = 0; 14016 14017 tp->phy_id = eeprom_phy_id; 14018 if (eeprom_phy_serdes) { 14019 if (!tg3_flag(tp, 5705_PLUS)) 14020 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 14021 else 14022 tp->phy_flags |= TG3_PHYFLG_MII_SERDES; 14023 } 14024 14025 if (tg3_flag(tp, 5750_PLUS)) 14026 led_cfg = cfg2 & (NIC_SRAM_DATA_CFG_LED_MODE_MASK | 14027 SHASTA_EXT_LED_MODE_MASK); 14028 else 14029 led_cfg = nic_cfg & NIC_SRAM_DATA_CFG_LED_MODE_MASK; 14030 14031 switch (led_cfg) { 14032 default: 14033 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_1: 14034 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 14035 break; 14036 14037 case NIC_SRAM_DATA_CFG_LED_MODE_PHY_2: 14038 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 14039 break; 14040 14041 case NIC_SRAM_DATA_CFG_LED_MODE_MAC: 14042 tp->led_ctrl = LED_CTRL_MODE_MAC; 14043 14044 /* Default to PHY_1_MODE if 0 (MAC_MODE) is 14045 * read on some older 5700/5701 bootcode. 14046 */ 14047 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 14048 ASIC_REV_5700 || 14049 GET_ASIC_REV(tp->pci_chip_rev_id) == 14050 ASIC_REV_5701) 14051 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 14052 14053 break; 14054 14055 case SHASTA_EXT_LED_SHARED: 14056 tp->led_ctrl = LED_CTRL_MODE_SHARED; 14057 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && 14058 tp->pci_chip_rev_id != CHIPREV_ID_5750_A1) 14059 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 14060 LED_CTRL_MODE_PHY_2); 14061 break; 14062 14063 case SHASTA_EXT_LED_MAC: 14064 tp->led_ctrl = LED_CTRL_MODE_SHASTA_MAC; 14065 break; 14066 14067 case SHASTA_EXT_LED_COMBO: 14068 tp->led_ctrl = LED_CTRL_MODE_COMBO; 14069 if (tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) 14070 tp->led_ctrl |= (LED_CTRL_MODE_PHY_1 | 14071 LED_CTRL_MODE_PHY_2); 14072 break; 14073 14074 } 14075 14076 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 14077 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) && 14078 tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL) 14079 tp->led_ctrl = LED_CTRL_MODE_PHY_2; 14080 14081 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX) 14082 tp->led_ctrl = LED_CTRL_MODE_PHY_1; 14083 14084 if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) { 14085 tg3_flag_set(tp, EEPROM_WRITE_PROT); 14086 if ((tp->pdev->subsystem_vendor == 14087 PCI_VENDOR_ID_ARIMA) && 14088 (tp->pdev->subsystem_device == 0x205a || 14089 tp->pdev->subsystem_device == 0x2063)) 14090 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 14091 } else { 14092 tg3_flag_clear(tp, EEPROM_WRITE_PROT); 14093 tg3_flag_set(tp, IS_NIC); 14094 } 14095 14096 if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { 14097 tg3_flag_set(tp, ENABLE_ASF); 14098 if (tg3_flag(tp, 5750_PLUS)) 14099 tg3_flag_set(tp, ASF_NEW_HANDSHAKE); 14100 } 14101 14102 if ((nic_cfg & NIC_SRAM_DATA_CFG_APE_ENABLE) && 14103 tg3_flag(tp, 5750_PLUS)) 14104 tg3_flag_set(tp, ENABLE_APE); 14105 14106 if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES && 14107 !(nic_cfg & NIC_SRAM_DATA_CFG_FIBER_WOL)) 14108 tg3_flag_clear(tp, WOL_CAP); 14109 14110 if (tg3_flag(tp, WOL_CAP) && 14111 (nic_cfg & NIC_SRAM_DATA_CFG_WOL_ENABLE)) { 14112 tg3_flag_set(tp, WOL_ENABLE); 14113 device_set_wakeup_enable(&tp->pdev->dev, true); 14114 } 14115 14116 if (cfg2 & (1 << 17)) 14117 tp->phy_flags |= TG3_PHYFLG_CAPACITIVE_COUPLING; 14118 14119 /* serdes signal pre-emphasis in register 0x590 set by */ 14120 /* bootcode if bit 18 is set */ 14121 if (cfg2 & (1 << 18)) 14122 tp->phy_flags |= TG3_PHYFLG_SERDES_PREEMPHASIS; 14123 14124 if ((tg3_flag(tp, 57765_PLUS) || 14125 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 14126 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX)) && 14127 (cfg2 & NIC_SRAM_DATA_CFG_2_APD_EN)) 14128 tp->phy_flags |= TG3_PHYFLG_ENABLE_APD; 14129 14130 if (tg3_flag(tp, PCI_EXPRESS) && 14131 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 14132 !tg3_flag(tp, 57765_PLUS)) { 14133 u32 cfg3; 14134 14135 tg3_read_mem(tp, NIC_SRAM_DATA_CFG_3, &cfg3); 14136 if (cfg3 & NIC_SRAM_ASPM_DEBOUNCE) 14137 tg3_flag_set(tp, ASPM_WORKAROUND); 14138 } 14139 14140 if (cfg4 & NIC_SRAM_RGMII_INBAND_DISABLE) 14141 tg3_flag_set(tp, RGMII_INBAND_DISABLE); 14142 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_RX_EN) 14143 tg3_flag_set(tp, RGMII_EXT_IBND_RX_EN); 14144 if (cfg4 & NIC_SRAM_RGMII_EXT_IBND_TX_EN) 14145 tg3_flag_set(tp, RGMII_EXT_IBND_TX_EN); 14146 } 14147 done: 14148 if (tg3_flag(tp, WOL_CAP)) 14149 device_set_wakeup_enable(&tp->pdev->dev, 14150 tg3_flag(tp, WOL_ENABLE)); 14151 else 14152 device_set_wakeup_capable(&tp->pdev->dev, false); 14153 } 14154 14155 static int tg3_issue_otp_command(struct tg3 *tp, u32 cmd) 14156 { 14157 int i; 14158 u32 val; 14159 14160 tw32(OTP_CTRL, cmd | OTP_CTRL_OTP_CMD_START); 14161 tw32(OTP_CTRL, cmd); 14162 14163 /* Wait for up to 1 ms for command to execute. */ 14164 for (i = 0; i < 100; i++) { 14165 val = tr32(OTP_STATUS); 14166 if (val & OTP_STATUS_CMD_DONE) 14167 break; 14168 udelay(10); 14169 } 14170 14171 return (val & OTP_STATUS_CMD_DONE) ? 0 : -EBUSY; 14172 } 14173 14174 /* Read the gphy configuration from the OTP region of the chip. The gphy 14175 * configuration is a 32-bit value that straddles the alignment boundary. 14176 * We do two 32-bit reads and then shift and merge the results. 14177 */ 14178 static u32 tg3_read_otp_phycfg(struct tg3 *tp) 14179 { 14180 u32 bhalf_otp, thalf_otp; 14181 14182 tw32(OTP_MODE, OTP_MODE_OTP_THRU_GRC); 14183 14184 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_INIT)) 14185 return 0; 14186 14187 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC1); 14188 14189 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 14190 return 0; 14191 14192 thalf_otp = tr32(OTP_READ_DATA); 14193 14194 tw32(OTP_ADDRESS, OTP_ADDRESS_MAGIC2); 14195 14196 if (tg3_issue_otp_command(tp, OTP_CTRL_OTP_CMD_READ)) 14197 return 0; 14198 14199 bhalf_otp = tr32(OTP_READ_DATA); 14200 14201 return ((thalf_otp & 0x0000ffff) << 16) | (bhalf_otp >> 16); 14202 } 14203 14204 static void tg3_phy_init_link_config(struct tg3 *tp) 14205 { 14206 u32 adv = ADVERTISED_Autoneg; 14207 14208 if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) 14209 adv |= ADVERTISED_1000baseT_Half | 14210 ADVERTISED_1000baseT_Full; 14211 14212 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 14213 adv |= ADVERTISED_100baseT_Half | 14214 ADVERTISED_100baseT_Full | 14215 ADVERTISED_10baseT_Half | 14216 ADVERTISED_10baseT_Full | 14217 ADVERTISED_TP; 14218 else 14219 adv |= ADVERTISED_FIBRE; 14220 14221 tp->link_config.advertising = adv; 14222 tp->link_config.speed = SPEED_UNKNOWN; 14223 tp->link_config.duplex = DUPLEX_UNKNOWN; 14224 tp->link_config.autoneg = AUTONEG_ENABLE; 14225 tp->link_config.active_speed = SPEED_UNKNOWN; 14226 tp->link_config.active_duplex = DUPLEX_UNKNOWN; 14227 14228 tp->old_link = -1; 14229 } 14230 14231 static int tg3_phy_probe(struct tg3 *tp) 14232 { 14233 u32 hw_phy_id_1, hw_phy_id_2; 14234 u32 hw_phy_id, hw_phy_id_masked; 14235 int err; 14236 14237 /* flow control autonegotiation is default behavior */ 14238 tg3_flag_set(tp, PAUSE_AUTONEG); 14239 tp->link_config.flowctrl = FLOW_CTRL_TX | FLOW_CTRL_RX; 14240 14241 if (tg3_flag(tp, ENABLE_APE)) { 14242 switch (tp->pci_fn) { 14243 case 0: 14244 tp->phy_ape_lock = TG3_APE_LOCK_PHY0; 14245 break; 14246 case 1: 14247 tp->phy_ape_lock = TG3_APE_LOCK_PHY1; 14248 break; 14249 case 2: 14250 tp->phy_ape_lock = TG3_APE_LOCK_PHY2; 14251 break; 14252 case 3: 14253 tp->phy_ape_lock = TG3_APE_LOCK_PHY3; 14254 break; 14255 } 14256 } 14257 14258 if (tg3_flag(tp, USE_PHYLIB)) 14259 return tg3_phy_init(tp); 14260 14261 /* Reading the PHY ID register can conflict with ASF 14262 * firmware access to the PHY hardware. 14263 */ 14264 err = 0; 14265 if (tg3_flag(tp, ENABLE_ASF) || tg3_flag(tp, ENABLE_APE)) { 14266 hw_phy_id = hw_phy_id_masked = TG3_PHY_ID_INVALID; 14267 } else { 14268 /* Now read the physical PHY_ID from the chip and verify 14269 * that it is sane. If it doesn't look good, we fall back 14270 * to either the hard-coded table based PHY_ID and failing 14271 * that the value found in the eeprom area. 14272 */ 14273 err |= tg3_readphy(tp, MII_PHYSID1, &hw_phy_id_1); 14274 err |= tg3_readphy(tp, MII_PHYSID2, &hw_phy_id_2); 14275 14276 hw_phy_id = (hw_phy_id_1 & 0xffff) << 10; 14277 hw_phy_id |= (hw_phy_id_2 & 0xfc00) << 16; 14278 hw_phy_id |= (hw_phy_id_2 & 0x03ff) << 0; 14279 14280 hw_phy_id_masked = hw_phy_id & TG3_PHY_ID_MASK; 14281 } 14282 14283 if (!err && TG3_KNOWN_PHY_ID(hw_phy_id_masked)) { 14284 tp->phy_id = hw_phy_id; 14285 if (hw_phy_id_masked == TG3_PHY_ID_BCM8002) 14286 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 14287 else 14288 tp->phy_flags &= ~TG3_PHYFLG_PHY_SERDES; 14289 } else { 14290 if (tp->phy_id != TG3_PHY_ID_INVALID) { 14291 /* Do nothing, phy ID already set up in 14292 * tg3_get_eeprom_hw_cfg(). 14293 */ 14294 } else { 14295 struct subsys_tbl_ent *p; 14296 14297 /* No eeprom signature? Try the hardcoded 14298 * subsys device table. 14299 */ 14300 p = tg3_lookup_by_subsys(tp); 14301 if (!p) 14302 return -ENODEV; 14303 14304 tp->phy_id = p->phy_id; 14305 if (!tp->phy_id || 14306 tp->phy_id == TG3_PHY_ID_BCM8002) 14307 tp->phy_flags |= TG3_PHYFLG_PHY_SERDES; 14308 } 14309 } 14310 14311 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 14312 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 14313 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720 || 14314 (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 && 14315 tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) || 14316 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 && 14317 tp->pci_chip_rev_id != CHIPREV_ID_57765_A0))) 14318 tp->phy_flags |= TG3_PHYFLG_EEE_CAP; 14319 14320 tg3_phy_init_link_config(tp); 14321 14322 if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES) && 14323 !tg3_flag(tp, ENABLE_APE) && 14324 !tg3_flag(tp, ENABLE_ASF)) { 14325 u32 bmsr, dummy; 14326 14327 tg3_readphy(tp, MII_BMSR, &bmsr); 14328 if (!tg3_readphy(tp, MII_BMSR, &bmsr) && 14329 (bmsr & BMSR_LSTATUS)) 14330 goto skip_phy_reset; 14331 14332 err = tg3_phy_reset(tp); 14333 if (err) 14334 return err; 14335 14336 tg3_phy_set_wirespeed(tp); 14337 14338 if (!tg3_phy_copper_an_config_ok(tp, &dummy)) { 14339 tg3_phy_autoneg_cfg(tp, tp->link_config.advertising, 14340 tp->link_config.flowctrl); 14341 14342 tg3_writephy(tp, MII_BMCR, 14343 BMCR_ANENABLE | BMCR_ANRESTART); 14344 } 14345 } 14346 14347 skip_phy_reset: 14348 if ((tp->phy_id & TG3_PHY_ID_MASK) == TG3_PHY_ID_BCM5401) { 14349 err = tg3_init_5401phy_dsp(tp); 14350 if (err) 14351 return err; 14352 14353 err = tg3_init_5401phy_dsp(tp); 14354 } 14355 14356 return err; 14357 } 14358 14359 static void tg3_read_vpd(struct tg3 *tp) 14360 { 14361 u8 *vpd_data; 14362 unsigned int block_end, rosize, len; 14363 u32 vpdlen; 14364 int j, i = 0; 14365 14366 vpd_data = (u8 *)tg3_vpd_readblock(tp, &vpdlen); 14367 if (!vpd_data) 14368 goto out_no_vpd; 14369 14370 i = pci_vpd_find_tag(vpd_data, 0, vpdlen, PCI_VPD_LRDT_RO_DATA); 14371 if (i < 0) 14372 goto out_not_found; 14373 14374 rosize = pci_vpd_lrdt_size(&vpd_data[i]); 14375 block_end = i + PCI_VPD_LRDT_TAG_SIZE + rosize; 14376 i += PCI_VPD_LRDT_TAG_SIZE; 14377 14378 if (block_end > vpdlen) 14379 goto out_not_found; 14380 14381 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 14382 PCI_VPD_RO_KEYWORD_MFR_ID); 14383 if (j > 0) { 14384 len = pci_vpd_info_field_size(&vpd_data[j]); 14385 14386 j += PCI_VPD_INFO_FLD_HDR_SIZE; 14387 if (j + len > block_end || len != 4 || 14388 memcmp(&vpd_data[j], "1028", 4)) 14389 goto partno; 14390 14391 j = pci_vpd_find_info_keyword(vpd_data, i, rosize, 14392 PCI_VPD_RO_KEYWORD_VENDOR0); 14393 if (j < 0) 14394 goto partno; 14395 14396 len = pci_vpd_info_field_size(&vpd_data[j]); 14397 14398 j += PCI_VPD_INFO_FLD_HDR_SIZE; 14399 if (j + len > block_end) 14400 goto partno; 14401 14402 memcpy(tp->fw_ver, &vpd_data[j], len); 14403 strncat(tp->fw_ver, " bc ", vpdlen - len - 1); 14404 } 14405 14406 partno: 14407 i = pci_vpd_find_info_keyword(vpd_data, i, rosize, 14408 PCI_VPD_RO_KEYWORD_PARTNO); 14409 if (i < 0) 14410 goto out_not_found; 14411 14412 len = pci_vpd_info_field_size(&vpd_data[i]); 14413 14414 i += PCI_VPD_INFO_FLD_HDR_SIZE; 14415 if (len > TG3_BPN_SIZE || 14416 (len + i) > vpdlen) 14417 goto out_not_found; 14418 14419 memcpy(tp->board_part_number, &vpd_data[i], len); 14420 14421 out_not_found: 14422 kfree(vpd_data); 14423 if (tp->board_part_number[0]) 14424 return; 14425 14426 out_no_vpd: 14427 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { 14428 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 14429 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C) 14430 strcpy(tp->board_part_number, "BCM5717"); 14431 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718) 14432 strcpy(tp->board_part_number, "BCM5718"); 14433 else 14434 goto nomatch; 14435 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) { 14436 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57780) 14437 strcpy(tp->board_part_number, "BCM57780"); 14438 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57760) 14439 strcpy(tp->board_part_number, "BCM57760"); 14440 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790) 14441 strcpy(tp->board_part_number, "BCM57790"); 14442 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57788) 14443 strcpy(tp->board_part_number, "BCM57788"); 14444 else 14445 goto nomatch; 14446 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) { 14447 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761) 14448 strcpy(tp->board_part_number, "BCM57761"); 14449 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765) 14450 strcpy(tp->board_part_number, "BCM57765"); 14451 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781) 14452 strcpy(tp->board_part_number, "BCM57781"); 14453 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785) 14454 strcpy(tp->board_part_number, "BCM57785"); 14455 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791) 14456 strcpy(tp->board_part_number, "BCM57791"); 14457 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795) 14458 strcpy(tp->board_part_number, "BCM57795"); 14459 else 14460 goto nomatch; 14461 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) { 14462 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762) 14463 strcpy(tp->board_part_number, "BCM57762"); 14464 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766) 14465 strcpy(tp->board_part_number, "BCM57766"); 14466 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782) 14467 strcpy(tp->board_part_number, "BCM57782"); 14468 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 14469 strcpy(tp->board_part_number, "BCM57786"); 14470 else 14471 goto nomatch; 14472 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 14473 strcpy(tp->board_part_number, "BCM95906"); 14474 } else { 14475 nomatch: 14476 strcpy(tp->board_part_number, "none"); 14477 } 14478 } 14479 14480 static int tg3_fw_img_is_valid(struct tg3 *tp, u32 offset) 14481 { 14482 u32 val; 14483 14484 if (tg3_nvram_read(tp, offset, &val) || 14485 (val & 0xfc000000) != 0x0c000000 || 14486 tg3_nvram_read(tp, offset + 4, &val) || 14487 val != 0) 14488 return 0; 14489 14490 return 1; 14491 } 14492 14493 static void tg3_read_bc_ver(struct tg3 *tp) 14494 { 14495 u32 val, offset, start, ver_offset; 14496 int i, dst_off; 14497 bool newver = false; 14498 14499 if (tg3_nvram_read(tp, 0xc, &offset) || 14500 tg3_nvram_read(tp, 0x4, &start)) 14501 return; 14502 14503 offset = tg3_nvram_logical_addr(tp, offset); 14504 14505 if (tg3_nvram_read(tp, offset, &val)) 14506 return; 14507 14508 if ((val & 0xfc000000) == 0x0c000000) { 14509 if (tg3_nvram_read(tp, offset + 4, &val)) 14510 return; 14511 14512 if (val == 0) 14513 newver = true; 14514 } 14515 14516 dst_off = strlen(tp->fw_ver); 14517 14518 if (newver) { 14519 if (TG3_VER_SIZE - dst_off < 16 || 14520 tg3_nvram_read(tp, offset + 8, &ver_offset)) 14521 return; 14522 14523 offset = offset + ver_offset - start; 14524 for (i = 0; i < 16; i += 4) { 14525 __be32 v; 14526 if (tg3_nvram_read_be32(tp, offset + i, &v)) 14527 return; 14528 14529 memcpy(tp->fw_ver + dst_off + i, &v, sizeof(v)); 14530 } 14531 } else { 14532 u32 major, minor; 14533 14534 if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset)) 14535 return; 14536 14537 major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >> 14538 TG3_NVM_BCVER_MAJSFT; 14539 minor = ver_offset & TG3_NVM_BCVER_MINMSK; 14540 snprintf(&tp->fw_ver[dst_off], TG3_VER_SIZE - dst_off, 14541 "v%d.%02d", major, minor); 14542 } 14543 } 14544 14545 static void tg3_read_hwsb_ver(struct tg3 *tp) 14546 { 14547 u32 val, major, minor; 14548 14549 /* Use native endian representation */ 14550 if (tg3_nvram_read(tp, TG3_NVM_HWSB_CFG1, &val)) 14551 return; 14552 14553 major = (val & TG3_NVM_HWSB_CFG1_MAJMSK) >> 14554 TG3_NVM_HWSB_CFG1_MAJSFT; 14555 minor = (val & TG3_NVM_HWSB_CFG1_MINMSK) >> 14556 TG3_NVM_HWSB_CFG1_MINSFT; 14557 14558 snprintf(&tp->fw_ver[0], 32, "sb v%d.%02d", major, minor); 14559 } 14560 14561 static void tg3_read_sb_ver(struct tg3 *tp, u32 val) 14562 { 14563 u32 offset, major, minor, build; 14564 14565 strncat(tp->fw_ver, "sb", TG3_VER_SIZE - strlen(tp->fw_ver) - 1); 14566 14567 if ((val & TG3_EEPROM_SB_FORMAT_MASK) != TG3_EEPROM_SB_FORMAT_1) 14568 return; 14569 14570 switch (val & TG3_EEPROM_SB_REVISION_MASK) { 14571 case TG3_EEPROM_SB_REVISION_0: 14572 offset = TG3_EEPROM_SB_F1R0_EDH_OFF; 14573 break; 14574 case TG3_EEPROM_SB_REVISION_2: 14575 offset = TG3_EEPROM_SB_F1R2_EDH_OFF; 14576 break; 14577 case TG3_EEPROM_SB_REVISION_3: 14578 offset = TG3_EEPROM_SB_F1R3_EDH_OFF; 14579 break; 14580 case TG3_EEPROM_SB_REVISION_4: 14581 offset = TG3_EEPROM_SB_F1R4_EDH_OFF; 14582 break; 14583 case TG3_EEPROM_SB_REVISION_5: 14584 offset = TG3_EEPROM_SB_F1R5_EDH_OFF; 14585 break; 14586 case TG3_EEPROM_SB_REVISION_6: 14587 offset = TG3_EEPROM_SB_F1R6_EDH_OFF; 14588 break; 14589 default: 14590 return; 14591 } 14592 14593 if (tg3_nvram_read(tp, offset, &val)) 14594 return; 14595 14596 build = (val & TG3_EEPROM_SB_EDH_BLD_MASK) >> 14597 TG3_EEPROM_SB_EDH_BLD_SHFT; 14598 major = (val & TG3_EEPROM_SB_EDH_MAJ_MASK) >> 14599 TG3_EEPROM_SB_EDH_MAJ_SHFT; 14600 minor = val & TG3_EEPROM_SB_EDH_MIN_MASK; 14601 14602 if (minor > 99 || build > 26) 14603 return; 14604 14605 offset = strlen(tp->fw_ver); 14606 snprintf(&tp->fw_ver[offset], TG3_VER_SIZE - offset, 14607 " v%d.%02d", major, minor); 14608 14609 if (build > 0) { 14610 offset = strlen(tp->fw_ver); 14611 if (offset < TG3_VER_SIZE - 1) 14612 tp->fw_ver[offset] = 'a' + build - 1; 14613 } 14614 } 14615 14616 static void tg3_read_mgmtfw_ver(struct tg3 *tp) 14617 { 14618 u32 val, offset, start; 14619 int i, vlen; 14620 14621 for (offset = TG3_NVM_DIR_START; 14622 offset < TG3_NVM_DIR_END; 14623 offset += TG3_NVM_DIRENT_SIZE) { 14624 if (tg3_nvram_read(tp, offset, &val)) 14625 return; 14626 14627 if ((val >> TG3_NVM_DIRTYPE_SHIFT) == TG3_NVM_DIRTYPE_ASFINI) 14628 break; 14629 } 14630 14631 if (offset == TG3_NVM_DIR_END) 14632 return; 14633 14634 if (!tg3_flag(tp, 5705_PLUS)) 14635 start = 0x08000000; 14636 else if (tg3_nvram_read(tp, offset - 4, &start)) 14637 return; 14638 14639 if (tg3_nvram_read(tp, offset + 4, &offset) || 14640 !tg3_fw_img_is_valid(tp, offset) || 14641 tg3_nvram_read(tp, offset + 8, &val)) 14642 return; 14643 14644 offset += val - start; 14645 14646 vlen = strlen(tp->fw_ver); 14647 14648 tp->fw_ver[vlen++] = ','; 14649 tp->fw_ver[vlen++] = ' '; 14650 14651 for (i = 0; i < 4; i++) { 14652 __be32 v; 14653 if (tg3_nvram_read_be32(tp, offset, &v)) 14654 return; 14655 14656 offset += sizeof(v); 14657 14658 if (vlen > TG3_VER_SIZE - sizeof(v)) { 14659 memcpy(&tp->fw_ver[vlen], &v, TG3_VER_SIZE - vlen); 14660 break; 14661 } 14662 14663 memcpy(&tp->fw_ver[vlen], &v, sizeof(v)); 14664 vlen += sizeof(v); 14665 } 14666 } 14667 14668 static void tg3_probe_ncsi(struct tg3 *tp) 14669 { 14670 u32 apedata; 14671 14672 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 14673 if (apedata != APE_SEG_SIG_MAGIC) 14674 return; 14675 14676 apedata = tg3_ape_read32(tp, TG3_APE_FW_STATUS); 14677 if (!(apedata & APE_FW_STATUS_READY)) 14678 return; 14679 14680 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) 14681 tg3_flag_set(tp, APE_HAS_NCSI); 14682 } 14683 14684 static void tg3_read_dash_ver(struct tg3 *tp) 14685 { 14686 int vlen; 14687 u32 apedata; 14688 char *fwtype; 14689 14690 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 14691 14692 if (tg3_flag(tp, APE_HAS_NCSI)) 14693 fwtype = "NCSI"; 14694 else 14695 fwtype = "DASH"; 14696 14697 vlen = strlen(tp->fw_ver); 14698 14699 snprintf(&tp->fw_ver[vlen], TG3_VER_SIZE - vlen, " %s v%d.%d.%d.%d", 14700 fwtype, 14701 (apedata & APE_FW_VERSION_MAJMSK) >> APE_FW_VERSION_MAJSFT, 14702 (apedata & APE_FW_VERSION_MINMSK) >> APE_FW_VERSION_MINSFT, 14703 (apedata & APE_FW_VERSION_REVMSK) >> APE_FW_VERSION_REVSFT, 14704 (apedata & APE_FW_VERSION_BLDMSK)); 14705 } 14706 14707 static void tg3_read_fw_ver(struct tg3 *tp) 14708 { 14709 u32 val; 14710 bool vpd_vers = false; 14711 14712 if (tp->fw_ver[0] != 0) 14713 vpd_vers = true; 14714 14715 if (tg3_flag(tp, NO_NVRAM)) { 14716 strcat(tp->fw_ver, "sb"); 14717 return; 14718 } 14719 14720 if (tg3_nvram_read(tp, 0, &val)) 14721 return; 14722 14723 if (val == TG3_EEPROM_MAGIC) 14724 tg3_read_bc_ver(tp); 14725 else if ((val & TG3_EEPROM_MAGIC_FW_MSK) == TG3_EEPROM_MAGIC_FW) 14726 tg3_read_sb_ver(tp, val); 14727 else if ((val & TG3_EEPROM_MAGIC_HW_MSK) == TG3_EEPROM_MAGIC_HW) 14728 tg3_read_hwsb_ver(tp); 14729 14730 if (tg3_flag(tp, ENABLE_ASF)) { 14731 if (tg3_flag(tp, ENABLE_APE)) { 14732 tg3_probe_ncsi(tp); 14733 if (!vpd_vers) 14734 tg3_read_dash_ver(tp); 14735 } else if (!vpd_vers) { 14736 tg3_read_mgmtfw_ver(tp); 14737 } 14738 } 14739 14740 tp->fw_ver[TG3_VER_SIZE - 1] = 0; 14741 } 14742 14743 static inline u32 tg3_rx_ret_ring_size(struct tg3 *tp) 14744 { 14745 if (tg3_flag(tp, LRG_PROD_RING_CAP)) 14746 return TG3_RX_RET_MAX_SIZE_5717; 14747 else if (tg3_flag(tp, JUMBO_CAPABLE) && !tg3_flag(tp, 5780_CLASS)) 14748 return TG3_RX_RET_MAX_SIZE_5700; 14749 else 14750 return TG3_RX_RET_MAX_SIZE_5705; 14751 } 14752 14753 static DEFINE_PCI_DEVICE_TABLE(tg3_write_reorder_chipsets) = { 14754 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_FE_GATE_700C) }, 14755 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE) }, 14756 { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8385_0) }, 14757 { }, 14758 }; 14759 14760 static struct pci_dev *tg3_find_peer(struct tg3 *tp) 14761 { 14762 struct pci_dev *peer; 14763 unsigned int func, devnr = tp->pdev->devfn & ~7; 14764 14765 for (func = 0; func < 8; func++) { 14766 peer = pci_get_slot(tp->pdev->bus, devnr | func); 14767 if (peer && peer != tp->pdev) 14768 break; 14769 pci_dev_put(peer); 14770 } 14771 /* 5704 can be configured in single-port mode, set peer to 14772 * tp->pdev in that case. 14773 */ 14774 if (!peer) { 14775 peer = tp->pdev; 14776 return peer; 14777 } 14778 14779 /* 14780 * We don't need to keep the refcount elevated; there's no way 14781 * to remove one half of this device without removing the other 14782 */ 14783 pci_dev_put(peer); 14784 14785 return peer; 14786 } 14787 14788 static void tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg) 14789 { 14790 tp->pci_chip_rev_id = misc_ctrl_reg >> MISC_HOST_CTRL_CHIPREV_SHIFT; 14791 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) { 14792 u32 reg; 14793 14794 /* All devices that use the alternate 14795 * ASIC REV location have a CPMU. 14796 */ 14797 tg3_flag_set(tp, CPMU_PRESENT); 14798 14799 if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 14800 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 14801 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 14802 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 14803 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) 14804 reg = TG3PCI_GEN2_PRODID_ASICREV; 14805 else if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_57781 || 14806 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57785 || 14807 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57761 || 14808 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57765 || 14809 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 || 14810 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 || 14811 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57762 || 14812 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57766 || 14813 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57782 || 14814 tp->pdev->device == TG3PCI_DEVICE_TIGON3_57786) 14815 reg = TG3PCI_GEN15_PRODID_ASICREV; 14816 else 14817 reg = TG3PCI_PRODID_ASICREV; 14818 14819 pci_read_config_dword(tp->pdev, reg, &tp->pci_chip_rev_id); 14820 } 14821 14822 /* Wrong chip ID in 5752 A0. This code can be removed later 14823 * as A0 is not in production. 14824 */ 14825 if (tp->pci_chip_rev_id == CHIPREV_ID_5752_A0_HW) 14826 tp->pci_chip_rev_id = CHIPREV_ID_5752_A0; 14827 14828 if (tp->pci_chip_rev_id == CHIPREV_ID_5717_C0) 14829 tp->pci_chip_rev_id = CHIPREV_ID_5720_A0; 14830 14831 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 14832 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 14833 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 14834 tg3_flag_set(tp, 5717_PLUS); 14835 14836 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765 || 14837 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57766) 14838 tg3_flag_set(tp, 57765_CLASS); 14839 14840 if (tg3_flag(tp, 57765_CLASS) || tg3_flag(tp, 5717_PLUS)) 14841 tg3_flag_set(tp, 57765_PLUS); 14842 14843 /* Intentionally exclude ASIC_REV_5906 */ 14844 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 14845 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 14846 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 14847 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 14848 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 14849 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 14850 tg3_flag(tp, 57765_PLUS)) 14851 tg3_flag_set(tp, 5755_PLUS); 14852 14853 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 || 14854 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) 14855 tg3_flag_set(tp, 5780_CLASS); 14856 14857 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 14858 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 14859 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906 || 14860 tg3_flag(tp, 5755_PLUS) || 14861 tg3_flag(tp, 5780_CLASS)) 14862 tg3_flag_set(tp, 5750_PLUS); 14863 14864 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || 14865 tg3_flag(tp, 5750_PLUS)) 14866 tg3_flag_set(tp, 5705_PLUS); 14867 } 14868 14869 static bool tg3_10_100_only_device(struct tg3 *tp, 14870 const struct pci_device_id *ent) 14871 { 14872 u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK; 14873 14874 if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 && 14875 (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) || 14876 (tp->phy_flags & TG3_PHYFLG_IS_FET)) 14877 return true; 14878 14879 if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) { 14880 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) { 14881 if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100) 14882 return true; 14883 } else { 14884 return true; 14885 } 14886 } 14887 14888 return false; 14889 } 14890 14891 static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) 14892 { 14893 u32 misc_ctrl_reg; 14894 u32 pci_state_reg, grc_misc_cfg; 14895 u32 val; 14896 u16 pci_cmd; 14897 int err; 14898 14899 /* Force memory write invalidate off. If we leave it on, 14900 * then on 5700_BX chips we have to enable a workaround. 14901 * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary 14902 * to match the cacheline size. The Broadcom driver have this 14903 * workaround but turns MWI off all the times so never uses 14904 * it. This seems to suggest that the workaround is insufficient. 14905 */ 14906 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 14907 pci_cmd &= ~PCI_COMMAND_INVALIDATE; 14908 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 14909 14910 /* Important! -- Make sure register accesses are byteswapped 14911 * correctly. Also, for those chips that require it, make 14912 * sure that indirect register accesses are enabled before 14913 * the first operation. 14914 */ 14915 pci_read_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 14916 &misc_ctrl_reg); 14917 tp->misc_host_ctrl |= (misc_ctrl_reg & 14918 MISC_HOST_CTRL_CHIPREV); 14919 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 14920 tp->misc_host_ctrl); 14921 14922 tg3_detect_asic_rev(tp, misc_ctrl_reg); 14923 14924 /* If we have 5702/03 A1 or A2 on certain ICH chipsets, 14925 * we need to disable memory and use config. cycles 14926 * only to access all registers. The 5702/03 chips 14927 * can mistakenly decode the special cycles from the 14928 * ICH chipsets as memory write cycles, causing corruption 14929 * of register and memory space. Only certain ICH bridges 14930 * will drive special cycles with non-zero data during the 14931 * address phase which can fall within the 5703's address 14932 * range. This is not an ICH bug as the PCI spec allows 14933 * non-zero address during special cycles. However, only 14934 * these ICH bridges are known to drive non-zero addresses 14935 * during special cycles. 14936 * 14937 * Since special cycles do not cross PCI bridges, we only 14938 * enable this workaround if the 5703 is on the secondary 14939 * bus of these ICH bridges. 14940 */ 14941 if ((tp->pci_chip_rev_id == CHIPREV_ID_5703_A1) || 14942 (tp->pci_chip_rev_id == CHIPREV_ID_5703_A2)) { 14943 static struct tg3_dev_id { 14944 u32 vendor; 14945 u32 device; 14946 u32 rev; 14947 } ich_chipsets[] = { 14948 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_8, 14949 PCI_ANY_ID }, 14950 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_8, 14951 PCI_ANY_ID }, 14952 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_11, 14953 0xa }, 14954 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_6, 14955 PCI_ANY_ID }, 14956 { }, 14957 }; 14958 struct tg3_dev_id *pci_id = &ich_chipsets[0]; 14959 struct pci_dev *bridge = NULL; 14960 14961 while (pci_id->vendor != 0) { 14962 bridge = pci_get_device(pci_id->vendor, pci_id->device, 14963 bridge); 14964 if (!bridge) { 14965 pci_id++; 14966 continue; 14967 } 14968 if (pci_id->rev != PCI_ANY_ID) { 14969 if (bridge->revision > pci_id->rev) 14970 continue; 14971 } 14972 if (bridge->subordinate && 14973 (bridge->subordinate->number == 14974 tp->pdev->bus->number)) { 14975 tg3_flag_set(tp, ICH_WORKAROUND); 14976 pci_dev_put(bridge); 14977 break; 14978 } 14979 } 14980 } 14981 14982 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 14983 static struct tg3_dev_id { 14984 u32 vendor; 14985 u32 device; 14986 } bridge_chipsets[] = { 14987 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0 }, 14988 { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1 }, 14989 { }, 14990 }; 14991 struct tg3_dev_id *pci_id = &bridge_chipsets[0]; 14992 struct pci_dev *bridge = NULL; 14993 14994 while (pci_id->vendor != 0) { 14995 bridge = pci_get_device(pci_id->vendor, 14996 pci_id->device, 14997 bridge); 14998 if (!bridge) { 14999 pci_id++; 15000 continue; 15001 } 15002 if (bridge->subordinate && 15003 (bridge->subordinate->number <= 15004 tp->pdev->bus->number) && 15005 (bridge->subordinate->busn_res.end >= 15006 tp->pdev->bus->number)) { 15007 tg3_flag_set(tp, 5701_DMA_BUG); 15008 pci_dev_put(bridge); 15009 break; 15010 } 15011 } 15012 } 15013 15014 /* The EPB bridge inside 5714, 5715, and 5780 cannot support 15015 * DMA addresses > 40-bit. This bridge may have other additional 15016 * 57xx devices behind it in some 4-port NIC designs for example. 15017 * Any tg3 device found behind the bridge will also need the 40-bit 15018 * DMA workaround. 15019 */ 15020 if (tg3_flag(tp, 5780_CLASS)) { 15021 tg3_flag_set(tp, 40BIT_DMA_BUG); 15022 tp->msi_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_MSI); 15023 } else { 15024 struct pci_dev *bridge = NULL; 15025 15026 do { 15027 bridge = pci_get_device(PCI_VENDOR_ID_SERVERWORKS, 15028 PCI_DEVICE_ID_SERVERWORKS_EPB, 15029 bridge); 15030 if (bridge && bridge->subordinate && 15031 (bridge->subordinate->number <= 15032 tp->pdev->bus->number) && 15033 (bridge->subordinate->busn_res.end >= 15034 tp->pdev->bus->number)) { 15035 tg3_flag_set(tp, 40BIT_DMA_BUG); 15036 pci_dev_put(bridge); 15037 break; 15038 } 15039 } while (bridge); 15040 } 15041 15042 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 15043 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) 15044 tp->pdev_peer = tg3_find_peer(tp); 15045 15046 /* Determine TSO capabilities */ 15047 if (tp->pci_chip_rev_id == CHIPREV_ID_5719_A0) 15048 ; /* Do nothing. HW bug. */ 15049 else if (tg3_flag(tp, 57765_PLUS)) 15050 tg3_flag_set(tp, HW_TSO_3); 15051 else if (tg3_flag(tp, 5755_PLUS) || 15052 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 15053 tg3_flag_set(tp, HW_TSO_2); 15054 else if (tg3_flag(tp, 5750_PLUS)) { 15055 tg3_flag_set(tp, HW_TSO_1); 15056 tg3_flag_set(tp, TSO_BUG); 15057 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 && 15058 tp->pci_chip_rev_id >= CHIPREV_ID_5750_C2) 15059 tg3_flag_clear(tp, TSO_BUG); 15060 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 15061 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 15062 tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) { 15063 tg3_flag_set(tp, TSO_BUG); 15064 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) 15065 tp->fw_needed = FIRMWARE_TG3TSO5; 15066 else 15067 tp->fw_needed = FIRMWARE_TG3TSO; 15068 } 15069 15070 /* Selectively allow TSO based on operating conditions */ 15071 if (tg3_flag(tp, HW_TSO_1) || 15072 tg3_flag(tp, HW_TSO_2) || 15073 tg3_flag(tp, HW_TSO_3) || 15074 tp->fw_needed) { 15075 /* For firmware TSO, assume ASF is disabled. 15076 * We'll disable TSO later if we discover ASF 15077 * is enabled in tg3_get_eeprom_hw_cfg(). 15078 */ 15079 tg3_flag_set(tp, TSO_CAPABLE); 15080 } else { 15081 tg3_flag_clear(tp, TSO_CAPABLE); 15082 tg3_flag_clear(tp, TSO_BUG); 15083 tp->fw_needed = NULL; 15084 } 15085 15086 if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0) 15087 tp->fw_needed = FIRMWARE_TG3; 15088 15089 tp->irq_max = 1; 15090 15091 if (tg3_flag(tp, 5750_PLUS)) { 15092 tg3_flag_set(tp, SUPPORT_MSI); 15093 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX || 15094 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX || 15095 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 && 15096 tp->pci_chip_rev_id <= CHIPREV_ID_5714_A2 && 15097 tp->pdev_peer == tp->pdev)) 15098 tg3_flag_clear(tp, SUPPORT_MSI); 15099 15100 if (tg3_flag(tp, 5755_PLUS) || 15101 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 15102 tg3_flag_set(tp, 1SHOT_MSI); 15103 } 15104 15105 if (tg3_flag(tp, 57765_PLUS)) { 15106 tg3_flag_set(tp, SUPPORT_MSIX); 15107 tp->irq_max = TG3_IRQ_MAX_VECS; 15108 } 15109 } 15110 15111 tp->txq_max = 1; 15112 tp->rxq_max = 1; 15113 if (tp->irq_max > 1) { 15114 tp->rxq_max = TG3_RSS_MAX_NUM_QS; 15115 tg3_rss_init_dflt_indir_tbl(tp, TG3_RSS_MAX_NUM_QS); 15116 15117 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 15118 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 15119 tp->txq_max = tp->irq_max - 1; 15120 } 15121 15122 if (tg3_flag(tp, 5755_PLUS) || 15123 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 15124 tg3_flag_set(tp, SHORT_DMA_BUG); 15125 15126 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719) 15127 tp->dma_limit = TG3_TX_BD_DMA_MAX_4K; 15128 15129 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 15130 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 15131 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 15132 tg3_flag_set(tp, LRG_PROD_RING_CAP); 15133 15134 if (tg3_flag(tp, 57765_PLUS) && 15135 tp->pci_chip_rev_id != CHIPREV_ID_5719_A0) 15136 tg3_flag_set(tp, USE_JUMBO_BDFLAG); 15137 15138 if (!tg3_flag(tp, 5705_PLUS) || 15139 tg3_flag(tp, 5780_CLASS) || 15140 tg3_flag(tp, USE_JUMBO_BDFLAG)) 15141 tg3_flag_set(tp, JUMBO_CAPABLE); 15142 15143 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 15144 &pci_state_reg); 15145 15146 if (pci_is_pcie(tp->pdev)) { 15147 u16 lnkctl; 15148 15149 tg3_flag_set(tp, PCI_EXPRESS); 15150 15151 pcie_capability_read_word(tp->pdev, PCI_EXP_LNKCTL, &lnkctl); 15152 if (lnkctl & PCI_EXP_LNKCTL_CLKREQ_EN) { 15153 if (GET_ASIC_REV(tp->pci_chip_rev_id) == 15154 ASIC_REV_5906) { 15155 tg3_flag_clear(tp, HW_TSO_2); 15156 tg3_flag_clear(tp, TSO_CAPABLE); 15157 } 15158 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 15159 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 15160 tp->pci_chip_rev_id == CHIPREV_ID_57780_A0 || 15161 tp->pci_chip_rev_id == CHIPREV_ID_57780_A1) 15162 tg3_flag_set(tp, CLKREQ_BUG); 15163 } else if (tp->pci_chip_rev_id == CHIPREV_ID_5717_A0) { 15164 tg3_flag_set(tp, L1PLLPD_EN); 15165 } 15166 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785) { 15167 /* BCM5785 devices are effectively PCIe devices, and should 15168 * follow PCIe codepaths, but do not have a PCIe capabilities 15169 * section. 15170 */ 15171 tg3_flag_set(tp, PCI_EXPRESS); 15172 } else if (!tg3_flag(tp, 5705_PLUS) || 15173 tg3_flag(tp, 5780_CLASS)) { 15174 tp->pcix_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_PCIX); 15175 if (!tp->pcix_cap) { 15176 dev_err(&tp->pdev->dev, 15177 "Cannot find PCI-X capability, aborting\n"); 15178 return -EIO; 15179 } 15180 15181 if (!(pci_state_reg & PCISTATE_CONV_PCI_MODE)) 15182 tg3_flag_set(tp, PCIX_MODE); 15183 } 15184 15185 /* If we have an AMD 762 or VIA K8T800 chipset, write 15186 * reordering to the mailbox registers done by the host 15187 * controller can cause major troubles. We read back from 15188 * every mailbox register write to force the writes to be 15189 * posted to the chip in order. 15190 */ 15191 if (pci_dev_present(tg3_write_reorder_chipsets) && 15192 !tg3_flag(tp, PCI_EXPRESS)) 15193 tg3_flag_set(tp, MBOX_WRITE_REORDER); 15194 15195 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, 15196 &tp->pci_cacheline_sz); 15197 pci_read_config_byte(tp->pdev, PCI_LATENCY_TIMER, 15198 &tp->pci_lat_timer); 15199 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 && 15200 tp->pci_lat_timer < 64) { 15201 tp->pci_lat_timer = 64; 15202 pci_write_config_byte(tp->pdev, PCI_LATENCY_TIMER, 15203 tp->pci_lat_timer); 15204 } 15205 15206 /* Important! -- It is critical that the PCI-X hw workaround 15207 * situation is decided before the first MMIO register access. 15208 */ 15209 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5700_BX) { 15210 /* 5700 BX chips need to have their TX producer index 15211 * mailboxes written twice to workaround a bug. 15212 */ 15213 tg3_flag_set(tp, TXD_MBOX_HWBUG); 15214 15215 /* If we are in PCI-X mode, enable register write workaround. 15216 * 15217 * The workaround is to use indirect register accesses 15218 * for all chip writes not to mailbox registers. 15219 */ 15220 if (tg3_flag(tp, PCIX_MODE)) { 15221 u32 pm_reg; 15222 15223 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 15224 15225 /* The chip can have it's power management PCI config 15226 * space registers clobbered due to this bug. 15227 * So explicitly force the chip into D0 here. 15228 */ 15229 pci_read_config_dword(tp->pdev, 15230 tp->pm_cap + PCI_PM_CTRL, 15231 &pm_reg); 15232 pm_reg &= ~PCI_PM_CTRL_STATE_MASK; 15233 pm_reg |= PCI_PM_CTRL_PME_ENABLE | 0 /* D0 */; 15234 pci_write_config_dword(tp->pdev, 15235 tp->pm_cap + PCI_PM_CTRL, 15236 pm_reg); 15237 15238 /* Also, force SERR#/PERR# in PCI command. */ 15239 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 15240 pci_cmd |= PCI_COMMAND_PARITY | PCI_COMMAND_SERR; 15241 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 15242 } 15243 } 15244 15245 if ((pci_state_reg & PCISTATE_BUS_SPEED_HIGH) != 0) 15246 tg3_flag_set(tp, PCI_HIGH_SPEED); 15247 if ((pci_state_reg & PCISTATE_BUS_32BIT) != 0) 15248 tg3_flag_set(tp, PCI_32BIT); 15249 15250 /* Chip-specific fixup from Broadcom driver */ 15251 if ((tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) && 15252 (!(pci_state_reg & PCISTATE_RETRY_SAME_DMA))) { 15253 pci_state_reg |= PCISTATE_RETRY_SAME_DMA; 15254 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, pci_state_reg); 15255 } 15256 15257 /* Default fast path register access methods */ 15258 tp->read32 = tg3_read32; 15259 tp->write32 = tg3_write32; 15260 tp->read32_mbox = tg3_read32; 15261 tp->write32_mbox = tg3_write32; 15262 tp->write32_tx_mbox = tg3_write32; 15263 tp->write32_rx_mbox = tg3_write32; 15264 15265 /* Various workaround register access methods */ 15266 if (tg3_flag(tp, PCIX_TARGET_HWBUG)) 15267 tp->write32 = tg3_write_indirect_reg32; 15268 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 || 15269 (tg3_flag(tp, PCI_EXPRESS) && 15270 tp->pci_chip_rev_id == CHIPREV_ID_5750_A0)) { 15271 /* 15272 * Back to back register writes can cause problems on these 15273 * chips, the workaround is to read back all reg writes 15274 * except those to mailbox regs. 15275 * 15276 * See tg3_write_indirect_reg32(). 15277 */ 15278 tp->write32 = tg3_write_flush_reg32; 15279 } 15280 15281 if (tg3_flag(tp, TXD_MBOX_HWBUG) || tg3_flag(tp, MBOX_WRITE_REORDER)) { 15282 tp->write32_tx_mbox = tg3_write32_tx_mbox; 15283 if (tg3_flag(tp, MBOX_WRITE_REORDER)) 15284 tp->write32_rx_mbox = tg3_write_flush_reg32; 15285 } 15286 15287 if (tg3_flag(tp, ICH_WORKAROUND)) { 15288 tp->read32 = tg3_read_indirect_reg32; 15289 tp->write32 = tg3_write_indirect_reg32; 15290 tp->read32_mbox = tg3_read_indirect_mbox; 15291 tp->write32_mbox = tg3_write_indirect_mbox; 15292 tp->write32_tx_mbox = tg3_write_indirect_mbox; 15293 tp->write32_rx_mbox = tg3_write_indirect_mbox; 15294 15295 iounmap(tp->regs); 15296 tp->regs = NULL; 15297 15298 pci_read_config_word(tp->pdev, PCI_COMMAND, &pci_cmd); 15299 pci_cmd &= ~PCI_COMMAND_MEMORY; 15300 pci_write_config_word(tp->pdev, PCI_COMMAND, pci_cmd); 15301 } 15302 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 15303 tp->read32_mbox = tg3_read32_mbox_5906; 15304 tp->write32_mbox = tg3_write32_mbox_5906; 15305 tp->write32_tx_mbox = tg3_write32_mbox_5906; 15306 tp->write32_rx_mbox = tg3_write32_mbox_5906; 15307 } 15308 15309 if (tp->write32 == tg3_write_indirect_reg32 || 15310 (tg3_flag(tp, PCIX_MODE) && 15311 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 15312 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701))) 15313 tg3_flag_set(tp, SRAM_USE_CONFIG); 15314 15315 /* The memory arbiter has to be enabled in order for SRAM accesses 15316 * to succeed. Normally on powerup the tg3 chip firmware will make 15317 * sure it is enabled, but other entities such as system netboot 15318 * code might disable it. 15319 */ 15320 val = tr32(MEMARB_MODE); 15321 tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); 15322 15323 tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; 15324 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 15325 tg3_flag(tp, 5780_CLASS)) { 15326 if (tg3_flag(tp, PCIX_MODE)) { 15327 pci_read_config_dword(tp->pdev, 15328 tp->pcix_cap + PCI_X_STATUS, 15329 &val); 15330 tp->pci_fn = val & 0x7; 15331 } 15332 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { 15333 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 15334 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) == 15335 NIC_SRAM_CPMUSTAT_SIG) { 15336 tp->pci_fn = val & TG3_CPMU_STATUS_FMSK_5717; 15337 tp->pci_fn = tp->pci_fn ? 1 : 0; 15338 } 15339 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 15340 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) { 15341 tg3_read_mem(tp, NIC_SRAM_CPMU_STATUS, &val); 15342 if ((val & NIC_SRAM_CPMUSTAT_SIG_MSK) == 15343 NIC_SRAM_CPMUSTAT_SIG) { 15344 tp->pci_fn = (val & TG3_CPMU_STATUS_FMSK_5719) >> 15345 TG3_CPMU_STATUS_FSHFT_5719; 15346 } 15347 } 15348 15349 /* Get eeprom hw config before calling tg3_set_power_state(). 15350 * In particular, the TG3_FLAG_IS_NIC flag must be 15351 * determined before calling tg3_set_power_state() so that 15352 * we know whether or not to switch out of Vaux power. 15353 * When the flag is set, it means that GPIO1 is used for eeprom 15354 * write protect and also implies that it is a LOM where GPIOs 15355 * are not used to switch power. 15356 */ 15357 tg3_get_eeprom_hw_cfg(tp); 15358 15359 if (tp->fw_needed && tg3_flag(tp, ENABLE_ASF)) { 15360 tg3_flag_clear(tp, TSO_CAPABLE); 15361 tg3_flag_clear(tp, TSO_BUG); 15362 tp->fw_needed = NULL; 15363 } 15364 15365 if (tg3_flag(tp, ENABLE_APE)) { 15366 /* Allow reads and writes to the 15367 * APE register and memory space. 15368 */ 15369 pci_state_reg |= PCISTATE_ALLOW_APE_CTLSPC_WR | 15370 PCISTATE_ALLOW_APE_SHMEM_WR | 15371 PCISTATE_ALLOW_APE_PSPACE_WR; 15372 pci_write_config_dword(tp->pdev, TG3PCI_PCISTATE, 15373 pci_state_reg); 15374 15375 tg3_ape_lock_init(tp); 15376 } 15377 15378 /* Set up tp->grc_local_ctrl before calling 15379 * tg3_pwrsrc_switch_to_vmain(). GPIO1 driven high 15380 * will bring 5700's external PHY out of reset. 15381 * It is also used as eeprom write protect on LOMs. 15382 */ 15383 tp->grc_local_ctrl = GRC_LCLCTRL_INT_ON_ATTN | GRC_LCLCTRL_AUTO_SEEPROM; 15384 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 15385 tg3_flag(tp, EEPROM_WRITE_PROT)) 15386 tp->grc_local_ctrl |= (GRC_LCLCTRL_GPIO_OE1 | 15387 GRC_LCLCTRL_GPIO_OUTPUT1); 15388 /* Unused GPIO3 must be driven as output on 5752 because there 15389 * are no pull-up resistors on unused GPIO pins. 15390 */ 15391 else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752) 15392 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE3; 15393 15394 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 15395 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || 15396 tg3_flag(tp, 57765_CLASS)) 15397 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 15398 15399 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 15400 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S) { 15401 /* Turn off the debug UART. */ 15402 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_UART_SEL; 15403 if (tg3_flag(tp, IS_NIC)) 15404 /* Keep VMain power. */ 15405 tp->grc_local_ctrl |= GRC_LCLCTRL_GPIO_OE0 | 15406 GRC_LCLCTRL_GPIO_OUTPUT0; 15407 } 15408 15409 /* Switch out of Vaux if it is a NIC */ 15410 tg3_pwrsrc_switch_to_vmain(tp); 15411 15412 /* Derive initial jumbo mode from MTU assigned in 15413 * ether_setup() via the alloc_etherdev() call 15414 */ 15415 if (tp->dev->mtu > ETH_DATA_LEN && !tg3_flag(tp, 5780_CLASS)) 15416 tg3_flag_set(tp, JUMBO_RING_ENABLE); 15417 15418 /* Determine WakeOnLan speed to use. */ 15419 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 15420 tp->pci_chip_rev_id == CHIPREV_ID_5701_A0 || 15421 tp->pci_chip_rev_id == CHIPREV_ID_5701_B0 || 15422 tp->pci_chip_rev_id == CHIPREV_ID_5701_B2) { 15423 tg3_flag_clear(tp, WOL_SPEED_100MB); 15424 } else { 15425 tg3_flag_set(tp, WOL_SPEED_100MB); 15426 } 15427 15428 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 15429 tp->phy_flags |= TG3_PHYFLG_IS_FET; 15430 15431 /* A few boards don't want Ethernet@WireSpeed phy feature */ 15432 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 15433 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 15434 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A0) && 15435 (tp->pci_chip_rev_id != CHIPREV_ID_5705_A1)) || 15436 (tp->phy_flags & TG3_PHYFLG_IS_FET) || 15437 (tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) 15438 tp->phy_flags |= TG3_PHYFLG_NO_ETH_WIRE_SPEED; 15439 15440 if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5703_AX || 15441 GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5704_AX) 15442 tp->phy_flags |= TG3_PHYFLG_ADC_BUG; 15443 if (tp->pci_chip_rev_id == CHIPREV_ID_5704_A0) 15444 tp->phy_flags |= TG3_PHYFLG_5704_A0_BUG; 15445 15446 if (tg3_flag(tp, 5705_PLUS) && 15447 !(tp->phy_flags & TG3_PHYFLG_IS_FET) && 15448 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && 15449 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 && 15450 !tg3_flag(tp, 57765_PLUS)) { 15451 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || 15452 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || 15453 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || 15454 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761) { 15455 if (tp->pdev->device != PCI_DEVICE_ID_TIGON3_5756 && 15456 tp->pdev->device != PCI_DEVICE_ID_TIGON3_5722) 15457 tp->phy_flags |= TG3_PHYFLG_JITTER_BUG; 15458 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5755M) 15459 tp->phy_flags |= TG3_PHYFLG_ADJUST_TRIM; 15460 } else 15461 tp->phy_flags |= TG3_PHYFLG_BER_BUG; 15462 } 15463 15464 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 15465 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) { 15466 tp->phy_otp = tg3_read_otp_phycfg(tp); 15467 if (tp->phy_otp == 0) 15468 tp->phy_otp = TG3_OTP_DEFAULT; 15469 } 15470 15471 if (tg3_flag(tp, CPMU_PRESENT)) 15472 tp->mi_mode = MAC_MI_MODE_500KHZ_CONST; 15473 else 15474 tp->mi_mode = MAC_MI_MODE_BASE; 15475 15476 tp->coalesce_mode = 0; 15477 if (GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_AX && 15478 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5700_BX) 15479 tp->coalesce_mode |= HOSTCC_MODE_32BYTE; 15480 15481 /* Set these bits to enable statistics workaround. */ 15482 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || 15483 tp->pci_chip_rev_id == CHIPREV_ID_5719_A0 || 15484 tp->pci_chip_rev_id == CHIPREV_ID_5720_A0) { 15485 tp->coalesce_mode |= HOSTCC_MODE_ATTN; 15486 tp->grc_mode |= GRC_MODE_IRQ_ON_FLOW_ATTN; 15487 } 15488 15489 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 15490 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 15491 tg3_flag_set(tp, USE_PHYLIB); 15492 15493 err = tg3_mdio_init(tp); 15494 if (err) 15495 return err; 15496 15497 /* Initialize data/descriptor byte/word swapping. */ 15498 val = tr32(GRC_MODE); 15499 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 15500 val &= (GRC_MODE_BYTE_SWAP_B2HRX_DATA | 15501 GRC_MODE_WORD_SWAP_B2HRX_DATA | 15502 GRC_MODE_B2HRX_ENABLE | 15503 GRC_MODE_HTX2B_ENABLE | 15504 GRC_MODE_HOST_STACKUP); 15505 else 15506 val &= GRC_MODE_HOST_STACKUP; 15507 15508 tw32(GRC_MODE, val | tp->grc_mode); 15509 15510 tg3_switch_clocks(tp); 15511 15512 /* Clear this out for sanity. */ 15513 tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); 15514 15515 pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, 15516 &pci_state_reg); 15517 if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && 15518 !tg3_flag(tp, PCIX_TARGET_HWBUG)) { 15519 u32 chiprevid = GET_CHIP_REV_ID(tp->misc_host_ctrl); 15520 15521 if (chiprevid == CHIPREV_ID_5701_A0 || 15522 chiprevid == CHIPREV_ID_5701_B0 || 15523 chiprevid == CHIPREV_ID_5701_B2 || 15524 chiprevid == CHIPREV_ID_5701_B5) { 15525 void __iomem *sram_base; 15526 15527 /* Write some dummy words into the SRAM status block 15528 * area, see if it reads back correctly. If the return 15529 * value is bad, force enable the PCIX workaround. 15530 */ 15531 sram_base = tp->regs + NIC_SRAM_WIN_BASE + NIC_SRAM_STATS_BLK; 15532 15533 writel(0x00000000, sram_base); 15534 writel(0x00000000, sram_base + 4); 15535 writel(0xffffffff, sram_base + 4); 15536 if (readl(sram_base) != 0x00000000) 15537 tg3_flag_set(tp, PCIX_TARGET_HWBUG); 15538 } 15539 } 15540 15541 udelay(50); 15542 tg3_nvram_init(tp); 15543 15544 grc_misc_cfg = tr32(GRC_MISC_CFG); 15545 grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; 15546 15547 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 && 15548 (grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788 || 15549 grc_misc_cfg == GRC_MISC_CFG_BOARD_ID_5788M)) 15550 tg3_flag_set(tp, IS_5788); 15551 15552 if (!tg3_flag(tp, IS_5788) && 15553 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700) 15554 tg3_flag_set(tp, TAGGED_STATUS); 15555 if (tg3_flag(tp, TAGGED_STATUS)) { 15556 tp->coalesce_mode |= (HOSTCC_MODE_CLRTICK_RXBD | 15557 HOSTCC_MODE_CLRTICK_TXBD); 15558 15559 tp->misc_host_ctrl |= MISC_HOST_CTRL_TAGGED_STATUS; 15560 pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, 15561 tp->misc_host_ctrl); 15562 } 15563 15564 /* Preserve the APE MAC_MODE bits */ 15565 if (tg3_flag(tp, ENABLE_APE)) 15566 tp->mac_mode = MAC_MODE_APE_TX_EN | MAC_MODE_APE_RX_EN; 15567 else 15568 tp->mac_mode = 0; 15569 15570 if (tg3_10_100_only_device(tp, ent)) 15571 tp->phy_flags |= TG3_PHYFLG_10_100_ONLY; 15572 15573 err = tg3_phy_probe(tp); 15574 if (err) { 15575 dev_err(&tp->pdev->dev, "phy probe failed, err %d\n", err); 15576 /* ... but do not return immediately ... */ 15577 tg3_mdio_fini(tp); 15578 } 15579 15580 tg3_read_vpd(tp); 15581 tg3_read_fw_ver(tp); 15582 15583 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) { 15584 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 15585 } else { 15586 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 15587 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 15588 else 15589 tp->phy_flags &= ~TG3_PHYFLG_USE_MI_INTERRUPT; 15590 } 15591 15592 /* 5700 {AX,BX} chips have a broken status block link 15593 * change bit implementation, so we must use the 15594 * status register in those cases. 15595 */ 15596 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700) 15597 tg3_flag_set(tp, USE_LINKCHG_REG); 15598 else 15599 tg3_flag_clear(tp, USE_LINKCHG_REG); 15600 15601 /* The led_ctrl is set during tg3_phy_probe, here we might 15602 * have to force the link status polling mechanism based 15603 * upon subsystem IDs. 15604 */ 15605 if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && 15606 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 && 15607 !(tp->phy_flags & TG3_PHYFLG_PHY_SERDES)) { 15608 tp->phy_flags |= TG3_PHYFLG_USE_MI_INTERRUPT; 15609 tg3_flag_set(tp, USE_LINKCHG_REG); 15610 } 15611 15612 /* For all SERDES we poll the MAC status register. */ 15613 if (tp->phy_flags & TG3_PHYFLG_PHY_SERDES) 15614 tg3_flag_set(tp, POLL_SERDES); 15615 else 15616 tg3_flag_clear(tp, POLL_SERDES); 15617 15618 tp->rx_offset = NET_SKB_PAD + NET_IP_ALIGN; 15619 tp->rx_copy_thresh = TG3_RX_COPY_THRESHOLD; 15620 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701 && 15621 tg3_flag(tp, PCIX_MODE)) { 15622 tp->rx_offset = NET_SKB_PAD; 15623 #ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 15624 tp->rx_copy_thresh = ~(u16)0; 15625 #endif 15626 } 15627 15628 tp->rx_std_ring_mask = TG3_RX_STD_RING_SIZE(tp) - 1; 15629 tp->rx_jmb_ring_mask = TG3_RX_JMB_RING_SIZE(tp) - 1; 15630 tp->rx_ret_ring_mask = tg3_rx_ret_ring_size(tp) - 1; 15631 15632 tp->rx_std_max_post = tp->rx_std_ring_mask + 1; 15633 15634 /* Increment the rx prod index on the rx std ring by at most 15635 * 8 for these chips to workaround hw errata. 15636 */ 15637 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || 15638 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || 15639 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) 15640 tp->rx_std_max_post = 8; 15641 15642 if (tg3_flag(tp, ASPM_WORKAROUND)) 15643 tp->pwrmgmt_thresh = tr32(PCIE_PWR_MGMT_THRESH) & 15644 PCIE_PWR_MGMT_L1_THRESH_MSK; 15645 15646 return err; 15647 } 15648 15649 #ifdef CONFIG_SPARC 15650 static int tg3_get_macaddr_sparc(struct tg3 *tp) 15651 { 15652 struct net_device *dev = tp->dev; 15653 struct pci_dev *pdev = tp->pdev; 15654 struct device_node *dp = pci_device_to_OF_node(pdev); 15655 const unsigned char *addr; 15656 int len; 15657 15658 addr = of_get_property(dp, "local-mac-address", &len); 15659 if (addr && len == 6) { 15660 memcpy(dev->dev_addr, addr, 6); 15661 memcpy(dev->perm_addr, dev->dev_addr, 6); 15662 return 0; 15663 } 15664 return -ENODEV; 15665 } 15666 15667 static int tg3_get_default_macaddr_sparc(struct tg3 *tp) 15668 { 15669 struct net_device *dev = tp->dev; 15670 15671 memcpy(dev->dev_addr, idprom->id_ethaddr, 6); 15672 memcpy(dev->perm_addr, idprom->id_ethaddr, 6); 15673 return 0; 15674 } 15675 #endif 15676 15677 static int tg3_get_device_address(struct tg3 *tp) 15678 { 15679 struct net_device *dev = tp->dev; 15680 u32 hi, lo, mac_offset; 15681 int addr_ok = 0; 15682 15683 #ifdef CONFIG_SPARC 15684 if (!tg3_get_macaddr_sparc(tp)) 15685 return 0; 15686 #endif 15687 15688 mac_offset = 0x7c; 15689 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || 15690 tg3_flag(tp, 5780_CLASS)) { 15691 if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) 15692 mac_offset = 0xcc; 15693 if (tg3_nvram_lock(tp)) 15694 tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); 15695 else 15696 tg3_nvram_unlock(tp); 15697 } else if (tg3_flag(tp, 5717_PLUS)) { 15698 if (tp->pci_fn & 1) 15699 mac_offset = 0xcc; 15700 if (tp->pci_fn > 1) 15701 mac_offset += 0x18c; 15702 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) 15703 mac_offset = 0x10; 15704 15705 /* First try to get it from MAC address mailbox. */ 15706 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_HIGH_MBOX, &hi); 15707 if ((hi >> 16) == 0x484b) { 15708 dev->dev_addr[0] = (hi >> 8) & 0xff; 15709 dev->dev_addr[1] = (hi >> 0) & 0xff; 15710 15711 tg3_read_mem(tp, NIC_SRAM_MAC_ADDR_LOW_MBOX, &lo); 15712 dev->dev_addr[2] = (lo >> 24) & 0xff; 15713 dev->dev_addr[3] = (lo >> 16) & 0xff; 15714 dev->dev_addr[4] = (lo >> 8) & 0xff; 15715 dev->dev_addr[5] = (lo >> 0) & 0xff; 15716 15717 /* Some old bootcode may report a 0 MAC address in SRAM */ 15718 addr_ok = is_valid_ether_addr(&dev->dev_addr[0]); 15719 } 15720 if (!addr_ok) { 15721 /* Next, try NVRAM. */ 15722 if (!tg3_flag(tp, NO_NVRAM) && 15723 !tg3_nvram_read_be32(tp, mac_offset + 0, &hi) && 15724 !tg3_nvram_read_be32(tp, mac_offset + 4, &lo)) { 15725 memcpy(&dev->dev_addr[0], ((char *)&hi) + 2, 2); 15726 memcpy(&dev->dev_addr[2], (char *)&lo, sizeof(lo)); 15727 } 15728 /* Finally just fetch it out of the MAC control regs. */ 15729 else { 15730 hi = tr32(MAC_ADDR_0_HIGH); 15731 lo = tr32(MAC_ADDR_0_LOW); 15732 15733 dev->dev_addr[5] = lo & 0xff; 15734 dev->dev_addr[4] = (lo >> 8) & 0xff; 15735 dev->dev_addr[3] = (lo >> 16) & 0xff; 15736 dev->dev_addr[2] = (lo >> 24) & 0xff; 15737 dev->dev_addr[1] = hi & 0xff; 15738 dev->dev_addr[0] = (hi >> 8) & 0xff; 15739 } 15740 } 15741 15742 if (!is_valid_ether_addr(&dev->dev_addr[0])) { 15743 #ifdef CONFIG_SPARC 15744 if (!tg3_get_default_macaddr_sparc(tp)) 15745 return 0; 15746 #endif 15747 return -EINVAL; 15748 } 15749 memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); 15750 return 0; 15751 } 15752 15753 #define BOUNDARY_SINGLE_CACHELINE 1 15754 #define BOUNDARY_MULTI_CACHELINE 2 15755 15756 static u32 tg3_calc_dma_bndry(struct tg3 *tp, u32 val) 15757 { 15758 int cacheline_size; 15759 u8 byte; 15760 int goal; 15761 15762 pci_read_config_byte(tp->pdev, PCI_CACHE_LINE_SIZE, &byte); 15763 if (byte == 0) 15764 cacheline_size = 1024; 15765 else 15766 cacheline_size = (int) byte * 4; 15767 15768 /* On 5703 and later chips, the boundary bits have no 15769 * effect. 15770 */ 15771 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 15772 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701 && 15773 !tg3_flag(tp, PCI_EXPRESS)) 15774 goto out; 15775 15776 #if defined(CONFIG_PPC64) || defined(CONFIG_IA64) || defined(CONFIG_PARISC) 15777 goal = BOUNDARY_MULTI_CACHELINE; 15778 #else 15779 #if defined(CONFIG_SPARC64) || defined(CONFIG_ALPHA) 15780 goal = BOUNDARY_SINGLE_CACHELINE; 15781 #else 15782 goal = 0; 15783 #endif 15784 #endif 15785 15786 if (tg3_flag(tp, 57765_PLUS)) { 15787 val = goal ? 0 : DMA_RWCTRL_DIS_CACHE_ALIGNMENT; 15788 goto out; 15789 } 15790 15791 if (!goal) 15792 goto out; 15793 15794 /* PCI controllers on most RISC systems tend to disconnect 15795 * when a device tries to burst across a cache-line boundary. 15796 * Therefore, letting tg3 do so just wastes PCI bandwidth. 15797 * 15798 * Unfortunately, for PCI-E there are only limited 15799 * write-side controls for this, and thus for reads 15800 * we will still get the disconnects. We'll also waste 15801 * these PCI cycles for both read and write for chips 15802 * other than 5700 and 5701 which do not implement the 15803 * boundary bits. 15804 */ 15805 if (tg3_flag(tp, PCIX_MODE) && !tg3_flag(tp, PCI_EXPRESS)) { 15806 switch (cacheline_size) { 15807 case 16: 15808 case 32: 15809 case 64: 15810 case 128: 15811 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15812 val |= (DMA_RWCTRL_READ_BNDRY_128_PCIX | 15813 DMA_RWCTRL_WRITE_BNDRY_128_PCIX); 15814 } else { 15815 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 15816 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 15817 } 15818 break; 15819 15820 case 256: 15821 val |= (DMA_RWCTRL_READ_BNDRY_256_PCIX | 15822 DMA_RWCTRL_WRITE_BNDRY_256_PCIX); 15823 break; 15824 15825 default: 15826 val |= (DMA_RWCTRL_READ_BNDRY_384_PCIX | 15827 DMA_RWCTRL_WRITE_BNDRY_384_PCIX); 15828 break; 15829 } 15830 } else if (tg3_flag(tp, PCI_EXPRESS)) { 15831 switch (cacheline_size) { 15832 case 16: 15833 case 32: 15834 case 64: 15835 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15836 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 15837 val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; 15838 break; 15839 } 15840 /* fallthrough */ 15841 case 128: 15842 default: 15843 val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; 15844 val |= DMA_RWCTRL_WRITE_BNDRY_128_PCIE; 15845 break; 15846 } 15847 } else { 15848 switch (cacheline_size) { 15849 case 16: 15850 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15851 val |= (DMA_RWCTRL_READ_BNDRY_16 | 15852 DMA_RWCTRL_WRITE_BNDRY_16); 15853 break; 15854 } 15855 /* fallthrough */ 15856 case 32: 15857 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15858 val |= (DMA_RWCTRL_READ_BNDRY_32 | 15859 DMA_RWCTRL_WRITE_BNDRY_32); 15860 break; 15861 } 15862 /* fallthrough */ 15863 case 64: 15864 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15865 val |= (DMA_RWCTRL_READ_BNDRY_64 | 15866 DMA_RWCTRL_WRITE_BNDRY_64); 15867 break; 15868 } 15869 /* fallthrough */ 15870 case 128: 15871 if (goal == BOUNDARY_SINGLE_CACHELINE) { 15872 val |= (DMA_RWCTRL_READ_BNDRY_128 | 15873 DMA_RWCTRL_WRITE_BNDRY_128); 15874 break; 15875 } 15876 /* fallthrough */ 15877 case 256: 15878 val |= (DMA_RWCTRL_READ_BNDRY_256 | 15879 DMA_RWCTRL_WRITE_BNDRY_256); 15880 break; 15881 case 512: 15882 val |= (DMA_RWCTRL_READ_BNDRY_512 | 15883 DMA_RWCTRL_WRITE_BNDRY_512); 15884 break; 15885 case 1024: 15886 default: 15887 val |= (DMA_RWCTRL_READ_BNDRY_1024 | 15888 DMA_RWCTRL_WRITE_BNDRY_1024); 15889 break; 15890 } 15891 } 15892 15893 out: 15894 return val; 15895 } 15896 15897 static int tg3_do_test_dma(struct tg3 *tp, u32 *buf, dma_addr_t buf_dma, 15898 int size, int to_device) 15899 { 15900 struct tg3_internal_buffer_desc test_desc; 15901 u32 sram_dma_descs; 15902 int i, ret; 15903 15904 sram_dma_descs = NIC_SRAM_DMA_DESC_POOL_BASE; 15905 15906 tw32(FTQ_RCVBD_COMP_FIFO_ENQDEQ, 0); 15907 tw32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ, 0); 15908 tw32(RDMAC_STATUS, 0); 15909 tw32(WDMAC_STATUS, 0); 15910 15911 tw32(BUFMGR_MODE, 0); 15912 tw32(FTQ_RESET, 0); 15913 15914 test_desc.addr_hi = ((u64) buf_dma) >> 32; 15915 test_desc.addr_lo = buf_dma & 0xffffffff; 15916 test_desc.nic_mbuf = 0x00002100; 15917 test_desc.len = size; 15918 15919 /* 15920 * HP ZX1 was seeing test failures for 5701 cards running at 33Mhz 15921 * the *second* time the tg3 driver was getting loaded after an 15922 * initial scan. 15923 * 15924 * Broadcom tells me: 15925 * ...the DMA engine is connected to the GRC block and a DMA 15926 * reset may affect the GRC block in some unpredictable way... 15927 * The behavior of resets to individual blocks has not been tested. 15928 * 15929 * Broadcom noted the GRC reset will also reset all sub-components. 15930 */ 15931 if (to_device) { 15932 test_desc.cqid_sqid = (13 << 8) | 2; 15933 15934 tw32_f(RDMAC_MODE, RDMAC_MODE_ENABLE); 15935 udelay(40); 15936 } else { 15937 test_desc.cqid_sqid = (16 << 8) | 7; 15938 15939 tw32_f(WDMAC_MODE, WDMAC_MODE_ENABLE); 15940 udelay(40); 15941 } 15942 test_desc.flags = 0x00000005; 15943 15944 for (i = 0; i < (sizeof(test_desc) / sizeof(u32)); i++) { 15945 u32 val; 15946 15947 val = *(((u32 *)&test_desc) + i); 15948 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 15949 sram_dma_descs + (i * sizeof(u32))); 15950 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_DATA, val); 15951 } 15952 pci_write_config_dword(tp->pdev, TG3PCI_MEM_WIN_BASE_ADDR, 0); 15953 15954 if (to_device) 15955 tw32(FTQ_DMA_HIGH_READ_FIFO_ENQDEQ, sram_dma_descs); 15956 else 15957 tw32(FTQ_DMA_HIGH_WRITE_FIFO_ENQDEQ, sram_dma_descs); 15958 15959 ret = -ENODEV; 15960 for (i = 0; i < 40; i++) { 15961 u32 val; 15962 15963 if (to_device) 15964 val = tr32(FTQ_RCVBD_COMP_FIFO_ENQDEQ); 15965 else 15966 val = tr32(FTQ_RCVDATA_COMP_FIFO_ENQDEQ); 15967 if ((val & 0xffff) == sram_dma_descs) { 15968 ret = 0; 15969 break; 15970 } 15971 15972 udelay(100); 15973 } 15974 15975 return ret; 15976 } 15977 15978 #define TEST_BUFFER_SIZE 0x2000 15979 15980 static DEFINE_PCI_DEVICE_TABLE(tg3_dma_wait_state_chipsets) = { 15981 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, PCI_DEVICE_ID_APPLE_UNI_N_PCI15) }, 15982 { }, 15983 }; 15984 15985 static int tg3_test_dma(struct tg3 *tp) 15986 { 15987 dma_addr_t buf_dma; 15988 u32 *buf, saved_dma_rwctrl; 15989 int ret = 0; 15990 15991 buf = dma_alloc_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, 15992 &buf_dma, GFP_KERNEL); 15993 if (!buf) { 15994 ret = -ENOMEM; 15995 goto out_nofree; 15996 } 15997 15998 tp->dma_rwctrl = ((0x7 << DMA_RWCTRL_PCI_WRITE_CMD_SHIFT) | 15999 (0x6 << DMA_RWCTRL_PCI_READ_CMD_SHIFT)); 16000 16001 tp->dma_rwctrl = tg3_calc_dma_bndry(tp, tp->dma_rwctrl); 16002 16003 if (tg3_flag(tp, 57765_PLUS)) 16004 goto out; 16005 16006 if (tg3_flag(tp, PCI_EXPRESS)) { 16007 /* DMA read watermark not used on PCIE */ 16008 tp->dma_rwctrl |= 0x00180000; 16009 } else if (!tg3_flag(tp, PCIX_MODE)) { 16010 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 || 16011 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750) 16012 tp->dma_rwctrl |= 0x003f0000; 16013 else 16014 tp->dma_rwctrl |= 0x003f000f; 16015 } else { 16016 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 16017 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) { 16018 u32 ccval = (tr32(TG3PCI_CLOCK_CTRL) & 0x1f); 16019 u32 read_water = 0x7; 16020 16021 /* If the 5704 is behind the EPB bridge, we can 16022 * do the less restrictive ONE_DMA workaround for 16023 * better performance. 16024 */ 16025 if (tg3_flag(tp, 40BIT_DMA_BUG) && 16026 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 16027 tp->dma_rwctrl |= 0x8000; 16028 else if (ccval == 0x6 || ccval == 0x7) 16029 tp->dma_rwctrl |= DMA_RWCTRL_ONE_DMA; 16030 16031 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703) 16032 read_water = 4; 16033 /* Set bit 23 to enable PCIX hw bug fix */ 16034 tp->dma_rwctrl |= 16035 (read_water << DMA_RWCTRL_READ_WATER_SHIFT) | 16036 (0x3 << DMA_RWCTRL_WRITE_WATER_SHIFT) | 16037 (1 << 23); 16038 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780) { 16039 /* 5780 always in PCIX mode */ 16040 tp->dma_rwctrl |= 0x00144000; 16041 } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714) { 16042 /* 5714 always in PCIX mode */ 16043 tp->dma_rwctrl |= 0x00148000; 16044 } else { 16045 tp->dma_rwctrl |= 0x001b000f; 16046 } 16047 } 16048 16049 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 || 16050 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) 16051 tp->dma_rwctrl &= 0xfffffff0; 16052 16053 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || 16054 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { 16055 /* Remove this if it causes problems for some boards. */ 16056 tp->dma_rwctrl |= DMA_RWCTRL_USE_MEM_READ_MULT; 16057 16058 /* On 5700/5701 chips, we need to set this bit. 16059 * Otherwise the chip will issue cacheline transactions 16060 * to streamable DMA memory with not all the byte 16061 * enables turned on. This is an error on several 16062 * RISC PCI controllers, in particular sparc64. 16063 * 16064 * On 5703/5704 chips, this bit has been reassigned 16065 * a different meaning. In particular, it is used 16066 * on those chips to enable a PCI-X workaround. 16067 */ 16068 tp->dma_rwctrl |= DMA_RWCTRL_ASSERT_ALL_BE; 16069 } 16070 16071 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 16072 16073 #if 0 16074 /* Unneeded, already done by tg3_get_invariants. */ 16075 tg3_switch_clocks(tp); 16076 #endif 16077 16078 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && 16079 GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) 16080 goto out; 16081 16082 /* It is best to perform DMA test with maximum write burst size 16083 * to expose the 5700/5701 write DMA bug. 16084 */ 16085 saved_dma_rwctrl = tp->dma_rwctrl; 16086 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 16087 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 16088 16089 while (1) { 16090 u32 *p = buf, i; 16091 16092 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) 16093 p[i] = i; 16094 16095 /* Send the buffer to the chip. */ 16096 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 1); 16097 if (ret) { 16098 dev_err(&tp->pdev->dev, 16099 "%s: Buffer write failed. err = %d\n", 16100 __func__, ret); 16101 break; 16102 } 16103 16104 #if 0 16105 /* validate data reached card RAM correctly. */ 16106 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 16107 u32 val; 16108 tg3_read_mem(tp, 0x2100 + (i*4), &val); 16109 if (le32_to_cpu(val) != p[i]) { 16110 dev_err(&tp->pdev->dev, 16111 "%s: Buffer corrupted on device! " 16112 "(%d != %d)\n", __func__, val, i); 16113 /* ret = -ENODEV here? */ 16114 } 16115 p[i] = 0; 16116 } 16117 #endif 16118 /* Now read it back. */ 16119 ret = tg3_do_test_dma(tp, buf, buf_dma, TEST_BUFFER_SIZE, 0); 16120 if (ret) { 16121 dev_err(&tp->pdev->dev, "%s: Buffer read failed. " 16122 "err = %d\n", __func__, ret); 16123 break; 16124 } 16125 16126 /* Verify it. */ 16127 for (i = 0; i < TEST_BUFFER_SIZE / sizeof(u32); i++) { 16128 if (p[i] == i) 16129 continue; 16130 16131 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 16132 DMA_RWCTRL_WRITE_BNDRY_16) { 16133 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 16134 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 16135 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 16136 break; 16137 } else { 16138 dev_err(&tp->pdev->dev, 16139 "%s: Buffer corrupted on read back! " 16140 "(%d != %d)\n", __func__, p[i], i); 16141 ret = -ENODEV; 16142 goto out; 16143 } 16144 } 16145 16146 if (i == (TEST_BUFFER_SIZE / sizeof(u32))) { 16147 /* Success. */ 16148 ret = 0; 16149 break; 16150 } 16151 } 16152 if ((tp->dma_rwctrl & DMA_RWCTRL_WRITE_BNDRY_MASK) != 16153 DMA_RWCTRL_WRITE_BNDRY_16) { 16154 /* DMA test passed without adjusting DMA boundary, 16155 * now look for chipsets that are known to expose the 16156 * DMA bug without failing the test. 16157 */ 16158 if (pci_dev_present(tg3_dma_wait_state_chipsets)) { 16159 tp->dma_rwctrl &= ~DMA_RWCTRL_WRITE_BNDRY_MASK; 16160 tp->dma_rwctrl |= DMA_RWCTRL_WRITE_BNDRY_16; 16161 } else { 16162 /* Safe to use the calculated DMA boundary. */ 16163 tp->dma_rwctrl = saved_dma_rwctrl; 16164 } 16165 16166 tw32(TG3PCI_DMA_RW_CTRL, tp->dma_rwctrl); 16167 } 16168 16169 out: 16170 dma_free_coherent(&tp->pdev->dev, TEST_BUFFER_SIZE, buf, buf_dma); 16171 out_nofree: 16172 return ret; 16173 } 16174 16175 static void tg3_init_bufmgr_config(struct tg3 *tp) 16176 { 16177 if (tg3_flag(tp, 57765_PLUS)) { 16178 tp->bufmgr_config.mbuf_read_dma_low_water = 16179 DEFAULT_MB_RDMA_LOW_WATER_5705; 16180 tp->bufmgr_config.mbuf_mac_rx_low_water = 16181 DEFAULT_MB_MACRX_LOW_WATER_57765; 16182 tp->bufmgr_config.mbuf_high_water = 16183 DEFAULT_MB_HIGH_WATER_57765; 16184 16185 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 16186 DEFAULT_MB_RDMA_LOW_WATER_5705; 16187 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 16188 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_57765; 16189 tp->bufmgr_config.mbuf_high_water_jumbo = 16190 DEFAULT_MB_HIGH_WATER_JUMBO_57765; 16191 } else if (tg3_flag(tp, 5705_PLUS)) { 16192 tp->bufmgr_config.mbuf_read_dma_low_water = 16193 DEFAULT_MB_RDMA_LOW_WATER_5705; 16194 tp->bufmgr_config.mbuf_mac_rx_low_water = 16195 DEFAULT_MB_MACRX_LOW_WATER_5705; 16196 tp->bufmgr_config.mbuf_high_water = 16197 DEFAULT_MB_HIGH_WATER_5705; 16198 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) { 16199 tp->bufmgr_config.mbuf_mac_rx_low_water = 16200 DEFAULT_MB_MACRX_LOW_WATER_5906; 16201 tp->bufmgr_config.mbuf_high_water = 16202 DEFAULT_MB_HIGH_WATER_5906; 16203 } 16204 16205 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 16206 DEFAULT_MB_RDMA_LOW_WATER_JUMBO_5780; 16207 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 16208 DEFAULT_MB_MACRX_LOW_WATER_JUMBO_5780; 16209 tp->bufmgr_config.mbuf_high_water_jumbo = 16210 DEFAULT_MB_HIGH_WATER_JUMBO_5780; 16211 } else { 16212 tp->bufmgr_config.mbuf_read_dma_low_water = 16213 DEFAULT_MB_RDMA_LOW_WATER; 16214 tp->bufmgr_config.mbuf_mac_rx_low_water = 16215 DEFAULT_MB_MACRX_LOW_WATER; 16216 tp->bufmgr_config.mbuf_high_water = 16217 DEFAULT_MB_HIGH_WATER; 16218 16219 tp->bufmgr_config.mbuf_read_dma_low_water_jumbo = 16220 DEFAULT_MB_RDMA_LOW_WATER_JUMBO; 16221 tp->bufmgr_config.mbuf_mac_rx_low_water_jumbo = 16222 DEFAULT_MB_MACRX_LOW_WATER_JUMBO; 16223 tp->bufmgr_config.mbuf_high_water_jumbo = 16224 DEFAULT_MB_HIGH_WATER_JUMBO; 16225 } 16226 16227 tp->bufmgr_config.dma_low_water = DEFAULT_DMA_LOW_WATER; 16228 tp->bufmgr_config.dma_high_water = DEFAULT_DMA_HIGH_WATER; 16229 } 16230 16231 static char *tg3_phy_string(struct tg3 *tp) 16232 { 16233 switch (tp->phy_id & TG3_PHY_ID_MASK) { 16234 case TG3_PHY_ID_BCM5400: return "5400"; 16235 case TG3_PHY_ID_BCM5401: return "5401"; 16236 case TG3_PHY_ID_BCM5411: return "5411"; 16237 case TG3_PHY_ID_BCM5701: return "5701"; 16238 case TG3_PHY_ID_BCM5703: return "5703"; 16239 case TG3_PHY_ID_BCM5704: return "5704"; 16240 case TG3_PHY_ID_BCM5705: return "5705"; 16241 case TG3_PHY_ID_BCM5750: return "5750"; 16242 case TG3_PHY_ID_BCM5752: return "5752"; 16243 case TG3_PHY_ID_BCM5714: return "5714"; 16244 case TG3_PHY_ID_BCM5780: return "5780"; 16245 case TG3_PHY_ID_BCM5755: return "5755"; 16246 case TG3_PHY_ID_BCM5787: return "5787"; 16247 case TG3_PHY_ID_BCM5784: return "5784"; 16248 case TG3_PHY_ID_BCM5756: return "5722/5756"; 16249 case TG3_PHY_ID_BCM5906: return "5906"; 16250 case TG3_PHY_ID_BCM5761: return "5761"; 16251 case TG3_PHY_ID_BCM5718C: return "5718C"; 16252 case TG3_PHY_ID_BCM5718S: return "5718S"; 16253 case TG3_PHY_ID_BCM57765: return "57765"; 16254 case TG3_PHY_ID_BCM5719C: return "5719C"; 16255 case TG3_PHY_ID_BCM5720C: return "5720C"; 16256 case TG3_PHY_ID_BCM8002: return "8002/serdes"; 16257 case 0: return "serdes"; 16258 default: return "unknown"; 16259 } 16260 } 16261 16262 static char *tg3_bus_string(struct tg3 *tp, char *str) 16263 { 16264 if (tg3_flag(tp, PCI_EXPRESS)) { 16265 strcpy(str, "PCI Express"); 16266 return str; 16267 } else if (tg3_flag(tp, PCIX_MODE)) { 16268 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f; 16269 16270 strcpy(str, "PCIX:"); 16271 16272 if ((clock_ctrl == 7) || 16273 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) == 16274 GRC_MISC_CFG_BOARD_ID_5704CIOBE)) 16275 strcat(str, "133MHz"); 16276 else if (clock_ctrl == 0) 16277 strcat(str, "33MHz"); 16278 else if (clock_ctrl == 2) 16279 strcat(str, "50MHz"); 16280 else if (clock_ctrl == 4) 16281 strcat(str, "66MHz"); 16282 else if (clock_ctrl == 6) 16283 strcat(str, "100MHz"); 16284 } else { 16285 strcpy(str, "PCI:"); 16286 if (tg3_flag(tp, PCI_HIGH_SPEED)) 16287 strcat(str, "66MHz"); 16288 else 16289 strcat(str, "33MHz"); 16290 } 16291 if (tg3_flag(tp, PCI_32BIT)) 16292 strcat(str, ":32-bit"); 16293 else 16294 strcat(str, ":64-bit"); 16295 return str; 16296 } 16297 16298 static void tg3_init_coal(struct tg3 *tp) 16299 { 16300 struct ethtool_coalesce *ec = &tp->coal; 16301 16302 memset(ec, 0, sizeof(*ec)); 16303 ec->cmd = ETHTOOL_GCOALESCE; 16304 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS; 16305 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS; 16306 ec->rx_max_coalesced_frames = LOW_RXMAX_FRAMES; 16307 ec->tx_max_coalesced_frames = LOW_TXMAX_FRAMES; 16308 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT; 16309 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT; 16310 ec->rx_max_coalesced_frames_irq = DEFAULT_RXCOAL_MAXF_INT; 16311 ec->tx_max_coalesced_frames_irq = DEFAULT_TXCOAL_MAXF_INT; 16312 ec->stats_block_coalesce_usecs = DEFAULT_STAT_COAL_TICKS; 16313 16314 if (tp->coalesce_mode & (HOSTCC_MODE_CLRTICK_RXBD | 16315 HOSTCC_MODE_CLRTICK_TXBD)) { 16316 ec->rx_coalesce_usecs = LOW_RXCOL_TICKS_CLRTCKS; 16317 ec->rx_coalesce_usecs_irq = DEFAULT_RXCOAL_TICK_INT_CLRTCKS; 16318 ec->tx_coalesce_usecs = LOW_TXCOL_TICKS_CLRTCKS; 16319 ec->tx_coalesce_usecs_irq = DEFAULT_TXCOAL_TICK_INT_CLRTCKS; 16320 } 16321 16322 if (tg3_flag(tp, 5705_PLUS)) { 16323 ec->rx_coalesce_usecs_irq = 0; 16324 ec->tx_coalesce_usecs_irq = 0; 16325 ec->stats_block_coalesce_usecs = 0; 16326 } 16327 } 16328 16329 static int tg3_init_one(struct pci_dev *pdev, 16330 const struct pci_device_id *ent) 16331 { 16332 struct net_device *dev; 16333 struct tg3 *tp; 16334 int i, err, pm_cap; 16335 u32 sndmbx, rcvmbx, intmbx; 16336 char str[40]; 16337 u64 dma_mask, persist_dma_mask; 16338 netdev_features_t features = 0; 16339 16340 printk_once(KERN_INFO "%s\n", version); 16341 16342 err = pci_enable_device(pdev); 16343 if (err) { 16344 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); 16345 return err; 16346 } 16347 16348 err = pci_request_regions(pdev, DRV_MODULE_NAME); 16349 if (err) { 16350 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n"); 16351 goto err_out_disable_pdev; 16352 } 16353 16354 pci_set_master(pdev); 16355 16356 /* Find power-management capability. */ 16357 pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); 16358 if (pm_cap == 0) { 16359 dev_err(&pdev->dev, 16360 "Cannot find Power Management capability, aborting\n"); 16361 err = -EIO; 16362 goto err_out_free_res; 16363 } 16364 16365 err = pci_set_power_state(pdev, PCI_D0); 16366 if (err) { 16367 dev_err(&pdev->dev, "Transition to D0 failed, aborting\n"); 16368 goto err_out_free_res; 16369 } 16370 16371 dev = alloc_etherdev_mq(sizeof(*tp), TG3_IRQ_MAX_VECS); 16372 if (!dev) { 16373 err = -ENOMEM; 16374 goto err_out_power_down; 16375 } 16376 16377 SET_NETDEV_DEV(dev, &pdev->dev); 16378 16379 tp = netdev_priv(dev); 16380 tp->pdev = pdev; 16381 tp->dev = dev; 16382 tp->pm_cap = pm_cap; 16383 tp->rx_mode = TG3_DEF_RX_MODE; 16384 tp->tx_mode = TG3_DEF_TX_MODE; 16385 tp->irq_sync = 1; 16386 16387 if (tg3_debug > 0) 16388 tp->msg_enable = tg3_debug; 16389 else 16390 tp->msg_enable = TG3_DEF_MSG_ENABLE; 16391 16392 /* The word/byte swap controls here control register access byte 16393 * swapping. DMA data byte swapping is controlled in the GRC_MODE 16394 * setting below. 16395 */ 16396 tp->misc_host_ctrl = 16397 MISC_HOST_CTRL_MASK_PCI_INT | 16398 MISC_HOST_CTRL_WORD_SWAP | 16399 MISC_HOST_CTRL_INDIR_ACCESS | 16400 MISC_HOST_CTRL_PCISTATE_RW; 16401 16402 /* The NONFRM (non-frame) byte/word swap controls take effect 16403 * on descriptor entries, anything which isn't packet data. 16404 * 16405 * The StrongARM chips on the board (one for tx, one for rx) 16406 * are running in big-endian mode. 16407 */ 16408 tp->grc_mode = (GRC_MODE_WSWAP_DATA | GRC_MODE_BSWAP_DATA | 16409 GRC_MODE_WSWAP_NONFRM_DATA); 16410 #ifdef __BIG_ENDIAN 16411 tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA; 16412 #endif 16413 spin_lock_init(&tp->lock); 16414 spin_lock_init(&tp->indirect_lock); 16415 INIT_WORK(&tp->reset_task, tg3_reset_task); 16416 16417 tp->regs = pci_ioremap_bar(pdev, BAR_0); 16418 if (!tp->regs) { 16419 dev_err(&pdev->dev, "Cannot map device registers, aborting\n"); 16420 err = -ENOMEM; 16421 goto err_out_free_dev; 16422 } 16423 16424 if (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761 || 16425 tp->pdev->device == PCI_DEVICE_ID_TIGON3_5761E || 16426 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761S || 16427 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5761SE || 16428 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717 || 16429 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717_C || 16430 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718 || 16431 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5719 || 16432 tp->pdev->device == TG3PCI_DEVICE_TIGON3_5720) { 16433 tg3_flag_set(tp, ENABLE_APE); 16434 tp->aperegs = pci_ioremap_bar(pdev, BAR_2); 16435 if (!tp->aperegs) { 16436 dev_err(&pdev->dev, 16437 "Cannot map APE registers, aborting\n"); 16438 err = -ENOMEM; 16439 goto err_out_iounmap; 16440 } 16441 } 16442 16443 tp->rx_pending = TG3_DEF_RX_RING_PENDING; 16444 tp->rx_jumbo_pending = TG3_DEF_RX_JUMBO_RING_PENDING; 16445 16446 dev->ethtool_ops = &tg3_ethtool_ops; 16447 dev->watchdog_timeo = TG3_TX_TIMEOUT; 16448 dev->netdev_ops = &tg3_netdev_ops; 16449 dev->irq = pdev->irq; 16450 16451 err = tg3_get_invariants(tp, ent); 16452 if (err) { 16453 dev_err(&pdev->dev, 16454 "Problem fetching invariants of chip, aborting\n"); 16455 goto err_out_apeunmap; 16456 } 16457 16458 /* The EPB bridge inside 5714, 5715, and 5780 and any 16459 * device behind the EPB cannot support DMA addresses > 40-bit. 16460 * On 64-bit systems with IOMMU, use 40-bit dma_mask. 16461 * On 64-bit systems without IOMMU, use 64-bit dma_mask and 16462 * do DMA address check in tg3_start_xmit(). 16463 */ 16464 if (tg3_flag(tp, IS_5788)) 16465 persist_dma_mask = dma_mask = DMA_BIT_MASK(32); 16466 else if (tg3_flag(tp, 40BIT_DMA_BUG)) { 16467 persist_dma_mask = dma_mask = DMA_BIT_MASK(40); 16468 #ifdef CONFIG_HIGHMEM 16469 dma_mask = DMA_BIT_MASK(64); 16470 #endif 16471 } else 16472 persist_dma_mask = dma_mask = DMA_BIT_MASK(64); 16473 16474 /* Configure DMA attributes. */ 16475 if (dma_mask > DMA_BIT_MASK(32)) { 16476 err = pci_set_dma_mask(pdev, dma_mask); 16477 if (!err) { 16478 features |= NETIF_F_HIGHDMA; 16479 err = pci_set_consistent_dma_mask(pdev, 16480 persist_dma_mask); 16481 if (err < 0) { 16482 dev_err(&pdev->dev, "Unable to obtain 64 bit " 16483 "DMA for consistent allocations\n"); 16484 goto err_out_apeunmap; 16485 } 16486 } 16487 } 16488 if (err || dma_mask == DMA_BIT_MASK(32)) { 16489 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 16490 if (err) { 16491 dev_err(&pdev->dev, 16492 "No usable DMA configuration, aborting\n"); 16493 goto err_out_apeunmap; 16494 } 16495 } 16496 16497 tg3_init_bufmgr_config(tp); 16498 16499 features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 16500 16501 /* 5700 B0 chips do not support checksumming correctly due 16502 * to hardware bugs. 16503 */ 16504 if (tp->pci_chip_rev_id != CHIPREV_ID_5700_B0) { 16505 features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_RXCSUM; 16506 16507 if (tg3_flag(tp, 5755_PLUS)) 16508 features |= NETIF_F_IPV6_CSUM; 16509 } 16510 16511 /* TSO is on by default on chips that support hardware TSO. 16512 * Firmware TSO on older chips gives lower performance, so it 16513 * is off by default, but can be enabled using ethtool. 16514 */ 16515 if ((tg3_flag(tp, HW_TSO_1) || 16516 tg3_flag(tp, HW_TSO_2) || 16517 tg3_flag(tp, HW_TSO_3)) && 16518 (features & NETIF_F_IP_CSUM)) 16519 features |= NETIF_F_TSO; 16520 if (tg3_flag(tp, HW_TSO_2) || tg3_flag(tp, HW_TSO_3)) { 16521 if (features & NETIF_F_IPV6_CSUM) 16522 features |= NETIF_F_TSO6; 16523 if (tg3_flag(tp, HW_TSO_3) || 16524 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || 16525 (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && 16526 GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) || 16527 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || 16528 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) 16529 features |= NETIF_F_TSO_ECN; 16530 } 16531 16532 dev->features |= features; 16533 dev->vlan_features |= features; 16534 16535 /* 16536 * Add loopback capability only for a subset of devices that support 16537 * MAC-LOOPBACK. Eventually this need to be enhanced to allow INT-PHY 16538 * loopback for the remaining devices. 16539 */ 16540 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5780 && 16541 !tg3_flag(tp, CPMU_PRESENT)) 16542 /* Add the loopback capability */ 16543 features |= NETIF_F_LOOPBACK; 16544 16545 dev->hw_features |= features; 16546 16547 if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A1 && 16548 !tg3_flag(tp, TSO_CAPABLE) && 16549 !(tr32(TG3PCI_PCISTATE) & PCISTATE_BUS_SPEED_HIGH)) { 16550 tg3_flag_set(tp, MAX_RXPEND_64); 16551 tp->rx_pending = 63; 16552 } 16553 16554 err = tg3_get_device_address(tp); 16555 if (err) { 16556 dev_err(&pdev->dev, 16557 "Could not obtain valid ethernet address, aborting\n"); 16558 goto err_out_apeunmap; 16559 } 16560 16561 /* 16562 * Reset chip in case UNDI or EFI driver did not shutdown 16563 * DMA self test will enable WDMAC and we'll see (spurious) 16564 * pending DMA on the PCI bus at that point. 16565 */ 16566 if ((tr32(HOSTCC_MODE) & HOSTCC_MODE_ENABLE) || 16567 (tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { 16568 tw32(MEMARB_MODE, MEMARB_MODE_ENABLE); 16569 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 16570 } 16571 16572 err = tg3_test_dma(tp); 16573 if (err) { 16574 dev_err(&pdev->dev, "DMA engine test failed, aborting\n"); 16575 goto err_out_apeunmap; 16576 } 16577 16578 intmbx = MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW; 16579 rcvmbx = MAILBOX_RCVRET_CON_IDX_0 + TG3_64BIT_REG_LOW; 16580 sndmbx = MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW; 16581 for (i = 0; i < tp->irq_max; i++) { 16582 struct tg3_napi *tnapi = &tp->napi[i]; 16583 16584 tnapi->tp = tp; 16585 tnapi->tx_pending = TG3_DEF_TX_RING_PENDING; 16586 16587 tnapi->int_mbox = intmbx; 16588 if (i <= 4) 16589 intmbx += 0x8; 16590 else 16591 intmbx += 0x4; 16592 16593 tnapi->consmbox = rcvmbx; 16594 tnapi->prodmbox = sndmbx; 16595 16596 if (i) 16597 tnapi->coal_now = HOSTCC_MODE_COAL_VEC1_NOW << (i - 1); 16598 else 16599 tnapi->coal_now = HOSTCC_MODE_NOW; 16600 16601 if (!tg3_flag(tp, SUPPORT_MSIX)) 16602 break; 16603 16604 /* 16605 * If we support MSIX, we'll be using RSS. If we're using 16606 * RSS, the first vector only handles link interrupts and the 16607 * remaining vectors handle rx and tx interrupts. Reuse the 16608 * mailbox values for the next iteration. The values we setup 16609 * above are still useful for the single vectored mode. 16610 */ 16611 if (!i) 16612 continue; 16613 16614 rcvmbx += 0x8; 16615 16616 if (sndmbx & 0x4) 16617 sndmbx -= 0x4; 16618 else 16619 sndmbx += 0xc; 16620 } 16621 16622 tg3_init_coal(tp); 16623 16624 pci_set_drvdata(pdev, dev); 16625 16626 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || 16627 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5720) 16628 tg3_flag_set(tp, PTP_CAPABLE); 16629 16630 if (tg3_flag(tp, 5717_PLUS)) { 16631 /* Resume a low-power mode */ 16632 tg3_frob_aux_power(tp, false); 16633 } 16634 16635 tg3_timer_init(tp); 16636 16637 err = register_netdev(dev); 16638 if (err) { 16639 dev_err(&pdev->dev, "Cannot register net device, aborting\n"); 16640 goto err_out_apeunmap; 16641 } 16642 16643 netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", 16644 tp->board_part_number, 16645 tp->pci_chip_rev_id, 16646 tg3_bus_string(tp, str), 16647 dev->dev_addr); 16648 16649 if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { 16650 struct phy_device *phydev; 16651 phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; 16652 netdev_info(dev, 16653 "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n", 16654 phydev->drv->name, dev_name(&phydev->dev)); 16655 } else { 16656 char *ethtype; 16657 16658 if (tp->phy_flags & TG3_PHYFLG_10_100_ONLY) 16659 ethtype = "10/100Base-TX"; 16660 else if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) 16661 ethtype = "1000Base-SX"; 16662 else 16663 ethtype = "10/100/1000Base-T"; 16664 16665 netdev_info(dev, "attached PHY is %s (%s Ethernet) " 16666 "(WireSpeed[%d], EEE[%d])\n", 16667 tg3_phy_string(tp), ethtype, 16668 (tp->phy_flags & TG3_PHYFLG_NO_ETH_WIRE_SPEED) == 0, 16669 (tp->phy_flags & TG3_PHYFLG_EEE_CAP) != 0); 16670 } 16671 16672 netdev_info(dev, "RXcsums[%d] LinkChgREG[%d] MIirq[%d] ASF[%d] TSOcap[%d]\n", 16673 (dev->features & NETIF_F_RXCSUM) != 0, 16674 tg3_flag(tp, USE_LINKCHG_REG) != 0, 16675 (tp->phy_flags & TG3_PHYFLG_USE_MI_INTERRUPT) != 0, 16676 tg3_flag(tp, ENABLE_ASF) != 0, 16677 tg3_flag(tp, TSO_CAPABLE) != 0); 16678 netdev_info(dev, "dma_rwctrl[%08x] dma_mask[%d-bit]\n", 16679 tp->dma_rwctrl, 16680 pdev->dma_mask == DMA_BIT_MASK(32) ? 32 : 16681 ((u64)pdev->dma_mask) == DMA_BIT_MASK(40) ? 40 : 64); 16682 16683 pci_save_state(pdev); 16684 16685 return 0; 16686 16687 err_out_apeunmap: 16688 if (tp->aperegs) { 16689 iounmap(tp->aperegs); 16690 tp->aperegs = NULL; 16691 } 16692 16693 err_out_iounmap: 16694 if (tp->regs) { 16695 iounmap(tp->regs); 16696 tp->regs = NULL; 16697 } 16698 16699 err_out_free_dev: 16700 free_netdev(dev); 16701 16702 err_out_power_down: 16703 pci_set_power_state(pdev, PCI_D3hot); 16704 16705 err_out_free_res: 16706 pci_release_regions(pdev); 16707 16708 err_out_disable_pdev: 16709 pci_disable_device(pdev); 16710 pci_set_drvdata(pdev, NULL); 16711 return err; 16712 } 16713 16714 static void tg3_remove_one(struct pci_dev *pdev) 16715 { 16716 struct net_device *dev = pci_get_drvdata(pdev); 16717 16718 if (dev) { 16719 struct tg3 *tp = netdev_priv(dev); 16720 16721 release_firmware(tp->fw); 16722 16723 tg3_reset_task_cancel(tp); 16724 16725 if (tg3_flag(tp, USE_PHYLIB)) { 16726 tg3_phy_fini(tp); 16727 tg3_mdio_fini(tp); 16728 } 16729 16730 unregister_netdev(dev); 16731 if (tp->aperegs) { 16732 iounmap(tp->aperegs); 16733 tp->aperegs = NULL; 16734 } 16735 if (tp->regs) { 16736 iounmap(tp->regs); 16737 tp->regs = NULL; 16738 } 16739 free_netdev(dev); 16740 pci_release_regions(pdev); 16741 pci_disable_device(pdev); 16742 pci_set_drvdata(pdev, NULL); 16743 } 16744 } 16745 16746 #ifdef CONFIG_PM_SLEEP 16747 static int tg3_suspend(struct device *device) 16748 { 16749 struct pci_dev *pdev = to_pci_dev(device); 16750 struct net_device *dev = pci_get_drvdata(pdev); 16751 struct tg3 *tp = netdev_priv(dev); 16752 int err; 16753 16754 if (!netif_running(dev)) 16755 return 0; 16756 16757 tg3_reset_task_cancel(tp); 16758 tg3_phy_stop(tp); 16759 tg3_netif_stop(tp); 16760 16761 tg3_timer_stop(tp); 16762 16763 tg3_full_lock(tp, 1); 16764 tg3_disable_ints(tp); 16765 tg3_full_unlock(tp); 16766 16767 netif_device_detach(dev); 16768 16769 tg3_full_lock(tp, 0); 16770 tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); 16771 tg3_flag_clear(tp, INIT_COMPLETE); 16772 tg3_full_unlock(tp); 16773 16774 err = tg3_power_down_prepare(tp); 16775 if (err) { 16776 int err2; 16777 16778 tg3_full_lock(tp, 0); 16779 16780 tg3_flag_set(tp, INIT_COMPLETE); 16781 err2 = tg3_restart_hw(tp, 1); 16782 if (err2) 16783 goto out; 16784 16785 tg3_timer_start(tp); 16786 16787 netif_device_attach(dev); 16788 tg3_netif_start(tp); 16789 16790 out: 16791 tg3_full_unlock(tp); 16792 16793 if (!err2) 16794 tg3_phy_start(tp); 16795 } 16796 16797 return err; 16798 } 16799 16800 static int tg3_resume(struct device *device) 16801 { 16802 struct pci_dev *pdev = to_pci_dev(device); 16803 struct net_device *dev = pci_get_drvdata(pdev); 16804 struct tg3 *tp = netdev_priv(dev); 16805 int err; 16806 16807 if (!netif_running(dev)) 16808 return 0; 16809 16810 netif_device_attach(dev); 16811 16812 tg3_full_lock(tp, 0); 16813 16814 tg3_flag_set(tp, INIT_COMPLETE); 16815 err = tg3_restart_hw(tp, 1); 16816 if (err) 16817 goto out; 16818 16819 tg3_timer_start(tp); 16820 16821 tg3_netif_start(tp); 16822 16823 out: 16824 tg3_full_unlock(tp); 16825 16826 if (!err) 16827 tg3_phy_start(tp); 16828 16829 return err; 16830 } 16831 16832 static SIMPLE_DEV_PM_OPS(tg3_pm_ops, tg3_suspend, tg3_resume); 16833 #define TG3_PM_OPS (&tg3_pm_ops) 16834 16835 #else 16836 16837 #define TG3_PM_OPS NULL 16838 16839 #endif /* CONFIG_PM_SLEEP */ 16840 16841 /** 16842 * tg3_io_error_detected - called when PCI error is detected 16843 * @pdev: Pointer to PCI device 16844 * @state: The current pci connection state 16845 * 16846 * This function is called after a PCI bus error affecting 16847 * this device has been detected. 16848 */ 16849 static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, 16850 pci_channel_state_t state) 16851 { 16852 struct net_device *netdev = pci_get_drvdata(pdev); 16853 struct tg3 *tp = netdev_priv(netdev); 16854 pci_ers_result_t err = PCI_ERS_RESULT_NEED_RESET; 16855 16856 netdev_info(netdev, "PCI I/O error detected\n"); 16857 16858 rtnl_lock(); 16859 16860 if (!netif_running(netdev)) 16861 goto done; 16862 16863 tg3_phy_stop(tp); 16864 16865 tg3_netif_stop(tp); 16866 16867 tg3_timer_stop(tp); 16868 16869 /* Want to make sure that the reset task doesn't run */ 16870 tg3_reset_task_cancel(tp); 16871 16872 netif_device_detach(netdev); 16873 16874 /* Clean up software state, even if MMIO is blocked */ 16875 tg3_full_lock(tp, 0); 16876 tg3_halt(tp, RESET_KIND_SHUTDOWN, 0); 16877 tg3_full_unlock(tp); 16878 16879 done: 16880 if (state == pci_channel_io_perm_failure) 16881 err = PCI_ERS_RESULT_DISCONNECT; 16882 else 16883 pci_disable_device(pdev); 16884 16885 rtnl_unlock(); 16886 16887 return err; 16888 } 16889 16890 /** 16891 * tg3_io_slot_reset - called after the pci bus has been reset. 16892 * @pdev: Pointer to PCI device 16893 * 16894 * Restart the card from scratch, as if from a cold-boot. 16895 * At this point, the card has exprienced a hard reset, 16896 * followed by fixups by BIOS, and has its config space 16897 * set up identically to what it was at cold boot. 16898 */ 16899 static pci_ers_result_t tg3_io_slot_reset(struct pci_dev *pdev) 16900 { 16901 struct net_device *netdev = pci_get_drvdata(pdev); 16902 struct tg3 *tp = netdev_priv(netdev); 16903 pci_ers_result_t rc = PCI_ERS_RESULT_DISCONNECT; 16904 int err; 16905 16906 rtnl_lock(); 16907 16908 if (pci_enable_device(pdev)) { 16909 netdev_err(netdev, "Cannot re-enable PCI device after reset.\n"); 16910 goto done; 16911 } 16912 16913 pci_set_master(pdev); 16914 pci_restore_state(pdev); 16915 pci_save_state(pdev); 16916 16917 if (!netif_running(netdev)) { 16918 rc = PCI_ERS_RESULT_RECOVERED; 16919 goto done; 16920 } 16921 16922 err = tg3_power_up(tp); 16923 if (err) 16924 goto done; 16925 16926 rc = PCI_ERS_RESULT_RECOVERED; 16927 16928 done: 16929 rtnl_unlock(); 16930 16931 return rc; 16932 } 16933 16934 /** 16935 * tg3_io_resume - called when traffic can start flowing again. 16936 * @pdev: Pointer to PCI device 16937 * 16938 * This callback is called when the error recovery driver tells 16939 * us that its OK to resume normal operation. 16940 */ 16941 static void tg3_io_resume(struct pci_dev *pdev) 16942 { 16943 struct net_device *netdev = pci_get_drvdata(pdev); 16944 struct tg3 *tp = netdev_priv(netdev); 16945 int err; 16946 16947 rtnl_lock(); 16948 16949 if (!netif_running(netdev)) 16950 goto done; 16951 16952 tg3_full_lock(tp, 0); 16953 tg3_flag_set(tp, INIT_COMPLETE); 16954 err = tg3_restart_hw(tp, 1); 16955 if (err) { 16956 tg3_full_unlock(tp); 16957 netdev_err(netdev, "Cannot restart hardware after reset.\n"); 16958 goto done; 16959 } 16960 16961 netif_device_attach(netdev); 16962 16963 tg3_timer_start(tp); 16964 16965 tg3_netif_start(tp); 16966 16967 tg3_full_unlock(tp); 16968 16969 tg3_phy_start(tp); 16970 16971 done: 16972 rtnl_unlock(); 16973 } 16974 16975 static const struct pci_error_handlers tg3_err_handler = { 16976 .error_detected = tg3_io_error_detected, 16977 .slot_reset = tg3_io_slot_reset, 16978 .resume = tg3_io_resume 16979 }; 16980 16981 static struct pci_driver tg3_driver = { 16982 .name = DRV_MODULE_NAME, 16983 .id_table = tg3_pci_tbl, 16984 .probe = tg3_init_one, 16985 .remove = tg3_remove_one, 16986 .err_handler = &tg3_err_handler, 16987 .driver.pm = TG3_PM_OPS, 16988 }; 16989 16990 static int __init tg3_init(void) 16991 { 16992 return pci_register_driver(&tg3_driver); 16993 } 16994 16995 static void __exit tg3_cleanup(void) 16996 { 16997 pci_unregister_driver(&tg3_driver); 16998 } 16999 17000 module_init(tg3_init); 17001 module_exit(tg3_cleanup); 17002